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

Joe Gio (spam-protected)
Fri Dec 21 16:53:04 CET 2007


Hannes Gredler wrote:
>
>
> 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