diff options
| author | David Lamparter <equinox@opensourcerouting.org> | 2016-11-13 16:02:23 +0900 | 
|---|---|---|
| committer | David Lamparter <equinox@opensourcerouting.org> | 2017-03-07 23:07:20 +0100 | 
| commit | 4f04a76b717fc4881a547f582a02a4d06d356c47 (patch) | |
| tree | 90951be570b6de3889da7c5358b1fe2f998d4acd /ripngd | |
| parent | ae6ba9ba043652bde3b0000f5299eff31d351ee3 (diff) | |
*: add frr_init() infrastructure
Start centralising startup & option parsing into the library.
FRR_DAEMON_INFO is a bit weird, but it will become useful later (e.g.
for killing the ZLOG_* enum, and having the daemon name available)
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Diffstat (limited to 'ripngd')
| -rw-r--r-- | ripngd/ripng_main.c | 126 | ||||
| -rw-r--r-- | ripngd/ripngd.c | 3 | 
2 files changed, 25 insertions, 104 deletions
diff --git a/ripngd/ripng_main.c b/ripngd/ripng_main.c index a90dffce14..b081da2333 100644 --- a/ripngd/ripng_main.c +++ b/ripngd/ripng_main.c @@ -36,7 +36,7 @@  #include "privs.h"  #include "sigevent.h"  #include "vrf.h" -#include "sockopt.h" +#include "libfrr.h"  #include "ripngd/ripngd.h" @@ -45,7 +45,6 @@ char config_default[] = SYSCONFDIR RIPNG_DEFAULT_CONFIG;  char *config_file = NULL;  /* RIPngd options. */ -#define OPTION_VTYSOCK 1000  struct option longopts[] =   {    { "daemon",      no_argument,       NULL, 'd'}, @@ -53,14 +52,7 @@ struct option longopts[] =    { "pid_file",    required_argument, NULL, 'i'},    { "socket",      required_argument, NULL, 'z'},    { "dryrun",      no_argument,       NULL, 'C'}, -  { "help",        no_argument,       NULL, 'h'}, -  { "vty_addr",    required_argument, NULL, 'A'}, -  { "vty_port",    required_argument, NULL, 'P'}, -  { "vty_socket",  required_argument, NULL, OPTION_VTYSOCK},    { "retain",      no_argument,       NULL, 'r'}, -  { "user",        required_argument, NULL, 'u'}, -  { "group",       required_argument, NULL, 'g'}, -  { "version",     no_argument,       NULL, 'v'},    { 0 }  }; @@ -90,53 +82,15 @@ struct zebra_privs_t ripngd_privs =  /* RIPngd program name */ -/* VTY Socket prefix */ -char vty_sock_path[MAXPATHLEN] = RIPNG_VTYSH_PATH; -  /* Route retain mode flag. */  int retain_mode = 0; -/* RIPng VTY bind address. */ -char *vty_addr = NULL; - -/* RIPng VTY connection port. */ -int vty_port = RIPNG_VTY_PORT; -  /* Master of threads. */  struct thread_master *master;  /* Process ID saved for use by init system */  const char *pid_file = PATH_RIPNGD_PID; -/* Help information display. */ -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\ -Daemon which manages RIPng.\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\ -    --vty_socket   Override vty socket path\n\ --r, --retain       When program terminates, retain added route by ripngd.\n\ --u, --user         User to run as\n\ --g, --group        Group to run as\n\ --v, --version      Print program version\n\ --C, --dryrun       Check configuration for validity and exit\n\ --h, --help         Display this help and exit\n\ -\n\ -Report bugs to %s\n", progname, FRR_BUG_ADDRESS); -    } -  exit (status); -} -  /* SIGHUP handler. */  static void   sighup (void) @@ -147,8 +101,6 @@ sighup (void)    /* Reload config file. */    vty_read_config (config_file, config_default); -  /* Create VTY's socket */ -  vty_serv_sock (vty_addr, vty_port, vty_sock_path);    /* Try to return to normal operation. */  } @@ -192,35 +144,39 @@ struct quagga_signal_t ripng_signals[] =    },  }; +FRR_DAEMON_INFO(ripngd, RIPNG, +	.vty_port = RIPNG_VTY_PORT, + +	.proghelp = "Implementation of the RIPng routing protocol.", + +	.signals = ripng_signals, +	.n_signals = array_size(ripng_signals), + +	.privs = &ripngd_privs, +) +  /* RIPngd main routine. */  int  main (int argc, char **argv)  { -  char *p; -  int vty_port = RIPNG_VTY_PORT;    int daemon_mode = 0; -  char *progname;    struct thread thread;    int dryrun = 0; -  /* Set umask before anything for security */ -  umask (0027); - -  /* get program name */ -  progname = ((p = strrchr (argv[0], '/')) ? ++p : argv[0]); - -  zlog_default = openzlog(progname, ZLOG_RIPNG, 0, -			  LOG_CONS|LOG_NDELAY|LOG_PID, LOG_DAEMON); -  zprivs_init (&ripngd_privs); -#if defined(HAVE_CUMULUS) -  zlog_set_level (NULL, ZLOG_DEST_SYSLOG, zlog_default->default_lvl); -#endif +  frr_preinit (&ripngd_di, argc, argv); +  frr_opt_add ("df:i:z:rC", longopts, +	"  -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" +	"  -C, --dryrun       Check configuration for validity and exit\n" +	"  -r, --retain       When program terminates, retain added route by ripd.\n");    while (1)       {        int opt; -      opt = getopt_long (argc, argv, "df:i:z:hA:P:u:g:vC", longopts, 0); +      opt = frr_getopt (argc, argv, NULL);        if (opt == EOF)  	break; @@ -235,59 +191,27 @@ main (int argc, char **argv)  	case 'f':  	  config_file = optarg;  	  break; -	case 'A': -	  vty_addr = optarg; -	  break;          case 'i':            pid_file = optarg;            break;  	case 'z':  	  zclient_serv_path_set (optarg);  	  break; -	case 'P': -          /* Deal with atoi() returning 0 on failure, and ripngd not -             listening on ripngd port... */ -          if (strcmp(optarg, "0") == 0)  -            { -              vty_port = 0; -              break; -            }  -          vty_port = atoi (optarg); -          if (vty_port <= 0 || vty_port > 0xffff) -            vty_port = RIPNG_VTY_PORT; -          break; -	case OPTION_VTYSOCK: -	  set_socket_path(vty_sock_path, RIPNG_VTYSH_PATH, optarg, sizeof (vty_sock_path)); -	  break;  	case 'r':  	  retain_mode = 1;  	  break; -	case 'u': -	  ripngd_privs.user = optarg; -	  break; -	case 'g': -	  ripngd_privs.group = optarg; -	  break; -	case 'v': -	  print_version (progname); -	  exit (0); -	  break;  	case 'C':  	  dryrun = 1;  	  break; -	case 'h': -	  usage (progname, 0); -	  break;  	default: -	  usage (progname, 1); +	  frr_help_exit (1);  	  break;  	}      } -  master = thread_master_create (); +  master = frr_init ();    /* Library inits. */ -  signal_init (master, array_size(ripng_signals), ripng_signals);    cmd_init (1);    vty_init (master);    memory_init (); @@ -313,13 +237,13 @@ main (int argc, char **argv)      }    /* Create VTY socket */ -  vty_serv_sock (vty_addr, vty_port, vty_sock_path); +  frr_vty_serv (RIPNG_VTYSH_PATH);    /* Process id file create. */    pid_output (pid_file);    /* Print banner. */ -  zlog_notice ("RIPNGd %s starting: vty@%d", FRR_VERSION, vty_port); +  zlog_notice ("RIPNGd %s starting: vty@%d", FRR_VERSION, ripngd_di.vty_port);    /* Fetch next active thread. */    while (thread_fetch (master, &thread)) diff --git a/ripngd/ripngd.c b/ripngd/ripngd.c index c8c18928c9..b4f82575a5 100644 --- a/ripngd/ripngd.c +++ b/ripngd/ripngd.c @@ -3081,9 +3081,6 @@ ripng_routemap_update (const char *unused)  void  ripng_init ()  { -  /* Randomize. */ -  srandom (time (NULL)); -    /* Install RIPNG_NODE. */    install_node (&cmd_ripng_node, ripng_config_write);  | 
