From: vivek Date: Thu, 3 Dec 2020 04:04:19 +0000 (-0800) Subject: bgpd: Fix deterministic-med check for stale paths X-Git-Tag: frr-8.4.3~11^2~2 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=38efc4b35e43fa2b6ad2a6d4bb41f3fcb3a5d559;p=mirror%2Ffrr.git bgpd: Fix deterministic-med check for stale paths When performing deterministic MED processing, ensure that the peer status is not checked when we encounter a stale path. Otherwise, this path will be skipped from the DMED consideration leading to it potentially not being installed. Test scenario: Consider a prefix with 2 (multi)paths. The peer that announces the path with the winning DMED undergoes a graceful-restart. Before it comes back up, the other path goes away. Prior to the fix, a third router that receives both these paths would have ended up not having any path installed to the prefix after the above events. Signed-off-by: Vivek Venkatraman For internal use: Ticket: CM-32032 Testing done: Multiple manual testing (cherry picked from commit de692a4ebe0b8ea8e191d8ac1f3b41a386edd577) --- diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c index 29e2768d17..501e169b05 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c @@ -2590,9 +2590,12 @@ void bgp_best_selection(struct bgp *bgp, struct bgp_dest *dest, continue; if (BGP_PATH_HOLDDOWN(pi1)) continue; - if (pi1->peer != bgp->peer_self) + if (pi1->peer != bgp->peer_self && + !CHECK_FLAG(pi1->peer->sflags, + PEER_STATUS_NSF_WAIT)) { if (!peer_established(pi1->peer)) continue; + } new_select = pi1; if (pi1->next) {