From 705fed7ca8ad0d849575fc0466eff7fa8fe6975d Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Thu, 25 Jan 2024 12:53:24 -0500 Subject: [PATCH] bgpd: backpressure - Add a typesafe list for Zebra Announcement Modify the bgp master to hold a type safe list for bgp_dests that need to be passed to zebra. Future commits will use this. Ticket: #3390099 Signed-off-by: Donald Sharp Signed-off-by: Rajasekar Raja --- bgpd/bgp_main.c | 2 ++ bgpd/bgp_table.h | 4 ++++ bgpd/bgpd.c | 2 ++ bgpd/bgpd.h | 5 +++++ 4 files changed, 13 insertions(+) diff --git a/bgpd/bgp_main.c b/bgpd/bgp_main.c index 851c4880c3..44d5ee68cc 100644 --- a/bgpd/bgp_main.c +++ b/bgpd/bgp_main.c @@ -207,6 +207,8 @@ static __attribute__((__noreturn__)) void bgp_exit(int status) bgp_evpn_mh_finish(); bgp_nhg_finish(); + zebra_announce_fini(&bm->zebra_announce_head); + /* reverse bgp_dump_init */ bgp_dump_finish(); diff --git a/bgpd/bgp_table.h b/bgpd/bgp_table.h index 5b4c3be212..94bd816f55 100644 --- a/bgpd/bgp_table.h +++ b/bgpd/bgp_table.h @@ -76,6 +76,8 @@ struct bgp_dest { STAILQ_ENTRY(bgp_dest) pq; + struct zebra_announce_item zai; + uint64_t version; mpls_label_t local_label; @@ -97,6 +99,8 @@ struct bgp_dest { enum bgp_path_selection_reason reason; }; +DECLARE_LIST(zebra_announce, struct bgp_dest, zai); + extern void bgp_delete_listnode(struct bgp_dest *dest); /* * bgp_table_iter_t diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c index e7712f0f3e..650148859e 100644 --- a/bgpd/bgpd.c +++ b/bgpd/bgpd.c @@ -8289,6 +8289,8 @@ void bgp_master_init(struct event_loop *master, const int buffer_size, memset(&bgp_master, 0, sizeof(bgp_master)); bm = &bgp_master; + + zebra_announce_init(&bm->zebra_announce_head); bm->bgp = list_new(); bm->listen_sockets = list_new(); bm->port = BGP_PORT_DEFAULT; diff --git a/bgpd/bgpd.h b/bgpd/bgpd.h index 94bb107253..a1c7791c35 100644 --- a/bgpd/bgpd.h +++ b/bgpd/bgpd.h @@ -18,6 +18,8 @@ #include "iana_afi.h" #include "asn.h" +PREDECL_LIST(zebra_announce); + /* For union sockunion. */ #include "queue.h" #include "sockunion.h" @@ -175,6 +177,9 @@ struct bgp_master { bool v6_with_v4_nexthops; + /* To preserve ordering of installations into zebra across all Vrfs */ + struct zebra_announce_head zebra_announce_head; + QOBJ_FIELDS; }; DECLARE_QOBJ_TYPE(bgp_master);