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, and has been extended with support for overlay networks.
See download below for source and binaries.
babeld(8) manual page.
In addition to the above, the Homenet IS-IS/Babel comparison may be useful to understand why Babel can be useful in a non-mesh network.
M. Boutier and J Chroboczek. Source-Specific routing. To appear in IFIP Networking 2015. 2015.
B. Jonglez, M. Boutier and J. Chroboczek. Delay-based routing. Submitted for publication. 2015.
M. Abolhasan, B. Hagelstein, J. C.-P. Wang. Real-world performance of current proactive multi-hop mesh protocols. Asia-Pacific Conference on Communication (APCC 2009), Shanghai, China. 2009.
David Murray, Michael Dixon and Terry Koziniec. An Experimental Comparison of Routing Protocols in Multi Hop Ad Hoc Networks. In Proc. ATNAC 2010. 2010.
Jesús Friginal, David de Andrés, Juan-Carlos Ruiz, Pedro Gil. Towards Benchmarking Routing Protocols in Wireless Mesh Networks. In Ad Hoc Networks, Volume 9, Issue 8, November 2011, Pages 1374-1388.
Jesús Friginal, Juan-Carlos Ruiz, David de Andrés and Antonio Bustos. Mitigating the Impact of Ambient Noise on Wireless Mesh Networks Using Adaptive Link-Quality-based Packet Replication. DSN'2012:1-8. 2013.
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's main features are the following:
Babel works efficiently on ordinary wired networks. When Babel detects a wired link, it enables split horizon and uses a hop-count metric. This is configurable.
When it detects a wireless link, Babel disables split horizon and uses a metric based on packet loss that is designed for the 802.11 (WiFi) MAC. In other words,
Babel is extremely robust in the presence of mobility: in a pure mesh network, Babel never creates a routing loop, and in a prefix-based network, all routing loops are guaranteed to disappear as soon as one update went around a loop (there is no "counting to infinity").
When run with the
-z3 command-line flag, Babel will
aditionally take radio frequency into account in order to avoid
interference. This dramatically improves performance on multi-frequency
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 20 seconds or so (with the default update interval of 4 seconds).
The Babel-RTT protocol extension allows Babel to optimise routing in overlay networks. This is described in detail in Baptiste Jonglez' report and in a RTT-based routing draft article.
Search for "enable-timestamps" in the manual page.
The Babel-S protocol extension allows Babel to perform source-specific routing (sometimes called SADR), which allows a form of multihoming without cooperation from the ISP. This is described in detail in a Source-Specific routing.
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 double-stack (IPv6 and IPv4) networks.
Being a distance vector protocol, Babel has extremely modest memory and CPU requirements.
The standard implementation of Babel compiles to 90kB of text on AMD64. There is a minimalistic, stub-only implementation of Babel that compiles to 12kB of text.
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://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 (including
Mac OS X), building the daemon is a simple matter
make && make install.
Pybabel is an independent reimplementation of Babel in Python, due to Markus Stenberg.
Sbabeld is a minimalistic stub-only implementation of Babel that compiles to just 12kB on AMD 64.
Due to the unwillingness of the Quagga team to merge our code, the version included in Quagga is out-of-date. A somewhat more recent version (including source-specific routing) is available from
git clone -b pull-request https://github.com/boutier/quagga-merge.git
BabelWeb, a web interface for visualising Babel routes, fully buzzword-compliant (HTML5, node.js, Ajax, Web 2.0, etc.), by Gabriel Kerneis. Live demo.
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.
AHCP is a configuration protocol for mesh networks.