]> git.proxmox.com Git - mirror_frr.git/blobdiff - bgpd/bgp_vty.c
bgpd: Allow shortened 'no set large-community' and 'no set large-comm-list'
[mirror_frr.git] / bgpd / bgp_vty.c
index c57cd3815102af63f5e1027d6df2cce3e0daa969..2a4421aa54d30089d77699025c5100ec70f8075e 100644 (file)
@@ -61,6 +61,7 @@
 #include "bgpd/bgp_bfd.h"
 #include "bgpd/bgp_io.h"
 #include "bgpd/bgp_evpn.h"
+#include "bgpd/bgp_addpath.h"
 
 static struct peer_group *listen_range_exists(struct bgp *bgp,
                                              struct prefix *range, int exact);
@@ -601,7 +602,7 @@ static int bgp_clear(struct vty *vty, struct bgp *bgp, afi_t afi, safi_t safi,
                        bgp->update_delay_over = 0;
 
                if (!found)
-                       vty_out(vty, "%%BGP: No %s peer configured",
+                       vty_out(vty, "%%BGP: No %s peer configured\n",
                                afi_safi_print(afi, safi));
 
                return CMD_SUCCESS;
@@ -971,6 +972,7 @@ DEFUN_NOSH (router_bgp,
        int idx_asn = 2;
        int idx_view_vrf = 3;
        int idx_vrf = 4;
+       int is_new_bgp = 0;
        int ret;
        as_t as;
        struct bgp *bgp;
@@ -1010,6 +1012,9 @@ DEFUN_NOSH (router_bgp,
                                inst_type = BGP_INSTANCE_TYPE_VIEW;
                }
 
+               if (inst_type == BGP_INSTANCE_TYPE_DEFAULT)
+                       is_new_bgp = (bgp_lookup(as, name) == NULL);
+
                ret = bgp_get(&bgp, &as, name, inst_type);
                switch (ret) {
                case BGP_ERR_MULTIPLE_INSTANCE_NOT_SET:
@@ -1033,7 +1038,7 @@ DEFUN_NOSH (router_bgp,
                 * any pending VRF-VPN leaking that was configured via
                 * earlier "router bgp X vrf FOO" blocks.
                 */
-               if (inst_type == BGP_INSTANCE_TYPE_DEFAULT)
+               if (is_new_bgp && inst_type == BGP_INSTANCE_TYPE_DEFAULT)
                        vpn_leak_postchange_all();
 
                /* Pending: handle when user tries to change a view to vrf n vv.
@@ -1888,9 +1893,8 @@ DEFUN (no_bgp_deterministic_med,
 
                for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer)) {
                        FOREACH_AFI_SAFI (afi, safi)
-                               if (CHECK_FLAG(
-                                           peer->af_flags[afi][safi],
-                                           PEER_FLAG_ADDPATH_TX_BESTPATH_PER_AS)) {
+                               if (bgp_addpath_dmed_required(
+                                       peer->addpath_type[afi][safi])) {
                                        bestpath_per_as_used = 1;
                                        break;
                                }
@@ -6234,9 +6238,9 @@ DEFUN (neighbor_addpath_tx_all_paths,
        if (!peer)
                return CMD_WARNING_CONFIG_FAILED;
 
-       return peer_af_flag_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
-                                   bgp_node_safi(vty),
-                                   PEER_FLAG_ADDPATH_TX_ALL_PATHS);
+       bgp_addpath_set_peer_type(peer, bgp_node_afi(vty), bgp_node_safi(vty),
+                                BGP_ADDPATH_ALL);
+       return CMD_SUCCESS;
 }
 
 ALIAS_HIDDEN(neighbor_addpath_tx_all_paths,
@@ -6254,9 +6258,23 @@ DEFUN (no_neighbor_addpath_tx_all_paths,
        "Use addpath to advertise all paths to a neighbor\n")
 {
        int idx_peer = 2;
-       return peer_af_flag_unset_vty(vty, argv[idx_peer]->arg,
-                                     bgp_node_afi(vty), bgp_node_safi(vty),
-                                     PEER_FLAG_ADDPATH_TX_ALL_PATHS);
+       struct peer *peer;
+
+       peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
+       if (!peer)
+               return CMD_WARNING_CONFIG_FAILED;
+
+       if (peer->addpath_type[bgp_node_afi(vty)][bgp_node_safi(vty)]
+           != BGP_ADDPATH_ALL) {
+               vty_out(vty,
+                       "%% Peer not currently configured to transmit all paths.");
+               return CMD_WARNING_CONFIG_FAILED;
+       }
+
+       bgp_addpath_set_peer_type(peer, bgp_node_afi(vty), bgp_node_safi(vty),
+                                BGP_ADDPATH_NONE);
+
+       return CMD_SUCCESS;
 }
 
 ALIAS_HIDDEN(no_neighbor_addpath_tx_all_paths,
@@ -6279,9 +6297,10 @@ DEFUN (neighbor_addpath_tx_bestpath_per_as,
        if (!peer)
                return CMD_WARNING_CONFIG_FAILED;
 
-       return peer_af_flag_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
-                                   bgp_node_safi(vty),
-                                   PEER_FLAG_ADDPATH_TX_BESTPATH_PER_AS);
+       bgp_addpath_set_peer_type(peer, bgp_node_afi(vty), bgp_node_safi(vty),
+                                BGP_ADDPATH_BEST_PER_AS);
+
+       return CMD_SUCCESS;
 }
 
 ALIAS_HIDDEN(neighbor_addpath_tx_bestpath_per_as,
@@ -6299,9 +6318,23 @@ DEFUN (no_neighbor_addpath_tx_bestpath_per_as,
        "Use addpath to advertise the bestpath per each neighboring AS\n")
 {
        int idx_peer = 2;
-       return peer_af_flag_unset_vty(vty, argv[idx_peer]->arg,
-                                     bgp_node_afi(vty), bgp_node_safi(vty),
-                                     PEER_FLAG_ADDPATH_TX_BESTPATH_PER_AS);
+       struct peer *peer;
+
+       peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
+       if (!peer)
+               return CMD_WARNING_CONFIG_FAILED;
+
+       if (peer->addpath_type[bgp_node_afi(vty)][bgp_node_safi(vty)]
+           != BGP_ADDPATH_BEST_PER_AS) {
+               vty_out(vty,
+                       "%% Peer not currently configured to transmit all best path per as.");
+               return CMD_WARNING_CONFIG_FAILED;
+       }
+
+       bgp_addpath_set_peer_type(peer, bgp_node_afi(vty), bgp_node_safi(vty),
+                                BGP_ADDPATH_NONE);
+
+       return CMD_SUCCESS;
 }
 
 ALIAS_HIDDEN(no_neighbor_addpath_tx_bestpath_per_as,
@@ -7180,7 +7213,9 @@ static int bgp_clear_prefix(struct vty *vty, const char *view_name,
                        if (prd && memcmp(rn->p.u.val, prd->val, 8) != 0)
                                continue;
 
-                       if ((table = rn->info) != NULL) {
+                       table = bgp_node_get_bgp_table_info(rn);
+                       if (table != NULL) {
+
                                if ((rm = bgp_node_match(table, &match))
                                    != NULL) {
                                        if (rm->p.prefixlen
@@ -8656,15 +8691,11 @@ static void bgp_show_peer_afi(struct vty *vty, struct peer *p, afi_t afi,
                                json_addr,
                                "privateAsNumsRemovedInUpdatesToNbr");
 
-               if (CHECK_FLAG(p->af_flags[afi][safi],
-                              PEER_FLAG_ADDPATH_TX_ALL_PATHS))
-                       json_object_boolean_true_add(json_addr,
-                                                    "addpathTxAllPaths");
-
-               if (CHECK_FLAG(p->af_flags[afi][safi],
-                              PEER_FLAG_ADDPATH_TX_BESTPATH_PER_AS))
-                       json_object_boolean_true_add(json_addr,
-                                                    "addpathTxBestpathPerAS");
+               if (p->addpath_type[afi][safi] != BGP_ADDPATH_NONE)
+                       json_object_boolean_true_add(
+                               json_addr,
+                               bgp_addpath_names(p->addpath_type[afi][safi])
+                                       ->type_json_name);
 
                if (CHECK_FLAG(p->af_flags[afi][safi], PEER_FLAG_AS_OVERRIDE))
                        json_object_string_add(json_addr,
@@ -8930,14 +8961,10 @@ static void bgp_show_peer_afi(struct vty *vty, struct peer *p, afi_t afi,
                        vty_out(vty,
                                "  Private AS numbers removed in updates to this neighbor\n");
 
-               if (CHECK_FLAG(p->af_flags[afi][safi],
-                              PEER_FLAG_ADDPATH_TX_ALL_PATHS))
-                       vty_out(vty, "  Advertise all paths via addpath\n");
-
-               if (CHECK_FLAG(p->af_flags[afi][safi],
-                              PEER_FLAG_ADDPATH_TX_BESTPATH_PER_AS))
-                       vty_out(vty,
-                               "  Advertise bestpath per AS via addpath\n");
+               if (p->addpath_type[afi][safi] != BGP_ADDPATH_NONE)
+                       vty_out(vty, "  %s\n",
+                               bgp_addpath_names(p->addpath_type[afi][safi])
+                                       ->human_description);
 
                if (CHECK_FLAG(p->af_flags[afi][safi], PEER_FLAG_AS_OVERRIDE))
                        vty_out(vty,
@@ -9697,7 +9724,7 @@ static void bgp_show_peer(struct vty *vty, struct peer *p, bool use_json,
                                                                json_object_string_add(
                                                                        json_nxt,
                                                                        print_store,
-                                                                       "received");
+                                                                       "recieved"); /* misspelled for compatibility */
                                                        }
                                                }
                                                json_object_object_add(
@@ -10891,7 +10918,6 @@ static int bgp_show_neighbor(struct vty *vty, struct bgp *bgp,
        if (use_json) {
                vty_out(vty, "%s\n", json_object_to_json_string_ext(
                                             json, JSON_C_TO_STRING_PRETTY));
-               json_object_free(json);
        } else {
                vty_out(vty, "\n");
        }
@@ -10966,8 +10992,10 @@ static void bgp_show_all_instances_neighbors_vty(struct vty *vty,
                }
        }
 
-       if (use_json)
+       if (use_json) {
                vty_out(vty, "}\n");
+               json_object_free(json);
+       }
        else if (!nbr_output)
                vty_out(vty, "%% BGP instance not found\n");
 }
@@ -13965,6 +13993,7 @@ DEFUN (no_community_list_standard_all,
        COMMUNITY_VAL_STR)
 {
        char *cl_name_or_number = NULL;
+       char *str = NULL;
        int direct = 0;
        int style = COMMUNITY_LIST_STANDARD;
 
@@ -13977,13 +14006,23 @@ DEFUN (no_community_list_standard_all,
                zlog_warn("Deprecated option: 'no ip community-list <(1-99)|(100-500)|standard|expanded> <deny|permit> |AA:NN' being used");
        }
 
+       argv_find(argv, argc, "permit", &idx);
+       argv_find(argv, argc, "deny", &idx);
+
+       if (idx) {
+               direct = argv_find(argv, argc, "permit", &idx)
+                                ? COMMUNITY_PERMIT
+                                : COMMUNITY_DENY;
+
+               idx = 0;
+               argv_find(argv, argc, "AA:NN", &idx);
+               str = argv_concat(argv, argc, idx);
+       }
+
+       idx = 0;
        argv_find(argv, argc, "(1-99)", &idx);
        argv_find(argv, argc, "WORD", &idx);
        cl_name_or_number = argv[idx]->arg;
-       direct = argv_find(argv, argc, "permit", &idx) ? COMMUNITY_PERMIT
-                                                      : COMMUNITY_DENY;
-       argv_find(argv, argc, "AA:NN", &idx);
-       char *str = argv_concat(argv, argc, idx);
 
        int ret = community_list_unset(bgp_clist, cl_name_or_number, str,
                                       direct, style);
@@ -14010,6 +14049,20 @@ ALIAS (no_community_list_standard_all,
        "Specify community to accept\n"
        COMMUNITY_VAL_STR)
 
+ALIAS(no_community_list_standard_all, no_bgp_community_list_standard_all_list_cmd,
+      "no bgp community-list <(1-99)|standard WORD>",
+      NO_STR BGP_STR COMMUNITY_LIST_STR
+      "Community list number (standard)\n"
+      "Add an standard community-list entry\n"
+      "Community list name\n")
+
+ALIAS(no_community_list_standard_all, no_ip_community_list_standard_all_list_cmd,
+      "no ip community-list <(1-99)|standard WORD>",
+      NO_STR BGP_STR COMMUNITY_LIST_STR
+      "Community list number (standard)\n"
+      "Add an standard community-list entry\n"
+      "Community list name\n")
+
 /*community-list expanded */
 DEFUN (community_list_expanded_all,
        bgp_community_list_expanded_all_cmd,
@@ -14082,6 +14135,7 @@ DEFUN (no_community_list_expanded_all,
        COMMUNITY_VAL_STR)
 {
        char *cl_name_or_number = NULL;
+       char *str = NULL;
        int direct = 0;
        int style = COMMUNITY_LIST_EXPANDED;
 
@@ -14089,16 +14143,28 @@ DEFUN (no_community_list_expanded_all,
        if (argv_find(argv, argc, "ip", &idx)) {
                vty_out(vty, "This config option is deprecated, and is scheduled for removal.\n");
                vty_out(vty, "if you are using this please migrate to the below command.\n");
-               vty_out(vty, "'no community-list <(1-99)|(100-500)|standard|expanded> <deny|permit> AA:NN'\n");
-               zlog_warn("Deprecated option: 'no community-list <(1-99)|(100-500)|standard|expanded> <deny|permit> AA:NN' being used");
+               vty_out(vty, "'no bgp community-list <(1-99)|(100-500)|standard|expanded> <deny|permit> AA:NN'\n");
+               zlog_warn("Deprecated option: 'no ip community-list <(1-99)|(100-500)|standard|expanded> <deny|permit> AA:NN' being used");
        }
+
+       idx = 0;
+       argv_find(argv, argc, "permit", &idx);
+       argv_find(argv, argc, "deny", &idx);
+
+       if (idx) {
+               direct = argv_find(argv, argc, "permit", &idx)
+                                ? COMMUNITY_PERMIT
+                                : COMMUNITY_DENY;
+
+               idx = 0;
+               argv_find(argv, argc, "AA:NN", &idx);
+               str = argv_concat(argv, argc, idx);
+       }
+
+       idx = 0;
        argv_find(argv, argc, "(100-500)", &idx);
        argv_find(argv, argc, "WORD", &idx);
        cl_name_or_number = argv[idx]->arg;
-       direct = argv_find(argv, argc, "permit", &idx) ? COMMUNITY_PERMIT
-                                                      : COMMUNITY_DENY;
-       argv_find(argv, argc, "AA:NN", &idx);
-       char *str = argv_concat(argv, argc, idx);
 
        int ret = community_list_unset(bgp_clist, cl_name_or_number, str,
                                       direct, style);
@@ -14126,6 +14192,20 @@ ALIAS (no_community_list_expanded_all,
        "Specify community to accept\n"
        COMMUNITY_VAL_STR)
 
+ALIAS(no_community_list_expanded_all, no_bgp_community_list_expanded_all_list_cmd,
+      "no bgp community-list <(100-500)|expanded WORD>",
+      NO_STR IP_STR COMMUNITY_LIST_STR
+      "Community list number (expanded)\n"
+      "Add an expanded community-list entry\n"
+      "Community list name\n")
+
+ALIAS(no_community_list_expanded_all, no_ip_community_list_expanded_all_list_cmd,
+      "no ip community-list <(100-500)|expanded WORD>",
+      NO_STR IP_STR COMMUNITY_LIST_STR
+      "Community list number (expanded)\n"
+      "Add an expanded community-list entry\n"
+      "Community list name\n")
+
 /* Return configuration string of community-list entry.  */
 static const char *community_list_config_str(struct community_entry *entry)
 {
@@ -14911,6 +14991,7 @@ DEFUN (no_extcommunity_list_standard_all,
        int style = EXTCOMMUNITY_LIST_STANDARD;
        int direct = 0;
        char *cl_number_or_name = NULL;
+       char *str = NULL;
 
        int idx = 0;
        if (argv_find(argv, argc, "ip", &idx)) {
@@ -14919,13 +15000,25 @@ DEFUN (no_extcommunity_list_standard_all,
                vty_out(vty, "'no bgp extcommunity-list <(1-99)|(100-500)|standard|expanded> <deny|permit> <LINE|AA:NN>'\n");
                zlog_warn("Deprecated option: ‘no ip extcommunity-list <(1-99)|(100-500)|standard|expanded> <deny|permit> <LINE|AA:NN>' being used");
        }
+
+       idx = 0;
+       argv_find(argv, argc, "permit", &idx);
+       argv_find(argv, argc, "deny", &idx);
+
+       if (idx) {
+               direct = argv_find(argv, argc, "permit", &idx)
+                                ? COMMUNITY_PERMIT
+                                : COMMUNITY_DENY;
+
+               idx = 0;
+               argv_find(argv, argc, "AA:NN", &idx);
+               str = argv_concat(argv, argc, idx);
+       }
+
+       idx = 0;
        argv_find(argv, argc, "(1-99)", &idx);
        argv_find(argv, argc, "WORD", &idx);
        cl_number_or_name = argv[idx]->arg;
-       direct = argv_find(argv, argc, "permit", &idx) ? COMMUNITY_PERMIT
-                                                      : COMMUNITY_DENY;
-       argv_find(argv, argc, "AA:NN", &idx);
-       char *str = argv_concat(argv, argc, idx);
 
        int ret = extcommunity_list_unset(bgp_clist, cl_number_or_name, str,
                                          direct, style);
@@ -14953,6 +15046,22 @@ ALIAS (no_extcommunity_list_standard_all,
        "Specify community to accept\n"
        EXTCOMMUNITY_VAL_STR)
 
+ALIAS(no_extcommunity_list_standard_all,
+      no_bgp_extcommunity_list_standard_all_list_cmd,
+      "no bgp extcommunity-list <(1-99)|standard WORD>",
+      NO_STR IP_STR EXTCOMMUNITY_LIST_STR
+      "Extended Community list number (standard)\n"
+      "Specify standard extcommunity-list\n"
+      "Community list name\n")
+
+ALIAS(no_extcommunity_list_standard_all,
+      no_ip_extcommunity_list_standard_all_list_cmd,
+      "no ip extcommunity-list <(1-99)|standard WORD>",
+      NO_STR IP_STR EXTCOMMUNITY_LIST_STR
+      "Extended Community list number (standard)\n"
+      "Specify standard extcommunity-list\n"
+      "Community list name\n")
+
 DEFUN (no_extcommunity_list_expanded_all,
        no_bgp_extcommunity_list_expanded_all_cmd,
        "no bgp extcommunity-list <(100-500)|expanded WORD> <deny|permit> LINE...",
@@ -14969,6 +15078,7 @@ DEFUN (no_extcommunity_list_expanded_all,
        int style = EXTCOMMUNITY_LIST_EXPANDED;
        int direct = 0;
        char *cl_number_or_name = NULL;
+       char *str = NULL;
 
        int idx = 0;
        if (argv_find(argv, argc, "ip", &idx)) {
@@ -14977,13 +15087,25 @@ DEFUN (no_extcommunity_list_expanded_all,
                vty_out(vty, "'no bgp extcommunity-list <(1-99)|(100-500)|standard|expanded> <deny|permit> <LINE|AA:NN>'\n");
                zlog_warn("Deprecated option: ‘no ip extcommunity-list <(1-99)|(100-500)|standard|expanded> <deny|permit> <LINE|AA:NN>' being used");
        }
+
+       idx = 0;
+       argv_find(argv, argc, "permit", &idx);
+       argv_find(argv, argc, "deny", &idx);
+
+       if (idx) {
+               direct = argv_find(argv, argc, "permit", &idx)
+                                ? COMMUNITY_PERMIT
+                                : COMMUNITY_DENY;
+
+               idx = 0;
+               argv_find(argv, argc, "LINE", &idx);
+               str = argv_concat(argv, argc, idx);
+       }
+
+       idx = 0;
        argv_find(argv, argc, "(100-500)", &idx);
        argv_find(argv, argc, "WORD", &idx);
        cl_number_or_name = argv[idx]->arg;
-       direct = argv_find(argv, argc, "permit", &idx) ? COMMUNITY_PERMIT
-                                                      : COMMUNITY_DENY;
-       argv_find(argv, argc, "LINE", &idx);
-       char *str = argv_concat(argv, argc, idx);
 
        int ret = extcommunity_list_unset(bgp_clist, cl_number_or_name, str,
                                          direct, style);
@@ -15011,6 +15133,22 @@ ALIAS (no_extcommunity_list_expanded_all,
        "Specify community to accept\n"
        "An ordered list as a regular-expression\n")
 
+ALIAS(no_extcommunity_list_expanded_all,
+      no_ip_extcommunity_list_expanded_all_list_cmd,
+      "no ip extcommunity-list <(100-500)|expanded WORD>",
+      NO_STR IP_STR EXTCOMMUNITY_LIST_STR
+      "Extended Community list number (expanded)\n"
+      "Specify expanded extcommunity-list\n"
+      "Extended Community list name\n")
+
+ALIAS(no_extcommunity_list_expanded_all,
+      no_bgp_extcommunity_list_expanded_all_list_cmd,
+      "no bgp extcommunity-list <(100-500)|expanded WORD>",
+      NO_STR IP_STR EXTCOMMUNITY_LIST_STR
+      "Extended Community list number (expanded)\n"
+      "Specify expanded extcommunity-list\n"
+      "Extended Community list name\n")
+
 static void extcommunity_list_show(struct vty *vty, struct community_list *list)
 {
        struct community_entry *entry;
@@ -15206,13 +15344,17 @@ static void community_list_vty(void)
        install_element(CONFIG_NODE, &bgp_community_list_standard_cmd);
        install_element(CONFIG_NODE, &bgp_community_list_expanded_all_cmd);
        install_element(CONFIG_NODE, &no_bgp_community_list_standard_all_cmd);
+       install_element(CONFIG_NODE, &no_bgp_community_list_standard_all_list_cmd);
        install_element(CONFIG_NODE, &no_bgp_community_list_expanded_all_cmd);
+       install_element(CONFIG_NODE, &no_bgp_community_list_expanded_all_list_cmd);
        install_element(VIEW_NODE, &show_bgp_community_list_cmd);
        install_element(VIEW_NODE, &show_bgp_community_list_arg_cmd);
        install_element(CONFIG_NODE, &ip_community_list_standard_cmd);
        install_element(CONFIG_NODE, &ip_community_list_expanded_all_cmd);
        install_element(CONFIG_NODE, &no_ip_community_list_standard_all_cmd);
+       install_element(CONFIG_NODE, &no_ip_community_list_standard_all_list_cmd);
        install_element(CONFIG_NODE, &no_ip_community_list_expanded_all_cmd);
+       install_element(CONFIG_NODE, &no_ip_community_list_expanded_all_list_cmd);
        install_element(VIEW_NODE, &show_ip_community_list_cmd);
        install_element(VIEW_NODE, &show_ip_community_list_arg_cmd);
 
@@ -15220,13 +15362,19 @@ static void community_list_vty(void)
        install_element(CONFIG_NODE, &bgp_extcommunity_list_standard_cmd);
        install_element(CONFIG_NODE, &bgp_extcommunity_list_name_expanded_cmd);
        install_element(CONFIG_NODE, &no_bgp_extcommunity_list_standard_all_cmd);
+       install_element(CONFIG_NODE,
+                       &no_bgp_extcommunity_list_standard_all_list_cmd);
        install_element(CONFIG_NODE, &no_bgp_extcommunity_list_expanded_all_cmd);
+       install_element(CONFIG_NODE,
+                       &no_bgp_extcommunity_list_expanded_all_list_cmd);
        install_element(VIEW_NODE, &show_bgp_extcommunity_list_cmd);
        install_element(VIEW_NODE, &show_bgp_extcommunity_list_arg_cmd);
        install_element(CONFIG_NODE, &ip_extcommunity_list_standard_cmd);
        install_element(CONFIG_NODE, &ip_extcommunity_list_name_expanded_cmd);
        install_element(CONFIG_NODE, &no_ip_extcommunity_list_standard_all_cmd);
+       install_element(CONFIG_NODE, &no_ip_extcommunity_list_standard_all_list_cmd);
        install_element(CONFIG_NODE, &no_ip_extcommunity_list_expanded_all_cmd);
+       install_element(CONFIG_NODE, &no_ip_extcommunity_list_expanded_all_list_cmd);
        install_element(VIEW_NODE, &show_ip_extcommunity_list_cmd);
        install_element(VIEW_NODE, &show_ip_extcommunity_list_arg_cmd);