ipv6_iffindaddr(ap->iface, &ap->addr, IN6_IFF_NOTUSEABLE))
ap->flags |= IPV6_AF_DADCOMPLETED;
- logfunc = ap->flags & IPV6_AF_NEW ? loginfox : logdebugx;
- logfunc("%s: adding %saddress %s", ap->iface->name,
-#ifdef IPV6_AF_TEMPORARY
- ap->flags & IPV6_AF_TEMPORARY ? "temporary " : "",
-#else
- "",
-#endif
- ap->saddr);
- if (ap->prefix_pltime == ND6_INFINITE_LIFETIME &&
- ap->prefix_vltime == ND6_INFINITE_LIFETIME)
- logdebugx("%s: pltime infinity, vltime infinity",
- ap->iface->name);
- else if (ap->prefix_pltime == ND6_INFINITE_LIFETIME)
- logdebugx("%s: pltime infinity, vltime %"PRIu32" seconds",
- ap->iface->name, ap->prefix_vltime);
- else if (ap->prefix_vltime == ND6_INFINITE_LIFETIME)
- logdebugx("%s: pltime %"PRIu32"seconds, vltime infinity",
- ap->iface->name, ap->prefix_pltime);
- else
- logdebugx("%s: pltime %"PRIu32" seconds, vltime %"PRIu32
- " seconds",
- ap->iface->name, ap->prefix_pltime, ap->prefix_vltime);
-
/* Adjust plftime and vltime based on acquired time */
pltime = ap->prefix_pltime;
vltime = ap->prefix_vltime;
if (ap->prefix_pltime > pltime)
ap->prefix_pltime = 0;
}
- if (ap->prefix_vltime != ND6_INFINITE_LIFETIME)
+ if (ap->prefix_vltime != ND6_INFINITE_LIFETIME) {
ap->prefix_vltime -= (uint32_t)n.tv_sec;
+ /* This should never happen. */
+ if (ap->prefix_vltime > vltime) {
+ logerrx("%s: %s: lifetime overflow",
+ ifp->name, ap->saddr);
+ ap->prefix_vltime = ap->prefix_pltime = 0;
+ }
+ }
+ }
-#if 0
- logdebugx("%s: acquired %lld.%.9ld, now %lld.%.9ld, diff %lld.%.9ld",
- ap->iface->name,
- (long long)ap->acquired.tv_sec, ap->acquired.tv_nsec,
- (long long)now->tv_sec, now->tv_nsec,
- (long long)n.tv_sec, n.tv_nsec);
- logdebugx("%s: adj pltime %"PRIu32" seconds, "
- "vltime %"PRIu32" seconds",
- ap->iface->name, ap->prefix_pltime, ap->prefix_vltime);
+ logfunc = ap->flags & IPV6_AF_NEW ? loginfox : logdebugx;
+ logfunc("%s: adding %saddress %s", ap->iface->name,
+#ifdef IPV6_AF_TEMPORARY
+ ap->flags & IPV6_AF_TEMPORARY ? "temporary " : "",
+#else
+ "",
#endif
- }
+ ap->saddr);
+ if (ap->prefix_pltime == ND6_INFINITE_LIFETIME &&
+ ap->prefix_vltime == ND6_INFINITE_LIFETIME)
+ logdebugx("%s: pltime infinity, vltime infinity",
+ ap->iface->name);
+ else if (ap->prefix_pltime == ND6_INFINITE_LIFETIME)
+ logdebugx("%s: pltime infinity, vltime %"PRIu32" seconds",
+ ap->iface->name, ap->prefix_vltime);
+ else if (ap->prefix_vltime == ND6_INFINITE_LIFETIME)
+ logdebugx("%s: pltime %"PRIu32"seconds, vltime infinity",
+ ap->iface->name, ap->prefix_pltime);
+ else
+ logdebugx("%s: pltime %"PRIu32" seconds, vltime %"PRIu32
+ " seconds",
+ ap->iface->name, ap->prefix_pltime, ap->prefix_vltime);
+
if (if_address6(RTM_NEWADDR, ap) == -1) {
logerr(__func__);