From: Roy Marples Date: Fri, 31 May 2013 13:40:46 +0000 (+0000) Subject: Use ND6_INFINITE_LIFETIME instead of ~0U X-Git-Tag: v5.99.7~19 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=373aadbd01ba52807730f25f7f817c9b2a280316;p=thirdparty%2Fdhcpcd.git Use ND6_INFINITE_LIFETIME instead of ~0U If we have an infinite lease, don't check expiry time when CONFIRMing --- diff --git a/dhcp6.c b/dhcp6.c index 7fb4f47a..f1cb6ed9 100644 --- a/dhcp6.c +++ b/dhcp6.c @@ -1379,7 +1379,7 @@ dhcp6_validatelease(struct interface *ifp, } state->renew = state->rebind = state->expire = 0; - state->lowpl = ~0U; + state->lowpl = ND6_INFINITE_LIFETIME; len -= (const char *)o - (const char *)m; return dhcp6_findia(ifp, (const uint8_t *)o, len, sfrom); } @@ -1436,10 +1436,13 @@ dhcp6_readlease(struct interface *ifp) if (dhcp6_validatelease(ifp, state->new, state->new_len, NULL) == -1) goto ex; - gettimeofday(&now, NULL); - if ((time_t)state->expire < now.tv_sec - st.st_mtime) { - syslog(LOG_DEBUG, "%s: discarding expired lease", ifp->name); - goto ex; + if (state->expire != ND6_INFINITE_LIFETIME) { + gettimeofday(&now, NULL); + if ((time_t)state->expire < now.tv_sec - st.st_mtime) { + syslog(LOG_DEBUG,"%s: discarding expired lease", + ifp->name); + goto ex; + } } return bytes; @@ -1461,8 +1464,8 @@ dhcp6_startinit(struct interface *ifp) state = D6_STATE(ifp); state->state = DH6S_INIT; - state->expire = ~0U; - state->lowpl = ~0U; + state->expire = ND6_INFINITE_LIFETIME; + state->lowpl = ND6_INFINITE_LIFETIME; if (!(options & DHCPCD_TEST) && ifp->options->ia_type != D6_OPTION_IA_TA && ifp->options->reboot != 0) @@ -1841,8 +1844,8 @@ recv: case DH6S_INFORM: state->renew = 0; state->rebind = 0; - state->expire = ~0U; - state->lowpl = ~0U; + state->expire = ND6_INFINITE_LIFETIME; + state->lowpl = ND6_INFINITE_LIFETIME; state->reason = "INFORM6"; break; case DH6S_REQUEST: @@ -1860,14 +1863,14 @@ recv: if (state->reason == NULL) state->reason = "REBOOT6"; if (state->renew == 0) { - if (state->expire == ~0U) - state->renew = ~0U; + if (state->expire == ND6_INFINITE_LIFETIME) + state->renew = ND6_INFINITE_LIFETIME; else state->renew = state->lowpl * 0.5; } if (state->rebind == 0) { - if (state->expire == ~0U) - state->rebind = ~0U; + if (state->expire == ND6_INFINITE_LIFETIME) + state->rebind = ND6_INFINITE_LIFETIME; else state->rebind = state->lowpl * 0.8; } @@ -1893,13 +1896,13 @@ recv: if (state->state == DH6S_INFORM) script_runreason(ifp, state->reason); state->state = DH6S_BOUND; - if (state->renew) + if (state->renew && state->renew != ND6_INFINITE_LIFETIME) eloop_timeout_add_sec(state->renew, dhcp6_startrenew, ifp); - if (state->rebind) + if (state->rebind && state->rebind != ND6_INFINITE_LIFETIME) eloop_timeout_add_sec(state->rebind, dhcp6_startrebind, ifp); - if (state->expire != ~0U) + if (state->expire && state->expire != ND6_INFINITE_LIFETIME) eloop_timeout_add_sec(state->expire, dhcp6_startexpire, ifp); if (ifp->options->ia_type == D6_OPTION_IA_PD) diff --git a/ipv6.c b/ipv6.c index 13ae7c1b..94409cac 100644 --- a/ipv6.c +++ b/ipv6.c @@ -247,9 +247,23 @@ ipv6_addaddr(struct ipv6_addr *ap) ap->flags |= IPV6_AF_DELEGATED; if (ipv6_removesubnet(ap->iface, ap) == -1) syslog(LOG_ERR,"ipv6_removesubnet %m"); - syslog(LOG_DEBUG, - "%s: pltime %d seconds, vltime %d seconds", - ap->iface->name, ap->prefix_pltime, ap->prefix_vltime); + if (ap->prefix_pltime == ND6_INFINITE_LIFETIME && + ap->prefix_vltime == ND6_INFINITE_LIFETIME) + syslog(LOG_DEBUG, + "%s: pltime infinity, vltime infinity", + ap->iface->name); + else if (ap->prefix_pltime == ND6_INFINITE_LIFETIME) + syslog(LOG_DEBUG, + "%s: pltime infinity, vltime %d seconds", + ap->iface->name, ap->prefix_vltime); + else if (ap->prefix_vltime == ND6_INFINITE_LIFETIME) + syslog(LOG_DEBUG, + "%s: pltime %d seconds, vltime infinity", + ap->iface->name, ap->prefix_pltime); + else + syslog(LOG_DEBUG, + "%s: pltime %d seconds, vltime %d seconds", + ap->iface->name, ap->prefix_pltime, ap->prefix_vltime); return 0; } diff --git a/ipv6.h b/ipv6.h index 74af1e36..080f78f4 100644 --- a/ipv6.h +++ b/ipv6.h @@ -38,6 +38,10 @@ #define ROUNDUP8(a) (1 + (((a) - 1) | 7)) #ifdef INET6 +#ifndef ND6_INFINITE_LIFETIME +# define ND6_INFINITE_LIFETIME ((uint32_t)~0) +#endif + /* * BSD kernels don't inform userland of DAD results. * Also, for RTM_NEWADDR messages the address flags could be