---
 bgpd/bgp_main.c | 17 ++++++++++++++++-
 zebra/main.c    | 17 +++++++++++++++--
 2 files changed, 31 insertions(+), 3 deletions(-)

diff --git a/bgpd/bgp_main.c b/bgpd/bgp_main.c
index 25669a0..0ca2b99 100644
--- a/bgpd/bgp_main.c
+++ b/bgpd/bgp_main.c
@@ -39,6 +39,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, 
Boston, MA
 #include "stream.h"
 #include "vrf.h"
 #include "workqueue.h"
+#include "plugin.h"
 
 #include "bgpd/bgpd.h"
 #include "bgpd/bgp_attr.h"
@@ -57,6 +58,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, 
Boston, MA
 static const struct option longopts[] = 
 {
   { "daemon",      no_argument,       NULL, 'd'},
+  { "module",      required_argument, NULL, 'M'},
   { "config_file", required_argument, NULL, 'f'},
   { "pid_file",    required_argument, NULL, 'i'},
   { "socket",      required_argument, NULL, 'z'},
@@ -151,6 +153,7 @@ usage (char *progname, int status)
 Daemon which manages kernel routing table management and \
 redistribution between different routing protocols.\n\n\
 -d, --daemon       Runs in daemon mode\n\
+-M, --module       Load specified module\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\
@@ -335,6 +338,8 @@ bgp_exit (int status)
   exit (status);
 }
 
+QUAGGA_PLUGIN_SETUP(.name = "bgpd process")
+
 /* Main routine of bgpd. Treatment of argument and start bgp finite
    state machine is handled at here. */
 int
@@ -347,6 +352,8 @@ main (int argc, char **argv)
   char *progname;
   struct thread thread;
   int tmp_port;
+  struct qplug_runtime *plugin;
+  char plugerr[256];
 
   /* Set umask before anything for security */
   umask (0027);
@@ -363,7 +370,7 @@ main (int argc, char **argv)
   /* Command line argument treatment. */
   while (1) 
     {
-      opt = getopt_long (argc, argv, "df:i:z:hp:l:A:P:rnu:g:vC", longopts, 0);
+      opt = getopt_long (argc, argv, "df:i:z:hp:l:A:P:rnu:g:vCM:", longopts, 
0);
     
       if (opt == EOF)
        break;
@@ -375,6 +382,14 @@ main (int argc, char **argv)
        case 'd':
          daemon_mode = 1;
          break;
+       case 'M':
+         plugin = qplug_load(optarg, plugerr, sizeof(plugerr));
+         if (!plugin)
+           {
+             fprintf(stderr, "%s\n", plugerr);
+             return 1;
+           }
+         break;
        case 'f':
          config_file = optarg;
          break;
diff --git a/zebra/main.c b/zebra/main.c
index ee80283..b3ff649 100644
--- a/zebra/main.c
+++ b/zebra/main.c
@@ -35,6 +35,7 @@
 #include "privs.h"
 #include "sigevent.h"
 #include "vrf.h"
+#include "plugin.h"
 
 #include "zebra/rib.h"
 #include "zebra/zserv.h"
@@ -72,6 +73,7 @@ struct option longopts[] =
 {
   { "batch",       no_argument,       NULL, 'b'},
   { "daemon",      no_argument,       NULL, 'd'},
+  { "module",      required_argument, NULL, 'M'},
   { "keep_kernel", no_argument,       NULL, 'k'},
   { "config_file", required_argument, NULL, 'f'},
   { "pid_file",    required_argument, NULL, 'i'},
@@ -131,6 +133,7 @@ usage (char *progname, int status)
              "redistribution between different routing protocols.\n\n"\
              "-b, --batch        Runs in batch mode\n"\
              "-d, --daemon       Runs in daemon mode\n"\
+             "-M, --module       Load specified module\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"\
@@ -297,6 +300,8 @@ main (int argc, char **argv)
   char *progname;
   struct thread thread;
   char *zserv_path = NULL;
+  struct qplug_runtime *plugin;
+  char plugerr[256];
 
   /* Set umask before anything for security */
   umask (0027);
@@ -312,9 +317,9 @@ main (int argc, char **argv)
       int opt;
   
 #ifdef HAVE_NETLINK  
-      opt = getopt_long (argc, argv, "bdkf:i:z:hA:P:ru:g:vs:C", longopts, 0);
+      opt = getopt_long (argc, argv, "bdkf:i:z:hA:P:ru:g:vs:CM:", longopts, 0);
 #else
-      opt = getopt_long (argc, argv, "bdkf:i:z:hA:P:ru:g:vC", longopts, 0);
+      opt = getopt_long (argc, argv, "bdkf:i:z:hA:P:ru:g:vCM:", longopts, 0);
 #endif /* HAVE_NETLINK */
 
       if (opt == EOF)
@@ -329,6 +334,14 @@ main (int argc, char **argv)
        case 'd':
          daemon_mode = 1;
          break;
+       case 'M':
+         plugin = qplug_load(optarg, plugerr, sizeof(plugerr));
+         if (!plugin)
+           {
+             fprintf(stderr, "%s\n", plugerr);
+             return 1;
+           }
+         break;
        case 'k':
          keep_kernel_mode = 1;
          break;
-- 
2.7.3


_______________________________________________
Quagga-dev mailing list
Quagga-dev@lists.quagga.net
https://lists.quagga.net/mailman/listinfo/quagga-dev

Reply via email to