summaryrefslogtreecommitdiff
path: root/usr.bin
diff options
context:
space:
mode:
authorthorpej <thorpej@NetBSD.org>2008-04-08 01:03:58 +0000
committerthorpej <thorpej@NetBSD.org>2008-04-08 01:03:58 +0000
commitf5c68c0b9fc4ff7e896f0f6d757995c19351d8a7 (patch)
treeb2d38957962ebc8a6d489268c1105d29a7ebcbc7 /usr.bin
parent27b03461ec930d8ba4c9885fa97fb79a0fa310fd (diff)
Change TCP stats from a structure to an array of uint64_t's.
Note: This is ABI-compatible with the old tcpstat structure; old netstat binaries will continue to work properly.
Diffstat (limited to 'usr.bin')
-rw-r--r--usr.bin/netstat/inet.c170
-rw-r--r--usr.bin/systat/tcp.c159
2 files changed, 149 insertions, 180 deletions
diff --git a/usr.bin/netstat/inet.c b/usr.bin/netstat/inet.c
index 6bfe91dfc82..e10fd31e7c3 100644
--- a/usr.bin/netstat/inet.c
+++ b/usr.bin/netstat/inet.c
@@ -1,4 +1,4 @@
-/* $NetBSD: inet.c,v 1.82 2008/04/07 06:31:28 thorpej Exp $ */
+/* $NetBSD: inet.c,v 1.83 2008/04/08 01:03:58 thorpej Exp $ */
/*
* Copyright (c) 1983, 1988, 1993
@@ -34,7 +34,7 @@
#if 0
static char sccsid[] = "from: @(#)inet.c 8.4 (Berkeley) 4/20/94";
#else
-__RCSID("$NetBSD: inet.c,v 1.82 2008/04/07 06:31:28 thorpej Exp $");
+__RCSID("$NetBSD: inet.c,v 1.83 2008/04/08 01:03:58 thorpej Exp $");
#endif
#endif /* not lint */
@@ -125,7 +125,7 @@ protopr0(intptr_t ppcb, u_long rcv_sb_cc, u_long snd_sb_cc,
struct in_addr *faddr, u_int16_t fport,
short t_state, char *name)
{
- static char *shorttcpstates[] = {
+ static const char *shorttcpstates[] = {
"CLOSED", "LISTEN", "SYNSEN", "SYSRCV",
"ESTABL", "CLWAIT", "FWAIT1", "CLOSNG",
"LASTAK", "FWAIT2", "TMWAIT",
@@ -279,123 +279,121 @@ protopr(off, name)
* Dump TCP statistics structure.
*/
void
-tcp_stats(off, name)
- u_long off;
- char *name;
+tcp_stats(u_long off, char *name)
{
- struct tcpstat tcpstat;
+ uint64_t tcpstat[TCP_NSTATS];
if (use_sysctl) {
size_t size = sizeof(tcpstat);
- if (sysctlbyname("net.inet.tcp.stats", &tcpstat, &size,
+ if (sysctlbyname("net.inet.tcp.stats", tcpstat, &size,
NULL, 0) == -1)
err(1, "net.inet.tcp.stats");
} else {
if (off == 0)
return;
- kread(off, (char *)&tcpstat, sizeof (tcpstat));
+ kread(off, (char *)tcpstat, sizeof (tcpstat));
}
printf ("%s:\n", name);
-#define ps(f, m) if (tcpstat.f || sflag <= 1) \
- printf(m, (unsigned long long)tcpstat.f)
-#define p(f, m) if (tcpstat.f || sflag <= 1) \
- printf(m, (unsigned long long)tcpstat.f, plural(tcpstat.f))
-#define p2(f1, f2, m) if (tcpstat.f1 || tcpstat.f2 || sflag <= 1) \
- printf(m, (unsigned long long)tcpstat.f1, plural(tcpstat.f1), \
- (unsigned long long)tcpstat.f2, plural(tcpstat.f2))
-#define p2s(f1, f2, m) if (tcpstat.f1 || tcpstat.f2 || sflag <= 1) \
- printf(m, (unsigned long long)tcpstat.f1, plural(tcpstat.f1), \
- (unsigned long long)tcpstat.f2)
-#define p3(f, m) if (tcpstat.f || sflag <= 1) \
- printf(m, (unsigned long long)tcpstat.f, plurales(tcpstat.f))
-
- p(tcps_sndtotal, "\t%llu packet%s sent\n");
- p2(tcps_sndpack,tcps_sndbyte,
+#define ps(f, m) if (tcpstat[f] || sflag <= 1) \
+ printf(m, (unsigned long long)tcpstat[f])
+#define p(f, m) if (tcpstat[f] || sflag <= 1) \
+ printf(m, (unsigned long long)tcpstat[f], plural(tcpstat[f]))
+#define p2(f1, f2, m) if (tcpstat[f1] || tcpstat[f2] || sflag <= 1) \
+ printf(m, (unsigned long long)tcpstat[f1], plural(tcpstat[f1]), \
+ (unsigned long long)tcpstat[f2], plural(tcpstat[f2]))
+#define p2s(f1, f2, m) if (tcpstat[f1] || tcpstat[f2] || sflag <= 1) \
+ printf(m, (unsigned long long)tcpstat[f1], plural(tcpstat[f1]), \
+ (unsigned long long)tcpstat[f2])
+#define p3(f, m) if (tcpstat[f] || sflag <= 1) \
+ printf(m, (unsigned long long)tcpstat[f], plurales(tcpstat[f]))
+
+ p(TCP_STAT_SNDTOTAL, "\t%llu packet%s sent\n");
+ p2(TCP_STAT_SNDPACK,TCP_STAT_SNDBYTE,
"\t\t%llu data packet%s (%llu byte%s)\n");
- p2(tcps_sndrexmitpack, tcps_sndrexmitbyte,
+ p2(TCP_STAT_SNDREXMITPACK, TCP_STAT_SNDREXMITBYTE,
"\t\t%llu data packet%s (%llu byte%s) retransmitted\n");
- p2s(tcps_sndacks, tcps_delack,
+ p2s(TCP_STAT_SNDACKS, TCP_STAT_DELACK,
"\t\t%llu ack-only packet%s (%llu delayed)\n");
- p(tcps_sndurg, "\t\t%llu URG only packet%s\n");
- p(tcps_sndprobe, "\t\t%llu window probe packet%s\n");
- p(tcps_sndwinup, "\t\t%llu window update packet%s\n");
- p(tcps_sndctrl, "\t\t%llu control packet%s\n");
- p(tcps_selfquench,
+ p(TCP_STAT_SNDURG, "\t\t%llu URG only packet%s\n");
+ p(TCP_STAT_SNDPROBE, "\t\t%llu window probe packet%s\n");
+ p(TCP_STAT_SNDWINUP, "\t\t%llu window update packet%s\n");
+ p(TCP_STAT_SNDCTRL, "\t\t%llu control packet%s\n");
+ p(TCP_STAT_SELFQUENCH,
"\t\t%llu send attempt%s resulted in self-quench\n");
- p(tcps_rcvtotal, "\t%llu packet%s received\n");
- p2(tcps_rcvackpack, tcps_rcvackbyte,
+ p(TCP_STAT_RCVTOTAL, "\t%llu packet%s received\n");
+ p2(TCP_STAT_RCVACKPACK, TCP_STAT_RCVACKBYTE,
"\t\t%llu ack%s (for %llu byte%s)\n");
- p(tcps_rcvdupack, "\t\t%llu duplicate ack%s\n");
- p(tcps_rcvacktoomuch, "\t\t%llu ack%s for unsent data\n");
- p2(tcps_rcvpack, tcps_rcvbyte,
+ p(TCP_STAT_RCVDUPACK, "\t\t%llu duplicate ack%s\n");
+ p(TCP_STAT_RCVACKTOOMUCH, "\t\t%llu ack%s for unsent data\n");
+ p2(TCP_STAT_RCVPACK, TCP_STAT_RCVBYTE,
"\t\t%llu packet%s (%llu byte%s) received in-sequence\n");
- p2(tcps_rcvduppack, tcps_rcvdupbyte,
+ p2(TCP_STAT_RCVDUPPACK, TCP_STAT_RCVDUPBYTE,
"\t\t%llu completely duplicate packet%s (%llu byte%s)\n");
- p(tcps_pawsdrop, "\t\t%llu old duplicate packet%s\n");
- p2(tcps_rcvpartduppack, tcps_rcvpartdupbyte,
+ p(TCP_STAT_PAWSDROP, "\t\t%llu old duplicate packet%s\n");
+ p2(TCP_STAT_RCVPARTDUPPACK, TCP_STAT_RCVPARTDUPBYTE,
"\t\t%llu packet%s with some dup. data (%llu byte%s duped)\n");
- p2(tcps_rcvoopack, tcps_rcvoobyte,
+ p2(TCP_STAT_RCVOOPACK, TCP_STAT_RCVOOBYTE,
"\t\t%llu out-of-order packet%s (%llu byte%s)\n");
- p2(tcps_rcvpackafterwin, tcps_rcvbyteafterwin,
+ p2(TCP_STAT_RCVPACKAFTERWIN, TCP_STAT_RCVBYTEAFTERWIN,
"\t\t%llu packet%s (%llu byte%s) of data after window\n");
- p(tcps_rcvwinprobe, "\t\t%llu window probe%s\n");
- p(tcps_rcvwinupd, "\t\t%llu window update packet%s\n");
- p(tcps_rcvafterclose, "\t\t%llu packet%s received after close\n");
- p(tcps_rcvbadsum, "\t\t%llu discarded for bad checksum%s\n");
- p(tcps_rcvbadoff, "\t\t%llu discarded for bad header offset field%s\n");
- ps(tcps_rcvshort, "\t\t%llu discarded because packet too short\n");
- p(tcps_connattempt, "\t%llu connection request%s\n");
- p(tcps_accepts, "\t%llu connection accept%s\n");
- p(tcps_connects,
+ p(TCP_STAT_RCVWINPROBE, "\t\t%llu window probe%s\n");
+ p(TCP_STAT_RCVWINUPD, "\t\t%llu window update packet%s\n");
+ p(TCP_STAT_RCVAFTERCLOSE, "\t\t%llu packet%s received after close\n");
+ p(TCP_STAT_RCVBADSUM, "\t\t%llu discarded for bad checksum%s\n");
+ p(TCP_STAT_RCVBADOFF, "\t\t%llu discarded for bad header offset field%s\n");
+ ps(TCP_STAT_RCVSHORT, "\t\t%llu discarded because packet too short\n");
+ p(TCP_STAT_CONNATTEMPT, "\t%llu connection request%s\n");
+ p(TCP_STAT_ACCEPTS, "\t%llu connection accept%s\n");
+ p(TCP_STAT_CONNECTS,
"\t%llu connection%s established (including accepts)\n");
- p2(tcps_closed, tcps_drops,
+ p2(TCP_STAT_CLOSED, TCP_STAT_DROPS,
"\t%llu connection%s closed (including %llu drop%s)\n");
- p(tcps_conndrops, "\t%llu embryonic connection%s dropped\n");
- p(tcps_delayed_free, "\t%llu delayed free%s of tcpcb\n");
- p2(tcps_rttupdated, tcps_segstimed,
+ p(TCP_STAT_CONNDROPS, "\t%llu embryonic connection%s dropped\n");
+ p(TCP_STAT_DELAYED_FREE, "\t%llu delayed free%s of tcpcb\n");
+ p2(TCP_STAT_RTTUPDATED, TCP_STAT_SEGSTIMED,
"\t%llu segment%s updated rtt (of %llu attempt%s)\n");
- p(tcps_rexmttimeo, "\t%llu retransmit timeout%s\n");
- p(tcps_timeoutdrop,
+ p(TCP_STAT_REXMTTIMEO, "\t%llu retransmit timeout%s\n");
+ p(TCP_STAT_TIMEOUTDROP,
"\t\t%llu connection%s dropped by rexmit timeout\n");
- p2(tcps_persisttimeo, tcps_persistdrops,
+ p2(TCP_STAT_PERSISTTIMEO, TCP_STAT_PERSISTDROPS,
"\t%llu persist timeout%s (resulting in %llu dropped "
"connection%s)\n");
- p(tcps_keeptimeo, "\t%llu keepalive timeout%s\n");
- p(tcps_keepprobe, "\t\t%llu keepalive probe%s sent\n");
- p(tcps_keepdrops, "\t\t%llu connection%s dropped by keepalive\n");
- p(tcps_predack, "\t%llu correct ACK header prediction%s\n");
- p(tcps_preddat, "\t%llu correct data packet header prediction%s\n");
- p3(tcps_pcbhashmiss, "\t%llu PCB hash miss%s\n");
- ps(tcps_noport, "\t%llu dropped due to no socket\n");
- p(tcps_connsdrained, "\t%llu connection%s drained due to memory "
+ p(TCP_STAT_KEEPTIMEO, "\t%llu keepalive timeout%s\n");
+ p(TCP_STAT_KEEPPROBE, "\t\t%llu keepalive probe%s sent\n");
+ p(TCP_STAT_KEEPDROPS, "\t\t%llu connection%s dropped by keepalive\n");
+ p(TCP_STAT_PREDACK, "\t%llu correct ACK header prediction%s\n");
+ p(TCP_STAT_PREDDAT, "\t%llu correct data packet header prediction%s\n");
+ p3(TCP_STAT_PCBHASHMISS, "\t%llu PCB hash miss%s\n");
+ ps(TCP_STAT_NOPORT, "\t%llu dropped due to no socket\n");
+ p(TCP_STAT_CONNSDRAINED, "\t%llu connection%s drained due to memory "
"shortage\n");
- p(tcps_pmtublackhole, "\t%llu PMTUD blackhole%s detected\n");
-
- p(tcps_badsyn, "\t%llu bad connection attempt%s\n");
- ps(tcps_sc_added, "\t%llu SYN cache entries added\n");
- p(tcps_sc_collisions, "\t\t%llu hash collision%s\n");
- ps(tcps_sc_completed, "\t\t%llu completed\n");
- ps(tcps_sc_aborted, "\t\t%llu aborted (no space to build PCB)\n");
- ps(tcps_sc_timed_out, "\t\t%llu timed out\n");
- ps(tcps_sc_overflowed, "\t\t%llu dropped due to overflow\n");
- ps(tcps_sc_bucketoverflow, "\t\t%llu dropped due to bucket overflow\n");
- ps(tcps_sc_reset, "\t\t%llu dropped due to RST\n");
- ps(tcps_sc_unreach, "\t\t%llu dropped due to ICMP unreachable\n");
- ps(tcps_sc_delayed_free, "\t\t%llu delayed free of SYN cache "
+ p(TCP_STAT_PMTUBLACKHOLE, "\t%llu PMTUD blackhole%s detected\n");
+
+ p(TCP_STAT_BADSYN, "\t%llu bad connection attempt%s\n");
+ ps(TCP_STAT_SC_ADDED, "\t%llu SYN cache entries added\n");
+ p(TCP_STAT_SC_COLLISIONS, "\t\t%llu hash collision%s\n");
+ ps(TCP_STAT_SC_COMPLETED, "\t\t%llu completed\n");
+ ps(TCP_STAT_SC_ABORTED, "\t\t%llu aborted (no space to build PCB)\n");
+ ps(TCP_STAT_SC_TIMED_OUT, "\t\t%llu timed out\n");
+ ps(TCP_STAT_SC_OVERFLOWED, "\t\t%llu dropped due to overflow\n");
+ ps(TCP_STAT_SC_BUCKETOVERFLOW, "\t\t%llu dropped due to bucket overflow\n");
+ ps(TCP_STAT_SC_RESET, "\t\t%llu dropped due to RST\n");
+ ps(TCP_STAT_SC_UNREACH, "\t\t%llu dropped due to ICMP unreachable\n");
+ ps(TCP_STAT_SC_DELAYED_FREE, "\t\t%llu delayed free of SYN cache "
"entries\n");
- p(tcps_sc_retransmitted, "\t%llu SYN,ACK%s retransmitted\n");
- p(tcps_sc_dupesyn, "\t%llu duplicate SYN%s received for entries "
+ p(TCP_STAT_SC_RETRANSMITTED, "\t%llu SYN,ACK%s retransmitted\n");
+ p(TCP_STAT_SC_DUPESYN, "\t%llu duplicate SYN%s received for entries "
"already in the cache\n");
- p(tcps_sc_dropped, "\t%llu SYN%s dropped (no route or no space)\n");
- p(tcps_badsig, "\t%llu packet%s with bad signature\n");
- p(tcps_goodsig, "\t%llu packet%s with good signature\n");
+ p(TCP_STAT_SC_DROPPED, "\t%llu SYN%s dropped (no route or no space)\n");
+ p(TCP_STAT_BADSIG, "\t%llu packet%s with bad signature\n");
+ p(TCP_STAT_GOODSIG, "\t%llu packet%s with good signature\n");
- p(tcps_ecn_shs, "\t%llu sucessful ECN handshake%s\n");
- p(tcps_ecn_ce, "\t%llu packet%s with ECN CE bit\n");
- p(tcps_ecn_ect, "\t%llu packet%s ECN ECT(0) bit\n");
+ p(TCP_STAT_ECN_SHS, "\t%llu sucessful ECN handshake%s\n");
+ p(TCP_STAT_ECN_CE, "\t%llu packet%s with ECN CE bit\n");
+ p(TCP_STAT_ECN_ECT, "\t%llu packet%s ECN ECT(0) bit\n");
#undef p
#undef ps
#undef p2
diff --git a/usr.bin/systat/tcp.c b/usr.bin/systat/tcp.c
index ea2ce682683..c1cb9c247e7 100644
--- a/usr.bin/systat/tcp.c
+++ b/usr.bin/systat/tcp.c
@@ -1,4 +1,4 @@
-/* $NetBSD: tcp.c,v 1.12 2006/10/22 16:43:24 christos Exp $ */
+/* $NetBSD: tcp.c,v 1.13 2008/04/08 01:03:58 thorpej Exp $ */
/*
* Copyright (c) 1999, 2000 Andrew Doran <ad@NetBSD.org>
@@ -29,7 +29,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: tcp.c,v 1.12 2006/10/22 16:43:24 christos Exp $");
+__RCSID("$NetBSD: tcp.c,v 1.13 2008/04/08 01:03:58 thorpej Exp $");
#endif /* not lint */
#include <sys/param.h>
@@ -51,7 +51,7 @@ __RCSID("$NetBSD: tcp.c,v 1.12 2006/10/22 16:43:24 christos Exp $");
#define LHD(row, str) mvwprintw(wnd, row, 10, str)
#define RHD(row, str) mvwprintw(wnd, row, 45, str)
#define SHOW(row, col, stat) \
- mvwprintw(wnd, row, col, "%9llu", (unsigned long long)curstat.stat)
+ mvwprintw(wnd, row, col, "%9llu", (unsigned long long)curstat[stat])
enum update {
UPDATE_TIME,
@@ -60,9 +60,9 @@ enum update {
};
static enum update update = UPDATE_TIME;
-static struct tcpstat curstat;
-static struct tcpstat newstat;
-static struct tcpstat oldstat;
+static uint64_t curstat[TCP_NSTATS];
+static uint64_t newstat[TCP_NSTATS];
+static uint64_t oldstat[TCP_NSTATS];
static struct nlist namelist[] = {
{ .n_name = "_tcpstat" },
@@ -135,18 +135,18 @@ void
showtcpsyn(void)
{
- SHOW(0, 0, tcps_sc_added);
- SHOW(1, 0, tcps_sc_completed);
- SHOW(2, 0, tcps_sc_timed_out);
- SHOW(3, 0, tcps_sc_dupesyn);
- SHOW(4, 0, tcps_sc_collisions);
- SHOW(5, 0, tcps_sc_retransmitted);
- SHOW(6, 0, tcps_sc_aborted);
- SHOW(7, 0, tcps_sc_overflowed);
- SHOW(8, 0, tcps_sc_reset);
- SHOW(9, 0, tcps_sc_unreach);
- SHOW(10, 0, tcps_sc_bucketoverflow);
- SHOW(11, 0, tcps_sc_dropped);
+ SHOW(0, 0, TCP_STAT_SC_ADDED);
+ SHOW(1, 0, TCP_STAT_SC_COMPLETED);
+ SHOW(2, 0, TCP_STAT_SC_TIMED_OUT);
+ SHOW(3, 0, TCP_STAT_SC_DUPESYN);
+ SHOW(4, 0, TCP_STAT_SC_COLLISIONS);
+ SHOW(5, 0, TCP_STAT_SC_RETRANSMITTED);
+ SHOW(6, 0, TCP_STAT_SC_ABORTED);
+ SHOW(7, 0, TCP_STAT_SC_OVERFLOWED);
+ SHOW(8, 0, TCP_STAT_SC_RESET);
+ SHOW(9, 0, TCP_STAT_SC_UNREACH);
+ SHOW(10, 0, TCP_STAT_SC_BUCKETOVERFLOW);
+ SHOW(11, 0, TCP_STAT_SC_DROPPED);
}
void
@@ -172,43 +172,43 @@ void
showtcp(void)
{
- SHOW(0, 0, tcps_connattempt);
- SHOW(1, 0, tcps_accepts);
- SHOW(2, 0, tcps_connects);
-
- SHOW(4, 0, tcps_drops);
- SHOW(5, 0, tcps_conndrops);
- SHOW(6, 0, tcps_timeoutdrop);
- SHOW(7, 0, tcps_keepdrops);
- SHOW(8, 0, tcps_persistdrops);
-
- SHOW(10, 0, tcps_segstimed);
- SHOW(11, 0, tcps_rttupdated);
- SHOW(12, 0, tcps_delack);
- SHOW(13, 0, tcps_rexmttimeo);
- SHOW(14, 0, tcps_persisttimeo);
- SHOW(15, 0, tcps_keepprobe);
- SHOW(16, 0, tcps_keeptimeo);
-
- SHOW(0, 35, tcps_sndtotal);
- SHOW(1, 35, tcps_sndpack);
- SHOW(2, 35, tcps_sndrexmitpack);
-
- SHOW(3, 35, tcps_sndacks);
- SHOW(4, 35, tcps_sndprobe);
- SHOW(5, 35, tcps_sndwinup);
- SHOW(6, 35, tcps_sndurg);
- SHOW(7, 35, tcps_sndctrl);
-
- SHOW(9, 35, tcps_rcvtotal);
- SHOW(10, 35, tcps_rcvpack);
- SHOW(11, 35, tcps_rcvduppack);
- SHOW(12, 35, tcps_rcvpartduppack);
- SHOW(13, 35, tcps_rcvoopack);
- SHOW(14, 35, tcps_rcvdupack);
- SHOW(15, 35, tcps_rcvackpack);
- SHOW(16, 35, tcps_rcvwinprobe);
- SHOW(17, 35, tcps_rcvwinupd);
+ SHOW(0, 0, TCP_STAT_CONNATTEMPT);
+ SHOW(1, 0, TCP_STAT_ACCEPTS);
+ SHOW(2, 0, TCP_STAT_CONNECTS);
+
+ SHOW(4, 0, TCP_STAT_DROPS);
+ SHOW(5, 0, TCP_STAT_CONNDROPS);
+ SHOW(6, 0, TCP_STAT_TIMEOUTDROP);
+ SHOW(7, 0, TCP_STAT_KEEPDROPS);
+ SHOW(8, 0, TCP_STAT_PERSISTDROPS);
+
+ SHOW(10, 0, TCP_STAT_SEGSTIMED);
+ SHOW(11, 0, TCP_STAT_RTTUPDATED);
+ SHOW(12, 0, TCP_STAT_DELACK);
+ SHOW(13, 0, TCP_STAT_REXMTTIMEO);
+ SHOW(14, 0, TCP_STAT_PERSISTTIMEO);
+ SHOW(15, 0, TCP_STAT_KEEPPROBE);
+ SHOW(16, 0, TCP_STAT_KEEPTIMEO);
+
+ SHOW(0, 35, TCP_STAT_SNDTOTAL);
+ SHOW(1, 35, TCP_STAT_SNDPACK);
+ SHOW(2, 35, TCP_STAT_SNDREXMITPACK);
+
+ SHOW(3, 35, TCP_STAT_SNDACKS);
+ SHOW(4, 35, TCP_STAT_SNDPROBE);
+ SHOW(5, 35, TCP_STAT_SNDWINUP);
+ SHOW(6, 35, TCP_STAT_SNDURG);
+ SHOW(7, 35, TCP_STAT_SNDCTRL);
+
+ SHOW(9, 35, TCP_STAT_RCVTOTAL);
+ SHOW(10, 35, TCP_STAT_RCVPACK);
+ SHOW(11, 35, TCP_STAT_RCVDUPPACK);
+ SHOW(12, 35, TCP_STAT_RCVPARTDUPPACK);
+ SHOW(13, 35, TCP_STAT_RCVOOPACK);
+ SHOW(14, 35, TCP_STAT_RCVDUPACK);
+ SHOW(15, 35, TCP_STAT_RCVACKPACK);
+ SHOW(16, 35, TCP_STAT_RCVWINPROBE);
+ SHOW(17, 35, TCP_STAT_RCVWINUPD);
}
int
@@ -231,51 +231,22 @@ inittcp(void)
void
fetchtcp(void)
{
+ int i;
- KREAD((void *)namelist[0].n_value, &newstat, sizeof(newstat));
-
- ADJINETCTR(curstat, oldstat, newstat, tcps_connattempt);
- ADJINETCTR(curstat, oldstat, newstat, tcps_accepts);
- ADJINETCTR(curstat, oldstat, newstat, tcps_connects);
- ADJINETCTR(curstat, oldstat, newstat, tcps_drops);
- ADJINETCTR(curstat, oldstat, newstat, tcps_conndrops);
- ADJINETCTR(curstat, oldstat, newstat, tcps_timeoutdrop);
- ADJINETCTR(curstat, oldstat, newstat, tcps_keepdrops);
- ADJINETCTR(curstat, oldstat, newstat, tcps_persistdrops);
- ADJINETCTR(curstat, oldstat, newstat, tcps_segstimed);
- ADJINETCTR(curstat, oldstat, newstat, tcps_rttupdated);
- ADJINETCTR(curstat, oldstat, newstat, tcps_delack);
- ADJINETCTR(curstat, oldstat, newstat, tcps_rexmttimeo);
- ADJINETCTR(curstat, oldstat, newstat, tcps_persisttimeo);
- ADJINETCTR(curstat, oldstat, newstat, tcps_keepprobe);
- ADJINETCTR(curstat, oldstat, newstat, tcps_keeptimeo);
- ADJINETCTR(curstat, oldstat, newstat, tcps_sndtotal);
- ADJINETCTR(curstat, oldstat, newstat, tcps_sndpack);
- ADJINETCTR(curstat, oldstat, newstat, tcps_sndrexmitpack);
- ADJINETCTR(curstat, oldstat, newstat, tcps_sndacks);
- ADJINETCTR(curstat, oldstat, newstat, tcps_sndprobe);
- ADJINETCTR(curstat, oldstat, newstat, tcps_sndwinup);
- ADJINETCTR(curstat, oldstat, newstat, tcps_sndurg);
- ADJINETCTR(curstat, oldstat, newstat, tcps_sndctrl);
- ADJINETCTR(curstat, oldstat, newstat, tcps_rcvtotal);
- ADJINETCTR(curstat, oldstat, newstat, tcps_rcvpack);
- ADJINETCTR(curstat, oldstat, newstat, tcps_rcvduppack);
- ADJINETCTR(curstat, oldstat, newstat, tcps_rcvpartduppack);
- ADJINETCTR(curstat, oldstat, newstat, tcps_rcvoopack);
- ADJINETCTR(curstat, oldstat, newstat, tcps_rcvdupack);
- ADJINETCTR(curstat, oldstat, newstat, tcps_rcvackpack);
- ADJINETCTR(curstat, oldstat, newstat, tcps_rcvwinprobe);
- ADJINETCTR(curstat, oldstat, newstat, tcps_rcvwinupd);
+ KREAD((void *)namelist[0].n_value, newstat, sizeof(newstat));
+
+ for (i = 0; i < TCP_NSTATS; i++)
+ xADJINETCTR(curstat, oldstat, newstat, i);
if (update == UPDATE_TIME)
- memcpy(&oldstat, &newstat, sizeof(oldstat));
+ memcpy(oldstat, newstat, sizeof(oldstat));
}
void
tcp_boot(char *args)
{
- memset(&oldstat, 0, sizeof(oldstat));
+ memset(oldstat, 0, sizeof(oldstat));
update = UPDATE_BOOT;
}
@@ -284,7 +255,7 @@ tcp_run(char *args)
{
if (update != UPDATE_RUN) {
- memcpy(&oldstat, &newstat, sizeof(oldstat));
+ memcpy(oldstat, newstat, sizeof(oldstat));
update = UPDATE_RUN;
}
}
@@ -294,7 +265,7 @@ tcp_time(char *args)
{
if (update != UPDATE_TIME) {
- memcpy(&oldstat, &newstat, sizeof(oldstat));
+ memcpy(oldstat, newstat, sizeof(oldstat));
update = UPDATE_TIME;
}
}
@@ -304,5 +275,5 @@ tcp_zero(char *args)
{
if (update == UPDATE_RUN)
- memcpy(&oldstat, &newstat, sizeof(oldstat));
+ memcpy(oldstat, newstat, sizeof(oldstat));
}