[Babel-users] Neighbours vs. Router-IDs [was: wanted to map the babel network]
Juliusz Chroboczek
jch at pps.univ-paris-diderot.fr
Sat Jun 13 19:18:56 UTC 2015
> BTW, it would be much nicer if one could get the router IDs of all
> neighbours instead of only their link-local IP addresses. But I am not
> sure if those are even exposed in the protocol messages? The problem is
> that without the router IDs you need to keep track of all the link-local
> IPs of all the nodes in order to reconstruct the full topology.
As you guessed, it is not easy, and not even possible in general, to
associate a given link-local IP with a Router-ID. Since babeld is
a routing daemon, and since this information is not needed for routing,
babeld doesn't even attempt to guess -- it leaves it to whoever is
listening on the monitoring interface.
Let me explain. A Router-ID is used for identifying the originator of
a route; if a route goes through 42 hops, the associated Router-ID
identifies the router that is 42 hops away. On the other hand, neighbours
are identified by pairs of the form (interface, link-local address). The
two notions are distinct for a very good reason: if a router has multiple
radios, it counts as multiple neighbours, but it still has just a single
Router-ID -- otherwise the loop-avoidance mechanism wouldn't reliably
eliminate loops that go through different interfaces.
Please squint at the following tpology:
(A1) (B1) (B2)
* * *
| \ /
| \ /
A B
Here, A is a router with a single radio A1, B has two radios B1 and B2
tuned at the same frequency (for example an omni and a directional
antenna, or two sector antennas). If all radios hear each other, A's
neighbour table looks as so:
B1 through A1, cost=256
B2 through A1, cost=321
which is why the link-quality estimator is able to distinguish between B1
and B2 and choose the better of the two. Interestingly enough, B's
neighbour table will be as follows:
A1 through B1
A1 through B2
B1 through B2
B2 through B1
but the latter two will be discarded by the loop-avoidance mechanism --
which only looks at Router-IDs, and hence can detect that B1-B2 is a loop.
(Yes, Virginia, there is such a thing as a one-hop loop.)
So how do you guess the Router-ID associated with a link-local address?
Any route announced with a refmetric of 0 will carry the Router-ID you're
looking for. If there are no such routes, you're out of luck -- if the
router is not originating any routes, it's not announcing its Router-ID,
and the information is simply not available.
-- Juliusz
More information about the Babel-users
mailing list