diff options
author | Kenneth R Westerback <krw@cvs.openbsd.org> | 2011-03-27 12:15:47 +0000 |
---|---|---|
committer | Kenneth R Westerback <krw@cvs.openbsd.org> | 2011-03-27 12:15:47 +0000 |
commit | c3b3601912ea07002a7133a3923a3817e00b8c9b (patch) | |
tree | 01ab6e24cd7e67cf24ad73bd9b7d8cdf4d3aa9bc | |
parent | bc17337032bb9625fc4f9a962e9b82022761dcc4 (diff) |
Fix interval handling. Start at initial_interval instead of
exponentially backed off initial_interval. Don't hallucinate that
we can send ARP packets without waiting. Don't claim to be waiting
for ARP packets when not doing so. Correctly detect expiry of
selecting period. Speeds up negotiations.
Tested on various dhcp servers by Martin Pelika, ian@, and David
Coppa. And works at Starbucks and a mall for me.
-rw-r--r-- | sbin/dhclient/dhclient-script | 10 | ||||
-rw-r--r-- | sbin/dhclient/dhclient.c | 12 |
2 files changed, 14 insertions, 8 deletions
diff --git a/sbin/dhclient/dhclient-script b/sbin/dhclient/dhclient-script index 06001d3f835..289320b4f03 100644 --- a/sbin/dhclient/dhclient-script +++ b/sbin/dhclient/dhclient-script @@ -1,6 +1,6 @@ #!/bin/sh # -# $OpenBSD: dhclient-script,v 1.17 2010/06/02 09:57:16 phessler Exp $ +# $OpenBSD: dhclient-script,v 1.18 2011/03/27 12:15:46 krw Exp $ # # Copyright (c) 2003 Kenneth R Westerback <krw@openbsd.org> # @@ -208,7 +208,13 @@ PREINIT6) ifconfig $interface up ;; -ARPCHECK|ARPSEND) +ARPCHECK) + # Always succeed. i.e. accept lease. + ;; + +ARPSEND) + # Always fail. i.e. don't wait for ARP packet here. + exit 1 ;; BOUND|RENEW|REBIND|REBOOT) diff --git a/sbin/dhclient/dhclient.c b/sbin/dhclient/dhclient.c index b2abea4e9f3..f900ef5baf4 100644 --- a/sbin/dhclient/dhclient.c +++ b/sbin/dhclient/dhclient.c @@ -1,4 +1,4 @@ -/* $OpenBSD: dhclient.c,v 1.137 2010/10/15 09:51:15 jsg Exp $ */ +/* $OpenBSD: dhclient.c,v 1.138 2011/03/27 12:15:46 krw Exp $ */ /* * Copyright 2004 Henning Brauer <henning@openbsd.org> @@ -495,7 +495,7 @@ state_reboot(void) make_request(client->active); client->destination = iaddr_broadcast; client->first_sending = cur_time; - client->interval = config->initial_interval; + client->interval = 0; /* Zap the medium list... */ client->medium = NULL; @@ -518,7 +518,7 @@ state_init(void) client->destination = iaddr_broadcast; client->state = S_SELECTING; client->first_sending = cur_time; - client->interval = config->initial_interval; + client->interval = 0; /* Add an immediate timeout to cause the first DHCPDISCOVER packet to go out. */ @@ -599,7 +599,7 @@ freeit: client->destination = iaddr_broadcast; client->state = S_REQUESTING; client->first_sending = cur_time; - client->interval = config->initial_interval; + client->interval = 0; /* Make a DHCPREQUEST packet from the lease we picked. */ make_request(picked); @@ -738,7 +738,7 @@ state_bound(void) client->destination = iaddr_broadcast; client->first_sending = cur_time; - client->interval = config->initial_interval; + client->interval = 0; client->state = S_RENEWING; /* Send the first packet immediately. */ @@ -841,7 +841,7 @@ dhcpoffer(struct iaddr client_addr, struct option_data *options) /* If the selecting interval has expired, go immediately to state_selecting(). Otherwise, time out into state_selecting at the select interval. */ - if (stop_selecting <= 0) + if (stop_selecting <= cur_time) state_selecting(); else { add_timeout(stop_selecting, state_selecting); |