summaryrefslogtreecommitdiff
path: root/zebra/zebra_ns.c
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@nvidia.com>2023-04-26 23:02:09 -0400
committerDonald Sharp <sharpd@nvidia.com>2023-07-05 13:03:14 -0400
commit605df8d44fab7a39429ed2d165fd06f0d98d3d0b (patch)
tree9554c05ae40845c70913cd3ea869b99fc73100e0 /zebra/zebra_ns.c
parenta014450441aeb1bf3f335d98903eee41e955867e (diff)
zebra: Use zebra dplane for RTM link and addr
a) Move the reads of link and address information into the dplane b) Move the startup read of data into the dplane as well. c) Break up startup reading of the linux kernel data into multiple phases. As that we have implied ordering of data that must be read first and if the dplane has taken over some data reading then we must delay initial read-in of other data. Fixes: #13288 Signed-off-by: Donald Sharp <sharpd@nvidia.com>
Diffstat (limited to 'zebra/zebra_ns.c')
-rw-r--r--zebra/zebra_ns.c36
1 files changed, 31 insertions, 5 deletions
diff --git a/zebra/zebra_ns.c b/zebra/zebra_ns.c
index 6bb5e971e6..ffdb9df531 100644
--- a/zebra/zebra_ns.c
+++ b/zebra/zebra_ns.c
@@ -23,6 +23,7 @@
#include "rib.h"
#include "table_manager.h"
#include "zebra_errors.h"
+#include "zebra_dplane.h"
extern struct zebra_privs_t zserv_privs;
@@ -101,6 +102,36 @@ int zebra_ns_disabled(struct ns *ns)
return zebra_ns_disable_internal(zns, true);
}
+void zebra_ns_startup_continue(struct zebra_dplane_ctx *ctx)
+{
+ struct zebra_ns *zns = zebra_ns_lookup(dplane_ctx_get_ns_id(ctx));
+ enum zebra_dplane_startup_notifications spot;
+
+ if (!zns) {
+ zlog_err("%s: No Namespace associated with %u", __func__,
+ dplane_ctx_get_ns_id(ctx));
+ return;
+ }
+
+ spot = dplane_ctx_get_startup_spot(ctx);
+
+ switch (spot) {
+ case ZEBRA_DPLANE_INTERFACES_READ:
+ interface_list_tunneldump(zns);
+ break;
+ case ZEBRA_DPLANE_TUNNELS_READ:
+ interface_list_second(zns);
+ break;
+ case ZEBRA_DPLANE_ADDRESSES_READ:
+ route_read(zns);
+
+ vlan_read(zns);
+ kernel_read_pbr_rules(zns);
+ kernel_read_tc_qdisc(zns);
+ break;
+ }
+}
+
/* Do global enable actions - open sockets, read kernel config etc. */
int zebra_ns_enable(ns_id_t ns_id, void **info)
{
@@ -111,11 +142,6 @@ int zebra_ns_enable(ns_id_t ns_id, void **info)
kernel_init(zns);
zebra_dplane_ns_enable(zns, true);
interface_list(zns);
- route_read(zns);
-
- vlan_read(zns);
- kernel_read_pbr_rules(zns);
- kernel_read_tc_qdisc(zns);
return 0;
}