Convert lq_etx_float to new plugin system
authorHenning Rogge <hrogge@googlemail.com>
Sun, 5 Jul 2009 09:51:45 +0000 (11:51 +0200)
committerHenning Rogge <hrogge@googlemail.com>
Sun, 5 Jul 2009 09:51:45 +0000 (11:51 +0200)
allow lq_handlers without initialization/deinitialization

lib/lq_etx_float/src/lq_plugin_etx_float.c
lib/lq_etx_float/src/lq_plugin_etx_float.h
lib/lq_etx_float/src/olsrd_plugin.c [deleted file]
lib/lq_etx_float/src/olsrd_plugin.h [deleted file]
src/lq_plugin.c

index 0c4234d..08644d6 100644 (file)
 #include "olsr_spf.h"
 #include "lq_packet.h"
 #include "olsr.h"
+#include "olsr_logging.h"
 #include "lq_plugin_etx_float.h"
 
+#define PLUGIN_DESCR    "Floating point based ETX metric with exponential aging"
+#define PLUGIN_AUTHOR   "Henning Rogge and others"
+
 #define LQ_PLUGIN_LC_MULTIPLIER 1024
 
-static void lq_etxfloat_initialize(void);
-static void lq_etxfloat_deinitialize(void);
+static int set_plugin_float(const char *, void *, set_plugin_parameter_addon);
+static int lq_etxfloat_post_init(void);
 
 static olsr_linkcost lq_etxfloat_calc_link_entry_cost(struct link_entry *);
 static olsr_linkcost lq_etxfloat_calc_lq_hello_neighbor_cost(struct lq_hello_neighbor *);
@@ -78,8 +82,8 @@ static char *lq_etxfloat_print_cost(olsr_linkcost cost, struct lqtextbuffer *buf
 struct lq_handler lq_etxfloat_handler = {
   "etx (float)",
 
-  &lq_etxfloat_initialize,
-  &lq_etxfloat_deinitialize,
+  NULL,
+  NULL,
 
   &lq_etxfloat_calc_link_entry_cost,
   &lq_etxfloat_calc_lq_hello_neighbor_cost,
@@ -118,14 +122,29 @@ struct lq_handler lq_etxfloat_handler = {
   LQ_TC_MESSAGE
 };
 
-static void
-lq_etxfloat_initialize(void)
+static float lq_aging = DEF_LQ_AGING;
+
+static const struct olsrd_plugin_parameters plugin_parameters[] = {
+  {.name = "LinkQualityAging",.set_plugin_parameter = &set_plugin_float,.data = &lq_aging},
+};
+
+DEFINE_PLUGIN6(PLUGIN_DESCR, PLUGIN_AUTHOR, NULL, lq_etxfloat_post_init, NULL, NULL, false, plugin_parameters)
+
+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;
 }
 
-static void
-lq_etxfloat_deinitialize(void)
-{
+static int lq_etxfloat_post_init(void) {
+  active_lq_handler = &lq_etxfloat_handler;
+  return 0;
 }
 
 static olsr_linkcost
index 19418a2..83e80e0 100644 (file)
@@ -72,11 +72,6 @@ struct lq_etxfloat_link_entry {
   struct lq_etxfloat_linkquality lq;
   uint16_t quickstart;
 };
-
-extern struct lq_handler lq_etxfloat_handler;
-
-extern float lq_aging;                 /* Plugin PlParam */
-
 #endif /*LQ_PLUGIN_ETX_FLOAT_H_ */
 
 /*
diff --git a/lib/lq_etx_float/src/olsrd_plugin.c b/lib/lq_etx_float/src/olsrd_plugin.c
deleted file mode 100644 (file)
index 4e7109a..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_float.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_float 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_etxfloat_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_float/src/olsrd_plugin.h b/lib/lq_etx_float/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 5dc3d0f..c35f94b 100644 (file)
@@ -79,14 +79,18 @@ init_lq_handler(void)
   link_entry_mem_cookie = olsr_alloc_cookie("link_entry", OLSR_COOKIE_TYPE_MEMORY);
   olsr_cookie_set_memory_size(link_entry_mem_cookie, active_lq_handler->size_link_entry);
 
-  active_lq_handler->initialize();
+  if (active_lq_handler->initialize) {
+    active_lq_handler->initialize();
+  }
 }
 
 void
 deinit_lq_handler(void)
 {
   if (NULL != active_lq_handler) {
-    active_lq_handler->deinitialize();
+    if (active_lq_handler->deinitialize) {
+      active_lq_handler->deinitialize();
+    }
     active_lq_handler = NULL;
   }
 }