bgpd: set ipv4-mapped ipv6 for ipv4 with ipv6 nexthop

The code was expected that no IPv6 global address was present but the
previous commit was replacing nexthop.v6global by the link-local address
instead of un-setting it in case of removal of the IPv6 global.

Set also ipv4-mapped ipv6 address as nexthop when a link-local is found
and it is an ipv4 prefix over ipv6 nexthop.

Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
This commit is contained in:
Louis Scalbert 2024-03-29 16:14:14 +01:00
parent 04c220bedb
commit fc5a738409

View File

@ -523,11 +523,13 @@ struct stream *bpacket_reformat_for_peer(struct bpacket *pkt,
gnh_modified = 1; gnh_modified = 1;
} }
if (IN6_IS_ADDR_UNSPECIFIED(mod_v6nhg)) { if (peer->nexthop.v4.s_addr != INADDR_ANY &&
if (peer->nexthop.v4.s_addr != INADDR_ANY) { (IN6_IS_ADDR_UNSPECIFIED(mod_v6nhg) ||
ipv4_to_ipv4_mapped_ipv6(mod_v6nhg, (IN6_IS_ADDR_LINKLOCAL(mod_v6nhg) &&
peer->nexthop.v4); peer->connection->su.sa.sa_family == AF_INET6 &&
} paf->afi == AFI_IP))) {
ipv4_to_ipv4_mapped_ipv6(mod_v6nhg, peer->nexthop.v4);
gnh_modified = 1;
} }
if (IS_MAPPED_IPV6(&peer->nexthop.v6_global)) { if (IS_MAPPED_IPV6(&peer->nexthop.v6_global)) {