Features Download
From: Denis Ovsienko <infrastation-o+MxOtu4lMCHXe+LvDLADg <at> public.gmane.org>
Subject: [quagga-users 12686] a preview of Babel, new routing protocol, is available
Newsgroups: gmane.network.quagga.user
Date: Sunday 22nd January 2012 14:03:26 UTC (over 5 years ago)
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:

(commit f05fecd)
(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
CD: 3ms