[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