mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-13 19:02:58 +00:00
bgpd: Simplify BGP community alias handling
Also, warn in CLI an operator if we are trying to overwrite an existing community alias with an existing alias. Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
This commit is contained in:
parent
5b0f36a8f7
commit
8cfa1e7846
@ -1640,8 +1640,7 @@ DEFPY(bgp_community_alias, bgp_community_alias_cmd,
|
||||
"Community (AA:BB or AA:BB:CC)\n"
|
||||
"Alias name\n")
|
||||
{
|
||||
struct community_alias ca1;
|
||||
struct community_alias ca2;
|
||||
struct community_alias ca = {};
|
||||
struct community_alias *lookup_community;
|
||||
struct community_alias *lookup_alias;
|
||||
struct community *comm;
|
||||
@ -1663,39 +1662,50 @@ DEFPY(bgp_community_alias, bgp_community_alias_cmd,
|
||||
return CMD_WARNING;
|
||||
}
|
||||
|
||||
memset(&ca1, 0, sizeof(ca1));
|
||||
memset(&ca2, 0, sizeof(ca2));
|
||||
strlcpy(ca1.community, community, sizeof(ca1.community));
|
||||
strlcpy(ca1.alias, alias_name, sizeof(ca1.alias));
|
||||
strlcpy(ca.community, community, sizeof(ca.community));
|
||||
strlcpy(ca.alias, alias_name, sizeof(ca.alias));
|
||||
|
||||
lookup_community = bgp_ca_community_lookup(&ca1);
|
||||
lookup_alias = bgp_ca_alias_lookup(&ca1);
|
||||
lookup_community = bgp_ca_community_lookup(&ca);
|
||||
lookup_alias = bgp_ca_alias_lookup(&ca);
|
||||
|
||||
if (no) {
|
||||
bgp_ca_alias_delete(&ca1);
|
||||
bgp_ca_community_delete(&ca1);
|
||||
bgp_ca_alias_delete(&ca);
|
||||
bgp_ca_community_delete(&ca);
|
||||
} else {
|
||||
if (lookup_alias) {
|
||||
/* Lookup if community hash table has an item
|
||||
* with the same alias name.
|
||||
*/
|
||||
strlcpy(ca2.community, lookup_alias->community,
|
||||
sizeof(ca2.community));
|
||||
if (bgp_ca_community_lookup(&ca2)) {
|
||||
strlcpy(ca.community, lookup_alias->community,
|
||||
sizeof(ca.community));
|
||||
if (bgp_ca_community_lookup(&ca)) {
|
||||
vty_out(vty,
|
||||
"community (%s) already has this alias (%s)\n",
|
||||
lookup_alias->community,
|
||||
lookup_alias->alias);
|
||||
return CMD_WARNING;
|
||||
}
|
||||
bgp_ca_alias_delete(&ca1);
|
||||
bgp_ca_alias_delete(&ca);
|
||||
}
|
||||
|
||||
if (lookup_community)
|
||||
bgp_ca_community_delete(&ca1);
|
||||
if (lookup_community) {
|
||||
/* Lookup if alias hash table has an item
|
||||
* with the same community.
|
||||
*/
|
||||
strlcpy(ca.alias, lookup_community->alias,
|
||||
sizeof(ca.alias));
|
||||
if (bgp_ca_alias_lookup(&ca)) {
|
||||
vty_out(vty,
|
||||
"alias (%s) already has this community (%s)\n",
|
||||
lookup_community->alias,
|
||||
lookup_community->community);
|
||||
return CMD_WARNING;
|
||||
}
|
||||
bgp_ca_community_delete(&ca);
|
||||
}
|
||||
|
||||
bgp_ca_alias_insert(&ca1);
|
||||
bgp_ca_community_insert(&ca1);
|
||||
bgp_ca_alias_insert(&ca);
|
||||
bgp_ca_community_insert(&ca);
|
||||
}
|
||||
|
||||
return CMD_SUCCESS;
|
||||
|
Loading…
Reference in New Issue
Block a user