Skip to content

Commit

Permalink
Merge pull request #16368 from raja-rajasekar/rajasekarr/bp_fixes
Browse files Browse the repository at this point in the history
bgpd: backpressure - fix to properly remove dest for bgp under deletion
  • Loading branch information
riw777 authored Jul 16, 2024
2 parents 05b65b4 + 186db96 commit 85b5067
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 13 deletions.
12 changes: 6 additions & 6 deletions bgpd/bgp_evpn.c
Original file line number Diff line number Diff line change
Expand Up @@ -6333,16 +6333,16 @@ struct bgpevpn *bgp_evpn_new(struct bgp *bgp, vni_t vni,
void bgp_evpn_free(struct bgp *bgp, struct bgpevpn *vpn)
{
struct bgp_dest *dest = NULL;
uint32_t ann_count = zebra_announce_count(&bm->zebra_announce_head);
struct bgp_dest *dest_next = NULL;

while (ann_count) {
dest = zebra_announce_pop(&bm->zebra_announce_head);
ann_count--;
for (dest = zebra_announce_first(&bm->zebra_announce_head); dest;
dest = dest_next) {
dest_next = zebra_announce_next(&bm->zebra_announce_head, dest);
if (dest->za_vpn == vpn) {
bgp_path_info_unlock(dest->za_bgp_pi);
bgp_dest_unlock_node(dest);
} else
zebra_announce_add_tail(&bm->zebra_announce_head, dest);
zebra_announce_del(&bm->zebra_announce_head, dest);
}
}

bgp_evpn_remote_ip_hash_destroy(vpn);
Expand Down
27 changes: 20 additions & 7 deletions bgpd/bgpd.c
Original file line number Diff line number Diff line change
Expand Up @@ -3936,21 +3936,34 @@ int bgp_delete(struct bgp *bgp)
safi_t safi;
int i;
struct bgp_dest *dest = NULL;
struct bgp_dest *dest_next = NULL;
struct bgp_table *dest_table = NULL;
struct graceful_restart_info *gr_info;
uint32_t ann_count = zebra_announce_count(&bm->zebra_announce_head);
uint32_t cnt_before, cnt_after;

assert(bgp);

while (ann_count) {
dest = zebra_announce_pop(&bm->zebra_announce_head);
ann_count--;
if (dest->za_bgp_pi->peer->bgp == bgp) {
/*
* Iterate the pending dest list and remove all the dest pertaininig to
* the bgp under delete.
*/
cnt_before = zebra_announce_count(&bm->zebra_announce_head);
for (dest = zebra_announce_first(&bm->zebra_announce_head); dest;
dest = dest_next) {
dest_next = zebra_announce_next(&bm->zebra_announce_head, dest);
dest_table = bgp_dest_table(dest);
if (dest_table->bgp == bgp) {
bgp_path_info_unlock(dest->za_bgp_pi);
bgp_dest_unlock_node(dest);
} else
zebra_announce_add_tail(&bm->zebra_announce_head, dest);
zebra_announce_del(&bm->zebra_announce_head, dest);
}
}

cnt_after = zebra_announce_count(&bm->zebra_announce_head);
if (BGP_DEBUG(zebra, ZEBRA))
zlog_debug("Zebra Announce Fifo cleanup count before %u and after %u during BGP %s deletion",
cnt_before, cnt_after, bgp->name_pretty);

bgp_soft_reconfig_table_task_cancel(bgp, NULL, NULL);

/* make sure we withdraw any exported routes */
Expand Down

0 comments on commit 85b5067

Please sign in to comment.