Index: bpf.c =================================================================== RCS file: /home/ncvs/src/usr.bin/netstat/bpf.c,v retrieving revision 1.7 diff -u -p -r1.7 bpf.c --- bpf.c 27 Nov 2006 19:50:50 -0000 1.7 +++ bpf.c 2 Feb 2007 19:19:25 -0000 @@ -85,9 +85,9 @@ bpf_flags(struct xbpf_d *bd, char *flagb void bpf_stats(char *ifname) { - struct xbpf_d *d, *bd; - char *pname, flagbuf[12]; - size_t size; + struct xbpf_d *d; + char *dp, *pname, flagbuf[12]; + size_t rsize, size; if (sysctlbyname("net.bpf.stats", NULL, &size, NULL, 0) < 0) { @@ -96,30 +96,54 @@ bpf_stats(char *ifname) } if (size == 0) return; - bd = malloc(size); - if (bd == NULL) { + dp = malloc(size); + if (dp == NULL) { warn("malloc failed"); return; } - if (sysctlbyname("net.bpf.stats", bd, &size, + if (sysctlbyname("net.bpf.stats", dp, &size, NULL, 0) < 0) { warn("net.bpf.stats"); - free(bd); + free(dp); return; } - printf("%5s %6s %6s %9s %9s %9s %5s %5s %s\n", - "Pid", "Netif", "Flags", "Recv", "Drop", "Match", "Sblen", - "Hblen", "Command"); - for (d = &bd[0]; d < &bd[size / sizeof(*d)]; d++) { + if (aflag) { + printf("%5s %6s %6s %9s %9s %9s %9s %9s %5s %5s %s\n", + "Pid", "Netif", "Flags", "Recv", "Send", "SErr", "Drop", + "Match", "Sblen", "Hblen", "Command"); + } else { + printf("%5s %6s %6s %9s %9s %9s %5s %5s %s\n", + "Pid", "Netif", "Flags", "Recv", "Drop", "Match", "Sblen", + "Hblen", "Command"); + } + + rsize = size; + d = (struct x_bpfd *)dp; + + while (d->bd_size >= rsize) { + d = (struct x_bpfd *)dp; + if (ifname && strcmp(ifname, d->bd_ifname) != 0) continue; bpf_flags(d, flagbuf); pname = bpf_pidname(d->bd_pid); - printf("%5d %6s %6s %9lu %9lu %9lu %5d %5d %s\n", - d->bd_pid, d->bd_ifname, flagbuf, - d->bd_rcount, d->bd_dcount, d->bd_fcount, - d->bd_slen, d->bd_hlen, pname); + if (aflag) { + printf("%5d %6s %6s %9lu %9lu %9lu %9lu %9lu " + "%5d %5d %s\n", + d->bd_pid, d->bd_ifname, flagbuf, + d->bd_rcount, d->bd_wcount, d->bd_ecount, + d->bd_dcount, d->bd_fcount, + d->bd_slen, d->bd_hlen, pname); + } else { + printf("%5d %6s %6s %9lu %9lu %9lu %5d %5d %s\n", + d->bd_pid, d->bd_ifname, flagbuf, + d->bd_rcount, d->bd_dcount, d->bd_fcount, + d->bd_slen, d->bd_hlen, pname); + } free(pname); + + rsize -= d->d_bdsize; + dp += d->d_bdsize; } free(bd); } Index: netstat.1 =================================================================== RCS file: /home/ncvs/src/usr.bin/netstat/netstat.1,v retrieving revision 1.57 diff -u -p -r1.57 netstat.1 --- netstat.1 29 Sep 2006 15:20:46 -0000 1.57 +++ netstat.1 2 Feb 2007 19:19:25 -0000 @@ -195,6 +195,7 @@ The network manages a private pool of me .Bk -words .Nm .Fl B +.Op Fl a .Op Fl I Ar interface .Ek .Xc @@ -205,6 +206,9 @@ This includes information like how many packets have been matched, dropped and received by the bpf device, also information about current buffer sizes and device states. +If +.Fl a +is also present, show write statistics. .It Xo .Bk -words .Nm