ome usefaul optional features for running multiple olsrds
authormarkus@texas.funkfeuer.at <markus@texas.funkfeuer.at>
Mon, 16 Mar 2009 19:40:34 +0000 (20:40 +0100)
committermarkus@texas.funkfeuer.at <markus@texas.funkfeuer.at>
Mon, 16 Mar 2009 19:40:34 +0000 (20:40 +0100)
src/linux/kernel_routes.c
src/log.h
src/olsr_cfg.h
src/plugin_loader.c
src/unix/log.c

index 0aa8691..17f9fb7 100644 (file)
@@ -131,6 +131,12 @@ olsr_netlink_route_int(const struct rt_entry *rt, uint8_t family, uint8_t rttabl
       req.r.rtm_scope = RT_SCOPE_LINK;
       /*add interface*/
       olsr_netlink_addreq(&req, RTA_OIF, &nexthop->iif_index, sizeof(nexthop->iif_index));
       req.r.rtm_scope = RT_SCOPE_LINK;
       /*add interface*/
       olsr_netlink_addreq(&req, RTA_OIF, &nexthop->iif_index, sizeof(nexthop->iif_index));
+
+#if SOURCE_IP_ROUTES
+      /* source ip here is based on now static olsr_cnf->main_addr in this olsr-0.5.6-r4, should be based on orignator-id in newer olsrds*/
+      if (AF_INET == family) olsr_netlink_addreq(&req, RTA_PREFSRC, &olsr_cnf->main_addr.v4.s_addr, sizeof(olsr_cnf->main_addr.v4.s_addr));
+      else olsr_netlink_addreq(&req, RTA_PREFSRC, &olsr_cnf->main_addr.v6.s6_addr, sizeof(olsr_cnf->main_addr.v6.s6_addr));
+#endif
     }
 
     /*metric is specified always as we can only delete one route per iteration, and wanna hit the correct one first*/
     }
 
     /*metric is specified always as we can only delete one route per iteration, and wanna hit the correct one first*/
index 53eb1e9..cfdcfae 100644 (file)
--- a/src/log.h
+++ b/src/log.h
 
 void olsr_openlog(const char *ident);
 
 
 void olsr_openlog(const char *ident);
 
+#if SYSLOG_NUMBERING
+void olsr_syslog_real(int level, const char *format, ...) __attribute__ ((format(printf, 2, 3)));
+
+extern unsigned int olsr_syslog_ctr;
+#define olsr_syslog(level, format, ...) olsr_syslog_real (level, "%02x: " format, olsr_syslog_ctr++ & 0xFF, ## __VA_ARGS__ )
+#else
 void olsr_syslog(int level, const char *format, ...) __attribute__ ((format(printf, 2, 3)));
 void olsr_syslog(int level, const char *format, ...) __attribute__ ((format(printf, 2, 3)));
+#endif
 
 #endif
 
 
 #endif
 
index b80b54b..735b179 100644 (file)
 
 #include "olsr_types.h"
 
 
 #include "olsr_types.h"
 
+#define TESTLIB_PATH 0
+#define SYSLOG_NUMBERING 0
+#define SOURCE_IP_ROUTES 0
+
 #ifndef LINUX_POLICY_ROUTING
 #if defined linux
 #  define LINUX_POLICY_ROUTING 1
 #ifndef LINUX_POLICY_ROUTING
 #if defined linux
 #  define LINUX_POLICY_ROUTING 1
index 4921c5c..6f82527 100644 (file)
@@ -87,12 +87,20 @@ olsr_load_plugins(void)
 static int
 olsr_load_dl(char *libname, struct plugin_param *params)
 {
 static int
 olsr_load_dl(char *libname, struct plugin_param *params)
 {
+#if TESTLIB_PATH
+  char path[256] = "/usr/testlib/";
+#endif
   struct olsr_plugin *plugin = olsr_malloc(sizeof(struct olsr_plugin), "Plugin entry");
   int rv;
 
   OLSR_PRINTF(0, "---------- LOADING LIBRARY %s ----------\n", libname);
 
   struct olsr_plugin *plugin = olsr_malloc(sizeof(struct olsr_plugin), "Plugin entry");
   int rv;
 
   OLSR_PRINTF(0, "---------- LOADING LIBRARY %s ----------\n", libname);
 
+#if TESTLIB_PATH
+  strcat(path, libname);
+  plugin->dlhandle = dlopen(path, RTLD_NOW);
+#else
   plugin->dlhandle = dlopen(libname, RTLD_NOW);
   plugin->dlhandle = dlopen(libname, RTLD_NOW);
+#endif
   if (plugin->dlhandle == NULL) {
     const int save_errno = errno;
     OLSR_PRINTF(0, "DL loading failed: \"%s\"!\n", dlerror());
   if (plugin->dlhandle == NULL) {
     const int save_errno = errno;
     OLSR_PRINTF(0, "DL loading failed: \"%s\"!\n", dlerror());
index ccf06cb..92b8190 100644 (file)
@@ -43,6 +43,7 @@
  * System logging interface for GNU/Linux systems
  */
 
  * System logging interface for GNU/Linux systems
  */
 
+#include "../olsr_cfg.h"
 #include "../log.h"
 #include <syslog.h>
 #include <stdarg.h>
 #include "../log.h"
 #include <syslog.h>
 #include <stdarg.h>
@@ -56,10 +57,22 @@ olsr_openlog(const char *ident)
   return;
 }
 
   return;
 }
 
-void
+#if SYSLOG_NUMBERING
+
+unsigned int olsr_syslog_ctr = 0;
+
+void 
+olsr_syslog_real(int level, const char *format, ...)
+{
+
+#else
+
+void 
 olsr_syslog(int level, const char *format, ...)
 {
 
 olsr_syslog(int level, const char *format, ...)
 {
 
+#endif
+
   int linux_level;
   va_list arglist;
 
   int linux_level;
   va_list arglist;