From: Donatas Abraitis Date: Mon, 25 Apr 2022 16:06:49 +0000 (+0300) Subject: lib: Ignore duplicate alist/plist entries in CLI X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=3745e385ca342f351fff00185c48c8981170b31f;p=mirror%2Ffrr.git lib: Ignore duplicate alist/plist entries in CLI If duplicate value is entered, the whole plist/alist just dropped. Before: ``` $ grep prefix-list /etc/frr/frr.conf ip prefix-list test seq 5 permit 1.1.1.1/32 ip prefix-list test seq 10 permit 1.1.1.1/32 $ systemctl restart frr $ vtysh -c 'show run | include prefix-list' $ ``` After: ``` $ grep prefix-list /etc/frr/frr.conf ip prefix-list test seq 5 permit 1.1.1.1/32 ip prefix-list test seq 10 permit 1.1.1.1/32 $ systemctl restart frr $ vtysh -c 'show run | include prefix-list' ip prefix-list test seq 5 permit 1.1.1.1/32 ``` Signed-off-by: Donatas Abraitis (cherry picked from commit 1db0e0c6c8aba5023f807a1be03ca97d20f3c20d) --- diff --git a/lib/filter_cli.c b/lib/filter_cli.c index fb40c527dd..9a877a5704 100644 --- a/lib/filter_cli.c +++ b/lib/filter_cli.c @@ -151,28 +151,25 @@ DEFPY_YANG( * Backward compatibility: don't complain about duplicated values, * just silently accept. */ - if (seq_str == NULL) { - ada.ada_type = "ipv4"; - ada.ada_name = name; - ada.ada_action = action; - if (host_str && mask_str == NULL) { - ada.ada_xpath[0] = "./host"; - ada.ada_value[0] = host_str; - } else if (host_str && mask_str) { - ada.ada_xpath[0] = "./network/address"; - ada.ada_value[0] = host_str; - ada.ada_xpath[1] = "./network/mask"; - ada.ada_value[1] = mask_str; - } else { - ada.ada_xpath[0] = "./source-any"; - ada.ada_value[0] = ""; - } - - /* Duplicated entry without sequence, just quit. */ - if (acl_is_dup(vty->candidate_config->dnode, &ada)) - return CMD_SUCCESS; + ada.ada_type = "ipv4"; + ada.ada_name = name; + ada.ada_action = action; + if (host_str && mask_str == NULL) { + ada.ada_xpath[0] = "./host"; + ada.ada_value[0] = host_str; + } else if (host_str && mask_str) { + ada.ada_xpath[0] = "./network/address"; + ada.ada_value[0] = host_str; + ada.ada_xpath[1] = "./network/mask"; + ada.ada_value[1] = mask_str; + } else { + ada.ada_xpath[0] = "./source-any"; + ada.ada_value[0] = ""; } + if (acl_is_dup(vty->candidate_config->dnode, &ada)) + return CMD_SUCCESS; + /* * Create the access-list first, so we can generate sequence if * none given (backward compatibility). @@ -280,49 +277,46 @@ DEFPY_YANG( * Backward compatibility: don't complain about duplicated values, * just silently accept. */ - if (seq_str == NULL) { - ada.ada_type = "ipv4"; - ada.ada_name = name; - ada.ada_action = action; - if (src_str && src_mask_str == NULL) { - ada.ada_xpath[idx] = "./host"; - ada.ada_value[idx] = src_str; - idx++; - } else if (src_str && src_mask_str) { - ada.ada_xpath[idx] = "./network/address"; - ada.ada_value[idx] = src_str; - idx++; - ada.ada_xpath[idx] = "./network/mask"; - ada.ada_value[idx] = src_mask_str; - idx++; - } else { - ada.ada_xpath[idx] = "./source-any"; - ada.ada_value[idx] = ""; - idx++; - } - - if (dst_str && dst_mask_str == NULL) { - ada.ada_xpath[idx] = "./destination-host"; - ada.ada_value[idx] = dst_str; - idx++; - } else if (dst_str && dst_mask_str) { - ada.ada_xpath[idx] = "./destination-network/address"; - ada.ada_value[idx] = dst_str; - idx++; - ada.ada_xpath[idx] = "./destination-network/mask"; - ada.ada_value[idx] = dst_mask_str; - idx++; - } else { - ada.ada_xpath[idx] = "./destination-any"; - ada.ada_value[idx] = ""; - idx++; - } + ada.ada_type = "ipv4"; + ada.ada_name = name; + ada.ada_action = action; + if (src_str && src_mask_str == NULL) { + ada.ada_xpath[idx] = "./host"; + ada.ada_value[idx] = src_str; + idx++; + } else if (src_str && src_mask_str) { + ada.ada_xpath[idx] = "./network/address"; + ada.ada_value[idx] = src_str; + idx++; + ada.ada_xpath[idx] = "./network/mask"; + ada.ada_value[idx] = src_mask_str; + idx++; + } else { + ada.ada_xpath[idx] = "./source-any"; + ada.ada_value[idx] = ""; + idx++; + } - /* Duplicated entry without sequence, just quit. */ - if (acl_is_dup(vty->candidate_config->dnode, &ada)) - return CMD_SUCCESS; + if (dst_str && dst_mask_str == NULL) { + ada.ada_xpath[idx] = "./destination-host"; + ada.ada_value[idx] = dst_str; + idx++; + } else if (dst_str && dst_mask_str) { + ada.ada_xpath[idx] = "./destination-network/address"; + ada.ada_value[idx] = dst_str; + idx++; + ada.ada_xpath[idx] = "./destination-network/mask"; + ada.ada_value[idx] = dst_mask_str; + idx++; + } else { + ada.ada_xpath[idx] = "./destination-any"; + ada.ada_value[idx] = ""; + idx++; } + if (acl_is_dup(vty->candidate_config->dnode, &ada)) + return CMD_SUCCESS; + /* * Create the access-list first, so we can generate sequence if * none given (backward compatibility). @@ -466,28 +460,25 @@ DEFPY_YANG( * Backward compatibility: don't complain about duplicated values, * just silently accept. */ - if (seq_str == NULL) { - ada.ada_type = "ipv4"; - ada.ada_name = name; - ada.ada_action = action; - - if (prefix_str) { - ada.ada_xpath[0] = "./ipv4-prefix"; - ada.ada_value[0] = prefix_str; - if (exact) { - ada.ada_xpath[1] = "./ipv4-exact-match"; - ada.ada_value[1] = "true"; - } - } else { - ada.ada_xpath[0] = "./any"; - ada.ada_value[0] = ""; - } + ada.ada_type = "ipv4"; + ada.ada_name = name; + ada.ada_action = action; - /* Duplicated entry without sequence, just quit. */ - if (acl_is_dup(vty->candidate_config->dnode, &ada)) - return CMD_SUCCESS; + if (prefix_str) { + ada.ada_xpath[0] = "./ipv4-prefix"; + ada.ada_value[0] = prefix_str; + if (exact) { + ada.ada_xpath[1] = "./ipv4-exact-match"; + ada.ada_value[1] = "true"; + } + } else { + ada.ada_xpath[0] = "./any"; + ada.ada_value[0] = ""; } + if (acl_is_dup(vty->candidate_config->dnode, &ada)) + return CMD_SUCCESS; + /* * Create the access-list first, so we can generate sequence if * none given (backward compatibility). @@ -656,28 +647,25 @@ DEFPY_YANG( * Backward compatibility: don't complain about duplicated values, * just silently accept. */ - if (seq_str == NULL) { - ada.ada_type = "ipv6"; - ada.ada_name = name; - ada.ada_action = action; - - if (prefix_str) { - ada.ada_xpath[0] = "./ipv6-prefix"; - ada.ada_value[0] = prefix_str; - if (exact) { - ada.ada_xpath[1] = "./ipv6-exact-match"; - ada.ada_value[1] = "true"; - } - } else { - ada.ada_xpath[0] = "./any"; - ada.ada_value[0] = ""; - } + ada.ada_type = "ipv6"; + ada.ada_name = name; + ada.ada_action = action; - /* Duplicated entry without sequence, just quit. */ - if (acl_is_dup(vty->candidate_config->dnode, &ada)) - return CMD_SUCCESS; + if (prefix_str) { + ada.ada_xpath[0] = "./ipv6-prefix"; + ada.ada_value[0] = prefix_str; + if (exact) { + ada.ada_xpath[1] = "./ipv6-exact-match"; + ada.ada_value[1] = "true"; + } + } else { + ada.ada_xpath[0] = "./any"; + ada.ada_value[0] = ""; } + if (acl_is_dup(vty->candidate_config->dnode, &ada)) + return CMD_SUCCESS; + /* * Create the access-list first, so we can generate sequence if * none given (backward compatibility). @@ -850,24 +838,21 @@ DEFPY_YANG( * Backward compatibility: don't complain about duplicated values, * just silently accept. */ - if (seq_str == NULL) { - ada.ada_type = "mac"; - ada.ada_name = name; - ada.ada_action = action; - - if (mac_str) { - ada.ada_xpath[0] = "./mac"; - ada.ada_value[0] = mac_str; - } else { - ada.ada_xpath[0] = "./any"; - ada.ada_value[0] = ""; - } + ada.ada_type = "mac"; + ada.ada_name = name; + ada.ada_action = action; - /* Duplicated entry without sequence, just quit. */ - if (acl_is_dup(vty->candidate_config->dnode, &ada)) - return CMD_SUCCESS; + if (mac_str) { + ada.ada_xpath[0] = "./mac"; + ada.ada_value[0] = mac_str; + } else { + ada.ada_xpath[0] = "./any"; + ada.ada_value[0] = ""; } + if (acl_is_dup(vty->candidate_config->dnode, &ada)) + return CMD_SUCCESS; + /* * Create the access-list first, so we can generate sequence if * none given (backward compatibility). @@ -1272,23 +1257,20 @@ DEFPY_YANG( * Backward compatibility: don't complain about duplicated values, * just silently accept. */ - if (seq_str == NULL) { - pda.pda_type = "ipv4"; - pda.pda_name = name; - pda.pda_action = action; - if (prefix_str) { - prefix_copy(&pda.prefix, prefix); - pda.ge = ge; - pda.le = le; - } else { - pda.any = true; - } - - /* Duplicated entry without sequence, just quit. */ - if (plist_is_dup(vty->candidate_config->dnode, &pda)) - return CMD_SUCCESS; + pda.pda_type = "ipv4"; + pda.pda_name = name; + pda.pda_action = action; + if (prefix_str) { + prefix_copy(&pda.prefix, prefix); + pda.ge = ge; + pda.le = le; + } else { + pda.any = true; } + if (plist_is_dup(vty->candidate_config->dnode, &pda)) + return CMD_SUCCESS; + /* * Create the prefix-list first, so we can generate sequence if * none given (backward compatibility). @@ -1476,23 +1458,20 @@ DEFPY_YANG( * Backward compatibility: don't complain about duplicated values, * just silently accept. */ - if (seq_str == NULL) { - pda.pda_type = "ipv6"; - pda.pda_name = name; - pda.pda_action = action; - if (prefix_str) { - prefix_copy(&pda.prefix, prefix); - pda.ge = ge; - pda.le = le; - } else { - pda.any = true; - } - - /* Duplicated entry without sequence, just quit. */ - if (plist_is_dup(vty->candidate_config->dnode, &pda)) - return CMD_SUCCESS; + pda.pda_type = "ipv6"; + pda.pda_name = name; + pda.pda_action = action; + if (prefix_str) { + prefix_copy(&pda.prefix, prefix); + pda.ge = ge; + pda.le = le; + } else { + pda.any = true; } + if (plist_is_dup(vty->candidate_config->dnode, &pda)) + return CMD_SUCCESS; + /* * Create the prefix-list first, so we can generate sequence if * none given (backward compatibility).