Annotation of embedaddon/quagga/tests/main.c, revision 1.1.1.2

1.1       misho       1: /*
                      2:  * $Id: main.c,v 1.1 2005/04/25 16:42:24 paul Exp $
                      3:  *
                      4:  * This file is part of Quagga.
                      5:  *
                      6:  * Quagga is free software; you can redistribute it and/or modify it
                      7:  * under the terms of the GNU General Public License as published by the
                      8:  * Free Software Foundation; either version 2, or (at your option) any
                      9:  * later version.
                     10:  *
                     11:  * Quagga is distributed in the hope that it will be useful, but
                     12:  * WITHOUT ANY WARRANTY; without even the implied warranty of
                     13:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
                     14:  * General Public License for more details.
                     15:  *
                     16:  * You should have received a copy of the GNU General Public License
                     17:  * along with Quagga; see the file COPYING.  If not, write to the Free
                     18:  * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
                     19:  * 02111-1307, USA.
                     20:  */
                     21: 
                     22: #include <zebra.h>
                     23: 
                     24: #include <lib/version.h>
                     25: #include "getopt.h"
                     26: #include "thread.h"
                     27: #include "vty.h"
                     28: #include "command.h"
                     29: #include "memory.h"
                     30: 
                     31: extern void test_init();
                     32: 
                     33: struct thread_master *master;
                     34: 
                     35: struct option longopts[] = 
                     36: {
                     37:   { "daemon",      no_argument,       NULL, 'd'},
                     38:   { "config_file", required_argument, NULL, 'f'},
                     39:   { "help",        no_argument,       NULL, 'h'},
                     40:   { "vty_addr",    required_argument, NULL, 'A'},
                     41:   { "vty_port",    required_argument, NULL, 'P'},
                     42:   { "version",     no_argument,       NULL, 'v'},
                     43:   { 0 }
                     44: };
                     45: 
                     46: DEFUN (daemon_exit,
                     47:        daemon_exit_cmd,
                     48:        "daemon-exit",
                     49:        "Make the daemon exit\n")
                     50: {
                     51:   exit(0);
                     52: }
                     53: 
                     54: static int timer_count;
1.1.1.2 ! misho      55: static int
1.1       misho      56: test_timer (struct thread *thread)
                     57: {
                     58:   int *count = THREAD_ARG(thread);
                     59:   
                     60:   printf ("run %d of timer\n", (*count)++);
                     61:   thread_add_timer (master, test_timer, count, 5);
                     62:   return 0;
                     63: }
                     64: 
                     65: static void
                     66: test_timer_init()
                     67: {
                     68:   thread_add_timer (master, test_timer, &timer_count, 10);
                     69: }
                     70: 
                     71: static void
                     72: test_vty_init()
                     73: {
                     74:   install_element (VIEW_NODE, &daemon_exit_cmd);
                     75: }
                     76: 
                     77: /* Help information display. */
                     78: static void
                     79: usage (char *progname, int status)
                     80: {
                     81:   if (status != 0)
                     82:     fprintf (stderr, "Try `%s --help' for more information.\n", progname);
                     83:   else
                     84:     {    
                     85:       printf ("Usage : %s [OPTION...]\n\
                     86: Daemon which does 'slow' things.\n\n\
                     87: -d, --daemon       Runs in daemon mode\n\
                     88: -f, --config_file  Set configuration file name\n\
                     89: -A, --vty_addr     Set vty's bind address\n\
                     90: -P, --vty_port     Set vty's port number\n\
                     91: -v, --version      Print program version\n\
                     92: -h, --help         Display this help and exit\n\
                     93: \n\
                     94: Report bugs to %s\n", progname, ZEBRA_BUG_ADDRESS);
                     95:     }
                     96:   exit (status);
                     97: }
1.1.1.2 ! misho      98: 
        !            99: 
1.1       misho     100: /* main routine. */
                    101: int
                    102: main (int argc, char **argv)
                    103: {
                    104:   char *p;
                    105:   char *vty_addr = NULL;
                    106:   int vty_port = 4000;
                    107:   int daemon_mode = 0;
                    108:   char *progname;
                    109:   struct thread thread;
                    110:   char *config_file = NULL;
                    111:   
                    112:   /* Set umask before anything for security */
                    113:   umask (0027);
                    114: 
                    115:   /* get program name */
                    116:   progname = ((p = strrchr (argv[0], '/')) ? ++p : argv[0]);
                    117: 
                    118:   /* master init. */
                    119:   master = thread_master_create ();
                    120: 
                    121:   while (1) 
                    122:     {
                    123:       int opt;
                    124: 
                    125:       opt = getopt_long (argc, argv, "dhf:A:P:v", longopts, 0);
                    126:     
                    127:       if (opt == EOF)
                    128:        break;
                    129: 
                    130:       switch (opt) 
                    131:        {
                    132:        case 0:
                    133:          break;
                    134:         case 'f':
                    135:           config_file = optarg;
                    136:           break;
                    137:        case 'd':
                    138:          daemon_mode = 1;
                    139:          break;
                    140:        case 'A':
                    141:          vty_addr = optarg;
                    142:          break;
                    143:        case 'P':
                    144:           /* Deal with atoi() returning 0 on failure */
                    145:           if (strcmp(optarg, "0") == 0)
                    146:             {
                    147:               vty_port = 0;
                    148:               break;
                    149:             } 
                    150:           vty_port = atoi (optarg);
                    151:           vty_port = (vty_port ? vty_port : 4000);
                    152:          break;
                    153:        case 'v':
                    154:          print_version (progname);
                    155:          exit (0);
                    156:          break;
                    157:        case 'h':
                    158:          usage (progname, 0);
                    159:          break;
                    160:        default:
                    161:          usage (progname, 1);
                    162:          break;
                    163:        }
                    164:     }
                    165: 
                    166:   /* Library inits. */
                    167:   cmd_init (1);
                    168:   vty_init (master);
                    169:   memory_init ();
                    170: 
                    171:   /* OSPF vty inits. */
                    172:   test_vty_init ();
                    173: 
                    174:   /* Change to the daemon program. */
                    175:   if (daemon_mode && daemon (0, 0) < 0)
                    176:     {
                    177:       fprintf(stderr, "daemon failed: %s", strerror(errno));
                    178:       exit (1);
                    179:     }
                    180: 
                    181:   /* Create VTY socket */
                    182:   vty_serv_sock (vty_addr, vty_port, "/tmp/.heavy.sock");
                    183:   
                    184:   /* Configuration file read*/
                    185:   if (!config_file)
                    186:     usage (progname, 1);
                    187:   vty_read_config (config_file, NULL);
                    188:   
                    189:   test_timer_init();
                    190:   
                    191:   test_init();  
                    192:   
                    193:   /* Fetch next active thread. */
                    194:   while (thread_fetch (master, &thread))
                    195:     thread_call (&thread);
                    196: 
                    197:   /* Not reached. */
                    198:   exit (0);
                    199: }
                    200: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>