PERFORCE change 166824 for review

Gabor Pali pgj at FreeBSD.org
Thu Jul 30 18:33:40 UTC 2009


http://perforce.freebsd.org/chv.cgi?CH=166824

Change 166824 by pgj at 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 }
 };


More information about the p4-projects mailing list