]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[dhcp] Reset start time when deferring discovery
authorMichael Brown <mcb30@ipxe.org>
Fri, 30 Oct 2015 13:18:51 +0000 (13:18 +0000)
committerMichael Brown <mcb30@ipxe.org>
Fri, 30 Oct 2015 13:29:03 +0000 (13:29 +0000)
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>
src/net/udp/dhcp.c

index 36c2b13a66a69784b862700b1dcaee44b5222b4a..9c7b2fdc252c691344fafd8ec635147c6b2114b1 100644 (file)
@@ -446,6 +446,7 @@ static void dhcp_discovery_expired ( struct dhcp_session *dhcp ) {
        /* If link is blocked, defer DHCP discovery (and reset timeout) */
        if ( netdev_link_blocked ( dhcp->netdev ) ) {
                DBGC ( dhcp, "DHCP %p deferring discovery\n", dhcp );
+               dhcp->start = currticks();
                start_timer_fixed ( &dhcp->timer,
                                    ( DHCP_DISC_START_TIMEOUT_SEC *
                                      TICKS_PER_SEC ) );