From: Donald Sharp Date: Wed, 23 Oct 2024 17:16:29 +0000 (-0400) Subject: bgpd: Do not call evpn_overlay_free no matter what X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=518d3fab755d2d0c2cd07c6a67092bd738c060bd;p=matthieu%2Ffrr.git bgpd: Do not call evpn_overlay_free no matter what bgp_update is a very expensive call. Calling evpn_overlay_free even when we have no evpn data to free is not trivial. Let's limit the call into this function until we actually have data to free. Signed-off-by: Donald Sharp --- diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c index 4a36f1a26d..39bff576eb 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c @@ -4642,10 +4642,12 @@ void bgp_update(struct peer *peer, const struct prefix *p, uint32_t addpath_id, * will not be interned. In which case, it is ok to update the * attr->evpn_overlay, so that, this can be stored in adj_in. */ - if ((afi == AFI_L2VPN) && evpn) - bgp_attr_set_evpn_overlay(attr, evpn); - else - evpn_overlay_free(evpn); + if (evpn) { + if (afi == AFI_L2VPN) + bgp_attr_set_evpn_overlay(attr, evpn); + else + evpn_overlay_free(evpn); + } bgp_adj_in_set(dest, peer, attr, addpath_id, &bgp_labels); } @@ -4821,10 +4823,12 @@ void bgp_update(struct peer *peer, const struct prefix *p, uint32_t addpath_id, * attr->evpn_overlay with evpn directly. Instead memcpy * evpn to new_atr.evpn_overlay before it is interned. */ - if (soft_reconfig && (afi == AFI_L2VPN) && evpn) - bgp_attr_set_evpn_overlay(&new_attr, evpn); - else - evpn_overlay_free(evpn); + if (soft_reconfig && evpn) { + if (afi == AFI_L2VPN) + bgp_attr_set_evpn_overlay(&new_attr, evpn); + else + evpn_overlay_free(evpn); + } /* Apply incoming route-map. * NB: new_attr may now contain newly allocated values from route-map