aboutsummaryrefslogtreecommitdiff
path: root/sys/netinet6
diff options
context:
space:
mode:
authorHajimu UMEMOTO <ume@FreeBSD.org>2003-03-26 17:37:35 +0000
committerHajimu UMEMOTO <ume@FreeBSD.org>2003-03-26 17:37:35 +0000
commit11f3a6e295cd466b27619162038109128ffe787c (patch)
tree4d797ac14f214a94d53f76b5974a47798fb99c8e /sys/netinet6
parente40f1e0cb619658e73f88eba9267bd86928a49e3 (diff)
downloadsrc-11f3a6e295cd466b27619162038109128ffe787c.tar.gz
src-11f3a6e295cd466b27619162038109128ffe787c.zip
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
Notes
Notes: svn path=/head/; revision=112678
Diffstat (limited to 'sys/netinet6')
-rw-r--r--sys/netinet6/nd6_rtr.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/sys/netinet6/nd6_rtr.c b/sys/netinet6/nd6_rtr.c
index dde4714a2e05..651a14d0ff89 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;