openwrt-routing/olsrd/patches/100-rename-avl-to-olsrd_avl...

3378 lines
97 KiB
Diff

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);