diff options
Diffstat (limited to 'nhrpd/nhrp_main.c')
| -rw-r--r-- | nhrpd/nhrp_main.c | 141 |
1 files changed, 23 insertions, 118 deletions
diff --git a/nhrpd/nhrp_main.c b/nhrpd/nhrp_main.c index dfb76a4081..2f6ee1c04f 100644 --- a/nhrpd/nhrp_main.c +++ b/nhrpd/nhrp_main.c @@ -19,6 +19,7 @@ #include "memory.h" #include "memory_vty.h" #include "command.h" +#include "libfrr.h" #include "nhrpd.h" #include "netlink.h" @@ -29,25 +30,9 @@ unsigned int debug_flags = 0; struct thread_master *master; struct timeval current_time; -static const char *pid_file = PATH_NHRPD_PID; -static char config_default[] = SYSCONFDIR NHRP_DEFAULT_CONFIG; -static char *config_file = NULL; -static char *vty_addr = NULL; -static int vty_port = NHRP_VTY_PORT; -static int do_daemonise = 0; /* nhrpd options. */ struct option longopts[] = { - { "daemon", no_argument, NULL, 'd'}, - { "config_file", required_argument, NULL, 'f'}, - { "pid_file", required_argument, NULL, 'i'}, - { "socket", required_argument, NULL, 'z'}, - { "help", no_argument, NULL, 'h'}, - { "vty_addr", required_argument, NULL, 'A'}, - { "vty_port", required_argument, NULL, 'P'}, - { "user", required_argument, NULL, 'u'}, - { "group", required_argument, NULL, 'g'}, - { "version", no_argument, NULL, 'v'}, { 0 } }; @@ -72,76 +57,19 @@ static struct zebra_privs_t nhrpd_privs = { .cap_num_p = ZEBRA_NUM_OF(_caps_p), }; -static void usage(const char *progname, int status) -{ - if (status != 0) - fprintf(stderr, "Try `%s --help' for more information.\n", progname); - else - printf( -"Usage : %s [OPTION...]\n\ -Daemon which manages NHRP protocol.\n\n\ --d, --daemon Runs in daemon mode\n\ --f, --config_file Set configuration file name\n\ --i, --pid_file Set process identifier file name\n\ --z, --socket Set path of zebra socket\n\ --A, --vty_addr Set vty's bind address\n\ --P, --vty_port Set vty's port number\n\ --u, --user User to run as\n\ --g, --group Group to run as\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 void parse_arguments(const char *progname, int argc, char **argv) +static void parse_arguments(int argc, char **argv) { int opt; while (1) { - opt = getopt_long(argc, argv, "df:i:z:hA:P:u:g:v", longopts, 0); + opt = frr_getopt(argc, argv, 0); if(opt < 0) break; switch (opt) { case 0: break; - case 'd': - do_daemonise = -1; - break; - case 'f': - config_file = optarg; - break; - case 'i': - pid_file = optarg; - break; - case 'z': - zclient_serv_path_set(optarg); - break; - case 'A': - vty_addr = optarg; - break; - case 'P': - vty_port = atoi (optarg); - if (vty_port <= 0 || vty_port > 0xffff) - vty_port = NHRP_VTY_PORT; - break; - case 'u': - nhrpd_privs.user = optarg; - break; - case 'g': - nhrpd_privs.group = optarg; - break; - case 'v': - print_version(progname); - exit(0); - break; - case 'h': - usage(progname, 0); - break; default: - usage(progname, 1); + frr_help_exit(1); break; } } @@ -149,7 +77,7 @@ static void parse_arguments(const char *progname, int argc, char **argv) static void nhrp_sigusr1(void) { - zlog_rotate(NULL); + zlog_rotate(); } static void nhrp_request_stop(void) @@ -169,11 +97,9 @@ static void nhrp_request_stop(void) /* signal_terminate(); */ zprivs_terminate(&nhrpd_privs); - debugf(NHRP_DEBUG_COMMON, "Remove pid file."); - if (pid_file) unlink(pid_file); debugf(NHRP_DEBUG_COMMON, "Done."); - closezlog(zlog_default); + closezlog(); exit(0); } @@ -184,26 +110,26 @@ static struct quagga_signal_t sighandlers[] = { { .signal = SIGTERM, .handler = &nhrp_request_stop, }, }; +FRR_DAEMON_INFO(nhrpd, NHRP, + .vty_port = NHRP_VTY_PORT, + + .proghelp = "Implementation of the NHRP routing protocol.", + + .signals = sighandlers, + .n_signals = array_size(sighandlers), + + .privs = &nhrpd_privs, +) + int main(int argc, char **argv) { - struct thread thread; - const char *progname, *p; - - /* Set umask before anything for security */ - umask(0027); - progname = ((p = strrchr (argv[0], '/')) ? ++p : argv[0]); - zlog_default = openzlog(progname, ZLOG_NHRP, 0, LOG_CONS|LOG_NDELAY|LOG_PID, LOG_DAEMON); - zlog_set_level(NULL, ZLOG_DEST_STDOUT, LOG_WARNING); + frr_preinit(&nhrpd_di, argc, argv); + frr_opt_add("", longopts, ""); - parse_arguments(progname, argc, argv); + parse_arguments(argc, argv); /* Library inits. */ - master = thread_master_create(); - zprivs_init(&nhrpd_privs); - signal_init(master, array_size(sighandlers), sighandlers); - cmd_init(1); - vty_init(master); - memory_init(); + master = frr_init(); nhrp_interface_init(); vrf_init(); resolver_init(); @@ -222,28 +148,7 @@ int main(int argc, char **argv) nhrp_config_init(); - /* Get zebra configuration file. */ - zlog_set_level(NULL, ZLOG_DEST_STDOUT, do_daemonise ? ZLOG_DISABLED : LOG_DEBUG); - vty_read_config(config_file, config_default); - - if (do_daemonise && daemon(0, 0) < 0) { - zlog_err("daemonise: %s", safe_strerror(errno)); - exit (1); - } - - /* write pid file */ - if (pid_output(pid_file) < 0) { - zlog_err("error while writing pidfile"); - exit (1); - } - - /* Create VTY socket */ - vty_serv_sock(vty_addr, vty_port, NHRP_VTYSH_PATH); - zlog_notice("nhrpd starting: vty@%d", vty_port); - - /* Main loop */ - while (thread_fetch(master, &thread)) - thread_call(&thread); - + frr_config_fork(); + frr_run(master); return 0; } |
