<div dir="ltr">Good morning all!<div><br></div><div>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.</div><div><br></div><div>In both setups:</div><div>There are 3 routers A, B and C, all peered with another router X.</div><div>They are all on the same L2 bridge, and have global IPv6 addresses in the 2001:20::/64 subnet.</div><div>A, B and C all export a route for fd00:10:96::/112</div><div><br></div><div>In setup #1 on X I see ECMP routes for fd00:10:96::/112 via link-local IPv6 addresses:</div><div><br></div><div># ip -6 r<br>...<br>fd00:10:96::/112 proto bird metric 1024 <br>        nexthop via fe80::42:acff:fe11:2 dev eth0 weight 1 <br>        nexthop via fe80::42:acff:fe11:3 dev eth0 weight 1 <br>        nexthop via fe80::42:acff:fe11:4 dev eth0 weight 1 <br>        nexthop via fe80::42:acff:fe11:5 dev eth0 weight 1 pref medium<br></div><div><br></div><div>But in setup #2 on X I see ECMP routes for fd00:10:96::/112 via the global IPv6 addresses:</div><div><br></div><div><div># ip -6 r<br>...<br>fd00:10:96::/112 proto bird metric 1024 <br>        nexthop via 2001:20::1 dev eth0 weight 1 <br>        nexthop via 2001:20::2 dev eth0 weight 1 <br>        nexthop via 2001:20::3 dev eth0 weight 1 <br>        nexthop via 2001:20::8 dev eth0 weight 1 pref medium<br></div><div></div></div><div><br></div><div>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</div><div><br></div><div>     nexthop: 2001:20::3, fe80::42:acff:fe11:4, nh-length: 32, no SNPA<br></div><div><br></div><div>in the BGP Update Reach NLRI, whereas in setup #2 I see just one next hop address:</div><div><br></div><div>     nexthop: 2001:20::3, nh-length: 16, no SNPA<br></div><div><br></div><div>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: <a href="https://github.com/projectcalico/bird/commits/feature-ipinip">https://github.com/projectcalico/bird/commits/feature-ipinip</a>)</div><div><br></div><div>There are slight config differences between the two setups, but nothing that is obviously relevant to this.  (I can provide those if need be.)</div><div><br></div><div>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?</div><div><br></div><div>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?</div><div><br></div><div>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?</div><div><br></div><div>Many thanks,</div><div>   Neil</div><div><br></div></div>