mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-03 17:24:26 +00:00
isisd: avoid fast-reroute on down adjacency when the interface is down
When an IS-IS interface is coming down, fast-reroute may be triggered twice: a first time after the detection of the interface down event and a second time after the detection of the adjacency down (because of the expiration of the ISIS Hello or BFD timers). Avoid a BFD down event from running fast-reroute another time if the interface was already detected down. Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
This commit is contained in:
parent
62e458278b
commit
08e4960ab4
@ -328,7 +328,8 @@ void isis_adj_state_change(struct isis_adjacency **padj,
|
||||
if (new_state == old_state)
|
||||
return;
|
||||
|
||||
if (old_state == ISIS_ADJ_UP) {
|
||||
if (old_state == ISIS_ADJ_UP &&
|
||||
!CHECK_FLAG(adj->circuit->flags, ISIS_CIRCUIT_IF_DOWN_FROM_Z)) {
|
||||
if (IS_DEBUG_EVENTS)
|
||||
zlog_debug(
|
||||
"ISIS-Adj (%s): Starting fast-reroute on state change "
|
||||
|
@ -1631,8 +1631,10 @@ static int isis_ifp_up(struct interface *ifp)
|
||||
{
|
||||
struct isis_circuit *circuit = ifp->info;
|
||||
|
||||
if (circuit)
|
||||
if (circuit) {
|
||||
UNSET_FLAG(circuit->flags, ISIS_CIRCUIT_IF_DOWN_FROM_Z);
|
||||
isis_csm_state_change(IF_UP_FROM_Z, circuit, ifp);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -1643,6 +1645,7 @@ static int isis_ifp_down(struct interface *ifp)
|
||||
struct isis_circuit *circuit = ifp->info;
|
||||
|
||||
if (circuit) {
|
||||
SET_FLAG(circuit->flags, ISIS_CIRCUIT_IF_DOWN_FROM_Z);
|
||||
for (afi = AFI_IP; afi <= AFI_IP6; afi++)
|
||||
isis_circuit_switchover_routes(
|
||||
circuit, afi == AFI_IP ? AF_INET : AF_INET6,
|
||||
|
@ -142,6 +142,7 @@ struct isis_circuit {
|
||||
struct list *ipv6_non_link; /* our non-link local IPv6 addresses */
|
||||
uint16_t upadjcount[ISIS_LEVELS];
|
||||
#define ISIS_CIRCUIT_FLAPPED_AFTER_SPF 0x01
|
||||
#define ISIS_CIRCUIT_IF_DOWN_FROM_Z 0x02
|
||||
uint8_t flags;
|
||||
bool disable_threeway_adj;
|
||||
struct {
|
||||
|
Loading…
Reference in New Issue
Block a user