Understanding IPv6 next hops

Neil Jerram neil at tigera.io
Thu Feb 6 13:34:00 CET 2020


Good morning all!

I'm debugging a situation where I'm seeing different IPv6 next hop
behaviour in two setups with different versions of my team's software.

In both setups:
There are 3 routers A, B and C, all peered with another router X.
They are all on the same L2 bridge, and have global IPv6 addresses in the
2001:20::/64 subnet.
A, B and C all export a route for fd00:10:96::/112

In setup #1 on X I see ECMP routes for fd00:10:96::/112 via link-local IPv6
addresses:

# ip -6 r
...
fd00:10:96::/112 proto bird metric 1024
        nexthop via fe80::42:acff:fe11:2 dev eth0 weight 1
        nexthop via fe80::42:acff:fe11:3 dev eth0 weight 1
        nexthop via fe80::42:acff:fe11:4 dev eth0 weight 1
        nexthop via fe80::42:acff:fe11:5 dev eth0 weight 1 pref medium

But in setup #2 on X I see ECMP routes for fd00:10:96::/112 via the global
IPv6 addresses:

# ip -6 r
...
fd00:10:96::/112 proto bird metric 1024
        nexthop via 2001:20::1 dev eth0 weight 1
        nexthop via 2001:20::2 dev eth0 weight 1
        nexthop via 2001:20::3 dev eth0 weight 1
        nexthop via 2001:20::8 dev eth0 weight 1 pref medium

That is the difference that I am trying to understand.  Digging further, I
used tcpdump to capture the BGP protocol on X, and in setup #1 I see

     nexthop: 2001:20::3, fe80::42:acff:fe11:4, nh-length: 32, no SNPA

in the BGP Update Reach NLRI, whereas in setup #2 I see just one next hop
address:

     nexthop: 2001:20::3, nh-length: 16, no SNPA

All this is with BIRD code, the same for both setups, that is 1.6.8 plus
some patches that I would not expect to be relevant.  (Specifically, this
code: https://github.com/projectcalico/bird/commits/feature-ipinip)

There are slight config differences between the two setups, but nothing
that is obviously relevant to this.  (I can provide those if need be.)

Any ideas?  Can you advise where I should look or check next, to try to
understand why the UPDATE message has two next hop addresses in one setup,
but only one in the other?

Also, does the passing of two next hop addresses in setup #1 fully explain
why the ECMP routes programmed into the kernel use link-local gateway
addresses?

Also, are the routes with global next hops more correct in some sense than
those with link-local next hops; or vice versa?  Would you expect them both
to forward data correctly?

Many thanks,
   Neil
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://trubka.network.cz/pipermail/bird-users/attachments/20200206/6ec516ed/attachment.htm>


More information about the Bird-users mailing list