bgpd: fix nexthop resolution of ipv4-mapped ipv6

Fix nexthop resolution of ipv4-mapped ipv6 nexthop addresses.

Fixes: 5dd731af84 ("bgpd: prefer link-local to a ipv4-mapped ipv6 global")
Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
This commit is contained in:
Louis Scalbert 2024-07-22 16:17:40 +02:00
parent 15fb7209ee
commit 6e8897fcf5

View File

@ -351,7 +351,9 @@ int bgp_find_or_add_nexthop(struct bgp *bgp_route, struct bgp *bgp_nexthop,
}
return 0;
}
if (afi == AFI_IP6 && p.family == AF_INET)
/* IPv4 mapped IPv6 nexthop address */
afi = AFI_IP;
srte_color = bgp_attr_get_color(pi->attr);
} else if (peer) {
@ -1078,14 +1080,25 @@ static int make_prefix(int afi, struct bgp_path_info *pi, struct prefix *p)
&ipv4);
p->u.prefix4 = ipv4;
p->prefixlen = IPV4_MAX_BITLEN;
p->family = AF_INET;
} else
p->u.prefix6 =
pi->attr->mp_nexthop_global;
} else
p->u.prefix6 =
pi->attr->mp_nexthop_local;
} else
p->u.prefix6 = pi->attr->mp_nexthop_global;
} else {
if (IS_MAPPED_IPV6(
&pi->attr->mp_nexthop_global)) {
ipv4_mapped_ipv6_to_ipv4(&pi->attr->mp_nexthop_global,
&ipv4);
p->u.prefix4 = ipv4;
p->prefixlen = IPV4_MAX_BITLEN;
p->family = AF_INET;
} else
p->u.prefix6 =
pi->attr->mp_nexthop_global;
}
}
break;
default: