From: Roy Marples Date: Fri, 26 Apr 2019 10:27:25 +0000 (+0100) Subject: FreeBSD: Fix fetching the IPv6 address lifetime X-Git-Tag: v7.2.1~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8347b7d63959b232657214e77ea74448f3d21f87;p=thirdparty%2Fdhcpcd.git FreeBSD: Fix fetching the IPv6 address lifetime FreeBSD it seems sensibly uses a monotonic clock for IPv6 lifetimes but the others use the wall clock. --- diff --git a/src/if-bsd.c b/src/if-bsd.c index 00d00bdc..20467dfc 100644 --- a/src/if-bsd.c +++ b/src/if-bsd.c @@ -943,10 +943,15 @@ if_getlifetime6(struct ipv6_addr *ia) priv = (struct priv *)ia->iface->ctx->priv; if (ioctl(priv->pf_inet6_fd, SIOCGIFALIFETIME_IN6, &ifr6) == -1) return -1; + clock_gettime(CLOCK_MONOTONIC, &ia->created); +#if defined(__FreeBSD__) || defined(__DragonFly__) + t = ia->created.tv_sec; +#else t = time(NULL); - lifetime = &ifr6.ifr_ifru.ifru_lifetime; +#endif + lifetime = &ifr6.ifr_ifru.ifru_lifetime; if (lifetime->ia6t_preferred) ia->prefix_pltime = (uint32_t)(lifetime->ia6t_preferred - MIN(t, lifetime->ia6t_preferred)); @@ -956,7 +961,6 @@ if_getlifetime6(struct ipv6_addr *ia) ia->prefix_vltime = (uint32_t)(lifetime->ia6t_expire - MIN(t, lifetime->ia6t_expire)); /* Calculate the created time */ - clock_gettime(CLOCK_MONOTONIC, &ia->created); ia->created.tv_sec -= lifetime->ia6t_vltime - ia->prefix_vltime; } else ia->prefix_vltime = ND6_INFINITE_LIFETIME;