]> git.puffer.fish Git - matthieu/frr.git/commitdiff
zebra: Do not flush an existing vni configuration trying to remove wrong vni mergify/bp/stable/10.0/pr-18108
authorDonatas Abraitis <donatas@opensourcerouting.org>
Tue, 11 Feb 2025 19:22:12 +0000 (21:22 +0200)
committerMergify <37929162+mergify[bot]@users.noreply.github.com>
Sat, 22 Mar 2025 10:42:42 +0000 (10:42 +0000)
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)

zebra/zebra_cli.c

index 3e03d7477575e29f7a3fd48e2240502ef25e3d63..4f05c56009546f45a35d8ed65c350f8d6b236ff8 100644 (file)
@@ -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",