olsrd: update to 2023-06-12
authorNick Hainke <vincent@systemli.org>
Mon, 12 Jun 2023 10:42:42 +0000 (12:42 +0200)
committerNick Hainke <vincent@systemli.org>
Tue, 13 Jun 2023 13:20:23 +0000 (15:20 +0200)
Update to latest version.

Remove upstreamed patch:
- 100-rename-avl-to-olsrd_avl.patch

Signed-off-by: Nick Hainke <vincent@systemli.org>
olsrd/Makefile
olsrd/patches/100-rename-avl-to-olsrd_avl.patch [deleted file]

index 46b1202c5516beab6c89f1370e802531cc9a25d7..167cc5a894dd8a59bdf6380b9a03190bed7dd3ce 100644 (file)
@@ -6,13 +6,13 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=olsrd
-PKG_SOURCE_DATE:=2022-03-18
-PKG_RELEASE:=5
+PKG_SOURCE_DATE:=2023-06-12
+PKG_RELEASE:=1
 
 PKG_SOURCE_PROTO:=git
 PKG_SOURCE_URL:=https://github.com/OLSR/olsrd.git
-PKG_SOURCE_VERSION:=1e771b4d31e36f9ffd0a04c3f8f83abb803ec309
-PKG_MIRROR_HASH:=2b238b179bc873902a0d094c0d3e43e0a373710763bdca4b6fec5eed431d4a8d
+PKG_SOURCE_VERSION:=a9b3f1ac6e73a39b5bd97d1e66b1e039998314f5
+PKG_MIRROR_HASH:=b7e1cd4b43a4d8607d6761267f23d28fb09c577d746c22ca60d2ed2fc19b1ea8
 
 PKG_MAINTAINER:=Nick Hainke <vincent@systemli.org>
 PKG_BUILD_PARALLEL:=0
diff --git a/olsrd/patches/100-rename-avl-to-olsrd_avl.patch b/olsrd/patches/100-rename-avl-to-olsrd_avl.patch
deleted file mode 100644 (file)
index c1d9743..0000000
+++ /dev/null
@@ -1,3377 +0,0 @@
-From 4b91b102eb6edb63472728dd3545e3dff800a5a0 Mon Sep 17 00:00:00 2001
-From: Nick Hainke <vincent@systemli.org>
-Date: Sat, 15 Jan 2022 16:13:24 +0100
-Subject: [PATCH] rename avl to olsrd_avl
-
----
- lib/nameservice/src/nameservice.c       |   4 +-
- lib/netjson/src/olsrd_netjson.c         |  12 +-
- lib/netjson/src/olsrd_netjson_helpers.c |  74 +++++-----
- lib/netjson/src/olsrd_netjson_helpers.h |  18 +--
- src/common/{avl.c => olsrd_avl.c}       | 184 ++++++++++++------------
- src/common/{avl.h => olsrd_avl.h}       |  90 ++++++------
- src/duplicate_set.c                     |  18 +--
- src/duplicate_set.h                     |  12 +-
- src/gateway.c                           |  18 +--
- src/gateway.h                           |  16 +--
- src/kernel_tunnel.h                     |   4 +-
- src/linux/kernel_tunnel.c               |  12 +-
- src/lq_packet.c                         |   6 +-
- src/lq_plugin.c                         |  14 +-
- src/lq_plugin.h                         |  14 +-
- src/olsr.c                              |  12 +-
- src/olsr_spf.c                          |  36 ++---
- src/process_routes.c                    |  22 +--
- src/routing_table.c                     |  56 ++++----
- src/routing_table.h                     |  36 ++---
- src/scheduler.c                         |  30 ++--
- src/tc_set.c                            |  30 ++--
- src/tc_set.h                            |  38 ++---
- 24 files changed, 390 insertions(+), 390 deletions(-)
- rename src/common/{avl.c => olsrd_avl.c} (67%)
- rename src/common/{avl.h => olsrd_avl.h} (58%)
---- a/lib/nameservice/src/nameservice.c
-+++ b/lib/nameservice/src/nameservice.c
-@@ -1621,13 +1621,13 @@ void
- lookup_defhna_latlon(union olsr_ip_addr *ip)
- {
-   struct rt_entry *rt;
--  struct avl_node *rt_tree_node;
-+  struct olsrd_avl_node *rt_tree_node;
-   struct olsr_ip_prefix prefix;
-   memset(ip, 0, sizeof(*ip));
-   memset(&prefix, 0, sizeof(prefix));
--  if (NULL != (rt_tree_node = avl_find(&routingtree, &prefix))) {
-+  if (NULL != (rt_tree_node = olsrd_avl_find(&routingtree, &prefix))) {
-     rt = rt_tree2rt(rt_tree_node);
-     *ip = rt->rt_best->rtp_nexthop.gateway;
-   }
---- a/lib/netjson/src/olsrd_netjson.c
-+++ b/lib/netjson/src/olsrd_netjson.c
-@@ -52,7 +52,7 @@
- #include "info/info_types.h"
- #include "info/http_headers.h"
- #include "info/json_helpers.h"
--#include "common/avl.h"
-+#include "common/olsrd_avl.h"
- #include "olsr.h"
- #include "builddata.h"
- #include "routing_table.h"
-@@ -161,7 +161,7 @@ void ipc_print_network_routes(struct aut
- }
- void ipc_print_network_graph(struct autobuf *abuf) {
--  struct avl_tree nodes;
-+  struct olsrd_avl_tree nodes;
-   struct mid_entry mid_self;
-   struct node_entry * node_self;
-   struct tc_entry * tc;
-@@ -169,7 +169,7 @@ void ipc_print_network_graph(struct auto
-   struct neighbor_entry * neighbor;
-   int idx;
--  avl_init(&nodes, (olsr_cnf->ip_version == AF_INET) ? avl_comp_ipv4 : avl_comp_ipv6);
-+  olsrd_avl_init(&nodes, (olsr_cnf->ip_version == AF_INET) ? olsrd_avl_comp_ipv4 : olsrd_avl_comp_ipv6);
-   /* mandatory */
-   abuf_json_string(&json_session, abuf, "type", "NetworkGraph");
-@@ -226,8 +226,8 @@ void ipc_print_network_graph(struct auto
-   abuf_json_mark_object(&json_session, true, true, abuf, "nodes");
-   while (nodes.count > 0) {
--    struct avl_node *node = avl_walk_first(&nodes);
--    struct node_entry *node_entry = avlnode2node(node);
-+    struct olsrd_avl_node *node = olsrd_avl_walk_first(&nodes);
-+    struct node_entry *node_entry = olsrd_avlnode2node(node);
-     if (!node_entry->isAlias) {
-       abuf_json_mark_array_entry(&json_session, true, abuf);
-@@ -265,7 +265,7 @@ void ipc_print_network_graph(struct auto
-       netjson_cleanup_mid_self(node_self);
-     }
--    avl_delete(&nodes, node);
-+    olsrd_avl_delete(&nodes, node);
-     free(node);
-   }
-   abuf_json_mark_object(&json_session, false, true, abuf, NULL);
---- a/lib/netjson/src/olsrd_netjson_helpers.c
-+++ b/lib/netjson/src/olsrd_netjson_helpers.c
-@@ -57,7 +57,7 @@ struct node_entry * netjson_constructMid
-   node_self = olsr_malloc(sizeof(struct node_entry), "netjson NetworkGraph node - MID - self");
-   memset(node_self, 0, sizeof(*node_self));
--  node_self->avl.key = &olsr_cnf->main_addr;
-+  node_self->olsrd_avl.key = &olsr_cnf->main_addr;
-   node_self->isAlias = false;
-   node_self->mid = mid;
-@@ -93,7 +93,7 @@ struct node_entry * netjson_constructMid
-       node_self_alias = olsr_malloc(sizeof(struct node_entry), "netjson NetworkGraph node - MID - self alias");
-       memset(node_self_alias, 0, sizeof(*node_self_alias));
--      node_self_alias->avl.key = addr;
-+      node_self_alias->olsrd_avl.key = addr;
-       node_self_alias->isAlias = true;
-       node_self_alias->mid = mid;
-@@ -112,7 +112,7 @@ struct node_entry * netjson_constructMid
- }
- void netjson_cleanup_mid_self(struct node_entry *node_entry) {
--  if (node_entry->avl.key != &olsr_cnf->main_addr) {
-+  if (node_entry->olsrd_avl.key != &olsr_cnf->main_addr) {
-     return;
-   }
-@@ -123,21 +123,21 @@ void netjson_cleanup_mid_self(struct nod
-   }
- }
--void netjson_midIntoNodesTree(struct avl_tree *nodes, struct mid_entry *mid) {
--  struct avl_node *avlnode;
-+void netjson_midIntoNodesTree(struct olsrd_avl_tree *nodes, struct mid_entry *mid) {
-+  struct olsrd_avl_node *olsrd_avlnode;
-   struct node_entry *node;
-   struct mid_address *alias;
--  avlnode = avl_find(nodes, &mid->main_addr);
--  if (!avlnode) {
-+  olsrd_avlnode = olsrd_avl_find(nodes, &mid->main_addr);
-+  if (!olsrd_avlnode) {
-     /* the IP address is not yet known */
-     node = olsr_malloc(sizeof(struct node_entry), "netjson NetworkGraph node - MID - main");
-     memset(node, 0, sizeof(*node));
--    node->avl.key = &mid->main_addr;
-+    node->olsrd_avl.key = &mid->main_addr;
-     node->isAlias = false;
-     node->mid = mid;
--    if (avl_insert(nodes, &node->avl, AVL_DUP_NO) == -1) {
-+    if (olsrd_avl_insert(nodes, &node->olsrd_avl, OLSRD_AVL_DUP_NO) == -1) {
-       /* duplicate */
-       free(node);
-     }
-@@ -145,16 +145,16 @@ void netjson_midIntoNodesTree(struct avl
-   alias = mid->aliases;
-   while (alias) {
--    avlnode = avl_find(nodes, &alias->alias);
--    if (!avlnode) {
-+    olsrd_avlnode = olsrd_avl_find(nodes, &alias->alias);
-+    if (!olsrd_avlnode) {
-       /* the IP address is not yet known */
-       node = olsr_malloc(sizeof(struct node_entry), "netjson NetworkGraph node - MID - alias");
-       memset(node, 0, sizeof(*node));
--      node->avl.key = &alias->alias;
-+      node->olsrd_avl.key = &alias->alias;
-       node->isAlias = true;
-       node->mid = mid;
--      if (avl_insert(nodes, &node->avl, AVL_DUP_NO) == -1) {
-+      if (olsrd_avl_insert(nodes, &node->olsrd_avl, OLSRD_AVL_DUP_NO) == -1) {
-         /* duplicate */
-         free(node);
-       }
-@@ -164,12 +164,12 @@ void netjson_midIntoNodesTree(struct avl
-   }
- }
--void netjson_tcIntoNodesTree(struct avl_tree *nodes, struct tc_entry *tc) {
--  struct avl_node *avlnode;
-+void netjson_tcIntoNodesTree(struct olsrd_avl_tree *nodes, struct tc_entry *tc) {
-+  struct olsrd_avl_node *olsrd_avlnode;
-   struct node_entry *node;
--  avlnode = avl_find(nodes, &tc->addr);
--  if (avlnode) {
-+  olsrd_avlnode = olsrd_avl_find(nodes, &tc->addr);
-+  if (olsrd_avlnode) {
-     /* the IP address is already known */
-     return;
-   }
-@@ -178,21 +178,21 @@ void netjson_tcIntoNodesTree(struct avl_
-   node = olsr_malloc(sizeof(struct node_entry), "netjson NetworkGraph node - TC - main");
-   memset(node, 0, sizeof(*node));
--  node->avl.key = &tc->addr;
-+  node->olsrd_avl.key = &tc->addr;
-   node->isAlias = false;
-   node->tc = tc;
--  if (avl_insert(nodes, &node->avl, AVL_DUP_NO) == -1) {
-+  if (olsrd_avl_insert(nodes, &node->olsrd_avl, OLSRD_AVL_DUP_NO) == -1) {
-     /* duplicate */
-     free(node);
-   }
- }
--void netjson_tcEdgeIntoNodesTree(struct avl_tree *nodes, struct tc_edge_entry *tc_edge) {
--  struct avl_node *avlnode;
-+void netjson_tcEdgeIntoNodesTree(struct olsrd_avl_tree *nodes, struct tc_edge_entry *tc_edge) {
-+  struct olsrd_avl_node *olsrd_avlnode;
-   struct node_entry *node;
--  avlnode = avl_find(nodes, &tc_edge->T_dest_addr);
--  if (avlnode) {
-+  olsrd_avlnode = olsrd_avl_find(nodes, &tc_edge->T_dest_addr);
-+  if (olsrd_avlnode) {
-     /* the IP address is already known */
-     return;
-   }
-@@ -201,21 +201,21 @@ void netjson_tcEdgeIntoNodesTree(struct
-   node = olsr_malloc(sizeof(struct node_entry), "netjson NetworkGraph node - TC - main");
-   memset(node, 0, sizeof(*node));
--  node->avl.key = &tc_edge->T_dest_addr;
-+  node->olsrd_avl.key = &tc_edge->T_dest_addr;
-   node->isAlias = false;
-   node->tc_edge = tc_edge;
--  if (avl_insert(nodes, &node->avl, AVL_DUP_NO) == -1) {
-+  if (olsrd_avl_insert(nodes, &node->olsrd_avl, OLSRD_AVL_DUP_NO) == -1) {
-     /* duplicate */
-     free(node);
-   }
- }
--void netjson_linkIntoNodesTree(struct avl_tree *nodes, struct link_entry *link, union olsr_ip_addr *addr) {
--  struct avl_node *avlnode;
-+void netjson_linkIntoNodesTree(struct olsrd_avl_tree *nodes, struct link_entry *link, union olsr_ip_addr *addr) {
-+  struct olsrd_avl_node *olsrd_avlnode;
-   struct node_entry *node;
--  avlnode = avl_find(nodes, addr);
--  if (avlnode) {
-+  olsrd_avlnode = olsrd_avl_find(nodes, addr);
-+  if (olsrd_avlnode) {
-     /* the IP address is already known */
-     return;
-   }
-@@ -224,21 +224,21 @@ void netjson_linkIntoNodesTree(struct av
-   node = olsr_malloc(sizeof(struct node_entry), "netjson NetworkGraph node - link");
-   memset(node, 0, sizeof(*node));
--  node->avl.key = addr;
-+  node->olsrd_avl.key = addr;
-   node->isAlias = false;
-   node->link = link;
--  if (avl_insert(nodes, &node->avl, AVL_DUP_NO) == -1) {
-+  if (olsrd_avl_insert(nodes, &node->olsrd_avl, OLSRD_AVL_DUP_NO) == -1) {
-     /* duplicate */
-     free(node);
-   }
- }
--void netjson_neighborIntoNodesTree(struct avl_tree *nodes, struct neighbor_entry *neighbor) {
--  struct avl_node *avlnode;
-+void netjson_neighborIntoNodesTree(struct olsrd_avl_tree *nodes, struct neighbor_entry *neighbor) {
-+  struct olsrd_avl_node *olsrd_avlnode;
-   struct node_entry *node;
--  avlnode = avl_find(nodes, &neighbor->neighbor_main_addr);
--  if (avlnode) {
-+  olsrd_avlnode = olsrd_avl_find(nodes, &neighbor->neighbor_main_addr);
-+  if (olsrd_avlnode) {
-     /* the IP address is already known */
-     return;
-   }
-@@ -247,10 +247,10 @@ void netjson_neighborIntoNodesTree(struc
-   node = olsr_malloc(sizeof(struct node_entry), "netjson NetworkGraph node - neighbor");
-   memset(node, 0, sizeof(*node));
--  node->avl.key = &neighbor->neighbor_main_addr;
-+  node->olsrd_avl.key = &neighbor->neighbor_main_addr;
-   node->isAlias = false;
-   node->neighbor = neighbor;
--  if (avl_insert(nodes, &node->avl, AVL_DUP_NO) == -1) {
-+  if (olsrd_avl_insert(nodes, &node->olsrd_avl, OLSRD_AVL_DUP_NO) == -1) {
-     /* duplicate */
-     free(node);
-   }
---- a/lib/netjson/src/olsrd_netjson_helpers.h
-+++ b/lib/netjson/src/olsrd_netjson_helpers.h
-@@ -48,7 +48,7 @@
- #include <stdbool.h>
--#include "common/avl.h"
-+#include "common/olsrd_avl.h"
- #include "mid_set.h"
- #include "tc_set.h"
- #include "link_set.h"
-@@ -56,7 +56,7 @@
- #include "olsr_types.h"
- struct node_entry {
--  struct avl_node avl;
-+  struct olsrd_avl_node olsrd_avl;
-   bool isAlias;
-   struct mid_entry *mid;
-   struct tc_entry *tc;
-@@ -65,15 +65,15 @@ struct node_entry {
-   struct neighbor_entry *neighbor;
- };
--/* static INLINE struct node_entry * avlnode2node(struct avl_node *ptr) */
--AVLNODE2STRUCT(avlnode2node, struct node_entry, avl);
-+/* static INLINE struct node_entry * olsrd_avlnode2node(struct olsrd_avl_node *ptr) */
-+OLSRD_AVLNODE2STRUCT(olsrd_avlnode2node, struct node_entry, olsrd_avl);
- struct node_entry * netjson_constructMidSelf(struct mid_entry *mid);
- void netjson_cleanup_mid_self(struct node_entry *node_entry);
--void netjson_midIntoNodesTree(struct avl_tree *nodes, struct mid_entry *mid);
--void netjson_tcIntoNodesTree(struct avl_tree *nodes, struct tc_entry *tc);
--void netjson_tcEdgeIntoNodesTree(struct avl_tree *nodes, struct tc_edge_entry *tc_edge);
--void netjson_linkIntoNodesTree(struct avl_tree *nodes, struct link_entry *link, union olsr_ip_addr *addr);
--void netjson_neighborIntoNodesTree(struct avl_tree *nodes, struct neighbor_entry *neigh);
-+void netjson_midIntoNodesTree(struct olsrd_avl_tree *nodes, struct mid_entry *mid);
-+void netjson_tcIntoNodesTree(struct olsrd_avl_tree *nodes, struct tc_entry *tc);
-+void netjson_tcEdgeIntoNodesTree(struct olsrd_avl_tree *nodes, struct tc_edge_entry *tc_edge);
-+void netjson_linkIntoNodesTree(struct olsrd_avl_tree *nodes, struct link_entry *link, union olsr_ip_addr *addr);
-+void netjson_neighborIntoNodesTree(struct olsrd_avl_tree *nodes, struct neighbor_entry *neigh);
- #endif /* LIB_NETJSON_SRC_OLSRD_NETJSON_HELPERS_H_ */
---- a/src/common/avl.c
-+++ /dev/null
-@@ -1,664 +0,0 @@
--/*
-- * The olsr.org Optimized Link-State Routing daemon (olsrd)
-- *
-- * (c) by the OLSR project
-- *
-- * See our Git repository to find out who worked on this file
-- * and thus is a copyright holder on it.
-- *
-- * All rights reserved.
-- *
-- * Redistribution and use in source and binary forms, with or without
-- * modification, are permitted provided that the following conditions
-- * are met:
-- *
-- * * Redistributions of source code must retain the above copyright
-- *   notice, this list of conditions and the following disclaimer.
-- * * Redistributions in binary form must reproduce the above copyright
-- *   notice, this list of conditions and the following disclaimer in
-- *   the documentation and/or other materials provided with the
-- *   distribution.
-- * * Neither the name of olsr.org, olsrd nor the names of its
-- *   contributors may be used to endorse or promote products derived
-- *   from this software without specific prior written permission.
-- *
-- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-- * POSSIBILITY OF SUCH DAMAGE.
-- *
-- * Visit http://www.olsr.org for more information.
-- *
-- * If you find this software useful feel free to make a donation
-- * to the project. For more information see the website or contact
-- * the copyright holders.
-- *
-- */
--
--#include <stddef.h>
--#include <time.h>
--#include <string.h>
--
--#include "ipcalc.h"
--#include "common/avl.h"
--#include "net_olsr.h"
--
--/*
-- * default comparison pointers
-- * set to the respective compare function.
-- * if avl_comp_default is set to zero, a fast
-- * INLINE ipv4 comparison will be executed.
-- */
--avl_tree_comp avl_comp_default = NULL;
--avl_tree_comp avl_comp_prefix_default;
--
--int
--avl_comp_ipv4(const void *ip1, const void *ip2)
--{
--  return ip4cmp(ip1, ip2);
--}
--
--int
--avl_comp_ipv6(const void *ip1, const void *ip2)
--{
--  return ip6cmp(ip1, ip2);
--}
--
--int
--avl_comp_mac(const void *ip1, const void *ip2)
--{
--  return memcmp(ip1, ip2, 6);
--}
--
--void
--avl_init(struct avl_tree *tree, avl_tree_comp comp)
--{
--  tree->root = NULL;
--  tree->first = NULL;
--  tree->last = NULL;
--  tree->count = 0;
--
--  tree->comp = comp == avl_comp_ipv4 ? NULL : comp;
--}
--
--static struct avl_node *
--avl_find_rec_ipv4(struct avl_node *node, const void *key)
--{
--  if (*(const unsigned int *)key < *(const unsigned int *)node->key) {
--    if (node->left != NULL)
--      return avl_find_rec_ipv4(node->left, key);
--  }
--
--  else if (*(const unsigned int *)key > *(const unsigned int *)node->key) {
--    if (node->right != NULL)
--      return avl_find_rec_ipv4(node->right, key);
--  }
--
--  return node;
--}
--
--static struct avl_node *
--avl_find_rec(struct avl_node *node, const void *key, avl_tree_comp comp)
--{
--  int diff;
--
--  if (NULL == comp)
--    return avl_find_rec_ipv4(node, key);
--
--  diff = (*comp) (key, node->key);
--
--  if (diff < 0) {
--    if (node->left != NULL)
--      return avl_find_rec(node->left, key, comp);
--
--    return node;
--  }
--
--  if (diff > 0) {
--    if (node->right != NULL)
--      return avl_find_rec(node->right, key, comp);
--
--    return node;
--  }
--
--  return node;
--}
--
--struct avl_node *
--avl_find(struct avl_tree *tree, const void *key)
--{
--  struct avl_node *node;
--
--  if (tree->root == NULL)
--    return NULL;
--
--  node = avl_find_rec(tree->root, key, tree->comp);
--
--  if (NULL == tree->comp) {
--    if (0 != ip4cmp(node->key, key))
--      return NULL;
--  }
--
--  else {
--    if ((*tree->comp) (node->key, key) != 0)
--      return NULL;
--  }
--
--  return node;
--}
--
--static void
--avl_rotate_right(struct avl_tree *tree, struct avl_node *node)
--{
--  struct avl_node *left, *parent;
--
--  left = node->left;
--  parent = node->parent;
--
--  left->parent = parent;
--  node->parent = left;
--
--  if (parent == NULL)
--    tree->root = left;
--
--  else {
--    if (parent->left == node)
--      parent->left = left;
--
--    else
--      parent->right = left;
--  }
--
--  node->left = left->right;
--  left->right = node;
--
--  if (node->left != NULL)
--    node->left->parent = node;
--
--  node->balance += 1 - MIN(left->balance, 0);
--  left->balance += 1 + MAX(node->balance, 0);
--}
--
--static void
--avl_rotate_left(struct avl_tree *tree, struct avl_node *node)
--{
--  struct avl_node *right, *parent;
--
--  right = node->right;
--  parent = node->parent;
--
--  right->parent = parent;
--  node->parent = right;
--
--  if (parent == NULL)
--    tree->root = right;
--
--  else {
--    if (parent->left == node)
--      parent->left = right;
--
--    else
--      parent->right = right;
--  }
--
--  node->right = right->left;
--  right->left = node;
--
--  if (node->right != NULL)
--    node->right->parent = node;
--
--  node->balance -= 1 + MAX(right->balance, 0);
--  right->balance -= 1 - MIN(node->balance, 0);
--}
--
--static void
--post_insert(struct avl_tree *tree, struct avl_node *node)
--{
--  struct avl_node *parent = node->parent;
--
--  if (parent == NULL)
--    return;
--
--  if (node == parent->left) {
--    parent->balance--;
--
--    if (parent->balance == 0)
--      return;
--
--    if (parent->balance == -1) {
--      post_insert(tree, parent);
--      return;
--    }
--
--    if (node->balance == -1) {
--      avl_rotate_right(tree, parent);
--      return;
--    }
--
--    avl_rotate_left(tree, node);
--    avl_rotate_right(tree, node->parent->parent);
--    return;
--  }
--
--  parent->balance++;
--
--  if (parent->balance == 0)
--    return;
--
--  if (parent->balance == 1) {
--    post_insert(tree, parent);
--    return;
--  }
--
--  if (node->balance == 1) {
--    avl_rotate_left(tree, parent);
--    return;
--  }
--
--  avl_rotate_right(tree, node);
--  avl_rotate_left(tree, node->parent->parent);
--}
--
--static void
--avl_insert_before(struct avl_tree *tree, struct avl_node *pos_node, struct avl_node *node)
--{
--  if (pos_node->prev != NULL)
--    pos_node->prev->next = node;
--  else
--    tree->first = node;
--
--  node->prev = pos_node->prev;
--  node->next = pos_node;
--
--  pos_node->prev = node;
--
--  tree->count++;
--}
--
--static void
--avl_insert_after(struct avl_tree *tree, struct avl_node *pos_node, struct avl_node *node)
--{
--  if (pos_node->next != NULL)
--    pos_node->next->prev = node;
--  else
--    tree->last = node;
--
--  node->prev = pos_node;
--  node->next = pos_node->next;
--
--  pos_node->next = node;
--
--  tree->count++;
--}
--
--static void
--avl_remove(struct avl_tree *tree, struct avl_node *node)
--{
--  if (node->prev != NULL)
--    node->prev->next = node->next;
--  else
--    tree->first = node->next;
--
--  if (node->next != NULL)
--    node->next->prev = node->prev;
--  else
--    tree->last = node->prev;
--
--  tree->count--;
--}
--
--int
--avl_insert(struct avl_tree *tree, struct avl_node *new, int allow_duplicates)
--{
--  struct avl_node *node;
--  struct avl_node *last;
--  int diff;
--
--  new->parent = NULL;
--
--  new->left = NULL;
--  new->right = NULL;
--
--  new->next = NULL;
--  new->prev = NULL;
--
--  new->balance = 0;
--  new->leader = 1;
--
--  if (tree->root == NULL) {
--    tree->root = new;
--    tree->first = new;
--    tree->last = new;
--    tree->count = 1;
--    return 0;
--  }
--
--  node = avl_find_rec(tree->root, new->key, tree->comp);
--
--  last = node;
--
--  while (last->next != NULL && last->next->leader == 0)
--    last = last->next;
--
--  if (NULL == tree->comp)
--    diff = ip4cmp(new->key, node->key);
--
--  else
--    diff = (*tree->comp) (new->key, node->key);
--
--  if (diff == 0) {
--    if (allow_duplicates == AVL_DUP_NO)
--      return -1;
--
--    new->leader = 0;
--
--    avl_insert_after(tree, last, new);
--    return 0;
--  }
--
--  if (node->balance == 1) {
--    avl_insert_before(tree, node, new);
--
--    node->balance = 0;
--    new->parent = node;
--    node->left = new;
--    return 0;
--  }
--
--  if (node->balance == -1) {
--    avl_insert_after(tree, last, new);
--
--    node->balance = 0;
--    new->parent = node;
--    node->right = new;
--    return 0;
--  }
--
--  if (diff < 0) {
--    avl_insert_before(tree, node, new);
--
--    node->balance = -1;
--    new->parent = node;
--    node->left = new;
--    post_insert(tree, node);
--    return 0;
--  }
--
--  avl_insert_after(tree, last, new);
--
--  node->balance = 1;
--  new->parent = node;
--  node->right = new;
--  post_insert(tree, node);
--  return 0;
--}
--
--static void
--avl_post_delete(struct avl_tree *tree, struct avl_node *node)
--{
--  struct avl_node *parent;
--
--  if ((parent = node->parent) == NULL)
--    return;
--
--  if (node == parent->left) {
--    parent->balance++;
--
--    if (parent->balance == 0) {
--      avl_post_delete(tree, parent);
--      return;
--    }
--
--    if (parent->balance == 1)
--      return;
--
--    if (parent->right->balance == 0) {
--      avl_rotate_left(tree, parent);
--      return;
--    }
--
--    if (parent->right->balance == 1) {
--      avl_rotate_left(tree, parent);
--      avl_post_delete(tree, parent->parent);
--      return;
--    }
--
--    avl_rotate_right(tree, parent->right);
--    avl_rotate_left(tree, parent);
--    avl_post_delete(tree, parent->parent);
--    return;
--  }
--
--  parent->balance--;
--
--  if (parent->balance == 0) {
--    avl_post_delete(tree, parent);
--    return;
--  }
--
--  if (parent->balance == -1)
--    return;
--
--  if (parent->left->balance == 0) {
--    avl_rotate_right(tree, parent);
--    return;
--  }
--
--  if (parent->left->balance == -1) {
--    avl_rotate_right(tree, parent);
--    avl_post_delete(tree, parent->parent);
--    return;
--  }
--
--  avl_rotate_left(tree, parent->left);
--  avl_rotate_right(tree, parent);
--  avl_post_delete(tree, parent->parent);
--}
--
--static struct avl_node *
--avl_local_min(struct avl_node *node)
--{
--  while (node->left != NULL)
--    node = node->left;
--
--  return node;
--}
--
--static void
--avl_delete_worker(struct avl_tree *tree, struct avl_node *node)
--{
--  struct avl_node *parent, *min;
--
--  parent = node->parent;
--
--  if (node->left == NULL && node->right == NULL) {
--    if (parent == NULL) {
--      tree->root = NULL;
--      return;
--    }
--
--    if (parent->left == node) {
--      parent->left = NULL;
--      parent->balance++;
--
--      if (parent->balance == 1)
--        return;
--
--      if (parent->balance == 0) {
--        avl_post_delete(tree, parent);
--        return;
--      }
--
--      if (parent->right->balance == 0) {
--        avl_rotate_left(tree, parent);
--        return;
--      }
--
--      if (parent->right->balance == 1) {
--        avl_rotate_left(tree, parent);
--        avl_post_delete(tree, parent->parent);
--        return;
--      }
--
--      avl_rotate_right(tree, parent->right);
--      avl_rotate_left(tree, parent);
--      avl_post_delete(tree, parent->parent);
--    }
--    else {
--      parent->right = NULL;
--      parent->balance--;
--
--      if (parent->balance == -1)
--        return;
--
--      if (parent->balance == 0) {
--        avl_post_delete(tree, parent);
--        return;
--      }
--
--      if (parent->left->balance == 0) {
--        avl_rotate_right(tree, parent);
--        return;
--      }
--
--      if (parent->left->balance == -1) {
--        avl_rotate_right(tree, parent);
--        avl_post_delete(tree, parent->parent);
--        return;
--      }
--
--      avl_rotate_left(tree, parent->left);
--      avl_rotate_right(tree, parent);
--      avl_post_delete(tree, parent->parent);
--    }
--    return;
--  }
--
--  if (node->left == NULL) {
--    if (parent == NULL) {
--      tree->root = node->right;
--      node->right->parent = NULL;
--      return;
--    }
--
--    node->right->parent = parent;
--
--    if (parent->left == node)
--      parent->left = node->right;
--
--    else
--      parent->right = node->right;
--
--    avl_post_delete(tree, node->right);
--    return;
--  }
--
--  if (node->right == NULL) {
--    if (parent == NULL) {
--      tree->root = node->left;
--      node->left->parent = NULL;
--      return;
--    }
--
--    node->left->parent = parent;
--
--    if (parent->left == node)
--      parent->left = node->left;
--
--    else
--      parent->right = node->left;
--
--    avl_post_delete(tree, node->left);
--    return;
--  }
--
--  min = avl_local_min(node->right);
--  avl_delete_worker(tree, min);
--  parent = node->parent;
--
--  min->balance = node->balance;
--  min->parent = parent;
--  min->left = node->left;
--  min->right = node->right;
--
--  if (min->left != NULL)
--    min->left->parent = min;
--
--  if (min->right != NULL)
--    min->right->parent = min;
--
--  if (parent == NULL) {
--    tree->root = min;
--    return;
--  }
--
--  if (parent->left == node) {
--    parent->left = min;
--    return;
--  }
--
--  parent->right = min;
--}
--
--void
--avl_delete(struct avl_tree *tree, struct avl_node *node)
--{
--  struct avl_node *next;
--  struct avl_node *parent;
--  struct avl_node *left;
--  struct avl_node *right;
--
--  if (node->leader != 0) {
--    next = node->next;
--
--    if (next != NULL && next->leader == 0) {
--      next->leader = 1;
--      next->balance = node->balance;
--
--      parent = node->parent;
--      left = node->left;
--      right = node->right;
--
--      next->parent = parent;
--      next->left = left;
--      next->right = right;
--
--      if (parent == NULL)
--        tree->root = next;
--
--      else {
--        if (node == parent->left)
--          parent->left = next;
--
--        else
--          parent->right = next;
--      }
--
--      if (left != NULL)
--        left->parent = next;
--
--      if (right != NULL)
--        right->parent = next;
--    }
--
--    else
--      avl_delete_worker(tree, node);
--  }
--
--  avl_remove(tree, node);
--}
--
--/*
-- * Local Variables:
-- * c-basic-offset: 2
-- * indent-tabs-mode: nil
-- * End:
-- */
---- /dev/null
-+++ b/src/common/olsrd_avl.c
-@@ -0,0 +1,664 @@
-+/*
-+ * The olsr.org Optimized Link-State Routing daemon (olsrd)
-+ *
-+ * (c) by the OLSR project
-+ *
-+ * See our Git repository to find out who worked on this file
-+ * and thus is a copyright holder on it.
-+ *
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ *
-+ * * Redistributions of source code must retain the above copyright
-+ *   notice, this list of conditions and the following disclaimer.
-+ * * Redistributions in binary form must reproduce the above copyright
-+ *   notice, this list of conditions and the following disclaimer in
-+ *   the documentation and/or other materials provided with the
-+ *   distribution.
-+ * * Neither the name of olsr.org, olsrd nor the names of its
-+ *   contributors may be used to endorse or promote products derived
-+ *   from this software without specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-+ * POSSIBILITY OF SUCH DAMAGE.
-+ *
-+ * Visit http://www.olsr.org for more information.
-+ *
-+ * If you find this software useful feel free to make a donation
-+ * to the project. For more information see the website or contact
-+ * the copyright holders.
-+ *
-+ */
-+
-+#include <stddef.h>
-+#include <time.h>
-+#include <string.h>
-+
-+#include "ipcalc.h"
-+#include "common/olsrd_avl.h"
-+#include "net_olsr.h"
-+
-+/*
-+ * default comparison pointers
-+ * set to the respective compare function.
-+ * if olsrd_avl_comp_default is set to zero, a fast
-+ * INLINE ipv4 comparison will be executed.
-+ */
-+olsrd_avl_tree_comp olsrd_avl_comp_default = NULL;
-+olsrd_avl_tree_comp olsrd_avl_comp_prefix_default;
-+
-+int
-+olsrd_avl_comp_ipv4(const void *ip1, const void *ip2)
-+{
-+  return ip4cmp(ip1, ip2);
-+}
-+
-+int
-+olsrd_avl_comp_ipv6(const void *ip1, const void *ip2)
-+{
-+  return ip6cmp(ip1, ip2);
-+}
-+
-+int
-+olsrd_avl_comp_mac(const void *ip1, const void *ip2)
-+{
-+  return memcmp(ip1, ip2, 6);
-+}
-+
-+void
-+olsrd_avl_init(struct olsrd_avl_tree *tree, olsrd_avl_tree_comp comp)
-+{
-+  tree->root = NULL;
-+  tree->first = NULL;
-+  tree->last = NULL;
-+  tree->count = 0;
-+
-+  tree->comp = comp == olsrd_avl_comp_ipv4 ? NULL : comp;
-+}
-+
-+static struct olsrd_avl_node *
-+olsrd_avl_find_rec_ipv4(struct olsrd_avl_node *node, const void *key)
-+{
-+  if (*(const unsigned int *)key < *(const unsigned int *)node->key) {
-+    if (node->left != NULL)
-+      return olsrd_avl_find_rec_ipv4(node->left, key);
-+  }
-+
-+  else if (*(const unsigned int *)key > *(const unsigned int *)node->key) {
-+    if (node->right != NULL)
-+      return olsrd_avl_find_rec_ipv4(node->right, key);
-+  }
-+
-+  return node;
-+}
-+
-+static struct olsrd_avl_node *
-+olsrd_avl_find_rec(struct olsrd_avl_node *node, const void *key, olsrd_avl_tree_comp comp)
-+{
-+  int diff;
-+
-+  if (NULL == comp)
-+    return olsrd_avl_find_rec_ipv4(node, key);
-+
-+  diff = (*comp) (key, node->key);
-+
-+  if (diff < 0) {
-+    if (node->left != NULL)
-+      return olsrd_avl_find_rec(node->left, key, comp);
-+
-+    return node;
-+  }
-+
-+  if (diff > 0) {
-+    if (node->right != NULL)
-+      return olsrd_avl_find_rec(node->right, key, comp);
-+
-+    return node;
-+  }
-+
-+  return node;
-+}
-+
-+struct olsrd_avl_node *
-+olsrd_avl_find(struct olsrd_avl_tree *tree, const void *key)
-+{
-+  struct olsrd_avl_node *node;
-+
-+  if (tree->root == NULL)
-+    return NULL;
-+
-+  node = olsrd_avl_find_rec(tree->root, key, tree->comp);
-+
-+  if (NULL == tree->comp) {
-+    if (0 != ip4cmp(node->key, key))
-+      return NULL;
-+  }
-+
-+  else {
-+    if ((*tree->comp) (node->key, key) != 0)
-+      return NULL;
-+  }
-+
-+  return node;
-+}
-+
-+static void
-+olsrd_avl_rotate_right(struct olsrd_avl_tree *tree, struct olsrd_avl_node *node)
-+{
-+  struct olsrd_avl_node *left, *parent;
-+
-+  left = node->left;
-+  parent = node->parent;
-+
-+  left->parent = parent;
-+  node->parent = left;
-+
-+  if (parent == NULL)
-+    tree->root = left;
-+
-+  else {
-+    if (parent->left == node)
-+      parent->left = left;
-+
-+    else
-+      parent->right = left;
-+  }
-+
-+  node->left = left->right;
-+  left->right = node;
-+
-+  if (node->left != NULL)
-+    node->left->parent = node;
-+
-+  node->balance += 1 - MIN(left->balance, 0);
-+  left->balance += 1 + MAX(node->balance, 0);
-+}
-+
-+static void
-+olsrd_avl_rotate_left(struct olsrd_avl_tree *tree, struct olsrd_avl_node *node)
-+{
-+  struct olsrd_avl_node *right, *parent;
-+
-+  right = node->right;
-+  parent = node->parent;
-+
-+  right->parent = parent;
-+  node->parent = right;
-+
-+  if (parent == NULL)
-+    tree->root = right;
-+
-+  else {
-+    if (parent->left == node)
-+      parent->left = right;
-+
-+    else
-+      parent->right = right;
-+  }
-+
-+  node->right = right->left;
-+  right->left = node;
-+
-+  if (node->right != NULL)
-+    node->right->parent = node;
-+
-+  node->balance -= 1 + MAX(right->balance, 0);
-+  right->balance -= 1 - MIN(node->balance, 0);
-+}
-+
-+static void
-+post_insert(struct olsrd_avl_tree *tree, struct olsrd_avl_node *node)
-+{
-+  struct olsrd_avl_node *parent = node->parent;
-+
-+  if (parent == NULL)
-+    return;
-+
-+  if (node == parent->left) {
-+    parent->balance--;
-+
-+    if (parent->balance == 0)
-+      return;
-+
-+    if (parent->balance == -1) {
-+      post_insert(tree, parent);
-+      return;
-+    }
-+
-+    if (node->balance == -1) {
-+      olsrd_avl_rotate_right(tree, parent);
-+      return;
-+    }
-+
-+    olsrd_avl_rotate_left(tree, node);
-+    olsrd_avl_rotate_right(tree, node->parent->parent);
-+    return;
-+  }
-+
-+  parent->balance++;
-+
-+  if (parent->balance == 0)
-+    return;
-+
-+  if (parent->balance == 1) {
-+    post_insert(tree, parent);
-+    return;
-+  }
-+
-+  if (node->balance == 1) {
-+    olsrd_avl_rotate_left(tree, parent);
-+    return;
-+  }
-+
-+  olsrd_avl_rotate_right(tree, node);
-+  olsrd_avl_rotate_left(tree, node->parent->parent);
-+}
-+
-+static void
-+olsrd_avl_insert_before(struct olsrd_avl_tree *tree, struct olsrd_avl_node *pos_node, struct olsrd_avl_node *node)
-+{
-+  if (pos_node->prev != NULL)
-+    pos_node->prev->next = node;
-+  else
-+    tree->first = node;
-+
-+  node->prev = pos_node->prev;
-+  node->next = pos_node;
-+
-+  pos_node->prev = node;
-+
-+  tree->count++;
-+}
-+
-+static void
-+olsrd_avl_insert_after(struct olsrd_avl_tree *tree, struct olsrd_avl_node *pos_node, struct olsrd_avl_node *node)
-+{
-+  if (pos_node->next != NULL)
-+    pos_node->next->prev = node;
-+  else
-+    tree->last = node;
-+
-+  node->prev = pos_node;
-+  node->next = pos_node->next;
-+
-+  pos_node->next = node;
-+
-+  tree->count++;
-+}
-+
-+static void
-+olsrd_avl_remove(struct olsrd_avl_tree *tree, struct olsrd_avl_node *node)
-+{
-+  if (node->prev != NULL)
-+    node->prev->next = node->next;
-+  else
-+    tree->first = node->next;
-+
-+  if (node->next != NULL)
-+    node->next->prev = node->prev;
-+  else
-+    tree->last = node->prev;
-+
-+  tree->count--;
-+}
-+
-+int
-+olsrd_avl_insert(struct olsrd_avl_tree *tree, struct olsrd_avl_node *new, int allow_duplicates)
-+{
-+  struct olsrd_avl_node *node;
-+  struct olsrd_avl_node *last;
-+  int diff;
-+
-+  new->parent = NULL;
-+
-+  new->left = NULL;
-+  new->right = NULL;
-+
-+  new->next = NULL;
-+  new->prev = NULL;
-+
-+  new->balance = 0;
-+  new->leader = 1;
-+
-+  if (tree->root == NULL) {
-+    tree->root = new;
-+    tree->first = new;
-+    tree->last = new;
-+    tree->count = 1;
-+    return 0;
-+  }
-+
-+  node = olsrd_avl_find_rec(tree->root, new->key, tree->comp);
-+
-+  last = node;
-+
-+  while (last->next != NULL && last->next->leader == 0)
-+    last = last->next;
-+
-+  if (NULL == tree->comp)
-+    diff = ip4cmp(new->key, node->key);
-+
-+  else
-+    diff = (*tree->comp) (new->key, node->key);
-+
-+  if (diff == 0) {
-+    if (allow_duplicates == OLSRD_AVL_DUP_NO)
-+      return -1;
-+
-+    new->leader = 0;
-+
-+    olsrd_avl_insert_after(tree, last, new);
-+    return 0;
-+  }
-+
-+  if (node->balance == 1) {
-+    olsrd_avl_insert_before(tree, node, new);
-+
-+    node->balance = 0;
-+    new->parent = node;
-+    node->left = new;
-+    return 0;
-+  }
-+
-+  if (node->balance == -1) {
-+    olsrd_avl_insert_after(tree, last, new);
-+
-+    node->balance = 0;
-+    new->parent = node;
-+    node->right = new;
-+    return 0;
-+  }
-+
-+  if (diff < 0) {
-+    olsrd_avl_insert_before(tree, node, new);
-+
-+    node->balance = -1;
-+    new->parent = node;
-+    node->left = new;
-+    post_insert(tree, node);
-+    return 0;
-+  }
-+
-+  olsrd_avl_insert_after(tree, last, new);
-+
-+  node->balance = 1;
-+  new->parent = node;
-+  node->right = new;
-+  post_insert(tree, node);
-+  return 0;
-+}
-+
-+static void
-+olsrd_avl_post_delete(struct olsrd_avl_tree *tree, struct olsrd_avl_node *node)
-+{
-+  struct olsrd_avl_node *parent;
-+
-+  if ((parent = node->parent) == NULL)
-+    return;
-+
-+  if (node == parent->left) {
-+    parent->balance++;
-+
-+    if (parent->balance == 0) {
-+      olsrd_avl_post_delete(tree, parent);
-+      return;
-+    }
-+
-+    if (parent->balance == 1)
-+      return;
-+
-+    if (parent->right->balance == 0) {
-+      olsrd_avl_rotate_left(tree, parent);
-+      return;
-+    }
-+
-+    if (parent->right->balance == 1) {
-+      olsrd_avl_rotate_left(tree, parent);
-+      olsrd_avl_post_delete(tree, parent->parent);
-+      return;
-+    }
-+
-+    olsrd_avl_rotate_right(tree, parent->right);
-+    olsrd_avl_rotate_left(tree, parent);
-+    olsrd_avl_post_delete(tree, parent->parent);
-+    return;
-+  }
-+
-+  parent->balance--;
-+
-+  if (parent->balance == 0) {
-+    olsrd_avl_post_delete(tree, parent);
-+    return;
-+  }
-+
-+  if (parent->balance == -1)
-+    return;
-+
-+  if (parent->left->balance == 0) {
-+    olsrd_avl_rotate_right(tree, parent);
-+    return;
-+  }
-+
-+  if (parent->left->balance == -1) {
-+    olsrd_avl_rotate_right(tree, parent);
-+    olsrd_avl_post_delete(tree, parent->parent);
-+    return;
-+  }
-+
-+  olsrd_avl_rotate_left(tree, parent->left);
-+  olsrd_avl_rotate_right(tree, parent);
-+  olsrd_avl_post_delete(tree, parent->parent);
-+}
-+
-+static struct olsrd_avl_node *
-+olsrd_avl_local_min(struct olsrd_avl_node *node)
-+{
-+  while (node->left != NULL)
-+    node = node->left;
-+
-+  return node;
-+}
-+
-+static void
-+olsrd_avl_delete_worker(struct olsrd_avl_tree *tree, struct olsrd_avl_node *node)
-+{
-+  struct olsrd_avl_node *parent, *min;
-+
-+  parent = node->parent;
-+
-+  if (node->left == NULL && node->right == NULL) {
-+    if (parent == NULL) {
-+      tree->root = NULL;
-+      return;
-+    }
-+
-+    if (parent->left == node) {
-+      parent->left = NULL;
-+      parent->balance++;
-+
-+      if (parent->balance == 1)
-+        return;
-+
-+      if (parent->balance == 0) {
-+        olsrd_avl_post_delete(tree, parent);
-+        return;
-+      }
-+
-+      if (parent->right->balance == 0) {
-+        olsrd_avl_rotate_left(tree, parent);
-+        return;
-+      }
-+
-+      if (parent->right->balance == 1) {
-+        olsrd_avl_rotate_left(tree, parent);
-+        olsrd_avl_post_delete(tree, parent->parent);
-+        return;
-+      }
-+
-+      olsrd_avl_rotate_right(tree, parent->right);
-+      olsrd_avl_rotate_left(tree, parent);
-+      olsrd_avl_post_delete(tree, parent->parent);
-+    }
-+    else {
-+      parent->right = NULL;
-+      parent->balance--;
-+
-+      if (parent->balance == -1)
-+        return;
-+
-+      if (parent->balance == 0) {
-+        olsrd_avl_post_delete(tree, parent);
-+        return;
-+      }
-+
-+      if (parent->left->balance == 0) {
-+        olsrd_avl_rotate_right(tree, parent);
-+        return;
-+      }
-+
-+      if (parent->left->balance == -1) {
-+        olsrd_avl_rotate_right(tree, parent);
-+        olsrd_avl_post_delete(tree, parent->parent);
-+        return;
-+      }
-+
-+      olsrd_avl_rotate_left(tree, parent->left);
-+      olsrd_avl_rotate_right(tree, parent);
-+      olsrd_avl_post_delete(tree, parent->parent);
-+    }
-+    return;
-+  }
-+
-+  if (node->left == NULL) {
-+    if (parent == NULL) {
-+      tree->root = node->right;
-+      node->right->parent = NULL;
-+      return;
-+    }
-+
-+    node->right->parent = parent;
-+
-+    if (parent->left == node)
-+      parent->left = node->right;
-+
-+    else
-+      parent->right = node->right;
-+
-+    olsrd_avl_post_delete(tree, node->right);
-+    return;
-+  }
-+
-+  if (node->right == NULL) {
-+    if (parent == NULL) {
-+      tree->root = node->left;
-+      node->left->parent = NULL;
-+      return;
-+    }
-+
-+    node->left->parent = parent;
-+
-+    if (parent->left == node)
-+      parent->left = node->left;
-+
-+    else
-+      parent->right = node->left;
-+
-+    olsrd_avl_post_delete(tree, node->left);
-+    return;
-+  }
-+
-+  min = olsrd_avl_local_min(node->right);
-+  olsrd_avl_delete_worker(tree, min);
-+  parent = node->parent;
-+
-+  min->balance = node->balance;
-+  min->parent = parent;
-+  min->left = node->left;
-+  min->right = node->right;
-+
-+  if (min->left != NULL)
-+    min->left->parent = min;
-+
-+  if (min->right != NULL)
-+    min->right->parent = min;
-+
-+  if (parent == NULL) {
-+    tree->root = min;
-+    return;
-+  }
-+
-+  if (parent->left == node) {
-+    parent->left = min;
-+    return;
-+  }
-+
-+  parent->right = min;
-+}
-+
-+void
-+olsrd_avl_delete(struct olsrd_avl_tree *tree, struct olsrd_avl_node *node)
-+{
-+  struct olsrd_avl_node *next;
-+  struct olsrd_avl_node *parent;
-+  struct olsrd_avl_node *left;
-+  struct olsrd_avl_node *right;
-+
-+  if (node->leader != 0) {
-+    next = node->next;
-+
-+    if (next != NULL && next->leader == 0) {
-+      next->leader = 1;
-+      next->balance = node->balance;
-+
-+      parent = node->parent;
-+      left = node->left;
-+      right = node->right;
-+
-+      next->parent = parent;
-+      next->left = left;
-+      next->right = right;
-+
-+      if (parent == NULL)
-+        tree->root = next;
-+
-+      else {
-+        if (node == parent->left)
-+          parent->left = next;
-+
-+        else
-+          parent->right = next;
-+      }
-+
-+      if (left != NULL)
-+        left->parent = next;
-+
-+      if (right != NULL)
-+        right->parent = next;
-+    }
-+
-+    else
-+      olsrd_avl_delete_worker(tree, node);
-+  }
-+
-+  olsrd_avl_remove(tree, node);
-+}
-+
-+/*
-+ * Local Variables:
-+ * c-basic-offset: 2
-+ * indent-tabs-mode: nil
-+ * End:
-+ */
---- a/src/common/avl.h
-+++ /dev/null
-@@ -1,183 +0,0 @@
--/*
-- * The olsr.org Optimized Link-State Routing daemon (olsrd)
-- *
-- * (c) by the OLSR project
-- *
-- * See our Git repository to find out who worked on this file
-- * and thus is a copyright holder on it.
-- *
-- * All rights reserved.
-- *
-- * Redistribution and use in source and binary forms, with or without
-- * modification, are permitted provided that the following conditions
-- * are met:
-- *
-- * * Redistributions of source code must retain the above copyright
-- *   notice, this list of conditions and the following disclaimer.
-- * * Redistributions in binary form must reproduce the above copyright
-- *   notice, this list of conditions and the following disclaimer in
-- *   the documentation and/or other materials provided with the
-- *   distribution.
-- * * Neither the name of olsr.org, olsrd nor the names of its
-- *   contributors may be used to endorse or promote products derived
-- *   from this software without specific prior written permission.
-- *
-- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-- * POSSIBILITY OF SUCH DAMAGE.
-- *
-- * Visit http://www.olsr.org for more information.
-- *
-- * If you find this software useful feel free to make a donation
-- * to the project. For more information see the website or contact
-- * the copyright holders.
-- *
-- */
--
--#ifndef _AVL_H
--#define _AVL_H
--
--#include <stddef.h>
--#include "compiler.h"
--#include "defs.h"
--
--struct avl_node {
--  struct avl_node *parent;
--  struct avl_node *left;
--  struct avl_node *right;
--  struct avl_node *next;
--  struct avl_node *prev;
--  void *key;
--  signed char balance;
--  unsigned char leader;
--};
--
--typedef int (*avl_tree_comp) (const void *, const void *);
--
--struct avl_tree {
--  struct avl_node *root;
--  struct avl_node *first;
--  struct avl_node *last;
--  unsigned int count;
--  avl_tree_comp comp;
--};
--
--#define AVL_DUP    1
--#define AVL_DUP_NO 0
--
--void avl_init(struct avl_tree *, avl_tree_comp);
--struct avl_node *avl_find(struct avl_tree *, const void *);
--int avl_insert(struct avl_tree *, struct avl_node *, int);
--void avl_delete(struct avl_tree *, struct avl_node *);
--
--static INLINE struct avl_node *
--avl_walk_first(struct avl_tree *tree)
--{
--  if (!tree) {
--    return NULL;
--  }
--
--  return tree->first;
--}
--static INLINE struct avl_node *
--avl_walk_last(struct avl_tree *tree)
--{
--  if (!tree) {
--    return NULL;
--  }
--
--  return tree->last;
--}
--static INLINE struct avl_node *
--avl_walk_next(struct avl_node *node)
--{
--  if (!node) {
--    return NULL;
--  }
--
--  return node->next;
--}
--static INLINE struct avl_node *
--avl_walk_prev(struct avl_node *node)
--{
--  if (!node) {
--    return NULL;
--  }
--
--  return node->prev;
--}
--
--/* and const versions*/
--static INLINE const struct avl_node *
--avl_walk_first_c(const struct avl_tree *tree)
--{
--  if (!tree) {
--    return NULL;
--  }
--
--  return tree->first;
--}
--static INLINE const struct avl_node *
--avl_walk_last_c(const struct avl_tree *tree)
--{
--  if (!tree) {
--    return NULL;
--  }
--
--  return tree->last;
--}
--static INLINE const struct avl_node *
--avl_walk_next_c(const struct avl_node *node)
--{
--  if (!node) {
--    return NULL;
--  }
--
--  return node->next;
--}
--static INLINE const struct avl_node *
--avl_walk_prev_c(const struct avl_node *node)
--{
--  if (!node) {
--    return NULL;
--  }
--
--  return node->prev;
--}
--
--extern avl_tree_comp avl_comp_default;
--extern avl_tree_comp avl_comp_prefix_default;
--extern int avl_comp_ipv4(const void *, const void *);
--extern int avl_comp_ipv6(const void *, const void *);
--extern int avl_comp_mac(const void *, const void *);
--
--/*
-- * Macro to define an INLINE function to map from a list_node offset back to the
-- * base of the datastructure. That way you save an extra data pointer.
-- */
--#define AVLNODE2STRUCT(funcname, structname, avlnodename) \
--static INLINE structname * funcname (struct avl_node *ptr)\
--{\
--  return( \
--    ptr ? \
--      (structname *) (((size_t) ptr) - offsetof(structname, avlnodename)) : \
--      NULL); \
--}
--
--#endif /* _AVL_H */
--
--/*
-- * Local Variables:
-- * c-basic-offset: 2
-- * indent-tabs-mode: nil
-- * End:
-- */
---- /dev/null
-+++ b/src/common/olsrd_avl.h
-@@ -0,0 +1,183 @@
-+/*
-+ * The olsr.org Optimized Link-State Routing daemon (olsrd)
-+ *
-+ * (c) by the OLSR project
-+ *
-+ * See our Git repository to find out who worked on this file
-+ * and thus is a copyright holder on it.
-+ *
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ *
-+ * * Redistributions of source code must retain the above copyright
-+ *   notice, this list of conditions and the following disclaimer.
-+ * * Redistributions in binary form must reproduce the above copyright
-+ *   notice, this list of conditions and the following disclaimer in
-+ *   the documentation and/or other materials provided with the
-+ *   distribution.
-+ * * Neither the name of olsr.org, olsrd nor the names of its
-+ *   contributors may be used to endorse or promote products derived
-+ *   from this software without specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-+ * POSSIBILITY OF SUCH DAMAGE.
-+ *
-+ * Visit http://www.olsr.org for more information.
-+ *
-+ * If you find this software useful feel free to make a donation
-+ * to the project. For more information see the website or contact
-+ * the copyright holders.
-+ *
-+ */
-+
-+#ifndef _OLSRD_AVL_H
-+#define _OLSRD_AVL_H
-+
-+#include <stddef.h>
-+#include "compiler.h"
-+#include "defs.h"
-+
-+struct olsrd_avl_node {
-+  struct olsrd_avl_node *parent;
-+  struct olsrd_avl_node *left;
-+  struct olsrd_avl_node *right;
-+  struct olsrd_avl_node *next;
-+  struct olsrd_avl_node *prev;
-+  void *key;
-+  signed char balance;
-+  unsigned char leader;
-+};
-+
-+typedef int (*olsrd_avl_tree_comp) (const void *, const void *);
-+
-+struct olsrd_avl_tree {
-+  struct olsrd_avl_node *root;
-+  struct olsrd_avl_node *first;
-+  struct olsrd_avl_node *last;
-+  unsigned int count;
-+  olsrd_avl_tree_comp comp;
-+};
-+
-+#define OLSRD_AVL_DUP    1
-+#define OLSRD_AVL_DUP_NO 0
-+
-+void olsrd_avl_init(struct olsrd_avl_tree *, olsrd_avl_tree_comp);
-+struct olsrd_avl_node *olsrd_avl_find(struct olsrd_avl_tree *, const void *);
-+int olsrd_avl_insert(struct olsrd_avl_tree *, struct olsrd_avl_node *, int);
-+void olsrd_avl_delete(struct olsrd_avl_tree *, struct olsrd_avl_node *);
-+
-+static INLINE struct olsrd_avl_node *
-+olsrd_avl_walk_first(struct olsrd_avl_tree *tree)
-+{
-+  if (!tree) {
-+    return NULL;
-+  }
-+
-+  return tree->first;
-+}
-+static INLINE struct olsrd_avl_node *
-+olsrd_avl_walk_last(struct olsrd_avl_tree *tree)
-+{
-+  if (!tree) {
-+    return NULL;
-+  }
-+
-+  return tree->last;
-+}
-+static INLINE struct olsrd_avl_node *
-+olsrd_avl_walk_next(struct olsrd_avl_node *node)
-+{
-+  if (!node) {
-+    return NULL;
-+  }
-+
-+  return node->next;
-+}
-+static INLINE struct olsrd_avl_node *
-+olsrd_avl_walk_prev(struct olsrd_avl_node *node)
-+{
-+  if (!node) {
-+    return NULL;
-+  }
-+
-+  return node->prev;
-+}
-+
-+/* and const versions*/
-+static INLINE const struct olsrd_avl_node *
-+olsrd_avl_walk_first_c(const struct olsrd_avl_tree *tree)
-+{
-+  if (!tree) {
-+    return NULL;
-+  }
-+
-+  return tree->first;
-+}
-+static INLINE const struct olsrd_avl_node *
-+olsrd_avl_walk_last_c(const struct olsrd_avl_tree *tree)
-+{
-+  if (!tree) {
-+    return NULL;
-+  }
-+
-+  return tree->last;
-+}
-+static INLINE const struct olsrd_avl_node *
-+olsrd_avl_walk_next_c(const struct olsrd_avl_node *node)
-+{
-+  if (!node) {
-+    return NULL;
-+  }
-+
-+  return node->next;
-+}
-+static INLINE const struct olsrd_avl_node *
-+olsrd_avl_walk_prev_c(const struct olsrd_avl_node *node)
-+{
-+  if (!node) {
-+    return NULL;
-+  }
-+
-+  return node->prev;
-+}
-+
-+extern olsrd_avl_tree_comp olsrd_avl_comp_default;
-+extern olsrd_avl_tree_comp olsrd_avl_comp_prefix_default;
-+extern int olsrd_avl_comp_ipv4(const void *, const void *);
-+extern int olsrd_avl_comp_ipv6(const void *, const void *);
-+extern int olsrd_avl_comp_mac(const void *, const void *);
-+
-+/*
-+ * Macro to define an INLINE function to map from a list_node offset back to the
-+ * base of the datastructure. That way you save an extra data pointer.
-+ */
-+#define OLSRD_AVLNODE2STRUCT(funcname, structname, olsrd_avlnodename) \
-+static INLINE structname * funcname (struct olsrd_avl_node *ptr)\
-+{\
-+  return( \
-+    ptr ? \
-+      (structname *) (((size_t) ptr) - offsetof(structname, olsrd_avlnodename)) : \
-+      NULL); \
-+}
-+
-+#endif /* _OLSRD_AVL_H */
-+
-+/*
-+ * Local Variables:
-+ * c-basic-offset: 2
-+ * indent-tabs-mode: nil
-+ * End:
-+ */
---- a/src/duplicate_set.c
-+++ b/src/duplicate_set.c
-@@ -45,7 +45,7 @@
- #include "duplicate_set.h"
- #include "ipcalc.h"
--#include "common/avl.h"
-+#include "common/olsrd_avl.h"
- #include "olsr.h"
- #include "mid_set.h"
- #include "scheduler.h"
-@@ -53,13 +53,13 @@
- static void olsr_cleanup_duplicate_entry(void *unused);
--struct avl_tree duplicate_set;
-+struct olsrd_avl_tree duplicate_set;
- struct timer_entry *duplicate_cleanup_timer;
- void
- olsr_init_duplicate_set(void)
- {
--  avl_init(&duplicate_set, olsr_cnf->ip_version == AF_INET ? &avl_comp_ipv4 : &avl_comp_ipv6);
-+  olsrd_avl_init(&duplicate_set, olsr_cnf->ip_version == AF_INET ? &olsrd_avl_comp_ipv4 : &olsrd_avl_comp_ipv6);
-   olsr_set_timer(&duplicate_cleanup_timer, DUPLICATE_CLEANUP_INTERVAL, DUPLICATE_CLEANUP_JITTER, OLSR_TIMER_PERIODIC,
-                  &olsr_cleanup_duplicate_entry, NULL, 0);
-@@ -68,7 +68,7 @@ olsr_init_duplicate_set(void)
- void olsr_cleanup_duplicates(union olsr_ip_addr *orig) {
-   struct dup_entry *entry;
--  entry = (struct dup_entry *)avl_find(&duplicate_set, orig);
-+  entry = (struct dup_entry *)olsrd_avl_find(&duplicate_set, orig);
-   if (entry != NULL) {
-     entry->too_low_counter = DUP_MAX_TOO_LOW - 2;
-   }
-@@ -83,7 +83,7 @@ olsr_create_duplicate_entry(void *ip, ui
-     memcpy(&entry->ip, ip, olsr_cnf->ip_version == AF_INET ? sizeof(entry->ip.v4) : sizeof(entry->ip.v6));
-     entry->seqnr = seqnr;
-     entry->too_low_counter = 0;
--    entry->avl.key = &entry->ip;
-+    entry->olsrd_avl.key = &entry->ip;
-     entry->array = 0;
-   }
-   return entry;
-@@ -96,7 +96,7 @@ olsr_cleanup_duplicate_entry(void __attr
-   OLSR_FOR_ALL_DUP_ENTRIES(entry) {
-     if (TIMED_OUT(entry->valid_until)) {
--      avl_delete(&duplicate_set, &entry->avl);
-+      olsrd_avl_delete(&duplicate_set, &entry->olsrd_avl);
-       free(entry);
-     }
-   }
-@@ -143,11 +143,11 @@ olsr_message_is_duplicate(union olsr_mes
-   valid_until = GET_TIMESTAMP(DUPLICATE_VTIME);
--  entry = (struct dup_entry *)avl_find(&duplicate_set, ip);
-+  entry = (struct dup_entry *)olsrd_avl_find(&duplicate_set, ip);
-   if (entry == NULL) {
-     entry = olsr_create_duplicate_entry(ip, seqnr);
-     if (entry != NULL) {
--      avl_insert(&duplicate_set, &entry->avl, 0);
-+      olsrd_avl_insert(&duplicate_set, &entry->olsrd_avl, 0);
-       entry->valid_until = valid_until;
-     }
-     return false;               // okay, we process this package
-@@ -209,7 +209,7 @@ olsr_print_duplicate_table(void)
-               olsr_wallclock_string(), ipwidth, "Node IP", "DupArray", "VTime");
-   OLSR_FOR_ALL_DUP_ENTRIES(entry) {
--    OLSR_PRINTF(1, "%-*s %08x %s\n", ipwidth, olsr_ip_to_string(&addrbuf, (union olsr_ip_addr *)(entry->avl.key)),
-+    OLSR_PRINTF(1, "%-*s %08x %s\n", ipwidth, olsr_ip_to_string(&addrbuf, (union olsr_ip_addr *)(entry->olsrd_avl.key)),
-                 entry->array, olsr_clock_string(entry->valid_until));
-   } OLSR_FOR_ALL_DUP_ENTRIES_END(entry);
- }
---- a/src/duplicate_set.h
-+++ b/src/duplicate_set.h
-@@ -49,7 +49,7 @@
- #include "defs.h"
- #include "olsr.h"
- #include "mantissa.h"
--#include "common/avl.h"
-+#include "common/olsrd_avl.h"
- #define DUPLICATE_CLEANUP_INTERVAL 15000
- #define DUPLICATE_CLEANUP_JITTER 25
-@@ -57,7 +57,7 @@
- #define DUP_MAX_TOO_LOW 16
- struct dup_entry {
--  struct avl_node avl;
-+  struct olsrd_avl_node olsrd_avl;
-   union olsr_ip_addr ip;
-   uint16_t seqnr;
-   uint16_t too_low_counter;
-@@ -65,7 +65,7 @@ struct dup_entry {
-   uint32_t valid_until;
- };
--AVLNODE2STRUCT(duptree2dupentry, struct dup_entry, avl);
-+OLSRD_AVLNODE2STRUCT(duptree2dupentry, struct dup_entry, olsrd_avl);
- void olsr_init_duplicate_set(void);
- void olsr_cleanup_duplicates(union olsr_ip_addr *orig);
-@@ -80,10 +80,10 @@ void olsr_print_duplicate_table(void);
- #define OLSR_FOR_ALL_DUP_ENTRIES(dup) \
- { \
--  struct avl_node *dup_tree_node, *next_dup_tree_node; \
--  for (dup_tree_node = avl_walk_first(&duplicate_set); \
-+  struct olsrd_avl_node *dup_tree_node, *next_dup_tree_node; \
-+  for (dup_tree_node = olsrd_avl_walk_first(&duplicate_set); \
-     dup_tree_node; dup_tree_node = next_dup_tree_node) { \
--    next_dup_tree_node = avl_walk_next(dup_tree_node); \
-+    next_dup_tree_node = olsrd_avl_walk_next(dup_tree_node); \
-     dup = duptree2dupentry(dup_tree_node);
- #define OLSR_FOR_ALL_DUP_ENTRIES_END(dup) }}
---- a/src/gateway.c
-+++ b/src/gateway.c
-@@ -45,7 +45,7 @@
- #ifdef __linux__
--#include "common/avl.h"
-+#include "common/olsrd_avl.h"
- #include "defs.h"
- #include "ipcalc.h"
- #include "olsr.h"
-@@ -89,7 +89,7 @@ static struct olsr_ip_prefix ipv4_slash_
- static struct olsr_ip_prefix ipv4_slash_1_routes[2];
- /** the gateway tree */
--struct avl_tree gateway_tree;
-+struct olsrd_avl_tree gateway_tree;
- /** gateway cookie */
- static struct olsr_cookie_info *gateway_entry_mem_cookie = NULL;
-@@ -713,7 +713,7 @@ static void cleanup_gateway_handler(void
-   }
-   /* remove gateway entry */
--  avl_delete(&gateway_tree, &gw->node);
-+  olsrd_avl_delete(&gateway_tree, &gw->node);
-   olsr_cookie_free(gateway_entry_mem_cookie, gw);
- }
-@@ -837,7 +837,7 @@ int olsr_init_gateways(void) {
-   gw_container_entry_mem_cookie = olsr_alloc_cookie("gw_container_entry_mem_cookie", OLSR_COOKIE_TYPE_MEMORY);
-   olsr_cookie_set_memory_size(gw_container_entry_mem_cookie, sizeof(struct gw_container_entry));
--  avl_init(&gateway_tree, avl_comp_default);
-+  olsrd_avl_init(&gateway_tree, olsrd_avl_comp_default);
-   olsr_gw_list_init(&gw_list_ipv4, olsr_cnf->smart_gw_use_count);
-   olsr_gw_list_init(&gw_list_ipv6, olsr_cnf->smart_gw_use_count);
-@@ -1078,7 +1078,7 @@ void olsr_cleanup_gateways(void) {
-   OLSR_FOR_ALL_GWS_END(gw);
-   /* there should be no more gateways */
--  assert(!avl_walk_first(&gateway_tree));
-+  assert(!olsrd_avl_walk_first(&gateway_tree));
-   assert(!current_ipv4_gw);
-   assert(!current_ipv6_gw);
-@@ -1244,14 +1244,14 @@ void olsr_update_gateway_entry(union ols
-   struct gw_container_entry * new_gw_in_list;
-   uint8_t *ptr;
-   int64_t prev_path_cost = 0;
--  struct gateway_entry *gw = node2gateway(avl_find(&gateway_tree, originator));
-+  struct gateway_entry *gw = node2gateway(olsrd_avl_find(&gateway_tree, originator));
-   if (!gw) {
-     gw = olsr_cookie_malloc(gateway_entry_mem_cookie);
-     gw->originator = *originator;
-     gw->node.key = &gw->originator;
--    avl_insert(&gateway_tree, &gw->node, AVL_DUP_NO);
-+    olsrd_avl_insert(&gateway_tree, &gw->node, OLSRD_AVL_DUP_NO);
-   } else if (olsr_seqno_diff(seqno, gw->seqno) <= 0) {
-     /* ignore older HNAs */
-     return;
-@@ -1353,7 +1353,7 @@ void olsr_update_gateway_entry(union ols
-  * gateway tree immediately, else it is removed on a delayed schedule.
-  */
- void olsr_delete_gateway_entry(union olsr_ip_addr *originator, uint8_t prefixlen, bool immediate) {
--  olsr_delete_gateway_tree_entry(node2gateway(avl_find(&gateway_tree, originator)), prefixlen, immediate);
-+  olsr_delete_gateway_tree_entry(node2gateway(olsrd_avl_find(&gateway_tree, originator)), prefixlen, immediate);
- }
- /**
-@@ -1526,7 +1526,7 @@ bool olsr_set_inet_gateway(struct gatewa
-     return true;
-   }
--  new_gw = node2gateway(avl_find(&gateway_tree, &chosen_gw->originator));
-+  new_gw = node2gateway(olsrd_avl_find(&gateway_tree, &chosen_gw->originator));
-   if (!new_gw) {
-     /* the originator is not in the gateway tree, we can't set it as gateway */
-     return true;
---- a/src/gateway.h
-+++ b/src/gateway.h
-@@ -46,7 +46,7 @@
- #ifndef GATEWAY_H_
- #define GATEWAY_H_
--#include "common/avl.h"
-+#include "common/olsrd_avl.h"
- #include "common/list.h"
- #include "defs.h"
- #include "olsr.h"
-@@ -96,7 +96,7 @@ enum gateway_hna_fields {
- /** a gateway entry */
- struct gateway_entry {
--    struct avl_node node;
-+    struct olsrd_avl_node node;
-     union olsr_ip_addr originator;
-     struct olsr_ip_prefix external_prefix;
-     uint32_t uplink;
-@@ -129,27 +129,27 @@ struct interfaceName {
- #endif /* __linux__ */
- /**
-- * static INLINE struct gateway_entry * node2gateway (struct avl_node *ptr)
-+ * static INLINE struct gateway_entry * node2gateway (struct olsrd_avl_node *ptr)
-  *
-  * Converts a node into a gateway entry
-  */
--AVLNODE2STRUCT(node2gateway, struct gateway_entry, node);
-+OLSRD_AVLNODE2STRUCT(node2gateway, struct gateway_entry, node);
- /**
-  * Loop over all gateway entries and put the iterated gateway entry in gw
-  */
- #define OLSR_FOR_ALL_GATEWAY_ENTRIES(gw) \
- { \
--  struct avl_node *gw_node, *next_gw_node; \
--  for (gw_node = avl_walk_first(&gateway_tree); \
-+  struct olsrd_avl_node *gw_node, *next_gw_node; \
-+  for (gw_node = olsrd_avl_walk_first(&gateway_tree); \
-     gw_node; gw_node = next_gw_node) { \
--    next_gw_node = avl_walk_next(gw_node); \
-+    next_gw_node = olsrd_avl_walk_next(gw_node); \
-     gw = node2gateway(gw_node); \
-     if (gw) {
- #define OLSR_FOR_ALL_GATEWAY_ENTRIES_END(gw) }}}
- /** the gateway tree */
--extern struct avl_tree gateway_tree;
-+extern struct olsrd_avl_tree gateway_tree;
- /** the list IPv4 gateways */
- extern struct gw_list gw_list_ipv4;
---- a/src/kernel_tunnel.h
-+++ b/src/kernel_tunnel.h
-@@ -55,7 +55,7 @@
- #include "defs.h"
- #include "olsr_types.h"
--#include "common/avl.h"
-+#include "common/olsrd_avl.h"
- #define TUNNEL_ENDPOINT_IF "tunl0"
- #define TUNNEL_ENDPOINT_IF6 "ip6tnl0"
-@@ -67,7 +67,7 @@
- #endif
- struct olsr_iptunnel_entry {
--  struct avl_node node;
-+  struct olsrd_avl_node node;
-   union olsr_ip_addr target;
-   char if_name[IF_NAMESIZE];
---- a/src/linux/kernel_tunnel.c
-+++ b/src/linux/kernel_tunnel.c
-@@ -84,12 +84,12 @@
- static bool store_iptunnel_state;
- static struct olsr_cookie_info *tunnel_cookie;
--static struct avl_tree tunnel_tree;
-+static struct olsrd_avl_tree tunnel_tree;
- int olsr_os_init_iptunnel(const char * dev) {
-   tunnel_cookie = olsr_alloc_cookie("iptunnel", OLSR_COOKIE_TYPE_MEMORY);
-   olsr_cookie_set_memory_size(tunnel_cookie, sizeof(struct olsr_iptunnel_entry));
--  avl_init(&tunnel_tree, avl_comp_default);
-+  olsrd_avl_init(&tunnel_tree, olsrd_avl_comp_default);
-   store_iptunnel_state = olsr_if_isup(dev);
-   if (store_iptunnel_state) {
-@@ -107,7 +107,7 @@ void olsr_os_cleanup_iptunnel(const char
-     struct olsr_iptunnel_entry *t;
-     /* kill tunnel */
--    t = (struct olsr_iptunnel_entry *)avl_walk_first(&tunnel_tree);
-+    t = (struct olsr_iptunnel_entry *)olsrd_avl_walk_first(&tunnel_tree);
-     t->usage = 1;
-     olsr_os_del_ipip_tunnel(t);
-@@ -201,7 +201,7 @@ struct olsr_iptunnel_entry *olsr_os_add_
-   assert(olsr_cnf->ip_version == AF_INET6 || transportV4);
--  t = (struct olsr_iptunnel_entry *)avl_find(&tunnel_tree, target);
-+  t = (struct olsr_iptunnel_entry *)olsrd_avl_find(&tunnel_tree, target);
-   if (t == NULL) {
-     int if_idx;
-     struct ipaddr_str buf;
-@@ -228,7 +228,7 @@ struct olsr_iptunnel_entry *olsr_os_add_
-     strscpy(t->if_name, name, sizeof(t->if_name));
-     t->if_index = if_idx;
--    avl_insert(&tunnel_tree, &t->node, AVL_DUP_NO);
-+    olsrd_avl_insert(&tunnel_tree, &t->node, OLSRD_AVL_DUP_NO);
-   }
-   t->usage++;
-@@ -253,7 +253,7 @@ void olsr_os_del_ipip_tunnel(struct olsr
-   olsr_if_set_state(t->if_name, false);
-   os_ip_tunnel(t->if_name, NULL);
--  avl_delete(&tunnel_tree, &t->node);
-+  olsrd_avl_delete(&tunnel_tree, &t->node);
-   olsr_cookie_free(tunnel_cookie, t);
- }
- #endif /* __linux__ */
---- a/src/lq_packet.c
-+++ b/src/lq_packet.c
-@@ -272,16 +272,16 @@ create_lq_tc(struct lq_tc_message *lq_tc
-     /* Queue the neighbour entry. */
--    // TODO: ugly hack until neighbor table is ported to avl tree
-+    // TODO: ugly hack until neighbor table is ported to olsrd_avl tree
--    if (lq_tc->neigh == NULL || avl_comp_default(&lq_tc->neigh->address, &neigh->address) > 0) {
-+    if (lq_tc->neigh == NULL || olsrd_avl_comp_default(&lq_tc->neigh->address, &neigh->address) > 0) {
-       neigh->next = lq_tc->neigh;
-       lq_tc->neigh = neigh;
-     } else {
-       struct tc_mpr_addr *last = lq_tc->neigh, *n = last->next;
-       while (n) {
--        if (avl_comp_default(&n->address, &neigh->address) > 0) {
-+        if (olsrd_avl_comp_default(&n->address, &neigh->address) > 0) {
-           break;
-         }
-         last = n;
---- a/src/lq_plugin.c
-+++ b/src/lq_plugin.c
-@@ -50,7 +50,7 @@
- #include "packet.h"
- #include "olsr.h"
- #include "two_hop_neighbor_table.h"
--#include "common/avl.h"
-+#include "common/olsrd_avl.h"
- #include "lq_plugin_default_float.h"
- #include "lq_plugin_default_fpm.h"
-@@ -64,17 +64,17 @@
- #include <assert.h>
- #include <math.h>
--struct avl_tree lq_handler_tree;
-+struct olsrd_avl_tree lq_handler_tree;
- struct lq_handler *active_lq_handler = NULL;
- /**
-- * case-insensitive string comparator for avl-trees
-+ * case-insensitive string comparator for olsrd_avl-trees
-  * @param str1
-  * @param str2
-  * @return
-  */
- int
--avl_strcasecmp(const void *str1, const void *str2)
-+olsrd_avl_strcasecmp(const void *str1, const void *str2)
- {
-   return strcasecmp(str1, str2);
- }
-@@ -88,7 +88,7 @@ activate_lq_handler(const char *name)
- {
-   struct lq_handler_node *node;
--  node = (struct lq_handler_node *)avl_find(&lq_handler_tree, name);
-+  node = (struct lq_handler_node *)olsrd_avl_find(&lq_handler_tree, name);
-   if (node == NULL) {
-     char buf[1024];
-     snprintf(buf, sizeof(buf), "Error, unknown lq_handler '%s'", name);
-@@ -106,7 +106,7 @@ activate_lq_handler(const char *name)
- void
- init_lq_handler_tree(void)
- {
--  avl_init(&lq_handler_tree, &avl_strcasecmp);
-+  olsrd_avl_init(&lq_handler_tree, &olsrd_avl_strcasecmp);
-   register_lq_handler(&lq_etx_float_handler, LQ_ALGORITHM_ETX_FLOAT_NAME);
-   register_lq_handler(&lq_etx_fpm_handler, LQ_ALGORITHM_ETX_FPM_NAME);
-   register_lq_handler(&lq_etx_ff_handler, LQ_ALGORITHM_ETX_FF_NAME);
-@@ -147,7 +147,7 @@ register_lq_handler(struct lq_handler *h
-   node->node.key = node->name;
-   node->handler = handler;
--  avl_insert(&lq_handler_tree, &node->node, false);
-+  olsrd_avl_insert(&lq_handler_tree, &node->node, false);
- }
- /**
---- a/src/lq_plugin.h
-+++ b/src/lq_plugin.h
-@@ -51,7 +51,7 @@
- #include "olsr_spf.h"
- #include "lq_packet.h"
- #include "packet.h"
--#include "common/avl.h"
-+#include "common/olsrd_avl.h"
- #define LINK_COST_BROKEN (1u<<22)
- #define ROUTE_COST_BROKEN (0xffffffffu)
-@@ -97,23 +97,23 @@ struct lq_handler {
- };
- struct lq_handler_node {
--  struct avl_node node;
-+  struct olsrd_avl_node node;
-   struct lq_handler *handler;
-   char name[0];
- };
--AVLNODE2STRUCT(lq_handler_tree2lq_handler_node, struct lq_handler_node, node);
-+OLSRD_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); \
-+  struct olsrd_avl_node *lq_tree_node, *next_lq_tree_node; \
-+  for (lq_tree_node = olsrd_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); \
-+    next_lq_tree_node = olsrd_avl_walk_next(lq_tree_node); \
-     lq = lq_handler_tree2lq_handler_node(lq_tree_node);
- #define OLSR_FOR_ALL_LQ_HANDLERS_END(tc) }}
--int avl_strcasecmp(const void *str1, const void *str2);
-+int olsrd_avl_strcasecmp(const void *str1, const void *str2);
- void init_lq_handler_tree(void);
- void register_lq_handler(struct lq_handler *handler, const char *name);
---- a/src/olsr.c
-+++ b/src/olsr.c
-@@ -65,7 +65,7 @@
- #include "neighbor_table.h"
- #include "log.h"
- #include "lq_packet.h"
--#include "common/avl.h"
-+#include "common/olsrd_avl.h"
- #include "net_olsr.h"
- #include "lq_plugin.h"
- #include "gateway.h"
-@@ -260,13 +260,13 @@ olsr_init_tables(void)
-   changes_neighborhood = false;
-   changes_hna = false;
--  /* Set avl tree comparator */
-+  /* Set olsrd_avl tree comparator */
-   if (olsr_cnf->ipsize == 4) {
--    avl_comp_default = avl_comp_ipv4;
--    avl_comp_prefix_default = avl_comp_ipv4_prefix;
-+    olsrd_avl_comp_default = olsrd_avl_comp_ipv4;
-+    olsrd_avl_comp_prefix_default = olsrd_avl_comp_ipv4_prefix;
-   } else {
--    avl_comp_default = avl_comp_ipv6;
--    avl_comp_prefix_default = avl_comp_ipv6_prefix;
-+    olsrd_avl_comp_default = olsrd_avl_comp_ipv6;
-+    olsrd_avl_comp_prefix_default = olsrd_avl_comp_ipv6_prefix;
-   }
-   /* Initialize lq plugin set */
---- a/src/olsr_spf.c
-+++ b/src/olsr_spf.c
-@@ -47,7 +47,7 @@
-  * Implementation of Dijkstras algorithm. Initially all nodes
-  * are initialized to infinite cost. First we put ourselves
-  * on the heap of reachable nodes. Our heap implementation
-- * is based on an AVL tree which gives interesting performance
-+ * is based on an OLSRD_AVL tree which gives interesting performance
-  * characteristics for the frequent operations of minimum key
-  * extraction and re-keying. Next all neighbors of a node are
-  * explored and put on the heap if the cost of reaching them is
-@@ -67,7 +67,7 @@
- #include "mid_set.h"
- #include "hna_set.h"
- #include "common/list.h"
--#include "common/avl.h"
-+#include "common/olsrd_avl.h"
- #include "olsr_spf.h"
- #include "net_olsr.h"
- #include "lq_plugin.h"
-@@ -80,7 +80,7 @@
- struct timer_entry *spf_backoff_timer = NULL;
- /*
-- * avl_comp_etx
-+ * olsrd_avl_comp_etx
-  *
-  * compare two etx metrics.
-  * return 0 if there is an exact match and
-@@ -89,7 +89,7 @@ struct timer_entry *spf_backoff_timer =
-  * after compiler optimization.
-  */
- static int
--avl_comp_etx(const void *etx1, const void *etx2)
-+olsrd_avl_comp_etx(const void *etx1, const void *etx2)
- {
-   if (*(const olsr_linkcost *)etx1 < *(const olsr_linkcost *)etx2) {
-     return -1;
-@@ -108,7 +108,7 @@ avl_comp_etx(const void *etx1, const voi
-  * Key an existing vertex to a candidate tree.
-  */
- static void
--olsr_spf_add_cand_tree(struct avl_tree *tree, struct tc_entry *tc)
-+olsr_spf_add_cand_tree(struct olsrd_avl_tree *tree, struct tc_entry *tc)
- {
- #if !defined(NODEBUG) && defined(DEBUG)
-   struct ipaddr_str buf;
-@@ -121,7 +121,7 @@ olsr_spf_add_cand_tree(struct avl_tree *
-               get_linkcost_text(tc->path_cost, true, &lqbuffer));
- #endif /* DEBUG */
--  avl_insert(tree, &tc->cand_tree_node, AVL_DUP);
-+  olsrd_avl_insert(tree, &tc->cand_tree_node, OLSRD_AVL_DUP);
- }
- /*
-@@ -130,7 +130,7 @@ olsr_spf_add_cand_tree(struct avl_tree *
-  * Unkey an existing vertex from a candidate tree.
-  */
- static void
--olsr_spf_del_cand_tree(struct avl_tree *tree, struct tc_entry *tc)
-+olsr_spf_del_cand_tree(struct olsrd_avl_tree *tree, struct tc_entry *tc)
- {
- #ifdef DEBUG
-@@ -142,7 +142,7 @@ olsr_spf_del_cand_tree(struct avl_tree *
-               get_linkcost_text(tc->path_cost, true, &lqbuffer));
- #endif /* DEBUG */
--  avl_delete(tree, &tc->cand_tree_node);
-+  olsrd_avl_delete(tree, &tc->cand_tree_node);
- }
- /*
-@@ -175,9 +175,9 @@ olsr_spf_add_path_list(struct list_node
-  * return the node with the minimum pathcost.
-  */
- static struct tc_entry *
--olsr_spf_extract_best(struct avl_tree *tree)
-+olsr_spf_extract_best(struct olsrd_avl_tree *tree)
- {
--  struct avl_node *node = avl_walk_first(tree);
-+  struct olsrd_avl_node *node = olsrd_avl_walk_first(tree);
-   return (node ? cand_tree2tc(node) : NULL);
- }
-@@ -190,9 +190,9 @@ olsr_spf_extract_best(struct avl_tree *t
-  * path cost is better.
-  */
- static void
--olsr_spf_relax(struct avl_tree *cand_tree, struct tc_entry *tc)
-+olsr_spf_relax(struct olsrd_avl_tree *cand_tree, struct tc_entry *tc)
- {
--  struct avl_node *edge_node;
-+  struct olsrd_avl_node *edge_node;
-   olsr_linkcost new_cost;
- #ifdef DEBUG
-@@ -207,7 +207,7 @@ olsr_spf_relax(struct avl_tree *cand_tre
-   /*
-    * loop through all edges of this vertex.
-    */
--  for (edge_node = avl_walk_first(&tc->edge_tree); edge_node; edge_node = avl_walk_next(edge_node)) {
-+  for (edge_node = olsrd_avl_walk_first(&tc->edge_tree); edge_node; edge_node = olsrd_avl_walk_next(edge_node)) {
-     struct tc_entry *new_tc;
-     struct tc_edge_entry *tc_edge = edge_tree2tc_edge(edge_node);
-@@ -289,7 +289,7 @@ olsr_spf_relax(struct avl_tree *cand_tre
-  * on the candidate tree.
-  */
- static void
--olsr_spf_run_full(struct avl_tree *cand_tree, struct list_node *path_list, int *path_count)
-+olsr_spf_run_full(struct olsrd_avl_tree *cand_tree, struct list_node *path_list, int *path_count)
- {
-   struct tc_entry *tc;
-@@ -335,8 +335,8 @@ olsr_calculate_routing_table(bool force)
- #ifdef SPF_PROFILING
-   struct timespec t1, t2, t3, t4, t5, spf_init, spf_run, route, kernel, total;
- #endif /* SPF_PROFILING */
--  struct avl_tree cand_tree;
--  struct avl_node *rtp_tree_node;
-+  struct olsrd_avl_tree cand_tree;
-+  struct olsrd_avl_node *rtp_tree_node;
-   struct list_node path_list;          /* head of the path_list */
-   struct tc_entry *tc;
-   struct rt_path *rtp;
-@@ -362,7 +362,7 @@ olsr_calculate_routing_table(bool force)
-   /*
-    * Prepare the candidate tree and result list.
-    */
--  avl_init(&cand_tree, avl_comp_etx);
-+  olsrd_avl_init(&cand_tree, olsrd_avl_comp_etx);
-   list_head_init(&path_list);
-   olsr_bump_routingtree_version();
-@@ -493,7 +493,7 @@ olsr_calculate_routing_table(bool force)
-      * If the prefix is already in the RIB, refresh the entry such
-      * that olsr_delete_outdated_routes() does not purge it off.
-      */
--    for (rtp_tree_node = avl_walk_first(&tc->prefix_tree); rtp_tree_node; rtp_tree_node = avl_walk_next(rtp_tree_node)) {
-+    for (rtp_tree_node = olsrd_avl_walk_first(&tc->prefix_tree); rtp_tree_node; rtp_tree_node = olsrd_avl_walk_next(rtp_tree_node)) {
-       rtp = rtp_prefix_tree2rtp(rtp_tree_node);
---- a/src/process_routes.c
-+++ b/src/process_routes.c
-@@ -48,7 +48,7 @@
- #include "olsr.h"
- #include "log.h"
- #include "kernel_routes.h"
--#include "common/avl.h"
-+#include "common/olsrd_avl.h"
- #include "net_olsr.h"
- #include "tc_set.h"
- #include "olsr_cookie.h"
-@@ -289,13 +289,13 @@ static void
- olsr_delete_outdated_routes(struct rt_entry *rt)
- {
-   struct rt_path *rtp;
--  struct avl_node *rtp_tree_node, *next_rtp_tree_node;
-+  struct olsrd_avl_node *rtp_tree_node, *next_rtp_tree_node;
--  for (rtp_tree_node = avl_walk_first(&rt->rt_path_tree); rtp_tree_node != NULL; rtp_tree_node = next_rtp_tree_node) {
-+  for (rtp_tree_node = olsrd_avl_walk_first(&rt->rt_path_tree); rtp_tree_node != NULL; rtp_tree_node = next_rtp_tree_node) {
-     /*
-      * pre-fetch the next node before loosing context.
-      */
--    next_rtp_tree_node = avl_walk_next(rtp_tree_node);
-+    next_rtp_tree_node = olsrd_avl_walk_next(rtp_tree_node);
-     rtp = rtp_tree2rtp(rtp_tree_node);
-@@ -305,7 +305,7 @@ olsr_delete_outdated_routes(struct rt_en
-      */
-     if (routingtree_version != rtp->rtp_version) {
-       /* remove from the originator tree */
--      avl_delete(&rt->rt_path_tree, rtp_tree_node);
-+      olsrd_avl_delete(&rt->rt_path_tree, rtp_tree_node);
-       rtp->rtp_rt = NULL;
-       if (rt->rt_best == rtp) {
-@@ -341,7 +341,7 @@ olsr_update_rib_routes(void)
-   
-       if (olsr_delete_kernel_route(rt) == 0) {
-         /*only remove if deletion was successful*/
--        avl_delete(&routingtree, &rt->rt_tree_node);
-+        olsrd_avl_delete(&routingtree, &rt->rt_tree_node);
-         olsr_cookie_free(rt_mem_cookie, rt);
-       }
-@@ -370,21 +370,21 @@ olsr_delete_interface_routes(int if_inde
-   OLSR_FOR_ALL_RT_ENTRIES(rt) {
-     bool mightTrigger = false;
-     struct rt_path *rtp;
--    struct avl_node *rtp_tree_node, *next_rtp_tree_node;
-+    struct olsrd_avl_node *rtp_tree_node, *next_rtp_tree_node;
-     /* run through all routing paths of route */
--    for (rtp_tree_node = avl_walk_first(&rt->rt_path_tree); rtp_tree_node != NULL; rtp_tree_node = next_rtp_tree_node) {
-+    for (rtp_tree_node = olsrd_avl_walk_first(&rt->rt_path_tree); rtp_tree_node != NULL; rtp_tree_node = next_rtp_tree_node) {
-       /*
-        * pre-fetch the next node before loosing context.
-        */
--      next_rtp_tree_node = avl_walk_next(rtp_tree_node);
-+      next_rtp_tree_node = olsrd_avl_walk_next(rtp_tree_node);
-       rtp = rtp_tree2rtp(rtp_tree_node);
-       /* nexthop use lost interface ? */
-       if (rtp->rtp_nexthop.iif_index == if_index) {
-         /* remove from the originator tree */
--        avl_delete(&rt->rt_path_tree, rtp_tree_node);
-+        olsrd_avl_delete(&rt->rt_path_tree, rtp_tree_node);
-         rtp->rtp_rt = NULL;
-         if (rt->rt_best == rtp) {
-@@ -397,7 +397,7 @@ olsr_delete_interface_routes(int if_inde
-     if (mightTrigger) {
-       if (!rt->rt_path_tree.count) {
-         /* oops, all routes are gone - flush the route head */
--        avl_delete(&routingtree, rt_tree_node);
-+        olsrd_avl_delete(&routingtree, rt_tree_node);
-         /* do not dequeue route because they are already gone */
-       }
---- a/src/routing_table.c
-+++ b/src/routing_table.c
-@@ -52,7 +52,7 @@
- #include "neighbor_table.h"
- #include "olsr.h"
- #include "link_set.h"
--#include "common/avl.h"
-+#include "common/olsrd_avl.h"
- #include "olsr_spf.h"
- #include "net_olsr.h"
-@@ -72,7 +72,7 @@ struct olsr_cookie_info *rtp_mem_cookie
- static struct rt_path *current_inetgw = NULL;
- /* Root of our RIB */
--struct avl_tree routingtree;
-+struct olsrd_avl_tree routingtree;
- /*
-  * Keep a version number for detecting outdated elements
-@@ -95,7 +95,7 @@ olsr_bump_routingtree_version(void)
- }
- /**
-- * avl_comp_ipv4_prefix
-+ * olsrd_avl_comp_ipv4_prefix
-  *
-  * compare two ipv4 prefixes.
-  * first compare the prefixes, then
-@@ -105,7 +105,7 @@ olsr_bump_routingtree_version(void)
-  * -1 / +1 depending on being smaller or bigger.
-  */
- int
--avl_comp_ipv4_prefix(const void *prefix1, const void *prefix2)
-+olsrd_avl_comp_ipv4_prefix(const void *prefix1, const void *prefix2)
- {
-   const struct olsr_ip_prefix *pfx1 = prefix1;
-   const struct olsr_ip_prefix *pfx2 = prefix2;
-@@ -132,7 +132,7 @@ avl_comp_ipv4_prefix(const void *prefix1
- }
- /**
-- * avl_comp_ipv6_prefix
-+ * olsrd_avl_comp_ipv6_prefix
-  *
-  * compare two ipv6 prefixes.
-  * first compare the prefixes, then
-@@ -142,7 +142,7 @@ avl_comp_ipv4_prefix(const void *prefix1
-  * -1 / +1 depending on being smaller or bigger.
-  */
- int
--avl_comp_ipv6_prefix(const void *prefix1, const void *prefix2)
-+olsrd_avl_comp_ipv6_prefix(const void *prefix1, const void *prefix2)
- {
-   int res;
-   const struct olsr_ip_prefix *pfx1 = prefix1;
-@@ -173,7 +173,7 @@ olsr_init_routing_table(void)
-   OLSR_PRINTF(5, "RIB: init routing tree\n");
-   /* the routing tree */
--  avl_init(&routingtree, avl_comp_prefix_default);
-+  olsrd_avl_init(&routingtree, olsrd_avl_comp_prefix_default);
-   routingtree_version = 0;
-   /*
-@@ -197,13 +197,13 @@ olsr_init_routing_table(void)
- struct rt_entry *
- olsr_lookup_routing_table(const union olsr_ip_addr *dst)
- {
--  struct avl_node *rt_tree_node;
-+  struct olsrd_avl_node *rt_tree_node;
-   struct olsr_ip_prefix prefix;
-   prefix.prefix = *dst;
-   prefix.prefix_len = olsr_cnf->maxplen;
--  rt_tree_node = avl_find(&routingtree, &prefix);
-+  rt_tree_node = olsrd_avl_find(&routingtree, &prefix);
-   return rt_tree_node ? rt_tree2rt(rt_tree_node) : NULL;
- }
-@@ -248,10 +248,10 @@ olsr_alloc_rt_entry(struct olsr_ip_prefi
-   rt->rt_dst = *prefix;
-   rt->rt_tree_node.key = &rt->rt_dst;
--  avl_insert(&routingtree, &rt->rt_tree_node, AVL_DUP_NO);
-+  olsrd_avl_insert(&routingtree, &rt->rt_tree_node, OLSRD_AVL_DUP_NO);
-   /* init the originator subtree */
--  avl_init(&rt->rt_path_tree, avl_comp_default);
-+  olsrd_avl_init(&rt->rt_path_tree, olsrd_avl_comp_default);
-   return rt;
- }
-@@ -276,7 +276,7 @@ olsr_alloc_rt_path(struct tc_entry *tc,
-   rtp->rtp_prefix_tree_node.key = &rtp->rtp_dst;
-   /* insert to the tc prefix tree */
--  avl_insert(&tc->prefix_tree, &rtp->rtp_prefix_tree_node, AVL_DUP_NO);
-+  olsrd_avl_insert(&tc->prefix_tree, &rtp->rtp_prefix_tree_node, OLSRD_AVL_DUP_NO);
-   olsr_lock_tc_entry(tc);
-   /* backlink to the owning tc entry */
-@@ -296,7 +296,7 @@ void
- olsr_insert_rt_path(struct rt_path *rtp, struct tc_entry *tc, struct link_entry *link)
- {
-   struct rt_entry *rt;
--  struct avl_node *node;
-+  struct olsrd_avl_node *node;
-   /*
-    * no unreachable routes please.
-@@ -315,7 +315,7 @@ olsr_insert_rt_path(struct rt_path *rtp,
-   /*
-    * first check if there is a route_entry for the prefix.
-    */
--  node = avl_find(&routingtree, &rtp->rtp_dst);
-+  node = olsrd_avl_find(&routingtree, &rtp->rtp_dst);
-   if (!node) {
-@@ -337,7 +337,7 @@ olsr_insert_rt_path(struct rt_path *rtp,
-   rtp->rtp_tree_node.key = &rtp->rtp_originator;
-   /* insert to the route entry originator tree */
--  avl_insert(&rt->rt_path_tree, &rtp->rtp_tree_node, AVL_DUP_NO);
-+  olsrd_avl_insert(&rt->rt_path_tree, &rtp->rtp_tree_node, OLSRD_AVL_DUP_NO);
-   /* backlink to the owning route entry */
-   rtp->rtp_rt = rt;
-@@ -356,13 +356,13 @@ olsr_delete_rt_path(struct rt_path *rtp)
-   /* remove from the originator tree */
-   if (rtp->rtp_rt) {
--    avl_delete(&rtp->rtp_rt->rt_path_tree, &rtp->rtp_tree_node);
-+    olsrd_avl_delete(&rtp->rtp_rt->rt_path_tree, &rtp->rtp_tree_node);
-     rtp->rtp_rt = NULL;
-   }
-   /* remove from the tc prefix tree */
-   if (rtp->rtp_tc) {
--    avl_delete(&rtp->rtp_tc->prefix_tree, &rtp->rtp_prefix_tree_node);
-+    olsrd_avl_delete(&rtp->rtp_tc->prefix_tree, &rtp->rtp_prefix_tree_node);
-     olsr_unlock_tc_entry(rtp->rtp_tc);
-     rtp->rtp_tc = NULL;
-   }
-@@ -498,14 +498,14 @@ void
- olsr_rt_best(struct rt_entry *rt)
- {
-   /* grab the first entry */
--  struct avl_node *node = avl_walk_first(&rt->rt_path_tree);
-+  struct olsrd_avl_node *node = olsrd_avl_walk_first(&rt->rt_path_tree);
-   assert(node != 0);            /* should not happen */
-   rt->rt_best = rtp_tree2rtp(node);
-   /* walk all remaining originator entries */
--  while ((node = avl_walk_next(node))) {
-+  while ((node = olsrd_avl_walk_next(node))) {
-     struct rt_path *rtp = rtp_tree2rtp(node);
-     if (olsr_cmp_rtp(rtp, rt->rt_best, current_inetgw)) {
-@@ -541,7 +541,7 @@ olsr_insert_routing_table(union olsr_ip_
- #endif /* DEBUG */
-   struct tc_entry *tc;
-   struct rt_path *rtp;
--  struct avl_node *node;
-+  struct olsrd_avl_node *node;
-   struct olsr_ip_prefix prefix;
-   /*
-@@ -567,7 +567,7 @@ olsr_insert_routing_table(union olsr_ip_
-   prefix.prefix = *dst;
-   prefix.prefix_len = plen;
--  node = avl_find(&tc->prefix_tree, &prefix);
-+  node = olsrd_avl_find(&tc->prefix_tree, &prefix);
-   if (!node) {
-@@ -604,7 +604,7 @@ olsr_delete_routing_table(union olsr_ip_
-   struct tc_entry *tc;
-   struct rt_path *rtp;
--  struct avl_node *node;
-+  struct olsrd_avl_node *node;
-   struct olsr_ip_prefix prefix;
-   /*
-@@ -625,7 +625,7 @@ olsr_delete_routing_table(union olsr_ip_
-   prefix.prefix = *dst;
-   prefix.prefix_len = plen;
--  node = avl_find(&tc->prefix_tree, &prefix);
-+  node = olsrd_avl_find(&tc->prefix_tree, &prefix);
-   if (node) {
-     rtp = rtp_prefix_tree2rtp(node);
-@@ -682,16 +682,16 @@ olsr_rtp_to_string(const struct rt_path
-  */
- #ifndef NODEBUG
- void
--olsr_print_routing_table(struct avl_tree *tree)
-+olsr_print_routing_table(struct olsrd_avl_tree *tree)
- {
-   /* The whole function makes no sense without it. */
--  struct avl_node *rt_tree_node;
-+  struct olsrd_avl_node *rt_tree_node;
-   struct lqtextbuffer lqbuffer;
-   OLSR_PRINTF(6, "ROUTING TABLE\n");
--  for (rt_tree_node = avl_walk_first(tree); rt_tree_node != NULL; rt_tree_node = avl_walk_next(rt_tree_node)) {
--    struct avl_node *rtp_tree_node;
-+  for (rt_tree_node = olsrd_avl_walk_first(tree); rt_tree_node != NULL; rt_tree_node = olsrd_avl_walk_next(rt_tree_node)) {
-+    struct olsrd_avl_node *rtp_tree_node;
-     struct ipaddr_str prefixstr, origstr, gwstr;
-     struct rt_entry *rt = rt_tree2rt(rt_tree_node);
-@@ -700,7 +700,7 @@ olsr_print_routing_table(struct avl_tree
-                 olsr_ip_to_string(&origstr, &rt->rt_nexthop.gateway), olsr_ip_to_string(&gwstr, &rt->rt_best->rtp_originator));
-     /* walk the per-originator path tree of routes */
--    for (rtp_tree_node = avl_walk_first(&rt->rt_path_tree); rtp_tree_node != NULL; rtp_tree_node = avl_walk_next(rtp_tree_node)) {
-+    for (rtp_tree_node = olsrd_avl_walk_first(&rt->rt_path_tree); rtp_tree_node != NULL; rtp_tree_node = olsrd_avl_walk_next(rtp_tree_node)) {
-       struct rt_path *rtp = rtp_tree2rtp(rtp_tree_node);
-       OLSR_PRINTF(6, "\tfrom %s, cost %s, metric %u, via %s, %s, v %u\n", olsr_ip_to_string(&origstr, &rtp->rtp_originator),
-                   get_linkcost_text(rtp->rtp_metric.cost, true, &lqbuffer), rtp->rtp_metric.hops, olsr_ip_to_string(&gwstr,
---- a/src/routing_table.h
-+++ b/src/routing_table.h
-@@ -54,7 +54,7 @@
- #include "hna_set.h"
- #include "link_set.h"
- #include "olsr_cookie.h"
--#include "common/avl.h"
-+#include "common/olsrd_avl.h"
- #include "common/list.h"
- #define NETMASK_HOST 0xffffffff
-@@ -81,15 +81,15 @@ struct rt_nexthop {
-  */
- struct rt_entry {
-   struct olsr_ip_prefix rt_dst;
--  struct avl_node rt_tree_node;
-+  struct olsrd_avl_node rt_tree_node;
-   struct rt_path *rt_best;             /* shortcut to the best path */
-   struct rt_nexthop rt_nexthop;        /* nexthop of FIB route */
-   struct rt_metric rt_metric;          /* metric of FIB route */
--  struct avl_tree rt_path_tree;
-+  struct olsrd_avl_tree rt_path_tree;
-   struct list_node rt_change_node;     /* queue for kernel FIB add/chg/del */
- };
--AVLNODE2STRUCT(rt_tree2rt, struct rt_entry, rt_tree_node);
-+OLSRD_AVLNODE2STRUCT(rt_tree2rt, struct rt_entry, rt_tree_node);
- LISTNODE2STRUCT(changelist2rt, struct rt_entry, rt_change_node);
- /*
-@@ -105,16 +105,16 @@ struct rt_path {
-   struct tc_entry *rtp_tc;             /* backpointer to owning tc entry */
-   struct rt_nexthop rtp_nexthop;
-   struct rt_metric rtp_metric;
--  struct avl_node rtp_tree_node;       /* global rtp node */
-+  struct olsrd_avl_node rtp_tree_node;       /* global rtp node */
-   union olsr_ip_addr rtp_originator;   /* originator of the route */
--  struct avl_node rtp_prefix_tree_node; /* tc entry rtp node */
-+  struct olsrd_avl_node rtp_prefix_tree_node; /* tc entry rtp node */
-   struct olsr_ip_prefix rtp_dst;       /* the prefix */
-   uint32_t rtp_version;                /* for detection of outdated rt_paths */
-   uint8_t rtp_origin;                  /* internal, MID or HNA */
- };
--AVLNODE2STRUCT(rtp_tree2rtp, struct rt_path, rtp_tree_node);
--AVLNODE2STRUCT(rtp_prefix_tree2rtp, struct rt_path, rtp_prefix_tree_node);
-+OLSRD_AVLNODE2STRUCT(rtp_tree2rtp, struct rt_path, rtp_tree_node);
-+OLSRD_AVLNODE2STRUCT(rtp_prefix_tree2rtp, struct rt_path, rtp_prefix_tree_node);
- /*
-  * In olsrd we have three different route types.
-@@ -143,10 +143,10 @@ enum olsr_rt_origin {
-  */
- #define OLSR_FOR_ALL_RT_ENTRIES(rt) \
- { \
--  struct avl_node *rt_tree_node, *next_rt_tree_node; \
--  for (rt_tree_node = avl_walk_first(&routingtree); \
-+  struct olsrd_avl_node *rt_tree_node, *next_rt_tree_node; \
-+  for (rt_tree_node = olsrd_avl_walk_first(&routingtree); \
-     rt_tree_node; rt_tree_node = next_rt_tree_node) { \
--    next_rt_tree_node = avl_walk_next(rt_tree_node); \
-+    next_rt_tree_node = olsrd_avl_walk_next(rt_tree_node); \
-     rt = rt_tree2rt(rt_tree_node);
- #define OLSR_FOR_ALL_RT_ENTRIES_END(rt) }}
-@@ -164,10 +164,10 @@ enum olsr_rt_origin {
-  */
- #define OLSR_FOR_ALL_HNA_RT_ENTRIES(rt) \
- { \
--  struct avl_node *rt_tree_node, *next_rt_tree_node; \
--  for (rt_tree_node = avl_walk_first(&routingtree); \
-+  struct olsrd_avl_node *rt_tree_node, *next_rt_tree_node; \
-+  for (rt_tree_node = olsrd_avl_walk_first(&routingtree); \
-     rt_tree_node; rt_tree_node = next_rt_tree_node) { \
--    next_rt_tree_node = avl_walk_next(rt_tree_node); \
-+    next_rt_tree_node = olsrd_avl_walk_next(rt_tree_node); \
-     rt = rt_tree2rt(rt_tree_node); \
-     if (rt->rt_best->rtp_origin != OLSR_RT_ORIGIN_HNA) \
-       continue;
-@@ -190,7 +190,7 @@ union olsr_kernel_route {
-   } v6;
- };
--extern struct avl_tree routingtree;
-+extern struct olsrd_avl_tree routingtree;
- extern unsigned int routingtree_version;
- extern struct olsr_cookie_info *rt_mem_cookie;
-@@ -198,8 +198,8 @@ void olsr_init_routing_table(void);
- unsigned int olsr_bump_routingtree_version(void);
--int avl_comp_ipv4_prefix(const void *, const void *);
--int avl_comp_ipv6_prefix(const void *, const void *);
-+int olsrd_avl_comp_ipv4_prefix(const void *, const void *);
-+int olsrd_avl_comp_ipv6_prefix(const void *, const void *);
- void olsr_rt_best(struct rt_entry *);
- bool olsr_nh_change(const struct rt_nexthop *, const struct rt_nexthop *);
-@@ -210,7 +210,7 @@ uint8_t olsr_fib_metric(const struct rt_
- char *olsr_rt_to_string(const struct rt_entry *);
- char *olsr_rtp_to_string(const struct rt_path *);
- #ifndef NODEBUG
--void olsr_print_routing_table(struct avl_tree *);
-+void olsr_print_routing_table(struct olsrd_avl_tree *);
- #else
- #define olsr_print_routing_table(x) do { } while(0)
- #endif
---- a/src/scheduler.c
-+++ b/src/scheduler.c
-@@ -51,7 +51,7 @@
- #include "net_os.h"
- #include "mpr_selector_set.h"
- #include "olsr_random.h"
--#include "common/avl.h"
-+#include "common/olsrd_avl.h"
- #include <sys/times.h>
-@@ -89,29 +89,29 @@ static void poll_sockets(void);
- static uint32_t calc_jitter(unsigned int rel_time, uint8_t jitter_pct, unsigned int random_val);
- static void olsr_cleanup_timer(struct timer_entry *timer);
--struct avl_tree timer_cleanup_tree;
-+struct olsrd_avl_tree timer_cleanup_tree;
- struct timer_cleanup_entry {
--  struct avl_node avl;
-+  struct olsrd_avl_node olsrd_avl;
-   struct timer_entry * timer;
- };
--/* static INLINE struct timer_cleanup_entry * node2timercleanup(struct avl_node *ptr) */
--AVLNODE2STRUCT(node2timercleanup, struct timer_cleanup_entry, avl);
-+/* static INLINE struct timer_cleanup_entry * node2timercleanup(struct olsrd_avl_node *ptr) */
-+OLSRD_AVLNODE2STRUCT(node2timercleanup, struct timer_cleanup_entry, olsrd_avl);
- /**
-  * Loop over all timer cleanup entries and put the iterated entry in timer
-  */
- #define OLSR_FOR_ALL_TIMERS_CLEANUP(timer) \
- { \
--  struct avl_node *timer_avl_node, *timer_avl_node_next; \
--  for (timer_avl_node = avl_walk_first(&timer_cleanup_tree); \
--  timer_avl_node; timer_avl_node = timer_avl_node_next) { \
--        timer_avl_node_next = avl_walk_next(timer_avl_node); \
--    timer = node2timercleanup(timer_avl_node);
-+  struct olsrd_avl_node *timer_olsrd_avl_node, *timer_olsrd_avl_node_next; \
-+  for (timer_olsrd_avl_node = olsrd_avl_walk_first(&timer_cleanup_tree); \
-+  timer_olsrd_avl_node; timer_olsrd_avl_node = timer_olsrd_avl_node_next) { \
-+        timer_olsrd_avl_node_next = olsrd_avl_walk_next(timer_olsrd_avl_node); \
-+    timer = node2timercleanup(timer_olsrd_avl_node);
- #define OLSR_FOR_ALL_TIMER_CLEANUP_END(timer) }}
--static int avl_comp_timer(const void *entry1, const void *entry2) {
-+static int olsrd_avl_comp_timer(const void *entry1, const void *entry2) {
-   if (entry1 < entry2) {
-     return -1;
-   }
-@@ -638,7 +638,7 @@ olsr_init_timers(void)
-   last_tv = first_tv;
-   now_times = olsr_times();
--  avl_init(&timer_cleanup_tree, avl_comp_timer);
-+  olsrd_avl_init(&timer_cleanup_tree, olsrd_avl_comp_timer);
-   for (idx = 0; idx < TIMER_WHEEL_SLOTS; idx++) {
-     list_head_init(&timer_wheel[idx]);
-@@ -760,7 +760,7 @@ static void walk_timers_cleanup(void) {
-   OLSR_FOR_ALL_TIMERS_CLEANUP(timer) {
-     olsr_cleanup_timer(timer->timer);
--    avl_delete(&timer_cleanup_tree, &timer->avl);
-+    olsrd_avl_delete(&timer_cleanup_tree, &timer->olsrd_avl);
-     free(timer);
-   } OLSR_FOR_ALL_TIMER_CLEANUP_END(slot)
- }
-@@ -969,9 +969,9 @@ olsr_stop_timer(struct timer_entry *time
-   {
-     struct timer_cleanup_entry * node = olsr_malloc(sizeof(struct timer_cleanup_entry), "timer cleanup entry");
--    node->avl.key = timer;
-+    node->olsrd_avl.key = timer;
-     node->timer = timer;
--    if (avl_insert(&timer_cleanup_tree, &node->avl, AVL_DUP_NO) == -1) {
-+    if (olsrd_avl_insert(&timer_cleanup_tree, &node->olsrd_avl, OLSRD_AVL_DUP_NO) == -1) {
-       /* duplicate */
-       free(node);
-     }
---- a/src/tc_set.c
-+++ b/src/tc_set.c
-@@ -50,7 +50,7 @@
- #include "olsr.h"
- #include "scheduler.h"
- #include "olsr_spf.h"
--#include "common/avl.h"
-+#include "common/olsrd_avl.h"
- #include "lq_packet.h"
- #include "net_olsr.h"
- #include "lq_plugin.h"
-@@ -61,7 +61,7 @@
- #include <assert.h>
- /* Root of the link state database */
--struct avl_tree tc_tree;
-+struct olsrd_avl_tree tc_tree;
- struct tc_entry *tc_myself;            /* Shortcut to ourselves */
- /* Some cookies for stats keeping */
-@@ -165,14 +165,14 @@ olsr_add_tc_entry(union olsr_ip_addr *ad
-   /*
-    * Insert into the global tc tree.
-    */
--  avl_insert(&tc_tree, &tc->vertex_node, AVL_DUP_NO);
-+  olsrd_avl_insert(&tc_tree, &tc->vertex_node, OLSRD_AVL_DUP_NO);
-   olsr_lock_tc_entry(tc);
-   /*
-    * Initialize subtrees for edges and prefixes.
-    */
--  avl_init(&tc->edge_tree, avl_comp_default);
--  avl_init(&tc->prefix_tree, avl_comp_prefix_default);
-+  olsrd_avl_init(&tc->edge_tree, olsrd_avl_comp_default);
-+  olsrd_avl_init(&tc->prefix_tree, olsrd_avl_comp_prefix_default);
-   /*
-    * Add a rt_path for ourselves.
-@@ -191,7 +191,7 @@ olsr_init_tc(void)
- {
-   OLSR_PRINTF(5, "TC: init topo\n");
--  avl_init(&tc_tree, avl_comp_default);
-+  olsrd_avl_init(&tc_tree, olsrd_avl_comp_default);
-   /*
-    * Get some cookies for getting stats to ease troubleshooting.
-@@ -308,7 +308,7 @@ olsr_delete_tc_entry(struct tc_entry *tc
-   olsr_stop_timer(tc->validity_timer);
-   tc->validity_timer = NULL;
--  avl_delete(&tc_tree, &tc->vertex_node);
-+  olsrd_avl_delete(&tc_tree, &tc->vertex_node);
-   olsr_unlock_tc_entry(tc);
- }
-@@ -321,9 +321,9 @@ olsr_delete_tc_entry(struct tc_entry *tc
- struct tc_entry *
- olsr_lookup_tc_entry(union olsr_ip_addr *adr)
- {
--  struct avl_node *node;
-+  struct olsrd_avl_node *node;
--  node = avl_find(&tc_tree, adr);
-+  node = olsrd_avl_find(&tc_tree, adr);
-   return (node ? vertex_tree2tc(node) : NULL);
- }
-@@ -454,7 +454,7 @@ olsr_add_tc_edge_entry(struct tc_entry *
-   /*
-    * Insert into the edge tree.
-    */
--  avl_insert(&tc->edge_tree, &tc_edge->edge_node, AVL_DUP_NO);
-+  olsrd_avl_insert(&tc->edge_tree, &tc_edge->edge_node, OLSRD_AVL_DUP_NO);
-   olsr_lock_tc_entry(tc);
-   /*
-@@ -515,7 +515,7 @@ olsr_delete_tc_edge_entry(struct tc_edge
- #endif /* DEBUG */
-   tc = tc_edge->tc;
--  avl_delete(&tc->edge_tree, &tc_edge->edge_node);
-+  olsrd_avl_delete(&tc->edge_tree, &tc_edge->edge_node);
-   olsr_unlock_tc_entry(tc);
-   /*
-@@ -572,7 +572,7 @@ olsr_delete_revoked_tc_edges(struct tc_e
-   OLSR_FOR_ALL_TC_EDGE_ENTRIES(tc, tc_edge) {
-     if (!passedLowerBorder) {
--      if (avl_comp_default(lower_border, &tc_edge->T_dest_addr) <= 0) {
-+      if (olsrd_avl_comp_default(lower_border, &tc_edge->T_dest_addr) <= 0) {
-         passedLowerBorder = true;
-       } else {
-         continue;
-@@ -580,7 +580,7 @@ olsr_delete_revoked_tc_edges(struct tc_e
-     }
-     if (passedLowerBorder) {
--      if (avl_comp_default(upper_border, &tc_edge->T_dest_addr) <= 0) {
-+      if (olsrd_avl_comp_default(upper_border, &tc_edge->T_dest_addr) <= 0) {
-         break;
-       }
-     }
-@@ -680,9 +680,9 @@ olsr_tc_update_edge(struct tc_entry *tc,
- struct tc_edge_entry *
- olsr_lookup_tc_edge(struct tc_entry *tc, union olsr_ip_addr *edge_addr)
- {
--  struct avl_node *edge_node;
-+  struct olsrd_avl_node *edge_node;
--  edge_node = avl_find(&tc->edge_tree, edge_addr);
-+  edge_node = olsrd_avl_find(&tc->edge_tree, edge_addr);
-   return (edge_node ? edge_tree2tc_edge(edge_node) : NULL);
- }
---- a/src/tc_set.h
-+++ b/src/tc_set.h
-@@ -48,7 +48,7 @@
- #include "defs.h"
- #include "packet.h"
--#include "common/avl.h"
-+#include "common/olsrd_avl.h"
- #include "common/list.h"
- #include "scheduler.h"
-@@ -60,7 +60,7 @@
-  */
- struct tc_edge_entry {
--  struct avl_node edge_node;           /* edge_tree node in tc_entry */
-+  struct olsrd_avl_node edge_node;           /* edge_tree node in tc_entry */
-   union olsr_ip_addr T_dest_addr;      /* edge_node key */
-   struct tc_edge_entry *edge_inv;      /* shortcut, used during SPF calculation */
-   struct tc_entry *tc;                 /* backpointer to owning tc entry */
-@@ -69,16 +69,16 @@ struct tc_edge_entry {
-   uint32_t linkquality[0];
- };
--AVLNODE2STRUCT(edge_tree2tc_edge, struct tc_edge_entry, edge_node);
-+OLSRD_AVLNODE2STRUCT(edge_tree2tc_edge, struct tc_edge_entry, edge_node);
- struct tc_entry {
--  struct avl_node vertex_node;         /* node keyed by ip address */
-+  struct olsrd_avl_node vertex_node;         /* node keyed by ip address */
-   union olsr_ip_addr addr;             /* vertex_node key */
--  struct avl_node cand_tree_node;      /* SPF candidate heap, node keyed by path_etx */
-+  struct olsrd_avl_node cand_tree_node;      /* SPF candidate heap, node keyed by path_etx */
-   olsr_linkcost path_cost;             /* SPF calculated distance, cand_tree_node key */
-   struct list_node path_list_node;     /* SPF result list */
--  struct avl_tree edge_tree;           /* subtree for edges */
--  struct avl_tree prefix_tree;         /* subtree for prefixes */
-+  struct olsrd_avl_tree edge_tree;           /* subtree for edges */
-+  struct olsrd_avl_tree prefix_tree;         /* subtree for prefixes */
-   struct link_entry *next_hop;         /* SPF calculated link to the 1st hop neighbor */
-   struct timer_entry *edge_gc_timer;   /* used for edge garbage collection */
-   struct timer_entry *validity_timer;  /* tc validity time */
-@@ -102,8 +102,8 @@ struct tc_entry {
- #define OLSR_TC_VTIME_JITTER 5          /* percent */
--AVLNODE2STRUCT(vertex_tree2tc, struct tc_entry, vertex_node);
--AVLNODE2STRUCT(cand_tree2tc, struct tc_entry, cand_tree_node);
-+OLSRD_AVLNODE2STRUCT(vertex_tree2tc, struct tc_entry, vertex_node);
-+OLSRD_AVLNODE2STRUCT(cand_tree2tc, struct tc_entry, cand_tree_node);
- LISTNODE2STRUCT(pathlist2tc, struct tc_entry, path_list_node);
- /*
-@@ -116,32 +116,32 @@ LISTNODE2STRUCT(pathlist2tc, struct tc_e
-  */
- #define OLSR_FOR_ALL_TC_ENTRIES(tc) \
- { \
--  struct avl_node *tc_tree_node, *next_tc_tree_node; \
--  for (tc_tree_node = avl_walk_first(&tc_tree); \
-+  struct olsrd_avl_node *tc_tree_node, *next_tc_tree_node; \
-+  for (tc_tree_node = olsrd_avl_walk_first(&tc_tree); \
-     tc_tree_node; tc_tree_node = next_tc_tree_node) { \
--    next_tc_tree_node = avl_walk_next(tc_tree_node); \
-+    next_tc_tree_node = olsrd_avl_walk_next(tc_tree_node); \
-     tc = vertex_tree2tc(tc_tree_node);
- #define OLSR_FOR_ALL_TC_ENTRIES_END(tc) }}
- #define OLSR_FOR_ALL_TC_EDGE_ENTRIES(tc, tc_edge) \
- { \
--  struct avl_node *tc_edge_node, *next_tc_edge_node; \
--  for (tc_edge_node = avl_walk_first(&tc->edge_tree); \
-+  struct olsrd_avl_node *tc_edge_node, *next_tc_edge_node; \
-+  for (tc_edge_node = olsrd_avl_walk_first(&tc->edge_tree); \
-     tc_edge_node; tc_edge_node = next_tc_edge_node) { \
--    next_tc_edge_node = avl_walk_next(tc_edge_node); \
-+    next_tc_edge_node = olsrd_avl_walk_next(tc_edge_node); \
-     tc_edge = edge_tree2tc_edge(tc_edge_node);
- #define OLSR_FOR_ALL_TC_EDGE_ENTRIES_END(tc, tc_edge) }}
- #define OLSR_FOR_ALL_PREFIX_ENTRIES(tc, rtp) \
- { \
--  struct avl_node *rtp_node, *next_rtp_node; \
--  for (rtp_node = avl_walk_first(&tc->prefix_tree); \
-+  struct olsrd_avl_node *rtp_node, *next_rtp_node; \
-+  for (rtp_node = olsrd_avl_walk_first(&tc->prefix_tree); \
-     rtp_node; rtp_node = next_rtp_node) { \
--    next_rtp_node = avl_walk_next(rtp_node); \
-+    next_rtp_node = olsrd_avl_walk_next(rtp_node); \
-     rtp = rtp_prefix_tree2rtp(rtp_node);
- #define OLSR_FOR_ALL_PREFIX_ENTRIES_END(tc, rtp) }}
--extern struct avl_tree tc_tree;
-+extern struct olsrd_avl_tree tc_tree;
- extern struct tc_entry *tc_myself;
- void olsr_init_tc(void);