Convert etx_lq_fpm plugin to new plugin interface
authorHenning Rogge <hrogge@googlemail.com>
Sun, 5 Jul 2009 10:35:48 +0000 (12:35 +0200)
committerHenning Rogge <hrogge@googlemail.com>
Sun, 5 Jul 2009 10:35:48 +0000 (12:35 +0200)
fix small bugs in etx_lq_ff and etx_lq_float
move some lq based definitions into the plugins

lib/lq_etx_ff/src/lq_plugin_etx_ff.c
lib/lq_etx_ff/src/lq_plugin_etx_ff.h
lib/lq_etx_float/src/lq_plugin_etx_float.c
lib/lq_etx_fpm/src/lq_plugin_etx_fpm.c
lib/lq_etx_fpm/src/olsrd_plugin.c [deleted file]
lib/lq_etx_fpm/src/olsrd_plugin.h [deleted file]
src/lq_plugin.h
src/olsr_cfg.h

index f458b11..b3c197d 100644 (file)
 #include "scheduler.h"
 #include "olsr_logging.h"
 
+#define PLUGIN_DESCR "Freifunk ETX metric based on the original design of Elektra and Thomas Lopatic"
+#define PLUGIN_AUTHOR "Henning Rogge"
+
+#define LQ_ALGORITHM_ETX_FF_NAME "etx_ff"
+
+#define LQ_FF_QUICKSTART_INIT 4
+
 #define LQ_PLUGIN_RELEVANT_COSTCHANGE_FF 16
 
 static int lq_etxff_post_init(void);
@@ -85,7 +92,7 @@ static char *lq_etxff_print_cost(olsr_linkcost cost, struct lqtextbuffer *buffer
 
 static struct olsr_cookie_info *default_lq_ff_timer_cookie = NULL;
 
-DEFINE_PLUGIN6_NP(PLUGIN_DESCR, PLUGIN_AUTHOR, NULL, lq_etxff_post_init, NULL, NULL, true)
+DEFINE_PLUGIN6_NP(PLUGIN_DESCR, PLUGIN_AUTHOR, NULL, lq_etxff_post_init, NULL, NULL, false)
 
 /* etx lq plugin (freifunk fpm version) settings */
 struct lq_handler lq_etxff_handler = {
index 69cff1f..d695ccc 100644 (file)
 #include "lq_packet.h"
 #include "lq_plugin.h"
 
-#define PLUGIN_DESCR "Freifunk ETX metric based on the original design of Elektra and Thomas Lopatic"
-#define PLUGIN_AUTHOR "Henning Rogge"
-
-#define LQ_ALGORITHM_ETX_FF_NAME "etx_ff"
-
 /* 16,32,64 and max. 128 */
 #define LQ_FF_WINDOW 64
-#define LQ_FF_QUICKSTART_INIT 4
 
 struct lq_etxff_linkquality {
   uint8_t valueLq;
index 08644d6..4dbca77 100644 (file)
 
 #define LQ_PLUGIN_LC_MULTIPLIER 1024
 
+#define LQ_FLOAT_DEFAULT_AGING       0.05        /* 65536 * 0.05 */
+#define LQ_FLOAT_QUICKSTART_AGING    0.25       /* 65536 * 0.25 */
+#define LQ_QUICKSTART_STEPS        12
+
 static int set_plugin_float(const char *, void *, set_plugin_parameter_addon);
 static int lq_etxfloat_post_init(void);
 
@@ -122,7 +126,7 @@ struct lq_handler lq_etxfloat_handler = {
   LQ_TC_MESSAGE
 };
 
-static float lq_aging = DEF_LQ_AGING;
+static float lq_aging = LQ_FLOAT_DEFAULT_AGING;
 
 static const struct olsrd_plugin_parameters plugin_parameters[] = {
   {.name = "LinkQualityAging",.set_plugin_parameter = &set_plugin_float,.data = &lq_aging},
@@ -215,7 +219,8 @@ lq_etxfloat_packet_loss_handler(struct link_entry *link, bool loss)
   float alpha = lq_aging;
 
   if (lq_link->quickstart < LQ_QUICKSTART_STEPS) {
-    alpha = LQ_QUICKSTART_AGING;        /* fast enough to get the LQ value within 6 Hellos up to 0.9 */
+    /* fast enough to get the LQ value within 6 Hellos up to 0.9 */
+    alpha = LQ_FLOAT_QUICKSTART_AGING;
     lq_link->quickstart++;
   }
   // exponential moving average
index 24b21b9..a913d08 100644 (file)
 #include "lq_packet.h"
 #include "olsr.h"
 #include "lq_plugin_etx_fpm.h"
+#include "olsr_logging.h"
+
+#define PLUGIN_DESCR    "Integer arithmetic based ETX metric with exponential aging"
+#define PLUGIN_AUTHOR   "Sven-Ola Tücke and Henning Rogge"
 
 #define LQ_FPM_INTERNAL_MULTIPLIER 65535
 #define LQ_FPM_LINKCOST_MULTIPLIER 65535
 
-static void lq_etxfpm_initialize(void);
-static void lq_etxfpm_deinitialize(void);
+#define LQ_FPM_DEFAULT_AGING       3276        /* 65536 * 0.05 */
+#define LQ_FPM_QUICKSTART_AGING    16384       /* 65536 * 0.25 */
+#define LQ_QUICKSTART_STEPS        12
+
+static int set_plugin_aging(const char *, void *, set_plugin_parameter_addon);
 
 static olsr_linkcost lq_etxfpm_calc_link_entry_cost(struct link_entry *);
 static olsr_linkcost lq_etxfpm_calc_lq_hello_neighbor_cost(struct lq_hello_neighbor *);
@@ -79,8 +86,8 @@ static char *lq_etxfpm_print_cost(olsr_linkcost cost, struct lqtextbuffer *buffe
 struct lq_handler lq_etxfpm_handler = {
   "etx (fpm)",
 
-  &lq_etxfpm_initialize,
-  &lq_etxfpm_deinitialize,
+  NULL,
+  NULL,
 
   &lq_etxfpm_calc_link_entry_cost,
   &lq_etxfpm_calc_lq_hello_neighbor_cost,
@@ -119,22 +126,43 @@ struct lq_handler lq_etxfpm_handler = {
   LQ_TC_MESSAGE
 };
 
-static uint32_t aging_factor_new, aging_factor_old;
-static uint32_t aging_quickstart_new, aging_quickstart_old;
+static uint32_t aging_factor_new = LQ_FPM_DEFAULT_AGING;
+static uint32_t aging_factor_old = LQ_FPM_INTERNAL_MULTIPLIER - LQ_FPM_DEFAULT_AGING;
+static uint32_t aging_quickstart_new = LQ_FPM_QUICKSTART_AGING;
+static uint32_t aging_quickstart_old = LQ_FPM_INTERNAL_MULTIPLIER - LQ_FPM_QUICKSTART_AGING;
 
-static void
-lq_etxfpm_initialize(void)
-{
-  aging_factor_new = (uint32_t) (lq_aging * LQ_FPM_INTERNAL_MULTIPLIER);
-  aging_factor_old = LQ_FPM_INTERNAL_MULTIPLIER - aging_factor_new;
+static const struct olsrd_plugin_parameters plugin_parameters[] = {
+  {.name = "LinkQualityAging",.set_plugin_parameter = &set_plugin_aging,.data = NULL}
+};
 
-  aging_quickstart_new = (uint32_t) (LQ_QUICKSTART_AGING * LQ_FPM_INTERNAL_MULTIPLIER);
-  aging_quickstart_old = LQ_FPM_INTERNAL_MULTIPLIER - aging_quickstart_new;
-}
+DEFINE_PLUGIN6(PLUGIN_DESCR, PLUGIN_AUTHOR, NULL, NULL, NULL, NULL, false, plugin_parameters)
 
-static void
-lq_etxfpm_deinitialize(void)
+static int
+set_plugin_aging(const char *value, void *data  __attribute__ ((unused)),
+    set_plugin_parameter_addon addon __attribute__ ((unused)))
 {
+  uint32_t aging;
+
+  if (value[0] != '0' || value[1] != '.') {
+    OLSR_ERROR(LOG_PLUGINS, "LQ aging value must be between 0 and 1.\n");
+    return 1;
+  }
+
+  aging = strtoul(&value[2], NULL, 10);
+  /* support only 4 digits after . */
+  while (aging >= 10000) {
+    aging /= 10;
+  }
+
+  aging_factor_new = aging * LQ_FPM_INTERNAL_MULTIPLIER;
+
+  while (aging > 0) {
+    aging /= 10;
+    aging_factor_new /= 10;
+  }
+
+  aging_factor_old = LQ_FPM_INTERNAL_MULTIPLIER - aging_factor_new;
+  return 0;
 }
 
 static olsr_linkcost
diff --git a/lib/lq_etx_fpm/src/olsrd_plugin.c b/lib/lq_etx_fpm/src/olsrd_plugin.c
deleted file mode 100644 (file)
index e049824..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-
-/*
- * The olsr.org Optimized Link-State Routing daemon(olsrd)
- * Copyright (c) 2004-2009, the olsr.org team - see HISTORY file
- * 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_plugin.h"
-#include "lq_plugin_etx_fpm.h"
-#include "olsr.h"
-#include "defs.h"
-#include "plugin.h"
-#include "olsr_logging.h"
-
-#include <stdio.h>
-#include <string.h>
-
-#define PLUGIN_NAME    "OLSRD lq_etx_fpm plugin"
-#define PLUGIN_VERSION "0.1"
-#define PLUGIN_AUTHOR   "Henning Rogge and others"
-#define MOD_DESC PLUGIN_NAME " " PLUGIN_VERSION " by " PLUGIN_AUTHOR
-#define PLUGIN_INTERFACE_VERSION 5
-
-/****************************************************************************
- *                Functions that the plugin MUST provide                    *
- ****************************************************************************/
-
-/**
- * Plugin interface version
- * Used by main olsrd to check plugin interface version
- */
-int
-olsrd_plugin_interface_version(void)
-{
-  return PLUGIN_INTERFACE_VERSION;
-}
-
-static int
-set_plugin_float(const char *value, void *data, set_plugin_parameter_addon addon __attribute__ ((unused)))
-{
-  if (data != NULL) {
-    sscanf(value, "%f", (float *)data);
-    OLSR_INFO(LOG_LQ_PLUGINS, "%s float %f\n", "Got", *(float *)data);
-  } else {
-    OLSR_INFO(LOG_LQ_PLUGINS, "%s float %s\n", "Ignored", value);
-  }
-  return 0;
-}
-
-float lq_aging = DEF_LQ_AGING;
-
-/**
- * Register parameters from config file
- * Called for all plugin parameters
- */
-static const struct olsrd_plugin_parameters plugin_parameters[] = {
-  {.name = "LinkQualityAging",.set_plugin_parameter = &set_plugin_float,.data = &lq_aging},
-};
-
-void
-olsrd_get_plugin_parameters(const struct olsrd_plugin_parameters **params, int *size)
-{
-  *params = plugin_parameters;
-  *size = ARRAYSIZE(plugin_parameters);
-}
-
-/**
- * Initialize plugin
- * Called after all parameters are passed
- */
-int
-olsrd_plugin_init(void)
-{
-  /* Verify parameters */
-  if (lq_aging < MIN_LQ_AGING || lq_aging > MAX_LQ_AGING) {
-    OLSR_ERROR(LOG_LQ_PLUGINS, "LQ aging factor %f is not allowed\n", lq_aging);
-    return 0;
-  }
-
-  active_lq_handler = &lq_etxfpm_handler;
-  return 1;
-}
-
-/****************************************************************************
- *       Optional private constructor and destructor functions              *
- ****************************************************************************/
-
-/* attention: make static to avoid name clashes */
-
-static void my_init(void) __attribute__ ((constructor));
-static void my_fini(void) __attribute__ ((destructor));
-
-/**
- * Optional Private Constructor
- */
-static void
-my_init(void)
-{
-  /* Print plugin info to stdout */
-  OLSR_INFO(LOG_LQ_PLUGINS, "%s\n", MOD_DESC);
-}
-
-/**
- * Optional Private Destructor
- */
-static void
-my_fini(void)
-{
-}
-
-/*
- * Local Variables:
- * c-basic-offset: 2
- * indent-tabs-mode: nil
- * End:
- */
diff --git a/lib/lq_etx_fpm/src/olsrd_plugin.h b/lib/lq_etx_fpm/src/olsrd_plugin.h
deleted file mode 100644 (file)
index aa0b5da..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-
-/*
- * The olsr.org Optimized Link-State Routing daemon(olsrd)
- * Copyright (c) 2004-2009, the olsr.org team - see HISTORY file
- * 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 _OLSRD_PLUGIN_LQ_ETX_FPM
-#define _OLSRD_PLUGIN_LQ_ETX_FPM
-
-/****************************************************************************
- *                Functions that the plugin MUST provide                    *
- ****************************************************************************/
-
-/* Initialization function */
-int olsrd_plugin_init(void);
-int olsrd_plugin_interface_version(void);
-
-#endif /* _OLSRD_PLUGIN_LQ_ETX_FPM */
-
-/*
- * Local Variables:
- * c-basic-offset: 2
- * indent-tabs-mode: nil
- * End:
- */
index 12fe2a8..d6e4aec 100644 (file)
@@ -55,9 +55,6 @@
 #define MINIMAL_USEFUL_LQ 0.1
 #define LQ_PLUGIN_RELEVANT_COSTCHANGE 16
 
-#define LQ_QUICKSTART_STEPS 12
-#define LQ_QUICKSTART_AGING 0.25
-
 struct lqtextbuffer {
   char buf[16];
 };
index 090c0f6..a9383df 100644 (file)
@@ -57,7 +57,6 @@
 #define DEF_LQ_DIJK_LIMIT      255
 #define DEF_LQ_DIJK_INTER      0
 #define DEF_LQ_NAT_THRESH      1000
-#define DEF_LQ_AGING           0.1
 #define DEF_CLEAR_SCREEN       false
 #define DEF_HTTPPORT           8080
 #define DEF_HTTPLIMIT          3