Date: Mon, 8 Apr 2002 13:00:41 -0700 (PDT) From: Doug Ambrisko <ambrisko@ambrisko.com> To: freebsd-net@ambrisko.com Subject: Review for BOOTP/DHCP Vendor identifier Message-ID: <200204082003.g38K3IF74682@ambrisko.com>
next in thread | raw e-mail | index | archive | help
I put together a patch that adds option 60 to the FreeBSD kernel BOOTP code.
I fill in the vendor indentifier string as:
<ostype>:<MACHINE>:<osrelease>
partially based on how NetBSD does it. However, NetBSD uses this format:
<ostype>:<MACHINE>:kernel:<osrelease>
I wonder how usefull the "kernel" part is. Should we just do it to
follow suit with NetBSD. I'm thinking we probably should do it the
same way as NetBSD.
Note I started on adding this code and then looked at what NetBSD did.
I can add similar code to the pxeboot loader.
The goal is that via the vendor identifier I can have various OS and
BOOTP/DHCP configured type things get the right info at the right
time and avoid tag conflicts. I think the <MACHINE> part would be
useful for those that netboot various different types off one server.
Attached is my patch to -current. After a review I'd like to commit
something like this.
TIA for a review,
Doug A.
Index: bootp_subr.c
===================================================================
RCS file: /cvs/src/sys/nfsclient/bootp_subr.c,v
retrieving revision 1.35
diff -u -r1.35 bootp_subr.c
--- bootp_subr.c 28 Feb 2002 03:07:35 -0000 1.35
+++ bootp_subr.c 8 Apr 2002 19:44:16 -0000
@@ -55,6 +55,7 @@
#include <sys/proc.h>
#include <sys/socket.h>
#include <sys/socketvar.h>
+#include <sys/sysctl.h>
#include <sys/uio.h>
#include <net/if.h>
@@ -203,6 +204,8 @@
#define TAG_DHCP_SERVERID 54
#define TAG_DHCP_LEASETIME 51
+#define TAG_VENDOR_INDENTIFIER 60
+
#define DHCP_NOMSG 0
#define DHCP_DISCOVER 1
#define DHCP_OFFER 2
@@ -1303,7 +1306,9 @@
struct bootpc_globalcontext *gctx, struct thread *td)
{
unsigned char *vendp;
+ unsigned char vendor_client[64];
uint32_t leasetime;
+ uint8_t vendor_client_len;
ifctx->gotrootpath = 0;
@@ -1328,6 +1333,14 @@
*vendp++ = 2;
*vendp++ = (sizeof(struct bootp_packet) >> 8) & 255;
*vendp++ = sizeof(struct bootp_packet) & 255;
+
+ snprintf(vendor_client, sizeof(vendor_client), "%s:%s:%s",
+ ostype, MACHINE, osrelease);
+ vendor_client_len = strlen(vendor_client);
+ *vendp++ = TAG_VENDOR_INDENTIFIER;
+ *vendp++ = vendor_client_len;
+ memcpy(vendp, vendor_client, vendor_client_len);
+ vendp += vendor_client_len;;
ifctx->dhcpquerytype = DHCP_NOMSG;
switch (ifctx->state) {
case IF_DHCP_UNRESOLVED:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-net" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200204082003.g38K3IF74682>
