Ping. Comments? There was one +1 for some fix in this space. Thanks, Alex
On Fri, 2013-06-07 at 14:22 -0600, Alex Williamson wrote: > For discovery, both the DHCP and PXE specs suggest timeouts of 4, 8, > 16, and 32 seconds. This gives us a maximum timeout of 60 seconds, > versus the current timeout of 15 seconds at timeouts of 1, 2, 4, and > 8 seconds. > > On the request phase, the specs are quite different. RFC2131 for DHCP > suggests the same intervals as above for discovery, while the PXE spec > recommends intervals of 1, 2, 3, and 4 seconds. Our timer only wants > to do exponential back-off, so we compromise and adjust to intervals > of 1, 2, 4, and 8 seconds. PXE boot server discovery appears to want > the same timeouts as the DHCP request phase. > > Signed-off-by: Alex Williamson <[email protected]> > --- > src/include/ipxe/dhcp.h | 4 ---- > src/net/udp/dhcp.c | 22 +++++++++++++--------- > 2 files changed, 13 insertions(+), 13 deletions(-) > > diff --git a/src/include/ipxe/dhcp.h b/src/include/ipxe/dhcp.h > index b97dfe3..f3f7185 100644 > --- a/src/include/ipxe/dhcp.h > +++ b/src/include/ipxe/dhcp.h > @@ -631,10 +631,6 @@ struct dhcphdr { > */ > #define DHCP_MIN_LEN 552 > > -/** Timeouts for sending DHCP packets */ > -#define DHCP_MIN_TIMEOUT ( 1 * TICKS_PER_SEC ) > -#define DHCP_MAX_TIMEOUT ( 10 * TICKS_PER_SEC ) > - > /** Maximum time that we will wait for ProxyDHCP responses */ > #define PROXYDHCP_MAX_TIMEOUT ( 2 * TICKS_PER_SEC ) > > diff --git a/src/net/udp/dhcp.c b/src/net/udp/dhcp.c > index 762ae73..d67e1e5 100644 > --- a/src/net/udp/dhcp.c > +++ b/src/net/udp/dhcp.c > @@ -185,8 +185,9 @@ struct dhcp_session_state { > void ( * expired ) ( struct dhcp_session *dhcp ); > /** Transmitted message type */ > uint8_t tx_msgtype; > - /** Apply minimum timeout */ > - uint8_t apply_min_timeout; > + /** Timer parameters (seconds) */ > + unsigned long min_timeout; > + unsigned long max_timeout; > }; > > static struct dhcp_session_state dhcp_state_discover; > @@ -286,9 +287,8 @@ static void dhcp_set_state ( struct dhcp_session *dhcp, > dhcp->state = state; > dhcp->start = currticks(); > stop_timer ( &dhcp->timer ); > - dhcp->timer.min_timeout = > - ( state->apply_min_timeout ? DHCP_MIN_TIMEOUT : 0 ); > - dhcp->timer.max_timeout = DHCP_MAX_TIMEOUT; > + dhcp->timer.min_timeout = state->min_timeout * TICKS_PER_SEC; > + dhcp->timer.max_timeout = state->max_timeout * TICKS_PER_SEC; > start_timer_nodelay ( &dhcp->timer ); > } > > @@ -461,7 +461,8 @@ static struct dhcp_session_state dhcp_state_discover = { > .rx = dhcp_discovery_rx, > .expired = dhcp_discovery_expired, > .tx_msgtype = DHCPDISCOVER, > - .apply_min_timeout = 1, > + .min_timeout = 4, > + .max_timeout = 32, > }; > > /** > @@ -598,7 +599,8 @@ static struct dhcp_session_state dhcp_state_request = { > .rx = dhcp_request_rx, > .expired = dhcp_request_expired, > .tx_msgtype = DHCPREQUEST, > - .apply_min_timeout = 0, > + .min_timeout = 1, > + .max_timeout = 8, > }; > > /** > @@ -699,7 +701,8 @@ static struct dhcp_session_state dhcp_state_proxy = { > .rx = dhcp_proxy_rx, > .expired = dhcp_proxy_expired, > .tx_msgtype = DHCPREQUEST, > - .apply_min_timeout = 0, > + .min_timeout = 1, > + .max_timeout = 8, > }; > > /** > @@ -846,7 +849,8 @@ static struct dhcp_session_state dhcp_state_pxebs = { > .rx = dhcp_pxebs_rx, > .expired = dhcp_pxebs_expired, > .tx_msgtype = DHCPREQUEST, > - .apply_min_timeout = 1, > + .min_timeout = 1, > + .max_timeout = 8, > }; > > /**************************************************************************** > > _______________________________________________ > ipxe-devel mailing list > [email protected] > https://lists.ipxe.org/mailman/listinfo.cgi/ipxe-devel _______________________________________________ ipxe-devel mailing list [email protected] https://lists.ipxe.org/mailman/listinfo.cgi/ipxe-devel

