]> git.proxmox.com Git - mirror_frr.git/commitdiff
bgpd: Add missing `no` form for `neighbor path-attribute discard` cmd
authorDonatas Abraitis <donatas@opensourcerouting.org>
Sun, 22 Jan 2023 19:56:31 +0000 (21:56 +0200)
committerDonatas Abraitis <donatas@opensourcerouting.org>
Sun, 22 Jan 2023 20:17:39 +0000 (22:17 +0200)
Just forgot this _somehow_ :)

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
bgpd/bgp_attr.c
bgpd/bgp_attr.h
bgpd/bgp_vty.c

index e60c1bb8dc490b7fb87ff9821cd50eb0dfa66baf..392b558805272259d42cb1433ff4a99164bc7577 100644 (file)
@@ -5097,18 +5097,29 @@ void bgp_dump_routes_attr(struct stream *s, struct bgp_path_info *bpi,
 }
 
 void bgp_path_attribute_discard_vty(struct vty *vty, struct peer *peer,
-                                   const char *discard_attrs)
+                                   const char *discard_attrs, bool set)
 {
        int i, num_attributes;
        char **attributes;
        afi_t afi;
        safi_t safi;
 
-       if (discard_attrs) {
-               frrstr_split(discard_attrs, " ", &attributes, &num_attributes);
 
+       /* If `no` command specified without arbitrary attributes,
+        * then flush all.
+        */
+       if (!discard_attrs) {
                for (i = 0; i < BGP_ATTR_MAX; i++)
                        peer->discard_attrs[i] = false;
+               goto discard_soft_clear;
+       }
+
+       if (discard_attrs) {
+               frrstr_split(discard_attrs, " ", &attributes, &num_attributes);
+
+               if (set)
+                       for (i = 0; i < BGP_ATTR_MAX; i++)
+                               peer->discard_attrs[i] = false;
 
                for (i = 0; i < num_attributes; i++) {
                        uint8_t attr_num = strtoul(attributes[i], NULL, 10);
@@ -5142,10 +5153,10 @@ void bgp_path_attribute_discard_vty(struct vty *vty, struct peer *peer,
                                continue;
                        }
 
-                       peer->discard_attrs[attr_num] = true;
+                       peer->discard_attrs[attr_num] = set;
                }
                XFREE(MTYPE_TMP, attributes);
-
+       discard_soft_clear:
                /* Configuring path attributes to be discarded will trigger
                 * an inbound Route Refresh to ensure that the routing table
                 * is up to date.
index cb0bf4a43c1121d5d99fdd0a60ffa71ef00a631d..33283f4bf6d12d2c9a3a8d1b94e52f596f31d828 100644 (file)
@@ -415,7 +415,7 @@ extern void attr_show_all(struct vty *vty);
 extern unsigned long int attr_count(void);
 extern unsigned long int attr_unknown_count(void);
 extern void bgp_path_attribute_discard_vty(struct vty *vty, struct peer *peer,
-                                          const char *discard_attrs);
+                                          const char *discard_attrs, bool set);
 
 /* Cluster list prototypes. */
 extern bool cluster_loop_check(struct cluster_list *cluster,
index 5772900ce45ed50e015cdea55a526ac2b587957d..5738d9ef68b0a5148bd043bbbbd14ac7a6496e70 100644 (file)
@@ -8787,7 +8787,34 @@ DEFPY(neighbor_path_attribute_discard,
        if (idx)
                discard_attrs = argv_concat(argv, argc, idx);
 
-       bgp_path_attribute_discard_vty(vty, peer, discard_attrs);
+       bgp_path_attribute_discard_vty(vty, peer, discard_attrs, true);
+
+       return CMD_SUCCESS;
+}
+
+DEFPY(no_neighbor_path_attribute_discard,
+      no_neighbor_path_attribute_discard_cmd,
+      "no neighbor <A.B.C.D|X:X::X:X|WORD>$neighbor path-attribute discard [(1-255)]",
+      NO_STR
+      NEIGHBOR_STR
+      NEIGHBOR_ADDR_STR2
+      "Manipulate path attributes from incoming UPDATE messages\n"
+      "Drop specified attributes from incoming UPDATE messages\n"
+      "Attribute number\n")
+{
+       struct peer *peer;
+       int idx = 0;
+       const char *discard_attrs = NULL;
+
+       peer = peer_and_group_lookup_vty(vty, neighbor);
+       if (!peer)
+               return CMD_WARNING_CONFIG_FAILED;
+
+       argv_find(argv, argc, "(1-255)", &idx);
+       if (idx)
+               discard_attrs = argv[idx]->arg;
+
+       bgp_path_attribute_discard_vty(vty, peer, discard_attrs, false);
 
        return CMD_SUCCESS;
 }
@@ -19541,6 +19568,7 @@ void bgp_vty_init(void)
 
        /* "neighbor path-attribute discard" commands. */
        install_element(BGP_NODE, &neighbor_path_attribute_discard_cmd);
+       install_element(BGP_NODE, &no_neighbor_path_attribute_discard_cmd);
 
        /* "neighbor passive" commands. */
        install_element(BGP_NODE, &neighbor_passive_cmd);