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