Add plugin parameter to specify path to zebra socket
authorVasilis Tsiligiannis <b_tsiligiannis@silverton.gr>
Thu, 4 Mar 2010 22:59:21 +0000 (00:59 +0200)
committerVasilis Tsiligiannis <b_tsiligiannis@silverton.gr>
Thu, 4 Mar 2010 22:59:21 +0000 (00:59 +0200)
lib/quagga/README_QUAGGA
lib/quagga/src/olsrd_plugin.c
lib/quagga/src/quagga.c
lib/quagga/src/quagga.h

index ebc137d..d968a37 100644 (file)
@@ -37,7 +37,11 @@ PlParam "LocalPref" "<true/false>"
 PlParam "Distance" "0-255"
         allows to set the administrative distance to routes exported 
        to zebra.
-       
+
+PlParam "SockPath" "<path>"
+        sets the path to zebra socket
+       defaults to "/var/run/quagga/zserv.api" if not set.
+
 ---------------------------------------------------------------------
 SAMPLE CONFIG
 ---------------------------------------------------------------------
@@ -51,8 +55,9 @@ LoadPlugin "olsrd_quagga.so.0.2.2"
        PlParam "ExportRoutes" "only"
        PlParam "Distance" "125" 
        PlParam "LocalPref" "false"
+       PlParam "SockPath" "/var/run/zserv.api"
 }
 
 
 ---------------------------------------------------------------------
-EOF / 29.12.2008
+EOF / 05.03.2010
index 804807c..fdd7219 100644 (file)
@@ -42,6 +42,7 @@ static set_plugin_parameter set_redistribute;
 static set_plugin_parameter set_exportroutes;
 static set_plugin_parameter set_distance;
 static set_plugin_parameter set_localpref;
+static set_plugin_parameter set_sockpath;
 
 
 int
@@ -55,6 +56,7 @@ static const struct olsrd_plugin_parameters plugin_parameters[] = {
   {.name = "ExportRoutes",.set_plugin_parameter = &set_exportroutes,},
   {.name = "Distance",.set_plugin_parameter = &set_distance,},
   {.name = "LocalPref",.set_plugin_parameter = &set_localpref,},
+  {.name = "SockPath",.set_plugin_parameter = &set_sockpath,.addon = {PATH_MAX},},
 };
 
 void
@@ -122,6 +124,17 @@ set_localpref(const char *value, void *data __attribute__ ((unused)), set_plugin
   return 0;
 }
 
+static int
+set_sockpath(const char *value, void *data __attribute__ ((unused)), set_plugin_parameter_addon addon)
+{
+  char sockpath[PATH_MAX];
+
+  if (set_plugin_string(value, &sockpath, addon))
+    return 1;
+  zebra_sockpath(sockpath);
+  return 0;
+}
+
 int
 olsrd_plugin_init(void)
 {
index 9a3e1a9..35a1f9f 100644 (file)
@@ -47,6 +47,7 @@ static struct {
   char redistribute[ZEBRA_ROUTE_MAX];
   char distance;
   char flags;
+  char *sockpath;
 } zebra;
 
 static void *my_realloc(void *, size_t, const char *);
@@ -78,6 +79,8 @@ init_zebra(void)
 {
 
   memset(&zebra, 0, sizeof zebra);
+  zebra.sockpath = olsr_malloc(sizeof ZEBRA_SOCKPATH  + 1, "zebra_sockpath");
+  strscpy(zebra.sockpath, ZEBRA_SOCKPATH, sizeof ZEBRA_SOCKPATH);
 
 }
 
@@ -93,6 +96,7 @@ zebra_cleanup(void)
     OLSR_FOR_ALL_RT_ENTRIES_END(tmp);
   }
   zebra_disable_redistribute();
+  free(zebra.sockpath);
 
 }
 
@@ -146,7 +150,7 @@ zebra_connect(void)
   i.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
 #else
   i.sun_family = AF_UNIX;
-  strscpy(i.sun_path, ZEBRA_SOCKET, sizeof(i.sun_path));
+  strscpy(i.sun_path, zebra.sockpath, sizeof(i.sun_path));
 #endif
 
   ret = connect(zebra.sock, (struct sockaddr *)&i, sizeof i);
@@ -603,6 +607,17 @@ zebra_export_routes(unsigned char t)
     zebra.options &= ~OPTION_EXPORT;
 }
 
+void
+zebra_sockpath(char *sockpath)
+{
+  size_t len;
+
+  len = strlen(sockpath) + 1;
+  zebra.sockpath = my_realloc(zebra.sockpath, len, "zebra_sockpath");
+  memcpy(zebra.sockpath, sockpath, len);
+
+}
+
 /*
  * Local Variables:
  * c-basic-offset: 2
index e39b07e..a5595f9 100644 (file)
@@ -40,7 +40,7 @@
 #endif
 
 /* Zebra socket */
-#define ZEBRA_SOCKET "/var/run/quagga/zserv.api"
+#define ZEBRA_SOCKPATH "/var/run/quagga/zserv.api"
 
 /* Zebra packet size */
 #define ZEBRA_MAX_PACKET_SIZ           4096
@@ -99,6 +99,7 @@ int zebra_del_route(const struct rt_entry *);
 void zebra_olsr_localpref(void);
 void zebra_olsr_distance(unsigned char);
 void zebra_export_routes(unsigned char);
+void zebra_sockpath(char *);
 
 /*
  * Local Variables: