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, and has been extended with support for overlay networks.

See download below for source and binaries.



Human-friendly documents

Draft papers

M. Boutier and J Chroboczek. Source-Specific routing. Draft. 2014.

B. Jonglez, M. Boutier and J. Chroboczek. Delay-based routing. Draft. 2014.

Peer-reviewed papers

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

There is also a #babel channel on Freenode.

Babel features

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

Babel's main features are the following:

Babel on wired networks

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.


Babel on wireless networks

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 networks.

Babel enjoys fairly fast convergence. Since Babel uses triggered updates and explicit requests for routing information, it usually converges almost immedia­tely 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).

BabelTool screenshot

Babel on overlay networks

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.

Source-specific routing

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 on double-stack networks

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.

Babel on embedded systems

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.

Standalone daemon

Stable tarballs of babeld are available in my download area.

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

git clone 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 of make && make install.

Babel in Quagga

Due to the unwillingness of the Quagga team to merge our code, the code included in Quagga is somewhat out-of-date. A more recent version is available in quagga-RE:

git clone git://

Related software

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).

Sbabeld is a stub-only implementation of Babel that compiles to just 12kB on AMD 64.

Pybabel is a reasonably complete, independent reimplementation of Babel in Python.

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.