On Sun, Jul 27, 2014 at 03:36:06PM +0100, Stuart Henderson wrote:
> On 2014/07/27 11:15, Claudio Jeker wrote:
> > Not a big fan since this makes the bgpctl show output no longer fit 80
> > chars and so will wrap lines on default terminals. While it is OK to
> > increase the size it should be taken away from other fields in some whay.
> > An option would be to drop the OutQ since that field has only limited
> > value IMO.
>
> oh, I would miss not having OutQ, it's totally useless when things are
> working correctly, but I have had a couple of situations (one with openbgp,
> one with *cough* bay BCN "some time ago"...) where this has been helpful.
> It gives quite a clear pointer to problems transmitting to that particular
> peer without having to look in netstat output and work out which peer is
> which (some physical layer problems, MTU problems etc).
>
> I think the most usable display would be to have neighbor and AS "share"
> a column, with priority to AS... i.e.
>
> somepeer 12345 16419 89603 0 09:42:06 100/8000
> somepeer-with-long-name 5678 1604940 1367282 0 13:39:28 100/8000
> otherpeer 16584484 16420 89606 0 1d00h58m Active
> otherpeer-with-long- 16584485 1604940 1367282 0 13:40:17 100/8000
>
The attached patch does just that. Maximum line length is now 80
characters (excluding the trailing newline), and the "Neighbor" and "AS"
columns now take a combined maximum of 29 characters, including the
blank separating peer name and AS. The result looks like this:
$ bgpctl show
Neighbor AS MsgRcvd MsgSent OutQ Up/Down State/PrfRcvd
other-peer-with-l 16581.44851 0 0 0 Never Connect
other-peer 1658.44841 0 0 0 Never Active
some-peer-with-long-name 5678 0 0 0 Never Active
some-peer 12345 0 0 0 Never Active
Where before it was
$ bgpctl show
Neighbor AS MsgRcvd MsgSent OutQ Up/Down State/PrfRcvd
other-peer-with-long 16581.44851 0 0 0 Never Connect
other-peer 1658.44841 0 0 0 Never Active
some-peer-with-long- 5678 0 0 0 Never Active
some-peer 12345 0 0 0 Never Connect
--
Gregor Best
Index: bgpctl.c
===================================================================
RCS file: /mnt/media/cvs/src/usr.sbin/bgpctl/bgpctl.c,v
retrieving revision 1.174
diff -u -p -u -r1.174 bgpctl.c
--- bgpctl.c 18 Mar 2014 13:47:14 -0000 1.174
+++ bgpctl.c 27 Jul 2014 15:20:59 -0000
@@ -517,16 +517,26 @@ show_summary_msg(struct imsg *imsg, int
{
struct peer *p;
char *s;
+ const char *a;
+ char *pa;
+ size_t alen;
switch (imsg->hdr.type) {
case IMSG_CTL_SHOW_NEIGHBOR:
p = imsg->data;
s = fmt_peer(p->conf.descr, &p->conf.remote_addr,
p->conf.remote_masklen, nodescr);
- if (strlen(s) >= 20)
- s[20] = 0;
- printf("%-20s %8s %10llu %10llu %5u %-8s ",
- s, log_as(p->conf.remote_as),
+
+ a = log_as(p->conf.remote_as);
+ alen = strlen(a);
+
+ if (asprintf(&pa, "%-28s", s) == -1)
+ err(1, NULL);
+ if (strlen(pa) > 28 - alen)
+ pa[28 - alen] = 0;
+
+ printf("%s %s %10llu %10llu %5u %-8s ",
+ pa, a,
p->stats.msg_rcvd_open + p->stats.msg_rcvd_notification +
p->stats.msg_rcvd_update + p->stats.msg_rcvd_keepalive +
p->stats.msg_rcvd_rrefresh,
@@ -544,6 +554,7 @@ show_summary_msg(struct imsg *imsg, int
else
printf("%s", statenames[p->state]);
printf("\n");
+ free(pa);
free(s);
break;
case IMSG_CTL_END: