bgpd: Show "(Policy)" under PfxRcd/PfxSnt when eBGP policy is in use

It could be hard to notice when eBGP policy is missing in `show bgp summary`.

This adds more sugar to the output:

Normal:
```
 MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt
      10        0    0    0 00:02:07            6        8
```
When rfc8212 is enabled (default since 7.4) - OUTBOUND:
```
 MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt
      13        0    0    0 00:04:56            6 (Policy)
```
INBOUND:
```
 MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt
      19        0    0    0 00:06:27     (Policy)        2
```

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
This commit is contained in:
Donatas Abraitis 2020-05-03 21:49:46 +03:00
parent 81ad029173
commit d3ada36668

View File

@ -8766,6 +8766,7 @@ static int bgp_show_summary(struct vty *vty, struct bgp *bgp, int afi, int safi,
json_object *json_peer = NULL; json_object *json_peer = NULL;
json_object *json_peers = NULL; json_object *json_peers = NULL;
struct peer_af *paf; struct peer_af *paf;
struct bgp_filter *filter;
/* labeled-unicast routes are installed in the unicast table so in order /* labeled-unicast routes are installed in the unicast table so in order
* to * to
@ -9066,6 +9067,7 @@ static int bgp_show_summary(struct vty *vty, struct bgp *bgp, int afi, int safi,
} }
paf = peer_af_find(peer, afi, pfx_rcd_safi); paf = peer_af_find(peer, afi, pfx_rcd_safi);
filter = &peer->filter[afi][safi];
count++; count++;
/* Works for both failed & successful cases */ /* Works for both failed & successful cases */
@ -9208,18 +9210,39 @@ static int bgp_show_summary(struct vty *vty, struct bgp *bgp, int afi, int safi,
BGP_UPTIME_LEN, 0, NULL)); BGP_UPTIME_LEN, 0, NULL));
if (peer->status == Established) { if (peer->status == Established) {
if (peer->afc_recv[afi][safi]) if (peer->afc_recv[afi][safi]) {
vty_out(vty, " %12" PRIu32, if (CHECK_FLAG(
peer->pcount bgp->flags,
[afi] BGP_FLAG_EBGP_REQUIRES_POLICY)
[pfx_rcd_safi]); && !bgp_inbound_policy_exists(
else peer, filter))
vty_out(vty, " %12s",
"(Policy)");
else
vty_out(vty,
" %12" PRIu32,
peer->pcount
[afi]
[pfx_rcd_safi]);
} else {
vty_out(vty, " NoNeg"); vty_out(vty, " NoNeg");
}
if (paf && PAF_SUBGRP(paf)) if (paf && PAF_SUBGRP(paf)) {
vty_out(vty, " %8" PRIu32, if (CHECK_FLAG(
(PAF_SUBGRP(paf)) bgp->flags,
->scount); BGP_FLAG_EBGP_REQUIRES_POLICY)
&& !bgp_outbound_policy_exists(
peer, filter))
vty_out(vty, " %8s",
"(Policy)");
else
vty_out(vty,
" %8" PRIu32,
(PAF_SUBGRP(
paf))
->scount);
}
} else { } else {
if (CHECK_FLAG(peer->flags, PEER_FLAG_SHUTDOWN)) if (CHECK_FLAG(peer->flags, PEER_FLAG_SHUTDOWN))
vty_out(vty, " Idle (Admin)"); vty_out(vty, " Idle (Admin)");