[DL: the machineparse foo should probably be dropped]
Signed-off-by: Lou Berger <[email protected]>
---
bgpd/bgp_mplsvpn.c | 2 +-
bgpd/bgp_route.c | 56 ++++++++++++++++++++++++++++++++++++++----------------
bgpd/bgp_route.h | 2 +-
3 files changed, 42 insertions(+), 18 deletions(-)
diff --git a/bgpd/bgp_mplsvpn.c b/bgpd/bgp_mplsvpn.c
index 719822f..2d52d9f 100644
--- a/bgpd/bgp_mplsvpn.c
+++ b/bgpd/bgp_mplsvpn.c
@@ -564,7 +564,7 @@ bgp_show_mpls_vpn (struct vty *vty, struct prefix_rd *prd,
enum bgp_show_type ty
if (tags)
route_vty_out_tag (vty, &rm->p, ri, 0, SAFI_MPLS_VPN);
else
- route_vty_out (vty, &rm->p, ri, 0, SAFI_MPLS_VPN);
+ route_vty_out (vty, &rm->p, ri, 0, SAFI_MPLS_VPN, 0);
}
}
}
diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c
index c4b87a0..036d27d 100644
--- a/bgpd/bgp_route.c
+++ b/bgpd/bgp_route.c
@@ -5917,8 +5917,13 @@ route_vty_short_status_out (struct vty *vty, struct
bgp_info *binfo)
/* called from terminal list command */
void
-route_vty_out (struct vty *vty, struct prefix *p,
- struct bgp_info *binfo, int display, safi_t safi)
+route_vty_out(
+ struct vty *vty,
+ struct prefix *p,
+ struct bgp_info *binfo,
+ int display,
+ safi_t safi,
+ int machineparse)
{
struct attr *attr;
@@ -5926,7 +5931,7 @@ route_vty_out (struct vty *vty, struct prefix *p,
route_vty_short_status_out (vty, binfo);
/* print prefix and mask */
- if (! display)
+ if (!display || machineparse)
route_vty_out_route (p, vty);
else
vty_out (vty, "%*s", 17, " ");
@@ -6002,20 +6007,29 @@ route_vty_out (struct vty *vty, struct prefix *p,
if (attr->flag & ATTR_FLAG_BIT (BGP_ATTR_MULTI_EXIT_DISC))
- vty_out (vty, "%10u", attr->med);
+ vty_out (vty, "%10u ", attr->med);
else
- vty_out (vty, " ");
+ if (machineparse)
+ vty_out (vty, "- ");
+ else
+ vty_out (vty, " ");
if (attr->flag & ATTR_FLAG_BIT (BGP_ATTR_LOCAL_PREF))
- vty_out (vty, "%7u", attr->local_pref);
+ vty_out (vty, "%7u ", attr->local_pref);
else
- vty_out (vty, " ");
+ if (machineparse)
+ vty_out (vty, "- ");
+ else
+ vty_out (vty, " ");
vty_out (vty, "%7u ", (attr->extra ? attr->extra->weight : 0));
/* Print aspath */
if (attr->aspath)
aspath_print_vty (vty, "%s", attr->aspath, " ");
+ else
+ if (machineparse)
+ vty_out (vty, "-");
/* Print origin */
vty_out (vty, "%s", bgp_origin_str[attr->origin]);
@@ -6067,12 +6081,12 @@ route_vty_out_tmp (struct vty *vty, struct prefix *p,
#endif /* HAVE_IPV6 */
if (attr->flag & ATTR_FLAG_BIT (BGP_ATTR_MULTI_EXIT_DISC))
- vty_out (vty, "%10u", attr->med);
+ vty_out (vty, "%10u ", attr->med);
else
vty_out (vty, " ");
if (attr->flag & ATTR_FLAG_BIT (BGP_ATTR_LOCAL_PREF))
- vty_out (vty, "%7u", attr->local_pref);
+ vty_out (vty, "%7u ", attr->local_pref);
else
vty_out (vty, " ");
@@ -6323,7 +6337,11 @@ route_vty_out_detail (struct vty *vty, struct bgp *bgp,
struct prefix *p,
vty_out (vty, " (inaccessible)");
else if (binfo->extra && binfo->extra->igpmetric)
vty_out (vty, " (metric %u)", binfo->extra->igpmetric);
- vty_out (vty, " from %s", sockunion2str (&binfo->peer->su, buf,
SU_ADDRSTRLEN));
+ if (!sockunion2str (&binfo->peer->su, buf, sizeof(buf))) {
+ buf[0] = '?';
+ buf[1] = 0;
+ }
+ vty_out (vty, " from %s", buf);
if (attr->flag & ATTR_FLAG_BIT(BGP_ATTR_ORIGINATOR_ID))
vty_out (vty, " (%s)", inet_ntoa (attr->extra->originator_id));
else
@@ -6477,9 +6495,14 @@ bgp_show_table (struct vty *vty, struct bgp_table
*table, struct in_addr *router
int header = 1;
int display;
unsigned long output_count;
+ unsigned long total_count;
+ int machineparse = 0;
/* This is first entry point, so reset total line. */
output_count = 0;
+ total_count = 0;
+ if (type == bgp_show_type_normal && output_arg == (void *)1)
+ machineparse = 1;
/* Start processing of routes. */
for (rn = bgp_table_top (table); rn; rn = bgp_route_next (rn))
@@ -6489,6 +6512,7 @@ bgp_show_table (struct vty *vty, struct bgp_table *table,
struct in_addr *router
for (ri = rn->info; ri; ri = ri->next)
{
+ total_count++;
if (type == bgp_show_type_flap_statistics
|| type == bgp_show_type_flap_address
|| type == bgp_show_type_flap_prefix
@@ -6672,7 +6696,7 @@ bgp_show_table (struct vty *vty, struct bgp_table *table,
struct in_addr *router
|| type == bgp_show_type_flap_neighbor)
flap_route_vty_out (vty, &rn->p, ri, display, SAFI_UNICAST);
else
- route_vty_out (vty, &rn->p, ri, display, SAFI_UNICAST);
+ route_vty_out (vty, &rn->p, ri, display, SAFI_UNICAST,
machineparse);
display++;
}
if (display)
@@ -6683,11 +6707,11 @@ bgp_show_table (struct vty *vty, struct bgp_table
*table, struct in_addr *router
if (output_count == 0)
{
if (type == bgp_show_type_normal)
- vty_out (vty, "No BGP network exists%s", VTY_NEWLINE);
+ vty_out (vty, "No BGP prefixes displayed, %ld exist%s", total_count,
VTY_NEWLINE);
}
else
- vty_out (vty, "%sTotal number of prefixes %ld%s",
- VTY_NEWLINE, output_count, VTY_NEWLINE);
+ vty_out (vty, "%sDisplayed %ld out of %ld total prefixes%s",
+ VTY_NEWLINE, output_count, total_count, VTY_NEWLINE);
return CMD_SUCCESS;
}
@@ -9787,7 +9811,7 @@ bgp_table_stats (struct vty *vty, struct bgp *bgp, afi_t
afi, safi_t safi)
if (!bgp->rib[afi][safi])
{
- vty_out (vty, "%% No RIB exist for the AFI/SAFI%s", VTY_NEWLINE);
+ vty_out (vty, "%% No RIB exists for the AFI/SAFI%s", VTY_NEWLINE);
return CMD_WARNING;
}
@@ -9878,7 +9902,7 @@ bgp_table_stats_vty (struct vty *vty, const char *name,
if (!bgp)
{
- vty_out (vty, "%% No such BGP instance exist%s", VTY_NEWLINE);
+ vty_out (vty, "%% No such BGP instance exists%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (strncmp (afi_str, "ipv", 3) == 0)
diff --git a/bgpd/bgp_route.h b/bgpd/bgp_route.h
index 455a413..97ce5d3 100644
--- a/bgpd/bgp_route.h
+++ b/bgpd/bgp_route.h
@@ -240,7 +240,7 @@ extern u_char bgp_distance_apply (struct prefix *, struct
bgp_info *, struct bgp
extern afi_t bgp_node_afi (struct vty *);
extern safi_t bgp_node_safi (struct vty *);
-extern void route_vty_out (struct vty *, struct prefix *, struct bgp_info *,
int, safi_t);
+extern void route_vty_out (struct vty *, struct prefix *, struct bgp_info *,
int, safi_t, int);
extern void route_vty_out_tag (struct vty *, struct prefix *, struct bgp_info
*, int, safi_t);
extern void route_vty_out_tmp (struct vty *, struct prefix *, struct attr *,
safi_t);
--
2.1.3
_______________________________________________
Quagga-dev mailing list
[email protected]
https://lists.quagga.net/mailman/listinfo/quagga-dev