From 8347b7d63959b232657214e77ea74448f3d21f87 Mon Sep 17 00:00:00 2001 From: Roy Marples Date: Fri, 26 Apr 2019 11:27:25 +0100 Subject: [PATCH] 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. --- src/if-bsd.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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; -- 2.47.3