The RDE has a queue of pending updates and withdraws. Those are already
counted but not shown. On big setups it may be helpful to know about the
queue progress.

-- 
:wq Claudio

Index: bgpctl/output.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpctl/output.c,v
retrieving revision 1.26
diff -u -p -r1.26 output.c
--- bgpctl/output.c     10 Aug 2022 10:21:47 -0000      1.26
+++ bgpctl/output.c     29 Aug 2022 14:38:09 -0000
@@ -221,13 +221,16 @@ show_neighbor_msgstats(struct peer *p)
            p->stats.msg_rcvd_update + p->stats.msg_rcvd_keepalive +
            p->stats.msg_rcvd_rrefresh);
        printf("  Update statistics:\n");
-       printf("  %-15s %-10s %-10s\n", "", "Sent", "Received");
+       printf("  %-15s %-10s %-10s %-10s\n", "", "Sent", "Received",
+           "Pending");
        printf("  %-15s %10u %10u\n", "Prefixes",
            p->stats.prefix_out_cnt, p->stats.prefix_cnt);
-       printf("  %-15s %10llu %10llu\n", "Updates",
-           p->stats.prefix_sent_update, p->stats.prefix_rcvd_update);
-       printf("  %-15s %10llu %10llu\n", "Withdraws",
-           p->stats.prefix_sent_withdraw, p->stats.prefix_rcvd_withdraw);
+       printf("  %-15s %10llu %10llu %10u\n", "Updates",
+           p->stats.prefix_sent_update, p->stats.prefix_rcvd_update,
+           p->stats.pending_update);
+       printf("  %-15s %10llu %10llu %10u\n", "Withdraws",
+           p->stats.prefix_sent_withdraw, p->stats.prefix_rcvd_withdraw,
+           p->stats.pending_withdraw);
        printf("  %-15s %10llu %10llu\n", "End-of-Rib",
            p->stats.prefix_sent_eor, p->stats.prefix_rcvd_eor);
        printf("  Route Refresh statistics:\n");
Index: bgpctl/output_json.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpctl/output_json.c,v
retrieving revision 1.20
diff -u -p -r1.20 output_json.c
--- bgpctl/output_json.c        28 Jul 2022 10:40:25 -0000      1.20
+++ bgpctl/output_json.c        29 Aug 2022 14:38:09 -0000
@@ -190,6 +190,11 @@ json_neighbor_stats(struct peer *p)
        json_do_uint("eor", p->stats.prefix_rcvd_eor);
        json_do_end();
 
+       json_do_object("pending");
+       json_do_uint("updates", p->stats.pending_update);
+       json_do_uint("withdraws", p->stats.pending_withdraw);
+       json_do_end();
+
        json_do_end();
 
        json_do_object("route-refresh");
Index: bgpd/rde.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/rde.c,v
retrieving revision 1.565
diff -u -p -r1.565 rde.c
--- bgpd/rde.c  26 Aug 2022 14:10:52 -0000      1.565
+++ bgpd/rde.c  29 Aug 2022 14:39:17 -0000
@@ -623,6 +623,8 @@ badnetdel:
                                    peer->prefix_sent_withdraw;
                                p.stats.prefix_sent_eor =
                                    peer->prefix_sent_eor;
+                               p.stats.pending_update = peer->up_nlricnt;
+                               p.stats.pending_withdraw = peer->up_wcnt;
                        }
                        imsg_compose(ibuf_se_ctl, IMSG_CTL_SHOW_NEIGHBOR, 0,
                            imsg.hdr.pid, -1, &p, sizeof(struct peer));
Index: bgpd/session.h
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/session.h,v
retrieving revision 1.157
diff -u -p -r1.157 session.h
--- bgpd/session.h      28 Jul 2022 13:11:51 -0000      1.157
+++ bgpd/session.h      29 Aug 2022 14:38:43 -0000
@@ -179,6 +179,8 @@ struct peer_stats {
        time_t                   last_write;
        uint32_t                 prefix_cnt;
        uint32_t                 prefix_out_cnt;
+       uint32_t                 pending_update;
+       uint32_t                 pending_withdraw;
        uint8_t                  last_sent_errcode;
        uint8_t                  last_sent_suberr;
        uint8_t                  last_rcvd_errcode;

Reply via email to