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
netfilter
nf_conntrack_extend.h
Go to the documentation of this file.
1
#ifndef _NF_CONNTRACK_EXTEND_H
2
#define _NF_CONNTRACK_EXTEND_H
3
4
#include <linux/slab.h>
5
6
#include <
net/netfilter/nf_conntrack.h
>
7
8
enum
nf_ct_ext_id
{
9
NF_CT_EXT_HELPER
,
10
#if defined(CONFIG_NF_NAT) || defined(CONFIG_NF_NAT_MODULE)
11
NF_CT_EXT_NAT,
12
#endif
13
NF_CT_EXT_ACCT
,
14
#ifdef CONFIG_NF_CONNTRACK_EVENTS
15
NF_CT_EXT_ECACHE,
16
#endif
17
#ifdef CONFIG_NF_CONNTRACK_ZONES
18
NF_CT_EXT_ZONE,
19
#endif
20
#ifdef CONFIG_NF_CONNTRACK_TIMESTAMP
21
NF_CT_EXT_TSTAMP,
22
#endif
23
#ifdef CONFIG_NF_CONNTRACK_TIMEOUT
24
NF_CT_EXT_TIMEOUT,
25
#endif
26
NF_CT_EXT_NUM
,
27
};
28
29
#define NF_CT_EXT_HELPER_TYPE struct nf_conn_help
30
#define NF_CT_EXT_NAT_TYPE struct nf_conn_nat
31
#define NF_CT_EXT_ACCT_TYPE struct nf_conn_counter
32
#define NF_CT_EXT_ECACHE_TYPE struct nf_conntrack_ecache
33
#define NF_CT_EXT_ZONE_TYPE struct nf_conntrack_zone
34
#define NF_CT_EXT_TSTAMP_TYPE struct nf_conn_tstamp
35
#define NF_CT_EXT_TIMEOUT_TYPE struct nf_conn_timeout
36
37
/* Extensions: optional stuff which isn't permanently in struct. */
38
struct
nf_ct_ext
{
39
struct
rcu_head
rcu
;
40
u8
offset
[
NF_CT_EXT_NUM
];
41
u8
len
;
42
char
data
[0];
43
};
44
45
static
inline
bool
__nf_ct_ext_exist(
const
struct
nf_ct_ext
*
ext
,
u8
id
)
46
{
47
return
!!ext->
offset
[
id
];
48
}
49
50
static
inline
bool
nf_ct_ext_exist(
const
struct
nf_conn
*
ct
,
u8
id
)
51
{
52
return
(ct->
ext
&& __nf_ct_ext_exist(ct->
ext
,
id
));
53
}
54
55
static
inline
void
*__nf_ct_ext_find(
const
struct
nf_conn
*ct,
u8
id
)
56
{
57
if
(!nf_ct_ext_exist(ct,
id
))
58
return
NULL
;
59
60
return
(
void
*)ct->
ext
+ ct->
ext
->offset[
id
];
61
}
62
#define nf_ct_ext_find(ext, id) \
63
((id##_TYPE *)__nf_ct_ext_find((ext), (id)))
64
65
/* Destroy all relationships */
66
extern
void
__nf_ct_ext_destroy
(
struct
nf_conn
*ct);
67
static
inline
void
nf_ct_ext_destroy(
struct
nf_conn
*ct)
68
{
69
if
(ct->
ext
)
70
__nf_ct_ext_destroy
(ct);
71
}
72
73
/* Free operation. If you want to free a object referred from private area,
74
* please implement __nf_ct_ext_free() and call it.
75
*/
76
static
inline
void
nf_ct_ext_free(
struct
nf_conn
*ct)
77
{
78
if
(ct->
ext
)
79
kfree
(ct->
ext
);
80
}
81
82
/* Add this type, returns pointer to data or NULL. */
83
void
*
__nf_ct_ext_add_length
(
struct
nf_conn
*ct,
enum
nf_ct_ext_id
id
,
84
size_t
var_alloc_len,
gfp_t
gfp);
85
86
#define nf_ct_ext_add(ct, id, gfp) \
87
((id##_TYPE *)__nf_ct_ext_add_length((ct), (id), 0, (gfp)))
88
#define nf_ct_ext_add_length(ct, id, len, gfp) \
89
((id##_TYPE *)__nf_ct_ext_add_length((ct), (id), (len), (gfp)))
90
91
#define NF_CT_EXT_F_PREALLOC 0x0001
92
93
struct
nf_ct_ext_type
{
94
/* Destroys relationships (can be NULL). */
95
void
(*
destroy
)(
struct
nf_conn
*
ct
);
96
/* Called when realloacted (can be NULL).
97
Contents has already been moved. */
98
void
(*
move
)(
void
*
new
,
void
*old);
99
100
enum
nf_ct_ext_id
id
;
101
102
unsigned
int
flags
;
103
104
/* Length and min alignment. */
105
u8
len
;
106
u8
align
;
107
/* initial size of nf_ct_ext. */
108
u8
alloc_size
;
109
};
110
111
int
nf_ct_extend_register
(
struct
nf_ct_ext_type
*
type
);
112
void
nf_ct_extend_unregister
(
struct
nf_ct_ext_type
*
type
);
113
#endif
/* _NF_CONNTRACK_EXTEND_H */
Generated on Thu Jan 10 2013 14:53:11 for Linux Kernel by
1.8.2