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 <vivek@nvidia.com>

For internal use:
Ticket: CM-32032
Testing done: Multiple manual testing
This commit is contained in:
vivek 2020-12-02 20:04:19 -08:00 committed by Donald Sharp
parent bf9bc2e5f2
commit de692a4ebe

View File

@ -2658,9 +2658,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) {