diff options
author | hrs <hrs@FreeBSD.org> | 2013-08-06 17:10:52 +0000 |
---|---|---|
committer | hrs <hrs@FreeBSD.org> | 2013-08-06 17:10:52 +0000 |
commit | c5a14d7164df064f98aee7c6ec3bc76703f6b5f4 (patch) | |
tree | 016a9b4bcb3af50014d899afd32c096a9aae8fb6 /sys | |
parent | 9e78a97e0065d580c560b84772c2959b79755500 (diff) | |
download | FreeBSD-src-c5a14d7164df064f98aee7c6ec3bc76703f6b5f4.zip FreeBSD-src-c5a14d7164df064f98aee7c6ec3bc76703f6b5f4.tar.gz |
Fix incompatibility in ICMPV6CTL_ND6_PRLIST sysctl, and SIOCGPRLST_IN6,
SIOCGDRLST_IN6, and SIOCGNBRINFO_IN6 ioctl. These userland interfaces
treat expiration times in time_second, not time_uptime.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/netinet6/nd6.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/sys/netinet6/nd6.c b/sys/netinet6/nd6.c index 6ad787f..5250f93 100644 --- a/sys/netinet6/nd6.c +++ b/sys/netinet6/nd6.c @@ -1243,7 +1243,8 @@ nd6_ioctl(u_long cmd, caddr_t data, struct ifnet *ifp) drl->defrouter[i].flags = dr->flags; drl->defrouter[i].rtlifetime = dr->rtlifetime; - drl->defrouter[i].expire = dr->expire; + drl->defrouter[i].expire = dr->expire + + (time_second - time_uptime); drl->defrouter[i].if_index = dr->ifp->if_index; i++; } @@ -1287,7 +1288,8 @@ nd6_ioctl(u_long cmd, caddr_t data, struct ifnet *ifp) maxexpire - pr->ndpr_lastupdate) { oprl->prefix[i].expire = pr->ndpr_lastupdate + - pr->ndpr_vltime; + pr->ndpr_vltime + + (time_second - time_uptime); } else oprl->prefix[i].expire = maxexpire; } @@ -1506,7 +1508,7 @@ nd6_ioctl(u_long cmd, caddr_t data, struct ifnet *ifp) nbi->state = ln->ln_state; nbi->asked = ln->la_asked; nbi->isrouter = ln->ln_router; - nbi->expire = ln->la_expire; + nbi->expire = ln->la_expire + (time_second - time_uptime); LLE_RUNLOCK(ln); break; } @@ -2286,7 +2288,7 @@ nd6_sysctl_drlist(SYSCTL_HANDLER_ARGS) return (error); d.flags = dr->flags; d.rtlifetime = dr->rtlifetime; - d.expire = dr->expire; + d.expire = dr->expire + (time_second - time_uptime); d.if_index = dr->ifp->if_index; error = SYSCTL_OUT(req, &d, sizeof(d)); if (error != 0) @@ -2338,7 +2340,8 @@ nd6_sysctl_prlist(SYSCTL_HANDLER_ARGS) ~((time_t)1 << ((sizeof(maxexpire) * 8) - 1)); if (pr->ndpr_vltime < maxexpire - pr->ndpr_lastupdate) p.expire = pr->ndpr_lastupdate + - pr->ndpr_vltime; + pr->ndpr_vltime + + (time_second - time_uptime); else p.expire = maxexpire; } |