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;  }  | 
