diff options
| author | Donald Sharp <sharpd@nvidia.com> | 2024-01-25 12:53:24 -0500 |
|---|---|---|
| committer | Rajasekar Raja <rajasekarr@nvidia.com> | 2024-03-25 14:23:53 -0700 |
| commit | 705fed7ca8ad0d849575fc0466eff7fa8fe6975d (patch) | |
| tree | 417b6853dbe0dd3abe48611b670957e20af5acd0 | |
| parent | ffab0d7fbc757ef526f5987e35aa539ab13b2646 (diff) | |
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 <sharpd@nvidia.com>
Signed-off-by: Rajasekar Raja <rajasekarr@nvidia.com>
| -rw-r--r-- | bgpd/bgp_main.c | 2 | ||||
| -rw-r--r-- | bgpd/bgp_table.h | 4 | ||||
| -rw-r--r-- | bgpd/bgpd.c | 2 | ||||
| -rw-r--r-- | bgpd/bgpd.h | 5 |
4 files changed, 13 insertions, 0 deletions
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); |
