- 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
|
||||||
options GEOM_PART_EBR_COMPAT
|
options GEOM_PART_EBR_COMPAT
|
||||||
options GEOM_PART_MBR
|
options GEOM_PART_MBR
|
||||||
|
|
||||||
|
options FLOWTABLE
|
||||||
|
@ -553,6 +553,9 @@ options LIBMCHAIN
|
|||||||
# libalias library, performing NAT
|
# libalias library, performing NAT
|
||||||
options LIBALIAS
|
options LIBALIAS
|
||||||
|
|
||||||
|
# flowtable cache
|
||||||
|
options FLOWTABLE
|
||||||
|
|
||||||
#
|
#
|
||||||
# SCTP is a NEW transport protocol defined by
|
# SCTP is a NEW transport protocol defined by
|
||||||
# RFC2960 updated by RFC3309 and RFC3758.. and
|
# 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_filter.c optional bpf | netgraph_bpf
|
||||||
net/bpf_zerocopy.c optional bpf
|
net/bpf_zerocopy.c optional bpf
|
||||||
net/bridgestp.c optional bridge | if_bridge
|
net/bridgestp.c optional bridge | if_bridge
|
||||||
|
net/flowtable.c optional flowtable
|
||||||
net/ieee8023ad_lacp.c optional lagg
|
net/ieee8023ad_lacp.c optional lagg
|
||||||
net/if.c standard
|
net/if.c standard
|
||||||
net/if_arcsubr.c optional arcnet
|
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
|
TCP_SIGNATURE opt_inet.h
|
||||||
VLAN_ARRAY opt_vlan.h
|
VLAN_ARRAY opt_vlan.h
|
||||||
XBONEHACK
|
XBONEHACK
|
||||||
|
FLOWTABLE opt_route.h
|
||||||
|
|
||||||
#
|
#
|
||||||
# SCTP
|
# SCTP
|
||||||
|
@ -28,3 +28,5 @@ options GEOM_PART_MBR
|
|||||||
# enable support for native hardware
|
# enable support for native hardware
|
||||||
options NATIVE
|
options NATIVE
|
||||||
device atpic
|
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