Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
net
flow.h
Go to the documentation of this file.
1
/*
2
*
3
* Generic internet FLOW.
4
*
5
*/
6
7
#ifndef _NET_FLOW_H
8
#define _NET_FLOW_H
9
10
#include <linux/socket.h>
11
#include <linux/in6.h>
12
#include <
linux/atomic.h
>
13
14
struct
flowi_common
{
15
int
flowic_oif
;
16
int
flowic_iif
;
17
__u32
flowic_mark
;
18
__u8
flowic_tos
;
19
__u8
flowic_scope
;
20
__u8
flowic_proto
;
21
__u8
flowic_flags
;
22
#define FLOWI_FLAG_ANYSRC 0x01
23
#define FLOWI_FLAG_CAN_SLEEP 0x02
24
#define FLOWI_FLAG_KNOWN_NH 0x04
25
__u32
flowic_secid
;
26
};
27
28
union
flowi_uli
{
29
struct
{
30
__be16
dport
;
31
__be16
sport
;
32
}
ports
;
33
34
struct
{
35
__u8
type
;
36
__u8
code
;
37
}
icmpt
;
38
39
struct
{
40
__le16
dport
;
41
__le16
sport
;
42
}
dnports
;
43
44
__be32
spi
;
45
__be32
gre_key
;
46
47
struct
{
48
__u8
type
;
49
}
mht
;
50
};
51
52
struct
flowi4
{
53
struct
flowi_common
__fl_common
;
54
#define flowi4_oif __fl_common.flowic_oif
55
#define flowi4_iif __fl_common.flowic_iif
56
#define flowi4_mark __fl_common.flowic_mark
57
#define flowi4_tos __fl_common.flowic_tos
58
#define flowi4_scope __fl_common.flowic_scope
59
#define flowi4_proto __fl_common.flowic_proto
60
#define flowi4_flags __fl_common.flowic_flags
61
#define flowi4_secid __fl_common.flowic_secid
62
63
/* (saddr,daddr) must be grouped, same order as in IP header */
64
__be32
saddr
;
65
__be32
daddr
;
66
67
union
flowi_uli
uli
;
68
#define fl4_sport uli.ports.sport
69
#define fl4_dport uli.ports.dport
70
#define fl4_icmp_type uli.icmpt.type
71
#define fl4_icmp_code uli.icmpt.code
72
#define fl4_ipsec_spi uli.spi
73
#define fl4_mh_type uli.mht.type
74
#define fl4_gre_key uli.gre_key
75
}
__attribute__
((__aligned__(
BITS_PER_LONG
/8)));
76
77
static
inline
void
flowi4_init_output(
struct
flowi4
*fl4,
int
oif,
78
__u32
mark
,
__u8
tos,
__u8
scope
,
79
__u8
proto
,
__u8
flags
,
80
__be32
daddr
,
__be32
saddr
,
81
__be16
dport
,
__be16
sport
)
82
{
83
fl4->flowi4_oif = oif;
84
fl4->flowi4_iif = 0;
85
fl4->flowi4_mark =
mark
;
86
fl4->flowi4_tos = tos;
87
fl4->flowi4_scope =
scope
;
88
fl4->flowi4_proto =
proto
;
89
fl4->flowi4_flags =
flags
;
90
fl4->flowi4_secid = 0;
91
fl4->
daddr
=
daddr
;
92
fl4->
saddr
=
saddr
;
93
fl4->fl4_dport =
dport
;
94
fl4->fl4_sport =
sport
;
95
}
96
97
/* Reset some input parameters after previous lookup */
98
static
inline
void
flowi4_update_output(
struct
flowi4
*fl4,
int
oif,
__u8
tos,
99
__be32
daddr
,
__be32
saddr
)
100
{
101
fl4->flowi4_oif = oif;
102
fl4->flowi4_tos = tos;
103
fl4->
daddr
=
daddr
;
104
fl4->
saddr
=
saddr
;
105
}
106
107
108
struct
flowi6
{
109
struct
flowi_common
__fl_common
;
110
#define flowi6_oif __fl_common.flowic_oif
111
#define flowi6_iif __fl_common.flowic_iif
112
#define flowi6_mark __fl_common.flowic_mark
113
#define flowi6_tos __fl_common.flowic_tos
114
#define flowi6_scope __fl_common.flowic_scope
115
#define flowi6_proto __fl_common.flowic_proto
116
#define flowi6_flags __fl_common.flowic_flags
117
#define flowi6_secid __fl_common.flowic_secid
118
struct
in6_addr
daddr
;
119
struct
in6_addr
saddr
;
120
__be32
flowlabel
;
121
union
flowi_uli
uli
;
122
#define fl6_sport uli.ports.sport
123
#define fl6_dport uli.ports.dport
124
#define fl6_icmp_type uli.icmpt.type
125
#define fl6_icmp_code uli.icmpt.code
126
#define fl6_ipsec_spi uli.spi
127
#define fl6_mh_type uli.mht.type
128
#define fl6_gre_key uli.gre_key
129
}
__attribute__
((__aligned__(
BITS_PER_LONG
/8)));
130
131
struct
flowidn
{
132
struct
flowi_common
__fl_common
;
133
#define flowidn_oif __fl_common.flowic_oif
134
#define flowidn_iif __fl_common.flowic_iif
135
#define flowidn_mark __fl_common.flowic_mark
136
#define flowidn_scope __fl_common.flowic_scope
137
#define flowidn_proto __fl_common.flowic_proto
138
#define flowidn_flags __fl_common.flowic_flags
139
__le16
daddr
;
140
__le16
saddr
;
141
union
flowi_uli
uli
;
142
#define fld_sport uli.ports.sport
143
#define fld_dport uli.ports.dport
144
}
__attribute__
((__aligned__(
BITS_PER_LONG
/8)));
145
146
struct
flowi
{
147
union
{
148
struct
flowi_common
__fl_common
;
149
struct
flowi4
ip4
;
150
struct
flowi6
ip6
;
151
struct
flowidn
dn
;
152
}
u
;
153
#define flowi_oif u.__fl_common.flowic_oif
154
#define flowi_iif u.__fl_common.flowic_iif
155
#define flowi_mark u.__fl_common.flowic_mark
156
#define flowi_tos u.__fl_common.flowic_tos
157
#define flowi_scope u.__fl_common.flowic_scope
158
#define flowi_proto u.__fl_common.flowic_proto
159
#define flowi_flags u.__fl_common.flowic_flags
160
#define flowi_secid u.__fl_common.flowic_secid
161
}
__attribute__
((__aligned__(
BITS_PER_LONG
/8)));
162
163
static
inline
struct
flowi
*flowi4_to_flowi(
struct
flowi4
*fl4)
164
{
165
return
container_of
(fl4,
struct
flowi
,
u
.ip4);
166
}
167
168
static
inline
struct
flowi
*flowi6_to_flowi(
struct
flowi6
*fl6)
169
{
170
return
container_of
(fl6,
struct
flowi
,
u
.ip6);
171
}
172
173
static
inline
struct
flowi
*flowidn_to_flowi(
struct
flowidn
*fldn)
174
{
175
return
container_of
(fldn,
struct
flowi
,
u
.dn);
176
}
177
178
typedef
unsigned
long
flow_compare_t
;
179
180
static
inline
size_t
flow_key_size(
u16
family
)
181
{
182
switch
(family) {
183
case
AF_INET
:
184
BUILD_BUG_ON
(
sizeof
(
struct
flowi4
) %
sizeof
(flow_compare_t));
185
return
sizeof
(
struct
flowi4
) / sizeof(flow_compare_t);
186
case
AF_INET6
:
187
BUILD_BUG_ON
(
sizeof
(
struct
flowi6
) %
sizeof
(flow_compare_t));
188
return
sizeof
(
struct
flowi6
) / sizeof(flow_compare_t);
189
case
AF_DECnet
:
190
BUILD_BUG_ON
(
sizeof
(
struct
flowidn
) %
sizeof
(flow_compare_t));
191
return
sizeof
(
struct
flowidn
) / sizeof(flow_compare_t);
192
}
193
return
0;
194
}
195
196
#define FLOW_DIR_IN 0
197
#define FLOW_DIR_OUT 1
198
#define FLOW_DIR_FWD 2
199
200
struct
net
;
201
struct
sock
;
202
struct
flow_cache_ops
;
203
204
struct
flow_cache_object
{
205
const
struct
flow_cache_ops
*
ops
;
206
};
207
208
struct
flow_cache_ops
{
209
struct
flow_cache_object
*(*get)(
struct
flow_cache_object
*);
210
int
(*
check
)(
struct
flow_cache_object
*);
211
void
(*
delete
)(
struct
flow_cache_object
*);
212
};
213
214
typedef
struct
flow_cache_object
*(*flow_resolve_t)(
215
struct
net
*
net
,
const
struct
flowi
*
key
,
u16
family
,
216
u8
dir
,
struct
flow_cache_object
*oldobj,
void
*
ctx
);
217
218
extern
struct
flow_cache_object
*
flow_cache_lookup
(
219
struct
net *net,
const
struct
flowi
*key,
u16
family,
220
u8
dir,
flow_resolve_t
resolver,
void
*
ctx
);
221
222
extern
void
flow_cache_flush
(
void
);
223
extern
void
flow_cache_flush_deferred
(
void
);
224
extern
atomic_t
flow_cache_genid
;
225
226
#endif
Generated on Thu Jan 10 2013 14:53:04 for Linux Kernel by
1.8.2