bgpd: add "json" option to "show ip bgp ... longer-prefixes"

Move the "longer-prefixes" option from show_ip_bgp_cmd to
show_ip_bgp_json_cmd so that is has access to JSON output.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
This commit is contained in:
Renato Westphal 2021-07-27 22:29:43 -03:00
parent bf1a944ace
commit 39c3c7364d
2 changed files with 34 additions and 43 deletions

View File

@ -10635,9 +10635,6 @@ void route_vty_out_detail(struct vty *vty, struct bgp *bgp, struct bgp_dest *bn,
#define BGP_SHOW_DAMP_HEADER " Network From Reuse Path\n"
#define BGP_SHOW_FLAP_HEADER " Network From Flaps Duration Reuse Path\n"
static int bgp_show_prefix_longer(struct vty *vty, struct bgp *bgp,
const char *prefix, afi_t afi, safi_t safi,
enum bgp_show_type type);
static int bgp_show_regexp(struct vty *vty, struct bgp *bgp, const char *regstr,
afi_t afi, safi_t safi, enum bgp_show_type type,
bool use_json);
@ -12004,20 +12001,12 @@ DEFUN(show_ip_bgp_afi_safi_statistics, show_ip_bgp_afi_safi_statistics_cmd,
DEFPY(show_ip_bgp, show_ip_bgp_cmd,
"show [ip] bgp [<view|vrf> VIEWVRFNAME] [" BGP_AFI_CMD_STR
" [" BGP_SAFI_WITH_LABEL_CMD_STR
"]]\
<[all$all] dampening <parameters>\
|A.B.C.D/M longer-prefixes\
|X:X::X:X/M longer-prefixes\
>",
"]] [all$all] dampening parameters",
SHOW_STR IP_STR BGP_STR BGP_INSTANCE_HELP_STR BGP_AFI_HELP_STR
BGP_SAFI_WITH_LABEL_HELP_STR
"Display the entries for all address families\n"
"Display detailed information about dampening\n"
"Display detail of configured dampening parameters\n"
"IPv4 prefix\n"
"Display route and more specific routes\n"
"IPv6 prefix\n"
"Display route and more specific routes\n")
"Display detail of configured dampening parameters\n")
{
afi_t afi = AFI_IP6;
safi_t safi = SAFI_UNICAST;
@ -12046,13 +12035,6 @@ DEFPY(show_ip_bgp, show_ip_bgp_cmd,
show_flags);
}
/* prefix-longer */
if (argv_find(argv, argc, "A.B.C.D/M", &idx)
|| argv_find(argv, argc, "X:X::X:X/M", &idx))
return bgp_show_prefix_longer(vty, bgp, argv[idx]->arg, afi,
safi,
bgp_show_type_prefix_longer);
return CMD_WARNING;
}
@ -12076,6 +12058,8 @@ DEFPY(show_ip_bgp_json, show_ip_bgp_json_cmd,
|rpki <invalid|valid|notfound>\
|version (1-4294967295)\
|alias ALIAS_NAME\
|A.B.C.D/M longer-prefixes\
|X:X::X:X/M longer-prefixes\
] [json$uj [detail$detail] | wide$wide]",
SHOW_STR IP_STR BGP_STR BGP_INSTANCE_HELP_STR BGP_AFI_HELP_STR
BGP_SAFI_WITH_LABEL_HELP_STR
@ -12117,7 +12101,12 @@ DEFPY(show_ip_bgp_json, show_ip_bgp_json_cmd,
"Display prefixes with matching version numbers\n"
"Version number and above\n"
"Display prefixes with matching BGP community alias\n"
"BGP community alias\n" JSON_STR
"BGP community alias\n"
"IPv4 prefix\n"
"Display route and more specific routes\n"
"IPv6 prefix\n"
"Display route and more specific routes\n"
JSON_STR
"Display detailed version of JSON output\n"
"Increase table width for longer prefixes\n")
{
@ -12280,6 +12269,21 @@ DEFPY(show_ip_bgp_json, show_ip_bgp_json_cmd,
output_arg = argv[idx + 1]->arg;
}
/* prefix-longer */
if (argv_find(argv, argc, "A.B.C.D/M", &idx)
|| argv_find(argv, argc, "X:X::X:X/M", &idx)) {
const char *prefix_str = argv[idx]->arg;
struct prefix p;
if (!str2prefix(prefix_str, &p)) {
vty_out(vty, "%% Malformed Prefix\n");
return CMD_WARNING;
}
sh_type = bgp_show_type_prefix_longer;
output_arg = &p;
}
if (!all) {
/* show bgp: AFI_IP6, show ip bgp: AFI_IP */
if (community)
@ -12568,28 +12572,6 @@ static int bgp_show_community(struct vty *vty, struct bgp *bgp,
return ret;
}
static int bgp_show_prefix_longer(struct vty *vty, struct bgp *bgp,
const char *prefix, afi_t afi, safi_t safi,
enum bgp_show_type type)
{
int ret;
struct prefix *p;
uint16_t show_flags = 0;
p = prefix_new();
ret = str2prefix(prefix, p);
if (!ret) {
vty_out(vty, "%% Malformed Prefix\n");
return CMD_WARNING;
}
ret = bgp_show(vty, bgp, afi, safi, type, p, show_flags,
RPKI_NOT_BEING_USED);
prefix_free(&p);
return ret;
}
enum bgp_stats {
BGP_STATS_MAXBITLEN = 0,
BGP_STATS_RIB,

View File

@ -3612,6 +3612,15 @@ structure is extended with :clicmd:`show bgp [afi] [safi]`.
If the ``json`` option is specified, output is displayed in JSON format.
.. clicmd:: show [ip] bgp [afi] [safi] [all] <A.B.C.D/M|X:X::X:X/M> longer-prefixes [wide|json]
Displays the specified route and all more specific routes.
If ``wide`` option is specified, then the prefix table's width is increased
to fully display the prefix and the nexthop.
If the ``json`` option is specified, output is displayed in JSON format.
.. clicmd:: show [ip] bgp [afi] [safi] [all] neighbors A.B.C.D [advertised-routes|received-routes|filtered-routes] [json|wide]
Display the routes advertised to a BGP neighbor or received routes