]> git.proxmox.com Git - mirror_frr.git/commitdiff
bgpd: fix auto-completion for neighbors and peer-groups
authorDon Slice <dslice@cumulusnetworks.com>
Thu, 10 May 2018 13:10:18 +0000 (09:10 -0400)
committerDon Slice <dslice@cumulusnetworks.com>
Thu, 10 May 2018 17:59:27 +0000 (17:59 +0000)
Before this fix, both real neighbors and peer-groups were lumped
together in auto-completion and it didn't work at all for
peer-groups.  This fix changes that behavior to do the right
thing.

Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
bgpd/bgp_vty.c

index e1b050bf59cb2a563c05b18fb5b48ef9c8ca69be..fccda446faffc6664c6d2a1d4a166587e3a66477 100644 (file)
@@ -12153,7 +12153,6 @@ static void bgp_ac_neighbor(vector comps, struct cmd_token *token)
 {
        struct bgp *bgp;
        struct peer *peer;
-       struct peer_group *group;
        struct listnode *lnbgp, *lnpeer;
 
        for (ALL_LIST_ELEMENTS_RO(bm->bgp, lnbgp, bgp)) {
@@ -12177,11 +12176,6 @@ static void bgp_ac_neighbor(vector comps, struct cmd_token *token)
 
                        vector_set(comps, XSTRDUP(MTYPE_COMPLETION, name));
                }
-
-               if (token->type == VARIABLE_TKN)
-                       for (ALL_LIST_ELEMENTS_RO(bgp->group, lnpeer, group))
-                               vector_set(comps, XSTRDUP(MTYPE_COMPLETION,
-                                                         group->name));
        }
 }
 
@@ -12191,9 +12185,27 @@ static const struct cmd_variable_handler bgp_var_neighbor[] = {
        {.varname = "peer", .completions = bgp_ac_neighbor},
        {.completions = NULL}};
 
+static void bgp_ac_peergroup(vector comps, struct cmd_token *token)
+{
+       struct bgp *bgp;
+       struct peer_group *group;
+       struct listnode *lnbgp, *lnpeer;
+
+       for (ALL_LIST_ELEMENTS_RO(bm->bgp, lnbgp, bgp)) {
+               for (ALL_LIST_ELEMENTS_RO(bgp->group, lnpeer, group))
+                       vector_set(comps, XSTRDUP(MTYPE_COMPLETION,
+                                                 group->name));
+       }
+}
+
+static const struct cmd_variable_handler bgp_var_peergroup[] = {
+       {.tokenname = "PGNAME", .completions = bgp_ac_peergroup},
+       {.completions = NULL} };
+
 void bgp_vty_init(void)
 {
        cmd_variable_handler_register(bgp_var_neighbor);
+       cmd_variable_handler_register(bgp_var_peergroup);
 
        /* Install bgp top node. */
        install_node(&bgp_node, bgp_config_write);