On Tue, Sep 24, 2019 at 10:06:51AM +0100, Stuart Henderson wrote: > On 2019/09/23 22:48, Stuart Henderson wrote: > > "bgpctl XX nei" functions can now take "group XX" - when used as > > "show nei group XX terse" you can't tell which entry relates to each > > neighbour. > > > > OK to add the address to the end of the line where it's reasonably > > out of the way of existing parsers? > > missing free, pointed out by benno. (not that bgpctl will stick around > for long anyway :)
This is fine with me. I wonder if other data e.g. the peer description or peer AS number should be added as well. > Index: bgpctl.8 > =================================================================== > RCS file: /cvs/src/usr.sbin/bgpctl/bgpctl.8,v > retrieving revision 1.89 > diff -u -p -r1.89 bgpctl.8 > --- bgpctl.8 28 Jun 2019 12:12:06 -0000 1.89 > +++ bgpctl.8 24 Sep 2019 09:06:13 -0000 > @@ -289,7 +289,8 @@ Show statistics in an easily parseable t > The printed numbers are the sent and received open, sent and received > notifications, sent and received updates, sent and received keepalives, and > sent and received route refresh messages plus the current and maximum > -prefix count, the number of sent and received updates, and withdraws. > +prefix count, the number of sent and received updates, sent and > +received withdraws, and finally the neighbor's address. > .It Cm timers > Show the BGP timers. > .El > Index: bgpctl.c > =================================================================== > RCS file: /cvs/src/usr.sbin/bgpctl/bgpctl.c,v > retrieving revision 1.243 > diff -u -p -r1.243 bgpctl.c > --- bgpctl.c 5 Aug 2019 12:51:32 -0000 1.243 > +++ bgpctl.c 24 Sep 2019 09:06:13 -0000 > @@ -601,12 +601,26 @@ int > show_neighbor_terse(struct imsg *imsg) > { > struct peer *p; > + char *s; > > switch (imsg->hdr.type) { > case IMSG_CTL_SHOW_NEIGHBOR: > p = imsg->data; > + if ((p->conf.remote_addr.aid == AID_INET && > + p->conf.remote_masklen != 32) || > + (p->conf.remote_addr.aid == AID_INET6 && > + p->conf.remote_masklen != 128)) { > + if (asprintf(&s, "%s/%u", > + log_addr(&p->conf.remote_addr), > + p->conf.remote_masklen) == -1) > + err(1, NULL); > + } else > + if ((s = strdup(log_addr(&p->conf.remote_addr))) == > + NULL) > + err(1, "strdup"); > + > printf("%llu %llu %llu %llu %llu %llu %llu " > - "%llu %llu %llu %u %u %llu %llu %llu %llu\n", > + "%llu %llu %llu %u %u %llu %llu %llu %llu %s\n", > p->stats.msg_sent_open, p->stats.msg_rcvd_open, > p->stats.msg_sent_notification, > p->stats.msg_rcvd_notification, > @@ -616,7 +630,8 @@ show_neighbor_terse(struct imsg *imsg) > p->stats.prefix_cnt, p->conf.max_prefix, > p->stats.prefix_sent_update, p->stats.prefix_rcvd_update, > p->stats.prefix_sent_withdraw, > - p->stats.prefix_rcvd_withdraw); > + p->stats.prefix_rcvd_withdraw, s); > + free(s); > break; > case IMSG_CTL_END: > return (1); > -- :wq Claudio