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