From: Donatas Abraitis Date: Tue, 25 Mar 2025 15:20:56 +0000 (+0200) Subject: bgpd: Retain the routes if we do a clear with N-bit set for Graceful-Restart X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=405e413e6acb2f9239078a14e451a3ff529a90ef;p=matthieu%2Ffrr.git bgpd: Retain the routes if we do a clear with N-bit set for Graceful-Restart On receiving side we already did the job correctly, but the peer which initiates the clear does not retain the other's routes. This commit fixes that. Fixes: 20170775da3a3c5d41aba714d0c1d5a29b0da61c ("bgpd: Activate Graceful-Restart when receiving CEASE/HOLDTIME notifications") Signed-off-by: Donatas Abraitis (cherry picked from commit b7c657d4e065f310fcf6454abae1a963c208c3b8) --- diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c index 9ebb2b21be..482e905636 100644 --- a/bgpd/bgp_packet.c +++ b/bgpd/bgp_packet.c @@ -1042,6 +1042,13 @@ static void bgp_notify_send_internal(struct peer_connection *connection, /* Add packet to peer's output queue */ stream_fifo_push(connection->obuf, s); + /* If Graceful-Restart N-bit (Notification) is exchanged, + * and it's not a Hard Reset, let's retain the routes. + */ + if (bgp_has_graceful_restart_notification(peer) && !hard_reset && + CHECK_FLAG(peer->sflags, PEER_STATUS_NSF_MODE)) + SET_FLAG(peer->sflags, PEER_STATUS_NSF_WAIT); + bgp_peer_gr_flags_update(peer); BGP_GR_ROUTER_DETECT_AND_SEND_CAPABILITY_TO_ZEBRA(peer->bgp, peer->bgp->peer);