]> git.proxmox.com Git - mirror_frr.git/commitdiff
zebra: delay setting esi in zebra_evpn_local_es_update()
authoranlan_cs <vic.lan@pica8.com>
Wed, 23 Feb 2022 04:10:42 +0000 (23:10 -0500)
committeranlan_cs <vic.lan@pica8.com>
Mon, 16 May 2022 13:40:49 +0000 (09:40 -0400)
Currently, `zif->es_info.esi` is always set even for a few unnecessary
cases in `zebra_evpn_local_es_update()`.

Delay setting `zif->es_info.esi` and remove the annoying rollback
(i.e. unset `zif->es_info.esi`) operation on failure case.

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

index a649dd981ae7c4f7712002363c0c2a9c854633fa..043ea0f248e63f8f1a1266801918e55d8384c789 100644 (file)
@@ -2312,7 +2312,6 @@ static int zebra_evpn_local_es_update(struct zebra_if *zif, esi_t *esi)
        struct zebra_evpn_es *old_es = zif->es_info.es;
        struct zebra_evpn_es *es;
 
-       memcpy(&zif->es_info.esi, esi, sizeof(*esi));
        if (old_es && !memcmp(&old_es->esi, esi, sizeof(*esi)))
                /* dup - nothing to be done */
                return 0;
@@ -2324,15 +2323,14 @@ static int zebra_evpn_local_es_update(struct zebra_if *zif, esi_t *esi)
        es = zebra_evpn_es_find(esi);
        if (es) {
                /* if it exists against another interface flag an error */
-               if (es->zif && es->zif != zif) {
-                       memset(&zif->es_info.esi, 0, sizeof(*esi));
+               if (es->zif && es->zif != zif)
                        return -1;
-               }
        } else {
                /* create new es */
                es = zebra_evpn_es_new(esi);
        }
 
+       memcpy(&zif->es_info.esi, esi, sizeof(*esi));
        if (es)
                zebra_evpn_es_local_info_set(es, zif);