From: anlan_cs Date: Wed, 23 Feb 2022 04:10:42 +0000 (-0500) Subject: zebra: delay setting esi in zebra_evpn_local_es_update() X-Git-Tag: base_8.3~41^2 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=refs%2Fpull%2F10836%2Fhead;p=mirror%2Ffrr.git zebra: delay setting esi in zebra_evpn_local_es_update() 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 --- diff --git a/zebra/zebra_evpn_mh.c b/zebra/zebra_evpn_mh.c index a649dd981a..043ea0f248 100644 --- a/zebra/zebra_evpn_mh.c +++ b/zebra/zebra_evpn_mh.c @@ -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);