summaryrefslogtreecommitdiffstats
path: root/sys/netinet6
diff options
context:
space:
mode:
authorhrs <hrs@FreeBSD.org>2013-08-06 17:10:52 +0000
committerhrs <hrs@FreeBSD.org>2013-08-06 17:10:52 +0000
commitc5a14d7164df064f98aee7c6ec3bc76703f6b5f4 (patch)
tree016a9b4bcb3af50014d899afd32c096a9aae8fb6 /sys/netinet6
parent9e78a97e0065d580c560b84772c2959b79755500 (diff)
downloadFreeBSD-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/netinet6')
-rw-r--r--sys/netinet6/nd6.c13
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;
}
OpenPOWER on IntegriCloud