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 
977ab9cffSMartin Josefsson extern struct list_head nf_conntrack_expect_list;
1077ab9cffSMartin Josefsson extern kmem_cache_t *nf_conntrack_expect_cachep;
1177ab9cffSMartin Josefsson extern struct file_operations exp_file_ops;
1277ab9cffSMartin Josefsson 
1377ab9cffSMartin Josefsson struct nf_conntrack_expect
1477ab9cffSMartin Josefsson {
1577ab9cffSMartin Josefsson 	/* Internal linked list (global expectation list) */
1677ab9cffSMartin Josefsson 	struct list_head list;
1777ab9cffSMartin Josefsson 
1877ab9cffSMartin Josefsson 	/* We expect this tuple, with the following mask */
1977ab9cffSMartin Josefsson 	struct nf_conntrack_tuple tuple, mask;
2077ab9cffSMartin Josefsson 
2177ab9cffSMartin Josefsson 	/* Function to call after setup and insertion */
2277ab9cffSMartin Josefsson 	void (*expectfn)(struct nf_conn *new,
2377ab9cffSMartin Josefsson 			 struct nf_conntrack_expect *this);
2477ab9cffSMartin Josefsson 
2577ab9cffSMartin Josefsson 	/* The conntrack of the master connection */
2677ab9cffSMartin Josefsson 	struct nf_conn *master;
2777ab9cffSMartin Josefsson 
2877ab9cffSMartin Josefsson 	/* Timer function; deletes the expectation. */
2977ab9cffSMartin Josefsson 	struct timer_list timeout;
3077ab9cffSMartin Josefsson 
3177ab9cffSMartin Josefsson 	/* Usage count. */
3277ab9cffSMartin Josefsson 	atomic_t use;
3377ab9cffSMartin Josefsson 
3477ab9cffSMartin Josefsson 	/* Unique ID */
3577ab9cffSMartin Josefsson 	unsigned int id;
3677ab9cffSMartin Josefsson 
3777ab9cffSMartin Josefsson 	/* Flags */
3877ab9cffSMartin Josefsson 	unsigned int flags;
3977ab9cffSMartin Josefsson 
4077ab9cffSMartin Josefsson #ifdef CONFIG_NF_NAT_NEEDED
4177ab9cffSMartin Josefsson 	/* This is the original per-proto part, used to map the
4277ab9cffSMartin Josefsson 	 * expected connection the way the recipient expects. */
4377ab9cffSMartin Josefsson 	union nf_conntrack_manip_proto saved_proto;
4477ab9cffSMartin Josefsson 	/* Direction relative to the master connection. */
4577ab9cffSMartin Josefsson 	enum ip_conntrack_dir dir;
4677ab9cffSMartin Josefsson #endif
4777ab9cffSMartin Josefsson };
4877ab9cffSMartin Josefsson 
4977ab9cffSMartin Josefsson #define NF_CT_EXPECT_PERMANENT 0x1
5077ab9cffSMartin Josefsson 
5177ab9cffSMartin Josefsson 
5277ab9cffSMartin Josefsson struct nf_conntrack_expect *
5377ab9cffSMartin Josefsson __nf_conntrack_expect_find(const struct nf_conntrack_tuple *tuple);
5477ab9cffSMartin Josefsson 
5577ab9cffSMartin Josefsson struct nf_conntrack_expect *
5677ab9cffSMartin Josefsson nf_conntrack_expect_find(const struct nf_conntrack_tuple *tuple);
5777ab9cffSMartin Josefsson 
5877ab9cffSMartin Josefsson struct nf_conntrack_expect *
5977ab9cffSMartin Josefsson find_expectation(const struct nf_conntrack_tuple *tuple);
6077ab9cffSMartin Josefsson 
6177ab9cffSMartin Josefsson void nf_ct_unlink_expect(struct nf_conntrack_expect *exp);
6277ab9cffSMartin Josefsson void nf_ct_remove_expectations(struct nf_conn *ct);
6377ab9cffSMartin Josefsson void nf_conntrack_unexpect_related(struct nf_conntrack_expect *exp);
6477ab9cffSMartin Josefsson 
6577ab9cffSMartin Josefsson /* Allocate space for an expectation: this is mandatory before calling
6677ab9cffSMartin Josefsson    nf_conntrack_expect_related.  You will have to call put afterwards. */
6777ab9cffSMartin Josefsson struct nf_conntrack_expect *nf_conntrack_expect_alloc(struct nf_conn *me);
6877ab9cffSMartin Josefsson void nf_conntrack_expect_put(struct nf_conntrack_expect *exp);
6977ab9cffSMartin Josefsson int nf_conntrack_expect_related(struct nf_conntrack_expect *expect);
7077ab9cffSMartin Josefsson 
7177ab9cffSMartin Josefsson #endif /*_NF_CONNTRACK_EXPECT_H*/
7277ab9cffSMartin Josefsson 
73