in nd6_cache_lladdr(), set nd6_gctimer to ln_expire just after the state

transition to STALE.  fixes tahi test breakage.  sync with kame.
This commit is contained in:
itojun 2001-03-21 21:56:29 +00:00
parent 4a933b0a25
commit 3e898c9239
1 changed files with 14 additions and 4 deletions

View File

@ -1,5 +1,5 @@
/* $NetBSD: nd6.c,v 1.43 2001/03/08 10:49:32 itojun Exp $ */
/* $KAME: nd6.c,v 1.136 2001/03/06 12:26:07 itojun Exp $ */
/* $NetBSD: nd6.c,v 1.44 2001/03/21 21:56:29 itojun Exp $ */
/* $KAME: nd6.c,v 1.137 2001/03/21 21:52:06 jinmei Exp $ */
/*
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@ -1655,8 +1655,19 @@ fail:
ln->ln_state = newstate;
if (ln->ln_state == ND6_LLINFO_STALE) {
/*
* XXX: since nd6_output() below will cause
* state tansition to DELAY and reset the timer,
* we must set the timer now, although it is actually
* meaningless.
*/
ln->ln_expire = time_second + nd6_gctimer;
if (ln->ln_hold) {
#ifdef OLDIP6OUTPUT
ln->ln_asked = 0;
ln->ln_state = ND6_LLINFO_DELAY;
ln->ln_expire = time_second + nd6_delay;
(*ifp->if_output)(ifp, ln->ln_hold,
rt_key(rt), rt);
#else
@ -1668,9 +1679,8 @@ fail:
(struct sockaddr_in6 *)rt_key(rt),
rt);
#endif
ln->ln_hold = 0;
ln->ln_hold = NULL;
}
ln->ln_expire = time_second + nd6_gctimer;
} else if (ln->ln_state == ND6_LLINFO_INCOMPLETE) {
/* probe right away */
ln->ln_expire = time_second;