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 13 struct flowi { 14 int oif; 15 int iif; 16 17 union { 18 struct { 19 __be32 daddr; 20 __be32 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 fwmark; 30 __be32 flowlabel; 31 } ip6_u; 32 33 struct { 34 __le16 daddr; 35 __le16 saddr; 36 __u32 fwmark; 37 __u8 scope; 38 } dn_u; 39 } nl_u; 40 #define fld_dst nl_u.dn_u.daddr 41 #define fld_src nl_u.dn_u.saddr 42 #define fld_fwmark nl_u.dn_u.fwmark 43 #define fld_scope nl_u.dn_u.scope 44 #define fl6_dst nl_u.ip6_u.daddr 45 #define fl6_src nl_u.ip6_u.saddr 46 #define fl6_fwmark nl_u.ip6_u.fwmark 47 #define fl6_flowlabel nl_u.ip6_u.flowlabel 48 #define fl4_dst nl_u.ip4_u.daddr 49 #define fl4_src nl_u.ip4_u.saddr 50 #define fl4_fwmark nl_u.ip4_u.fwmark 51 #define fl4_tos nl_u.ip4_u.tos 52 #define fl4_scope nl_u.ip4_u.scope 53 54 __u8 proto; 55 __u8 flags; 56 #define FLOWI_FLAG_MULTIPATHOLDROUTE 0x01 57 union { 58 struct { 59 __be16 sport; 60 __be16 dport; 61 } ports; 62 63 struct { 64 __u8 type; 65 __u8 code; 66 } icmpt; 67 68 struct { 69 __le16 sport; 70 __le16 dport; 71 } dnports; 72 73 __be32 spi; 74 75 #ifdef CONFIG_IPV6_MIP6 76 struct { 77 __u8 type; 78 } mht; 79 #endif 80 } uli_u; 81 #define fl_ip_sport uli_u.ports.sport 82 #define fl_ip_dport uli_u.ports.dport 83 #define fl_icmp_type uli_u.icmpt.type 84 #define fl_icmp_code uli_u.icmpt.code 85 #define fl_ipsec_spi uli_u.spi 86 #ifdef CONFIG_IPV6_MIP6 87 #define fl_mh_type uli_u.mht.type 88 #endif 89 __u32 secid; /* used by xfrm; see secid.txt */ 90 } __attribute__((__aligned__(BITS_PER_LONG/8))); 91 92 #define FLOW_DIR_IN 0 93 #define FLOW_DIR_OUT 1 94 #define FLOW_DIR_FWD 2 95 96 struct sock; 97 typedef int (*flow_resolve_t)(struct flowi *key, u16 family, u8 dir, 98 void **objp, atomic_t **obj_refp); 99 100 extern void *flow_cache_lookup(struct flowi *key, u16 family, u8 dir, 101 flow_resolve_t resolver); 102 extern void flow_cache_flush(void); 103 extern atomic_t flow_cache_genid; 104 105 #endif 106