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