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.
See download below for source and binaries.
babeld(8) manual page.
You may also want to have a look at the following peer-reviewed papers:
To contact us, please write 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.
There is also a #babel channel on Freenode.
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 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.)
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 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.
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.)
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.
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.
Babel has the following features:
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.
Stable tarballs of babeld are available in my download area.
You can get my latest (possibly unstable) sources using git:
$ git clone git://git.wifi.pps.univ-paris-diderot.fr/babeld
There is a web interface.
Mirror on github:
$ git clone git://github.com/jech/babeld.git
Debian and Ubuntu packages should be available in your favourite repository (merci, Stéphane !).
# apt-get install babeld
Versions are also included in Fedora Extras and Arch Linux. On other Linux and BSD systems, building the daemon is a simple matter of make && make install.
The Quagga version of babeld is available in both the main and the quagga-RE branches of Quagga:
$ git clone git://github.com/Quagga-RE/quagga-RE.git
Please do not use the version included in mainline Quagga, which is buggy.
Tcpdump has support for displaying Babel packets since version 4.2.1 (tcpdump download). Wireshark has support since version 1.7.0 (Wireshark download).
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.
Babel's freshmeat page, Babel's Alioth page, babeld's Github page.
AHCP is a configuration protocol for mesh networks.