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 rudimentary. - 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! :) Cheers, -Toke 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 -- 2.5.0