bgpd: clarify when the vpnv6 nexthop length must be modified

Using a route-map to update the local ipv6 address has to be
better clarified. Actually, when a VPN SAFI is used, the nexthop
length must be changed to 48 bytes. Other cases, the length will
be 32 bytes.

Fixes: 9795e9f234 ("bgpd: fix when route-map changes the link local
nexthop for vpnv6")

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
(cherry picked from commit 5bbcc78202)
This commit is contained in:
Philippe Guibert 2023-02-13 12:18:33 +01:00 committed by Mergify
parent bea6f612ae
commit fd5dcbacfa

View File

@ -3576,17 +3576,29 @@ route_set_ipv6_nexthop_local(void *rule, const struct prefix *p, void *object)
{
struct in6_addr *address;
struct bgp_path_info *path;
struct bgp_dest *dest;
struct bgp_table *table = NULL;
/* Fetch routemap's rule information. */
address = rule;
path = object;
dest = path->net;
if (!dest)
return RMAP_OKAY;
table = bgp_dest_table(dest);
if (!table)
return RMAP_OKAY;
/* Set next hop value. */
path->attr->mp_nexthop_local = *address;
/* Set nexthop length. */
if (path->attr->mp_nexthop_len != BGP_ATTR_NHLEN_IPV6_GLOBAL_AND_LL &&
path->attr->mp_nexthop_len != BGP_ATTR_NHLEN_VPNV6_GLOBAL_AND_LL)
if (table->safi == SAFI_MPLS_VPN || table->safi == SAFI_ENCAP ||
table->safi == SAFI_EVPN)
path->attr->mp_nexthop_len = BGP_ATTR_NHLEN_VPNV6_GLOBAL_AND_LL;
else
path->attr->mp_nexthop_len = BGP_ATTR_NHLEN_IPV6_GLOBAL_AND_LL;
SET_FLAG(path->attr->rmap_change_flags,