diff options
Diffstat (limited to 'ripngd/ripng_main.c')
| -rw-r--r-- | ripngd/ripng_main.c | 183 | 
1 files changed, 23 insertions, 160 deletions
diff --git a/ripngd/ripng_main.c b/ripngd/ripng_main.c index a90dffce14..9d97df5c41 100644 --- a/ripngd/ripng_main.c +++ b/ripngd/ripng_main.c @@ -36,31 +36,14 @@  #include "privs.h"  #include "sigevent.h"  #include "vrf.h" -#include "sockopt.h" +#include "libfrr.h"  #include "ripngd/ripngd.h" -/* Configuration filename and directory. */ -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'}, -  { "config_file", required_argument, NULL, 'f'}, -  { "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,52 +73,13 @@ 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); -} +static struct frr_daemon_info ripngd_di;  /* SIGHUP handler. */  static void  @@ -146,9 +90,7 @@ sighup (void)    ripng_reset ();    /* Reload config file. */ -  vty_read_config (config_file, config_default); -  /* Create VTY's socket */ -  vty_serv_sock (vty_addr, vty_port, vty_sock_path); +  vty_read_config (ripngd_di.config_file, config_default);    /* Try to return to normal operation. */  } @@ -169,7 +111,7 @@ sigint (void)  static void  sigusr1 (void)  { -  zlog_rotate (NULL); +  zlog_rotate();  }  struct quagga_signal_t ripng_signals[] = @@ -192,35 +134,30 @@ 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 ("r", longopts, +	"  -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; @@ -229,68 +166,18 @@ main (int argc, char **argv)  	{  	case 0:  	  break; -	case 'd': -	  daemon_mode = 1; -	  break; -	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 ();    vrf_init ();    /* RIPngd inits. */ @@ -298,32 +185,8 @@ main (int argc, char **argv)    zebra_init(master);    ripng_peer_init (); -  /* Get configuration file. */ -  vty_read_config (config_file, config_default); - -  /* Start execution only if not in dry-run mode */ -  if(dryrun) -    return(0); -   -  /* Change to the daemon program. */ -  if (daemon_mode && daemon (0, 0) < 0) -    { -      zlog_err("RIPNGd daemon failed: %s", strerror(errno)); -      exit (1); -    } - -  /* Create VTY socket */ -  vty_serv_sock (vty_addr, vty_port, vty_sock_path); - -  /* Process id file create. */ -  pid_output (pid_file); - -  /* Print banner. */ -  zlog_notice ("RIPNGd %s starting: vty@%d", FRR_VERSION, vty_port); - -  /* Fetch next active thread. */ -  while (thread_fetch (master, &thread)) -    thread_call (&thread); +  frr_config_fork (); +  frr_run (master);    /* Not reached. */    return 0;  | 
