Create a new ANSN if the detected link loss changes by more than 10
authorThomas Lopatic <thomas@lopatic.de>
Wed, 10 Nov 2004 14:07:48 +0000 (14:07 +0000)
committerThomas Lopatic <thomas@lopatic.de>
Wed, 10 Nov 2004 14:07:48 +0000 (14:07 +0000)
percent. Add routes to all interfaces of a node.

src/link_set.c
src/lq_route.c

index 488290d..758afd9 100644 (file)
@@ -19,7 +19,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * 
  * 
- * $Id: link_set.c,v 1.24 2004/11/10 12:35:30 tlopatic Exp $
+ * $Id: link_set.c,v 1.25 2004/11/10 14:07:48 tlopatic Exp $
  *
  */
 
@@ -1005,6 +1005,13 @@ static void update_packet_loss_worker(struct link_entry *entry, int lost)
     {
       changes_neighborhood = OLSR_TRUE;
       changes_topology = OLSR_TRUE;
+
+      // create a new ANSN
+
+      // XXX - we should check whether we actually
+      // announce this neighbour
+
+      changes = OLSR_TRUE;
     }
 }
 
index 2df696c..bd9c8bb 100644 (file)
@@ -18,7 +18,7 @@
  * along with olsr.org; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- * $Id: lq_route.c,v 1.4 2004/11/08 01:51:29 tlopatic Exp $
+ * $Id: lq_route.c,v 1.5 2004/11/10 14:07:48 tlopatic Exp $
  *
  */
 
@@ -28,6 +28,7 @@
 #include "neighbor_table.h"
 #include "link_set.h"
 #include "routing_table.h"
+#include "mid_set.h"
 #include "lq_list.h"
 #include "lq_route.h"
 
@@ -278,6 +279,7 @@ void olsr_calculate_lq_routing_table(void)
   struct dijk_vertex *myself;
   struct dijk_vertex *walker;
   int hops;
+  struct addresses *mid_walker;
 
   // initialize the graph
 
@@ -359,50 +361,32 @@ void olsr_calculate_lq_routing_table(void)
 
   olsr_move_route_table(routingtable, old_routes);
 
-  for (i = 0; i < 2; i++)
-  {
-    node = list_get_head(&vertex_list);
-
-    // we're the first vertex in the list
-
-    myself = node->data;
-
-    node = list_get_next(node);
-
-    // loop through the remaining vertices
-
-    while (node != NULL)
-    {
-      vert = node->data;
+  node = list_get_head(&vertex_list);
 
-      // one-hop neighbours go first
+  // we're the first vertex in the list
+  
+  myself = node->data;
 
-      if (i == 0 && vert->prev == myself)
-        olsr_insert_routing_table(&vert->addr, &vert->addr, 1);
+  for (node = list_get_next(node); node != NULL; node = list_get_next(node))
+  {
+    vert = node->data;
 
-      // add everybody else in the second pass
+    hops = 1;
 
-      if (i == 1)
-      {
-        hops = 1;
-        walker = vert;
+    // count hops to until we have reached a one-hop neighbour
 
-        // count hops to until a one-hop neighbour is reached
+    for (walker = vert; walker->prev != myself; walker = walker->prev)
+      hops++;
 
-        while (walker->prev != myself)
-        {
-          hops++;
-          walker = walker->prev;
-        }
+    // add a route to the main address of the destination node
 
-        // add, if this is not a one-hop neighbour
+    olsr_insert_routing_table(&vert->addr, &walker->addr, hops);
 
-        if (hops > 1)
-          olsr_insert_routing_table(&vert->addr, &walker->addr, hops);
-      }
+    // add routes to the remaining interfaces of the destination node
 
-      node = list_get_next(node);
-    }
+    for (mid_walker = mid_lookup_aliases(&vert->addr); mid_walker != NULL;
+         mid_walker = mid_walker->next)
+      olsr_insert_routing_table(&mid_walker->address, &walker->addr, hops);
   }
 
   // free the graph