mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-17 02:22:17 +00:00
bgpd: restore wildcard handling in show summary (Issue#14)
This commit is contained in:
parent
46f296b402
commit
271627344c
@ -6520,6 +6520,62 @@ bgp_show_summary (struct vty *vty, struct bgp *bgp, int afi, int safi,
|
|||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
bgp_show_summary_afi_safi (struct vty *vty, struct bgp *bgp, int afi, int safi,
|
||||||
|
u_char use_json, json_object *json)
|
||||||
|
{
|
||||||
|
int is_first = 1;
|
||||||
|
int afi_wildcard = (afi == AFI_MAX);
|
||||||
|
int safi_wildcard = (safi == SAFI_MAX);
|
||||||
|
int is_wildcard = (afi_wildcard || safi_wildcard);
|
||||||
|
if (use_json && is_wildcard)
|
||||||
|
vty_out (vty, "{%s", VTY_NEWLINE);
|
||||||
|
if (afi_wildcard)
|
||||||
|
afi = 1; /* AFI_IP */
|
||||||
|
while (afi < AFI_MAX)
|
||||||
|
{
|
||||||
|
if (safi_wildcard)
|
||||||
|
safi = 1; /* SAFI_UNICAST */
|
||||||
|
while (safi < SAFI_MAX)
|
||||||
|
{
|
||||||
|
if (is_wildcard)
|
||||||
|
{
|
||||||
|
if (use_json)
|
||||||
|
{
|
||||||
|
json = json_object_new_object();
|
||||||
|
|
||||||
|
if (! is_first)
|
||||||
|
vty_out (vty, ",%s", VTY_NEWLINE);
|
||||||
|
else
|
||||||
|
is_first = 0;
|
||||||
|
|
||||||
|
vty_out(vty, "\"%s\":", afi_safi_json(afi, safi));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vty_out (vty, "%s%s Summary:%s",
|
||||||
|
VTY_NEWLINE, afi_safi_print(afi, safi), VTY_NEWLINE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bgp_show_summary (vty, bgp, afi, safi, use_json, json);
|
||||||
|
if (safi == SAFI_MPLS_VPN) /* handle special cases to match zebra.h */
|
||||||
|
safi = SAFI_ENCAP;
|
||||||
|
else
|
||||||
|
safi++;
|
||||||
|
if (! safi_wildcard)
|
||||||
|
safi = SAFI_MAX;
|
||||||
|
}
|
||||||
|
afi++;
|
||||||
|
if (! afi_wildcard ||
|
||||||
|
afi == AFI_ETHER) /* special case, not handled yet */
|
||||||
|
afi = AFI_MAX;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (use_json && is_wildcard)
|
||||||
|
vty_out (vty, "}%s", VTY_NEWLINE);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
bgp_show_all_instances_summary_vty (struct vty *vty, afi_t afi, safi_t safi,
|
bgp_show_all_instances_summary_vty (struct vty *vty, afi_t afi, safi_t safi,
|
||||||
u_char use_json)
|
u_char use_json)
|
||||||
@ -6553,7 +6609,7 @@ bgp_show_all_instances_summary_vty (struct vty *vty, afi_t afi, safi_t safi,
|
|||||||
(bgp->inst_type == BGP_INSTANCE_TYPE_DEFAULT)
|
(bgp->inst_type == BGP_INSTANCE_TYPE_DEFAULT)
|
||||||
? "Default" : bgp->name, VTY_NEWLINE);
|
? "Default" : bgp->name, VTY_NEWLINE);
|
||||||
}
|
}
|
||||||
bgp_show_summary (vty, bgp, afi, safi, use_json, json);
|
bgp_show_summary_afi_safi (vty, bgp, afi, safi, use_json, json);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (use_json)
|
if (use_json)
|
||||||
@ -6587,7 +6643,7 @@ bgp_show_summary_vty (struct vty *vty, const char *name,
|
|||||||
return CMD_WARNING;
|
return CMD_WARNING;
|
||||||
}
|
}
|
||||||
|
|
||||||
bgp_show_summary (vty, bgp, afi, safi, use_json, NULL);
|
bgp_show_summary_afi_safi (vty, bgp, afi, safi, use_json, NULL);
|
||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -6595,7 +6651,7 @@ bgp_show_summary_vty (struct vty *vty, const char *name,
|
|||||||
bgp = bgp_get_default ();
|
bgp = bgp_get_default ();
|
||||||
|
|
||||||
if (bgp)
|
if (bgp)
|
||||||
bgp_show_summary (vty, bgp, afi, safi, use_json, NULL);
|
bgp_show_summary_afi_safi (vty, bgp, afi, safi, use_json, NULL);
|
||||||
|
|
||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -6614,8 +6670,8 @@ DEFUN (show_ip_bgp_summary,
|
|||||||
JSON_STR)
|
JSON_STR)
|
||||||
{
|
{
|
||||||
char *vrf = NULL;
|
char *vrf = NULL;
|
||||||
afi_t afi = AFI_IP6; /* why default to v6? */
|
afi_t afi = AFI_MAX;
|
||||||
safi_t safi = SAFI_UNICAST;
|
safi_t safi = SAFI_MAX;
|
||||||
|
|
||||||
int idx = 0;
|
int idx = 0;
|
||||||
|
|
||||||
@ -6659,6 +6715,29 @@ afi_safi_print (afi_t afi, safi_t safi)
|
|||||||
return "Unknown";
|
return "Unknown";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *
|
||||||
|
afi_safi_json (afi_t afi, safi_t safi)
|
||||||
|
{
|
||||||
|
if (afi == AFI_IP && safi == SAFI_UNICAST)
|
||||||
|
return "IPv4Unicast";
|
||||||
|
else if (afi == AFI_IP && safi == SAFI_MULTICAST)
|
||||||
|
return "IPv4Multicast";
|
||||||
|
else if (afi == AFI_IP && safi == SAFI_MPLS_VPN)
|
||||||
|
return "IPv4VPN";
|
||||||
|
else if (afi == AFI_IP && safi == SAFI_ENCAP)
|
||||||
|
return "IPv4Encap";
|
||||||
|
else if (afi == AFI_IP6 && safi == SAFI_UNICAST)
|
||||||
|
return "IPv6Unicast";
|
||||||
|
else if (afi == AFI_IP6 && safi == SAFI_MULTICAST)
|
||||||
|
return "IPv6Multicast";
|
||||||
|
else if (afi == AFI_IP6 && safi == SAFI_MPLS_VPN)
|
||||||
|
return "IPv6VPN";
|
||||||
|
else if (afi == AFI_IP6 && safi == SAFI_ENCAP)
|
||||||
|
return "IPv6Encap";
|
||||||
|
else
|
||||||
|
return "Unknown";
|
||||||
|
}
|
||||||
|
|
||||||
/* Show BGP peer's information. */
|
/* Show BGP peer's information. */
|
||||||
enum show_type
|
enum show_type
|
||||||
{
|
{
|
||||||
|
@ -39,6 +39,7 @@ struct bgp;
|
|||||||
|
|
||||||
extern void bgp_vty_init (void);
|
extern void bgp_vty_init (void);
|
||||||
extern const char *afi_safi_print (afi_t, safi_t);
|
extern const char *afi_safi_print (afi_t, safi_t);
|
||||||
|
extern const char *afi_safi_json (afi_t, safi_t);
|
||||||
extern int bgp_config_write_update_delay (struct vty *, struct bgp *);
|
extern int bgp_config_write_update_delay (struct vty *, struct bgp *);
|
||||||
extern int bgp_config_write_wpkt_quanta(struct vty *vty, struct bgp *bgp);
|
extern int bgp_config_write_wpkt_quanta(struct vty *vty, struct bgp *bgp);
|
||||||
extern int bgp_config_write_listen(struct vty *vty, struct bgp *bgp);
|
extern int bgp_config_write_listen(struct vty *vty, struct bgp *bgp);
|
||||||
|
Loading…
Reference in New Issue
Block a user