XFREE(MTYPE_COMMUNITY_LIST_HANDLER, ch);
}
+
+static int bgp_community_list_vector_walker(struct hash_bucket *bucket,
+ void *data)
+{
+ vector *comps = data;
+ struct community_list *list = bucket->data;
+
+ vector_set(*comps, XSTRDUP(MTYPE_COMPLETION, list->name));
+
+ return 1;
+}
+
+static void bgp_community_list_cmd_completion(vector comps,
+ struct cmd_token *token)
+{
+ struct community_list_master *cm;
+
+ cm = community_list_master_lookup(bgp_clist, COMMUNITY_LIST_MASTER);
+
+ hash_walk(cm->hash, bgp_community_list_vector_walker, &comps);
+}
+
+static void bgp_lcommunity_list_cmd_completion(vector comps,
+ struct cmd_token *token)
+{
+ struct community_list_master *cm;
+
+ cm = community_list_master_lookup(bgp_clist,
+ LARGE_COMMUNITY_LIST_MASTER);
+
+ hash_walk(cm->hash, bgp_community_list_vector_walker, &comps);
+}
+
+static void bgp_extcommunity_list_cmd_completion(vector comps,
+ struct cmd_token *token)
+{
+ struct community_list_master *cm;
+
+ cm = community_list_master_lookup(bgp_clist, EXTCOMMUNITY_LIST_MASTER);
+
+ hash_walk(cm->hash, bgp_community_list_vector_walker, &comps);
+}
+
+static const struct cmd_variable_handler community_list_handlers[] = {
+ {.tokenname = "COMMUNITY_LIST_NAME",
+ .completions = bgp_community_list_cmd_completion},
+ {.completions = NULL}};
+
+static const struct cmd_variable_handler lcommunity_list_handlers[] = {
+ {.tokenname = "LCOMMUNITY_LIST_NAME",
+ .completions = bgp_lcommunity_list_cmd_completion},
+ {.completions = NULL}};
+
+static const struct cmd_variable_handler extcommunity_list_handlers[] = {
+ {.tokenname = "EXTCOMMUNITY_LIST_NAME",
+ .completions = bgp_extcommunity_list_cmd_completion},
+ {.completions = NULL}};
+
+void bgp_community_list_command_completion_setup(void)
+{
+ cmd_variable_handler_register(community_list_handlers);
+ cmd_variable_handler_register(lcommunity_list_handlers);
+ cmd_variable_handler_register(extcommunity_list_handlers);
+}