]> git.proxmox.com Git - mirror_frr.git/commitdiff
plist: Delete prefix-list by sequence number
authorDonatas Abraitis <donatas.abraitis@gmail.com>
Fri, 24 May 2019 06:22:09 +0000 (09:22 +0300)
committerDonatas Abraitis <donatas.abraitis@gmail.com>
Thu, 30 May 2019 11:51:30 +0000 (14:51 +0300)
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
lib/plist.c

index 2a97e1e5b2bfc57c51d8b6fdffe47f02afa60745..9957ff1f51a8244314dc006648638206efb89c01 100644 (file)
@@ -998,22 +998,36 @@ static int vty_prefix_list_uninstall(struct vty *vty, afi_t afi,
                return CMD_SUCCESS;
        }
 
-       /* We must have, at a minimum, both the type and prefix here */
-       if ((typestr == NULL) || (prefix == NULL)) {
-               vty_out(vty, "%% Both prefix and type required\n");
-               return CMD_WARNING_CONFIG_FAILED;
-       }
-
        /* Check sequence number. */
        if (seq)
                seqnum = (int64_t)atol(seq);
 
+       /* Sequence number specified, but nothing else. */
+       if (seq && typestr == NULL && prefix == NULL && ge == NULL
+           && le == NULL) {
+               pentry = prefix_seq_check(plist, seqnum);
+
+               if (pentry == NULL) {
+                       vty_out(vty,
+                               "%% Can't find prefix-list %s with sequence number %lu\n",
+                               name, seqnum);
+                       return CMD_WARNING_CONFIG_FAILED;
+               }
+
+               prefix_list_entry_delete(plist, pentry, 1);
+               return CMD_SUCCESS;
+       }
+
        /* ge and le number */
        if (ge)
                genum = atoi(ge);
        if (le)
                lenum = atoi(le);
 
+       /* We must have, at a minimum, both the type and prefix here */
+       if ((typestr == NULL) || (prefix == NULL))
+               return CMD_WARNING_CONFIG_FAILED;
+
        /* Check of filter type. */
        if (strncmp("permit", typestr, 1) == 0)
                type = PREFIX_PERMIT;
@@ -1375,6 +1389,17 @@ DEFPY (no_ip_prefix_list,
                                         action, dest, ge_str, le_str);
 }
 
+DEFPY(no_ip_prefix_list_seq, no_ip_prefix_list_seq_cmd,
+      "no ip prefix-list WORD seq (1-4294967295)",
+      NO_STR IP_STR PREFIX_LIST_STR
+      "Name of a prefix list\n"
+      "sequence number of an entry\n"
+      "Sequence number\n")
+{
+       return vty_prefix_list_uninstall(vty, AFI_IP, prefix_list, seq_str,
+                                        NULL, NULL, NULL, NULL);
+}
+
 DEFPY (no_ip_prefix_list_all,
        no_ip_prefix_list_all_cmd,
        "no ip prefix-list WORD",
@@ -2059,6 +2084,7 @@ static void prefix_list_init_ipv4(void)
 
        install_element(CONFIG_NODE, &ip_prefix_list_cmd);
        install_element(CONFIG_NODE, &no_ip_prefix_list_cmd);
+       install_element(CONFIG_NODE, &no_ip_prefix_list_seq_cmd);
        install_element(CONFIG_NODE, &no_ip_prefix_list_all_cmd);
 
        install_element(CONFIG_NODE, &ip_prefix_list_description_cmd);