From 44fe3981ee388f7c60ab2635309bce34774116e1 Mon Sep 17 00:00:00 2001 From: Donatas Abraitis Date: Tue, 11 Feb 2025 21:22:12 +0200 Subject: [PATCH] zebra: Do not flush an existing vni configuration trying to remove wrong vni Before: ``` pc.donatas.net(config)# do sh run | include vni vni 1 pc.donatas.net(config)# no vni 2 pc.donatas.net(config)# do sh run | include vni pc.donatas.net(config)# ``` Signed-off-by: Donatas Abraitis --- zebra/zebra_cli.c | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/zebra/zebra_cli.c b/zebra/zebra_cli.c index bb799283261b..8b2eab3f5d19 100644 --- a/zebra/zebra_cli.c +++ b/zebra/zebra_cli.c @@ -2355,12 +2355,32 @@ DEFPY_YANG (vni_mapping, "VNI-ID\n" "prefix-routes-only\n") { - if (!no) + const struct lyd_node *dnode; + const char *vrf; + + if (!no) { nb_cli_enqueue_change(vty, "./frr-zebra:zebra/l3vni-id", NB_OP_MODIFY, vni_str); - else - nb_cli_enqueue_change(vty, "./frr-zebra:zebra/l3vni-id", NB_OP_DESTROY, - NULL); + } else { + if (vty->node == CONFIG_NODE) { + if (yang_dnode_existsf(vty->candidate_config->dnode, + "/frr-vrf:lib/vrf[name='%s']/frr-zebra:zebra[l3vni-id='%lu']", + VRF_DEFAULT_NAME, vni)) + nb_cli_enqueue_change(vty, "./frr-zebra:zebra/l3vni-id", + NB_OP_DESTROY, NULL); + } else { + dnode = yang_dnode_get(vty->candidate_config->dnode, VTY_CURR_XPATH); + if (dnode) { + vrf = yang_dnode_get_string(dnode, "name"); + + if (yang_dnode_existsf(vty->candidate_config->dnode, + "/frr-vrf:lib/vrf[name='%s']/frr-zebra:zebra[l3vni-id='%lu']", + vrf, vni)) + nb_cli_enqueue_change(vty, "./frr-zebra:zebra/l3vni-id", + NB_OP_DESTROY, NULL); + } + } + } if (filter) nb_cli_enqueue_change(vty, "./frr-zebra:zebra/prefix-only",