summaryrefslogtreecommitdiffstats
path: root/sys/net/flowtable.h
diff options
context:
space:
mode:
authorkmacy <kmacy@FreeBSD.org>2009-04-19 00:16:04 +0000
committerkmacy <kmacy@FreeBSD.org>2009-04-19 00:16:04 +0000
commit1aef8359b16173faa1d44e30e6568a2b969c108c (patch)
treea8dd99d5429950a3e406416fb5ea917ae6a0392d /sys/net/flowtable.h
parent60cacdeeef7ebfc3649c86d476c228917ae3bf99 (diff)
downloadFreeBSD-src-1aef8359b16173faa1d44e30e6568a2b969c108c.zip
FreeBSD-src-1aef8359b16173faa1d44e30e6568a2b969c108c.tar.gz
- Import infrastructure for caching flows as a means of accelerating L3 and L2 lookups
as well as providing stateful load balancing when used with RADIX_MPATH. - Currently compiled in to i386 and amd64 but disabled by default, it can be enabled at runtime with 'sysctl net.inet.flowtable.enable=1'. - Embedded users can remove it entirely from the kernel by adding 'nooption FLOWTABLE' to their kernel config files. - A minimal hookup will be added to ip_output in a subsequent commit. I would like to see more review before bringing in changes that require more churn. Supported by: Bitgravity Inc.
Diffstat (limited to 'sys/net/flowtable.h')
-rw-r--r--sys/net/flowtable.h77
1 files changed, 77 insertions, 0 deletions
diff --git a/sys/net/flowtable.h b/sys/net/flowtable.h
new file mode 100644
index 0000000..50f126a
--- /dev/null
+++ b/sys/net/flowtable.h
@@ -0,0 +1,77 @@
+/**************************************************************************
+
+Copyright (c) 2008-2009, BitGravity Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Neither the name of the BitGravity Corporation nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+$FreeBSD$
+
+***************************************************************************/
+
+#ifndef _NET_FLOWTABLE_H_
+#define _NET_FLOWTABLE_H_
+
+#ifdef _KERNEL
+#include "opt_route.h"
+
+#include <net/ethernet.h>
+#include <netinet/in.h>
+
+#define FL_HASH_PORTS (1<<0) /* hash 4-tuple + protocol */
+#define FL_PCPU (1<<1) /* pcpu cache */
+
+struct flowtable;
+extern struct flowtable *ip_ft;
+extern struct flowtable *ip_forward_ft;
+
+#ifdef FLOWTABLE
+struct flowtable *flowtable_alloc(int nentry, int flags);
+
+/*
+ * Given a flow table, look up the L3 and L2 information and
+ * return it in the route
+ *
+ */
+int flowtable_lookup(struct flowtable *ft, struct mbuf *m,
+ struct route *ro);
+
+#else
+static __inline struct flowtable *
+flowtable_alloc(int nentry, int flags)
+{
+
+ return (NULL);
+}
+
+static __inline int
+flowtable_lookup(struct flowtable *ft, struct mbuf *m,
+ struct route *ro)
+{
+
+ return (ENOTSUP);
+}
+#endif
+#endif
+
+#endif
OpenPOWER on IntegriCloud