On 2014/07/27 17:24, Gregor Best wrote:
> 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
Nice, I like that a lot. What do you think Claudio?
> 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: