allow suppression of default client-id.  fixes bug 000037.  allows
busybox to match kernel and u-boot behavior with respect to client-id.
diff --git a/include/usage.h b/include/usage.h
index 363b01c..21980ee 100644
--- a/include/usage.h
+++ b/include/usage.h
@@ -2931,9 +2931,10 @@
 	"Adjust filesystem options on ext[23] filesystems.\n\n"
 
 #define udhcpc_trivial_usage \
-	"[-fbnqv] [-c CLIENTID] [-H HOSTNAME] [-i INTERFACE]\n[-p pidfile] [-r IP] [-s script]"
+	"[-Cfbnqv] [-c CLIENTID] [-H HOSTNAME] [-i INTERFACE]\n[-p pidfile] [-r IP] [-s script]"
 #define udhcpc_full_usage \
-	"\t-c,\t--clientid=CLIENTID\tClient identifier\n" \
+	"\t-c,\t--clientid=CLIENTID\tSet client identifier\n" \
+	"\t-C,\t--clientid-none\tSuppress default client identifier\n" \
 	"\t-H,\t--hostname=HOSTNAME\tClient hostname\n" \
 	"\t-h,\t                   \tAlias for -H\n" \
 	"\t-f,\t--foreground\tDo not fork after getting lease\n" \
diff --git a/networking/udhcp/clientpacket.c b/networking/udhcp/clientpacket.c
index c5e1c21..2695b06 100644
--- a/networking/udhcp/clientpacket.c
+++ b/networking/udhcp/clientpacket.c
@@ -76,7 +76,8 @@
 
 	init_header(packet, type);
 	memcpy(packet->chaddr, client_config.arp, 6);
-	add_option_string(packet->options, client_config.clientid);
+	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);
diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c
index eeaf553..35ae757 100644
--- a/networking/udhcp/dhcpc.c
+++ b/networking/udhcp/dhcpc.c
@@ -77,7 +77,8 @@
 {
 	printf(
 "Usage: udhcpc [OPTIONS]\n\n"
-"  -c, --clientid=CLIENTID         Client identifier\n"
+"  -c, --clientid=CLIENTID         Set client identifier\n"
+"  -C, --clientid-none             Suppress default client identifier\n"
 "  -H, --hostname=HOSTNAME         Client hostname\n"
 "  -h                              Alias for -H\n"
 "  -F, --fqdn=FQDN                 Client fully qualified domain name\n"
@@ -193,9 +194,11 @@
 	long now;
 	int max_fd;
 	int sig;
+	int no_clientid = 0;
 
 	static const struct option arg_options[] = {
 		{"clientid",	required_argument,	0, 'c'},
+		{"clientid-none", no_argument,		0, 'C'},
 		{"foreground",	no_argument,		0, 'f'},
 		{"background",	no_argument,		0, 'b'},
 		{"hostname",	required_argument,	0, 'H'},
@@ -214,11 +217,12 @@
 	/* get options */
 	while (1) {
 		int option_index = 0;
-		c = getopt_long(argc, argv, "c:fbH:h:F:i:np:qr:s:v", arg_options, &option_index);
+		c = getopt_long(argc, argv, "c:CfbH:h:F:i:np:qr:s:v", arg_options, &option_index);
 		if (c == -1) break;
 
 		switch (c) {
 		case 'c':
+			if (no_clientid) show_usage();
 			len = strlen(optarg) > 255 ? 255 : strlen(optarg);
 			if (client_config.clientid) free(client_config.clientid);
 			client_config.clientid = xmalloc(len + 2);
@@ -227,6 +231,10 @@
 			client_config.clientid[OPT_DATA] = '\0';
 			strncpy(client_config.clientid + OPT_DATA, optarg, len);
 			break;
+		case 'C':
+			if (client_config.clientid) show_usage();
+			no_clientid = 1;
+			break;
 		case 'f':
 			client_config.foreground = 1;
 			break;
@@ -293,7 +301,8 @@
 			   NULL, client_config.arp) < 0)
 		return 1;
 
-	if (!client_config.clientid) {
+	/* if not set, and not suppressed, setup the default client ID */
+	if (!client_config.clientid && !no_clientid) {
 		client_config.clientid = xmalloc(6 + 3);
 		client_config.clientid[OPT_CODE] = DHCP_CLIENT_ID;
 		client_config.clientid[OPT_LEN] = 7;