diff options
| author | Roy Marples <roy@marples.name> | 2019-04-26 11:27:25 +0100 |
|---|---|---|
| committer | Roy Marples <roy@marples.name> | 2019-04-26 11:27:25 +0100 |
| commit | dfd10c6e9f0ece8f26c0f8e895c5979bbd93ec3a (patch) | |
| tree | 3a3800411f71a69e665b5a4b765b481507ff5506 /src/if-bsd.c | |
| parent | 986c73fa386e30120459096146b712a6636a561f (diff) | |
| download | dhcpcd-dfd10c6e9f0ece8f26c0f8e895c5979bbd93ec3a.tar.xz | |
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.
Diffstat (limited to 'src/if-bsd.c')
| -rw-r--r-- | src/if-bsd.c | 8 |
1 files 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; |
