[Babel-users] Question about Babel

Juliusz Chroboczek jch at pps.jussieu.fr
Thu Apr 12 18:47:46 UTC 2012

> So if I have APs connected together with
> Babel, can Babel help in some way when one AP (A) client migrates to
> another AP (B)? I would like that client keeps the same IP and all
> connections stay open. What it would be the way to setup this in a
> mesh using Babel to mesh APs together.


> Does Babel even support moving /32 announcements from node to node
> dynamically?

Of course, Mitar.

Babel uses a very general mechanism known as redistribution.
Redistribution is a very old idea, dating at least as far as the first
Cisco multiprotocol routers; you'll find it described in detail in any
networking book written in the last 20 years.  Redistribution can be
used to implement OLSR's HNA mechanism, BATMAN's "client roaming", and
a lot of other routing policies.

The idea behind redistribution is that you don't statically setup routes
that are being announced into the routing domain; instead, you specify
which kernel routes (FIB routes) are going to be reannounced into the
routing domain.  A route that is so being reannounced is said to be

As you perhaps know, there are two implementations of Babel: the
standalone babeld daemon, and the version integrated into Quagga.  The
twa do redistribution differently, and the following only applies to the
standalone daemon.

Redistribution is controlled by "redistribute" statements in
babeld.conf.  For example, an IPv4 Internet gateway has a default route
that points to the Internet; you can ask babeld to redistribute it into
the Babel routing domain by saying something like

  redistribute ip le 0

which asks to redistribute any route that is within (i.e. an
IPv4 route) that has a prefix length less or equal to 0 (i.e. a default

Similarly, if your node is maintaining a bunch of /32 routes, you can
ask babeld to announce them into the Babel routing domain by saying

  redistribute ip ge 32

There's a lot more you can say in babeld's filtering language, I'll let
you check the babeld manual page[1] for more information.

Unlike the techniques used in BATMAN, redistribution is modular: babeld
is a routing daemon, it's not babeld's job to be monitoring whether
there is a route to the Internet or whether a given "client" is
associated to the current router.  Hence, you need a different daemon
that monitors the external routes and installs or uninstalls routes in
the kernel.  Here are a few examples:

 - a proper Internet gateway speaks BGP to your ISP.  Hence, the BGP
   daemon is responsible for installing/uninstalling the default route
   that's being redistributed by babeld.

 - a lot of people cannot speak BGP to their ISP.  In such
   circumstances, you may either simply redistribute the route installed
   by DHCP, or use babel-pinger[2] to monitor an Internet connection and
   install/uninstall a default route that babeld can redistribute.

 - you could write a daemon that monitors the set of associated
   "clients" and installs/uninstalls /32 routes to them.  This daemon
   could be monitoring DHCP leases (if the DHCP lease time is short
   enough), or it could be monitoring ARP/ND messages, or it could be
   monitoring all IP packets.  It's up to you.

You'll find a few real-life examples of redistribution on


(Note that this mail is very slightly obsolete, since recent babeld
accepts to redistribute proto 3 routes, but only if the protocol number
is specified explicitly in the redistribute statement.)

Mitar, please realise that Babel might not be what you are looking for.
BATMAN is a commercial project, and the BATMAN people try to solve their
customers' problems in a timely manner.  Babel is a research project,
and as such it tries to do things right, which often takes more time
than implementing a quick hack to solve a customer's issue.  Hence,
unless you're interested in spending the time needed to design the right
thing to do, you might be more happy with BATMAN, which I'm sure is
a fine routing protocol.

-- Juliusz

[1] http://www.pps.jussieu.fr/~jch/software/babel/babeld.html#sect6

[2] http://www.pps.jussieu.fr/~jch/software/babel/babel-pinger.html

More information about the Babel-users mailing list