summaryrefslogtreecommitdiff
path: root/sys/netinet/ip_input.c
diff options
context:
space:
mode:
authorliamjfoy <liamjfoy@NetBSD.org>2007-03-25 20:12:20 +0000
committerliamjfoy <liamjfoy@NetBSD.org>2007-03-25 20:12:20 +0000
commitb8ef59d7201f80296b46ea45ee3847e1fc2092eb (patch)
treefc5ec2363a4d564d07505bbff1bd1ade94051856 /sys/netinet/ip_input.c
parentcbd0d608fc5194b427224cf6eccaa064bf951f26 (diff)
Add net.inet.ip.hashsize to control the IPv4 fast forward hash table size.
Diffstat (limited to 'sys/netinet/ip_input.c')
-rw-r--r--sys/netinet/ip_input.c42
1 files changed, 39 insertions, 3 deletions
diff --git a/sys/netinet/ip_input.c b/sys/netinet/ip_input.c
index b01029f06da..a26d8ade4eb 100644
--- a/sys/netinet/ip_input.c
+++ b/sys/netinet/ip_input.c
@@ -1,4 +1,4 @@
-/* $NetBSD: ip_input.c,v 1.247 2007/03/24 00:27:58 liamjfoy Exp $ */
+/* $NetBSD: ip_input.c,v 1.248 2007/03/25 20:12:20 liamjfoy Exp $ */
/*
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -98,7 +98,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ip_input.c,v 1.247 2007/03/24 00:27:58 liamjfoy Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ip_input.c,v 1.248 2007/03/25 20:12:20 liamjfoy Exp $");
#include "opt_inet.h"
#include "opt_gateway.h"
@@ -429,7 +429,7 @@ ip_init(void)
M_WAITOK, &in_multihash);
ip_mtudisc_timeout_q = rt_timer_queue_create(ip_mtudisc_timeout);
#ifdef GATEWAY
- ipflow_init();
+ ipflow_init(ip_hashsize);
#endif
#ifdef PFIL_HOOKS
@@ -2177,6 +2177,35 @@ sysctl_net_inet_ip_maxflows(SYSCTLFN_ARGS)
return (0);
}
+
+static int
+sysctl_net_inet_ip_hashsize(SYSCTLFN_ARGS)
+{
+ int error, tmp;
+ struct sysctlnode node;
+
+ node = *rnode;
+ tmp = ip_hashsize;
+ node.sysctl_data = &tmp;
+ error = sysctl_lookup(SYSCTLFN_CALL(&node));
+ if (error || newp == NULL)
+ return (error);
+
+ if ((tmp & (tmp - 1)) == 0 && tmp != 0) {
+ /*
+ * Can only fail due to malloc()
+ */
+ if (ipflow_invalidate_all(tmp))
+ return ENOMEM;
+ } else {
+ /*
+ * EINVAL if not a power of 2
+ */
+ return EINVAL;
+ }
+
+ return (0);
+}
#endif /* GATEWAY */
@@ -2298,6 +2327,13 @@ SYSCTL_SETUP(sysctl_net_inet_ip_setup, "sysctl net.inet.ip subtree setup")
sysctl_net_inet_ip_maxflows, 0, &ip_maxflows, 0,
CTL_NET, PF_INET, IPPROTO_IP,
IPCTL_MAXFLOWS, CTL_EOL);
+ sysctl_createv(clog, 0, NULL, NULL,
+ CTLFLAG_PERMANENT|CTLFLAG_READWRITE,
+ CTLTYPE_INT, "hashsize",
+ SYSCTL_DESCR("Size of hash table for fast forwarding (IPv4)"),
+ sysctl_net_inet_ip_hashsize, 0, &ip_hashsize, 0,
+ CTL_NET, PF_INET, IPPROTO_IP,
+ CTL_CREATE, CTL_EOL);
#endif /* GATEWAY */
sysctl_createv(clog, 0, NULL, NULL,
CTLFLAG_PERMANENT|CTLFLAG_READWRITE,