diff options
author | Donald Sharp <sharpd@nvidia.com> | 2022-03-07 17:28:28 +0100 |
---|---|---|
committer | Donald Sharp <sharpd@nvidia.com> | 2022-03-07 17:28:28 +0100 |
commit | e3015d915b1fa7016647dbb195611e510a9942f0 (patch) | |
tree | 0f2ec8f8a9c72c1825de564019213433f77587bf | |
parent | Merge pull request #10732 from anlancs/zebra-minor-move (diff) | |
download | frr-e3015d915b1fa7016647dbb195611e510a9942f0.tar.xz frr-e3015d915b1fa7016647dbb195611e510a9942f0.zip |
bgpd: Fix continue/break change from old commit
Commit: ea47320b1d0eeaa56f945fa356da7e4ca7f2b0b2
Modified the bgp_clear_stale_route function to have
better indentation, but in the process changed some
`continue;` statements to `break;` which modified
the looping and caused stale paths to not always be
removed upon an update.
To reproduce: A ---- B, setup with addpath and GR
One side has a prefix with nhop1 and nhop2, kill one
side and then resend the same prefix with nhop3,
paths nhop1 and 2 become stale and never removed.
Code inspection clearly shows that that `continue`
statements became `break` statements causing the
loop over all paths to stop prematurely.
The fix is to change the break back to continue
statements so the loop can continue instead of
stopping.
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
-rw-r--r-- | bgpd/bgp_route.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c index 186068638..485495924 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c @@ -5376,10 +5376,10 @@ void bgp_clear_stale_route(struct peer *peer, afi_t afi, safi_t safi) bgp_attr_get_community( pi->attr), COMMUNITY_NO_LLGR)) - break; + continue; if (!CHECK_FLAG(pi->flags, BGP_PATH_STALE)) - break; + continue; /* * If this is VRF leaked route @@ -5409,9 +5409,9 @@ void bgp_clear_stale_route(struct peer *peer, afi_t afi, safi_t safi) !community_include( bgp_attr_get_community(pi->attr), COMMUNITY_NO_LLGR)) - break; + continue; if (!CHECK_FLAG(pi->flags, BGP_PATH_STALE)) - break; + continue; if (safi == SAFI_UNICAST && (peer->bgp->inst_type == BGP_INSTANCE_TYPE_VRF || |