Date: Mon, 27 Jul 2009 18:34:59 GMT From: Gabor Pali <pgj@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 166643 for review Message-ID: <200907271834.n6RIYxG1020547@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=166643 Change 166643 by pgj@petymeg-current on 2009/07/27 18:34:20 Modify netstat(1) to display IP statistics by libnetstat(3). Affected files ... .. //depot/projects/soc2009/pgj_libstat/src/usr.bin/netstat/extern.h#14 edit .. //depot/projects/soc2009/pgj_libstat/src/usr.bin/netstat/inet.c#29 edit .. //depot/projects/soc2009/pgj_libstat/src/usr.bin/netstat/main.c#22 edit Differences ... ==== //depot/projects/soc2009/pgj_libstat/src/usr.bin/netstat/extern.h#14 (text+ko) ==== @@ -80,7 +80,7 @@ void sctp_protopr(u_long, const char *, int, int); void sctp_stats(u_long, const char *, int, int); #endif -void ip_stats(u_long, const char *, int, int); +void ip_stats(const struct stat_type *); void icmp_stats(u_long, const char *, int, int); void igmp_stats(u_long, const char *, int, int); void pim_stats(u_long, const char *, int, int); ==== //depot/projects/soc2009/pgj_libstat/src/usr.bin/netstat/inet.c#29 (text+ko) ==== @@ -443,62 +443,48 @@ * Dump IP statistics structure. */ void -ip_stats(u_long off, const char *name, int af1 __unused, int proto __unused) +ip_stats(const struct stat_type *sttp) { - struct ipstat ipstat, zerostat; - size_t len = sizeof ipstat; + const struct ip_stat *s; - if (live) { - if (zflag) - memset(&zerostat, 0, len); - if (sysctlbyname("net.inet.ip.stats", &ipstat, &len, - zflag ? &zerostat : NULL, zflag ? len : 0) < 0) { - warn("sysctl: net.inet.ip.stats"); - return; - } - } else - kread(off, &ipstat, len); - - printf("%s:\n", name); - -#define p(f, m) if (ipstat.f || sflag <= 1) \ - printf(m, ipstat.f, plural(ipstat.f)) -#define p1a(f, m) if (ipstat.f || sflag <= 1) \ - printf(m, ipstat.f) - - p(ips_total, "\t%lu total packet%s received\n"); - p(ips_badsum, "\t%lu bad header checksum%s\n"); - p1a(ips_toosmall, "\t%lu with size smaller than minimum\n"); - p1a(ips_tooshort, "\t%lu with data size < data length\n"); - p1a(ips_toolong, "\t%lu with ip length > max ip packet size\n"); - p1a(ips_badhlen, "\t%lu with header length < data size\n"); - p1a(ips_badlen, "\t%lu with data length < header length\n"); - p1a(ips_badoptions, "\t%lu with bad options\n"); - p1a(ips_badvers, "\t%lu with incorrect version number\n"); - p(ips_fragments, "\t%lu fragment%s received\n"); - p(ips_fragdropped, "\t%lu fragment%s dropped (dup or out of space)\n"); - p(ips_fragtimeout, "\t%lu fragment%s dropped after timeout\n"); - p(ips_reassembled, "\t%lu packet%s reassembled ok\n"); - p(ips_delivered, "\t%lu packet%s for this host\n"); - p(ips_noproto, "\t%lu packet%s for unknown/unsupported protocol\n"); - p(ips_forward, "\t%lu packet%s forwarded"); - p(ips_fastforward, " (%lu packet%s fast forwarded)"); - if (ipstat.ips_forward || sflag <= 1) + s = netstat_get_ipstats(sttp); +#define p(f, m) if (netstat_ips_get_##f(s) || sflag <= 1) \ + printf(m, netstat_ips_get_##f(s), plural(netstat_ips_get_##f(s))) +#define p1a(f, m) if (netstat_ips_get_##f(s) || sflag <= 1) \ + printf(m, netstat_ips_get_##f(s)) + p(total, "\t%ju total packet%s received\n"); + p(badsum, "\t%ju bad header checksum%s\n"); + p1a(toosmall, "\t%ju with size smaller than minimum\n"); + p1a(tooshort, "\t%ju with data size < data length\n"); + p1a(toolong, "\t%ju with ip length > max ip packet size\n"); + p1a(badhlen, "\t%ju with header length < data size\n"); + p1a(badlen, "\t%ju with data length < header length\n"); + p1a(badoptions, "\t%ju with bad options\n"); + p1a(badvers, "\t%ju with incorrect version number\n"); + p(fragments, "\t%ju fragment%s received\n"); + p(fragdropped, "\t%ju fragment%s dropped (dup or out of space)\n"); + p(fragtimeout, "\t%ju fragment%s dropped after timeout\n"); + p(reassembled, "\t%ju packet%s reassembled ok\n"); + p(delivered, "\t%ju packet%s for this host\n"); + p(noproto, "\t%ju packet%s for unknown/unsupported protocol\n"); + p(forward, "\t%ju packet%s forwarded"); + p(fastforward, " (%ju packet%s fast forwarded)"); + if (netstat_ips_get_forward(s) || sflag <= 1) putchar('\n'); - p(ips_cantforward, "\t%lu packet%s not forwardable\n"); - p(ips_notmember, - "\t%lu packet%s received for unknown multicast group\n"); - p(ips_redirectsent, "\t%lu redirect%s sent\n"); - p(ips_localout, "\t%lu packet%s sent from this host\n"); - p(ips_rawout, "\t%lu packet%s sent with fabricated ip header\n"); - p(ips_odropped, - "\t%lu output packet%s dropped due to no bufs, etc.\n"); - p(ips_noroute, "\t%lu output packet%s discarded due to no route\n"); - p(ips_fragmented, "\t%lu output datagram%s fragmented\n"); - p(ips_ofragments, "\t%lu fragment%s created\n"); - p(ips_cantfrag, "\t%lu datagram%s that can't be fragmented\n"); - p(ips_nogif, "\t%lu tunneling packet%s that can't find gif\n"); - p(ips_badaddr, "\t%lu datagram%s with bad address in header\n"); + p(cantforward, "\t%ju packet%s not forwardable\n"); + p(notmember, + "\t%ju packet%s received for unknown multicast group\n"); + p(redirectsent, "\t%ju redirect%s sent\n"); + p(localout, "\t%ju packet%s sent from this host\n"); + p(rawout, "\t%ju packet%s sent with fabricated ip header\n"); + p(odropped, + "\t%ju output packet%s dropped due to no bufs, etc.\n"); + p(noroute, "\t%ju output packet%s discarded due to no route\n"); + p(fragmented, "\t%ju output datagram%s fragmented\n"); + p(ofragments, "\t%ju fragment%s created\n"); + p(cantfrag, "\t%ju datagram%s that can't be fragmented\n"); + p(nogif, "\t%ju tunneling packet%s that can't find gif\n"); + p(badaddr, "\t%ju datagram%s with bad address in header\n"); #undef p #undef p1a } ==== //depot/projects/soc2009/pgj_libstat/src/usr.bin/netstat/main.c#22 (text+ko) ==== @@ -127,19 +127,17 @@ { .n_name = "_espstat" }, #define N_IPCOMPSTAT 24 { .n_name = "_ipcompstat" }, -#define N_IPSTAT 25 - { .n_name = "_ipstat" }, -#define N_ICMPSTAT 26 +#define N_ICMPSTAT 25 { .n_name = "_icmpstat" }, -#define N_IGMPSTAT 27 +#define N_IGMPSTAT 26 { .n_name = "_igmpstat" }, -#define N_PIMSTAT 28 +#define N_PIMSTAT 27 { .n_name = "_pimstat" }, -#define N_RIP6STAT 29 +#define N_RIP6STAT 28 { .n_name = "_rip6stat" }, -#define N_SCTPSTAT 30 +#define N_SCTPSTAT 29 { .n_name = "_sctpstat" }, -#define N_MFCTABLESIZE 31 +#define N_MFCTABLESIZE 30 { .n_name = "_mfctablesize" }, { .n_name = NULL }, }; @@ -169,8 +167,8 @@ #endif { 0, -1, 1, NULL, NULL, stat_MAX, NULL, NULL, "divert", 1, IPPROTO_DIVERT }, - { 0, N_IPSTAT, 1, NULL, NULL, stat_MAX, - ip_stats, NULL, "ip", 1, IPPROTO_RAW }, + { 0, 0, 1, NULL, ip_stats, stat_IP, + NULL, NULL, "ip", 1, IPPROTO_RAW }, { 0, N_ICMPSTAT, 1, NULL, NULL, stat_MAX, icmp_stats, NULL, "icmp", 1, IPPROTO_ICMP }, { 0, N_IGMPSTAT, 1, NULL, NULL, stat_MAX,
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200907271834.n6RIYxG1020547>