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 */

Reply via email to