Hi everyone

Over the last couple of weeks, I've amused myself with doing a
clean-slate implementation of the Babel protocol in the Bird routing
daemon, and thought I'd report my experiences here.

I saw Juliusz' talk at the Babel side meeting in Prague (and again at
Battlemesh), which is what convinced me that this was actually a viable
project. Otherwise, I based my implementation on the RFC and did basic
interoperability testing with the official babeld implementation.

Overall, I found the RFC clear and easy to follow. Section 2 gives a
nice background on how the protocol works, and sections 3 and 4 gives
the details of how the implementation should work; in sufficient detail
that the implementation can done by referring only to those two
sections. The details that are left up to the implementation have nicely
suggested solutions in the appendices (which I used for my
implementation).

The main thing that I found confusing in the text was the mention of
'id' in section 3.5; took me a while to realise that this was supposed
to be the router id. In the rest of the document, this is quite
explicit, but in sections 3.5.1 and 3.5.4 they are referred to simply as
'id'. This is technically defined in the text, but one has to go looking
for it, so when flipping back and forth between the code and the
document I found it somewhat confusing.

The second thing I would have liked to have available is some more
guidance on how to ensure an implementation is actually compliant to the
RFC. I.e. a test suite, or at least some description of what kind of
edge cases to test (tricky topologies, that sort of thing). My testing
so far has been fairly ad hoc, and I'm pretty sure there's still bugs in
there.


The main part of the implementation took about a week, with another week
to fix bugs and convince myself that it actually works as intended; this
includes time to familiarise myself with the Bird daemon API and
internal logic (but on the other hand, I didn't have to write any code
to talk to the kernel). I by no means consider it a production-quality
implementation at this point, but it does exchange routes with the
babeld daemon and hasn't crashed my laptop yet :)

I've posted the implementation as a patch on the Bird list here:
http://trubka.network.cz/pipermail/bird-users/2015-August/009855.html --
that email also describes the current limitations of the implementation.

There's also a github repository with the complete commit history for
those who want to amuse themselves with perusing my struggles:
https://github.com/tohojo/bird

I hope this can serve as a useful data point in the assessment of the
implementability of Babel. I started this mainly as a project to satisfy
my own curiosity (the best way to understand a protocol is to implement
it, and all that), but do plan to put in some effort to get it to a
more robust state, depending on the feedback I get from the Bird
developers :)

Cheers,
-Toke

_______________________________________________
homenet mailing list
homenet@ietf.org
https://www.ietf.org/mailman/listinfo/homenet

Reply via email to