Module Name: src
Committed By: drochner
Date: Wed May 11 15:09:00 UTC 2011
Modified Files:
src/sys/netinet: tcp_vtw.c
src/usr.bin/netstat: inet.c inet6.c vtw.c vtw.h
Log Message:
use getmicrouptime(9) rather than microtime(9) for TIME_WAIT duration
calculation, because this doesn't get confused by system time changes,
and uses less CPU cycles
reviewed by dyoung
To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/sys/netinet/tcp_vtw.c
cvs rdiff -u -r1.97 -r1.98 src/usr.bin/netstat/inet.c
cvs rdiff -u -r1.56 -r1.57 src/usr.bin/netstat/inet6.c
cvs rdiff -u -r1.5 -r1.6 src/usr.bin/netstat/vtw.c
cvs rdiff -u -r1.1 -r1.2 src/usr.bin/netstat/vtw.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/netinet/tcp_vtw.c
diff -u src/sys/netinet/tcp_vtw.c:1.2 src/sys/netinet/tcp_vtw.c:1.3
--- src/sys/netinet/tcp_vtw.c:1.2 Fri May 6 12:52:43 2011
+++ src/sys/netinet/tcp_vtw.c Wed May 11 15:08:59 2011
@@ -77,7 +77,7 @@
#include <machine/stdarg.h>
#include <netinet/tcp_vtw.h>
-__KERNEL_RCSID(0, "$NetBSD: tcp_vtw.c,v 1.2 2011/05/06 12:52:43 drochner Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tcp_vtw.c,v 1.3 2011/05/11 15:08:59 drochner Exp $");
#define db_trace(__a, __b) do { } while (/*CONSTCOND*/0)
@@ -1430,7 +1430,7 @@
/* mark expiration
*/
- microtime(&vtw->expire);
+ getmicrouptime(&vtw->expire);
/* Move expiration into the future.
*/
@@ -1516,7 +1516,7 @@
struct timeval now;
int i, cnt = 0;
- microtime(&now);
+ getmicrouptime(&now);
db_trace(KTR_VTW, (arg, "vtk: tick - now %8.8x:%8.8x"
, now.tv_sec, now.tv_usec));
Index: src/usr.bin/netstat/inet.c
diff -u src/usr.bin/netstat/inet.c:1.97 src/usr.bin/netstat/inet.c:1.98
--- src/usr.bin/netstat/inet.c:1.97 Tue May 3 23:36:26 2011
+++ src/usr.bin/netstat/inet.c Wed May 11 15:08:59 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: inet.c,v 1.97 2011/05/03 23:36:26 dyoung Exp $ */
+/* $NetBSD: inet.c,v 1.98 2011/05/11 15:08:59 drochner 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.97 2011/05/03 23:36:26 dyoung Exp $");
+__RCSID("$NetBSD: inet.c,v 1.98 2011/05/11 15:08:59 drochner Exp $");
#endif
#endif /* not lint */
@@ -343,7 +343,10 @@
}
end:
if (istcp) {
+ struct timeval t;
+ timebase(&t);
gettimeofday(&now, NULL);
+ timersub(&now, &t, &now);
show_vtw_v4(print_vtw_v4);
}
}
Index: src/usr.bin/netstat/inet6.c
diff -u src/usr.bin/netstat/inet6.c:1.56 src/usr.bin/netstat/inet6.c:1.57
--- src/usr.bin/netstat/inet6.c:1.56 Wed May 4 00:55:19 2011
+++ src/usr.bin/netstat/inet6.c Wed May 11 15:08:59 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: inet6.c,v 1.56 2011/05/04 00:55:19 dyoung Exp $ */
+/* $NetBSD: inet6.c,v 1.57 2011/05/11 15:08:59 drochner Exp $ */
/* BSDI inet.c,v 2.3 1995/10/24 02:19:29 prb Exp */
/*
@@ -64,7 +64,7 @@
#if 0
static char sccsid[] = "@(#)inet.c 8.4 (Berkeley) 4/20/94";
#else
-__RCSID("$NetBSD: inet6.c,v 1.56 2011/05/04 00:55:19 dyoung Exp $");
+__RCSID("$NetBSD: inet6.c,v 1.57 2011/05/11 15:08:59 drochner Exp $");
#endif
#endif /* not lint */
@@ -397,7 +397,10 @@
}
end:
if (istcp) {
+ struct timeval t;
+ timebase(&t);
gettimeofday(&now, NULL);
+ timersub(&now, &t, &now);
show_vtw_v6(print_vtw_v6);
}
}
Index: src/usr.bin/netstat/vtw.c
diff -u src/usr.bin/netstat/vtw.c:1.5 src/usr.bin/netstat/vtw.c:1.6
--- src/usr.bin/netstat/vtw.c:1.5 Tue May 10 04:40:16 2011
+++ src/usr.bin/netstat/vtw.c Wed May 11 15:08:59 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: vtw.c,v 1.5 2011/05/10 04:40:16 enami Exp $ */
+/* $NetBSD: vtw.c,v 1.6 2011/05/11 15:08:59 drochner Exp $ */
/*
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -62,7 +62,7 @@
#if 0
static char sccsid[] = "from: @(#)inet.c 8.4 (Berkeley) 4/20/94";
#else
-__RCSID("$NetBSD: vtw.c,v 1.5 2011/05/10 04:40:16 enami Exp $");
+__RCSID("$NetBSD: vtw.c,v 1.6 2011/05/11 15:08:59 drochner Exp $");
#endif
#endif /* not lint */
@@ -167,6 +167,19 @@
return NULL;
}
+void
+timebase(struct timeval *tv)
+{
+ void *p;
+ struct bintime timebasebin;
+
+ p = lookup("timebasebin");
+ if (!p)
+ return;
+ snarf(p, &timebasebin, sizeof(timebasebin));
+ bintime2timeval(&timebasebin, tv);
+}
+
static void
process_vtw(const vtw_ctl_t * ctl, void (*print)(const vtw_t *))
{
Index: src/usr.bin/netstat/vtw.h
diff -u src/usr.bin/netstat/vtw.h:1.1 src/usr.bin/netstat/vtw.h:1.2
--- src/usr.bin/netstat/vtw.h:1.1 Tue May 3 18:28:46 2011
+++ src/usr.bin/netstat/vtw.h Wed May 11 15:08:59 2011
@@ -4,5 +4,6 @@
void show_vtw_stats(void);
void show_vtw_v4(void (*)(const vtw_t *));
void show_vtw_v6(void (*)(const vtw_t *));
+void timebase(struct timeval *);
#endif /* _NETSTAT_VTW_H */