]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: Simplify BGP community alias handling
authorDonatas Abraitis <donatas@opensourcerouting.org>
Thu, 26 May 2022 17:15:35 +0000 (20:15 +0300)
committerMergify <37929162+mergify[bot]@users.noreply.github.com>
Mon, 30 May 2022 12:27:54 +0000 (12:27 +0000)
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>
(cherry picked from commit 8cfa1e78463844518bb95d59fee2da440bbd208e)

bgpd/bgp_vty.c

index a516176670e5401ddd02157eb77846bb9f67a779..29b56b57797ad583858c79c0730e7e4b9cab1bac 100644 (file)
@@ -1604,8 +1604,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;
@@ -1627,39 +1626,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;