summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@nvidia.com>2024-01-25 12:53:24 -0500
committerRajasekar Raja <rajasekarr@nvidia.com>2024-03-25 14:23:53 -0700
commit705fed7ca8ad0d849575fc0466eff7fa8fe6975d (patch)
tree417b6853dbe0dd3abe48611b670957e20af5acd0
parentffab0d7fbc757ef526f5987e35aa539ab13b2646 (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.c2
-rw-r--r--bgpd/bgp_table.h4
-rw-r--r--bgpd/bgpd.c2
-rw-r--r--bgpd/bgpd.h5
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);