]> git.puffer.fish Git - matthieu/frr.git/commitdiff
zebra: optimization on the mac addition for evpn-mh
authoranlan_cs <vic.lan@pica8.com>
Thu, 24 Mar 2022 12:42:43 +0000 (20:42 +0800)
committeranlan_cs <vic.lan@pica8.com>
Thu, 24 Mar 2022 14:31:50 +0000 (22:31 +0800)
When `zebra_evpn_mac_svi_add()` adds one found mac by
`zebra_evpn_mac_lookup()` and the found mac is without
svi flag, then call `zebra_evpn_mac_svi_add()` to create
one appropriate mac, but it will call `zebra_evpn_mac_lookup()`
the second time. So lookup twice, the procedure is redundant.

Just an optimization for it, make sure only lookup once.

Modify `zebra_evpn_mac_gw_macip_add()` to check the `macp`
parameter passed by caller, so it can distinguish whether
really need lookup or not.

Signed-off-by: anlan_cs <vic.lan@pica8.com>
zebra/zebra_evpn_mac.c

index 1a1cbaa948816a4a52ce8bff2c363457de830c46..46d789bc343952a68556f10a5f2463c01e3f87a1 100644 (file)
@@ -2479,9 +2479,13 @@ void zebra_evpn_mac_gw_macip_add(struct interface *ifp,
        if (zvrf && zvrf->zns)
                local_ns_id = zvrf->zns->ns_id;
 
-       mac = zebra_evpn_mac_lookup(zevpn, macaddr);
-       if (!mac)
-               mac = zebra_evpn_mac_add(zevpn, macaddr);
+       if (!*macp) {
+               mac = zebra_evpn_mac_lookup(zevpn, macaddr);
+               if (!mac)
+                       mac = zebra_evpn_mac_add(zevpn, macaddr);
+               *macp = mac;
+       } else
+               mac = *macp;
 
        /* Set "local" forwarding info. */
        zebra_evpn_mac_clear_fwd_info(mac);
@@ -2494,8 +2498,6 @@ void zebra_evpn_mac_gw_macip_add(struct interface *ifp,
        mac->fwd_info.local.ifindex = ifp->ifindex;
        mac->fwd_info.local.ns_id = local_ns_id;
        mac->fwd_info.local.vid = vlan_id;
-
-       *macp = mac;
 }
 
 void zebra_evpn_mac_svi_del(struct interface *ifp, struct zebra_evpn *zevpn)
@@ -2548,7 +2550,6 @@ void zebra_evpn_mac_svi_add(struct interface *ifp, struct zebra_evpn *zevpn)
                                ? true
                                : false;
 
-       mac = NULL;
        zebra_evpn_mac_gw_macip_add(ifp, zevpn, NULL, &mac, &macaddr, 0, false);
 
        new_bgp_ready = zebra_evpn_mac_is_ready_for_bgp(mac->flags);