diff options
author | Eric Andersen <andersen@codepoet.org> | 2006-03-20 17:37:00 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2006-03-20 17:37:00 +0000 |
commit | 28a6afe975c65ee25e5739b1d52eb24b2a8f27c9 (patch) | |
tree | c63bdffb45c6d2e1fd1d00b2083a97b38833a7c0 | |
parent | c30f445b08e811ec7e339e7efad8f7cd47c3ad59 (diff) |
Roy Walker writes:
Here is a patch against the current subversion repository, that makes
udhcpc have an adjustable timeout. Works for both foreground and before
it drops to the background. This brings it more in-line with ISC dhcpc.
Use like so:
udhcpc --timeout=10 ...
or
udhcpc -T 10 ...
Still shooting for 1.1.1 this month? Would really be great if you could
get this in that release.
Please give credit to Paul Pacheco - ppacheco@gmail.com.
-rw-r--r-- | networking/udhcp/dhcpc.c | 11 | ||||
-rw-r--r-- | networking/udhcp/dhcpc.h | 1 |
2 files changed, 10 insertions, 2 deletions
diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c index 7e7f94a5a..0c85eca83 100644 --- a/networking/udhcp/dhcpc.c +++ b/networking/udhcp/dhcpc.c @@ -59,6 +59,7 @@ struct client_config_t client_config = { .fqdn = NULL, .ifindex = 0, .retries = 3, + .timeout = 3, .arp = "\0\0\0\0\0\0", /* appease gcc-3.0 */ }; @@ -84,6 +85,8 @@ static void ATTRIBUTE_NORETURN show_usage(void) " -r, --request=IP IP address to request (default: none)\n" " -s, --script=file Run file at dhcp events (default:\n" " " DEFAULT_SCRIPT ")\n" +" -T, --timeout=seconds Try to get the lease for the amount of\n" +" seconds (default: 3)\n" " -v, --version Display version\n" ); exit(0); @@ -202,6 +205,7 @@ int main(int argc, char *argv[]) {"quit", no_argument, 0, 'q'}, {"request", required_argument, 0, 'r'}, {"script", required_argument, 0, 's'}, + {"timeout", required_argument, 0, 'T'}, {"version", no_argument, 0, 'v'}, {"retries", required_argument, 0, 't'}, {0, 0, 0, 0} @@ -210,7 +214,7 @@ int main(int argc, char *argv[]) /* get options */ while (1) { int option_index = 0; - c = getopt_long(argc, argv, "c:CV:fbH:h:F:i:np:qr:s:t:v", arg_options, &option_index); + c = getopt_long(argc, argv, "c:CV:fbH:h:F:i:np:qr:s:T:t:v", arg_options, &option_index); if (c == -1) break; switch (c) { @@ -286,6 +290,9 @@ int main(int argc, char *argv[]) case 's': client_config.script = optarg; break; + case 'T': + client_config.timeout = atoi(optarg); + break; case 't': client_config.retries = atoi(optarg); break; @@ -365,7 +372,7 @@ int main(int argc, char *argv[]) /* send discover packet */ send_discover(xid, requested_ip); /* broadcast */ - timeout = now + ((packet_num == 2) ? 4 : 2); + timeout = now + client_config.timeout; packet_num++; } else { run_script(NULL, "leasefail"); diff --git a/networking/udhcp/dhcpc.h b/networking/udhcp/dhcpc.h index 808e91924..80c3fc2f8 100644 --- a/networking/udhcp/dhcpc.h +++ b/networking/udhcp/dhcpc.h @@ -30,6 +30,7 @@ struct client_config_t { uint8_t *fqdn; /* Optional fully qualified domain name to use */ int ifindex; /* Index number of the interface to use */ int retries; /* Max number of request packets */ + int timeout; /* Number of seconds to try to get a lease */ uint8_t arp[6]; /* Our arp address */ }; |