177ab9cffSMartin Josefsson /*
277ab9cffSMartin Josefsson  * connection tracking expectations.
377ab9cffSMartin Josefsson  */
477ab9cffSMartin Josefsson 
577ab9cffSMartin Josefsson #ifndef _NF_CONNTRACK_EXPECT_H
677ab9cffSMartin Josefsson #define _NF_CONNTRACK_EXPECT_H
777ab9cffSMartin Josefsson #include <net/netfilter/nf_conntrack.h>
877ab9cffSMartin Josefsson 
96823645dSPatrick McHardy extern struct list_head nf_ct_expect_list;
1077ab9cffSMartin Josefsson 
1177ab9cffSMartin Josefsson struct nf_conntrack_expect
1277ab9cffSMartin Josefsson {
1377ab9cffSMartin Josefsson 	/* Internal linked list (global expectation list) */
1477ab9cffSMartin Josefsson 	struct list_head list;
1577ab9cffSMartin Josefsson 
1677ab9cffSMartin Josefsson 	/* We expect this tuple, with the following mask */
17d4156e8cSPatrick McHardy 	struct nf_conntrack_tuple tuple;
18d4156e8cSPatrick McHardy 	struct nf_conntrack_tuple_mask mask;
1977ab9cffSMartin Josefsson 
2077ab9cffSMartin Josefsson 	/* Function to call after setup and insertion */
2177ab9cffSMartin Josefsson 	void (*expectfn)(struct nf_conn *new,
2277ab9cffSMartin Josefsson 			 struct nf_conntrack_expect *this);
2377ab9cffSMartin Josefsson 
249457d851SPatrick McHardy 	/* Helper to assign to new connection */
259457d851SPatrick McHardy 	struct nf_conntrack_helper *helper;
269457d851SPatrick McHardy 
2777ab9cffSMartin Josefsson 	/* The conntrack of the master connection */
2877ab9cffSMartin Josefsson 	struct nf_conn *master;
2977ab9cffSMartin Josefsson 
3077ab9cffSMartin Josefsson 	/* Timer function; deletes the expectation. */
3177ab9cffSMartin Josefsson 	struct timer_list timeout;
3277ab9cffSMartin Josefsson 
3377ab9cffSMartin Josefsson 	/* Usage count. */
3477ab9cffSMartin Josefsson 	atomic_t use;
3577ab9cffSMartin Josefsson 
3677ab9cffSMartin Josefsson 	/* Unique ID */
3777ab9cffSMartin Josefsson 	unsigned int id;
3877ab9cffSMartin Josefsson 
3977ab9cffSMartin Josefsson 	/* Flags */
4077ab9cffSMartin Josefsson 	unsigned int flags;
4177ab9cffSMartin Josefsson 
4277ab9cffSMartin Josefsson #ifdef CONFIG_NF_NAT_NEEDED
43f587de0eSPatrick McHardy 	__be32 saved_ip;
4477ab9cffSMartin Josefsson 	/* This is the original per-proto part, used to map the
4577ab9cffSMartin Josefsson 	 * expected connection the way the recipient expects. */
465b1158e9SJozsef Kadlecsik 	union nf_conntrack_man_proto saved_proto;
4777ab9cffSMartin Josefsson 	/* Direction relative to the master connection. */
4877ab9cffSMartin Josefsson 	enum ip_conntrack_dir dir;
4977ab9cffSMartin Josefsson #endif
5077ab9cffSMartin Josefsson };
5177ab9cffSMartin Josefsson 
5277ab9cffSMartin Josefsson #define NF_CT_EXPECT_PERMANENT 0x1
5377ab9cffSMartin Josefsson 
54e9c1b084SPatrick McHardy int nf_conntrack_expect_init(void);
55e9c1b084SPatrick McHardy void nf_conntrack_expect_fini(void);
5677ab9cffSMartin Josefsson 
5777ab9cffSMartin Josefsson struct nf_conntrack_expect *
586823645dSPatrick McHardy __nf_ct_expect_find(const struct nf_conntrack_tuple *tuple);
5977ab9cffSMartin Josefsson 
6077ab9cffSMartin Josefsson struct nf_conntrack_expect *
616823645dSPatrick McHardy nf_ct_expect_find_get(const struct nf_conntrack_tuple *tuple);
6277ab9cffSMartin Josefsson 
6377ab9cffSMartin Josefsson struct nf_conntrack_expect *
646823645dSPatrick McHardy nf_ct_find_expectation(const struct nf_conntrack_tuple *tuple);
6577ab9cffSMartin Josefsson 
6677ab9cffSMartin Josefsson void nf_ct_unlink_expect(struct nf_conntrack_expect *exp);
6777ab9cffSMartin Josefsson void nf_ct_remove_expectations(struct nf_conn *ct);
686823645dSPatrick McHardy void nf_ct_unexpect_related(struct nf_conntrack_expect *exp);
6977ab9cffSMartin Josefsson 
7077ab9cffSMartin Josefsson /* Allocate space for an expectation: this is mandatory before calling
716823645dSPatrick McHardy    nf_ct_expect_related.  You will have to call put afterwards. */
726823645dSPatrick McHardy struct nf_conntrack_expect *nf_ct_expect_alloc(struct nf_conn *me);
736823645dSPatrick McHardy void nf_ct_expect_init(struct nf_conntrack_expect *, int,
74d6a9b650SPatrick McHardy 		       union nf_conntrack_address *,
75d6a9b650SPatrick McHardy 		       union nf_conntrack_address *,
76d6a9b650SPatrick McHardy 		       u_int8_t, __be16 *, __be16 *);
776823645dSPatrick McHardy void nf_ct_expect_put(struct nf_conntrack_expect *exp);
786823645dSPatrick McHardy int nf_ct_expect_related(struct nf_conntrack_expect *expect);
7977ab9cffSMartin Josefsson 
8077ab9cffSMartin Josefsson #endif /*_NF_CONNTRACK_EXPECT_H*/
8177ab9cffSMartin Josefsson 
82