diff options
Diffstat (limited to 'zebra/test_main.c')
| -rw-r--r-- | zebra/test_main.c | 445 |
1 files changed, 214 insertions, 231 deletions
diff --git a/zebra/test_main.c b/zebra/test_main.c index f3ef3df96a..69fc5fd404 100644 --- a/zebra/test_main.c +++ b/zebra/test_main.c @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with GNU Zebra; see the file COPYING. If not, write to the Free * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. + * 02111-1307, USA. */ #include <zebra.h> @@ -42,9 +42,8 @@ #include "zebra/interface.h" /* Zebra instance */ -struct zebra_t zebrad = -{ - .rtm_table_default = 0, +struct zebra_t zebrad = { + .rtm_table_default = 0, }; /* process id. */ @@ -60,25 +59,19 @@ extern int rib_process_hold_time; struct thread_master *master; /* Command line options. */ -struct option longopts[] = -{ - { "batch", no_argument, NULL, 'b'}, - { "daemon", no_argument, NULL, 'd'}, - { "allow_delete", no_argument, NULL, 'a'}, - { "config_file", required_argument, NULL, 'f'}, - { "help", no_argument, NULL, 'h'}, - { "vty_addr", required_argument, NULL, 'A'}, - { "vty_port", required_argument, NULL, 'P'}, - { "version", no_argument, NULL, 'v'}, - { "rib_hold", required_argument, NULL, 'r'}, - { 0 } -}; - -zebra_capabilities_t _caps_p [] = -{ - ZCAP_NET_ADMIN, - ZCAP_SYS_ADMIN, - ZCAP_NET_RAW, +struct option longopts[] = {{"batch", no_argument, NULL, 'b'}, + {"daemon", no_argument, NULL, 'd'}, + {"allow_delete", no_argument, NULL, 'a'}, + {"config_file", required_argument, NULL, 'f'}, + {"help", no_argument, NULL, 'h'}, + {"vty_addr", required_argument, NULL, 'A'}, + {"vty_port", required_argument, NULL, 'P'}, + {"version", no_argument, NULL, 'v'}, + {"rib_hold", required_argument, NULL, 'r'}, + {0}}; + +zebra_capabilities_t _caps_p[] = { + ZCAP_NET_ADMIN, ZCAP_SYS_ADMIN, ZCAP_NET_RAW, }; /* Default configuration file path. */ @@ -88,30 +81,30 @@ char config_default[] = SYSCONFDIR DEFAULT_CONFIG_FILE; const char *pid_file = "testzebra.pid"; /* Help information display. */ -static void -usage (char *progname, int status) +static void usage(char *progname, int status) { - if (status != 0) - fprintf (stderr, "Try `%s --help' for more information.\n", progname); - else - { - printf ("Usage : %s [OPTION...]\n\n"\ - "Daemon which manages kernel routing table management and "\ - "redistribution between different routing protocols.\n\n"\ - "-b, --batch Runs in batch mode\n"\ - "-d, --daemon Runs in daemon mode\n"\ - "-a, --allow_delete Allow other processes to delete zebra routes\n" \ - "-f, --config_file Set configuration file name\n"\ - "-A, --vty_addr Set vty's bind address\n"\ - "-P, --vty_port Set vty's port number\n"\ - "-r, --rib_hold Set rib-queue hold time\n"\ - "-v, --version Print program version\n"\ - "-h, --help Display this help and exit\n"\ - "\n"\ - "Report bugs to %s\n", progname, FRR_BUG_ADDRESS); - } - - exit (status); + if (status != 0) + fprintf(stderr, "Try `%s --help' for more information.\n", + progname); + else { + printf("Usage : %s [OPTION...]\n\n" + "Daemon which manages kernel routing table management and " + "redistribution between different routing protocols.\n\n" + "-b, --batch Runs in batch mode\n" + "-d, --daemon Runs in daemon mode\n" + "-a, --allow_delete Allow other processes to delete zebra routes\n" + "-f, --config_file Set configuration file name\n" + "-A, --vty_addr Set vty's bind address\n" + "-P, --vty_port Set vty's port number\n" + "-r, --rib_hold Set rib-queue hold time\n" + "-v, --version Print program version\n" + "-h, --help Display this help and exit\n" + "\n" + "Report bugs to %s\n", + progname, FRR_BUG_ADDRESS); + } + + exit(status); } static ifindex_t test_ifindex = 0; @@ -124,217 +117,207 @@ DEFUN (test_interface_state, "up\n" "down\n") { - int idx_up_down = 1; - VTY_DECLVAR_CONTEXT (interface, ifp); - - if (ifp->ifindex == IFINDEX_INTERNAL) - { - ifp->ifindex = ++test_ifindex; - ifp->mtu = 1500; - ifp->flags = IFF_BROADCAST|IFF_MULTICAST; - } - - switch (argv[idx_up_down]->arg[0]) - { - case 'u': - SET_FLAG (ifp->flags, IFF_UP); - if_add_update (ifp); - printf ("up\n"); - break; - case 'd': - UNSET_FLAG (ifp->flags, IFF_UP); - if_delete_update (ifp); - printf ("down\n"); - break; - default: - return CMD_WARNING; - } - return CMD_SUCCESS; + int idx_up_down = 1; + VTY_DECLVAR_CONTEXT(interface, ifp); + + if (ifp->ifindex == IFINDEX_INTERNAL) { + ifp->ifindex = ++test_ifindex; + ifp->mtu = 1500; + ifp->flags = IFF_BROADCAST | IFF_MULTICAST; + } + + switch (argv[idx_up_down]->arg[0]) { + case 'u': + SET_FLAG(ifp->flags, IFF_UP); + if_add_update(ifp); + printf("up\n"); + break; + case 'd': + UNSET_FLAG(ifp->flags, IFF_UP); + if_delete_update(ifp); + printf("down\n"); + break; + default: + return CMD_WARNING; + } + return CMD_SUCCESS; } -static void -test_cmd_init (void) +static void test_cmd_init(void) { - install_element (INTERFACE_NODE, &test_interface_state_cmd); + install_element(INTERFACE_NODE, &test_interface_state_cmd); } /* SIGHUP handler. */ -static void -sighup (void) +static void sighup(void) { - zlog_info ("SIGHUP received"); + zlog_info("SIGHUP received"); - /* Reload of config file. */ - ; + /* Reload of config file. */ + ; } /* SIGINT handler. */ -static void -sigint (void) +static void sigint(void) { - zlog_notice ("Terminating on signal"); + zlog_notice("Terminating on signal"); - exit (0); + exit(0); } /* SIGUSR1 handler. */ -static void -sigusr1 (void) +static void sigusr1(void) { - zlog_rotate(); + zlog_rotate(); } -struct quagga_signal_t zebra_signals[] = -{ - { - .signal = SIGHUP, - .handler = &sighup, - }, - { - .signal = SIGUSR1, - .handler = &sigusr1, - }, - { - .signal = SIGINT, - .handler = &sigint, - }, - { - .signal = SIGTERM, - .handler = &sigint, - }, +struct quagga_signal_t zebra_signals[] = { + { + .signal = SIGHUP, + .handler = &sighup, + }, + { + .signal = SIGUSR1, + .handler = &sigusr1, + }, + { + .signal = SIGINT, + .handler = &sigint, + }, + { + .signal = SIGTERM, + .handler = &sigint, + }, }; /* Main startup routine. */ -int -main (int argc, char **argv) +int main(int argc, char **argv) { - char *p; - char *vty_addr = NULL; - int vty_port = 0; - int batch_mode = 0; - int daemon_mode = 0; - char *config_file = NULL; - char *progname; - struct thread thread; + char *p; + char *vty_addr = NULL; + int vty_port = 0; + int batch_mode = 0; + int daemon_mode = 0; + char *config_file = NULL; + char *progname; + struct thread thread; + + /* Set umask before anything for security */ + umask(0027); + + /* preserve my name */ + progname = ((p = strrchr(argv[0], '/')) ? ++p : argv[0]); + + openzlog(progname, "ZEBRA", 0, LOG_CONS | LOG_NDELAY | LOG_PID, + LOG_DAEMON); + + while (1) { + int opt; + + opt = getopt_long(argc, argv, "bdaf:hA:P:r:v", longopts, 0); + + if (opt == EOF) + break; + + switch (opt) { + case 0: + break; + case 'b': + batch_mode = 1; + case 'd': + daemon_mode = 1; + break; + case 'a': + allow_delete = 1; + break; + case 'f': + config_file = optarg; + break; + case 'A': + vty_addr = optarg; + break; + case 'P': + /* Deal with atoi() returning 0 on failure, and zebra + not + listening on zebra port... */ + if (strcmp(optarg, "0") == 0) { + vty_port = 0; + break; + } + vty_port = atoi(optarg); + break; + case 'r': + rib_process_hold_time = atoi(optarg); + break; + case 'v': + print_version(progname); + exit(0); + break; + case 'h': + usage(progname, 0); + break; + default: + usage(progname, 1); + break; + } + } - /* Set umask before anything for security */ - umask (0027); + /* port and conf file mandatory */ + if (!vty_port || !config_file) { + fprintf(stderr, + "Error: --vty_port and --config_file arguments" + " are both required\n"); + usage(progname, 1); + } - /* preserve my name */ - progname = ((p = strrchr (argv[0], '/')) ? ++p : argv[0]); + /* Make master thread emulator. */ + zebrad.master = thread_master_create(); + + /* Vty related initialize. */ + signal_init(zebrad.master, array_size(zebra_signals), zebra_signals); + cmd_init(1); + vty_config_lockless(); + vty_init(zebrad.master); + memory_init(); + zebra_debug_init(); + zebra_if_init(); + test_cmd_init(); + + /* Zebra related initialize. */ + rib_init(); + access_list_init(); + + /* Make kernel routing socket. */ + zebra_vrf_init(); + zebra_vty_init(); + + /* Configuration file read*/ + vty_read_config(config_file, config_default); + + /* Clean up rib. */ + rib_weed_tables(); + + /* Exit when zebra is working in batch mode. */ + if (batch_mode) + exit(0); + + /* Daemonize. */ + if (daemon_mode && daemon(0, 0) < 0) { + perror("daemon start failed"); + exit(1); + } - openzlog(progname, "ZEBRA", 0, LOG_CONS | LOG_NDELAY | LOG_PID, LOG_DAEMON); + /* Needed for BSD routing socket. */ + pid = getpid(); - while (1) - { - int opt; - - opt = getopt_long (argc, argv, "bdaf:hA:P:r:v", longopts, 0); + /* Make vty server socket. */ + vty_serv_sock(vty_addr, vty_port, "/tmp/test_zebra"); - if (opt == EOF) - break; + /* Print banner. */ + zlog_notice("Zebra %s starting: vty@%d", FRR_VERSION, vty_port); - switch (opt) - { - case 0: - break; - case 'b': - batch_mode = 1; - case 'd': - daemon_mode = 1; - break; - case 'a': - allow_delete =1; - break; - case 'f': - config_file = optarg; - break; - case 'A': - vty_addr = optarg; - break; - case 'P': - /* Deal with atoi() returning 0 on failure, and zebra not - listening on zebra port... */ - if (strcmp(optarg, "0") == 0) - { - vty_port = 0; - break; - } - vty_port = atoi (optarg); - break; - case 'r': - rib_process_hold_time = atoi(optarg); - break; - case 'v': - print_version (progname); - exit (0); - break; - case 'h': - usage (progname, 0); - break; - default: - usage (progname, 1); - break; - } - } - - /* port and conf file mandatory */ - if (!vty_port || !config_file) - { - fprintf (stderr, "Error: --vty_port and --config_file arguments" - " are both required\n"); - usage (progname, 1); - } - - /* Make master thread emulator. */ - zebrad.master = thread_master_create (); - - /* Vty related initialize. */ - signal_init (zebrad.master, array_size(zebra_signals), zebra_signals); - cmd_init (1); - vty_config_lockless (); - vty_init (zebrad.master); - memory_init (); - zebra_debug_init (); - zebra_if_init (); - test_cmd_init (); - - /* Zebra related initialize. */ - rib_init (); - access_list_init (); - - /* Make kernel routing socket. */ - zebra_vrf_init (); - zebra_vty_init(); - - /* Configuration file read*/ - vty_read_config (config_file, config_default); - - /* Clean up rib. */ - rib_weed_tables (); - - /* Exit when zebra is working in batch mode. */ - if (batch_mode) - exit (0); - - /* Daemonize. */ - if (daemon_mode && daemon (0, 0) < 0) - { - perror("daemon start failed"); - exit (1); - } - - /* Needed for BSD routing socket. */ - pid = getpid (); - - /* Make vty server socket. */ - vty_serv_sock (vty_addr, vty_port, "/tmp/test_zebra"); - - /* Print banner. */ - zlog_notice ("Zebra %s starting: vty@%d", FRR_VERSION, vty_port); - - while (thread_fetch (zebrad.master, &thread)) - thread_call (&thread); - - /* Not reached... */ - return 0; + while (thread_fetch(zebrad.master, &thread)) + thread_call(&thread); + + /* Not reached... */ + return 0; } |
