From 5fcb866f5f8ec0347da871e9bc413fbf92e9e51c Mon Sep 17 00:00:00 2001 From: ume Date: Wed, 26 Mar 2003 17:37:35 +0000 Subject: made sure to keep the current stored lifetime when it was not updated by an RA. (a detailed description of this issue is found at the following URL.) http://www.tahi.org/report/freebsd/freebsd48-rc2-20030316/host/lcna-stateless-addrconf/38.html Reported by: Ozoe Nobumichi through a periodic TAHI test Submitted by: JINMEI Tatuya Obtained from: KAME --- sys/netinet6/nd6_rtr.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'sys/netinet6') diff --git a/sys/netinet6/nd6_rtr.c b/sys/netinet6/nd6_rtr.c index dde4714..651a14d 100644 --- a/sys/netinet6/nd6_rtr.c +++ b/sys/netinet6/nd6_rtr.c @@ -1085,8 +1085,15 @@ prelist_update(new, dr, m) #define TWOHOUR (120*60) lt6_tmp = ifa6->ia6_lifetime; - storedlifetime = IFA6_IS_INVALID(ifa6) ? 0 : - (lt6_tmp.ia6t_expire - time_second); + if (lt6_tmp.ia6t_vltime == ND6_INFINITE_LIFETIME) + storedlifetime = ND6_INFINITE_LIFETIME; + else if (IFA6_IS_INVALID(ifa6)) + storedlifetime = 0; + else + storedlifetime = lt6_tmp.ia6t_expire - time_second; + + /* when not updating, keep the current stored lifetime. */ + lt6_tmp.ia6t_vltime = storedlifetime; if (TWOHOUR < new->ndpr_vltime || storedlifetime < new->ndpr_vltime) { @@ -1857,7 +1864,6 @@ in6_init_prefix_ltimes(struct nd_prefix *ndpr) static void in6_init_address_ltimes(struct nd_prefix *new, struct in6_addrlifetime *lt6) { - /* Valid lifetime must not be updated unless explicitly specified. */ /* init ia6t_expire */ if (lt6->ia6t_vltime == ND6_INFINITE_LIFETIME) lt6->ia6t_expire = 0; -- cgit v1.1