Internet DRAFT - draft-hoeiland-joergensen-babel-implementation

draft-hoeiland-joergensen-babel-implementation







Babel                                             T. Hoeiland-Joergensen
Internet-Draft                                       Karlstad University
Intended status: Informational                            April 05, 2016
Expires: October 7, 2016


          Experiences implementing the Babel routing protocol
           draft-hoeiland-joergensen-babel-implementation-00

Abstract

   This document describes the experiences creating independent
   implementations of the Babel routing protocol [RFC6126], based on the
   two independent implementations currently available.

   The Babel routing protocol is easy to implement, and it is quite
   feasible for someone with no prior experience with routing protocols
   to create a working implementation.  The few issues that needed
   clarification during the independent implementation work are
   documented, with the hope of aiding others seeking to implement
   Babel.

Status of This Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at http://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on October 7, 2016.

Copyright Notice

   Copyright (c) 2016 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (http://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents



Hoeiland-Joergensen      Expires October 7, 2016                [Page 1]

Internet-Draft            babel-implementation                April 2016


   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.

Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2
   2.  Overall experiences . . . . . . . . . . . . . . . . . . . . .   3
   3.  Specific issues encountered . . . . . . . . . . . . . . . . .   3
     3.1.  Port number . . . . . . . . . . . . . . . . . . . . . . .   3
     3.2.  Metric functions  . . . . . . . . . . . . . . . . . . . .   3
     3.3.  Sequence number space . . . . . . . . . . . . . . . . . .   3
     3.4.  Error handling on packet parsing  . . . . . . . . . . . .   3
     3.5.  Router ID issues  . . . . . . . . . . . . . . . . . . . .   4
     3.6.  The need for blackhole routing  . . . . . . . . . . . . .   4
     3.7.  Extra space at the end of TLVs  . . . . . . . . . . . . .   4
     3.8.  Imprecise language concerning IDs . . . . . . . . . . . .   4
   4.  In summary  . . . . . . . . . . . . . . . . . . . . . . . . .   4
   5.  References  . . . . . . . . . . . . . . . . . . . . . . . . .   5
     5.1.  Normative References  . . . . . . . . . . . . . . . . . .   5
     5.2.  Informative References  . . . . . . . . . . . . . . . . .   5
   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .   5

1.  Introduction

   Babel [RFC6126] is a distance vector routing protocol especially
   suited for hybrid networks (with both stable and unstable parts)
   [I-D.chroboczek-babel-applicability].  The reference implementation
   (Babeld, available from http://www.pps.univ-paris-
   diderot.fr/~jch/software/babel/) is released as open source and has
   been deployed in several places.  However, having separate clean-
   slate implementations of the protocol from the specification is an
   important part of the work to standardise the protocol.  This
   document is an attempt to collect the experiences of implementing
   Babel from the RFC, to serve as information for others wanting to
   implement the protocol.

   There currently exists two independent implementations of the
   protocol, Pybabel by Markus Stenberg (https://github.com/fingon/
   pybabel/) and a patch to the Bird routing daemon by Toke Hoeiland-
   Joergensen (http://trubka.network.cz/pipermail/bird-
   users/2016-April/010300.html).  This document is based on the
   experiences from these two implementations.






Hoeiland-Joergensen      Expires October 7, 2016                [Page 2]

Internet-Draft            babel-implementation                April 2016


2.  Overall experiences

   Overall, the Babel protocol is remarkably easy to implement.  The
   specification is just over 40 pages, of which around 30 (sections 3
   and 4 of [RFC6126]) contain the details required for an
   implementation and the rest is background and supporting text.  This
   means that it is possible to understand the protocol and keep it
   present in one's mind in its entirety.  Indeed, a feeling of "really,
   that's it?" presents itself in the early stages of the work with the
   protocol.

   The two independent implementations were created in a few days and a
   few weeks, respectively.  And while none of them are as complete as
   the reference implementation (for instance, none of them currently
   implement any extensions, and both are IPv6-only), this attests to
   the ease with which a new implementation can be written.

3.  Specific issues encountered

   This section documents the issues that needed clarification during
   the implementation work.  All of these issues were resolved on the
   public mailing lists during the work with the implementation, but
   they are collected and documented here to help future implementers.

3.1.  Port number

   The port number specified in [RFC6126] is wrong; an errata exists
   that changes the port number to the right one (6696), but this can
   easily be missed.

3.2.  Metric functions

   The base specification does not include any metric functions.
   Workable functions are specified in the RFC appendix, however, and
   using those leads to a workable and interoperable implementation.

3.3.  Sequence number space

   The handling of sequence number space is not specified in the RFC.
   The sequence numbers should be computed by module arithmetic as
   specified by [RFC1982], but no reference exists for this in
   [RFC6126].

3.4.  Error handling on packet parsing

   The Babel specification does not specify how to handle parsing errors
   when processing incoming packets.  For instance, some TLVs have
   implicit dependencies on earlier TLVs in the same packet (such as



Hoeiland-Joergensen      Expires October 7, 2016                [Page 3]

Internet-Draft            babel-implementation                April 2016


   Update TLVs depending on earlier Router ID TLVs), and so continuing
   processing if the earlier TLV fails to parse is likely to lead to
   errors.  Some care is needed when implementing this logic, and
   [RFC6126] does not offer a lot of guidance.

3.5.  Router ID issues

   The Babel specification includes a mechanism to infer router IDs from
   prefixes in an Update TLV; however, it does not specify how to do
   this for IPv4 addresses.  In addition, while a mechanism to generate
   router IDs is specified that is unlikely to generate duplicates, this
   is optional and no mechanism for detecting or reacting to duplicate
   IDs is specified.  Finally, when writing an implementation it is easy
   to assume that one can simply check for an empty router ID to
   discover if a router ID TLV has been seen; however, an all-zero
   router ID is not in fact disallowed by the specification, and so an
   extra explicit flag is needed in the parsing state.

3.6.  The need for blackhole routing

   When a route is retracted, Babel temporarily installs it as an
   explicit unreachable route in the kernel routing table.  This is done
   to avoid routing loops when a more specific route fails.  The reason
   for this mechanism is explained in section 2.8 of [RFC6126].
   However, since this is in the background section of the document, one
   is not likely to refer to that after an initial reading.  And since
   this practice is somewhat unusual, it can lead to confusion.

3.7.  Extra space at the end of TLVs

   The Babel specification explicitly allows extra space at the end of
   TLVs, and uses this for its extension mechanism (specified in
   [RFC7557]).  However, this fact can easily be missed leading one to
   implement the protocol in a way that rejects TLVs with extra trailing
   data.

3.8.  Imprecise language concerning IDs

   In section 3.5 of [RFC6126] (specifying route table maintenance),
   there is some confusing use of 'id' in various contexts that may take
   a few readings to sort out.

4.  In summary

   The Babel routing protocol is easy to implement, as has been shown by
   two independent implementations created in a few days and weeks
   respectively.  The specification is very readable with only a few
   omissions and unclear points as noted above.  It is quite feasible



Hoeiland-Joergensen      Expires October 7, 2016                [Page 4]

Internet-Draft            babel-implementation                April 2016


   for someone with no prior experience with routing protocols to create
   a working implementation, and doing so is instructive for someone
   looking to understand both routing protocols in general and the Babel
   protocol in particular.

5.  References

5.1.  Normative References

   [RFC1982]  Elz, R. and R. Bush, "Serial Number Arithmetic", RFC 1982,
              DOI 10.17487/RFC1982, August 1996,
              <http://www.rfc-editor.org/info/rfc1982>.

   [RFC6126]  Chroboczek, J., "The Babel Routing Protocol", RFC 6126,
              DOI 10.17487/RFC6126, April 2011,
              <http://www.rfc-editor.org/info/rfc6126>.

   [RFC7557]  Chroboczek, J., "Extension Mechanism for the Babel Routing
              Protocol", RFC 7557, DOI 10.17487/RFC7557, May 2015,
              <http://www.rfc-editor.org/info/rfc7557>.

5.2.  Informative References

   [I-D.chroboczek-babel-applicability]
              Chroboczek, J., "Applicability of the Babel routing
              protocol", draft-chroboczek-babel-applicability-01 (work
              in progress), February 2016.

Author's Address

   Toke Hoeiland-Joergensen
   Karlstad University
   Dept. of Computer Science
   Karlstad  65188
   Sweden

   Email: toke.hoiland-jorgensen@kau.se














Hoeiland-Joergensen      Expires October 7, 2016                [Page 5]