Babel — a loop-avoiding distance-vector routing protocol

Babel is a loop-avoiding distance-vector routing protocol for IPv6 and IPv4 with fast convergence properties. It is based on the ideas in DSDV, AODV and Cisco's EIGRP, but is designed to work well not only in wired networks but also in wireless mesh networks.

Implementations

There are two implementations of Babel: the standalone babeld daemon, of production quality, that works under Linux and BSD Unix (tested under OpenBSD and Mac OS X), as well as an experimental version that is embedded within Quagga, and should be portable to all the platforms on which Quagga runs. See download below for source and binaries.

Reading

You may also want to have a look at the following peer-reviewed papers:

About Babel

If you do not have brains you follow the same route twice. — Greek proverb

Babel was designed to be robust and efficient on both wireless mesh networks and classical wired networks.

Babel on wireless networks

Babel was originally designed for wireless ad-hoc networks. Because of that, Babel is extremely robust in the presence of mobility: only under very exceptional situations circumstances will Babel cause a transient routing loop. (This is unlike OLSR, which will cause transient routing loops just after a mobility event before the new topology information is flooded throughout the network.)

Maluch

In its default operation, Babel uses a link quality measurement that is designed for networks using the IEEE 802.11 MAC. In other words, the paths chosen should be reasonable on any sort of network, but are particularly suitable for 802.11 networks.

The Babelz protocol variant is also able to take radio frequency into account in order to avoid interference.

Babel enjoys fairly fast convergence. Since Babel uses triggered updates and explicit requests for routing information, it usually converges almost immediately after the link quality measure has completed. This initial solution is not optimal — after converging to a merely satisfactory set of routes, Babel will take its sweet time before optimising the routing tables. In the presence of heavy packet loss, converging on an optimal set of routes may take up to a minute or so (with the default update interval of 20 seconds).

Babel on wired networks

Babel works efficiently on wired networks. When the Babel daemon detects a wired network, it will use a larger interval between hellos, disable link quality estimation, and perform split-horizon processing.

In the absence of mobility (on a stable network with no link failures), Babel over a wired network will generate roughly between 3/4 and 1.5 times the amount of traffic that RIP would generate, depending on the exact network topology. Since Babel uses explicit Hello messages and never counts to infinity, however, its update interval can be set to much larger values.

Babel on embedded systems

Being a distance vector protocol, Babel has extremely modest memory and CPU requirements.

(Note however that the current implementation uses somewhat naive data structures. I've done some optimisation of the data structures, and babeld should therefore be able to scale to networks of a few thousand nodes; however, some low-hanging fruit remains, and if you're running babeld on a large network, I'm interested in your profiling results.)

Babel on dual-stack networks

Unlike most routing protocols, which route either IPv4 or IPv6 but not both at the same time, Babel is a hybrid IPv6 and IPv4 protocol: a single update packet can carry both IPv6 and IPv4 routes (this is similar to how multi-protocol BGP works). This makes Babel particularly efficient and simple to manage on dual (IPv6 and IPv4) networks.

Formal proofs

A mathematician is expected to sit at his computer and think. — Hari Seldon

The most important correctness properties of Babel — loop-freedom and convergence — have been formally proved. This is unlike most other routing protocols, the correctness of which has to be taken on trust.

Technical details

BabelTool screenshot

Babel has the following features:

Download

If you don't know what to do with many of the papers piled on your desk, stick a dozen colleagues' initials on 'em, and pass them along. When in doubt, route. — Malcolm Forbes

There are two implementations of Babel: a standalone daemon and an experimental version integrated in Quagga.

Standalone daemon

Stable tarballs of babeld are available in my download area.

You can also get my latest (possibly unstable) sources using git:

$ git clone git://git.wifi.pps.jussieu.fr/babeld

There's also a mirror on github.

Babel in Quagga

The Quagga version of babeld is available in the quagga-RE branch of Quagga:

$ git clone git://code.quagga.net/quagga-RE.git

Note that this version is experimental —- please only use it if you know what you're doing and are willing to report bugs.

Binaries

Binaries of the standalone daemon are available in a number of distributions. Please search for babeld with your usual package management tool.

Debian/Ubuntu

Debian and Ubuntu packages (with no init scripts) should be available in your favourite repository (merci, Stéphane !)

$ apt-get install babeld

OpenWRT

OpenWRT packages should be available from your favourite official OpenWRT package repository (merci, Gabriel !).

Related software

The Babel logo, designed by Boris (err404).

Babel Web, a web interface for visualising Babel routes, fully buzzword-compliant (HTML5, CSS, client- and server-side Javascript), by Gabriel Kerneis. Live demo.

Tcpdump has support for displaying Babel packets since version 4.2.0 (tcpdump betas). Wireshark has support since version 1.6.0 (bleeding-edge Wireshark).

Babel-pinger, a hack to export a default route into Babel for people using DHCP to configure their routers rather than speaking to their upstream provider with a proper routing protocol, is available in my download area.

Mailing list

Please subscribe to the Babel users mailing list.

You may browse the archives on Alioth, at Gmane using HTTP, at Gmane using NNTP, and at mail-archive.com.

See also

Babel's freshmeat page, Babel's Alioth page, babeld's Github page.

We are running an experimental Babel network (in French).

AHCP is a configuration protocol for mesh networks.

Back to my software page, retour à wifi.pps.jussieu.fr.