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 happened due to it. Spotted by: kib Approved by: re (bz)
This commit is contained in:
parent
6090ab8bd6
commit
8cdd0a8091
@ -380,6 +380,21 @@ rtadvd_shutdown(void)
|
||||
syslog(LOG_INFO,
|
||||
"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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user