diff options
| author | Donatas Abraitis <donatas@opensourcerouting.org> | 2025-02-11 21:22:12 +0200 | 
|---|---|---|
| committer | Mergify <37929162+mergify[bot]@users.noreply.github.com> | 2025-03-22 10:42:42 +0000 | 
| commit | b3923c5cfbc740a6e7a35563f4a0b3954e17a881 (patch) | |
| tree | e15a5fca7bb516917008a3e36986ea526a97e466 | |
| parent | fd2a3696b18ddb1fd35b27589f8de1dcdb7b83c0 (diff) | |
zebra: Do not flush an existing vni configuration trying to remove wrong vnimergify/bp/stable/10.0/pr-18108
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 <donatas@opensourcerouting.org>
(cherry picked from commit 44fe3981ee388f7c60ab2635309bce34774116e1)
| -rw-r--r-- | zebra/zebra_cli.c | 28 | 
1 files changed, 24 insertions, 4 deletions
diff --git a/zebra/zebra_cli.c b/zebra/zebra_cli.c index 3e03d74775..4f05c56009 100644 --- a/zebra/zebra_cli.c +++ b/zebra/zebra_cli.c @@ -2317,12 +2317,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",  | 
