Module Name: src Committed By: dyoung Date: Mon Jun 6 19:15:43 UTC 2011
Modified Files: src/sys/netinet: tcp_usrreq.c tcp_vtw.c tcp_vtw.h Log Message: Don't allocate resources for vtw until/unless it is enabled. This will further help those machines where memory is in short supply. TBD: release resources after vtw is disabled and all entries have expired. To generate a diff of this commit: cvs rdiff -u -r1.159 -r1.160 src/sys/netinet/tcp_usrreq.c cvs rdiff -u -r1.6 -r1.7 src/sys/netinet/tcp_vtw.c cvs rdiff -u -r1.3 -r1.4 src/sys/netinet/tcp_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_usrreq.c diff -u src/sys/netinet/tcp_usrreq.c:1.159 src/sys/netinet/tcp_usrreq.c:1.160 --- src/sys/netinet/tcp_usrreq.c:1.159 Tue May 3 18:28:45 2011 +++ src/sys/netinet/tcp_usrreq.c Mon Jun 6 19:15:43 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: tcp_usrreq.c,v 1.159 2011/05/03 18:28:45 dyoung Exp $ */ +/* $NetBSD: tcp_usrreq.c,v 1.160 2011/06/06 19:15:43 dyoung Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -95,7 +95,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: tcp_usrreq.c,v 1.159 2011/05/03 18:28:45 dyoung Exp $"); +__KERNEL_RCSID(0, "$NetBSD: tcp_usrreq.c,v 1.160 2011/06/06 19:15:43 dyoung Exp $"); #include "opt_inet.h" #include "opt_ipsec.h" @@ -2093,7 +2093,7 @@ CTLFLAG_PERMANENT|CTLFLAG_READWRITE, CTLTYPE_INT, "enable", SYSCTL_DESCR("Enable Vestigial TIME_WAIT"), - NULL, 0, + sysctl_tcp_vtw_enable, 0, (pf == AF_INET) ? &tcp4_vtw_enable : &tcp6_vtw_enable, 0, CTL_CREATE, CTL_EOL); sysctl_createv(clog, 0, &vtw_node, NULL, Index: src/sys/netinet/tcp_vtw.c diff -u src/sys/netinet/tcp_vtw.c:1.6 src/sys/netinet/tcp_vtw.c:1.7 --- src/sys/netinet/tcp_vtw.c:1.6 Fri Jun 3 20:01:00 2011 +++ src/sys/netinet/tcp_vtw.c Mon Jun 6 19:15:43 2011 @@ -77,7 +77,7 @@ #include <machine/stdarg.h> #include <netinet/tcp_vtw.h> -__KERNEL_RCSID(0, "$NetBSD: tcp_vtw.c,v 1.6 2011/06/03 20:01:00 dyoung Exp $"); +__KERNEL_RCSID(0, "$NetBSD: tcp_vtw.c,v 1.7 2011/06/06 19:15:43 dyoung Exp $"); #define db_trace(__a, __b) do { } while (/*CONSTCOND*/0) @@ -2138,6 +2138,36 @@ } int +sysctl_tcp_vtw_enable(SYSCTLFN_ARGS) +{ + int en, rc; + struct sysctlnode node; + + node = *rnode; + en = *(int *)rnode->sysctl_data; + node.sysctl_data = &en; + + rc = sysctl_lookup(SYSCTLFN_CALL(&node)); + if (rc != 0 || newp == NULL) + return rc; + + if (rnode->sysctl_data != &tcp4_vtw_enable && + rnode->sysctl_data != &tcp6_vtw_enable) + rc = ENOENT; + else if ((en & 1) == 0) + rc = 0; + else if (rnode->sysctl_data == &tcp4_vtw_enable) + rc = vtw_control_init(AF_INET); + else /* rnode->sysctl_data == &tcp6_vtw_enable */ + rc = vtw_control_init(AF_INET6); + + if (rc == 0) + *(int *)rnode->sysctl_data = en; + + return rc; +} + +int vtw_earlyinit(void) { int i, rc; @@ -2150,7 +2180,11 @@ vtw_tcpv6[i].is_v6 = 1; } - if ((rc = vtw_control_init(AF_INET)) != 0 || + if ((tcp4_vtw_enable & 1) != 0 && + (rc = vtw_control_init(AF_INET)) != 0) + return rc; + + if ((tcp6_vtw_enable & 1) != 0 && (rc = vtw_control_init(AF_INET6)) != 0) return rc; Index: src/sys/netinet/tcp_vtw.h diff -u src/sys/netinet/tcp_vtw.h:1.3 src/sys/netinet/tcp_vtw.h:1.4 --- src/sys/netinet/tcp_vtw.h:1.3 Tue May 17 05:42:40 2011 +++ src/sys/netinet/tcp_vtw.h Mon Jun 6 19:15:43 2011 @@ -389,6 +389,7 @@ void vtw_restart(vestigial_inpcb_t*); int vtw_earlyinit(void); +int sysctl_tcp_vtw_enable(SYSCTLFN_PROTO); #ifdef VTW_DEBUG typedef struct sin_either {