* applied http://gredler.at/download/olsrd/neighbor_routes3.diff
authorBernd Petrovitsch <bernd@firmix.at>
Tue, 16 Oct 2007 09:54:44 +0000 (09:54 +0000)
committerBernd Petrovitsch <bernd@firmix.at>
Tue, 16 Oct 2007 09:54:44 +0000 (09:54 +0000)
CHANGELOG
src/lq_route.c
src/routing_table.c
src/routing_table.h
src/tc_set.c
src/tc_set.h

index c8b794b..6f75d04 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,5 @@
 This file states changes as of version 0.2.4:
-$Id: CHANGELOG,v 1.97 2007/10/14 14:11:11 bernd67 Exp $
+$Id: CHANGELOG,v 1.98 2007/10/16 09:54:43 bernd67 Exp $
 
 0.5.4 ---------------------------------------------------------------------
 
@@ -73,6 +73,11 @@ non RT related stuff:
   improves the raw-SPF runtime.
 
 - add display of SPF runtime (masked behind #ifdef SPF_PROFILING)
+
+- http://gredler.at/download/olsrd/neighbor_routes3.diff: This updates the own
+  IP address (read: the main address) after changes (e.g. on
+  `ifup wlan0; sleep 1; ifdown wlan0`) and kills the
+  olsr_fill_routing_table_with_neighbors() function.
 ----  snip  ----
 And Sven-Ola Tuecke <mail2news@commando.de> fixed an instability issue on interface
 up/down operations (see 102-olsrd-rt-refactoring-fixes.patch below).
index 4d6c10b..f5c63d3 100644 (file)
@@ -38,7 +38,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: lq_route.c,v 1.52 2007/09/16 21:20:07 bernd67 Exp $
+ * $Id: lq_route.c,v 1.53 2007/10/16 09:54:43 bernd67 Exp $
  */
 
 #include "defs.h"
@@ -337,6 +337,7 @@ olsr_calculate_routing_table (void)
   /*
    * zero ourselves and add us to the candidate tree.
    */
+  olsr_change_myself_tc();
   tc_myself->path_etx = ZERO_ETX;
   olsr_spf_add_cand_tree(&cand_tree, tc_myself);
 
@@ -401,8 +402,6 @@ olsr_calculate_routing_table (void)
   gettimeofday(&t3, NULL);
 #endif
 
-  olsr_fill_routing_table_with_neighbors();
-
   /*
    * In the path tree we have all the reachable nodes in our topology.
    */
index f407891..f708b64 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * The olsr.org Optimized Link-State Routing daemon(olsrd)
- * Copyright (c) 2004, Andreas Tønnesen(andreto@olsr.org)
+ * Copyright (c) 2004, Andreas Tønnesen(andreto@olsr.org)
  * RIB implementation (c) 2007, Hannes Gredler (hannes@gredler.at)
  * All rights reserved.
  *
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: routing_table.c,v 1.31 2007/09/16 21:20:17 bernd67 Exp $
+ * $Id: routing_table.c,v 1.32 2007/10/16 09:54:43 bernd67 Exp $
  */
 
 #include "defs.h"
@@ -507,81 +507,6 @@ olsr_rtp_to_string(struct rt_path *rtp)
 }
 
 /**
- *Insert all the one hop neighbors in the routing table.
- *
- *@return
- */
-int
-olsr_fill_routing_table_with_neighbors(void)
-{
-  int index;
-  float etx;
-
-#ifdef DEBUG
-  OLSR_PRINTF(7, "FILL ROUTING TABLE WITH NEIGHBORS\n");
-#endif
-
-  for (index=0;index<HASHSIZE;index++) {
-
-    struct neighbor_entry *neighbor;
-
-    for(neighbor = neighbortable[index].next;
-        neighbor != &neighbortable[index];
-        neighbor=neighbor->next) {
-
-      if (neighbor->status == SYM) {
-
-        static struct mid_address addrs;
-        struct mid_address *addrs2;
-
-        /*
-         * Insert all the neighbors addresses
-         */
-        COPY_IP(&addrs.alias, &neighbor->neighbor_main_addr);
-        addrs.next_alias = mid_lookup_aliases(&neighbor->neighbor_main_addr);
-
-        for (addrs2 = &addrs; addrs2; addrs2 = addrs2->next_alias) {
-
-          struct link_entry *link;
-
-          link = get_best_link_to_neighbor(&addrs2->alias);
-
-#ifdef DEBUG
-          OLSR_PRINTF(7, "(ROUTE)Adding neighbor %s\n", olsr_ip_to_string(&addrs.alias));
-#endif
-          if (link) {
-
-            struct interface *iface;
-
-            iface = link->if_name ? if_ifwithname(link->if_name) :
-              if_ifwithaddr(&link->local_iface_addr);
-
-            etx = 1.0 / (link->loss_link_quality2 * link->neigh_link_quality2);
-
-            if (iface) {
-
-              /* neighbor main IP address */
-              olsr_insert_routing_table(&link->neighbor_iface_addr, olsr_cnf->maxplen,
-                                        &link->neighbor->neighbor_main_addr,
-                                        &link->neighbor_iface_addr,
-                                        iface->if_index, 1, etx);
-
-              /* this is the nexthop route that all routes will be tracking */
-              olsr_insert_routing_table(&addrs2->alias, olsr_cnf->maxplen,
-                                        &link->neighbor->neighbor_main_addr,
-                                        &link->neighbor_iface_addr,
-                                        iface->if_index, 1, etx);
-            }
-          }
-        }
-      }
-    }
-  }
-  return 1;
-}
-
-
-/**
  *Calculate the HNA routes
  *
  */
index 4841b35..1558d1c 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * The olsr.org Optimized Link-State Routing daemon(olsrd)
- * Copyright (c) 2004, Andreas Tønnesen(andreto@olsr.org)
+ * Copyright (c) 2004, Andreas Tønnesen(andreto@olsr.org)
  * RIB implementation (c) 2007, Hannes Gredler (hannes@gredler.at)
  * All rights reserved.
  *
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: routing_table.h,v 1.22 2007/09/16 21:20:17 bernd67 Exp $
+ * $Id: routing_table.h,v 1.23 2007/10/16 09:54:43 bernd67 Exp $
  */
 
 #ifndef _OLSR_ROUTING_TABLE
@@ -157,7 +157,6 @@ olsr_bool olsr_nh_change(struct rt_nexthop *, struct rt_nexthop *);
 olsr_bool olsr_cmp_rt(struct rt_entry *, struct rt_entry *);
 
 void olsr_calculate_hna_routes(void);
-int olsr_fill_routing_table_with_neighbors(void);
 char *olsr_rt_to_string(struct rt_entry *);
 char *olsr_rtp_to_string(struct rt_path *);
 void olsr_print_routing_table(struct avl_tree *);
index b94e727..3d49155 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * The olsr.org Optimized Link-State Routing daemon(olsrd)
- * Copyright (c) 2004, Andreas Tønnesen(andreto@olsr.org)
+ * Copyright (c) 2004, Andreas Tønnesen(andreto@olsr.org)
  * LSDB rewrite (c) 2007, Hannes Gredler (hannes@gredler.at)
  * All rights reserved.
  *
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: tc_set.c,v 1.30 2007/09/17 22:24:22 bernd67 Exp $
+ * $Id: tc_set.c,v 1.31 2007/10/16 09:54:43 bernd67 Exp $
  */
 
 #include "tc_set.h"
@@ -72,6 +72,39 @@ olsr_init_tc(void)
 }
 
 /**
+ * The main ip address has changed.
+ * Do the needful.
+ */
+void
+olsr_change_myself_tc(void)
+{
+  struct tc_edge_entry *tc_edge;
+
+  if (tc_myself) {
+
+    /*
+     * Check if there was a change.
+     */
+    if (COMP_IP(&tc_myself->addr, &olsr_cnf->main_addr)) {
+      return;
+    }
+
+    /*
+     * Flush all edges. This causes our own tc_entry to vanish.
+     */
+    OLSR_FOR_ALL_TC_EDGE_ENTRIES(tc_myself, tc_edge) {
+      olsr_delete_tc_edge_entry(tc_edge);
+    } OLSR_FOR_ALL_TC_EDGE_ENTRIES_END(tc_myself, tc_edge);
+  }
+
+  /*
+   * The old entry for ourselves is gone, generate a new one and trigger SPF.
+   */
+  tc_myself = olsr_add_tc_entry(&olsr_cnf->main_addr);
+  changes_topology = OLSR_TRUE;
+}
+
+/**
  * Delete a TC entry.
  *
  * @param entry the TC entry to delete
@@ -395,7 +428,7 @@ olsr_tc_delete_mprs(struct tc_entry *tc, struct tc_message *msg)
        * which causes an edge delete followed by an edge add.
        * If the edge gets refreshed in subsequent packets then we have
        * avoided a two edge transistion.
-       * If the edge really went away then after the garbace collection
+       * If the edge really went away then after the garbage collection
        * timer has expired olsr_time_out_tc_set() will do the needful.
        */
       tc_edge->flags |= OLSR_TC_EDGE_DOWN;
index 82f3f37..3f0261e 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * The olsr.org Optimized Link-State Routing daemon(olsrd)
- * Copyright (c) 2004, Andreas Tønnesen(andreto@olsr.org)
+ * Copyright (c) 2004, Andreas Tønnesen(andreto@olsr.org)
  * LSDB rewrite (c) 2007, Hannes Gredler (hannes@gredler.at)
  * All rights reserved.
  *
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: tc_set.h,v 1.17 2007/09/13 22:43:15 bernd67 Exp $
+ * $Id: tc_set.h,v 1.18 2007/10/16 09:54:44 bernd67 Exp $
  */
 
 #ifndef _OLSR_TOP_SET
@@ -116,6 +116,7 @@ extern struct avl_tree tc_tree;
 extern struct tc_entry *tc_myself;
 
 int olsr_init_tc(void);
+void olsr_change_myself_tc(void);
 int olsr_tc_delete_mprs(struct tc_entry *, struct tc_message *);
 int olsr_tc_update_mprs(struct tc_entry *, struct tc_message *);
 int olsr_print_tc_table(void);