]>
Commit | Line | Data |
---|---|---|
77ab9cff MJ |
1 | /* |
2 | * connection tracking expectations. | |
3 | */ | |
4 | ||
5 | #ifndef _NF_CONNTRACK_EXPECT_H | |
6 | #define _NF_CONNTRACK_EXPECT_H | |
7 | #include <net/netfilter/nf_conntrack.h> | |
8 | ||
a71c0855 PM |
9 | extern struct hlist_head *nf_ct_expect_hash; |
10 | extern unsigned int nf_ct_expect_hsize; | |
f264a7df | 11 | extern unsigned int nf_ct_expect_max; |
77ab9cff MJ |
12 | |
13 | struct nf_conntrack_expect | |
14 | { | |
b560580a PM |
15 | /* Conntrack expectation list member */ |
16 | struct hlist_node lnode; | |
77ab9cff | 17 | |
a71c0855 PM |
18 | /* Hash member */ |
19 | struct hlist_node hnode; | |
20 | ||
77ab9cff | 21 | /* We expect this tuple, with the following mask */ |
d4156e8c PM |
22 | struct nf_conntrack_tuple tuple; |
23 | struct nf_conntrack_tuple_mask mask; | |
77ab9cff MJ |
24 | |
25 | /* Function to call after setup and insertion */ | |
26 | void (*expectfn)(struct nf_conn *new, | |
27 | struct nf_conntrack_expect *this); | |
28 | ||
9457d851 PM |
29 | /* Helper to assign to new connection */ |
30 | struct nf_conntrack_helper *helper; | |
31 | ||
77ab9cff MJ |
32 | /* The conntrack of the master connection */ |
33 | struct nf_conn *master; | |
34 | ||
35 | /* Timer function; deletes the expectation. */ | |
36 | struct timer_list timeout; | |
37 | ||
38 | /* Usage count. */ | |
39 | atomic_t use; | |
40 | ||
77ab9cff MJ |
41 | /* Flags */ |
42 | unsigned int flags; | |
43 | ||
6002f266 PM |
44 | /* Expectation class */ |
45 | unsigned int class; | |
46 | ||
77ab9cff | 47 | #ifdef CONFIG_NF_NAT_NEEDED |
f587de0e | 48 | __be32 saved_ip; |
77ab9cff MJ |
49 | /* This is the original per-proto part, used to map the |
50 | * expected connection the way the recipient expects. */ | |
5b1158e9 | 51 | union nf_conntrack_man_proto saved_proto; |
77ab9cff MJ |
52 | /* Direction relative to the master connection. */ |
53 | enum ip_conntrack_dir dir; | |
54 | #endif | |
7d0742da PM |
55 | |
56 | struct rcu_head rcu; | |
77ab9cff MJ |
57 | }; |
58 | ||
6002f266 PM |
59 | struct nf_conntrack_expect_policy |
60 | { | |
61 | unsigned int max_expected; | |
62 | unsigned int timeout; | |
63 | }; | |
64 | ||
65 | #define NF_CT_EXPECT_CLASS_DEFAULT 0 | |
66 | ||
359b9ab6 PM |
67 | #define NF_CT_EXPECT_PERMANENT 0x1 |
68 | #define NF_CT_EXPECT_INACTIVE 0x2 | |
77ab9cff | 69 | |
e9c1b084 PM |
70 | int nf_conntrack_expect_init(void); |
71 | void nf_conntrack_expect_fini(void); | |
77ab9cff MJ |
72 | |
73 | struct nf_conntrack_expect * | |
6823645d | 74 | __nf_ct_expect_find(const struct nf_conntrack_tuple *tuple); |
77ab9cff MJ |
75 | |
76 | struct nf_conntrack_expect * | |
6823645d | 77 | nf_ct_expect_find_get(const struct nf_conntrack_tuple *tuple); |
77ab9cff MJ |
78 | |
79 | struct nf_conntrack_expect * | |
6823645d | 80 | nf_ct_find_expectation(const struct nf_conntrack_tuple *tuple); |
77ab9cff MJ |
81 | |
82 | void nf_ct_unlink_expect(struct nf_conntrack_expect *exp); | |
83 | void nf_ct_remove_expectations(struct nf_conn *ct); | |
6823645d | 84 | void nf_ct_unexpect_related(struct nf_conntrack_expect *exp); |
77ab9cff MJ |
85 | |
86 | /* Allocate space for an expectation: this is mandatory before calling | |
6823645d PM |
87 | nf_ct_expect_related. You will have to call put afterwards. */ |
88 | struct nf_conntrack_expect *nf_ct_expect_alloc(struct nf_conn *me); | |
76108cea | 89 | void nf_ct_expect_init(struct nf_conntrack_expect *, unsigned int, u_int8_t, |
1d9d7522 PM |
90 | const union nf_inet_addr *, |
91 | const union nf_inet_addr *, | |
92 | u_int8_t, const __be16 *, const __be16 *); | |
6823645d PM |
93 | void nf_ct_expect_put(struct nf_conntrack_expect *exp); |
94 | int nf_ct_expect_related(struct nf_conntrack_expect *expect); | |
77ab9cff MJ |
95 | |
96 | #endif /*_NF_CONNTRACK_EXPECT_H*/ | |
97 |