[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