Merge pull request #12678 from opensourcerouting/fix/missing_no_form_for_path_attribute_discard

bgpd: Add missing `no` form for `neighbor path-attribute discard` cmd
This commit is contained in:
Russ White 2023-01-24 10:45:03 -05:00 committed by GitHub
commit b25695f630
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 46 additions and 7 deletions

View 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, 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; int i, num_attributes;
char **attributes; char **attributes;
afi_t afi; afi_t afi;
safi_t safi; safi_t safi;
/* 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) { if (discard_attrs) {
frrstr_split(discard_attrs, " ", &attributes, &num_attributes); frrstr_split(discard_attrs, " ", &attributes, &num_attributes);
for (i = 0; i < BGP_ATTR_MAX; i++) if (set)
peer->discard_attrs[i] = false; for (i = 0; i < BGP_ATTR_MAX; i++)
peer->discard_attrs[i] = false;
for (i = 0; i < num_attributes; i++) { for (i = 0; i < num_attributes; i++) {
uint8_t attr_num = strtoul(attributes[i], NULL, 10); 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; continue;
} }
peer->discard_attrs[attr_num] = true; peer->discard_attrs[attr_num] = set;
} }
XFREE(MTYPE_TMP, attributes); XFREE(MTYPE_TMP, attributes);
discard_soft_clear:
/* Configuring path attributes to be discarded will trigger /* Configuring path attributes to be discarded will trigger
* an inbound Route Refresh to ensure that the routing table * an inbound Route Refresh to ensure that the routing table
* is up to date. * is up to date.

View 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_count(void);
extern unsigned long int attr_unknown_count(void); extern unsigned long int attr_unknown_count(void);
extern void bgp_path_attribute_discard_vty(struct vty *vty, struct peer *peer, 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. */ /* Cluster list prototypes. */
extern bool cluster_loop_check(struct cluster_list *cluster, extern bool cluster_loop_check(struct cluster_list *cluster,

View File

@ -8787,7 +8787,34 @@ DEFPY(neighbor_path_attribute_discard,
if (idx) if (idx)
discard_attrs = argv_concat(argv, argc, 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; return CMD_SUCCESS;
} }
@ -19541,6 +19568,7 @@ void bgp_vty_init(void)
/* "neighbor path-attribute discard" commands. */ /* "neighbor path-attribute discard" commands. */
install_element(BGP_NODE, &neighbor_path_attribute_discard_cmd); install_element(BGP_NODE, &neighbor_path_attribute_discard_cmd);
install_element(BGP_NODE, &no_neighbor_path_attribute_discard_cmd);
/* "neighbor passive" commands. */ /* "neighbor passive" commands. */
install_element(BGP_NODE, &neighbor_passive_cmd); install_element(BGP_NODE, &neighbor_passive_cmd);