]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
FreeBSD: Fix fetching the IPv6 address lifetime
authorRoy Marples <roy@marples.name>
Fri, 26 Apr 2019 10:27:25 +0000 (11:27 +0100)
committerRoy Marples <roy@marples.name>
Fri, 26 Apr 2019 10:27:25 +0000 (11:27 +0100)
FreeBSD it seems sensibly uses a monotonic clock for IPv6 lifetimes
but the others use the wall clock.

src/if-bsd.c

index 00d00bdc2e857df1b05e0fb1440a0f8d21aaa4b7..20467dfc05e6b6390e41d92d5c4203f64ad46549 100644 (file)
@@ -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;