Mercurial > hg > dhcpcd
changeset 4483:e2f5a58c978a draft
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.
| author | Roy Marples <roy@marples.name> |
|---|---|
| date | Fri, 26 Apr 2019 11:27:25 +0100 |
| parents | c766946ba748 |
| children | 0f490b4cde2a |
| files | src/if-bsd.c |
| diffstat | 1 files changed, 6 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/if-bsd.c Fri Apr 26 01:17:29 2019 +0100 +++ b/src/if-bsd.c Fri Apr 26 11:27:25 2019 +0100 @@ -943,10 +943,15 @@ 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); +#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 @@ 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;
