mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-07-27 05:28:51 +00:00
Merge pull request #17344 from opensourcerouting/fix/reset_bgp_session_only_if_bfd_is_properly_working
bgpd: Reset BGP session only if it was a real BFD DOWN event
This commit is contained in:
commit
d18337f4bd
@ -53,14 +53,23 @@ static void bfd_session_status_update(struct bfd_session_params *bsp,
|
||||
peer->host);
|
||||
return;
|
||||
}
|
||||
peer->last_reset = PEER_DOWN_BFD_DOWN;
|
||||
|
||||
/* rfc9384 */
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->connection->status))
|
||||
bgp_notify_send(peer->connection, BGP_NOTIFY_CEASE,
|
||||
BGP_NOTIFY_CEASE_BFD_DOWN);
|
||||
/* Once the BFD session is UP, and later BGP session is UP,
|
||||
* BFD notices that peer->su_local changed, and BFD session goes down.
|
||||
* We should trigger BGP session reset if BFD session is UP
|
||||
* only when BGP session is UP already.
|
||||
* Otherwise, we end up resetting BGP session when BFD session is UP,
|
||||
* when the source address is changed, e.g. 0.0.0.0 -> 10.0.0.1.
|
||||
*/
|
||||
if (bss->last_event > peer->uptime) {
|
||||
peer->last_reset = PEER_DOWN_BFD_DOWN;
|
||||
/* rfc9384 */
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->connection->status))
|
||||
bgp_notify_send(peer->connection, BGP_NOTIFY_CEASE,
|
||||
BGP_NOTIFY_CEASE_BFD_DOWN);
|
||||
|
||||
BGP_EVENT_ADD(peer->connection, BGP_Stop);
|
||||
BGP_EVENT_ADD(peer->connection, BGP_Stop);
|
||||
}
|
||||
}
|
||||
|
||||
if (bss->state == BSS_UP && bss->previous_state != BSS_UP &&
|
||||
|
Loading…
Reference in New Issue
Block a user