Hi Nice idea, but maybe it could pick the same one that the interface group "egress" defaults to?
On Fri, Jan 07, 2011 at 07:36:08PM -0500, Ted Unangst wrote: > i like to run netstat -w 1 -b to watch the bytes. however, netstat > defaults to picking the last interface if you don't specify -I. on my > system, that happens to be pflog. not helpful. > > the diff below makes some attempt at picking an interesting interface by > selecting the one with the most traffic. > > Index: if.c > =================================================================== > RCS file: /home/tedu/cvs/src/usr.bin/netstat/if.c,v > retrieving revision 1.62 > diff -u -r1.62 if.c > --- if.c 22 Nov 2009 22:22:14 -0000 1.62 > +++ if.c 8 Jan 2011 00:32:41 -0000 > @@ -500,6 +500,7 @@ > char *buf, *next, *lim; > char name[IFNAMSIZ]; > size_t len; > + int takeit = 0; > > if (sysctl(mib, 6, NULL, &len, NULL, 0) == -1) > err(1, "sysctl"); > @@ -508,6 +509,7 @@ > if (sysctl(mib, 6, buf, &len, NULL, 0) == -1) > err(1, "sysctl"); > > + memset(&ip_cur, 0, sizeof(ip_cur)); > lim = buf + len; > for (next = buf; next < lim; next += rtm->rtm_msglen) { > rtm = (struct rt_msghdr *)next; > @@ -531,6 +533,14 @@ > memcpy(name, sdl->sdl_data, sdl->sdl_nlen); > > if (interface != NULL && !strcmp(name, interface)) { > + takeit = 1; > + } else if (interface == NULL && > + ifd->ifi_ibytes + ifd->ifi_obytes >= > + ip_cur.ift_ib + ip_cur.ift_ob) { > + takeit = 1; > + } else > + takeit = 0; > + if (takeit) { > strlcpy(ip_cur.ift_name, name, > sizeof(ip_cur.ift_name)); > ip_cur.ift_ip = ifd->ifi_ipackets; > @@ -554,19 +564,6 @@ > sum_cur.ift_dr += 0; /* XXX ifnet.if_snd.ifq_drops */ > break; > } > - } > - if (interface == NULL) { > - strlcpy(ip_cur.ift_name, name, > - sizeof(ip_cur.ift_name)); > - ip_cur.ift_ip = ifd->ifi_ipackets; > - ip_cur.ift_ib = ifd->ifi_ibytes; > - ip_cur.ift_ie = ifd->ifi_ierrors; > - ip_cur.ift_op = ifd->ifi_opackets; > - ip_cur.ift_ob = ifd->ifi_obytes; > - ip_cur.ift_oe = ifd->ifi_oerrors; > - ip_cur.ift_co = ifd->ifi_collisions; > - ip_cur.ift_dr = 0; > - /* XXX ifnet.if_snd.ifq_drops */ > } > free(buf); > }