From: Philippe Guibert Date: Mon, 13 Feb 2023 11:18:33 +0000 (+0100) Subject: bgpd: clarify when the vpnv6 nexthop length must be modified X-Git-Tag: base_9.0~379^2 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=refs%2Fpull%2F12795%2Fhead;p=mirror%2Ffrr.git 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: 9795e9f23465 ("bgpd: fix when route-map changes the link local nexthop for vpnv6") Signed-off-by: Philippe Guibert --- diff --git a/bgpd/bgp_routemap.c b/bgpd/bgp_routemap.c index 5aa3ec4fd1..4a2029c026 100644 --- a/bgpd/bgp_routemap.c +++ b/bgpd/bgp_routemap.c @@ -3650,17 +3650,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,