[Olsr-dev] process unspec. link quality information

Peter Tarjan (spam-protected)
Tue Mar 31 16:43:44 CEST 2009


I've downloaded, compiled and tested the recently released OLSRd version 0
In most situations it worked perfeclty, but olsrd behaved not as I expected
in the following scenario:
- two computers (A and B) having 1 and 2 network cards (respectively)
involved in routing algorithm;
- the packets from A to B arriving on B's 1st interface are dropped
(asymmetric link emulation), while packets received on B's 2nd interface are
accepted and processed.

A -> B/1 dropped
A -> B/2, B/1 -> A, B/2 -> A - OK.

In this situation A measures two perfect links (ETX=1), even from B/1, so
the A -> B/1 neighbor link quality is considered flawless.
I think I found its cause: we got link quality information from our
neighbours, but we memorize it even if it is marked as UNSPECIFIED.

The unexpected behaviour can be fixed by the following patch:

--- a/src/process_package.c    2009-03-31 16:12:14.215112467 +0200
+++ b/src/process_package.c    2009-03-31 16:13:05.643112066 +0200
@@ -424,7 +424,9 @@

@@ -424,7 +424,9 @@

     /* find the input interface in the list of neighbor interfaces */
     for (walker = message->neighbors; walker != NULL; walker =
-      if (ipequal(&walker->address, &in_if->ip_addr))
+      if (ipequal(&walker->address, &in_if->ip_addr)  &&
+            walker->link != UNSPEC_LINK)

     // memorize our neighbour's idea of the link quality, so that we

Péter Tarján
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.olsr.org/pipermail/olsr-dev/attachments/20090331/c13f390f/attachment.html>

More information about the Olsr-dev mailing list