Browse Source

[dhcp] Reset start time when deferring discovery

If we detect (via STP) that a switch port is in a non-forwarding
state, then the link is marked as being temporarily blocked and DHCP
discovery will be deferred until the link becomes unblocked.

The timer used to decide when to give up waiting for ProxyDHCPOFFERs
is currently based on the time that DHCP discovery was started, and
makes no allowances for any time spent waiting for the link to become
unblocked.  Consequently, if STP is used then the timeout for
ProxyDHCPOFFERs becomes essentially zero.

Fix by resetting the recorded start time whenever DHCP discovery is
deferred due to a blocked link.

Debugged-by: Sebastian Roth <sebastian.roth@zoho.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
tags/v1.20.1
Michael Brown 9 years ago
parent
commit
7cc7e0ec86
1 changed files with 1 additions and 0 deletions
  1. 1
    0
      src/net/udp/dhcp.c

+ 1
- 0
src/net/udp/dhcp.c View File

446
 	/* If link is blocked, defer DHCP discovery (and reset timeout) */
446
 	/* If link is blocked, defer DHCP discovery (and reset timeout) */
447
 	if ( netdev_link_blocked ( dhcp->netdev ) ) {
447
 	if ( netdev_link_blocked ( dhcp->netdev ) ) {
448
 		DBGC ( dhcp, "DHCP %p deferring discovery\n", dhcp );
448
 		DBGC ( dhcp, "DHCP %p deferring discovery\n", dhcp );
449
+		dhcp->start = currticks();
449
 		start_timer_fixed ( &dhcp->timer,
450
 		start_timer_fixed ( &dhcp->timer,
450
 				    ( DHCP_DISC_START_TIMEOUT_SEC *
451
 				    ( DHCP_DISC_START_TIMEOUT_SEC *
451
 				      TICKS_PER_SEC ) );
452
 				      TICKS_PER_SEC ) );

Loading…
Cancel
Save