]> git.puffer.fish Git - mirror/frr.git/commitdiff
lib: ip prefix-list enforce expected ge le behavior 8632/head
authorWesley Coakley <wcoakley@nvidia.com>
Wed, 5 May 2021 14:28:53 +0000 (10:28 -0400)
committerWesley Coakley <wcoakley@nvidia.com>
Thu, 6 May 2021 18:07:06 +0000 (14:07 -0400)
When specifying only an "le" for an existing ip prefix-list qualified with
both an "le" and "ge" make sure to remove the "ge" property so it does
not stay in the tree.

E.g. Saying these two things in order:

ip prefix-list test seq 1 permit 1.1.0.0/16 ge 18 le 24
ip prefix-list test seq 1 permit 1.1.0.0/16 ge 18

... should result in the second statement "overwriting" the first like
this:

vxdev-arch# do show ip prefix-list
ZEBRA: ip prefix-list foobar: 3 entries
   seq 1 permit 15.0.0.0/16 ge 18

Previously this did not happen and "le" would stick around since it was
never given NB_OP_DESTROY and purged from the data tree.

Signed-off-by: Wesley Coakley <wcoakley@nvidia.com>
lib/filter_cli.c

index e147ed56390f71c87f3b1c4f67d72645cb7721b0..f030ce1b335a6433a0b2922c59e0c9e0f4ef0a9f 100644 (file)
@@ -1360,14 +1360,31 @@ DEFPY_YANG(
                nb_cli_enqueue_change(vty, "./ipv4-prefix", NB_OP_MODIFY,
                                      prefix_str);
 
-               if (ge_str)
+               if (ge_str) {
                        nb_cli_enqueue_change(
                                vty, "./ipv4-prefix-length-greater-or-equal",
                                NB_OP_MODIFY, ge_str);
-               if (le_str)
+               } else {
+                       /*
+                        * Remove old ge if not being modified
+                        */
+                       nb_cli_enqueue_change(
+                               vty, "./ipv4-prefix-length-greater-or-equal",
+                               NB_OP_DESTROY, NULL);
+               }
+
+               if (le_str) {
                        nb_cli_enqueue_change(
                                vty, "./ipv4-prefix-length-lesser-or-equal",
                                NB_OP_MODIFY, le_str);
+               } else {
+                       /*
+                        * Remove old le if not being modified
+                        */
+                       nb_cli_enqueue_change(
+                               vty, "./ipv4-prefix-length-lesser-or-equal",
+                               NB_OP_DESTROY, NULL);
+               }
        } else {
                nb_cli_enqueue_change(vty, "./any", NB_OP_CREATE, NULL);
        }
@@ -1561,14 +1578,31 @@ DEFPY_YANG(
                nb_cli_enqueue_change(vty, "./ipv6-prefix", NB_OP_MODIFY,
                                      prefix_str);
 
-               if (ge_str)
+               if (ge_str) {
                        nb_cli_enqueue_change(
                                vty, "./ipv6-prefix-length-greater-or-equal",
                                NB_OP_MODIFY, ge_str);
-               if (le_str)
+               } else {
+                       /*
+                        * Remove old ge if not being modified
+                        */
+                       nb_cli_enqueue_change(
+                               vty, "./ipv6-prefix-length-greater-or-equal",
+                               NB_OP_DESTROY, NULL);
+               }
+
+               if (le_str) {
                        nb_cli_enqueue_change(
                                vty, "./ipv6-prefix-length-lesser-or-equal",
                                NB_OP_MODIFY, le_str);
+               } else {
+                       /*
+                        * Remove old le if not being modified
+                        */
+                       nb_cli_enqueue_change(
+                               vty, "./ipv6-prefix-length-lesser-or-equal",
+                               NB_OP_DESTROY, NULL);
+               }
        } else {
                nb_cli_enqueue_change(vty, "./any", NB_OP_CREATE, NULL);
        }