add support for setting the dhcp vendor class option (option 60).  
udhcpc now has a -V (--vendorclass), which will replace the default
"udhcpRELEASE" string in this option.

diff --git a/networking/udhcp/README.udhcpc b/networking/udhcp/README.udhcpc
index e19bf37..0417ff2 100644
--- a/networking/udhcp/README.udhcpc
+++ b/networking/udhcp/README.udhcpc
@@ -10,7 +10,9 @@
 
 The command line options for the udhcp client are:
 
--c, --clientid=CLIENTID         Client identifier
+-c, --clientid=CLIENTID         Set client identifier.  Type is first char.
+-C, --clientid-none             Suppress default client identifier
+-V, --vendorclass=CLASSID       Set vendor class identifier
 -H, --hostname=HOSTNAME         Client hostname
 -h,                             Alias for -H
 -F, --fqdn=FQDN                 Client fully qualified domain name
diff --git a/networking/udhcp/clientpacket.c b/networking/udhcp/clientpacket.c
index 2695b06..528befd 100644
--- a/networking/udhcp/clientpacket.c
+++ b/networking/udhcp/clientpacket.c
@@ -69,18 +69,13 @@
 /* initialize a packet with the proper defaults */
 static void init_packet(struct dhcpMessage *packet, char type)
 {
-	struct vendor  {
-		char vendor, length;
-		char str[sizeof("udhcp "VERSION)];
-	} vendor_id = { DHCP_VENDOR,  sizeof("udhcp "VERSION) - 1, "udhcp "VERSION};
-
 	init_header(packet, type);
 	memcpy(packet->chaddr, client_config.arp, 6);
 	if (client_config.clientid)
 	    add_option_string(packet->options, client_config.clientid);
 	if (client_config.hostname) add_option_string(packet->options, client_config.hostname);
 	if (client_config.fqdn) add_option_string(packet->options, client_config.fqdn);
-	add_option_string(packet->options, (uint8_t *) &vendor_id);
+	add_option_string(packet->options, client_config.vendorclass);
 }
 
 
diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c
index 35ae757..48923f6 100644
--- a/networking/udhcp/dhcpc.c
+++ b/networking/udhcp/dhcpc.c
@@ -66,6 +66,7 @@
 	.pidfile = NULL,
 	.script = DEFAULT_SCRIPT,
 	.clientid = NULL,
+	.vendorclass = NULL,
 	.hostname = NULL,
 	.fqdn = NULL,
 	.ifindex = 0,
@@ -77,8 +78,9 @@
 {
 	printf(
 "Usage: udhcpc [OPTIONS]\n\n"
-"  -c, --clientid=CLIENTID         Set client identifier\n"
+"  -c, --clientid=CLIENTID         Set client identifier - type is first char\n"
 "  -C, --clientid-none             Suppress default client identifier\n"
+"  -V, --vendorclass=CLASSID       Set vendor class identifier\n"
 "  -H, --hostname=HOSTNAME         Client hostname\n"
 "  -h                              Alias for -H\n"
 "  -F, --fqdn=FQDN                 Client fully qualified domain name\n"
@@ -199,6 +201,7 @@
 	static const struct option arg_options[] = {
 		{"clientid",	required_argument,	0, 'c'},
 		{"clientid-none", no_argument,		0, 'C'},
+		{"vendorclass",	required_argument,	0, 'V'},
 		{"foreground",	no_argument,		0, 'f'},
 		{"background",	no_argument,		0, 'b'},
 		{"hostname",	required_argument,	0, 'H'},
@@ -217,7 +220,7 @@
 	/* get options */
 	while (1) {
 		int option_index = 0;
-		c = getopt_long(argc, argv, "c:CfbH:h:F:i:np:qr:s:v", arg_options, &option_index);
+		c = getopt_long(argc, argv, "c:CV:fbH:h:F:i:np:qr:s:v", arg_options, &option_index);
 		if (c == -1) break;
 
 		switch (c) {
@@ -235,6 +238,14 @@
 			if (client_config.clientid) show_usage();
 			no_clientid = 1;
 			break;
+		case 'V':
+			len = strlen(optarg) > 255 ? 255 : strlen(optarg);
+			if (client_config.vendorclass) free(client_config.vendorclass);
+			client_config.vendorclass = xmalloc(len + 2);
+			client_config.vendorclass[OPT_CODE] = DHCP_VENDOR;
+			client_config.vendorclass[OPT_LEN] = len;
+			strncpy(client_config.vendorclass + OPT_DATA, optarg, len);
+			break;
 		case 'f':
 			client_config.foreground = 1;
 			break;
@@ -310,6 +321,16 @@
 		memcpy(client_config.clientid + 3, client_config.arp, 6);
 	}
 
+	if (!client_config.vendorclass) {
+		client_config.vendorclass = xmalloc(sizeof("udhcp "VERSION) + 2);
+		client_config.vendorclass[OPT_CODE] = DHCP_VENDOR;
+		client_config.vendorclass[OPT_LEN] = sizeof("udhcp "VERSION) - 1;
+		client_config.vendorclass[OPT_DATA] = 1;
+		memcpy(&client_config.vendorclass[OPT_DATA], 
+			"udhcp "VERSION, sizeof("udhcp "VERSION) - 1);
+	}
+
+
 	/* setup the signal pipe */
 	udhcp_sp_setup();
 
diff --git a/networking/udhcp/dhcpc.h b/networking/udhcp/dhcpc.h
index 77c1809..4cc1c4c 100644
--- a/networking/udhcp/dhcpc.h
+++ b/networking/udhcp/dhcpc.h
@@ -26,6 +26,7 @@
 	char *pidfile;			/* Optionally store the process ID */
 	char *script;			/* User script to run at dhcp events */
 	uint8_t *clientid;		/* Optional client id to use */
+	uint8_t *vendorclass;		/* Optional vendor class-id to use */
 	uint8_t *hostname;		/* Optional hostname to use */
 	uint8_t *fqdn;			/* Optional fully qualified domain name to use */
 	int ifindex;			/* Index number of the interface to use */