Cleanup for avl_insert()
authorHenning Rogge <hrogge@googlemail.com>
Tue, 22 Sep 2009 18:46:46 +0000 (20:46 +0200)
committerHenning Rogge <hrogge@googlemail.com>
Tue, 22 Sep 2009 18:46:46 +0000 (20:46 +0200)
16 files changed:
lib/debuginfo/src/olsrd_debuginfo.c
src/common/avl.c
src/common/avl.h
src/hna_set.c
src/interfaces.c
src/mid_set.c
src/neighbor_table.c
src/net_olsr.c
src/olsr_comport_http.c
src/olsr_comport_txt.c
src/olsr_cookie.c
src/olsr_spf.c
src/olsr_types.h
src/plugin_loader.c
src/routing_table.c
src/tc_set.c

index 4d369f1..287388d 100644 (file)
@@ -219,7 +219,7 @@ static struct debug_msgtraffic *get_msgtraffic_entry(union olsr_ip_addr *ip) {
     memcpy(&tr->ip, ip, sizeof(union olsr_ip_addr));
     tr->node.key = &tr->ip;
 
-    avl_insert(&stat_msg_tree, &tr->node, AVL_DUP_NO);
+    avl_insert(&stat_msg_tree, &tr->node, false);
   }
   return tr;
 }
@@ -235,7 +235,7 @@ static struct debug_pkttraffic *get_pkttraffic_entry(union olsr_ip_addr *ip, str
 
     tr->int_name = strdup(in ? in->int_name : "---");
 
-    avl_insert(&stat_pkt_tree, &tr->node, AVL_DUP_NO);
+    avl_insert(&stat_pkt_tree, &tr->node, false);
   }
   return tr;
 }
index 049679c..e0b6ad4 100644 (file)
@@ -78,6 +78,21 @@ int avl_comp_strcasecmp(const void *txt1, const void *txt2) {
   return strcasecmp(txt1, txt2);
 }
 
+int avl_comp_int(const void *p1, const void *p2) {
+  const int *i1 = p1, *i2 = p2;
+  return *i1 - *i2;
+}
+
+int avl_comp_interface_id(const void *p1, const void *p2) {
+  const struct olsr_interface_id *id1 = p1, *id2 = p2;
+  int diff;
+
+  diff = olsr_ipcmp(&id1->ip, &id2->ip);
+  if (diff != 0)
+    return diff;
+  return (int)(id1->if_index) - (int)(id2->if_index);
+}
+
 void
 avl_init(struct avl_tree *tree, avl_tree_comp comp)
 {
@@ -286,7 +301,7 @@ avl_remove(struct avl_tree *tree, struct avl_node *node)
 }
 
 int
-avl_insert(struct avl_tree *tree, struct avl_node *new, int allow_duplicates)
+avl_insert(struct avl_tree *tree, struct avl_node *new, bool allow_duplicates)
 {
   struct avl_node *node;
   struct avl_node *last;
@@ -339,7 +354,7 @@ avl_insert(struct avl_tree *tree, struct avl_node *new, int allow_duplicates)
     last = last->next;
 
   if (diff == 0) {
-    if (allow_duplicates == AVL_DUP_NO)
+    if (!allow_duplicates)
       return -1;
 
     new->leader = 0;
index 5adca5c..cf287b0 100644 (file)
@@ -66,12 +66,9 @@ struct avl_tree {
   avl_tree_comp comp;
 };
 
-#define AVL_DUP    1
-#define AVL_DUP_NO 0
-
 void EXPORT(avl_init)(struct avl_tree *, avl_tree_comp);
 struct avl_node *EXPORT(avl_find) (struct avl_tree *, const void *);
-int EXPORT(avl_insert)(struct avl_tree *, struct avl_node *, int);
+int EXPORT(avl_insert)(struct avl_tree *, struct avl_node *, bool);
 void EXPORT(avl_delete)(struct avl_tree *, struct avl_node *);
 
 static INLINE struct avl_node *
@@ -125,6 +122,8 @@ 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 *);
 extern int avl_comp_strcasecmp(const void *, const void *);
+extern int avl_comp_int(const void *, const void *);
+extern int avl_comp_interface_id(const void *, const void *);
 
 /*
  * Macro to define an inline function to map from a list_node offset back to the
index 17fa8e5..e36e806 100644 (file)
@@ -108,7 +108,7 @@ olsr_add_hna_net(struct tc_entry *tc, const struct olsr_ip_prefix *prefix)
    * Insert into the per-tc hna subtree.
    */
   new_net->hna_tc_node.key = &new_net->hna_prefix;
-  avl_insert(&tc->hna_tree, &new_net->hna_tc_node, AVL_DUP_NO);
+  avl_insert(&tc->hna_tree, &new_net->hna_tc_node, false);
 
   return new_net;
 }
index 0befdd8..2c0fe72 100644 (file)
@@ -152,7 +152,7 @@ static void add_lost_interface_ip(union olsr_ip_addr *ip, uint32_t hello_timeout
   lost->node.key = &lost->ip;
   lost->ip = *ip;
   lost->valid_until = olsr_getTimestamp(hello_timeout * 2);
-  avl_insert(&interface_lost_tree, &lost->node, AVL_DUP_NO);
+  avl_insert(&interface_lost_tree, &lost->node, false);
 
   OLSR_DEBUG(LOG_INTERFACE, "Added %s to lost interface list for %d ms\n",
       olsr_ip_to_string(&buf, ip), hello_timeout*2);
index 64a6de6..320f176 100644 (file)
@@ -258,13 +258,13 @@ olsr_insert_mid_entry(const union olsr_ip_addr *main_addr,
    * Insert into the per-tc mid subtree.
    */
   alias->mid_tc_node.key = &alias->mid_alias_addr;
-  avl_insert(&tc->mid_tree, &alias->mid_tc_node, AVL_DUP_NO);
+  avl_insert(&tc->mid_tree, &alias->mid_tc_node, false);
 
   /*
    * Insert into the global mid tree.
    */
   alias->mid_node.key = &alias->mid_alias_addr;
-  avl_insert(&mid_tree, &alias->mid_node, AVL_DUP_NO);
+  avl_insert(&mid_tree, &alias->mid_node, false);
 
   /*
    * Add a rt_path for the alias.
index 24ecff1..56b9e69 100644 (file)
@@ -125,7 +125,7 @@ olsr_add_nbr_entry(const union olsr_ip_addr *addr)
 
   /* Add to the global neighbor tree */
   nbr->nbr_node.key = &nbr->nbr_addr;
-  avl_insert(&nbr_tree, &nbr->nbr_node, AVL_DUP_NO);
+  avl_insert(&nbr_tree, &nbr->nbr_node, false);
 
   return nbr;
 }
@@ -273,7 +273,7 @@ olsr_add_nbr2_entry(const union olsr_ip_addr *addr) {
 
   /* Add to global neighbor 2 tree */
   nbr2->nbr2_node.key = &nbr2->nbr2_addr;
-  avl_insert(&nbr2_tree, &nbr2->nbr2_node, AVL_DUP_NO);
+  avl_insert(&nbr2_tree, &nbr2->nbr2_node, false);
 
   return nbr2;
 }
@@ -362,8 +362,8 @@ olsr_link_nbr_nbr2(struct nbr_entry *nbr, const union olsr_ip_addr *nbr2_addr, u
   connector->nbr_tree_node.key = &nbr2->nbr2_addr;
   connector->nbr2_tree_node.key = &nbr->nbr_addr;
 
-  avl_insert(&nbr->con_tree, &connector->nbr_tree_node, AVL_DUP_NO);
-  avl_insert(&nbr2->con_tree, &connector->nbr2_tree_node, AVL_DUP_NO);
+  avl_insert(&nbr->con_tree, &connector->nbr_tree_node, false);
+  avl_insert(&nbr2->con_tree, &connector->nbr2_tree_node, false);
 
   connector->path_linkcost = LINK_COST_BROKEN;
 
index 562dfea..f53023f 100644 (file)
@@ -403,7 +403,7 @@ olsr_add_invalid_address(const union olsr_ip_addr *addr)
 
   filter->filter_addr = *addr;
   filter->filter_node.key = &filter->filter_addr;
-  avl_insert(&filter_tree, &filter->filter_node, AVL_DUP_NO);
+  avl_insert(&filter_tree, &filter->filter_node, false);
 
   OLSR_INFO(LOG_NETWORKING, "Added %s to filter set\n", olsr_ip_to_string(&buf, &filter->filter_addr));
 }
index 45b276b..4238ca5 100644 (file)
@@ -144,7 +144,7 @@ olsr_com_add_htmlsite(char *path, char *content, size_t length) {
   site->site_data = content;
   site->site_length = length;
 
-  avl_insert(&http_handler_tree, &site->node, AVL_DUP_NO);
+  avl_insert(&http_handler_tree, &site->node, false);
   return site;
 }
 
@@ -159,7 +159,7 @@ olsr_com_add_htmlhandler(void(*sitehandler)(struct comport_connection *con, char
   site->static_site = false;
   site->sitehandler = sitehandler;
 
-  avl_insert(&http_handler_tree, &site->node, AVL_DUP_NO);
+  avl_insert(&http_handler_tree, &site->node, false);
   return site;
 }
 
index 37b41fd..5370ce6 100644 (file)
@@ -150,7 +150,7 @@ olsr_com_add_normal_txtcommand (const char *command, olsr_txthandler handler) {
   txt->node.key = strdup(command);
   txt->handler = handler;
 
-  avl_insert(&txt_normal_tree, &txt->node, AVL_DUP_NO);
+  avl_insert(&txt_normal_tree, &txt->node, false);
   return txt;
 }
 
@@ -162,7 +162,7 @@ olsr_com_add_help_txtcommand (const char *command, olsr_txthandler handler) {
   txt->node.key = strdup(command);
   txt->handler = handler;
 
-  avl_insert(&txt_help_tree, &txt->node, AVL_DUP_NO);
+  avl_insert(&txt_help_tree, &txt->node, false);
   return txt;
 }
 
index c3d8a54..40c0bc7 100644 (file)
@@ -87,7 +87,7 @@ olsr_alloc_cookie(const char *cookie_name, olsr_cookie_type cookie_type)
     ci->ci_membrand = 0;
   }
 
-  avl_insert(&olsr_cookie_tree, &ci->node, AVL_DUP);
+  avl_insert(&olsr_cookie_tree, &ci->node, true);
   return ci;
 }
 
index ca52aee..3e2e119 100644 (file)
@@ -89,7 +89,7 @@ olsr_spf_add_cand_tree(struct avl_tree *tree, struct tc_entry *tc)
   OLSR_DEBUG(LOG_ROUTING, "SPF: insert candidate %s, cost %s\n",
              olsr_ip_to_string(&buf, &tc->addr), olsr_get_linkcost_text(tc->path_cost, false, lqbuffer, sizeof(lqbuffer)));
 
-  avl_insert(tree, &tc->cand_tree_node, AVL_DUP);
+  avl_insert(tree, &tc->cand_tree_node, true);
 }
 
 /*
index 0a9c962..7d00c84 100644 (file)
@@ -102,6 +102,11 @@ struct olsr_ip_prefix {
   uint8_t prefix_origin;
 };
 
+struct olsr_interface_id {
+  union olsr_ip_addr ip;
+  uint32_t if_index;
+};
+
 typedef uint32_t olsr_linkcost;
 
 #endif
index a238a9f..21ece27 100644 (file)
@@ -80,7 +80,7 @@ olsr_hookup_plugin(struct olsr_plugin *pl_def) {
     plugin_tree_initialized = true;
   }
   pl_def->p_node.key = strdup(pl_def->name);
-  avl_insert(&plugin_tree, &pl_def->p_node, AVL_DUP_NO);
+  avl_insert(&plugin_tree, &pl_def->p_node, false);
 }
 
 struct olsr_plugin *olsr_get_plugin(const char *libname) {
@@ -210,7 +210,7 @@ olsr_load_legacy_plugin(const char *libname, void *dlhandle) {
   /* get parameters */
   get_plugin_parameters(&plugin->internal_param, &plugin->internal_param_cnt);
 
-  avl_insert(&plugin_tree, &plugin->p_node, AVL_DUP_NO);
+  avl_insert(&plugin_tree, &plugin->p_node, false);
   return plugin;
 }
 
index 6bcf18a..46c0dca 100644 (file)
@@ -343,7 +343,7 @@ olsr_alloc_rt_entry(struct olsr_ip_prefix *prefix)
   rt->rt_dst = *prefix;
 
   rt->rt_tree_node.key = &rt->rt_dst;
-  avl_insert(&routingtree, &rt->rt_tree_node, AVL_DUP_NO);
+  avl_insert(&routingtree, &rt->rt_tree_node, false);
 
   /* init the originator subtree */
   avl_init(&rt->rt_path_tree, avl_comp_addr_origin_default);
@@ -372,7 +372,7 @@ olsr_alloc_rt_path(struct tc_entry *tc, struct olsr_ip_prefix *prefix, uint8_t o
   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);
+  avl_insert(&tc->prefix_tree, &rtp->rtp_prefix_tree_node, false);
   olsr_lock_tc_entry(tc);
 
   /* backlink to the owning tc entry */
@@ -441,7 +441,7 @@ olsr_insert_rt_path(struct rt_path *rtp, struct tc_entry *tc, struct link_entry
    * Insert to the route entry originator tree
    * The key has been initialized in olsr_alloc_rt_path().
    */
-  avl_insert(&rt->rt_path_tree, &rtp->rtp_tree_node, AVL_DUP_NO);
+  avl_insert(&rt->rt_path_tree, &rtp->rtp_tree_node, false);
 
   /* backlink to the owning route entry */
   rtp->rtp_rt = rt;
index ea7691b..db85796 100644 (file)
@@ -108,7 +108,7 @@ olsr_add_tc_entry(const union olsr_ip_addr *adr)
   /*
    * Insert into the global tc tree.
    */
-  avl_insert(&tc_tree, &tc->vertex_node, AVL_DUP_NO);
+  avl_insert(&tc_tree, &tc->vertex_node, false);
   olsr_lock_tc_entry(tc);
 
   /*
@@ -406,7 +406,7 @@ olsr_add_tc_edge_entry(struct tc_entry *tc, union olsr_ip_addr *addr, uint16_t a
    * However we need duplicate key support for the case of local
    * parallel links where we add one tc_edge per link_entry.
    */
-  avl_insert(&tc->edge_tree, &tc_edge->edge_node, AVL_DUP);
+  avl_insert(&tc->edge_tree, &tc_edge->edge_node, true);
   olsr_lock_tc_entry(tc);
 
   /*