1/* 2 * 3 * Generic internet FLOW. 4 * 5 */ 6 7#ifndef _NET_FLOW_H 8#define _NET_FLOW_H 9 10#include <linux/in6.h> 11#include <asm/atomic.h> 12 13struct flowi { 14 int oif; 15 int iif; 16 17 union { 18 struct { 19 __u32 daddr; 20 __u32 saddr; 21 __u32 fwmark; 22 __u8 tos; 23 __u8 scope; 24 } ip4_u; 25 26 struct { 27 struct in6_addr daddr; 28 struct in6_addr saddr; 29 __u32 flowlabel; 30 } ip6_u; 31 32 struct { 33 __u16 daddr; 34 __u16 saddr; 35 __u32 fwmark; 36 __u8 scope; 37 } dn_u; 38 } nl_u; 39#define fld_dst nl_u.dn_u.daddr 40#define fld_src nl_u.dn_u.saddr 41#define fld_fwmark nl_u.dn_u.fwmark 42#define fld_scope nl_u.dn_u.scope 43#define fl6_dst nl_u.ip6_u.daddr 44#define fl6_src nl_u.ip6_u.saddr 45#define fl6_flowlabel nl_u.ip6_u.flowlabel 46#define fl4_dst nl_u.ip4_u.daddr 47#define fl4_src nl_u.ip4_u.saddr 48#define fl4_fwmark nl_u.ip4_u.fwmark 49#define fl4_tos nl_u.ip4_u.tos 50#define fl4_scope nl_u.ip4_u.scope 51 52 __u8 proto; 53 __u8 flags; 54 union { 55 struct { 56 __u16 sport; 57 __u16 dport; 58 } ports; 59 60 struct { 61 __u8 type; 62 __u8 code; 63 } icmpt; 64 65 struct { 66 __u16 sport; 67 __u16 dport; 68 __u8 objnum; 69 __u8 objnamel; /* Not 16 bits since max val is 16 */ 70 __u8 objname[16]; /* Not zero terminated */ 71 } dnports; 72 73 __u32 spi; 74 } uli_u; 75#define fl_ip_sport uli_u.ports.sport 76#define fl_ip_dport uli_u.ports.dport 77#define fl_icmp_type uli_u.icmpt.type 78#define fl_icmp_code uli_u.icmpt.code 79#define fl_ipsec_spi uli_u.spi 80} __attribute__((__aligned__(BITS_PER_LONG/8))); 81 82#define FLOW_DIR_IN 0 83#define FLOW_DIR_OUT 1 84#define FLOW_DIR_FWD 2 85 86typedef void (*flow_resolve_t)(struct flowi *key, u16 family, u8 dir, 87 void **objp, atomic_t **obj_refp); 88 89extern void *flow_cache_lookup(struct flowi *key, u16 family, u8 dir, 90 flow_resolve_t resolver); 91extern void flow_cache_flush(void); 92extern atomic_t flow_cache_genid; 93 94#endif 95

