mirror of https://github.com/ipxe/ipxe.git
[dhcp] Defer discovery if link is blocked
If the link is blocked (e.g. due to a Spanning Tree Protocol port not yet forwarding packets) then defer DHCP discovery until the link becomes unblocked. Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/37/head
parent
94dbfb4374
commit
d73982f098
|
@ -436,6 +436,15 @@ static void dhcp_discovery_rx ( struct dhcp_session *dhcp,
|
||||||
static void dhcp_discovery_expired ( struct dhcp_session *dhcp ) {
|
static void dhcp_discovery_expired ( struct dhcp_session *dhcp ) {
|
||||||
unsigned long elapsed = ( currticks() - dhcp->start );
|
unsigned long elapsed = ( currticks() - dhcp->start );
|
||||||
|
|
||||||
|
/* If link is blocked, defer DHCP discovery (and reset timeout) */
|
||||||
|
if ( netdev_link_blocked ( dhcp->netdev ) ) {
|
||||||
|
DBGC ( dhcp, "DHCP %p deferring discovery\n", dhcp );
|
||||||
|
start_timer_fixed ( &dhcp->timer,
|
||||||
|
( DHCP_DISC_START_TIMEOUT_SEC *
|
||||||
|
TICKS_PER_SEC ) );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* Give up waiting for ProxyDHCP before we reach the failure point */
|
/* Give up waiting for ProxyDHCP before we reach the failure point */
|
||||||
if ( dhcp->offer.s_addr &&
|
if ( dhcp->offer.s_addr &&
|
||||||
( elapsed > DHCP_DISC_PROXY_TIMEOUT_SEC * TICKS_PER_SEC ) ) {
|
( elapsed > DHCP_DISC_PROXY_TIMEOUT_SEC * TICKS_PER_SEC ) ) {
|
||||||
|
|
Loading…
Reference in New Issue