mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-06 07:27:09 +00:00
Revert "bgpd: prefer link-local to a ipv4-mapped ipv6 global"
This reverts commit 5dd731af84
.
This commit is contained in:
parent
efd8f613f9
commit
863da18d1e
@ -320,6 +320,11 @@ int bgp_find_or_add_nexthop(struct bgp *bgp_route, struct bgp *bgp_nexthop,
|
||||
afi = BGP_ATTR_MP_NEXTHOP_LEN_IP6(pi->attr) ? AFI_IP6
|
||||
: AFI_IP;
|
||||
|
||||
/* Validation for the ipv4 mapped ipv6 nexthop. */
|
||||
if (IS_MAPPED_IPV6(&pi->attr->mp_nexthop_global)) {
|
||||
afi = AFI_IP;
|
||||
}
|
||||
|
||||
/* This will return true if the global IPv6 NH is a link local
|
||||
* addr */
|
||||
if (make_prefix(afi, pi, &p) < 0)
|
||||
@ -1035,11 +1040,19 @@ static int make_prefix(int afi, struct bgp_path_info *pi, struct prefix *p)
|
||||
p->u.prefix4 = p_orig->u.prefix4;
|
||||
p->prefixlen = p_orig->prefixlen;
|
||||
} else {
|
||||
if (p_orig->family == AF_EVPN)
|
||||
p->u.prefix4 = pi->attr->mp_nexthop_global_in;
|
||||
else
|
||||
p->u.prefix4 = pi->attr->nexthop;
|
||||
p->prefixlen = IPV4_MAX_BITLEN;
|
||||
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;
|
||||
} else {
|
||||
if (p_orig->family == AF_EVPN)
|
||||
p->u.prefix4 =
|
||||
pi->attr->mp_nexthop_global_in;
|
||||
else
|
||||
p->u.prefix4 = pi->attr->nexthop;
|
||||
p->prefixlen = IPV4_MAX_BITLEN;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case AFI_IP6:
|
||||
@ -1055,7 +1068,6 @@ static int make_prefix(int afi, struct bgp_path_info *pi, struct prefix *p)
|
||||
/* If we receive MP_REACH nexthop with ::(LL)
|
||||
* or LL(LL), use LL address as nexthop cache.
|
||||
*/
|
||||
p->prefixlen = IPV6_MAX_BITLEN;
|
||||
if (pi->attr &&
|
||||
pi->attr->mp_nexthop_len ==
|
||||
BGP_ATTR_NHLEN_IPV6_GLOBAL_AND_LL &&
|
||||
@ -1070,22 +1082,15 @@ static int make_prefix(int afi, struct bgp_path_info *pi, struct prefix *p)
|
||||
pi->attr->mp_nexthop_len ==
|
||||
BGP_ATTR_NHLEN_IPV6_GLOBAL_AND_LL) {
|
||||
if (CHECK_FLAG(pi->attr->nh_flags,
|
||||
BGP_ATTR_NH_MP_PREFER_GLOBAL)) {
|
||||
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;
|
||||
} else
|
||||
p->u.prefix6 =
|
||||
pi->attr->mp_nexthop_global;
|
||||
} else
|
||||
BGP_ATTR_NH_MP_PREFER_GLOBAL))
|
||||
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;
|
||||
p->prefixlen = IPV6_MAX_BITLEN;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
Loading…
Reference in New Issue
Block a user