root/include/net/netfilter/nf_flow_table.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. flow_offload_dead

   1 #ifndef _NF_FLOW_TABLE_H
   2 #define _NF_FLOW_TABLE_H
   3 
   4 #include <linux/in.h>
   5 #include <linux/in6.h>
   6 #include <linux/netdevice.h>
   7 #include <linux/rhashtable-types.h>
   8 #include <linux/rcupdate.h>
   9 #include <linux/netfilter.h>
  10 #include <linux/netfilter/nf_conntrack_tuple_common.h>
  11 #include <net/dst.h>
  12 
  13 struct nf_flowtable;
  14 
  15 struct nf_flowtable_type {
  16         struct list_head                list;
  17         int                             family;
  18         int                             (*init)(struct nf_flowtable *ft);
  19         void                            (*free)(struct nf_flowtable *ft);
  20         nf_hookfn                       *hook;
  21         struct module                   *owner;
  22 };
  23 
  24 struct nf_flowtable {
  25         struct list_head                list;
  26         struct rhashtable               rhashtable;
  27         const struct nf_flowtable_type  *type;
  28         struct delayed_work             gc_work;
  29 };
  30 
  31 enum flow_offload_tuple_dir {
  32         FLOW_OFFLOAD_DIR_ORIGINAL = IP_CT_DIR_ORIGINAL,
  33         FLOW_OFFLOAD_DIR_REPLY = IP_CT_DIR_REPLY,
  34         FLOW_OFFLOAD_DIR_MAX = IP_CT_DIR_MAX
  35 };
  36 
  37 struct flow_offload_tuple {
  38         union {
  39                 struct in_addr          src_v4;
  40                 struct in6_addr         src_v6;
  41         };
  42         union {
  43                 struct in_addr          dst_v4;
  44                 struct in6_addr         dst_v6;
  45         };
  46         struct {
  47                 __be16                  src_port;
  48                 __be16                  dst_port;
  49         };
  50 
  51         int                             iifidx;
  52 
  53         u8                              l3proto;
  54         u8                              l4proto;
  55         u8                              dir;
  56 
  57         u16                             mtu;
  58 
  59         struct dst_entry                *dst_cache;
  60 };
  61 
  62 struct flow_offload_tuple_rhash {
  63         struct rhash_head               node;
  64         struct flow_offload_tuple       tuple;
  65 };
  66 
  67 #define FLOW_OFFLOAD_SNAT       0x1
  68 #define FLOW_OFFLOAD_DNAT       0x2
  69 #define FLOW_OFFLOAD_DYING      0x4
  70 #define FLOW_OFFLOAD_TEARDOWN   0x8
  71 
  72 struct flow_offload {
  73         struct flow_offload_tuple_rhash         tuplehash[FLOW_OFFLOAD_DIR_MAX];
  74         u32                                     flags;
  75         union {
  76                 /* Your private driver data here. */
  77                 u32             timeout;
  78         };
  79 };
  80 
  81 #define NF_FLOW_TIMEOUT (30 * HZ)
  82 
  83 struct nf_flow_route {
  84         struct {
  85                 struct dst_entry        *dst;
  86         } tuple[FLOW_OFFLOAD_DIR_MAX];
  87 };
  88 
  89 struct flow_offload *flow_offload_alloc(struct nf_conn *ct,
  90                                         struct nf_flow_route *route);
  91 void flow_offload_free(struct flow_offload *flow);
  92 
  93 int flow_offload_add(struct nf_flowtable *flow_table, struct flow_offload *flow);
  94 struct flow_offload_tuple_rhash *flow_offload_lookup(struct nf_flowtable *flow_table,
  95                                                      struct flow_offload_tuple *tuple);
  96 void nf_flow_table_cleanup(struct net_device *dev);
  97 
  98 int nf_flow_table_init(struct nf_flowtable *flow_table);
  99 void nf_flow_table_free(struct nf_flowtable *flow_table);
 100 
 101 void flow_offload_teardown(struct flow_offload *flow);
 102 static inline void flow_offload_dead(struct flow_offload *flow)
 103 {
 104         flow->flags |= FLOW_OFFLOAD_DYING;
 105 }
 106 
 107 int nf_flow_snat_port(const struct flow_offload *flow,
 108                       struct sk_buff *skb, unsigned int thoff,
 109                       u8 protocol, enum flow_offload_tuple_dir dir);
 110 int nf_flow_dnat_port(const struct flow_offload *flow,
 111                       struct sk_buff *skb, unsigned int thoff,
 112                       u8 protocol, enum flow_offload_tuple_dir dir);
 113 
 114 struct flow_ports {
 115         __be16 source, dest;
 116 };
 117 
 118 unsigned int nf_flow_offload_ip_hook(void *priv, struct sk_buff *skb,
 119                                      const struct nf_hook_state *state);
 120 unsigned int nf_flow_offload_ipv6_hook(void *priv, struct sk_buff *skb,
 121                                        const struct nf_hook_state *state);
 122 
 123 #define MODULE_ALIAS_NF_FLOWTABLE(family)       \
 124         MODULE_ALIAS("nf-flowtable-" __stringify(family))
 125 
 126 #endif /* _NF_FLOW_TABLE_H */

/* [<][>][^][v][top][bottom][index][help] */