diff options
| author | Donald Sharp <donaldsharp72@gmail.com> | 2025-03-22 15:24:48 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-03-22 15:24:48 -0400 |
| commit | 2ede906fd49293cf572be8a8c9ca2104d67724d3 (patch) | |
| tree | 7dd41388102b641881c77676beeb144c62c15de2 | |
| parent | 0f79b288b2eb251b7b8664d6351c1fd9a8ba1993 (diff) | |
| parent | 06ce1fed66a6a8c27abb6f9826cbc919a202b424 (diff) | |
Merge pull request #18457 from FRRouting/mergify/bp/stable/10.1/pr-18108
zebra: Do not flush an existing vni configuration trying to remove wrong vni (backport #18108)
| -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", |
