diff options
author | kmacy <kmacy@FreeBSD.org> | 2009-04-19 00:16:04 +0000 |
---|---|---|
committer | kmacy <kmacy@FreeBSD.org> | 2009-04-19 00:16:04 +0000 |
commit | 1aef8359b16173faa1d44e30e6568a2b969c108c (patch) | |
tree | a8dd99d5429950a3e406416fb5ea917ae6a0392d /sys/net/flowtable.h | |
parent | 60cacdeeef7ebfc3649c86d476c228917ae3bf99 (diff) | |
download | FreeBSD-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.h | 77 |
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 |