- 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.
This commit is contained in:
parent
c42ddf78f3
commit
34b07340ff
sys
@ -20,3 +20,5 @@ options GEOM_PART_BSD
|
||||
options GEOM_PART_EBR
|
||||
options GEOM_PART_EBR_COMPAT
|
||||
options GEOM_PART_MBR
|
||||
|
||||
options FLOWTABLE
|
||||
|
@ -553,6 +553,9 @@ options LIBMCHAIN
|
||||
# libalias library, performing NAT
|
||||
options LIBALIAS
|
||||
|
||||
# flowtable cache
|
||||
options FLOWTABLE
|
||||
|
||||
#
|
||||
# SCTP is a NEW transport protocol defined by
|
||||
# RFC2960 updated by RFC3309 and RFC3758.. and
|
||||
|
@ -2145,6 +2145,7 @@ net/bpf_jitter.c optional bpf_jitter
|
||||
net/bpf_filter.c optional bpf | netgraph_bpf
|
||||
net/bpf_zerocopy.c optional bpf
|
||||
net/bridgestp.c optional bridge | if_bridge
|
||||
net/flowtable.c optional flowtable
|
||||
net/ieee8023ad_lacp.c optional lagg
|
||||
net/if.c standard
|
||||
net/if_arcsubr.c optional arcnet
|
||||
|
@ -417,6 +417,7 @@ TCP_OFFLOAD_DISABLE opt_inet.h #Disable code to dispatch tcp offloading
|
||||
TCP_SIGNATURE opt_inet.h
|
||||
VLAN_ARRAY opt_vlan.h
|
||||
XBONEHACK
|
||||
FLOWTABLE opt_route.h
|
||||
|
||||
#
|
||||
# SCTP
|
||||
|
@ -28,3 +28,5 @@ options GEOM_PART_MBR
|
||||
# enable support for native hardware
|
||||
options NATIVE
|
||||
device atpic
|
||||
|
||||
options FLOWTABLE
|
||||
|
1105
sys/net/flowtable.c
Normal file
1105
sys/net/flowtable.c
Normal file
File diff suppressed because it is too large
Load Diff
77
sys/net/flowtable.h
Normal file
77
sys/net/flowtable.h
Normal file
@ -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
|
Loading…
x
Reference in New Issue
Block a user