[quagga-dev 9032] a preview of Babel, new routing protocol, is available

Denis Ovsienko infrastation at yandex.ru
Sun Jan 22 14:03:26 GMT 2012

Hello, all.

It is the time to update on the new routing protocol daemon, "babeld", which is available in the development branches of Quagga. 

Babel is a routing protocol designed by Juliusz Chroboczek with the specific purpose of routing wireless networks in mind. The protocol used to be implemented in a standalone babeld software, and Juliusz's colleague, Matthieu Boutier, is now making it available as one of the Quagga components. I have personally verified, that the involved changes do not interfere with any other Quagga daemon (at least in the RE-testing-0.99 branch), and that the current implementation allows a couple of routers to learn each other's IPv6 loopback addresses over a IPv6 link and install respective routes into kernel FIB. Matthieu and Juliusz can surely refer to examples of larger-scale deployments of Babel.

Getting your own Babel testbed is as easy as checking Quagga out of git and building it. To be specific, the following branches at the time of this writing are known to work:

git://code.quagga.net/quagga-RE.git (commit f05fecd)
git://github.com/boutier/babeld-for-quagga.git (commit 78b1013)

I had put the following into babeld.conf to make it work:

password z
service advanced-vty
router babel
 network eth0
 redistribute kernel
 redistribute connected
 redistribute static
log file /var/log/quagga/babeld.log

The result looks like this (30::1/128 is the loopback interface of the remote host):

localhost.localdomain# sh ipv6 route 
Codes: K - kernel route, C - connected, S - static, R - RIPng,
       O - OSPFv6, I - IS-IS, B - BGP, A - Babel,
       > - selected route, * - FIB route

C>* ::1/128 is directly connected, lo
C>* 20::1/128 is directly connected, dummy0
A>* 30::1/128 [95/0] via fe80::22cf:30ff:fe02:b052, eth0
C * fe80::/64 is directly connected, eth0
C * fe80::/64 is directly connected, wlan0
C>* fe80::/64 is directly connected, dummy0

In the process of setting it up I realized the need to understand what in particular the routing processes are exchanging. This is quite hard without a packet analyzer understanding Babel protocol packets, i.e. Wireshark 1.6.5 or tcpdump 4.2.1. The former is available in Fedora 16, which I didn't have handy at the time of setup, but the latter compiled and installed just fine. For example, this is an example of a regular periodic PDU dissection once the adjacency is established:

17:50:51.326330 IP6 (hlim 1, next-header UDP (17) payload length: 115) fe80::217:42ff:fe3e:3612.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (103)
	Hello seqno 15804 interval 400
	IHU fe80::22cf:30ff:fe02:b052 txcost 96 interval 1200
	Router Id 62:69:23:ff:fe:69:d9:52
	Update/prefix 30::1/128 metric 96 seqno 2794 interval 1600
	Router Id d6:98:f9:ff:fe:e7:08:96
	Update/prefix 20::1/128 metric 0 seqno 21994 interval 1600

To sum it up, this effort is still a work in progress, but all hidden bugs are believed to be isolated in the babeld process. In case you manage to approach such a bug, please file it to the standard Quagga bugzilla, it will be dispatched appropriately.

Thanks for reading!

    Denis Ovsienko

More information about the Quagga-dev mailing list