Bugfix for Link quality dijkstra limit OLSRD_0_5_6_RC2
authorHenning Rogge <rogge@fgan.de>
Mon, 12 May 2008 18:08:10 +0000 (20:08 +0200)
committerHenning Rogge <rogge@fgan.de>
Mon, 12 May 2008 18:08:10 +0000 (20:08 +0200)
src/cfgparser/olsrd_conf.c
src/lq_route.c
src/lq_route.h
src/olsr.c
src/olsr.h

index 4e205da..7ee2454 100644 (file)
@@ -234,6 +234,12 @@ olsrd_sanity_check_cnf(struct olsrd_config *cnf)
        }
     }
 
+  /* Check Link quality dijkstra limit */
+  if (olsr_cnf->lq_dinter < cnf->pollrate && olsr_cnf->lq_dlimit != 255) {
+       fprintf(stderr, "Link quality dijkstra limit must be higher than pollrate\n");
+       return -1;
+  }
+  
   /* Pollrate */
 
   if(cnf->pollrate < MIN_POLLRATE ||
index 9795815..fd4c487 100644 (file)
@@ -316,7 +316,7 @@ olsr_expire_spf_backoff(void *context __attribute__((unused)))
 }
 
 void
-olsr_calculate_routing_table (void *context __attribute__((unused)))
+olsr_calculate_routing_table (void)
 {
 #ifdef SPF_PROFILING
   struct timeval t1, t2, t3, t4, t5, spf_init, spf_run, route, kernel, total;
index 8aaba2d..1ce225b 100644 (file)
@@ -41,6 +41,6 @@
 #ifndef _LQ_ROUTE_H
 #define _LQ_ROUTE_H
 
-void olsr_calculate_routing_table(void *);
+void olsr_calculate_routing_table(void);
 
 #endif
index 5407958..65ac6b3 100644 (file)
@@ -169,7 +169,7 @@ olsr_process_changes(void)
 
   /* calculate the routing table */
   if (changes_neighborhood || changes_topology || changes_hna) {
-    olsr_calculate_routing_table(NULL);
+    olsr_calculate_routing_table();
   }
   
   if (olsr_cnf->debug_level > 0)
@@ -211,9 +211,20 @@ olsr_process_changes(void)
   changes_force = OLSR_FALSE;
 }
 
+/*
+ * Callback for the periodic route calculation.
+ */
+void
+olsr_trigger_forced_update(void *unused __attribute__((unused))) {
 
+  changes_force = OLSR_TRUE;
 
-
+  changes_neighborhood = OLSR_TRUE;
+  changes_topology = OLSR_TRUE;
+  changes_hna = OLSR_TRUE;
+  
+  olsr_process_changes();
+}
 
 /**
  *Initialize all the tables used(neighbor,
@@ -266,7 +277,7 @@ olsr_init_tables(void)
   /* Start periodic SPF and RIB recalculation */
   if (olsr_cnf->lq_dinter > 0.0) {
     olsr_start_timer((unsigned int)(olsr_cnf->lq_dinter * MSEC_PER_SEC), 5,
-                     OLSR_TIMER_PERIODIC, &olsr_calculate_routing_table, NULL, 0);
+                     OLSR_TIMER_PERIODIC, &olsr_trigger_forced_update, NULL, 0);
   }
 }
 
index 46856d9..6f9b168 100644 (file)
@@ -99,4 +99,7 @@ olsr_malloc(size_t, const char *);
 int
 olsr_printf(int, const char *, ...) __attribute__((format(printf,2,3)));
 
+void
+olsr_trigger_forced_update(void *);
+
 #endif