]> git.proxmox.com Git - mirror_frr.git/blobdiff - eigrpd/eigrp_main.c
zebra: Allow ns delete to happen after under/over flow checks
[mirror_frr.git] / eigrpd / eigrp_main.c
index b11b5825ccd82b4dd4ce33b24b4d14b324e4d09e..063fc5fec10dc61366e4ece1692921b32dc95005 100644 (file)
@@ -50,7 +50,7 @@
 #include "keychain.h"
 #include "distribute.h"
 #include "libfrr.h"
-//#include "routemap.h"
+#include "routemap.h"
 //#include "if_rmap.h"
 
 #include "eigrpd/eigrp_structs.h"
 #include "eigrpd/eigrp_network.h"
 #include "eigrpd/eigrp_snmp.h"
 #include "eigrpd/eigrp_filter.h"
+#include "eigrpd/eigrp_errors.h"
 //#include "eigrpd/eigrp_routemap.h"
 
 /* eigprd privileges */
-zebra_capabilities_t _caps_p [] = 
-{
-  ZCAP_NET_RAW,
-  ZCAP_BIND,
-  ZCAP_NET_ADMIN,
+zebra_capabilities_t _caps_p[] = {
+       ZCAP_NET_RAW, ZCAP_BIND, ZCAP_NET_ADMIN,
 };
 
-struct zebra_privs_t eigrpd_privs =
-{
-#if defined (FRR_USER) && defined (FRR_GROUP)
-  .user = FRR_USER,
-  .group = FRR_GROUP,
+struct zebra_privs_t eigrpd_privs = {
+#if defined(FRR_USER) && defined(FRR_GROUP)
+       .user = FRR_USER,
+       .group = FRR_GROUP,
 #endif
-#if defined (VTY_GROUP)
-  .vty_group = VTY_GROUP,
+#if defined(VTY_GROUP)
+       .vty_group = VTY_GROUP,
 #endif
-  .caps_p = _caps_p,
-  .cap_num_p = array_size (_caps_p),
-  .cap_num_i = 0
-};
+       .caps_p = _caps_p,
+       .cap_num_p = array_size(_caps_p),
+       .cap_num_i = 0};
 
 /* EIGRPd options. */
-struct option longopts[] =
-  {
-    { 0 }
-  };
+struct option longopts[] = {{0}};
 
 /* Master of threads. */
 struct thread_master *master;
 
 /* SIGHUP handler. */
-static void 
-sighup (void)
+static void sighup(void)
 {
-  zlog_info ("SIGHUP received");
+       zlog_info("SIGHUP received");
 }
 
 /* SIGINT / SIGTERM handler. */
-static void
-sigint (void)
+static void sigint(void)
 {
-  zlog_notice ("Terminating on signal");
-  eigrp_terminate ();
+       zlog_notice("Terminating on signal");
+       eigrp_terminate();
+
+       exit(0);
 }
 
 /* SIGUSR1 handler. */
-static void
-sigusr1 (void)
+static void sigusr1(void)
 {
-  zlog_rotate ();
+       zlog_rotate();
 }
 
-struct quagga_signal_t eigrp_signals[] =
-{
-  {
-    .signal = SIGHUP,
-    .handler = &sighup,
-  },
-  {
-    .signal = SIGUSR1,
-    .handler = &sigusr1,
-  },  
-  {
-    .signal = SIGINT,
-    .handler = &sigint,
-  },
-  {
-    .signal = SIGTERM,
-    .handler = &sigint,
-  },
+struct quagga_signal_t eigrp_signals[] = {
+       {
+               .signal = SIGHUP,
+               .handler = &sighup,
+       },
+       {
+               .signal = SIGUSR1,
+               .handler = &sigusr1,
+       },
+       {
+               .signal = SIGINT,
+               .handler = &sigint,
+       },
+       {
+               .signal = SIGTERM,
+               .handler = &sigint,
+       },
+};
+
+static const struct frr_yang_module_info *eigrpd_yang_modules[] = {
+       &frr_interface_info,
 };
 
-FRR_DAEMON_INFO(eigrpd, EIGRP,
-                .vty_port = EIGRP_VTY_PORT,
+FRR_DAEMON_INFO(eigrpd, EIGRP, .vty_port = EIGRP_VTY_PORT,
 
-                .proghelp = "Implementation of the EIGRP routing protocol.",
+               .proghelp = "Implementation of the EIGRP routing protocol.",
 
-                .signals = eigrp_signals,
-                .n_signals = array_size(eigrp_signals),
+               .signals = eigrp_signals,
+               .n_signals = array_size(eigrp_signals),
 
-                .privs = &eigrpd_privs,
-                )
+               .privs = &eigrpd_privs, .yang_modules = eigrpd_yang_modules,
+               .n_yang_modules = array_size(eigrpd_yang_modules), )
 
 /* EIGRPd main routine. */
-int
-main (int argc, char **argv, char **envp)
+int main(int argc, char **argv, char **envp)
 {
-  frr_preinit (&eigrpd_di, argc, argv);
-  frr_opt_add ("", longopts, "");
-
-  while (1)
-    {
-      int opt;
-
-      opt = frr_getopt (argc, argv, NULL);
-
-      if (opt == EOF)
-        break;
-
-      switch (opt)
-        {
-        case 0:
-          break;
-        default:
-          frr_help_exit (1);
-          break;
-        }
-    }
-
-  /* EIGRP master init. */
-  eigrp_master_init ();
-  eigrp_om->master = frr_init();
-  master = eigrp_om->master;
-
-  vrf_init ();
-
-  /*EIGRPd init*/
-  eigrp_if_init ();
-  eigrp_zebra_init ();
-  eigrp_debug_init ();
-
-  /* Get configuration file. */
-  /* EIGRP VTY inits */
-  eigrp_vty_init ();
-  keychain_init();
-  eigrp_vty_show_init ();
-  eigrp_vty_if_init ();
+       frr_preinit(&eigrpd_di, argc, argv);
+       frr_opt_add("", longopts, "");
+
+       while (1) {
+               int opt;
+
+               opt = frr_getopt(argc, argv, NULL);
+
+               if (opt == EOF)
+                       break;
+
+               switch (opt) {
+               case 0:
+                       break;
+               default:
+                       frr_help_exit(1);
+                       break;
+               }
+       }
+
+       eigrp_sw_version_initialize();
+
+       /* EIGRP master init. */
+       eigrp_master_init();
+       eigrp_om->master = frr_init();
+       master = eigrp_om->master;
+
+       eigrp_error_init();
+       vrf_init(NULL, NULL, NULL, NULL, NULL);
+
+       /*EIGRPd init*/
+       eigrp_if_init();
+       eigrp_zebra_init();
+       eigrp_debug_init();
+
+       /* Get configuration file. */
+       /* EIGRP VTY inits */
+       eigrp_vty_init();
+       keychain_init();
+       eigrp_vty_show_init();
+       eigrp_vty_if_init();
 
 #ifdef HAVE_SNMP
-  eigrp_snmp_init ();
+       eigrp_snmp_init();
 #endif /* HAVE_SNMP */
 
-  /* Access list install. */
-  access_list_init ();
-  access_list_add_hook (eigrp_distribute_update_all_wrapper);
-  access_list_delete_hook (eigrp_distribute_update_all_wrapper);
-
-  /* Prefix list initialize.*/
-  prefix_list_init ();
-  prefix_list_add_hook (eigrp_distribute_update_all);
-  prefix_list_delete_hook (eigrp_distribute_update_all);
-
-  /*eigrp_route_map_init();
-    route_map_add_hook (eigrp_rmap_update);
-    route_map_delete_hook (eigrp_rmap_update);*/
-  /*if_rmap_init (EIGRP_NODE);
-    if_rmap_hook_add (eigrp_if_rmap_update);
-    if_rmap_hook_delete (eigrp_if_rmap_update);*/
-
-  /* Distribute list install. */
-  distribute_list_init (EIGRP_NODE);
-  distribute_list_add_hook (eigrp_distribute_update);
-  distribute_list_delete_hook (eigrp_distribute_update);
-
-  frr_config_fork ();
-  frr_run(master);
-
-  /* Not reached. */
-  return (0);
-  
+       /* Access list install. */
+       access_list_init();
+       access_list_add_hook(eigrp_distribute_update_all_wrapper);
+       access_list_delete_hook(eigrp_distribute_update_all_wrapper);
+
+       /* Prefix list initialize.*/
+       prefix_list_init();
+       prefix_list_add_hook(eigrp_distribute_update_all);
+       prefix_list_delete_hook(eigrp_distribute_update_all);
+
+       /*
+        * XXX: This is just to get the CLI installed to suppress VTYSH errors.
+        * Routemaps in EIGRP are not yet functional.
+        */
+       route_map_init();
+       /*eigrp_route_map_init();
+         route_map_add_hook (eigrp_rmap_update);
+         route_map_delete_hook (eigrp_rmap_update);*/
+       /*if_rmap_init (EIGRP_NODE);
+         if_rmap_hook_add (eigrp_if_rmap_update);
+         if_rmap_hook_delete (eigrp_if_rmap_update);*/
+
+       /* Distribute list install. */
+       distribute_list_init(EIGRP_NODE);
+       distribute_list_add_hook(eigrp_distribute_update);
+       distribute_list_delete_hook(eigrp_distribute_update);
+
+       frr_config_fork();
+       frr_run(master);
+
+       /* Not reached. */
+       return (0);
 }