Poprouting plugin for OLSRd (#53)
authorGabriel <gabriel@autistici.org>
Thu, 3 May 2018 11:56:22 +0000 (13:56 +0200)
committerFerry Huberts <mailings@hupie.com>
Thu, 3 May 2018 11:56:22 +0000 (13:56 +0200)
* Poprouting plugin for OLSRd

* reverted changes to get_plugin_parameters

Makefile
lib/info/info_types.h
lib/info/olsrd_info.c
lib/poprouting/Makefile [new file with mode: 0644]
lib/poprouting/README_POPROUTING [new file with mode: 0644]
lib/poprouting/src/olsrd_plugin.c [new file with mode: 0644]
lib/poprouting/src/olsrd_plugin.h [new file with mode: 0644]
lib/poprouting/src/olsrd_poprouting.c [new file with mode: 0644]
lib/poprouting/src/olsrd_poprouting.h [new file with mode: 0644]
lib/poprouting/version-script.txt [new file with mode: 0644]

index f0630eb..7a9761a 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -224,7 +224,7 @@ rpm:
 
 # This is quite ugly but at least it works
 ifeq ($(OS),linux)
-SUBDIRS := arprefresh bmf dot_draw dyn_gw dyn_gw_plain httpinfo info jsoninfo mdns mini nameservice netjson p2pd pgraph pud quagga secure sgwdynspeed txtinfo watchdog
+SUBDIRS := arprefresh bmf dot_draw dyn_gw dyn_gw_plain httpinfo info jsoninfo mdns mini nameservice netjson poprouting p2pd pgraph pud quagga secure sgwdynspeed txtinfo watchdog
 else
 ifeq ($(OS),win32)
 SUBDIRS := dot_draw httpinfo info jsoninfo mini netjson pgraph secure txtinfo
@@ -410,6 +410,18 @@ netjson_install: info_install
 netjson_uninstall: info_uninstall
                $(MAKECMDPREFIX)$(MAKECMD) -C lib/netjson DESTDIR=$(DESTDIR) uninstall
 
+poprouting: info
+               $(MAKECMDPREFIX)$(MAKECMD) -C lib/poprouting
+
+poprouting_clean: info_clean
+               $(MAKECMDPREFIX)$(MAKECMD) -C lib/poprouting DESTDIR=$(DESTDIR) clean
+
+poprouting_install: info_install
+               $(MAKECMDPREFIX)$(MAKECMD) -C lib/poprouting DESTDIR=$(DESTDIR) install
+
+poprouting_uninstall: info_uninstall
+               $(MAKECMDPREFIX)$(MAKECMD) -C lib/poprouting DESTDIR=$(DESTDIR) uninstall
+
 p2pd:
                $(MAKECMDPREFIX)$(MAKECMD) -C lib/p2pd
 
index d1e592d..ab3a628 100644 (file)
@@ -113,8 +113,15 @@ typedef struct {
 #define SIW_NETJSON_NETWORK_COLLECTION   (1ULL << 19)
 #define SIW_NETJSON                      (SIW_NETJSON_NETWORK_ROUTES | SIW_NETJSON_NETWORK_GRAPH | SIW_NETJSON_DEVICE_CONFIGURATION | SIW_NETJSON_DEVICE_MONITORING | SIW_NETJSON_NETWORK_COLLECTION)
 
+/* poprouting */
+#define SIW_POPROUTING_HELLO             (1ULL << 20)
+#define SIW_POPROUTING_TC                (1ULL << 21)
+#define SIW_POPROUTING_HELLO_MULT        (1ULL << 22)
+#define SIW_POPROUTING_TC_MULT           (1ULL << 23)
+#define SIW_POPROUTING                   (SIW_POPROUTING_HELLO | SIW_POPROUTING_TC | SIW_POPROUTING_HELLO_MULT | SIW_POPROUTING_TC_MULT)
+
 /* everything */
-#define SIW_EVERYTHING                   ((SIW_NETJSON_NETWORK_COLLECTION << 1) - 1)
+#define SIW_EVERYTHING                   ((SIW_POPROUTING_TC_MULT << 1) - 1)
 
 /* command prefixes */
 #define SIW_PREFIX_HTTP                  "/http"
@@ -163,6 +170,11 @@ typedef struct {
     printer_generic deviceConfiguration;
     printer_generic deviceMonitoring;
     printer_generic networkCollection;
+
+    printer_generic tcTimer;
+    printer_generic helloTimer;
+    printer_generic tcTimerMult;
+    printer_generic helloTimerMult;
 } info_plugin_functions_t;
 
 struct info_cache_entry_t {
index 0476e70..f59205a 100644 (file)
@@ -148,7 +148,12 @@ static unsigned long long SIW_ENTRIES_ALL[] = {
     SIW_NETJSON_NETWORK_GRAPH, //
     SIW_NETJSON_DEVICE_CONFIGURATION, //
     SIW_NETJSON_DEVICE_MONITORING, //
-    SIW_NETJSON_NETWORK_COLLECTION //
+    SIW_NETJSON_NETWORK_COLLECTION, //
+    //
+    SIW_POPROUTING_HELLO,
+    SIW_POPROUTING_TC, //
+    SIW_POPROUTING_HELLO_MULT,
+    SIW_POPROUTING_TC_MULT //
     };
 
 long cache_timeout_generic(info_plugin_config_t *plugin_config, unsigned long long siw) {
@@ -527,6 +532,15 @@ static void send_info(const char * req, bool add_headers, unsigned int send_what
       };
 
       send_info_from_table(&abuf, send_what, funcs, ARRAY_SIZE(funcs), &outputLength);
+    } else if(send_what & SIW_POPROUTING){
+      SiwLookupTableEntry funcs[] = {
+        { SIW_POPROUTING_TC               , functions->tcTimer           }, //
+        { SIW_POPROUTING_HELLO            , functions->helloTimer        }, //
+        { SIW_POPROUTING_TC_MULT          , functions->tcTimerMult       }, //
+        { SIW_POPROUTING_HELLO_MULT       , functions->helloTimerMult    } //
+      };
+      
+      send_info_from_table(&abuf, send_what, funcs, ARRAY_SIZE(funcs), &outputLength);
     } else if ((send_what & SIW_OLSRD_CONF) && functions->olsrd_conf) {
       /* this outputs the olsrd.conf text directly, not normal format */
       unsigned int preLength = abuf.len;
diff --git a/lib/poprouting/Makefile b/lib/poprouting/Makefile
new file mode 100644 (file)
index 0000000..3bbc7a9
--- /dev/null
@@ -0,0 +1,70 @@
+# The olsr.org Optimized Link-State Routing daemon (olsrd)
+#
+# (c) by the OLSR project
+#
+# See our Git repository to find out who worked on this file
+# and thus is a copyright holder on it.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# * Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in
+#   the documentation and/or other materials provided with the
+#   distribution.
+# * Neither the name of olsr.org, olsrd nor the names of its
+#   contributors may be used to endorse or promote products derived
+#   from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+# Visit http://www.olsr.org for more information.
+#
+# If you find this software useful feel free to make a donation
+# to the project. For more information see the website or contact
+# the copyright holders.
+#
+
+OLSRD_PLUGIN = true
+PLUGIN_NAME =  olsrd_poprouting
+PLUGIN_VER =   1.0
+
+TOPDIR =       ../..
+include $(TOPDIR)/Makefile.inc
+
+COMMONINFO = $(wildcard ../info/*.c)
+OBJS += $(COMMONINFO:%.c=%.o)
+
+default_target: $(PLUGIN_FULLNAME)
+
+$(PLUGIN_FULLNAME): $(OBJS) version-script.txt
+ifeq ($(VERBOSE),0)
+               @echo "[LD] $@"
+endif
+               $(MAKECMDPREFIX)$(CC) $(LDFLAGS) -o $(PLUGIN_FULLNAME) $(OBJS) $(LIBS)
+
+install:       $(PLUGIN_FULLNAME)
+               $(STRIP) $(PLUGIN_FULLNAME)
+               $(INSTALL_LIB)
+
+uninstall:
+               $(UNINSTALL_LIB)
+
+clean:
+               rm -f $(OBJS) $(SRCS:%.c=%.d) $(PLUGIN_FULLNAME)
diff --git a/lib/poprouting/README_POPROUTING b/lib/poprouting/README_POPROUTING
new file mode 100644 (file)
index 0000000..aac7c5d
--- /dev/null
@@ -0,0 +1,39 @@
+============
+INTRODUCTION
+============
+
+The poprouting plugin is not an info plugin, but it uses the info structure to allow communication.
+It is used to set the values of the Hello and the TC timers/multiplier in olsrd.
+It can be also used to get the current values from the daemon.
+
+Please first read what's written in the file lib/info/README_INFO.
+
+
+==================
+SUPPORTED COMMANDS
+==================
+The commands can be specified with or without a float number after the =.
+In the former case the timer or the multiplier will be set at that specific value.
+In the latter case the plugin will return the actual value for that timer or multiplier.
+
+* /helloTimer=%f
+* /TCTimer=%f
+* /helloTimerMult=%f
+* /TCTimerMult=%f
+* /helloTimer
+* /TCTimer
+* /helloTimerMult
+* /TCTimerMult
+
+====================
+PLUGIN CONFIGURATION
+====================
+
+The plugin is configured with the generic info plugin configuration parameters.
+
+The port in the generic info plugin configuration is set to 2008.
+
+LoadPlugin "olsrd_poprouting.so.1.0"
+{
+  # <generic info plugin configuration>
+}
diff --git a/lib/poprouting/src/olsrd_plugin.c b/lib/poprouting/src/olsrd_plugin.c
new file mode 100644 (file)
index 0000000..a684910
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+ * The olsr.org Optimized Link-State Routing daemon (olsrd)
+ *
+ * (c) by the OLSR project
+ *
+ * See our Git repository to find out who worked on this file
+ * and thus is a copyright holder on it.
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in
+ *   the documentation and/or other materials provided with the
+ *   distribution.
+ * * Neither the name of olsr.org, olsrd nor the names of its
+ *   contributors may be used to endorse or promote products derived
+ *   from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Visit http://www.olsr.org for more information.
+ *
+ * If you find this software useful feel free to make a donation
+ * to the project. For more information see the website or contact
+ * the copyright holders.
+ *
+ */
+
+/*
+ * Dynamic linked library for the olsr.org olsr daemon
+ */
+
+#include "olsrd_poprouting.h"
+#include "olsrd_plugin.h"
+#include "info/olsrd_info.h"
+#include "olsr.h"
+#include "builddata.h"
+
+#define PLUGIN_NAME              "POPROUTING"
+#define PLUGIN_TITLE             "OLSRD poprouting plugin"
+#define PLUGIN_INTERFACE_VERSION 5
+
+info_plugin_functions_t functions;
+info_plugin_config_t config;
+
+static void my_init(void) __attribute__ ((constructor));
+static void my_fini(void) __attribute__ ((destructor));
+
+/**
+ *Constructor
+ */
+static void my_init(void) {
+  /* Print plugin info to stdout */
+  olsr_printf(0, "%s (%s)\n", PLUGIN_TITLE, git_descriptor);
+
+  info_plugin_config_init(&config, 2008);
+  config.http_headers = false;
+}
+
+/**
+ *Destructor
+ */
+static void my_fini(void) {
+  /* Calls the destruction function
+   * olsr_plugin_exit()
+   * This function should be present in your
+   * sourcefile and all data destruction
+   * should happen there - NOT HERE!
+   */
+  olsr_plugin_exit();
+}
+
+/**
+ *Do initialization here
+ *
+ *This function is called by the my_init
+ *function in uolsrd_plugin.c
+ */
+int olsrd_plugin_init(void) {
+  memset(&functions, 0, sizeof(functions));
+
+  functions.supportsCompositeCommands = false;
+  functions.supported_commands_mask = get_supported_commands_mask;
+  functions.is_command = isCommand;
+  functions.cache_timeout = cache_timeout_generic;
+  functions.output_error = output_error;
+
+  functions.helloTimer = set_hello_timer;
+  functions.tcTimer = set_tc_timer;
+  functions.tcTimerMult = set_tc_timer_mult;
+  functions.helloTimerMult = set_hello_timer_mult;
+  return info_plugin_init(PLUGIN_NAME, &functions, &config);
+}
+
+/**
+ * destructor - called at unload
+ */
+void olsr_plugin_exit(void) {
+  info_plugin_exit();
+}
+
+int olsrd_plugin_interface_version(void) {
+  return PLUGIN_INTERFACE_VERSION;
+}
+
+static const struct olsrd_plugin_parameters plugin_parameters[] = { //
+    //
+        INFO_PLUGIN_CONFIG_PLUGIN_PARAMETERS(config)//
+    };
+
+void olsrd_get_plugin_parameters(const struct olsrd_plugin_parameters **params, int *size) {
+  *params = plugin_parameters;
+  *size = sizeof(plugin_parameters) / sizeof(*plugin_parameters);
+}
+
+/*
+ * Local Variables:
+ * mode: c
+ * style: linux
+ * c-basic-offset: 2
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/lib/poprouting/src/olsrd_plugin.h b/lib/poprouting/src/olsrd_plugin.h
new file mode 100644 (file)
index 0000000..4059307
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * The olsr.org Optimized Link-State Routing daemon (olsrd)
+ *
+ * (c) by the OLSR project
+ *
+ * See our Git repository to find out who worked on this file
+ * and thus is a copyright holder on it.
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in
+ *   the documentation and/or other materials provided with the
+ *   distribution.
+ * * Neither the name of olsr.org, olsrd nor the names of its
+ *   contributors may be used to endorse or promote products derived
+ *   from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Visit http://www.olsr.org for more information.
+ *
+ * If you find this software useful feel free to make a donation
+ * to the project. For more information see the website or contact
+ * the copyright holders.
+ *
+ */
+
+/*
+ * Dynamic linked library for the olsr.org olsr daemon
+ */
+
+#ifndef LIB_POPROUTING_SRC_OLSRD_PLUGIN_H_
+#define LIB_POPROUTING_SRC_OLSRD_PLUGIN_H_
+
+#include "plugin_util.h"
+#include "info/info_types.h"
+
+extern info_plugin_config_t config;
+
+int olsrd_plugin_interface_version(void);
+int olsrd_plugin_init(void);
+void olsr_plugin_exit(void);
+void olsrd_get_plugin_parameters(const struct olsrd_plugin_parameters **params, int *size);
+
+#endif /* LIB_POPROUTING_SRC_OLSRD_PLUGIN_H_ */
+
+/*
+ * Local Variables:
+ * c-basic-offset: 2
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/lib/poprouting/src/olsrd_poprouting.c b/lib/poprouting/src/olsrd_poprouting.c
new file mode 100644 (file)
index 0000000..18acf48
--- /dev/null
@@ -0,0 +1,214 @@
+/*
+ * The olsr.org Optimized Link-State Routing daemon (olsrd)
+ *
+ * (c) by the OLSR project
+ *
+ * See our Git repository to find out who worked on this file
+ * and thus is a copyright holder on it.
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in
+ *   the documentation and/or other materials provided with the
+ *   distribution.
+ * * Neither the name of olsr.org, olsrd nor the names of its
+ *   contributors may be used to endorse or promote products derived
+ *   from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Visit http://www.olsr.org for more information.
+ *
+ * If you find this software useful feel free to make a donation
+ * to the project. For more information see the website or contact
+ * the copyright holders.
+ *
+ */
+
+#include "olsrd_poprouting.h"
+
+#include <unistd.h>
+
+#include "info/info_types.h"
+#include "info/http_headers.h"
+#include "olsr.h"
+#include "scheduler.h"
+
+float timer=0.0f;
+float hello_mult = 10.0f;
+float tc_mult = 60.0f;
+
+unsigned long long get_supported_commands_mask(void) {
+  return SIW_POPROUTING;
+}
+
+bool isCommand(const char *str, unsigned long long siw) {
+  const char *prefix, s[2] = "=";
+  char *string, *cmd, *s_timer;
+  string = strdup(str);
+  switch (siw) {
+    case SIW_POPROUTING_HELLO:
+      prefix = "/helloTimer";
+      break;
+
+    case SIW_POPROUTING_TC:
+      prefix = "/tcTimer";
+      break;
+
+    case SIW_POPROUTING_HELLO_MULT:
+      prefix = "/helloTimerMult";
+      break;
+
+    case SIW_POPROUTING_TC_MULT:
+      prefix = "/tcTimerMult";
+      break;
+
+    default:
+      return false;
+  }
+  cmd = strtok(string, s);
+  s_timer = strtok(NULL, s);
+  if (s_timer) {
+    timer = atof(s_timer);
+  }
+  else{
+    timer = 0;
+  }
+
+  return (!strcmp(cmd, prefix) && timer>=0);
+}
+
+void output_error(struct autobuf *abuf, unsigned int status, const char * req __attribute__((unused)), bool http_headers) {
+  if (http_headers || (status == INFO_HTTP_OK)) {
+    return;
+  }
+
+  /* !http_headers && !INFO_HTTP_OK */
+
+  if (status == INFO_HTTP_NOCONTENT) {
+    /* wget can't handle output of zero length */
+    abuf_puts(abuf, "\n");
+  } else {
+    abuf_appendf(abuf, "error: %s\n", httpStatusToReply(status));
+  }
+}
+
+void set_hello_timer(struct autobuf *abuf) {
+  struct olsr_if *in;
+  assert(abuf);
+  in = olsr_cnf->interfaces;
+  if(timer != 0.0f){
+    char response[20];
+    sprintf(response, "hello:%.2f\n", (double)in->cnf->hello_params.emission_interval);
+    abuf_puts(abuf, response);
+    return;
+  }
+  
+  while (in != NULL) {
+    olsr_printf(1, "(POPROUTING) Setting Hello Timer=%f for interface %s\n", (double)timer, in->name);
+    //olsr_change_timer(in->interf->hello_gen_timer, timer * MSEC_PER_SEC, 0, 1);
+    in->interf->hello_gen_timer->timer_period = timer * MSEC_PER_SEC;
+    in->interf->hello_gen_timer->timer_jitter_pct = POPROUTING_JITTER; // Jitter to 5%
+    in->cnf->hello_params.emission_interval = timer;
+    in->cnf->hello_params.validity_time = timer * hello_mult;
+    in->interf->valtimes.hello = reltime_to_me(in->cnf->hello_params.validity_time * MSEC_PER_SEC);
+    in->interf->hello_etime = in->cnf->hello_params.emission_interval * MSEC_PER_SEC;
+    in = in->next;
+  }
+  abuf_puts(abuf, "0\n");
+  return;
+}
+
+void set_tc_timer(struct autobuf *abuf) {
+  struct olsr_if *in;
+  in = olsr_cnf->interfaces;
+  if(timer != 0.0f){
+    char response[20];
+    sprintf(response, "tc:%.2f\n", (double)in->cnf->tc_params.emission_interval);
+    abuf_puts(abuf, response);
+    return;
+  }
+  
+  while (in != NULL) {
+    olsr_printf(1, "(POPROUTING) Setting Tc Timer=%f for interface %s\n", (double)timer, in->name);
+    //olsr_change_timer(in->interf->tc_gen_timer, timer * MSEC_PER_SEC, 0, 1);
+    in->interf->tc_gen_timer->timer_period = timer * MSEC_PER_SEC;
+    in->interf->tc_gen_timer->timer_jitter_pct = POPROUTING_JITTER; // Jitter to 5%
+    in->cnf->tc_params.emission_interval = timer;
+    in->cnf->tc_params.validity_time = timer * tc_mult;
+    in->interf->valtimes.tc=reltime_to_me(in->cnf->tc_params.validity_time * MSEC_PER_SEC);
+    in = in->next;
+  }
+  abuf_puts(abuf, "0\n");
+  return;
+}
+
+void set_tc_timer_mult(struct autobuf *abuf) {
+  float current_timer;
+  struct olsr_if *in;
+  assert(abuf);
+  in = olsr_cnf->interfaces;
+  if(timer != 0.0f){
+    char response[20];
+    sprintf(response, "tc_mult:%.2f\n", (double)tc_mult);
+    abuf_puts(abuf, response);
+    return;
+  }
+  else {
+    tc_mult = timer;
+  }
+  
+  while (in != NULL) {
+    olsr_printf(1, "(POPROUTING) Setting Tc Timer Mult=%f for interface %s\n", (double)tc_mult, in->name);
+    current_timer = in->cnf->tc_params.emission_interval;
+    in->cnf->tc_params.validity_time = current_timer * tc_mult;
+    in->interf->valtimes.tc=reltime_to_me(in->cnf->tc_params.validity_time * MSEC_PER_SEC);
+    in = in->next;
+  }
+  abuf_puts(abuf, "0\n");
+  return;
+}
+
+void set_hello_timer_mult(struct autobuf *abuf) {
+  float current_timer;
+  struct olsr_if *in;
+  assert(abuf);
+  in = olsr_cnf->interfaces;
+  if(timer != 0.0f){
+    char response[20];
+    sprintf(response, "hello_mult:%.2f\n", (double)hello_mult);
+    abuf_puts(abuf, response);
+    return;
+  }
+  else {
+    hello_mult = timer;
+  }
+  
+  while (in != NULL) {
+    olsr_printf(1, "(POPROUTING) Setting Hello Timer Mult=%f for interface %s\n", (double)hello_mult, in->name);
+    current_timer = in->cnf->hello_params.emission_interval;
+    in->cnf->hello_params.validity_time = current_timer * hello_mult;
+    in->interf->valtimes.hello = reltime_to_me(in->cnf->hello_params.validity_time * MSEC_PER_SEC);
+    in = in->next;
+  }
+  abuf_puts(abuf, "0\n");
+  return;
+}
diff --git a/lib/poprouting/src/olsrd_poprouting.h b/lib/poprouting/src/olsrd_poprouting.h
new file mode 100644 (file)
index 0000000..bebfaba
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * The olsr.org Optimized Link-State Routing daemon (olsrd)
+ *
+ * (c) by the OLSR project
+ *
+ * See our Git repository to find out who worked on this file
+ * and thus is a copyright holder on it.
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in
+ *   the documentation and/or other materials provided with the
+ *   distribution.
+ * * Neither the name of olsr.org, olsrd nor the names of its
+ *   contributors may be used to endorse or promote products derived
+ *   from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Visit http://www.olsr.org for more information.
+ *
+ * If you find this software useful feel free to make a donation
+ * to the project. For more information see the website or contact
+ * the copyright holders.
+ *
+ */
+
+#ifndef LIB_POPROUTING_SRC_OLSRD_POPROUTING_H_
+#define LIB_POPROUTING_SRC_OLSRD_POPROUTING_H_
+
+#include <stdbool.h>
+#include "common/autobuf.h"
+
+#define POPROUTING_JITTER 5
+
+unsigned long long get_supported_commands_mask(void);
+bool isCommand(const char *str, unsigned long long siw);
+void output_error(struct autobuf *abuf, unsigned int status, const char * req, bool http_headers);
+
+void set_hello_timer(struct autobuf *abuf);
+void set_tc_timer(struct autobuf *abuf);
+void set_hello_timer_mult(struct autobuf *abuf);
+void set_tc_timer_mult(struct autobuf *abuf);
+
+
+#endif /* LIB_POPROUTING_SRC_OLSRD_POPROUTING_H_ */
diff --git a/lib/poprouting/version-script.txt b/lib/poprouting/version-script.txt
new file mode 100644 (file)
index 0000000..a145659
--- /dev/null
@@ -0,0 +1,10 @@
+VERS_1.0
+{
+  global:
+    olsrd_plugin_interface_version;
+    olsrd_plugin_init;
+    olsrd_get_plugin_parameters;
+
+  local:
+    *;
+};