[Olsr-users] OLSR 0.6.5.2 QUAGGA plugin but does not export all routes to QUAGGA

Ros Molodyko (spam-protected)
Fri Apr 5 21:17:25 CEST 2013


Hello Saverio, 

thank you for the fast response.

   I use QUAGGA 0.99.21mr2.2 with the OLSR patch from Vasilis (zebra_rib.c file required manual porting since MDR is slightly different from the baseline of QUAGGA)

   Also I modified the OLSR indicator in the lib/route_types.txt from "o" to "l" to distinguish it from OSPF6:
===========================================================
ZEBRA_ROUTE_OSPF6,      ospf6,     ospf6d, 'o', 1, 1, "OSPF6"
ZEBRA_ROUTE_OLSR,       olsr,      olsrd,  'l', 1, 1, "OLSR"
===========================================================

   I guess I found one bug in the olsr-quagga plugin, one potential bug (or feature?) in the QUAGGA patch, and one potential solution.

   The first bug is the not supported parameter "ExportRoutes" "both" in the olsr-quagga plugin.
   The second potential bug is the route type in the QUAGGA patch.

   I ran show "ip route olsr" and got nothing, all routes from OLSR cluster were "kernel ones":

=============================================
# "10.0.0.0/32, PlParam "ExportRoutes" "both"

n1# show ip route olsr 
n1# show ip route kernel 
Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, o - OSPF6, I - IS-IS, B - BGP, H - HSLS,
       l - OLSR, b - BATMAN, A - Babel,
       > - selected route, * - FIB route

K * 10.0.0.2/32 via 10.0.0.2, eth0 inactive
K * 10.0.0.3/32 via 10.0.0.3, eth0 inactive
K * 10.0.0.4/32 via 10.0.0.3, eth0 inactive
K * 10.0.0.5/32 via 10.0.0.3, eth0 inactive
K * 10.0.0.6/32 via 10.0.0.6, eth0 inactive
K * 10.0.0.7/32 via 10.0.0.7, eth0 inactive
K * 10.0.0.8/32 via 10.0.0.2, eth0 inactive 
=============================================

   So OLSR exported routes as "kernel", that's why "redistribute olsr" command 
in the OSPF configuration did not work! Neither "redistribute kernel" worked because of "inactive" status of routes. (For the network 10.0.0.0/24 only directly connected nodes 
had inactive route status, so "redistribute kernel" injected few routes to QUAGGA).

   Only when I changed the "ExportRoutes" to "only" OLSR exported routes as "olsr".

=============================================
# "10.0.0.0/32, PlParam "ExportRoutes" "only"

n1# show ip route kernel 
n1# show ip route olsr
Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, o - OSPF6, I - IS-IS, B - BGP, H - HSLS,
       l - OLSR, b - BATMAN, A - Babel,
       > - selected route, * - FIB route

l>* 10.0.0.2/32 [125/1] is directly connected, eth0, 00:01:07
l>* 10.0.0.3/32 [125/1] is directly connected, eth0, 00:01:06
l>  10.0.0.4/32 [125/2] via 10.0.0.3, eth0, 00:00:57
l>  10.0.0.5/32 [125/2] via 10.0.0.3, eth0, 00:01:00
l>* 10.0.0.6/32 [125/1] is directly connected, eth0, 00:01:08
l>* 10.0.0.7/32 [125/1] is directly connected, eth0, 00:01:07
l>  10.0.0.8/32 [125/2] via 10.0.0.2, eth0, 00:00:35
=============================================

   I looked at the patch code lib/quagga/src/plugin.c and found the only supported "ExportRoutes" parameters "only" and "additional" in the zplugin_exportroutes(). 
Looks like the parameter "both" listed in the README_QUAGGA file is not handled.

   With "ExportRoutes" "only" QUAGGA redistributed OLSR routes to the OSPF domain, but the gateway node n1 still did not have the one-hop neighbors in the FIB:

==============================================================================
[(spam-protected) n1.conf]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.5        10.0.0.3        255.255.255.255 UGH   2      0        0 eth0
10.0.0.4        10.0.0.3        255.255.255.255 UGH   2      0        0 eth0
10.0.0.8        10.0.0.2        255.255.255.255 UGH   2      0        0 eth0
10.0.1.0        0.0.0.0         255.255.255.0   U     0      0        0 eth1
10.0.2.0        10.0.1.2        255.255.255.0   UG    20     0        0 eth1
[(spam-protected) n1.conf]#  
==============================================================================

   Only after I commented out the statement in the QUAGGA patch zebra/rt_netlink.c:
"if (rib->type == ZEBRA_ROUTE_OLSR) req.r.rtm_scope = RT_SCOPE_LINK;"
the gateway n1 got all routes in the FIB and all tests passed fine with OLSR-OSPF(wired) and 
OLSR-OSPF6/MDR(wireless) routing protocols:

==============================================================================
n1# sho ip ro olsr 
Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, o - OSPF6, I - IS-IS, B - BGP, H - HSLS,
       l - OLSR, b - BATMAN, A - Babel,
       > - selected route, * - FIB route

l>* 10.0.0.2/32 [125/1] is directly connected, eth0, 00:03:15
l>* 10.0.0.3/32 [125/1] is directly connected, eth0, 00:03:15
l>* 10.0.0.4/32 [125/2] via 10.0.0.3, eth0, 00:03:06
l>* 10.0.0.5/32 [125/2] via 10.0.0.3, eth0, 00:03:09
l>* 10.0.0.6/32 [125/1] is directly connected, eth0, 00:03:18
l>* 10.0.0.7/32 [125/1] is directly connected, eth0, 00:03:18
l>* 10.0.0.8/32 [125/2] via 10.0.0.2, eth0, 00:02:44
n1# 

[(spam-protected) n1.conf]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.5        10.0.0.3        255.255.255.255 UGH   2      0        0 eth0
10.0.0.4        10.0.0.3        255.255.255.255 UGH   2      0        0 eth0
10.0.0.7        0.0.0.0         255.255.255.255 UH    1      0        0 eth0
10.0.0.6        0.0.0.0         255.255.255.255 UH    1      0        0 eth0
10.0.0.3        0.0.0.0         255.255.255.255 UH    1      0        0 eth0
10.0.0.2        0.0.0.0         255.255.255.255 UH    1      0        0 eth0
10.0.0.8        10.0.0.2        255.255.255.255 UGH   2      0        0 eth0
10.0.1.0        0.0.0.0         255.255.255.0   U     0      0        0 eth1
10.0.2.0        10.0.1.2        255.255.255.0   UG    20     0        0 eth1
[(spam-protected) n1.conf]#  
==============================================================================

I'm not sure if the RT_SCOPE_LINK route scope is the bug - it may be correct setting for 
the baseline QUAGGA but invalid for QUAGGA/MDR branch. I think it worth to be noticed
in README.

Regards,

Rostislav Molodyko
Mayflower Communications




More information about the Olsr-users mailing list