[Bluetooth] Fix compat ioctl for BNEP, CMTP and HIDP
[pandora-kernel.git] / include / net / flow.h
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                         __u32                   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                         __u8    objnum;
72                         __u8    objnamel; /* Not 16 bits since max val is 16 */
73                         __u8    objname[16]; /* Not zero terminated */
74                 } dnports;
75
76                 __be32          spi;
77
78 #ifdef CONFIG_IPV6_MIP6
79                 struct {
80                         __u8    type;
81                 } mht;
82 #endif
83         } uli_u;
84 #define fl_ip_sport     uli_u.ports.sport
85 #define fl_ip_dport     uli_u.ports.dport
86 #define fl_icmp_type    uli_u.icmpt.type
87 #define fl_icmp_code    uli_u.icmpt.code
88 #define fl_ipsec_spi    uli_u.spi
89 #ifdef CONFIG_IPV6_MIP6
90 #define fl_mh_type      uli_u.mht.type
91 #endif
92         __u32           secid;  /* used by xfrm; see secid.txt */
93 } __attribute__((__aligned__(BITS_PER_LONG/8)));
94
95 #define FLOW_DIR_IN     0
96 #define FLOW_DIR_OUT    1
97 #define FLOW_DIR_FWD    2
98
99 struct sock;
100 typedef int (*flow_resolve_t)(struct flowi *key, u16 family, u8 dir,
101                                void **objp, atomic_t **obj_refp);
102
103 extern void *flow_cache_lookup(struct flowi *key, u16 family, u8 dir,
104                                flow_resolve_t resolver);
105 extern void flow_cache_flush(void);
106 extern atomic_t flow_cache_genid;
107
108 #endif