Merged with olsrd development tree
authorHenning Rogge <rogge@fgan.de>
Mon, 21 Apr 2008 06:41:20 +0000 (08:41 +0200)
committerHenning Rogge <rogge@fgan.de>
Mon, 21 Apr 2008 06:41:20 +0000 (08:41 +0200)
1  2 
src/lq_route.c
src/tc_set.c
src/tc_set.h

diff --combined src/lq_route.c
@@@ -105,7 -105,6 +105,6 @@@ olsr_spf_add_cand_tree (struct avl_tre
    struct lqtextbuffer lqbuffer;
  #endif
    tc->cand_tree_node.key = &tc->path_cost;
-   tc->cand_tree_node.data = tc;
  
  #ifdef DEBUG
    OLSR_PRINTF(2, "SPF: insert candidate %s, cost %s\n",
@@@ -152,7 -151,6 +151,6 @@@ olsr_spf_add_path_list (struct list_nod
    struct ipaddr_str pathbuf, nbuf;
    struct lqtextbuffer lqbuffer;
  #endif
-   tc->path_list_node.data = tc;
  
  #ifdef DEBUG
    OLSR_PRINTF(2, "SPF: append path %s, cost %s, via %s\n",
@@@ -176,7 -174,7 +174,7 @@@ olsr_spf_extract_best (struct avl_tree 
  {
    struct avl_node *node = avl_walk_first(tree);
  
-   return (node ? node->data :  NULL);
+   return (node ? cand_tree2tc(node) :  NULL);
  }
  
  
@@@ -211,7 -209,7 +209,7 @@@ olsr_spf_relax (struct avl_tree *cand_t
         edge_node = avl_walk_next(edge_node)) {
  
      struct tc_entry *new_tc;
-     struct tc_edge_entry *tc_edge = edge_node->data;
+     struct tc_edge_entry *tc_edge = edge_tree2tc_edge(edge_node);
  
      /*
       * We are not interested in dead-end or dying edges.
  #ifdef DEBUG
        OLSR_PRINTF(2, "SPF:   ignoring edge %s\n",
                    olsr_ip_to_string(&buf, &tc_edge->T_dest_addr));
 +      if (!tc_edge->edge_inv) {
 +        OLSR_PRINTF(2, "SPF:     no inverse edge\n");
 +      }
 +      
        if (tc_edge->flags & OLSR_TC_EDGE_DOWN) {
          OLSR_PRINTF(2, "SPF:     edge down\n");
        }
@@@ -448,7 -442,7 +446,7 @@@ olsr_calculate_routing_table (void *con
     */
    for (; !list_is_empty(&path_list); list_remove(path_list.next)) {
  
-     tc = path_list.next->data;
+     tc = pathlist2tc(path_list.next);
      link = tc->next_hop;
  
      if (!link) {
           rtp_tree_node;
           rtp_tree_node = avl_walk_next(rtp_tree_node)) {
  
-       rtp = rtp_tree_node->data;
+       rtp = rtp_tree2rtp(rtp_tree_node);
  
        if (rtp->rtp_rt) {
  
diff --combined src/tc_set.c
@@@ -138,7 -138,6 +138,6 @@@ olsr_add_tc_entry(union olsr_ip_addr *a
  
    /* Fill entry */
    tc->addr = *adr;
-   tc->vertex_node.data = tc;
    tc->vertex_node.key = &tc->addr;
  
    /*
@@@ -255,11 -254,7 +254,7 @@@ olsr_lookup_tc_entry(union olsr_ip_add
  
    node = avl_find(&tc_tree, adr);
  
-   if (node) {
-     return node->data;
-   }
-   return NULL;
+   return (node ? vertex_tree2tc(node) : NULL);
  }
  
  /*
@@@ -373,7 -368,6 +368,6 @@@ olsr_add_tc_edge_entry(struct tc_entry 
    tc_edge->T_dest_addr = *addr;
    olsr_set_tc_edge_timer(tc_edge, vtime*1000);
    tc_edge->T_seq = ansn;
-   tc_edge->edge_node.data = tc_edge;
    tc_edge->edge_node.key = &tc_edge->T_dest_addr;
    
    /*
@@@ -615,11 -609,7 +609,7 @@@ olsr_lookup_tc_edge(struct tc_entry *tc
  
    edge_node = avl_find(&tc->edge_tree, edge_addr);
  
-   if (edge_node) {
-     return edge_node->data;
-   }
-   return NULL;
+   return (edge_node ? edge_tree2tc_edge(edge_node) : NULL);
  }
  
  /**
@@@ -634,9 -624,9 +624,9 @@@ olsr_print_tc_table(void
    const int ipwidth = olsr_cnf->ip_version == AF_INET ? 15 : 30;
  
    OLSR_PRINTF(1, "\n--- %s ------------------------------------------------- TOPOLOGY\n\n"
 -              "%-*s %-*s %-5s  %-5s  %s %s\n",
 +              "%-*s %-*s %-14s  %s\n",
                olsr_wallclock_string(),
 -              ipwidth, "Source IP addr", ipwidth, "Dest IP addr", "LQ", "ILQ", "ETX", "UP");
 +              ipwidth, "Source IP addr", ipwidth, "Dest IP addr", "      LQ      ", "ETX");
  
    OLSR_FOR_ALL_TC_ENTRIES(tc) {
      struct tc_edge_entry *tc_edge;
        struct ipaddr_str addrbuf, dstaddrbuf;
        struct lqtextbuffer lqbuffer1, lqbuffer2;
        
 -      if (!(tc_edge->flags & OLSR_TC_EDGE_DOWN)) {
 -        OLSR_PRINTF(1, "%-*s %-*s  (%-10s) %s\n",
 +      if ((tc_edge->flags & OLSR_TC_EDGE_DOWN) == 0) {
 +        OLSR_PRINTF(1, "%-*s %-*s %-14s  %s\n",
                      ipwidth, olsr_ip_to_string(&addrbuf, &tc->addr),
                      ipwidth, olsr_ip_to_string(&dstaddrbuf, &tc_edge->T_dest_addr),
                      get_tc_edge_entry_text(tc_edge, &lqbuffer1),
diff --combined src/tc_set.h
@@@ -68,6 -68,8 +68,8 @@@ struct tc_edge_entr
    char               linkquality[0];
  };
  
+ AVLNODE2STRUCT(edge_tree2tc_edge, struct tc_edge_entry, edge_node);
  #define OLSR_TC_EDGE_DOWN (1 << 0) /* this edge is down */
  #define OLSR_TC_EDGE_JITTER 5 /* percent */
  
@@@ -95,6 -97,10 +97,10 @@@ struct tc_entr
    olsr_bool          err_seq_valid; /* do we have an error (unplauible seq/ansn) */
  };
  
+ AVLNODE2STRUCT(vertex_tree2tc, struct tc_entry, vertex_node);
+ AVLNODE2STRUCT(cand_tree2tc, struct tc_entry, cand_tree_node);
+ LISTNODE2STRUCT(pathlist2tc, struct tc_entry, path_list_node);
  /*
   * macros for traversing vertices, edges and prefixes in the link state database.
   * it is recommended to use this because it hides all the internal
    for (tc_tree_node = 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); \
-     tc = tc_tree_node->data;
+     tc = vertex_tree2tc(tc_tree_node);
  #define OLSR_FOR_ALL_TC_ENTRIES_END(tc) }}
  
  #define OLSR_FOR_ALL_TC_EDGE_ENTRIES(tc, tc_edge) \
    for (tc_edge_node = 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); \
-     tc_edge = tc_edge_node->data;
+     tc_edge = edge_tree2tc_edge(tc_edge_node);
  #define OLSR_FOR_ALL_TC_EDGE_ENTRIES_END(tc, tc_edge) }}
  
  extern struct avl_tree tc_tree;
@@@ -148,7 -154,6 +154,7 @@@ void olsr_delete_tc_entry(struct tc_ent
  void olsr_delete_tc_edge_entry(struct tc_edge_entry *);
  olsr_bool olsr_calc_tc_edge_entry_etx(struct tc_edge_entry *);
  void olsr_set_tc_edge_timer(struct tc_edge_entry *, unsigned int);
 +// static olsr_bool olsr_etx_significant_change(float, float);
  
  #endif