diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c index 95493c11f850..e300543a3723 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c @@ -11248,6 +11248,7 @@ static int bgp_show_table(struct vty *vty, struct bgp *bgp, safi_t safi, bool use_json = CHECK_FLAG(show_flags, BGP_SHOW_OPT_JSON); bool wide = CHECK_FLAG(show_flags, BGP_SHOW_OPT_WIDE); bool all = CHECK_FLAG(show_flags, BGP_SHOW_OPT_AFI_ALL); + bool detail = CHECK_FLAG(show_flags, BGP_SHOW_OPT_DETAIL); if (output_cum && *output_cum != 0) header = false; @@ -11281,8 +11282,7 @@ static int bgp_show_table(struct vty *vty, struct bgp *bgp, safi_t safi, } /* Check for 'json detail', where we need header output once per dest */ - if (use_json && CHECK_FLAG(show_flags, BGP_SHOW_OPT_DETAIL) && - type != bgp_show_type_dampend_paths && + if (use_json && detail && type != bgp_show_type_dampend_paths && type != bgp_show_type_damp_neighbor && type != bgp_show_type_flap_statistics && type != bgp_show_type_flap_neighbor) @@ -11545,17 +11545,19 @@ static int bgp_show_table(struct vty *vty, struct bgp *bgp, safi_t safi, vty_out(vty, "Default local pref %u, ", bgp->default_local_pref); vty_out(vty, "local AS %u\n", bgp->as); - vty_out(vty, BGP_SHOW_SCODE_HEADER); - vty_out(vty, BGP_SHOW_NCODE_HEADER); - vty_out(vty, BGP_SHOW_OCODE_HEADER); - vty_out(vty, BGP_SHOW_RPKI_HEADER); + if (!detail) { + vty_out(vty, BGP_SHOW_SCODE_HEADER); + vty_out(vty, BGP_SHOW_NCODE_HEADER); + vty_out(vty, BGP_SHOW_OCODE_HEADER); + vty_out(vty, BGP_SHOW_RPKI_HEADER); + } if (type == bgp_show_type_dampend_paths || type == bgp_show_type_damp_neighbor) vty_out(vty, BGP_SHOW_DAMP_HEADER); else if (type == bgp_show_type_flap_statistics || type == bgp_show_type_flap_neighbor) vty_out(vty, BGP_SHOW_FLAP_HEADER); - else + else if (!detail) vty_out(vty, (wide ? BGP_SHOW_HEADER_WIDE : BGP_SHOW_HEADER)); header = false; @@ -11598,16 +11600,29 @@ static int bgp_show_table(struct vty *vty, struct bgp *bgp, safi_t safi, AFI_IP, safi, use_json, json_paths); else { - if (CHECK_FLAG(show_flags, BGP_SHOW_OPT_DETAIL)) + if (detail) { + const struct prefix_rd *prd; + + prd = bgp_rd_from_dest(dest, safi); + + if (!use_json) + route_vty_out_detail_header( + vty, bgp, dest, + bgp_dest_get_prefix( + dest), + prd, table->afi, safi, + NULL); + route_vty_out_detail( vty, bgp, dest, bgp_dest_get_prefix(dest), pi, family2afi(dest_p->family), safi, RPKI_NOT_BEING_USED, json_paths); - else + } else { route_vty_out(vty, dest_p, pi, display, safi, json_paths, wide); + } } display++; }