[Olsr-dev] Some problems found in olsrd code

Krzysztof Szuster (spam-protected)
Tue Feb 17 13:55:42 CET 2009

Hello all,
I;m working on a medium-distance IP-radio project. Having done some tests on 5-10 node networks I met some problems that may be errors in code or my misunderstending of how it should wark. My configuration is with ETX (LwLevel=2), I use "float" or "fpm" module to calculate ETX (I believe, both are functionally equal). My router has one radio interface with variable link speed. 

1. It seems to me, that the LinkQualityMult parameter in config file is wrongly used. I modified the set_loss_link_multiplier()  function as follows:
     * use the default multiplier only if there isn't any entry that
     * has a matching IP address.
    if ((ipequal(&mult->addr, &null_addr) && val == 0) ||  //KS was: < 0.0
	ipequal(&mult->addr, &entry->neighbor_iface_addr)) {
      val = mult->value;
I changed the condition (... < 0.0) to (...==0). Maybe (...<=0.0) is better?

2. Program crashes when the radio interface disappears. I cured the problem by adding a few lines into olsr_calculate_routing_table(). I'm not sure if this is sufficient but so far it works:

+     if (! link->inter) {
+ #ifdef DEBUG
+         OLSR_PRINTF(2, "Interface %s disappeared\n",
+         	link->if_name ? link->if_name : inet_ntoa (link->local_iface_addr.v4));
+ #endif
+       continue;
+     }
       * Now walk all prefixes advertised by that node.

3.There is a problem with timers. Once a few minutes a timer callback is not fired (delayed?). I detected it observing Lq's and found out, that Lq drops ocasionally. The reason was, that Hello was not sent. I don't understand the timer code well, but found a quick-and-dirty solution: set TIMER_WHEEL_SLOTS to 1 and all timers are fired as expected.

I hope it will be easy for authors to fix the problems.
Krzysztof Szuster

More information about the Olsr-dev mailing list