[Babel-users] Babel in Bird 1.6.0

Toke Høiland-Jørgensen toke at toke.dk
Sat Apr 30 19:39:18 CEST 2016


Juliusz Chroboczek <jch at pps.univ-paris-diderot.fr> writes:

>> Okay, actually trying to put this into code: Is the intention here that
>> a null-router ID update is acceptable only on *wildcard* retractions or
>> on *all* retractions?
>
> In RFC 6126, there's nothing special about a null router-ID: it's just
> a router ID.

I didn't actually mean a 'null router ID'. I meant an *unset* router ID.
I.e., if flag 0x40 is set or the update is preceded by a router ID TLV,
the router ID is *set*. It may or may not be set to all-zeroes, but that
is orthogonal. So I was referring to the text stating "the current
router-id and seqno is not used" - does that refer to all retractions or
just wildcard ones?

(I suspect the answer to be the former, and that the fact that this
poses problems is an artifact of the current update handling flow in the
Bird code; but want to be sure before I change it).

> However, for AEs 0 and 1, the address is too short to carry a router-ID
> (it's 0 and 4 octets respectively, while a router-ID is 8 octets).  The
> intention was that a shorter address should be stored in the right side of
> a router-ID, and padded with zeroes; e.g. the IPv4 address (AE 1) 1.2.3.4
> maps to the router-ID 0:0:0:0:1:2:3:4, and the zero-length address (AE 0)
> maps to 0:0:0:0:0:0:0:0.  However, I don't think this is spelled out in
> RFC 6126.

Well, I've always thought about 0x40 as specifying that the router ID be
the 64 bits from the address that is semantically encoded by the TLV,
not the literal bytes in the TLV itself. I.e. Bird does this:

  if (tlv->flags & BABEL_FLAG_ROUTER_ID)
  {
    state->router_id = ((u64) _I2(msg->prefix)) << 32 | _I3(msg->prefix);
    state->router_id_seen = 1;
  }

where msg is the internal data structure containing the parsed values.

This means there's no problem in combining flag 0x40 with AE 0; but for
IPv4 addresses it needs to be specified whether the addresses should be
padded to the right or the left.

> So my current thinking is:
>
>   - if a Babel speaker receives an update with AE 0 or 1 and bit 0x40 set,
>     it MUST set the router-ID to the address in the update, right justified
>     and padded with zeroes;

Yes, this seems reasonable, and should go into a -bis I guess.

>   - a Babel speaker SHOULD NOT set bit 0x40 in updates with AE 0 or 1,
>     lest the author meet the wrath of Markus.

This is "for the time being", or? Surely Markus can be appeased by the
time a new draft is written? ;)

-Toke


More information about the Bird-users mailing list