]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: Show "(Policy)" under PfxRcd/PfxSnt when eBGP policy is in use
authorDonatas Abraitis <donatas.abraitis@gmail.com>
Sun, 3 May 2020 18:49:46 +0000 (21:49 +0300)
committerDonatas Abraitis <donatas.abraitis@gmail.com>
Sun, 3 May 2020 18:49:46 +0000 (21:49 +0300)
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>
bgpd/bgp_vty.c

index 4f36073e9ae7a08e77af64a8048db1f41ff44e3e..0f0936986015150e7101a12d92da84c89d7f3107 100644 (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_peers = NULL;
        struct peer_af *paf;
+       struct bgp_filter *filter;
 
        /* labeled-unicast routes are installed in the unicast table so in order
         * 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);
+               filter = &peer->filter[afi][safi];
 
                count++;
                /* 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));
 
                                if (peer->status == Established) {
-                                       if (peer->afc_recv[afi][safi])
-                                               vty_out(vty, " %12" PRIu32,
-                                                       peer->pcount
-                                                               [afi]
-                                                               [pfx_rcd_safi]);
-                                       else
+                                       if (peer->afc_recv[afi][safi]) {
+                                               if (CHECK_FLAG(
+                                                           bgp->flags,
+                                                           BGP_FLAG_EBGP_REQUIRES_POLICY)
+                                                   && !bgp_inbound_policy_exists(
+                                                           peer, filter))
+                                                       vty_out(vty, " %12s",
+                                                               "(Policy)");
+                                               else
+                                                       vty_out(vty,
+                                                               " %12" PRIu32,
+                                                               peer->pcount
+                                                                       [afi]
+                                                                       [pfx_rcd_safi]);
+                                       } else {
                                                vty_out(vty, " NoNeg");
+                                       }
 
-                                       if (paf && PAF_SUBGRP(paf))
-                                               vty_out(vty, " %8" PRIu32,
-                                                       (PAF_SUBGRP(paf))
-                                                               ->scount);
+                                       if (paf && PAF_SUBGRP(paf)) {
+                                               if (CHECK_FLAG(
+                                                           bgp->flags,
+                                                           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 {
                                        if (CHECK_FLAG(peer->flags, PEER_FLAG_SHUTDOWN))
                                                vty_out(vty, " Idle (Admin)");