diff options
Diffstat (limited to 'isisd/isis_main.c')
| -rw-r--r-- | isisd/isis_main.c | 188 | 
1 files changed, 25 insertions, 163 deletions
diff --git a/isisd/isis_main.c b/isisd/isis_main.c index 1b9fa68051..a6ad424ace 100644 --- a/isisd/isis_main.c +++ b/isisd/isis_main.c @@ -38,8 +38,8 @@  #include "plist.h"  #include "zclient.h"  #include "vrf.h" -#include "sockopt.h"  #include "qobj.h" +#include "libfrr.h"  #include "isisd/dict.h"  #include "isisd/isis_constants.h" @@ -82,41 +82,13 @@ struct zebra_privs_t isisd_privs = {  };  /* isisd 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'}, -  {"vty_addr",    required_argument, NULL, 'A'}, -  {"vty_port",    required_argument, NULL, 'P'}, -  {"vty_socket",  required_argument, NULL, OPTION_VTYSOCK}, -  {"user",        required_argument, NULL, 'u'}, -  {"group",       required_argument, NULL, 'g'}, -  {"version",     no_argument,       NULL, 'v'}, -  {"dryrun",      no_argument,       NULL, 'C'}, -  {"help",        no_argument,       NULL, 'h'},    {0}  }; -/* Configuration file and directory. */ -char config_default[] = SYSCONFDIR ISISD_DEFAULT_CONFIG; -char *config_file = NULL; - -/* isisd program name. */ -char *progname; - -/* VTY Socket prefix */ -char vty_sock_path[MAXPATHLEN] = ISIS_VTYSH_PATH; - -int daemon_mode = 0; -  /* Master of threads. */  struct thread_master *master; -/* Process ID saved for use by init system */ -const char *pid_file = PATH_ISISD_PID; -  /* for reload */  char _cwd[MAXPATHLEN];  char _progpath[MAXPATHLEN]; @@ -134,36 +106,6 @@ void sigterm(void);  void sigusr1(void); -/* Help information display. */ -static void -usage (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 IS-IS routing\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\ --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); -} - -  void  reload ()  { @@ -213,7 +155,7 @@ void  sigusr1 (void)  {    zlog_debug ("SIGUSR1 received"); -  zlog_rotate (NULL); +  zlog_rotate();  }  struct quagga_signal_t isisd_signals[] = @@ -236,28 +178,26 @@ struct quagga_signal_t isisd_signals[] =     },  }; +FRR_DAEMON_INFO(isisd, ISIS, +	.vty_port = ISISD_VTY_PORT, + +	.proghelp = "Implementation of the IS-IS routing protocol.", +	.copyright = "Copyright (c) 2001-2002 Sampo Saaristo," +		  " Ofer Wald and Hannes Gredler", + +	.signals = isisd_signals, +	.n_signals = array_size(isisd_signals), + +	.privs = &isisd_privs, +) +  /*   * Main routine of isisd. Parse arguments and handle IS-IS state machine.   */  int  main (int argc, char **argv, char **envp)  { -  char *p; -  int opt, vty_port = ISISD_VTY_PORT; -  struct thread thread; -  char *config_file = NULL; -  char *vty_addr = NULL; -  int dryrun = 0; - -  /* Get the programname without the preceding path. */ -  progname = ((p = strrchr (argv[0], '/')) ? ++p : argv[0]); - -  zlog_default = openzlog (progname, ZLOG_ISIS, 0, -			   LOG_CONS | LOG_NDELAY | LOG_PID, LOG_DAEMON); -  zprivs_init (&isisd_privs); -#if defined(HAVE_CUMULUS) -  zlog_set_level (NULL, ZLOG_DEST_SYSLOG, zlog_default->default_lvl); -#endif +  int opt;    /* for reload */    _argc = argc; @@ -274,10 +214,13 @@ main (int argc, char **argv, char **envp)    else      snprintf (_progpath, sizeof (_progpath), "%s", argv[0]); +  frr_preinit (&isisd_di, argc, argv); +  frr_opt_add ("", longopts, ""); +    /* Command line argument treatment. */    while (1)      { -      opt = getopt_long (argc, argv, "df:i:z:hA:p:P:u:g:vC", longopts, 0); +      opt = frr_getopt (argc, argv, NULL);        if (opt == EOF)  	break; @@ -286,74 +229,19 @@ main (int argc, char **argv, char **envp)  	{  	case 0:  	  break; -	case 'd': -	  daemon_mode = 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': -	  /* Deal with atoi() returning 0 on failure, and isisd not -	     listening on isisd port... */ -	  if (strcmp (optarg, "0") == 0) -	    { -	      vty_port = 0; -	      break; -	    } -	  vty_port = atoi (optarg); -	  vty_port = (vty_port ? vty_port : ISISD_VTY_PORT); -	  break; -	case OPTION_VTYSOCK: -	  set_socket_path(vty_sock_path, ISIS_VTYSH_PATH, optarg, sizeof (vty_sock_path)); -	  break; -	case 'u': -	  isisd_privs.user = optarg; -	  break; -	case 'g': -	  isisd_privs.group = optarg; -	  break; -	case 'v': -	  printf ("ISISd version %s\n", ISISD_VERSION); -	  printf ("Copyright (c) 2001-2002 Sampo Saaristo," -		  " Ofer Wald and Hannes Gredler\n"); -	  print_version ("Zebra"); -	  exit (0); -	  break; -	case 'C': -	  dryrun = 1; -	  break; -	case 'h': -	  usage (0); -	  break;  	default: -	  usage (1); +	  frr_help_exit (1);  	  break;  	}      } +  vty_config_lockless ();    /* thread master */ -  master = thread_master_create (); - -  /* random seed from time */ -  srandom (time (NULL)); +  master = frr_init ();    /*     *  initializations     */ -  signal_init (master, array_size (isisd_signals), isisd_signals); -  cmd_init (1); -  vty_config_lockless (); -  vty_init (master); -  memory_init ();    access_list_init();    vrf_init ();    prefix_list_init(); @@ -369,34 +257,8 @@ main (int argc, char **argv, char **envp)    isis_zebra_init(master); -  /* parse config file */ -  /* this is needed three times! because we have interfaces before the areas */ -  vty_read_config (config_file, config_default); - -  /* Start execution only if not in dry-run mode */ -  if (dryrun) -    return(0); -   -  /* demonize */ -  if (daemon_mode && daemon (0, 0) < 0) -    { -      zlog_err("ISISd daemon failed: %s", strerror(errno)); -      return (1); -    } - -  /* Process ID file creation. */ -  if (pid_file[0] != '\0') -    pid_output (pid_file); - -  /* Make isis vty socket. */ -  vty_serv_sock (vty_addr, vty_port, vty_sock_path); - -  /* Print banner. */ -  zlog_notice ("Quagga-ISISd %s starting: vty@%d", FRR_VERSION, vty_port); - -  /* Start finite state machine. */ -  while (thread_fetch (master, &thread)) -    thread_call (&thread); +  frr_config_fork (); +  frr_run (master);    /* Not reached. */    exit (0);  | 
