Moved all LQ algos to plugins, removed config options for that
authorSven-Ola Tuecke <sven-ola@gmx.de>
Sat, 3 Jan 2009 19:17:09 +0000 (20:17 +0100)
committerSven-Ola Tuecke <sven-ola@gmx.de>
Sat, 3 Jan 2009 19:17:09 +0000 (20:17 +0100)
38 files changed:
lib/httpinfo/src/olsrd_httpinfo.c
lib/lq_etx_ff/Makefile [new file with mode: 0644]
lib/lq_etx_ff/README_LQ_ETX_FF [new file with mode: 0644]
lib/lq_etx_ff/src/lq_plugin_etx_ff.c [new file with mode: 0644]
lib/lq_etx_ff/src/lq_plugin_etx_ff.h [new file with mode: 0644]
lib/lq_etx_ff/src/olsrd_plugin.c [new file with mode: 0644]
lib/lq_etx_ff/src/olsrd_plugin.h [new file with mode: 0644]
lib/lq_etx_ff/version-script.txt [new file with mode: 0644]
lib/lq_etx_float/Makefile [new file with mode: 0644]
lib/lq_etx_float/README_LQ_ETX_FLOAT [new file with mode: 0644]
lib/lq_etx_float/src/lq_plugin_etx_float.c [moved from src/lq_plugin_etx_float.c with 99% similarity]
lib/lq_etx_float/src/lq_plugin_etx_float.h [moved from src/lq_plugin_etx_float.h with 97% similarity]
lib/lq_etx_float/src/olsrd_plugin.c [new file with mode: 0644]
lib/lq_etx_float/src/olsrd_plugin.h [new file with mode: 0644]
lib/lq_etx_float/version-script.txt [new file with mode: 0644]
lib/lq_etx_fpm/Makefile [new file with mode: 0644]
lib/lq_etx_fpm/README_LQ_ETX_FPM [new file with mode: 0644]
lib/lq_etx_fpm/src/lq_plugin_etx_fpm.c [moved from src/lq_plugin_etx_fpm.c with 99% similarity]
lib/lq_etx_fpm/src/lq_plugin_etx_fpm.h [moved from src/lq_plugin_etx_fpm.h with 97% similarity]
lib/lq_etx_fpm/src/olsrd_plugin.c [new file with mode: 0644]
lib/lq_etx_fpm/src/olsrd_plugin.h [new file with mode: 0644]
lib/lq_etx_fpm/version-script.txt [new file with mode: 0644]
lib/lq_rfc/Makefile [new file with mode: 0644]
lib/lq_rfc/README_LQ_RFC [new file with mode: 0644]
lib/lq_rfc/src/lq_plugin_rfc.c [moved from src/lq_plugin_rfc.c with 100% similarity]
lib/lq_rfc/src/lq_plugin_rfc.h [moved from src/lq_plugin_rfc.h with 84% similarity]
lib/lq_rfc/src/olsrd_plugin.c [new file with mode: 0644]
lib/lq_rfc/src/olsrd_plugin.h [new file with mode: 0644]
lib/lq_rfc/version-script.txt [new file with mode: 0644]
src/link_set.h
src/lq_plugin.c
src/lq_plugin.h
src/main.c
src/olsr.c
src/olsr_cfg.c
src/olsr_cfg.h
src/olsr_cfg_gen.c
src/parser.h

index 04afd68..bbeb38a 100644 (file)
@@ -884,12 +884,6 @@ static void build_config_body(struct autobuf *abuf)
   abuf_appendf(abuf, "<td>RtTableDefault: 0x%04x/%d</td>\n", olsr_cnf->rttable_default, olsr_cnf->rttable_default);
   abuf_appendf(abuf, "<td>Willingness: %d %s</td>\n", olsr_cnf->willingness, olsr_cnf->willingness_auto ? "(auto)" : "");
 
-  abuf_appendf(abuf, "</tr>\n<tr>\n"
-                 "<td>LQ algorithm: %s</td>\n", olsr_cnf->lq_algorithm);
-  abuf_appendf(abuf,
-      "<td>LQ aging: %f</td>\n",
-                 olsr_cnf->lq_aging);
-
   abuf_puts(abuf, "</tr></table>\n");
 
   abuf_puts(abuf, "<h2>Interfaces</h2>\n");
diff --git a/lib/lq_etx_ff/Makefile b/lib/lq_etx_ff/Makefile
new file mode 100644 (file)
index 0000000..5ae1fe7
--- /dev/null
@@ -0,0 +1,56 @@
+# The olsr.org Optimized Link-State Routing daemon(olsrd)
+# Copyright (c) 2004, Andreas Tonnesen(andreto@olsr.org)
+# 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_lq_etx_ff
+PLUGIN_VER =   0.1
+
+TOPDIR = ../..
+include $(TOPDIR)/Makefile.inc
+
+default_target: $(PLUGIN_FULLNAME)
+
+$(PLUGIN_FULLNAME): $(OBJS) version-script.txt
+               $(CC) $(LDFLAGS) -o $(PLUGIN_FULLNAME) $(OBJS) $(LIBS)
+
+install:       $(PLUGIN_FULLNAME)
+               $(STRIP) $(PLUGIN_FULLNAME)
+               $(INSTALL_LIB)
+
+clean:
+               rm -f $(OBJS) $(SRCS:%.c=%.d) $(PLUGIN_FULLNAME)
diff --git a/lib/lq_etx_ff/README_LQ_ETX_FF b/lib/lq_etx_ff/README_LQ_ETX_FF
new file mode 100644 (file)
index 0000000..d0a0554
--- /dev/null
@@ -0,0 +1,27 @@
+---------------------------------------------------------------------
+LQ_ETX_FF PLUGIN FOR OLSRD
+by Henning Rogge and others
+---------------------------------------------------------------------
+
+This is a plugin which realizes an general message loss based LQ
+measurement. Load this plugin to overwrite the compiled-in default
+algorithm.
+
+---------------------------------------------------------------------
+PLUGIN PARAMETERS (PlParam)
+---------------------------------------------------------------------
+
+None
+
+---------------------------------------------------------------------
+SAMPLE CONFIG
+---------------------------------------------------------------------
+
+add in /etc/olsrd.conf:
+
+LoadPlugin "olsrd_lq_etx_ff.so.0.1"
+{
+}
+
+---------------------------------------------------------------------
+EOF
diff --git a/lib/lq_etx_ff/src/lq_plugin_etx_ff.c b/lib/lq_etx_ff/src/lq_plugin_etx_ff.c
new file mode 100644 (file)
index 0000000..ade80e1
--- /dev/null
@@ -0,0 +1,446 @@
+/*
+ * The olsr.org Optimized Link-State Routing daemon(olsrd)
+ * Copyright (c) 2008 Henning Rogge <rogge@fgan.de>
+ * 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 "tc_set.h"
+#include "link_set.h"
+#include "lq_plugin.h"
+#include "olsr_spf.h"
+#include "lq_packet.h"
+#include "olsr.h"
+#include "lq_plugin_etx_ff.h"
+#include "parser.h"
+#include "mid_set.h"
+#include "scheduler.h"
+
+#define LQ_PLUGIN_RELEVANT_COSTCHANGE_FF 16
+
+static void lq_etxff_initialize(void);
+static void lq_etxff_deinitialize(void);
+
+static olsr_linkcost lq_etxff_calc_link_entry_cost(struct link_entry *);
+static olsr_linkcost lq_etxff_calc_lq_hello_neighbor_cost(
+    struct lq_hello_neighbor *);
+static olsr_linkcost lq_etxff_calc_tc_mpr_addr_cost(struct tc_mpr_addr *);
+static olsr_linkcost lq_etxff_calc_tc_edge_entry_cost(struct tc_edge_entry *);
+
+static bool lq_etxff_is_relevant_costchange(olsr_linkcost c1, olsr_linkcost c2);
+
+static olsr_linkcost lq_etxff_packet_loss_handler(struct link_entry *, bool);
+
+static void lq_etxff_memorize_foreign_hello(struct link_entry *,
+    struct lq_hello_neighbor *);
+static void lq_etxff_copy_link_entry_lq_into_tc_mpr_addr(
+    struct tc_mpr_addr *target, struct link_entry *source);
+static void lq_etxff_copy_link_entry_lq_into_tc_edge_entry(
+    struct tc_edge_entry *target, struct link_entry *source);
+static void lq_etxff_copy_link_lq_into_neighbor(struct lq_hello_neighbor *target,
+    struct link_entry *source);
+
+static void lq_etxff_clear_link_entry(struct link_entry *);
+
+static int lq_etxff_serialize_hello_lq(unsigned char *buff,
+    struct lq_hello_neighbor *lq);
+static int lq_etxff_serialize_tc_lq(unsigned char *buff, struct tc_mpr_addr *lq);
+static void lq_etxff_deserialize_hello_lq(uint8_t const ** curr,
+    struct lq_hello_neighbor *lq);
+static void lq_etxff_deserialize_tc_lq(uint8_t const ** curr,
+    struct tc_edge_entry *lq);
+
+static char *lq_etxff_print_link_entry_lq(struct link_entry *entry, char separator,
+    struct lqtextbuffer *buffer);
+static char *lq_etxff_print_tc_edge_entry_lq(struct tc_edge_entry *ptr,
+    char separator, struct lqtextbuffer * buffer);
+static char *lq_etxff_print_cost(olsr_linkcost cost, struct lqtextbuffer * buffer);
+
+static struct olsr_cookie_info *default_lq_ff_timer_cookie = NULL;
+
+/* etx lq plugin (freifunk fpm version) settings */
+struct lq_handler lq_etxff_handler = {
+  &lq_etxff_initialize,
+  &lq_etxff_deinitialize,
+
+  &lq_etxff_calc_link_entry_cost,
+  &lq_etxff_calc_lq_hello_neighbor_cost,
+  &lq_etxff_calc_tc_mpr_addr_cost,
+  &lq_etxff_calc_tc_edge_entry_cost,
+
+  &lq_etxff_is_relevant_costchange,
+
+  &lq_etxff_packet_loss_handler,
+
+  &lq_etxff_memorize_foreign_hello,
+  &lq_etxff_copy_link_entry_lq_into_tc_mpr_addr,
+  &lq_etxff_copy_link_entry_lq_into_tc_edge_entry,
+  &lq_etxff_copy_link_lq_into_neighbor,
+
+  &lq_etxff_clear_link_entry,
+  NULL,
+  NULL,
+  NULL,
+
+  &lq_etxff_serialize_hello_lq,
+  &lq_etxff_serialize_tc_lq,
+  &lq_etxff_deserialize_hello_lq,
+  &lq_etxff_deserialize_tc_lq,
+
+  &lq_etxff_print_link_entry_lq,
+  &lq_etxff_print_tc_edge_entry_lq,
+  &lq_etxff_print_cost,
+
+  sizeof(struct lq_etxff_tc_edge),
+  sizeof(struct lq_etxff_tc_mpr_addr),
+  sizeof(struct lq_etxff_lq_hello_neighbor),
+  sizeof(struct lq_etxff_link_entry),
+
+  LQ_HELLO_MESSAGE,
+  LQ_TC_MESSAGE
+};
+
+static void lq_etxff_packet_parser(struct olsr *olsr, struct interface *in_if,
+    union olsr_ip_addr *from_addr) {
+  const union olsr_ip_addr *main_addr;
+  struct lq_etxff_link_entry *lnk;
+  uint32_t seq_diff;
+
+  /* Find main address */
+  main_addr = olsr_lookup_main_addr_by_alias(from_addr);
+
+  /* Loopup link entry */
+  lnk = (struct lq_etxff_link_entry *) lookup_link_entry(from_addr, main_addr,
+      in_if);
+  if (lnk == NULL) {
+    return;
+  }
+
+  if (lnk->last_seq_nr > olsr->olsr_seqno) {
+    seq_diff = (uint32_t) olsr->olsr_seqno + 65536 - lnk->last_seq_nr;
+  } else {
+    seq_diff = olsr->olsr_seqno - lnk->last_seq_nr;
+  }
+
+  /* Jump in sequence numbers ? */
+  if (seq_diff > 256) {
+    seq_diff = 1;
+  }
+
+  lnk->received[lnk->activePtr]++;
+  lnk->lost[lnk->activePtr] += (seq_diff - 1);
+
+  lnk->last_seq_nr = olsr->olsr_seqno;
+}
+
+static void lq_etxff_timer(void __attribute__((unused)) *context) {
+  struct link_entry *link;
+  OLSR_FOR_ALL_LINK_ENTRIES(link)
+{    struct lq_etxff_link_entry *lq_link;
+    uint32_t ratio;
+    uint16_t i, received, lost;
+
+#if !defined(NODEBUG) && defined(DEBUG)
+    struct ipaddr_str buf;
+    struct lqtextbuffer lqbuffer;
+#endif
+
+    lq_link = (struct lq_etxff_link_entry *)link;
+
+#if !defined(NODEBUG) && defined(DEBUG)
+    OLSR_PRINTF(3, "LQ-FF new entry for %s: rec: %d lost: %d",
+        olsr_ip_to_string(&buf, &link->neighbor_iface_addr),
+        lq_link->received[lq_link->activePtr], lq_link->lost[lq_link->activePtr]);
+#endif
+
+    lq_link = (struct lq_etxff_link_entry *)link;
+
+    received = 0;
+    lost = 0;
+
+    /* enlarge window if still in quickstart phase */
+    if (lq_link->windowSize < LQ_FF_WINDOW) {
+      lq_link->windowSize++;
+    }
+    for (i=0; i < lq_link->windowSize; i++) {
+      received += lq_link->received[i];
+      lost += lq_link->lost[i];
+    }
+
+#if !defined(NODEBUG) && defined(DEBUG)
+    OLSR_PRINTF(3, " total-rec: %d total-lost: %d", received, lost);
+#endif
+    /* calculate link quality */
+    if (received + lost == 0) {
+      lq_link->lq.valueLq = 0;
+    }
+    else {
+      // start with link-loss-factor
+      ratio = link->loss_link_multiplier;
+
+      // calculate received/(received + loss) factor
+      ratio = ratio * received;
+      ratio = ratio / (received + lost);
+      ratio = (ratio * 255) >> 16;
+
+      lq_link->lq.valueLq = (uint8_t)(ratio);
+    }
+    link->linkcost = lq_etxff_calc_link_entry_cost(link);
+
+#if !defined(NODEBUG) && defined(DEBUG)
+    OLSR_PRINTF(3, " linkcost: %s\n", lq_etxff_print_cost(link->linkcost, &lqbuffer));
+#endif
+
+    // shift buffer
+    lq_link->activePtr = (lq_link->activePtr + 1) % LQ_FF_WINDOW;
+    lq_link->lost[lq_link->activePtr] = 0;
+    lq_link->received[lq_link->activePtr] = 0;
+  }OLSR_FOR_ALL_LINK_ENTRIES_END(link);
+}
+
+static struct timer_entry *lq_etxff_timer_struct = NULL;
+
+static void lq_etxff_initialize(void) {
+  /* Some cookies for stats keeping */
+  olsr_packetparser_add_function(&lq_etxff_packet_parser);
+  default_lq_ff_timer_cookie = olsr_alloc_cookie("Default Freifunk LQ",
+      OLSR_COOKIE_TYPE_TIMER);
+  lq_etxff_timer_struct = olsr_start_timer(1000, 0, OLSR_TIMER_PERIODIC,
+      &lq_etxff_timer, NULL, default_lq_ff_timer_cookie->ci_id);
+}
+
+static void lq_etxff_deinitialize(void) {
+  olsr_stop_timer(lq_etxff_timer_struct);
+  olsr_packetparser_remove_function(&lq_etxff_packet_parser);
+}
+
+static olsr_linkcost lq_etxff_calc_linkcost(struct lq_etxff_linkquality *lq) {
+  olsr_linkcost cost;
+
+  if (lq->valueLq < (unsigned int) (255 * MINIMAL_USEFUL_LQ) || lq->valueNlq
+      < (unsigned int) (255 * MINIMAL_USEFUL_LQ)) {
+    return LINK_COST_BROKEN;
+  }
+
+  cost = 65536 * 255/(int)lq->valueLq * 255/(int)lq->valueNlq;
+
+  if (cost > LINK_COST_BROKEN)
+    return LINK_COST_BROKEN;
+  if (cost == 0)
+    return 1;
+  return cost;
+}
+
+static olsr_linkcost lq_etxff_calc_link_entry_cost(struct link_entry *link) {
+  struct lq_etxff_link_entry *lq_link = (struct lq_etxff_link_entry *) link;
+
+  return lq_etxff_calc_linkcost(&lq_link->lq);
+}
+
+static olsr_linkcost lq_etxff_calc_lq_hello_neighbor_cost(
+    struct lq_hello_neighbor *neigh) {
+  struct lq_etxff_lq_hello_neighbor *lq_neigh =
+      (struct lq_etxff_lq_hello_neighbor *) neigh;
+
+  return lq_etxff_calc_linkcost(&lq_neigh->lq);
+}
+
+static olsr_linkcost lq_etxff_calc_tc_mpr_addr_cost(struct tc_mpr_addr *mpr) {
+  struct lq_etxff_tc_mpr_addr *lq_mpr = (struct lq_etxff_tc_mpr_addr *) mpr;
+
+  return lq_etxff_calc_linkcost(&lq_mpr->lq);
+}
+
+static olsr_linkcost lq_etxff_calc_tc_edge_entry_cost(struct tc_edge_entry *edge) {
+  struct lq_etxff_tc_edge *lq_edge = (struct lq_etxff_tc_edge *) edge;
+
+  return lq_etxff_calc_linkcost(&lq_edge->lq);
+}
+
+static bool lq_etxff_is_relevant_costchange(olsr_linkcost c1, olsr_linkcost c2) {
+  if (c1 > c2) {
+    return c2 - c1 > LQ_PLUGIN_RELEVANT_COSTCHANGE_FF;
+  }
+  return c1 - c2 > LQ_PLUGIN_RELEVANT_COSTCHANGE_FF;
+}
+
+static olsr_linkcost lq_etxff_packet_loss_handler(struct link_entry *link,
+    bool loss __attribute__((unused))) {
+  return link->linkcost;
+}
+
+static void lq_etxff_memorize_foreign_hello(struct link_entry *target,
+    struct lq_hello_neighbor *source) {
+  struct lq_etxff_link_entry *lq_target = (struct lq_etxff_link_entry *) target;
+  struct lq_etxff_lq_hello_neighbor *lq_source =
+      (struct lq_etxff_lq_hello_neighbor *) source;
+
+  if (source) {
+    lq_target->lq.valueNlq = lq_source->lq.valueLq;
+  } else {
+    lq_target->lq.valueNlq = 0;
+  }
+
+}
+
+static void lq_etxff_copy_link_entry_lq_into_tc_mpr_addr(
+    struct tc_mpr_addr *target, struct link_entry *source) {
+  struct lq_etxff_tc_mpr_addr *lq_target = (struct lq_etxff_tc_mpr_addr *) target;
+  struct lq_etxff_link_entry *lq_source = (struct lq_etxff_link_entry *) source;
+
+  lq_target->lq = lq_source->lq;
+}
+
+static void lq_etxff_copy_link_entry_lq_into_tc_edge_entry(
+    struct tc_edge_entry *target, struct link_entry *source) {
+  struct lq_etxff_tc_edge *lq_target = (struct lq_etxff_tc_edge *) target;
+  struct lq_etxff_link_entry *lq_source = (struct lq_etxff_link_entry *) source;
+
+  lq_target->lq = lq_source->lq;
+}
+
+static void lq_etxff_copy_link_lq_into_neighbor(struct lq_hello_neighbor *target,
+    struct link_entry *source) {
+  struct lq_etxff_lq_hello_neighbor *lq_target =
+      (struct lq_etxff_lq_hello_neighbor *) target;
+  struct lq_etxff_link_entry *lq_source = (struct lq_etxff_link_entry *) source;
+
+  lq_target->lq = lq_source->lq;
+}
+
+static void lq_etxff_clear_link_entry(struct link_entry *link) {
+  struct lq_etxff_link_entry *lq_link = (struct lq_etxff_link_entry *) link;
+  int i;
+
+  lq_link->windowSize = LQ_FF_QUICKSTART_INIT;
+  for (i = 0; i < LQ_FF_WINDOW; i++) {
+    lq_link->lost[i] = 3;
+  }
+}
+
+static int lq_etxff_serialize_hello_lq(unsigned char *buff,
+    struct lq_hello_neighbor *neigh) {
+  struct lq_etxff_lq_hello_neighbor *lq_neigh =
+      (struct lq_etxff_lq_hello_neighbor *) neigh;
+
+  buff[0] = (unsigned char) lq_neigh->lq.valueLq;
+  buff[1] = (unsigned char) lq_neigh->lq.valueNlq;
+  buff[2] = (unsigned char) (0);
+  buff[3] = (unsigned char) (0);
+
+  return 4;
+}
+static int lq_etxff_serialize_tc_lq(unsigned char *buff, struct tc_mpr_addr *mpr) {
+  struct lq_etxff_tc_mpr_addr *lq_mpr = (struct lq_etxff_tc_mpr_addr *) mpr;
+
+  buff[0] = (unsigned char) lq_mpr->lq.valueLq;
+  buff[1] = (unsigned char) lq_mpr->lq.valueNlq;
+  buff[2] = (unsigned char) (0);
+  buff[3] = (unsigned char) (0);
+
+  return 4;
+}
+
+static void lq_etxff_deserialize_hello_lq(uint8_t const ** curr,
+    struct lq_hello_neighbor *neigh) {
+  struct lq_etxff_lq_hello_neighbor *lq_neigh =
+      (struct lq_etxff_lq_hello_neighbor *) neigh;
+
+  pkt_get_u8(curr, &lq_neigh->lq.valueLq);
+  pkt_get_u8(curr, &lq_neigh->lq.valueNlq);
+  pkt_ignore_u16(curr);
+
+}
+static void lq_etxff_deserialize_tc_lq(uint8_t const ** curr,
+    struct tc_edge_entry *edge) {
+  struct lq_etxff_tc_edge *lq_edge = (struct lq_etxff_tc_edge *) edge;
+
+  pkt_get_u8(curr, &lq_edge->lq.valueLq);
+  pkt_get_u8(curr, &lq_edge->lq.valueNlq);
+  pkt_ignore_u16(curr);
+}
+
+static char *lq_etxff_print_lq(struct lq_etxff_linkquality *lq, char separator,
+    struct lqtextbuffer *buffer) {
+  int i = 0;
+
+  if (lq->valueLq == 255) {
+       strcpy(buffer->buf, "1.000");
+       i += 5;
+  }
+  else {
+    i = sprintf(buffer->buf, "0.%03d", (lq->valueLq * 1000)/255);
+  }
+  buffer->buf[i++] = separator;
+
+  if (lq->valueNlq == 255) {
+    strcpy(&buffer->buf[i], "1.000");
+  }
+  else {
+    sprintf(&buffer->buf[i], "0.%03d", (lq->valueNlq * 1000) / 255);
+  }
+  return buffer->buf;
+}
+
+static char *lq_etxff_print_link_entry_lq(struct link_entry *link, char separator,
+    struct lqtextbuffer *buffer) {
+  struct lq_etxff_link_entry *lq_link = (struct lq_etxff_link_entry *) link;
+
+  return lq_etxff_print_lq(&lq_link->lq, separator, buffer);
+}
+
+static char *lq_etxff_print_tc_edge_entry_lq(struct tc_edge_entry *edge,
+    char separator, struct lqtextbuffer * buffer) {
+  struct lq_etxff_tc_edge *lq_edge = (struct lq_etxff_tc_edge *) edge;
+
+  return lq_etxff_print_lq(&lq_edge->lq, separator, buffer);
+}
+
+static char *lq_etxff_print_cost(olsr_linkcost cost, struct lqtextbuffer * buffer) {
+  // must calculate
+  uint32_t roundDown = cost >> 16;
+  uint32_t fraction = ((cost & 0xffff) * 1000) >> 16;
+
+  sprintf(buffer->buf, "%u.%03u", roundDown, fraction);
+  return buffer->buf;
+}
+
+/*
+ * Local Variables:
+ * c-basic-offset: 2
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/lib/lq_etx_ff/src/lq_plugin_etx_ff.h b/lib/lq_etx_ff/src/lq_plugin_etx_ff.h
new file mode 100644 (file)
index 0000000..bf9adb5
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ * The olsr.org Optimized Link-State Routing daemon(olsrd)
+ * Copyright (c) 2008 Henning Rogge <rogge@fgan.de>
+ * 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 LQ_PLUGIN_ETX_FF_
+#define LQ_PLUGIN_ETX_FF_
+
+#include "olsr_types.h"
+#include "tc_set.h"
+#include "link_set.h"
+#include "lq_packet.h"
+#include "lq_plugin.h"
+
+#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;
+  uint8_t valueNlq;
+};
+
+struct lq_etxff_tc_edge {
+  struct tc_entry core;
+  struct lq_etxff_linkquality lq;
+};
+
+struct lq_etxff_tc_mpr_addr {
+  struct tc_mpr_addr core;
+  struct lq_etxff_linkquality lq;
+};
+
+struct lq_etxff_lq_hello_neighbor {
+  struct lq_hello_neighbor core;
+  struct lq_etxff_linkquality lq;
+};
+
+struct lq_etxff_link_entry {
+  struct link_entry core;
+  struct lq_etxff_linkquality lq;
+  uint8_t windowSize, activePtr;
+  uint16_t last_seq_nr;
+  uint16_t received[LQ_FF_WINDOW], lost[LQ_FF_WINDOW];
+};
+
+extern struct lq_handler lq_etxff_handler;
+
+#endif /*LQ_PLUGIN_ETX_FF_*/
+
+/*
+ * Local Variables:
+ * c-basic-offset: 2
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/lib/lq_etx_ff/src/olsrd_plugin.c b/lib/lq_etx_ff/src/olsrd_plugin.c
new file mode 100644 (file)
index 0000000..0194331
--- /dev/null
@@ -0,0 +1,119 @@
+
+/*
+ * Copyright (c) 2008, the olsr.org team
+ * 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 the UniK olsr daemon 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.
+ *
+ */
+
+#include "olsrd_plugin.h"
+#include "lq_plugin_etx_ff.h"
+#include "olsr.h"
+#include "defs.h"
+
+#include "../../../src/olsrd_plugin.h"
+
+#include <stdio.h>
+#include <string.h>
+
+#define PLUGIN_NAME    "OLSRD lq_etx_ff 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;
+}
+
+/**
+ * Register parameters from config file
+ * Called for all plugin parameters
+ */
+static const struct olsrd_plugin_parameters plugin_parameters[] = {
+};
+
+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)
+{
+  active_lq_handler = &lq_etxff_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 */
+  printf("%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_ff/src/olsrd_plugin.h b/lib/lq_etx_ff/src/olsrd_plugin.h
new file mode 100644 (file)
index 0000000..a34d589
--- /dev/null
@@ -0,0 +1,54 @@
+
+/*
+ * Copyright (c) 2008, the olsr.org team
+ * 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 the UniK olsr daemon 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.
+ *
+ */
+
+/*
+ * 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:
+ */
diff --git a/lib/lq_etx_ff/version-script.txt b/lib/lq_etx_ff/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:
+    *;
+};
diff --git a/lib/lq_etx_float/Makefile b/lib/lq_etx_float/Makefile
new file mode 100644 (file)
index 0000000..547552b
--- /dev/null
@@ -0,0 +1,56 @@
+# The olsr.org Optimized Link-State Routing daemon(olsrd)
+# Copyright (c) 2004, Andreas Tonnesen(andreto@olsr.org)
+# 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_lq_etx_float
+PLUGIN_VER =   0.1
+
+TOPDIR = ../..
+include $(TOPDIR)/Makefile.inc
+
+default_target: $(PLUGIN_FULLNAME)
+
+$(PLUGIN_FULLNAME): $(OBJS) version-script.txt
+               $(CC) $(LDFLAGS) -o $(PLUGIN_FULLNAME) $(OBJS) $(LIBS)
+
+install:       $(PLUGIN_FULLNAME)
+               $(STRIP) $(PLUGIN_FULLNAME)
+               $(INSTALL_LIB)
+
+clean:
+               rm -f $(OBJS) $(SRCS:%.c=%.d) $(PLUGIN_FULLNAME)
diff --git a/lib/lq_etx_float/README_LQ_ETX_FLOAT b/lib/lq_etx_float/README_LQ_ETX_FLOAT
new file mode 100644 (file)
index 0000000..2dd49f6
--- /dev/null
@@ -0,0 +1,29 @@
+---------------------------------------------------------------------
+LQ_ETX_FLOAT PLUGIN FOR OLSRD
+by Henning Rogge and others
+---------------------------------------------------------------------
+
+This is a plugin which realizes an LQ_HELLO message loss based LQ
+measurement. Load this plugin to overwrite the compiled-in default
+algorithm. This version uses floating point math
+
+---------------------------------------------------------------------
+PLUGIN PARAMETERS (PlParam)
+---------------------------------------------------------------------
+
+PlParam "LinkQualityAging" "0.01-1.0"
+       Determines adaption speed of the algorithm
+
+---------------------------------------------------------------------
+SAMPLE CONFIG
+---------------------------------------------------------------------
+
+add in /etc/olsrd.conf:
+
+LoadPlugin "olsrd_lq_etx_float.so.0.1"
+{
+       PlParam "LinkQualityAging" "0.1"
+}
+
+---------------------------------------------------------------------
+EOF
similarity index 99%
rename from src/lq_plugin_etx_float.c
rename to lib/lq_etx_float/src/lq_plugin_etx_float.c
index 71e879d..37d2d18 100644 (file)
@@ -185,7 +185,7 @@ static olsr_linkcost lq_etxfloat_packet_loss_handler(struct link_entry *link,
     bool loss) {
   struct lq_etxfloat_link_entry *lq_link = (struct lq_etxfloat_link_entry *)link;
 
-  float alpha = olsr_cnf->lq_aging;
+  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 */
similarity index 97%
rename from src/lq_plugin_etx_float.h
rename to lib/lq_etx_float/src/lq_plugin_etx_float.h
index 56d5705..b761877 100644 (file)
@@ -74,6 +74,8 @@ struct lq_etxfloat_link_entry {
 
 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
new file mode 100644 (file)
index 0000000..cbaa5ef
--- /dev/null
@@ -0,0 +1,140 @@
+
+/*
+ * Copyright (c) 2008, the olsr.org team
+ * 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 the UniK olsr daemon 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.
+ *
+ */
+
+#include "olsrd_plugin.h"
+#include "lq_plugin_etx_float.h"
+#include "olsr.h"
+#include "defs.h"
+
+#include "../../../src/olsrd_plugin.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_PRINTF(1, "%s float %f\n", "Got", *(float *)data);
+  } else {
+    OLSR_PRINTF(0, "%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) {
+    fprintf(stderr, "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 */
+  printf("%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
new file mode 100644 (file)
index 0000000..a34d589
--- /dev/null
@@ -0,0 +1,54 @@
+
+/*
+ * Copyright (c) 2008, the olsr.org team
+ * 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 the UniK olsr daemon 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.
+ *
+ */
+
+/*
+ * 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:
+ */
diff --git a/lib/lq_etx_float/version-script.txt b/lib/lq_etx_float/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:
+    *;
+};
diff --git a/lib/lq_etx_fpm/Makefile b/lib/lq_etx_fpm/Makefile
new file mode 100644 (file)
index 0000000..a2ca0fb
--- /dev/null
@@ -0,0 +1,56 @@
+# The olsr.org Optimized Link-State Routing daemon(olsrd)
+# Copyright (c) 2004, Andreas Tonnesen(andreto@olsr.org)
+# 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_lq_etx_fpm
+PLUGIN_VER =   0.1
+
+TOPDIR = ../..
+include $(TOPDIR)/Makefile.inc
+
+default_target: $(PLUGIN_FULLNAME)
+
+$(PLUGIN_FULLNAME): $(OBJS) version-script.txt
+               $(CC) $(LDFLAGS) -o $(PLUGIN_FULLNAME) $(OBJS) $(LIBS)
+
+install:       $(PLUGIN_FULLNAME)
+               $(STRIP) $(PLUGIN_FULLNAME)
+               $(INSTALL_LIB)
+
+clean:
+               rm -f $(OBJS) $(SRCS:%.c=%.d) $(PLUGIN_FULLNAME)
diff --git a/lib/lq_etx_fpm/README_LQ_ETX_FPM b/lib/lq_etx_fpm/README_LQ_ETX_FPM
new file mode 100644 (file)
index 0000000..f0daac1
--- /dev/null
@@ -0,0 +1,29 @@
+---------------------------------------------------------------------
+LQ_ETX_FPM PLUGIN FOR OLSRD
+by Henning Rogge and others
+---------------------------------------------------------------------
+
+This is a plugin which realizes an LQ_HELLO message loss based LQ
+measurement. Load this plugin to overwrite the compiled-in default
+algorithm. This version uses Fixed Point (integer) Math
+
+---------------------------------------------------------------------
+PLUGIN PARAMETERS (PlParam)
+---------------------------------------------------------------------
+
+PlParam "LinkQualityAging" "0.01-1.0"
+       Determines adaption speed of the algorithm
+
+---------------------------------------------------------------------
+SAMPLE CONFIG
+---------------------------------------------------------------------
+
+add in /etc/olsrd.conf:
+
+LoadPlugin "olsrd_lq_etx_fpm.so.0.1"
+{
+       PlParam "LinkQualityAging" "0.1"
+}
+
+---------------------------------------------------------------------
+EOF
similarity index 99%
rename from src/lq_plugin_etx_fpm.c
rename to lib/lq_etx_fpm/src/lq_plugin_etx_fpm.c
index bc46ee1..3bc7dd5 100644 (file)
@@ -130,7 +130,7 @@ static uint32_t aging_factor_new, aging_factor_old;
 static uint32_t aging_quickstart_new, aging_quickstart_old;
 
 static void lq_etxfpm_initialize(void) {
-  aging_factor_new = (uint32_t)(olsr_cnf->lq_aging * LQ_FPM_INTERNAL_MULTIPLIER);
+  aging_factor_new = (uint32_t)(lq_aging * LQ_FPM_INTERNAL_MULTIPLIER);
   aging_factor_old = LQ_FPM_INTERNAL_MULTIPLIER - aging_factor_new;
 
   aging_quickstart_new = (uint32_t)(LQ_QUICKSTART_AGING * LQ_FPM_INTERNAL_MULTIPLIER);
similarity index 97%
rename from src/lq_plugin_etx_fpm.h
rename to lib/lq_etx_fpm/src/lq_plugin_etx_fpm.h
index c04ed25..3e39ec9 100644 (file)
@@ -74,6 +74,8 @@ struct lq_etxfpm_link_entry {
 
 extern struct lq_handler lq_etxfpm_handler;
 
+extern float lq_aging;                 /* Plugin PlParam */
+
 #endif /*LQ_PLUGIN_ETX_FPM_H_*/
 
 /*
diff --git a/lib/lq_etx_fpm/src/olsrd_plugin.c b/lib/lq_etx_fpm/src/olsrd_plugin.c
new file mode 100644 (file)
index 0000000..d48e666
--- /dev/null
@@ -0,0 +1,140 @@
+
+/*
+ * Copyright (c) 2008, the olsr.org team
+ * 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 the UniK olsr daemon 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.
+ *
+ */
+
+#include "olsrd_plugin.h"
+#include "lq_plugin_etx_fpm.h"
+#include "olsr.h"
+#include "defs.h"
+
+#include "../../../src/olsrd_plugin.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_PRINTF(1, "%s float %f\n", "Got", *(float *)data);
+  } else {
+    OLSR_PRINTF(0, "%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) {
+    fprintf(stderr, "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 */
+  printf("%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
new file mode 100644 (file)
index 0000000..a34d589
--- /dev/null
@@ -0,0 +1,54 @@
+
+/*
+ * Copyright (c) 2008, the olsr.org team
+ * 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 the UniK olsr daemon 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.
+ *
+ */
+
+/*
+ * 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:
+ */
diff --git a/lib/lq_etx_fpm/version-script.txt b/lib/lq_etx_fpm/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:
+    *;
+};
diff --git a/lib/lq_rfc/Makefile b/lib/lq_rfc/Makefile
new file mode 100644 (file)
index 0000000..8f65b2a
--- /dev/null
@@ -0,0 +1,56 @@
+# The olsr.org Optimized Link-State Routing daemon(olsrd)
+# Copyright (c) 2004, Andreas Tonnesen(andreto@olsr.org)
+# 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_lq_rfc
+PLUGIN_VER =   0.1
+
+TOPDIR = ../..
+include $(TOPDIR)/Makefile.inc
+
+default_target: $(PLUGIN_FULLNAME)
+
+$(PLUGIN_FULLNAME): $(OBJS) version-script.txt
+               $(CC) $(LDFLAGS) -o $(PLUGIN_FULLNAME) $(OBJS) $(LIBS)
+
+install:       $(PLUGIN_FULLNAME)
+               $(STRIP) $(PLUGIN_FULLNAME)
+               $(INSTALL_LIB)
+
+clean:
+               rm -f $(OBJS) $(SRCS:%.c=%.d) $(PLUGIN_FULLNAME)
diff --git a/lib/lq_rfc/README_LQ_RFC b/lib/lq_rfc/README_LQ_RFC
new file mode 100644 (file)
index 0000000..daa4774
--- /dev/null
@@ -0,0 +1,48 @@
+---------------------------------------------------------------------
+LQ_RFC PLUGIN FOR OLSRD
+by Henning Rogge and others
+---------------------------------------------------------------------
+
+This is a plugin which realizes an LQ_HELLO message loss based LQ
+measurement. Load this plugin to overwrite the compiled-in default
+algorithm.
+
+---------------------------------------------------------------------
+PLUGIN PARAMETERS (PlParam)
+---------------------------------------------------------------------
+
+PlParam "UseHysteresis" "no"
+       If set to yes hysteresis will be used as explained in section 14 of RFC3626.
+       Yes or no. Determines if hysterisis is used. Defaults to "no".
+
+PlParam "HystScaling" "0.5"
+       Sets the scaling value used by the hysteresis algorithm. This must be a 
+       positive floating point value smaller than 1.0. Consult RFC3626 for details. 
+       From 0.01 to 0.99. Defaults to 0.5.
+
+PlParam "HystThrHigh" "0.8"
+       This option sets the upper threshold for accepting a link in hysteresis
+       calculation. The value must be higher than the one set as the lower threshold.
+       From 0.0 to 1.0 and Low < High. Defaults to 0.8
+
+PlParam "HystThrLow" "0.3"
+       This option sets the lower threshold for setting a link to asymmetric using
+       hysteresis. The value must be lower than the one set as the upper threshold. 
+       From 0.0 to 1.0 and Low < High. Defaults to 0.3
+
+---------------------------------------------------------------------
+SAMPLE CONFIG
+---------------------------------------------------------------------
+
+add in /etc/olsrd.conf:
+
+LoadPlugin "olsrd_lq_rfc.so.0.1"
+{
+       PlParam "UseHysteresis" "no"
+       PlParam "HystScaling" "0.5"
+       PlParam "HystThrHigh" "0.8"
+       PlParam "HystThrLow" "0.3"
+}
+
+---------------------------------------------------------------------
+EOF
similarity index 84%
rename from src/lq_plugin_rfc.h
rename to lib/lq_rfc/src/lq_plugin_rfc.h
index 72f8b6c..76dd433 100644 (file)
 
 extern struct lq_handler lq_rfc_handler;
 
+/*
+ * Link Hysteresis Constants
+ */
+
+#define HYST_THRESHOLD_HIGH   0.8
+#define HYST_THRESHOLD_LOW    0.3
+#define HYST_SCALING          0.5
+
+extern bool use_hysteresis;            /* Plugin PlParam */
+extern float scaling;                  /* Plugin PlParam */
+extern float thr_high;                 /* Plugin PlParam */
+extern float thr_low;                  /* Plugin PlParam */
+
 #endif /*LQ_PLUGIN_RFC_H_*/
 
 /*
diff --git a/lib/lq_rfc/src/olsrd_plugin.c b/lib/lq_rfc/src/olsrd_plugin.c
new file mode 100644 (file)
index 0000000..ea4a1c2
--- /dev/null
@@ -0,0 +1,141 @@
+
+/*
+ * Copyright (c) 2008, the olsr.org team
+ * 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 the UniK olsr daemon 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.
+ *
+ */
+
+#include "olsrd_plugin.h"
+#include "plugin_util.h"
+#include "lq_plugin_rfc.h"
+#include "olsr.h"
+#include "defs.h"
+
+#include "../../../src/olsrd_plugin.h"
+
+#include <stdio.h>
+#include <string.h>
+
+#define PLUGIN_NAME    "OLSRD lq_etx_rfc 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_PRINTF(1, "%s float %f\n", "Got", *(float *)data);
+  } else {
+    OLSR_PRINTF(0, "%s float %s\n", "Ignored", value);
+  }
+  return 0;
+}
+
+bool use_hysteresis = DEF_USE_HYST;
+float scaling = HYST_SCALING;
+float thr_high = HYST_THRESHOLD_HIGH;
+float thr_low = HYST_THRESHOLD_LOW;
+
+/**
+ * Register parameters from config file
+ * Called for all plugin parameters
+ */
+static const struct olsrd_plugin_parameters plugin_parameters[] = {
+  {.name = "UseHysteresis",.set_plugin_parameter = &set_plugin_boolean,.data = &use_hysteresis},
+  {.name = "HystScaling",.set_plugin_parameter = &set_plugin_float,.data = &scaling},
+  {.name = "HystThrHigh",.set_plugin_parameter = &set_plugin_float,.data = &thr_high},
+  {.name = "HystThrLow",.set_plugin_parameter = &set_plugin_float,.data = &thr_low},
+};
+
+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)
+{
+  active_lq_handler = &lq_rfc_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 */
+  printf("%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_rfc/src/olsrd_plugin.h b/lib/lq_rfc/src/olsrd_plugin.h
new file mode 100644 (file)
index 0000000..a34d589
--- /dev/null
@@ -0,0 +1,54 @@
+
+/*
+ * Copyright (c) 2008, the olsr.org team
+ * 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 the UniK olsr daemon 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.
+ *
+ */
+
+/*
+ * 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:
+ */
diff --git a/lib/lq_rfc/version-script.txt b/lib/lq_rfc/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:
+    *;
+};
index 1b5ee97..b36ff7d 100644 (file)
@@ -117,7 +117,7 @@ void signal_link_changes(bool);   /* XXX ugly */
 
 struct link_entry *EXPORT(get_best_link_to_neighbor)(const union olsr_ip_addr *);
 
-struct link_entry *lookup_link_entry(const union olsr_ip_addr *,
+struct link_entry *EXPORT(lookup_link_entry)(const union olsr_ip_addr *,
                                     const union olsr_ip_addr *remote_main,
                                     const struct interface *);
 
index afaff75..4a0052b 100644 (file)
 #include "common/avl.h"
 #include "common/string.h"
 
-#include "lq_plugin_etx_float.h"
-#include "lq_plugin_etx_fpm.h"
 #include "lq_plugin_etx_ff.h"
-#include "lq_plugin_rfc.h"
 
-static  struct avl_tree lq_handler_tree;
 struct lq_handler *active_lq_handler = NULL;
 
 static struct olsr_cookie_info *tc_mpr_addr_mem_cookie = NULL;
@@ -63,98 +59,36 @@ static struct olsr_cookie_info *tc_edge_mem_cookie = NULL;
 static struct olsr_cookie_info *lq_hello_neighbor_mem_cookie = NULL;
 static struct olsr_cookie_info *link_entry_mem_cookie = NULL;
 
-static int
-avl_strcasecmp(const void *str1, const void *str2)
-{
-  return strcasecmp(str1, str2);
-}
-
-
-void
-init_lq_handler_tree(void)
-{
-  avl_init(&lq_handler_tree, &avl_strcasecmp);
-  register_lq_handler(&lq_etxfloat_handler, LQ_ALGORITHM_ETX_FLOAT_NAME);
-  register_lq_handler(&lq_etxfpm_handler, LQ_ALGORITHM_ETX_FPM_NAME);
-  register_lq_handler(&lq_etxff_handler, LQ_ALGORITHM_ETX_FF_NAME);
-  register_lq_handler(&lq_rfc_handler, LQ_ALGORITHM_RFC_NAME);
-}
-
-/*
- * set_lq_handler
- *
- * this function is used by routing metric plugins to activate their link
- * quality handler
- *
- * The name parameter is marked as "unused" to squelch a compiler warning if debug
- * output is not active
- *
- * @param pointer to lq_handler structure
- * @param name of the link quality handler for debug output
- */
 void
-register_lq_handler(struct lq_handler *handler, const char *name)
+init_lq_handler(void)
 {
-  struct lq_handler_node *node;
-  size_t name_size = sizeof(*node) + strlen(name) + 1;
-
-  node = olsr_malloc(name_size, "olsr lq handler");
-
-  strscpy(node->name, name, name_size);
-  node->node.key = node->name;
-  node->handler = handler;
-
-  avl_insert(&lq_handler_tree, &node->node, false);
-}
-
-void
-activate_lq_handler(void)
-{
-  const char *default_lq_algo = LQ_ALGORITHM_ETX_FPM_NAME;
-  struct lq_handler_node *node = NULL;
-
-  if (olsr_cnf->lq_algorithm) {
-    node = (struct lq_handler_node *) avl_find(&lq_handler_tree, olsr_cnf->lq_algorithm);
-    if (node == NULL) {
-      OLSR_PRINTF(1, "Error, unknown lq_handler '%s'\n", olsr_cnf->lq_algorithm);
-      olsr_exit("Cannot start without lq algorithm", 1);
-    }
-    OLSR_PRINTF(1, "Using '%s' algorithm for lq calculation.\n", olsr_cnf->lq_algorithm);
-  }
-  else {
-    node = (struct lq_handler_node *) avl_find(&lq_handler_tree, default_lq_algo);
-    OLSR_PRINTF(1, "Using default '%s' algorithm for lq calculation.\n", default_lq_algo);
-    if (node == NULL) {
-      OLSR_PRINTF(1, "Error, cannot find default algorithmus '%s'\n", default_lq_algo);
-      olsr_exit("Cannot start without lq algorithm", 1);
-    }
+  if (NULL == active_lq_handler) {
+    /* No LQ plugin loaded, use build in default */
+    active_lq_handler = &lq_etxff_handler;
   }
-
+  
   tc_edge_mem_cookie = olsr_alloc_cookie("tc_edge", OLSR_COOKIE_TYPE_MEMORY);
-  olsr_cookie_set_memory_size(tc_edge_mem_cookie, node->handler->size_tc_edge);
+  olsr_cookie_set_memory_size(tc_edge_mem_cookie, active_lq_handler->size_tc_edge);
 
   tc_mpr_addr_mem_cookie = olsr_alloc_cookie("tc_mpr_addr", OLSR_COOKIE_TYPE_MEMORY);
-  olsr_cookie_set_memory_size(tc_mpr_addr_mem_cookie, node->handler->size_tc_mpr_addr);
+  olsr_cookie_set_memory_size(tc_mpr_addr_mem_cookie, active_lq_handler->size_tc_mpr_addr);
 
   lq_hello_neighbor_mem_cookie = olsr_alloc_cookie("lq_hello_neighbor", OLSR_COOKIE_TYPE_MEMORY);
-  olsr_cookie_set_memory_size(lq_hello_neighbor_mem_cookie, node->handler->size_lq_hello_neighbor);
+  olsr_cookie_set_memory_size(lq_hello_neighbor_mem_cookie, active_lq_handler->size_lq_hello_neighbor);
 
   link_entry_mem_cookie = olsr_alloc_cookie("link_entry", OLSR_COOKIE_TYPE_MEMORY);
-  olsr_cookie_set_memory_size(link_entry_mem_cookie, node->handler->size_link_entry);
+  olsr_cookie_set_memory_size(link_entry_mem_cookie, active_lq_handler->size_link_entry);
 
-  active_lq_handler = node->handler;
   active_lq_handler->initialize();
 }
 
 void
-deactivate_lq_handler(void)
+deinit_lq_handler(void)
 {
-  struct lq_handler_node *handler;
-  active_lq_handler->deinitialize();
-  OLSR_FOR_ALL_LQ_HANDLERS(handler) {
-    avl_delete(&lq_handler_tree, &handler->node);
-    free(handler);
-  } OLSR_FOR_ALL_LQ_HANDLERS_END(handler);
+  if (NULL != active_lq_handler) {
+    active_lq_handler->deinitialize();
+    active_lq_handler = NULL;
+  }
 }
 
 /*
@@ -417,7 +351,7 @@ olsr_copylq_link_entry_2_tc_edge_entry(struct tc_edge_entry *target,
 }
 
 /*
- * olsr_malloc_tc_mpr_addr
+ * olsr_malloc_tc_edge_entry
  *
  * this function allocates memory for an tc_mpr_addr inclusive
  * linkquality data.
index 7e33f77..e0498ee 100644 (file)
@@ -103,28 +103,8 @@ struct lq_handler {
   uint8_t messageid_tc;
 };
 
-struct lq_handler_node {
-  struct avl_node node;
-  struct lq_handler *handler;
-  char name[0];
-};
-
-AVLNODE2STRUCT(lq_handler_tree2lq_handler_node, struct lq_handler_node, node);
-
-#define OLSR_FOR_ALL_LQ_HANDLERS(lq) \
-{ \
-  struct avl_node *lq_tree_node, *next_lq_tree_node; \
-  for (lq_tree_node = avl_walk_first(&lq_handler_tree); \
-    lq_tree_node; lq_tree_node = next_lq_tree_node) { \
-    next_lq_tree_node = avl_walk_next(lq_tree_node); \
-    lq = lq_handler_tree2lq_handler_node(lq_tree_node);
-#define OLSR_FOR_ALL_LQ_HANDLERS_END(lq) }}
-
-void init_lq_handler_tree(void);
-
-void activate_lq_handler(void);
-void register_lq_handler(struct lq_handler *, const char *);
-void deactivate_lq_handler(void);
+void init_lq_handler(void);
+void deinit_lq_handler(void);
 
 olsr_linkcost olsr_calc_tc_cost(struct tc_edge_entry *);
 bool olsr_is_relevant_costchange(olsr_linkcost c1, olsr_linkcost c2);
@@ -166,7 +146,7 @@ uint8_t olsr_get_Hello_MessageId(void);
 uint8_t olsr_get_TC_MessageId(void);
 
 /* Externals. */
-extern struct lq_handler *active_lq_handler;
+extern struct lq_handler *EXPORT(active_lq_handler);
 
 
 #endif /*LQPLUGIN_H_ */
index d75027e..6b9708b 100644 (file)
@@ -319,7 +319,7 @@ main(int argc, char *argv[])
   olsr_load_plugins();
 
   /* activate LQ algorithm */
-  activate_lq_handler();
+  init_lq_handler();
 
   OLSR_PRINTF(1, "Main address: %s\n\n", olsr_ip_to_string(&buf, &olsr_cnf->main_addr));
 
@@ -474,7 +474,7 @@ olsr_shutdown(void)
   }
 
   /* Shut down LQ plugin */
-  deactivate_lq_handler();
+  deinit_lq_handler();
 
   /* Closing plug-ins */
   olsr_close_plugins();
index f5eba1e..6522d4e 100644 (file)
@@ -243,9 +243,6 @@ olsr_init_tables(void)
   changes_neighborhood = false;
   changes_hna = false;
 
-  /* Initialize lq plugin set */
-  init_lq_handler_tree();
-
   /* Initialize link set */
   olsr_init_link_set();
 
index 7a2072f..eff55b2 100644 (file)
@@ -767,23 +767,6 @@ parse_cfg_option(const int optint, const char *argstr, const int line, struct ol
     }
     PARSER_DEBUG_PRINTF("IpVersion: %d\n", cfg->ip_version);
     break;
-  case 'a':                    /* LinkQualityAging (f) */
-    sscanf(argstr, "%f", &cfg->lq_aging);
-    PARSER_DEBUG_PRINTF("Link quality aging factor %f\n", cfg->lq_aging);
-    break;
-  case 'L':                    /* LinkQualityAlgorithm (str) */
-    {
-      char **tok;
-      if (NULL != (tok = parse_tok(argstr, NULL))) {
-        cfg->lq_algorithm = olsr_strdup(*tok);
-        parse_tok_free(tok);
-      } else {
-        fprintf(stderr, "Error in %s\n", argstr);
-        exit(EXIT_FAILURE);
-      }
-      PARSER_DEBUG_PRINTF("LQ Algorithm: %s\n", cfg->lq_algorithm);
-    }
-    break;
   case 'J':                    /* LinkQualityDijkstraLimit (i,f) */
     {
       int arg = -1;
@@ -962,8 +945,6 @@ olsr_parse_cfg(int argc, char *argv[], const char *conf_file_name)
     {"Interface",                required_argument, 0, 'I'}, /* (if1 if2 {ifbody}) */
     {"IpcConnect",               required_argument, 0, 'Q'}, /* (Host,Net,MaxConnections) */
     {"IpVersion",                required_argument, 0, 'V'}, /* (i) */
-    {"LinkQualityAging",         required_argument, 0, 'a'}, /* (f) */
-    {"LinkQualityAlgorithm",     required_argument, 0, 'L'}, /* (str) */
     {"LinkQualityDijkstraLimit", required_argument, 0, 'J'}, /* (i,f) */
     {"LinkQualityFishEye",       required_argument, 0, 'E'}, /* (i) */
     {"LoadPlugin",               required_argument, 0, 'p'}, /* (soname {PlParams}) */
@@ -1138,12 +1119,6 @@ olsr_sanity_check_cfg(struct olsr_config *cfg)
     return -1;
   }
 
-  /* Link quality window size */
-  if (cfg->lq_aging < MIN_LQ_AGING || cfg->lq_aging > MAX_LQ_AGING) {
-    fprintf(stderr, "LQ aging factor %f is not allowed\n", cfg->lq_aging);
-    return -1;
-  }
-
   /* NAT threshold value */
   if (cfg->lq_nat_thresh < 0.1 || cfg->lq_nat_thresh > 1.0) {
     fprintf(stderr, "NAT threshold %f is not allowed\n", cfg->lq_nat_thresh);
@@ -1171,10 +1146,6 @@ olsr_sanity_check_cfg(struct olsr_config *cfg)
 
     /* HELLO interval */
 
-    if (io->hello_params.validity_time < 0.0) {
-      io->hello_params.validity_time = (int)(REFRESH_INTERVAL / cfg->lq_aging);
-    }
-
     if (io->hello_params.emission_interval < conv_pollrate_to_secs(cfg->pollrate) ||
         io->hello_params.emission_interval > io->hello_params.validity_time) {
       fprintf(stderr, "Bad HELLO parameters! (em: %0.2f, vt: %0.2f)\n", io->hello_params.emission_interval,
@@ -1277,8 +1248,6 @@ olsr_free_cfg(struct olsr_config *cfg)
     free(ped);
   }
 
-  if (cfg->lq_algorithm)
-    free(cfg->lq_algorithm);
   free(cfg);
 
   return;
@@ -1320,8 +1289,6 @@ olsr_get_default_cfg(void)
   cfg->lq_fish = DEF_LQ_FISH;
   cfg->lq_dlimit = DEF_LQ_DIJK_LIMIT;
   cfg->lq_dinter = DEF_LQ_DIJK_INTER;
-  cfg->lq_aging = DEF_LQ_AGING;
-  cfg->lq_algorithm = NULL;
   cfg->lq_nat_thresh = DEF_LQ_NAT_THRESH;
   cfg->clear_screen = DEF_CLEAR_SCREEN;
 
index 1bb8ecf..9ef7101 100644 (file)
@@ -201,8 +201,6 @@ struct olsr_config {
   uint8_t mpr_coverage;
   uint8_t lq_fish;
   float lq_dinter;
-  float lq_aging;
-  char *lq_algorithm;
   uint8_t lq_dlimit;
   uint8_t willingness;
 
index 0ad18fd..6bf1852 100644 (file)
@@ -99,10 +99,6 @@ olsr_print_cnf(const struct olsr_config *cnf)
 
   printf("LQ Dijkstra limit: %d, %0.2f\n", cnf->lq_dlimit, cnf->lq_dinter);
 
-  printf("LQ aging factor  : %f\n", cnf->lq_aging);
-
-  printf("LQ algorithm name: %s\n", cnf->lq_algorithm ? cnf->lq_algorithm : "default");
-
   printf("NAT threshold    : %f\n", cnf->lq_nat_thresh);
 
   printf("Clear screen     : %s\n", cnf->clear_screen ? "yes" : "no");
@@ -304,15 +300,6 @@ olsr_write_cnf_buf(struct autobuf *abuf, const struct olsr_config *cnf, bool wri
   abuf_appendf(abuf, "# Fish Eye algorithm\n"
                "# 0 = do not use fish eye\n" "# 1 = use fish eye\n" "LinkQualityFishEye\t%d\n\n", cnf->lq_fish);
 
-  if (cnf->lq_algorithm != NULL) {
-    abuf_appendf(abuf, "# Link quality algorithm (if LinkQualityLevel > 0)\n"
-                 "# etx_fpm (hello loss, fixed point math)\n"
-                 "# etx_float (hello loss, floating point)\n"
-                 "# etx_ff (packet loss for freifunk compat)\n" "LinkQualityAlgorithm\t\"%s\"\n\n", cnf->lq_algorithm);
-  }
-
-  abuf_appendf(abuf, "# Link quality aging factor\n" "LinkQualityAging\t%f\n\n", cnf->lq_aging);
-
   abuf_appendf(abuf, "# NAT threshold\n" "NatThreshold\t%f\n\n", cnf->lq_nat_thresh);
 
   abuf_appendf(abuf, "# Clear screen when printing debug output?\n" "ClearScreen\t%s\n\n", cnf->clear_screen ? "yes" : "no");
index a042123..d14912d 100644 (file)
@@ -100,10 +100,10 @@ int
 EXPORT(olsr_preprocessor_remove_function)(preprocessor_function);
 
 void
-olsr_packetparser_add_function(packetparser_function *function);
+EXPORT(olsr_packetparser_add_function)(packetparser_function *function);
 
 int
-olsr_packetparser_remove_function(packetparser_function *function);
+EXPORT(olsr_packetparser_remove_function)(packetparser_function *function);
 
 const unsigned char *
 olsr_parse_msg_hdr(const union olsr_message *, struct olsrmsg_hdr *);