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 {

Reply via email to