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 <vic.lan@pica8.com>
This commit is contained in:
anlan_cs 2022-02-22 23:10:42 -05:00
parent 64643ba79a
commit 0dfc0dd974

View 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);