BGP: Fix handling of strange IPv6 link-local-only next hops

There are three common ways how to encode IPv6 link-local-only next hops:
(:: ll), (ll), and (ll ll). We use the first one but we should accept all
three. The patch fixes handling of the last one.

Thanks to Sebastian Hahn for the bugreport.
This commit is contained in:
Ondrej Zajicek (work) 2020-04-29 02:50:29 +02:00
parent b465604eb1
commit 17de3a023f

View file

@ -1157,7 +1157,10 @@ bgp_decode_next_hop_ip(struct bgp_parse_state *s, byte *data, uint len, rta *a)
nh[0] = ipa_from_ip6(get_ip6(data));
nh[1] = ipa_from_ip6(get_ip6(data+16));
if (ipa_is_ip4(nh[0]) || !ip6_is_link_local(nh[1]))
if (ipa_is_link_local(nh[0]))
{ nh[1] = nh[0]; nh[0] = IPA_NONE; }
if (ipa_is_ip4(nh[0]) || !ipa_is_link_local(nh[1]))
nh[1] = IPA_NONE;
}
else