[PATCH RFC 0/1] Adding the Babel routing protocol to Bird

Toke Høiland-Jørgensen toke at toke.dk
Wed Aug 19 00:06:02 CEST 2015

Hi everyone

Over the past couple of weeks, I have amused myself with adding support
for the Babel routing protocol (RFC 6126) to Bird. Quoting the RFC:

  Babel is a loop-avoiding distance-vector routing protocol that is
  robust and efficient both in ordinary wired networks and in wireless
  mesh networks.

The implementation is a clean-slate implementation from the RFC, and it
is now at the state where it is reasonably complete (I think), and
communicates with the official babeld implementation.

At this stage I'm not proposing this be included in Bird proper: I'm
pretty sure I got at least parts of the interaction with the core wrong,
and there is probably some cleanup needed; and as you can see from the
list of limitations below, some things are still needed for this to be a
production-quality implementation of the protocol. However, I thought
that having some feedback to guide me at this stage would be useful.

I would thus like to solicit your opinion on whether or not this is
something you could see eventually making it into Bird proper (given
that I perform the necessary rework of the code)? And if so, to comment
on the implementation and how it might be improved. In particular, I'm
interested in your opinion on what to do about IPv4 support (see below).

Limitations of the implementation at this stage are (at least):

- The implementation is IPv6-only. The Babel protocol supports carrying
  IPv4 and IPv6 routes in the same protocol instance, and the official
  implementation only speaks IPv6. The RFC does specify an IPv4
  multicast group, v4 support could conceivably be added in the same
  manner as the other protocols.

- Several of the SHOULDs in the RFC are not implemented. Most notably,
  this implementation is somewhat more chatty than the official
  implementation, and the route selection procedure is quite

- None of the Babel protocol extensions are currently implemented.

- I have only performed rudimentary testing: I have confirmed that the
  implementation can communicate and exchange routes with the official
  implementation, and have even had it running on my own Babel-enabled
  VPN. However, I have not tested it in a position in the network where
  it is likely to suffer from starvation or even have multiple routes
  for the same prefixes.

The protocol addition is included in the next email as a single big
patch. Alternatively, I have a repo on github with the whole thing
(including the commit history): https://github.com/tohojo/bird.

Looking forward to your comments; and thanks in advance! :)


Toke Høiland-Jørgensen (1):
  Add the Babel routing protocol (RFC 6129) to Bird.

 configure.in         |    3 +
 lib/ip.h             |    1 +
 nest/proto.c         |    4 +
 nest/protocol.h      |    2 +-
 nest/route.h         |   11 +-
 proto/Doc            |    1 +
 proto/babel/Doc      |    2 +
 proto/babel/Makefile |    5 +
 proto/babel/babel.c  | 1417 ++++++++++++++++++++++++++++++++++++++++++++++++++
 proto/babel/babel.h  |  427 +++++++++++++++
 proto/babel/config.Y |   84 +++
 proto/babel/packet.c |  436 ++++++++++++++++
 sysdep/autoconf.h.in |    1 +
 13 files changed, 2392 insertions(+), 2 deletions(-)
 create mode 100644 proto/babel/Doc
 create mode 100644 proto/babel/Makefile
 create mode 100644 proto/babel/babel.c
 create mode 100644 proto/babel/babel.h
 create mode 100644 proto/babel/config.Y
 create mode 100644 proto/babel/packet.c


More information about the Bird-users mailing list