* applied 114-olsrd-timeoutlimit.patch
authorBernd Petrovitsch <bernd@firmix.at>
Mon, 17 Sep 2007 22:24:22 +0000 (22:24 +0000)
committerBernd Petrovitsch <bernd@firmix.at>
Mon, 17 Sep 2007 22:24:22 +0000 (22:24 +0000)
14 files changed:
CHANGELOG
lib/nameservice/src/nameservice.c
lib/quagga/src/olsrd_plugin.c
lib/tas/src/plugin.c
src/duplicate_set.c
src/hna_set.c
src/link_set.c
src/main.c
src/mid_set.c
src/mpr_selector_set.c
src/neighbor_table.c
src/scheduler.c
src/scheduler.h
src/tc_set.c

index 9dfad00..78727e1 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,5 @@
 This file states changes as of version 0.2.4:
-$Id: CHANGELOG,v 1.90 2007/09/17 22:14:07 bernd67 Exp $
+$Id: CHANGELOG,v 1.91 2007/09/17 22:24:22 bernd67 Exp $
 
 0.5.4 ---------------------------------------------------------------------
 
@@ -129,8 +129,9 @@ http://download-master.berlin.freifunk.net/sven-ola/nylon/packages/olsrd/files/
   This patch was modified/clenaed up by <bernd@firmix.at> to use "#if"
   instead of "#ifdef" as it's more robust against typos.
 - 110-olsrd-fixpacketprint.patch, 112-olsrd-nameservice-fixemptyname.patch,
-  113-olsrd-txtinfo-fixhttpget.patch, 115-olsrd-nameserviceparamfix.patch
-  and 116-olsrd-fix-pluginparam-addons.patch fixing the compilation warning
+  113-olsrd-txtinfo-fixhttpget.patch, 114-olsrd-timeoutlimit.patch,
+  115-olsrd-nameserviceparamfix.patch and
+  116-olsrd-fix-pluginparam-addons.patch fixing the compilation warning
   on 64bit.
 
 PATCH by Arnd Hannemann <hannemann@i4.informatik.rwth-aachen.de>
index 86c6368..651d043 100644 (file)
@@ -31,7 +31,7 @@
  *
  */
 
-/* $Id: nameservice.c,v 1.30 2007/09/17 21:57:05 bernd67 Exp $ */
+/* $Id: nameservice.c,v 1.31 2007/09/17 22:24:22 bernd67 Exp $ */
 
 /*
  * Dynamic linked library for UniK OLSRd
@@ -379,7 +379,7 @@ name_init(void)
 
        /* register functions with olsrd */
        olsr_parser_add_function(&olsr_parser, PARSER_TYPE, 1);
-       olsr_register_timeout_function(&olsr_timeout);
+       olsr_register_timeout_function(&olsr_timeout, OLSR_TRUE);
        olsr_register_scheduler_event(&olsr_event, NULL, my_interval, 0, NULL);
 
        return 1;
@@ -481,18 +481,35 @@ free_all_list_entries(struct db_entry **this_db_list)
  * time out old list entries
  * and write changes to file
  */
+
+static int timeout_roundrobin = 0;
+
 void
 olsr_timeout(void)
 {
-       timeout_old_names(list, &name_table_changed);
-       timeout_old_names(forwarder_list, &forwarder_table_changed);
-       timeout_old_names(service_list, &service_table_changed);
-       timeout_old_names(latlon_list, &latlon_table_changed);
-
-       write_resolv_file();
-       write_hosts_file();
-       write_services_file();
-       write_latlon_file();
+       switch(timeout_roundrobin++)
+       {
+               case 0:
+                       timeout_old_names(list, &name_table_changed);
+                       timeout_old_names(forwarder_list, &forwarder_table_changed);
+                       timeout_old_names(service_list, &service_table_changed);
+                       timeout_old_names(latlon_list, &latlon_table_changed);
+                       break;
+               case 1:
+                       write_resolv_file(); // if forwarder_table_changed
+                       break;
+               case 2:
+                       write_hosts_file(); // if name_table_changed
+                       break;
+               case 3:
+                       write_services_file(); // if service_table_changed
+                       break;
+               case 4:
+                       write_latlon_file(); // latlon_table_changed
+                       break;
+               default:
+                       timeout_roundrobin = 0;
+       } // switch
 }
 
 void
index ff3e334..bef4457 100644 (file)
@@ -97,7 +97,6 @@ int olsrd_plugin_init() {
     return 1;
   }
 
-  //  olsr_register_timeout_function(&olsr_timeout);
   olsr_register_scheduler_event(&zebra_check, NULL, 1, 0, NULL);
   return 0;
 }
index 1f2b4e7..efda292 100644 (file)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: plugin.c,v 1.12 2007/09/13 15:31:59 bernd67 Exp $
+ * $Id: plugin.c,v 1.13 2007/09/17 22:24:22 bernd67 Exp $
  */
 
 #include <string.h>
@@ -453,7 +453,7 @@ int olsrd_plugin_init(void)
 
   httpInit();
   
-  olsr_register_timeout_function(serviceFunc);
+  olsr_register_timeout_function(serviceFunc, OLSR_FALSE);
   olsr_parser_add_function(parserFunc, MESSAGE_TYPE, 1);
 
   return 0;
index f327387..d76fad6 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: duplicate_set.c,v 1.15 2007/04/25 22:08:07 bernd67 Exp $
+ * $Id: duplicate_set.c,v 1.16 2007/09/17 22:24:22 bernd67 Exp $
  */
 
 
@@ -66,7 +66,7 @@ olsr_init_duplicate_table(void)
   /* Since the holdingtime is rather large for duplicate
    * entries the timeoutfunction is only ran every 2 seconds
    */
-  olsr_register_scheduler_event(&olsr_time_out_duplicate_table, NULL, 2, 0, NULL);
+  olsr_register_scheduler_event_dijkstra(&olsr_time_out_duplicate_table, NULL, 2, 0, NULL);
   
   for(i = 0; i < HASHSIZE; i++)
     {
index 8017bae..6ee803e 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: hna_set.c,v 1.21 2007/09/05 16:11:10 bernd67 Exp $
+ * $Id: hna_set.c,v 1.22 2007/09/17 22:24:22 bernd67 Exp $
  */
 
 #include "defs.h"
@@ -69,7 +69,7 @@ olsr_init_hna_set(void)
   /* Since the holdingtime is assumed to be rather large for 
    * HNA entries, the timeoutfunction is only ran once every second
    */
-  olsr_register_scheduler_event(&olsr_time_out_hna_set, NULL, 1, 0, NULL);
+  olsr_register_scheduler_event_dijkstra(&olsr_time_out_hna_set, NULL, 1, 0, NULL);
 
   for(idx=0;idx<HASHSIZE;idx++)
     {
index 24bb3e7..ccd9782 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: link_set.c,v 1.72 2007/09/16 21:45:25 bernd67 Exp $
+ * $Id: link_set.c,v 1.73 2007/09/17 22:24:22 bernd67 Exp $
  */
 
 
@@ -97,15 +97,15 @@ olsr_init_link_set(void)
   /* Timers */
   hold_time_neighbor = (NEIGHB_HOLD_TIME*1000) / olsr_cnf->system_tick_divider;
 
-  olsr_register_timeout_function(&olsr_time_out_link_set);
+  olsr_register_timeout_function(&olsr_time_out_link_set, OLSR_TRUE);
   if(olsr_cnf->use_hysteresis)
     {
-      olsr_register_timeout_function(&olsr_time_out_hysteresis);
+      olsr_register_timeout_function(&olsr_time_out_hysteresis, OLSR_TRUE);
     }
 
   if (olsr_cnf->lq_level > 0)
     {
-      olsr_register_timeout_function(&olsr_time_out_packet_loss);
+      olsr_register_timeout_function(&olsr_time_out_packet_loss, OLSR_TRUE);
     }
 }
 
index 331f94b..e2e08e5 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: main.c,v 1.99 2007/09/16 21:20:16 bernd67 Exp $
+ * $Id: main.c,v 1.100 2007/09/17 22:24:22 bernd67 Exp $
  */
 
 #include <unistd.h>
@@ -419,7 +419,7 @@ main(int argc, char *argv[])
 #endif
 
   /* Register socket poll event */
-  olsr_register_timeout_function(&poll_sockets);
+  olsr_register_timeout_function(&poll_sockets, OLSR_FALSE);
 
   /* Starting scheduler */
   scheduler();
index 3412748..07aaffc 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: mid_set.c,v 1.21 2007/08/02 21:50:22 bernd67 Exp $
+ * $Id: mid_set.c,v 1.22 2007/09/17 22:24:22 bernd67 Exp $
  */
 
 #include "defs.h"
@@ -69,7 +69,7 @@ olsr_init_mid_set(void)
   /* Since the holdingtime is assumed to be rather large for 
    * MID entries, the timeoutfunction is only ran once every second
    */
-  olsr_register_scheduler_event(&olsr_time_out_mid_set, NULL, 1, 0, NULL);
+  olsr_register_scheduler_event_dijkstra(&olsr_time_out_mid_set, NULL, 1, 0, NULL);
 
   for(idx=0;idx<HASHSIZE;idx++)
     {
index bc2755d..b6daabb 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: mpr_selector_set.c,v 1.17 2007/04/25 22:08:09 bernd67 Exp $
+ * $Id: mpr_selector_set.c,v 1.18 2007/09/17 22:24:22 bernd67 Exp $
  */
 
 
@@ -61,7 +61,7 @@ olsr_init_mprs_set(void)
   /* Initial values */
   ansn = 0;
 
-  olsr_register_timeout_function(&olsr_time_out_mprs_set);
+  olsr_register_timeout_function(&olsr_time_out_mprs_set, OLSR_TRUE);
   
   mprs_list.next = &mprs_list;
   mprs_list.prev = &mprs_list;
index 085731e..8154cfd 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: neighbor_table.c,v 1.33 2007/08/02 21:57:06 bernd67 Exp $
+ * $Id: neighbor_table.c,v 1.34 2007/09/17 22:24:22 bernd67 Exp $
  */
 
 
@@ -60,7 +60,7 @@ olsr_init_neighbor_table(void)
 {
   int i;
 
-  olsr_register_timeout_function(&olsr_time_out_neighborhood_tables);
+  olsr_register_timeout_function(&olsr_time_out_neighborhood_tables, OLSR_TRUE);
   for(i = 0; i < HASHSIZE; i++)
     {
       neighbortable[i].next = &neighbortable[i];
index a5793c2..9d2c485 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: scheduler.c,v 1.42 2007/08/19 23:00:21 bernd67 Exp $
+ * $Id: scheduler.c,v 1.43 2007/09/17 22:24:22 bernd67 Exp $
  */
 
 
@@ -326,7 +326,7 @@ olsr_remove_scheduler_event(void (*event_function)(void *),
       if((entry->function == event_function) &&
         (entry->param == par) &&
         (entry->trigger == trigger) &&
-        (entry->interval == interval))
+        (0.0 > interval || entry->interval == interval))
        {
          if(entry == event_functions)
            {
@@ -347,12 +347,48 @@ olsr_remove_scheduler_event(void (*event_function)(void *),
   return 0;
 }
 
+/*
+ * Sven-Ola, 2007: Since the original timing and flagging is changed (which
+ * saves lots of CPU time - see LinkQualityDijkstraLimit) the original timeout
+ * functions called every olsr_cnf->polltime uses too much CPU now. Because the
+ * changes_xxx handling is switched off with LQDL, it should be OK to call
+ * all timeout handlers at a much lower rate. To overcome UDP packet loss,
+ * a very low pollrate is used.
+ */
+
+static float dijkstra_initial = 0.0;
 
 int
-olsr_register_timeout_function(void (*time_out_function)(void))
+olsr_register_scheduler_event_dijkstra(void (*event_function)(void *), 
+                             void *par,
+                             float interval, 
+                             float initial, 
+                             olsr_u8_t *trigger)
+{
+  if (1 < olsr_cnf->lq_level && 0.0 < olsr_cnf->lq_dinter)
+  {
+    dijkstra_initial += olsr_cnf->lq_dinter / 10.0;
+    return olsr_register_scheduler_event(event_function, par, olsr_cnf->lq_dinter, dijkstra_initial, trigger);
+  }
+  return olsr_register_scheduler_event(event_function, par, interval, initial, trigger);
+}
+
+int
+olsr_register_timeout_function(void (*time_out_function)(void), olsr_bool dijkstra_limit_ok)
 {
   struct timeout_entry *new_entry;
 
+  if (dijkstra_limit_ok && 1 < olsr_cnf->lq_level && 0.0 < olsr_cnf->lq_dinter)
+  {
+    dijkstra_initial += olsr_cnf->lq_dinter / 10.0;
+    return olsr_register_scheduler_event(
+      (void *)time_out_function,
+      NULL,
+      olsr_cnf->lq_dinter,
+      dijkstra_initial,
+      NULL);
+  }
+  
   /* check that this entry is not added already */
   new_entry = timeout_functions;
   while(new_entry)
@@ -379,10 +415,20 @@ olsr_register_timeout_function(void (*time_out_function)(void))
 
 
 int
-olsr_remove_timeout_function(void (*time_out_function)(void))
+olsr_remove_timeout_function(void (*time_out_function)(void), olsr_bool dijkstra_limit_ok)
 {
   struct timeout_entry *entry, *prev;
 
+  if (dijkstra_limit_ok && 1 < olsr_cnf->lq_level && 0.0 < olsr_cnf->lq_dinter)
+  {
+    return olsr_remove_scheduler_event(
+      (void *)time_out_function,
+      NULL,
+      -1.0,
+      -1.0,
+      NULL);
+  }
+  
   /* check that this entry is not added already */
   entry = timeout_functions;
   prev = NULL;
index 938f9ee..bb7a9c6 100644 (file)
@@ -36,7 +36,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: scheduler.h,v 1.13 2007/04/20 13:46:04 bernd67 Exp $
+ * $Id: scheduler.h,v 1.14 2007/09/17 22:24:22 bernd67 Exp $
  */
 
 
@@ -72,10 +72,13 @@ void
 signal_link_changes(olsr_bool);
 
 int
-olsr_register_timeout_function(void (*)(void));
+olsr_register_timeout_function(void (*)(void), olsr_bool);
 
 int
-olsr_remove_timeout_function(void (*)(void));
+olsr_remove_timeout_function(void (*)(void), olsr_bool);
+
+int
+olsr_register_scheduler_event_dijkstra(void (*)(void *), void *, float, float, olsr_u8_t *);
 
 int
 olsr_register_scheduler_event(void (*)(void *), void *, float, float, olsr_u8_t *);
index 3113af1..b94e727 100644 (file)
@@ -37,7 +37,7 @@
  * to the project. For more information see the website or contact
  * the copyright holders.
  *
- * $Id: tc_set.c,v 1.29 2007/09/13 22:43:15 bernd67 Exp $
+ * $Id: tc_set.c,v 1.30 2007/09/17 22:24:22 bernd67 Exp $
  */
 
 #include "tc_set.h"
@@ -60,7 +60,7 @@ olsr_init_tc(void)
 {
   OLSR_PRINTF(5, "TC: init topo\n");
 
-  olsr_register_timeout_function(&olsr_time_out_tc_set);
+  olsr_register_timeout_function(&olsr_time_out_tc_set, OLSR_TRUE);
 
   avl_init(&tc_tree, avl_comp_default);