summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--zebra/main.c4
-rw-r--r--zebra/zebra_ns.c20
-rw-r--r--zebra/zebra_ns.h2
3 files changed, 22 insertions, 4 deletions
diff --git a/zebra/main.c b/zebra/main.c
index 687da70cab..dd6249eff5 100644
--- a/zebra/main.c
+++ b/zebra/main.c
@@ -238,7 +238,7 @@ void zebra_finalize(struct event *dummy)
zebra_ns_notify_close();
/* Final shutdown of ns resources */
- ns_walk_func(zebra_ns_final_shutdown, NULL, NULL);
+ ns_walk_func(zebra_ns_kernel_shutdown, NULL, NULL);
zebra_rib_terminate();
zebra_router_terminate();
@@ -251,6 +251,8 @@ void zebra_finalize(struct event *dummy)
label_manager_terminate();
+ ns_walk_func(zebra_ns_final_shutdown, NULL, NULL);
+
ns_terminate();
frr_fini();
exit(0);
diff --git a/zebra/zebra_ns.c b/zebra/zebra_ns.c
index 803d8f0034..ffd749fcf1 100644
--- a/zebra/zebra_ns.c
+++ b/zebra/zebra_ns.c
@@ -175,6 +175,22 @@ int zebra_ns_early_shutdown(struct ns *ns,
return NS_WALK_CONTINUE;
}
+/* During zebra shutdown, do kernel cleanup
+ * netlink sockets, ..
+ */
+int zebra_ns_kernel_shutdown(struct ns *ns, void *param_in __attribute__((unused)),
+ void **param_out __attribute__((unused)))
+{
+ struct zebra_ns *zns = ns->info;
+
+ if (zns == NULL)
+ return NS_WALK_CONTINUE;
+
+ kernel_terminate(zns, true);
+
+ return NS_WALK_CONTINUE;
+}
+
/* During zebra shutdown, do final cleanup
* after all dataplane work is complete.
*/
@@ -185,9 +201,7 @@ int zebra_ns_final_shutdown(struct ns *ns,
struct zebra_ns *zns = ns->info;
if (zns == NULL)
- return 0;
-
- kernel_terminate(zns, true);
+ return NS_WALK_CONTINUE;
zebra_ns_delete(ns);
diff --git a/zebra/zebra_ns.h b/zebra/zebra_ns.h
index 8d988c3f82..d5fd5869bc 100644
--- a/zebra/zebra_ns.h
+++ b/zebra/zebra_ns.h
@@ -70,6 +70,8 @@ int zebra_ns_early_shutdown(struct ns *ns,
int zebra_ns_final_shutdown(struct ns *ns,
void *param_in __attribute__((unused)),
void **param_out __attribute__((unused)));
+int zebra_ns_kernel_shutdown(struct ns *ns, void *param_in __attribute__((unused)),
+ void **param_out __attribute__((unused)));
void zebra_ns_startup_continue(struct zebra_dplane_ctx *ctx);