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
9extern struct list_head nf_conntrack_expect_list;
10extern struct kmem_cache *nf_conntrack_expect_cachep;
11extern const struct file_operations exp_file_ops;
12
13struct nf_conntrack_expect
14{
15	/* Internal linked list (global expectation list) */
16	struct list_head list;
17
18	/* We expect this tuple, with the following mask */
19	struct nf_conntrack_tuple tuple, mask;
20
21	/* Function to call after setup and insertion */
22	void (*expectfn)(struct nf_conn *new,
23			 struct nf_conntrack_expect *this);
24
25	/* Helper to assign to new connection */
26	struct nf_conntrack_helper *helper;
27
28	/* The conntrack of the master connection */
29	struct nf_conn *master;
30
31	/* Timer function; deletes the expectation. */
32	struct timer_list timeout;
33
34	/* Usage count. */
35	atomic_t use;
36
37	/* Unique ID */
38	unsigned int id;
39
40	/* Flags */
41	unsigned int flags;
42
43#ifdef CONFIG_NF_NAT_NEEDED
44	__be32 saved_ip;
45	/* This is the original per-proto part, used to map the
46	 * expected connection the way the recipient expects. */
47	union nf_conntrack_man_proto saved_proto;
48	/* Direction relative to the master connection. */
49	enum ip_conntrack_dir dir;
50#endif
51};
52
53#define NF_CT_EXPECT_PERMANENT 0x1
54
55
56struct nf_conntrack_expect *
57__nf_conntrack_expect_find(const struct nf_conntrack_tuple *tuple);
58
59struct nf_conntrack_expect *
60nf_conntrack_expect_find_get(const struct nf_conntrack_tuple *tuple);
61
62struct nf_conntrack_expect *
63find_expectation(const struct nf_conntrack_tuple *tuple);
64
65void nf_ct_unlink_expect(struct nf_conntrack_expect *exp);
66void nf_ct_remove_expectations(struct nf_conn *ct);
67void nf_conntrack_unexpect_related(struct nf_conntrack_expect *exp);
68
69/* Allocate space for an expectation: this is mandatory before calling
70   nf_conntrack_expect_related.  You will have to call put afterwards. */
71struct nf_conntrack_expect *nf_conntrack_expect_alloc(struct nf_conn *me);
72void nf_conntrack_expect_init(struct nf_conntrack_expect *, int,
73			      union nf_conntrack_address *,
74			      union nf_conntrack_address *,
75			      u_int8_t, __be16 *, __be16 *);
76void nf_conntrack_expect_put(struct nf_conntrack_expect *exp);
77int nf_conntrack_expect_related(struct nf_conntrack_expect *expect);
78
79#endif /*_NF_CONNTRACK_EXPECT_H*/
80