From ff9959b0c7d8e3644cf15cb8cb48033f7d3d03cf Mon Sep 17 00:00:00 2001 From: Quentin Young Date: Tue, 14 Nov 2017 16:53:50 -0500 Subject: [PATCH] bgpd: fix `show bgp peer-group NAME` Fixes a bug whereby all peer-groups would be shown even when a particular peer-group was specified for display. Signed-off-by: Quentin Young --- bgpd/bgp_vty.c | 59 ++++++++++++++++---------------------------------- 1 file changed, 19 insertions(+), 40 deletions(-) diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c index db19835f88..65bde54474 100644 --- a/bgpd/bgp_vty.c +++ b/bgpd/bgp_vty.c @@ -10535,60 +10535,39 @@ static int bgp_show_one_peer_group(struct vty *vty, struct peer_group *group) return CMD_SUCCESS; } -/* Show BGP peer group's information. */ -enum show_group_type { show_all_groups, show_peer_group }; - -static int bgp_show_peer_group(struct vty *vty, struct bgp *bgp, - enum show_group_type type, - const char *group_name) +static int bgp_show_peer_group_vty(struct vty *vty, const char *name, + const char *group_name) { + struct bgp *bgp; struct listnode *node, *nnode; struct peer_group *group; - int find = 0; + bool found = false; + + bgp = name ? bgp_lookup_by_name(name) : bgp_get_default(); + + if (!bgp) { + vty_out(vty, "%% No such BGP instance exists\n"); + return CMD_WARNING; + } for (ALL_LIST_ELEMENTS(bgp->group, node, nnode, group)) { - switch (type) { - case show_all_groups: - bgp_show_one_peer_group(vty, group); - break; - case show_peer_group: - if (group_name - && (strcmp(group->name, group_name) == 0)) { - find = 1; + if (group_name) { + if (strmatch(group->name, group_name)) { bgp_show_one_peer_group(vty, group); + found = true; + break; } - break; + } else { + bgp_show_one_peer_group(vty, group); } } - if (type == show_peer_group && !find) + if (group_name && !found) vty_out(vty, "%% No such peer-group\n"); return CMD_SUCCESS; } -static int bgp_show_peer_group_vty(struct vty *vty, const char *name, - enum show_group_type type, - const char *group_name) -{ - struct bgp *bgp; - int ret = CMD_SUCCESS; - - if (name) - bgp = bgp_lookup_by_name(name); - else - bgp = bgp_get_default(); - - if (!bgp) { - vty_out(vty, "%% No such BGP instance exist\n"); - return CMD_WARNING; - } - - ret = bgp_show_peer_group(vty, bgp, type, group_name); - - return ret; -} - DEFUN (show_ip_bgp_peer_groups, show_ip_bgp_peer_groups_cmd, "show [ip] bgp [ VIEWVRFNAME] peer-group [PGNAME]", @@ -10606,7 +10585,7 @@ DEFUN (show_ip_bgp_peer_groups, vrf = argv_find(argv, argc, "WORD", &idx) ? argv[idx]->arg : NULL; pg = argv_find(argv, argc, "PGNAME", &idx) ? argv[idx]->arg : NULL; - return bgp_show_peer_group_vty(vty, vrf, show_all_groups, pg); + return bgp_show_peer_group_vty(vty, vrf, pg); } -- 2.39.5