From c5a14d7164df064f98aee7c6ec3bc76703f6b5f4 Mon Sep 17 00:00:00 2001 From: hrs Date: Tue, 6 Aug 2013 17:10:52 +0000 Subject: 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. --- sys/netinet6/nd6.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'sys/netinet6') 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; } -- cgit v1.1