aboutsummaryrefslogtreecommitdiff
path: root/networking/udhcp
diff options
context:
space:
mode:
authorPaul Fox <pgf@brightstareng.com>2005-08-01 14:31:13 +0000
committerPaul Fox <pgf@brightstareng.com>2005-08-01 14:31:13 +0000
commita39bba33c8649a6be42d5a511a4ac909a8998f90 (patch)
treed1b043c7ce00828f803894910d644bf7d0b78572 /networking/udhcp
parent9d6e0833bc71d602c7e6bf4692de3c8eb63cb819 (diff)
downloadbusybox-a39bba33c8649a6be42d5a511a4ac909a8998f90.tar.gz
allow suppression of default client-id. fixes bug 000037. allows
busybox to match kernel and u-boot behavior with respect to client-id.
Diffstat (limited to 'networking/udhcp')
-rw-r--r--networking/udhcp/clientpacket.c3
-rw-r--r--networking/udhcp/dhcpc.c15
2 files changed, 14 insertions, 4 deletions
diff --git a/networking/udhcp/clientpacket.c b/networking/udhcp/clientpacket.c
index c5e1c210b..2695b06ed 100644
--- a/networking/udhcp/clientpacket.c
+++ b/networking/udhcp/clientpacket.c
@@ -76,7 +76,8 @@ static void init_packet(struct dhcpMessage *packet, char type)
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 eeaf5531d..35ae757e7 100644
--- a/networking/udhcp/dhcpc.c
+++ b/networking/udhcp/dhcpc.c
@@ -77,7 +77,8 @@ static void __attribute__ ((noreturn)) show_usage(void)
{
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 @@ int main(int argc, char *argv[])
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 @@ int main(int argc, char *argv[])
/* 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 @@ int main(int argc, char *argv[])
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 @@ int main(int argc, char *argv[])
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;