svn commit: r225680 - user/hrs/ipv6/usr.sbin/rtadvd
Hiroki Sato
hrs at FreeBSD.org
Tue Sep 20 00:19:36 UTC 2011
Author: hrs
Date: Tue Sep 20 00:19:36 2011
New Revision: 225680
URL: http://svn.freebsd.org/changeset/base/225680
Log:
Remove RA timer on an interface with !IFF_UP actively after starting to send
clean-up RA messages for shutting down. The RA timers could prevent the rtadvd
daemon from shutting down because ra_output() just ignored !IFF_UP interfaces
and TRANSITIVE->UNCONFIGURED state transition never happend due to it.
Spotted by: kib
Modified:
user/hrs/ipv6/usr.sbin/rtadvd/rtadvd.c
Modified: user/hrs/ipv6/usr.sbin/rtadvd/rtadvd.c
==============================================================================
--- user/hrs/ipv6/usr.sbin/rtadvd/rtadvd.c Mon Sep 19 23:49:59 2011 (r225679)
+++ user/hrs/ipv6/usr.sbin/rtadvd/rtadvd.c Tue Sep 20 00:19:36 2011 (r225680)
@@ -381,6 +381,21 @@ rtadvd_shutdown(void)
"waiting expiration of the all RA timers.");
TAILQ_FOREACH(ifi, &ifilist, ifi_next) {
+ /*
+ * Ignore !IFF_UP interfaces in waiting for shutdown.
+ */
+ if (!(ifi->ifi_flags & IFF_UP) &&
+ ifi->ifi_ra_timer != NULL) {
+ ifi->ifi_state = IFI_STATE_UNCONFIGURED;
+ rtadvd_remove_timer(ifi->ifi_ra_timer);
+ ifi->ifi_ra_timer = NULL;
+ syslog(LOG_DEBUG, "<%s> %s(idx=%d) is down. "
+ "Timer removed and marked as UNCONFIGURED.",
+ __func__, ifi->ifi_ifname,
+ ifi->ifi_ifindex);
+ }
+ }
+ TAILQ_FOREACH(ifi, &ifilist, ifi_next) {
if (ifi->ifi_ra_timer != NULL)
break;
}
More information about the svn-src-user
mailing list