diff options
author | ume <ume@FreeBSD.org> | 2003-03-26 17:37:35 +0000 |
---|---|---|
committer | ume <ume@FreeBSD.org> | 2003-03-26 17:37:35 +0000 |
commit | 5fcb866f5f8ec0347da871e9bc413fbf92e9e51c (patch) | |
tree | 4d797ac14f214a94d53f76b5974a47798fb99c8e /sys/netinet6/nd6_rtr.c | |
parent | 194bdafb2cd319eaf9210e0d50eabd12701b3a47 (diff) | |
download | FreeBSD-src-5fcb866f5f8ec0347da871e9bc413fbf92e9e51c.zip FreeBSD-src-5fcb866f5f8ec0347da871e9bc413fbf92e9e51c.tar.gz |
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 <ozoe@tahi.org>
through a periodic TAHI test
Submitted by: JINMEI Tatuya <jinmei@isl.rdc.toshiba.co.jp>
Obtained from: KAME
Diffstat (limited to 'sys/netinet6/nd6_rtr.c')
-rw-r--r-- | sys/netinet6/nd6_rtr.c | 12 |
1 files changed, 9 insertions, 3 deletions
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; |