X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=ospf6d%2Fospf6_main.c;h=046badc8248504b40847bd17787d236275fcf61a;hb=01b4cb3ed6181d7200f66e0187b1e5c5db6c0e5a;hp=f69c1e1bca4c2f1c26ea639963c9223bd6fc7b75;hpb=bac7b7b935162915bbefb7d01ce55eb364635c0b;p=mirror_frr.git diff --git a/ospf6d/ospf6_main.c b/ospf6d/ospf6_main.c index f69c1e1bc..046badc82 100644 --- a/ospf6d/ospf6_main.c +++ b/ospf6d/ospf6_main.c @@ -55,184 +55,174 @@ #define OSPF6_VTY_PORT 2606 /* ospf6d privileges */ -zebra_capabilities_t _caps_p [] = -{ - ZCAP_NET_RAW, - ZCAP_BIND -}; +zebra_capabilities_t _caps_p[] = {ZCAP_NET_RAW, ZCAP_BIND}; -struct zebra_privs_t ospf6d_privs = -{ +struct zebra_privs_t ospf6d_privs = { #if defined(FRR_USER) - .user = FRR_USER, + .user = FRR_USER, #endif #if defined FRR_GROUP - .group = FRR_GROUP, + .group = FRR_GROUP, #endif #ifdef VTY_GROUP - .vty_group = VTY_GROUP, + .vty_group = VTY_GROUP, #endif - .caps_p = _caps_p, - .cap_num_p = 2, - .cap_num_i = 0 -}; + .caps_p = _caps_p, + .cap_num_p = 2, + .cap_num_i = 0}; /* ospf6d options, we use GNU getopt library. */ -struct option longopts[] = -{ - { 0 } -}; +struct option longopts[] = {{0}}; /* Master of threads. */ struct thread_master *master; -static void __attribute__ ((noreturn)) -ospf6_exit (int status) +static void __attribute__((noreturn)) ospf6_exit(int status) { - struct listnode *node; - struct interface *ifp; + struct vrf *vrf = vrf_lookup_by_id(VRF_DEFAULT); + struct interface *ifp; - if (ospf6) - ospf6_delete (ospf6); + frr_early_fini(); - bfd_gbl_exit(); + if (ospf6) + ospf6_delete(ospf6); - for (ALL_LIST_ELEMENTS_RO (vrf_iflist (VRF_DEFAULT), node, ifp)) - if (ifp->info != NULL) - ospf6_interface_delete(ifp->info); + bfd_gbl_exit(); - ospf6_message_terminate (); - ospf6_asbr_terminate (); - ospf6_lsa_terminate (); + FOR_ALL_INTERFACES (vrf, ifp) + if (ifp->info != NULL) + ospf6_interface_delete(ifp->info); - vrf_terminate (); - vty_terminate (); - cmd_terminate (); + ospf6_message_terminate(); + ospf6_asbr_terminate(); + ospf6_lsa_terminate(); - if (zclient) - zclient_free (zclient); + /* reverse access_list_init */ + access_list_reset(); - if (master) - thread_master_free (master); + /* reverse prefix_list_init */ + prefix_list_add_hook(NULL); + prefix_list_delete_hook(NULL); + prefix_list_reset(); - closezlog (); + vrf_terminate(); - exit (status); + if (zclient) { + zclient_stop(zclient); + zclient_free(zclient); + } + + frr_fini(); + exit(status); } /* SIGHUP handler. */ -static void -sighup (void) +static void sighup(void) { - zlog_info ("SIGHUP received"); + zlog_info("SIGHUP received"); } /* SIGINT handler. */ -static void -sigint (void) +static void sigint(void) { - zlog_notice ("Terminating on signal SIGINT"); - ospf6_exit (0); + zlog_notice("Terminating on signal SIGINT"); + ospf6_exit(0); } /* SIGTERM handler. */ -static void -sigterm (void) +static void sigterm(void) { - zlog_notice ("Terminating on signal SIGTERM"); - ospf6_clean(); - ospf6_exit (0); + zlog_notice("Terminating on signal SIGTERM"); + ospf6_exit(0); } /* SIGUSR1 handler. */ -static void -sigusr1 (void) +static void sigusr1(void) { - zlog_info ("SIGUSR1 received"); - zlog_rotate(); + zlog_info("SIGUSR1 received"); + zlog_rotate(); } -struct quagga_signal_t ospf6_signals[] = -{ - { - .signal = SIGHUP, - .handler = &sighup, - }, - { - .signal = SIGINT, - .handler = &sigint, - }, - { - .signal = SIGTERM, - .handler = &sigterm, - }, - { - .signal = SIGUSR1, - .handler = &sigusr1, - }, +struct quagga_signal_t ospf6_signals[] = { + { + .signal = SIGHUP, + .handler = &sighup, + }, + { + .signal = SIGINT, + .handler = &sigint, + }, + { + .signal = SIGTERM, + .handler = &sigterm, + }, + { + .signal = SIGUSR1, + .handler = &sigusr1, + }, }; -FRR_DAEMON_INFO(ospf6d, OSPF6, - .vty_port = OSPF6_VTY_PORT, +static const struct frr_yang_module_info *ospf6d_yang_modules[] = { + &frr_interface_info, +}; - .proghelp = "Implementation of the OSPFv3 routing protocol.", +FRR_DAEMON_INFO(ospf6d, OSPF6, .vty_port = OSPF6_VTY_PORT, - .signals = ospf6_signals, - .n_signals = array_size(ospf6_signals), + .proghelp = "Implementation of the OSPFv3 routing protocol.", - .privs = &ospf6d_privs, -) + .signals = ospf6_signals, + .n_signals = array_size(ospf6_signals), + + .privs = &ospf6d_privs, .yang_modules = ospf6d_yang_modules, + .n_yang_modules = array_size(ospf6d_yang_modules), ) /* Main routine of ospf6d. Treatment of argument and starting ospf finite state machine is handled here. */ -int -main (int argc, char *argv[], char *envp[]) +int main(int argc, char *argv[], char *envp[]) { - int opt; - - frr_preinit (&ospf6d_di, argc, argv); - frr_opt_add ("", longopts, ""); - - /* Command line argument treatment. */ - while (1) - { - opt = frr_getopt (argc, argv, NULL); - - if (opt == EOF) - break; - - switch (opt) - { - case 0: - break; - default: - frr_help_exit (1); - break; - } - } - - if (geteuid () != 0) - { - errno = EPERM; - perror (ospf6d_di.progname); - exit (1); - } - - /* thread master */ - master = frr_init (); - - vrf_init (NULL, NULL, NULL, NULL); - access_list_init (); - prefix_list_init (); - - /* initialize ospf6 */ - ospf6_init (); - - frr_config_fork (); - frr_run (master); - - /* Not reached. */ - ospf6_exit (0); -} + int opt; + frr_preinit(&ospf6d_di, argc, argv); + frr_opt_add("", longopts, ""); + /* Command line argument treatment. */ + while (1) { + opt = frr_getopt(argc, argv, NULL); + + if (opt == EOF) + break; + + switch (opt) { + case 0: + break; + default: + frr_help_exit(1); + break; + } + } + + if (geteuid() != 0) { + errno = EPERM; + perror(ospf6d_di.progname); + exit(1); + } + + /* OSPF6 master init. */ + ospf6_master_init(); + + /* thread master */ + master = frr_init(); + + vrf_init(NULL, NULL, NULL, NULL, NULL); + access_list_init(); + prefix_list_init(); + + /* initialize ospf6 */ + ospf6_init(); + + frr_config_fork(); + frr_run(master); + + /* Not reached. */ + ospf6_exit(0); +}