From owner-p4-projects@FreeBSD.ORG Thu Jul 30 18:33:39 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id A72EF10656F4; Thu, 30 Jul 2009 18:33:39 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6273210656FF for ; Thu, 30 Jul 2009 18:33:39 +0000 (UTC) (envelope-from pgj@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 4E6138FC26 for ; Thu, 30 Jul 2009 18:33:39 +0000 (UTC) (envelope-from pgj@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n6UIXdX2005610 for ; Thu, 30 Jul 2009 18:33:39 GMT (envelope-from pgj@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n6UIXdKG005608 for perforce@freebsd.org; Thu, 30 Jul 2009 18:33:39 GMT (envelope-from pgj@FreeBSD.org) Date: Thu, 30 Jul 2009 18:33:39 GMT Message-Id: <200907301833.n6UIXdKG005608@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to pgj@FreeBSD.org using -f From: Gabor Pali To: Perforce Change Reviews Cc: Subject: PERFORCE change 166824 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 30 Jul 2009 18:33:40 -0000 http://perforce.freebsd.org/chv.cgi?CH=166824 Change 166824 by pgj@petymeg-current on 2009/07/30 18:33:01 Libnetstatify SPX statistics in netstat(1). Affected files ... .. //depot/projects/soc2009/pgj_libstat/src/usr.bin/netstat/extern.h#24 edit .. //depot/projects/soc2009/pgj_libstat/src/usr.bin/netstat/ipx.c#4 edit .. //depot/projects/soc2009/pgj_libstat/src/usr.bin/netstat/main.c#32 edit Differences ... ==== //depot/projects/soc2009/pgj_libstat/src/usr.bin/netstat/extern.h#24 (text+ko) ==== @@ -138,7 +138,7 @@ void routepr(u_long); void ipxprotopr(u_long, const char *, int, int); -void spx_stats(u_long, const char *, int, int); +void spx_stats(const struct stat_type *); void ipx_stats(const struct stat_type *); void ipxerr_stats(u_long, const char *, int, int); ==== //depot/projects/soc2009/pgj_libstat/src/usr.bin/netstat/ipx.c#4 (text+ko) ==== @@ -154,76 +154,72 @@ * Dump SPX statistics structure. */ void -spx_stats(u_long off, const char *name, int af1 __unused, int proto __unused) +spx_stats(const struct stat_type *sttp) { - struct spx_istat spx_istat; -#define spxstat spx_istat.newstats + const struct spx_stat *s; - if (off == 0) - return; - kread(off, (char *)&spx_istat, sizeof (spx_istat)); - printf("%s:\n", name); - ANY(spx_istat.nonucn, "connection", " dropped due to no new sockets "); - ANY(spx_istat.gonawy, "connection", " terminated due to our end dying"); - ANY(spx_istat.nonucn, "connection", - " dropped due to inability to connect"); - ANY(spx_istat.noconn, "connection", - " dropped due to inability to connect"); - ANY(spx_istat.notme, "connection", - " incompleted due to mismatched id's"); - ANY(spx_istat.wrncon, "connection", " dropped due to mismatched id's"); - ANY(spx_istat.bdreas, "packet", " dropped out of sequence"); - ANY(spx_istat.lstdup, "packet", " duplicating the highest packet"); - ANY(spx_istat.notyet, "packet", " refused as exceeding allocation"); - ANYl(spxstat.spxs_connattempt, "connection", " initiated"); - ANYl(spxstat.spxs_accepts, "connection", " accepted"); - ANYl(spxstat.spxs_connects, "connection", " established"); - ANYl(spxstat.spxs_drops, "connection", " dropped"); - ANYl(spxstat.spxs_conndrops, "embryonic connection", " dropped"); - ANYl(spxstat.spxs_closed, "connection", " closed (includes drops)"); - ANYl(spxstat.spxs_segstimed, "packet", " where we tried to get rtt"); - ANYl(spxstat.spxs_rttupdated, "time", " we got rtt"); - ANYl(spxstat.spxs_delack, "delayed ack", " sent"); - ANYl(spxstat.spxs_timeoutdrop, "connection", - " dropped in rxmt timeout"); - ANYl(spxstat.spxs_rexmttimeo, "retransmit timeout", ""); - ANYl(spxstat.spxs_persisttimeo, "persist timeout", ""); - ANYl(spxstat.spxs_keeptimeo, "keepalive timeout", ""); - ANYl(spxstat.spxs_keepprobe, "keepalive probe", " sent"); - ANYl(spxstat.spxs_keepdrops, "connection", " dropped in keepalive"); - ANYl(spxstat.spxs_sndtotal, "total packet", " sent"); - ANYl(spxstat.spxs_sndpack, "data packet", " sent"); - ANYl(spxstat.spxs_sndbyte, "data byte", " sent"); - ANYl(spxstat.spxs_sndrexmitpack, "data packet", " retransmitted"); - ANYl(spxstat.spxs_sndrexmitbyte, "data byte", " retransmitted"); - ANYl(spxstat.spxs_sndacks, "ack-only packet", " sent"); - ANYl(spxstat.spxs_sndprobe, "window probe", " sent"); - ANYl(spxstat.spxs_sndurg, "packet", " sent with URG only"); - ANYl(spxstat.spxs_sndwinup, "window update-only packet", " sent"); - ANYl(spxstat.spxs_sndctrl, "control (SYN|FIN|RST) packet", " sent"); - ANYl(spxstat.spxs_sndvoid, "request", " to send a non-existant packet"); - ANYl(spxstat.spxs_rcvtotal, "total packet", " received"); - ANYl(spxstat.spxs_rcvpack, "packet", " received in sequence"); - ANYl(spxstat.spxs_rcvbyte, "byte", " received in sequence"); - ANYl(spxstat.spxs_rcvbadsum, "packet", " received with ccksum errs"); - ANYl(spxstat.spxs_rcvbadoff, "packet", " received with bad offset"); - ANYl(spxstat.spxs_rcvshort, "packet", " received too short"); - ANYl(spxstat.spxs_rcvduppack, "duplicate-only packet", " received"); - ANYl(spxstat.spxs_rcvdupbyte, "duplicate-only byte", " received"); - ANYl(spxstat.spxs_rcvpartduppack, "packet", - " with some duplicate data"); - ANYl(spxstat.spxs_rcvpartdupbyte, "dup. byte", " in part-dup. packet"); - ANYl(spxstat.spxs_rcvoopack, "out-of-order packet", " received"); - ANYl(spxstat.spxs_rcvoobyte, "out-of-order byte", " received"); - ANYl(spxstat.spxs_rcvpackafterwin, "packet", " with data after window"); - ANYl(spxstat.spxs_rcvbyteafterwin, "byte", " rcvd after window"); - ANYl(spxstat.spxs_rcvafterclose, "packet", " rcvd after 'close'"); - ANYl(spxstat.spxs_rcvwinprobe, "rcvd window probe packet", ""); - ANYl(spxstat.spxs_rcvdupack, "rcvd duplicate ack", ""); - ANYl(spxstat.spxs_rcvacktoomuch, "rcvd ack", " for unsent data"); - ANYl(spxstat.spxs_rcvackpack, "rcvd ack packet", ""); - ANYl(spxstat.spxs_rcvackbyte, "byte", " acked by rcvd acks"); - ANYl(spxstat.spxs_rcvwinupd, "rcvd window update packet", ""); + s = netstat_get_spxstats(sttp); +#define p(x,y,z) \ + if (netstat_spxs_get_##x(s) || sflag <= 1) \ + printf("\t%ju %s%s%s\n", netstat_spxs_get_##x(s), y, \ + plural(netstat_spxs_get_##x(s)), z) + p(nonucn, "connection", " dropped due to no new sockets "); + p(gonawy, "connection", " terminated due to our end dying"); + p(nonucn, "connection", " dropped due to inability to connect"); + p(noconn, "connection", " dropped due to inability to connect"); + p(notme, "connection", " incompleted due to mismatched id's"); + p(wrncon, "connection", " dropped due to mismatched id's"); + p(bdreas, "packet", " dropped out of sequence"); + p(lstdup, "packet", " duplicating the highest packet"); + p(notyet, "packet", " refused as exceeding allocation"); + p(connattempt, "connection", " initiated"); + p(accepts, "connection", " accepted"); + p(connects, "connection", " established"); + p(drops, "connection", " dropped"); + p(conndrops, "embryonic connection", " dropped"); + p(closed, "connection", " closed (includes drops)"); + p(segstimed, "packet", " where we tried to get rtt"); + p(rttupdated, "time", " we got rtt"); + p(delack, "delayed ack", " sent"); + p(timeoutdrop, "connection", " dropped in rxmt timeout"); + p(rexmttimeo, "retransmit timeout", ""); + p(persisttimeo, "persist timeout", ""); + p(keeptimeo, "keepalive timeout", ""); + p(keepprobe, "keepalive probe", " sent"); + p(keepdrops, "connection", " dropped in keepalive"); + p(sndtotal, "total packet", " sent"); + p(sndpack, "data packet", " sent"); + p(sndbyte, "data byte", " sent"); + p(sndrexmitpack, "data packet", " retransmitted"); + p(sndrexmitbyte, "data byte", " retransmitted"); + p(sndacks, "ack-only packet", " sent"); + p(sndprobe, "window probe", " sent"); + p(sndurg, "packet", " sent with URG only"); + p(sndwinup, "window update-only packet", " sent"); + p(sndctrl, "control (SYN|FIN|RST) packet", " sent"); + p(sndvoid, "request", " to send a non-existant packet"); + p(rcvtotal, "total packet", " received"); + p(rcvpack, "packet", " received in sequence"); + p(rcvbyte, "byte", " received in sequence"); + p(rcvbadsum, "packet", " received with ccksum errs"); + p(rcvbadoff, "packet", " received with bad offset"); + p(rcvshort, "packet", " received too short"); + p(rcvduppack, "duplicate-only packet", " received"); + p(rcvdupbyte, "duplicate-only byte", " received"); + p(rcvpartduppack, "packet", " with some duplicate data"); + p(rcvpartdupbyte, "dup. byte", " in part-dup. packet"); + p(rcvoopack, "out-of-order packet", " received"); + p(rcvoobyte, "out-of-order byte", " received"); + p(rcvpackafterwin, "packet", " with data after window"); + p(rcvbyteafterwin, "byte", " rcvd after window"); + p(rcvafterclose, "packet", " rcvd after 'close'"); + p(rcvwinprobe, "rcvd window probe packet", ""); + p(rcvdupack, "rcvd duplicate ack", ""); + p(rcvacktoomuch, "rcvd ack", " for unsent data"); + p(rcvackpack, "rcvd ack packet", ""); + p(rcvackbyte, "byte", " acked by rcvd acks"); + p(rcvwinupd, "rcvd window update packet", ""); +#undef p } /* ==== //depot/projects/soc2009/pgj_libstat/src/usr.bin/netstat/main.c#32 (text+ko) ==== @@ -89,37 +89,35 @@ { .n_name = "_viftable" }, #define N_IPX 5 { .n_name = "_ipxpcb_list"}, -#define N_SPXSTAT 6 - { .n_name = "_spx_istat"}, -#define N_DDPCB 7 +#define N_DDPCB 6 { .n_name = "_ddpcb"}, -#define N_NGSOCKS 8 +#define N_NGSOCKS 7 { .n_name = "_ngsocklist"}, -#define N_IP6STAT 9 +#define N_IP6STAT 8 { .n_name = "_ip6stat" }, -#define N_IPSECSTAT 10 +#define N_IPSECSTAT 9 { .n_name = "_ipsec4stat" }, -#define N_IPSEC6STAT 11 +#define N_IPSEC6STAT 10 { .n_name = "_ipsec6stat" }, -#define N_MRT6STAT 12 +#define N_MRT6STAT 11 { .n_name = "_mrt6stat" }, -#define N_MF6CTABLE 13 +#define N_MF6CTABLE 12 { .n_name = "_mf6ctable" }, -#define N_MIF6TABLE 14 +#define N_MIF6TABLE 13 { .n_name = "_mif6table" }, -#define N_PFKEYSTAT 15 +#define N_PFKEYSTAT 14 { .n_name = "_pfkeystat" }, -#define N_RTTRASH 16 +#define N_RTTRASH 15 { .n_name = "_rttrash" }, -#define N_PFSYNCSTAT 17 +#define N_PFSYNCSTAT 16 { .n_name = "_pfsyncstats" }, -#define N_AHSTAT 18 +#define N_AHSTAT 17 { .n_name = "_ahstat" }, -#define N_ESPSTAT 19 +#define N_ESPSTAT 18 { .n_name = "_espstat" }, -#define N_IPCOMPSTAT 20 +#define N_IPCOMPSTAT 19 { .n_name = "_ipcompstat" }, -#define N_MFCTABLESIZE 21 +#define N_MFCTABLESIZE 20 { .n_name = "_mfctablesize" }, { .n_name = NULL }, }; @@ -229,8 +227,8 @@ struct protox ipxprotox[] = { { N_IPX, 0, 1, ipxprotopr, ipx_stats, stat_IPX, NULL, NULL, "ipx", 0, 0 }, - { N_IPX, N_SPXSTAT, 1, ipxprotopr, NULL, stat_MAX, - spx_stats, NULL, "spx", 0, 0 }, + { N_IPX, 0, 1, ipxprotopr, spx_stats, stat_SPX, + NULL, NULL, "spx", 0, 0 }, { -1, -1, 0, NULL, NULL, stat_MAX, NULL, NULL, 0, 0, 0 } };