]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: Do not call evpn_overlay_free no matter what
authorDonald Sharp <sharpd@nvidia.com>
Wed, 23 Oct 2024 17:16:29 +0000 (13:16 -0400)
committerDonatas Abraitis <donatas@opensourcerouting.org>
Mon, 17 Mar 2025 12:57:24 +0000 (14:57 +0200)
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 <sharpd@nvidia.com>
bgpd/bgp_route.c

index 4a36f1a26d334907091c01ceb0492b8cab3c6579..39bff576eb189a058453ac759b33de708cbff354 100644 (file)
@@ -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