mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2024-10-01 04:12:07 +00:00
dhcp: Move in-place timeout/threshold calculations to macros
This commit is contained in:
parent
90c9a482a6
commit
00f5e179b5
@ -93,6 +93,26 @@
|
|||||||
#define LWIP_HOOK_DHCP_PARSE_OPTION(netif, dhcp, state, msg, msg_type, option, len, pbuf, offset) do { LWIP_UNUSED_ARG(msg); } while(0)
|
#define LWIP_HOOK_DHCP_PARSE_OPTION(netif, dhcp, state, msg, msg_type, option, len, pbuf, offset) do { LWIP_UNUSED_ARG(msg); } while(0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/** Calculating and setting DHCP timeouts, thresholds and backoff sequences
|
||||||
|
*/
|
||||||
|
#define SET_TIMEOUT_FROM_OFFERED(result, offered, min, max) do { \
|
||||||
|
u32_t timeout = (offered + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS; \
|
||||||
|
if (timeout > max) { \
|
||||||
|
timeout = max; \
|
||||||
|
} \
|
||||||
|
if (timeout == min) { \
|
||||||
|
timeout = 1; \
|
||||||
|
} \
|
||||||
|
result = (u16_t)timeout; \
|
||||||
|
} while(0)
|
||||||
|
|
||||||
|
#define DHCP_SET_TIMEOUT_FROM_OFFERED_T0_LEASE(res, dhcp) SET_TIMEOUT_FROM_OFFERED(res, (dhcp)->offered_t0_lease, 0, 0xffff)
|
||||||
|
#define DHCP_SET_TIMEOUT_FROM_OFFERED_T1_RENEW(res, dhcp) SET_TIMEOUT_FROM_OFFERED(res, (dhcp)->offered_t1_renew, 0, 0xffff)
|
||||||
|
#define DHCP_SET_TIMEOUT_FROM_OFFERED_T2_REBIND(res, dhcp) SET_TIMEOUT_FROM_OFFERED(res, (dhcp)->offered_t2_rebind, 0, 0xffff)
|
||||||
|
|
||||||
|
#define DHCP_NEXT_TIMEOUT_THRESHOLD ((60 + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS)
|
||||||
|
#define DHCP_REQUEST_BACKOFF_SEQUENCE(tries) (u16_t)(( (tries) < 6 ? 1 << (tries) : 60) * 1000)
|
||||||
|
|
||||||
/** DHCP_CREATE_RAND_XID: if this is set to 1, the xid is created using
|
/** DHCP_CREATE_RAND_XID: if this is set to 1, the xid is created using
|
||||||
* LWIP_RAND() (this overrides DHCP_GLOBAL_XID)
|
* LWIP_RAND() (this overrides DHCP_GLOBAL_XID)
|
||||||
*/
|
*/
|
||||||
@ -584,7 +604,7 @@ dhcp_t1_timeout(struct netif *netif)
|
|||||||
DHCP_STATE_RENEWING, not DHCP_STATE_BOUND */
|
DHCP_STATE_RENEWING, not DHCP_STATE_BOUND */
|
||||||
dhcp_renew(netif);
|
dhcp_renew(netif);
|
||||||
/* Calculate next timeout */
|
/* Calculate next timeout */
|
||||||
if (((dhcp->t2_timeout - dhcp->lease_used) / 2) >= ((60 + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS)) {
|
if (((dhcp->t2_timeout - dhcp->lease_used) / 2) >= DHCP_NEXT_TIMEOUT_THRESHOLD) {
|
||||||
dhcp->t1_renew_time = (u16_t)((dhcp->t2_timeout - dhcp->lease_used) / 2);
|
dhcp->t1_renew_time = (u16_t)((dhcp->t2_timeout - dhcp->lease_used) / 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -610,7 +630,7 @@ dhcp_t2_timeout(struct netif *netif)
|
|||||||
DHCP_STATE_REBINDING, not DHCP_STATE_BOUND */
|
DHCP_STATE_REBINDING, not DHCP_STATE_BOUND */
|
||||||
dhcp_rebind(netif);
|
dhcp_rebind(netif);
|
||||||
/* Calculate next timeout */
|
/* Calculate next timeout */
|
||||||
if (((dhcp->t0_timeout - dhcp->lease_used) / 2) >= ((60 + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS)) {
|
if (((dhcp->t0_timeout - dhcp->lease_used) / 2) >= DHCP_NEXT_TIMEOUT_THRESHOLD) {
|
||||||
dhcp->t2_rebind_time = (u16_t)((dhcp->t0_timeout - dhcp->lease_used) / 2);
|
dhcp->t2_rebind_time = (u16_t)((dhcp->t0_timeout - dhcp->lease_used) / 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1022,7 +1042,7 @@ dhcp_discover(struct netif *netif)
|
|||||||
if (dhcp->tries < 255) {
|
if (dhcp->tries < 255) {
|
||||||
dhcp->tries++;
|
dhcp->tries++;
|
||||||
}
|
}
|
||||||
msecs = (u16_t)((dhcp->tries < 6 ? 1 << dhcp->tries : 60) * 1000);
|
msecs = DHCP_REQUEST_BACKOFF_SEQUENCE(dhcp->tries);
|
||||||
dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS);
|
dhcp->request_timeout = (u16_t)((msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS);
|
||||||
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_discover(): set request timeout %"U16_F" msecs\n", msecs));
|
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_discover(): set request timeout %"U16_F" msecs\n", msecs));
|
||||||
return result;
|
return result;
|
||||||
@ -1037,7 +1057,6 @@ dhcp_discover(struct netif *netif)
|
|||||||
static void
|
static void
|
||||||
dhcp_bind(struct netif *netif)
|
dhcp_bind(struct netif *netif)
|
||||||
{
|
{
|
||||||
u32_t timeout;
|
|
||||||
struct dhcp *dhcp;
|
struct dhcp *dhcp;
|
||||||
ip4_addr_t sn_mask, gw_addr;
|
ip4_addr_t sn_mask, gw_addr;
|
||||||
LWIP_ERROR("dhcp_bind: netif != NULL", (netif != NULL), return;);
|
LWIP_ERROR("dhcp_bind: netif != NULL", (netif != NULL), return;);
|
||||||
@ -1051,14 +1070,7 @@ dhcp_bind(struct netif *netif)
|
|||||||
if (dhcp->offered_t0_lease != 0xffffffffUL) {
|
if (dhcp->offered_t0_lease != 0xffffffffUL) {
|
||||||
/* set renewal period timer */
|
/* set renewal period timer */
|
||||||
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(): t0 renewal timer %"U32_F" secs\n", dhcp->offered_t0_lease));
|
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(): t0 renewal timer %"U32_F" secs\n", dhcp->offered_t0_lease));
|
||||||
timeout = (dhcp->offered_t0_lease + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS;
|
DHCP_SET_TIMEOUT_FROM_OFFERED_T0_LEASE(dhcp->t0_timeout, dhcp);
|
||||||
if (timeout > 0xffff) {
|
|
||||||
timeout = 0xffff;
|
|
||||||
}
|
|
||||||
dhcp->t0_timeout = (u16_t)timeout;
|
|
||||||
if (dhcp->t0_timeout == 0) {
|
|
||||||
dhcp->t0_timeout = 1;
|
|
||||||
}
|
|
||||||
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_bind(): set request timeout %"U32_F" msecs\n", dhcp->offered_t0_lease * 1000));
|
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_bind(): set request timeout %"U32_F" msecs\n", dhcp->offered_t0_lease * 1000));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1066,28 +1078,14 @@ dhcp_bind(struct netif *netif)
|
|||||||
if (dhcp->offered_t1_renew != 0xffffffffUL) {
|
if (dhcp->offered_t1_renew != 0xffffffffUL) {
|
||||||
/* set renewal period timer */
|
/* set renewal period timer */
|
||||||
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(): t1 renewal timer %"U32_F" secs\n", dhcp->offered_t1_renew));
|
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(): t1 renewal timer %"U32_F" secs\n", dhcp->offered_t1_renew));
|
||||||
timeout = (dhcp->offered_t1_renew + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS;
|
DHCP_SET_TIMEOUT_FROM_OFFERED_T1_RENEW(dhcp->t1_timeout, dhcp);
|
||||||
if (timeout > 0xffff) {
|
|
||||||
timeout = 0xffff;
|
|
||||||
}
|
|
||||||
dhcp->t1_timeout = (u16_t)timeout;
|
|
||||||
if (dhcp->t1_timeout == 0) {
|
|
||||||
dhcp->t1_timeout = 1;
|
|
||||||
}
|
|
||||||
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_bind(): set request timeout %"U32_F" msecs\n", dhcp->offered_t1_renew * 1000));
|
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_bind(): set request timeout %"U32_F" msecs\n", dhcp->offered_t1_renew * 1000));
|
||||||
dhcp->t1_renew_time = dhcp->t1_timeout;
|
dhcp->t1_renew_time = dhcp->t1_timeout;
|
||||||
}
|
}
|
||||||
/* set renewal period timer */
|
/* set renewal period timer */
|
||||||
if (dhcp->offered_t2_rebind != 0xffffffffUL) {
|
if (dhcp->offered_t2_rebind != 0xffffffffUL) {
|
||||||
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(): t2 rebind timer %"U32_F" secs\n", dhcp->offered_t2_rebind));
|
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(): t2 rebind timer %"U32_F" secs\n", dhcp->offered_t2_rebind));
|
||||||
timeout = (dhcp->offered_t2_rebind + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS;
|
DHCP_SET_TIMEOUT_FROM_OFFERED_T2_REBIND(dhcp->t2_timeout, dhcp);
|
||||||
if (timeout > 0xffff) {
|
|
||||||
timeout = 0xffff;
|
|
||||||
}
|
|
||||||
dhcp->t2_timeout = (u16_t)timeout;
|
|
||||||
if (dhcp->t2_timeout == 0) {
|
|
||||||
dhcp->t2_timeout = 1;
|
|
||||||
}
|
|
||||||
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_bind(): set request timeout %"U32_F" msecs\n", dhcp->offered_t2_rebind * 1000));
|
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_bind(): set request timeout %"U32_F" msecs\n", dhcp->offered_t2_rebind * 1000));
|
||||||
dhcp->t2_rebind_time = dhcp->t2_timeout;
|
dhcp->t2_rebind_time = dhcp->t2_timeout;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user