[Olsr-dev] olsrd-0.5.4 LinkQualityLevel 2, TcRedundancy 0

Hannes Gredler (spam-protected)
Fri Dec 21 20:22:26 CET 2007


hi joe,

not good ... your patch is against 0.5.4 .... a lot has changed meanwhile.
here is a tarball of the current HEAD:

http://olsrd.sourceforge.net/hg/olsrd/archive/dd8e2172ae2c.tar.gz

can you incorporate your change there and fix things ?

/hannes


>>>> Joe Gio wrote:
>>>>> Hi,
>>>>>
>>>>> I have been working with olsrd-0.5.4 and have noticed with 
>>>>> LinkQualityLevel set to 2 and TcRedundancy set to 0 that in an all 
>>>>> informed network no routes are added to the routing table.
>>>>>
>>>>> In lq_route.c the nodes are not added to the candidate tree in 
>>>>> olsr_spf_relax since there only a forward edge and no inverse edge 
>>>>> for the 1 hop neighbors. This also effects the A  --- B --- C 
>>>>> scenario where "B" the mpr will send out an lq_tc message including 
>>>>> "A" and "C" but neither "A" or "C" will have an inverse edge for 
>>>>> the other.
>>>>>
>>>>> Looking back at olsrd-0.5.3 it looks that when a forward edge is 
>>>>> created an inverse edge is also created without receiving an lq_tc 
>>>>> message.
>>>>
>>>> this is undesired, i.e. a bug ... - /hannes
>>>>
>>> I've add the following to olsr_calculate_routing_table to help with 
>>> the all informed scenario but still need to run with TcRedundancy set 
>>> to 1 for multihop.
>>>
>>> #if 1
>>>  for (i = 0; i < HASHSIZE; i++)
>>>    for (neigh = neighbortable[i].next; neigh != &neighbortable[i];
>>>         neigh = neigh->next) {
>>>
>>>      if (neigh->status == SYM) {
>>>         struct tc_entry *tc_neighbor = 
>>> olsr_lookup_tc_entry(&neigh->neighbor_main_addr);
>>>         struct tc_edge_entry *tc_edge_neighbor;
>>>
>>>         // add vertex
>>>         if (!tc_neighbor) {
>>>            tc_neighbor = olsr_add_tc_entry(&neigh->neighbor_main_addr);
>>>         }
>>>
>>>         tc_edge_neighbor = olsr_lookup_tc_edge(tc_neighbor, 
>>> &olsr_cnf->main_addr);
>>>         link = get_best_link_to_neighbor(&neigh->neighbor_main_addr);
>>>
>>>         if (!link) {
>>>           if (tc_edge_neighbor) {
>>>             olsr_delete_tc_edge_entry(tc_edge_neighbor);
>>>           }
>>>           continue;
>>>         }
>>>
>>>         // add edge from neighbor to us
>>>         if (!tc_edge_neighbor) {
>>>           tc_edge_neighbor = olsr_add_tc_edge_entry(tc_neighbor, 
>>> &olsr_cnf->main_addr,
>>>                                           0, OLSR_TC_EDGE_GC_TIME / 
>>> 1000.0,
>>>                                           link->loss_link_quality,
>>>                                           link->neigh_link_quality);
>>>         } else {
>>>           tc_edge_neighbor->link_quality = link->loss_link_quality;
>>>           tc_edge_neighbor->inverse_link_quality = 
>>> link->neigh_link_quality;
>>>           olsr_calc_tc_edge_entry_etx(tc_edge_neighbor);
>>>           olsr_set_tc_edge_timer(tc_edge_neighbor, 
>>> OLSR_TC_EDGE_GC_TIME);
>>>         }
>>>      }
>>>   }
>>> #endif
>>>
>>>
>>> Regards
>>> JoeGio
>>>
>>
> 




More information about the Olsr-dev mailing list