diff options
Diffstat (limited to 'zebra/main.c')
| -rw-r--r-- | zebra/main.c | 68 |
1 files changed, 38 insertions, 30 deletions
diff --git a/zebra/main.c b/zebra/main.c index dd6249eff5..138a955bc3 100644 --- a/zebra/main.c +++ b/zebra/main.c @@ -54,6 +54,8 @@ #define ZEBRA_PTM_SUPPORT +char *zserv_path; + /* process id. */ pid_t pid; @@ -314,17 +316,46 @@ FRR_DAEMON_INFO(zebra, ZEBRA, ); /* clang-format on */ +void zebra_main_router_started(void) +{ + /* + * Clean up zebra-originated routes. The requests will be sent to OS + * immediately, so originating PID in notifications from kernel + * will be equal to the current getpid(). To know about such routes, + * we have to have route_read() called before. + * If FRR is gracefully restarting, we either wait for clients + * (e.g., BGP) to signal GR is complete else we wait for specified + * duration. + */ + zrouter.startup_time = monotime(NULL); + zrouter.rib_sweep_time = 0; + zrouter.graceful_restart = zebra_di.graceful_restart; + if (!zrouter.graceful_restart) + event_add_timer(zrouter.master, rib_sweep_route, NULL, 0, NULL); + else { + int gr_cleanup_time; + + gr_cleanup_time = zebra_di.gr_cleanup_time ? zebra_di.gr_cleanup_time + : ZEBRA_GR_DEFAULT_RIB_SWEEP_TIME; + event_add_timer(zrouter.master, rib_sweep_route, NULL, gr_cleanup_time, + &zrouter.t_rib_sweep); + } + + zserv_start(zserv_path); +} + /* Main startup routine. */ int main(int argc, char **argv) { // int batch_mode = 0; - char *zserv_path = NULL; struct sockaddr_storage dummy; socklen_t dummylen; bool asic_offload = false; bool v6_with_v4_nexthop = false; bool notify_on_ack = true; + zserv_path = NULL; + vrf_configure_backend(VRF_BACKEND_VRF_LITE); frr_preinit(&zebra_di, argc, argv); @@ -341,7 +372,7 @@ int main(int argc, char **argv) " -e, --ecmp Specify ECMP to use.\n" " -r, --retain When program terminates, retain added route by zebra.\n" " -A, --asic-offload FRR is interacting with an asic underneath the linux kernel\n" - " --v6-with-v4-nexthops Underlying dataplane supports v6 routes with v4 nexthops" + " --v6-with-v4-nexthops Underlying dataplane supports v6 routes with v4 nexthops\n" #ifdef HAVE_NETLINK " -s, --nl-bufsize Set netlink receive buffer size\n" " -n, --vrfwnetns Use NetNS as VRF backend\n" @@ -475,31 +506,11 @@ int main(int argc, char **argv) */ frr_config_fork(); - /* After we have successfully acquired the pidfile, we can be sure - * about being the only copy of zebra process, which is submitting - * changes to the FIB. - * Clean up zebra-originated routes. The requests will be sent to OS - * immediately, so originating PID in notifications from kernel - * will be equal to the current getpid(). To know about such routes, - * we have to have route_read() called before. - * If FRR is gracefully restarting, we either wait for clients - * (e.g., BGP) to signal GR is complete else we wait for specified - * duration. - */ - zrouter.startup_time = monotime(NULL); - zrouter.rib_sweep_time = 0; - zrouter.graceful_restart = zebra_di.graceful_restart; - if (!zrouter.graceful_restart) - event_add_timer(zrouter.master, rib_sweep_route, NULL, 0, NULL); - else { - int gr_cleanup_time; - - gr_cleanup_time = zebra_di.gr_cleanup_time - ? zebra_di.gr_cleanup_time - : ZEBRA_GR_DEFAULT_RIB_SWEEP_TIME; - event_add_timer(zrouter.master, rib_sweep_route, NULL, - gr_cleanup_time, &zrouter.t_rib_sweep); - } + /* + * After we have successfully acquired the pidfile, we can be sure + * about being the only copy of zebra process, which is submitting + * changes to the FIB. + */ /* Needed for BSD routing socket. */ pid = getpid(); @@ -510,9 +521,6 @@ int main(int argc, char **argv) /* Start the ted module, before zserv */ zebra_opaque_start(); - /* Start Zebra API server */ - zserv_start(zserv_path); - /* Init label manager */ label_manager_init(); |
