blob: b4de990b55f123e7f2c9ad1095634743e2ad4698 [file] [log] [blame]
Jozsef Kadlecsik5b1158e2006-12-02 22:07:13 -08001#ifndef _NF_NAT_H
2#define _NF_NAT_H
3#include <linux/netfilter_ipv4.h>
Patrick McHardycbc9f2f2011-12-23 13:59:49 +01004#include <linux/netfilter/nf_nat.h>
Jozsef Kadlecsik5b1158e2006-12-02 22:07:13 -08005#include <net/netfilter/nf_conntrack_tuple.h>
6
Eric Dumazetfd2c3ef2009-11-03 03:26:03 +00007enum nf_nat_manip_type {
Patrick McHardycbc9f2f2011-12-23 13:59:49 +01008 NF_NAT_MANIP_SRC,
9 NF_NAT_MANIP_DST
Jozsef Kadlecsik5b1158e2006-12-02 22:07:13 -080010};
11
12/* SRC manip occurs POST_ROUTING or LOCAL_IN */
Patrick McHardy6e23ae22007-11-19 18:53:30 -080013#define HOOK2MANIP(hooknum) ((hooknum) != NF_INET_POST_ROUTING && \
14 (hooknum) != NF_INET_LOCAL_IN)
Jozsef Kadlecsik5b1158e2006-12-02 22:07:13 -080015
Jozsef Kadlecsik5b1158e2006-12-02 22:07:13 -080016/* NAT sequence number modifications */
17struct nf_nat_seq {
18 /* position of the last TCP sequence number modification (if any) */
19 u_int32_t correction_pos;
20
21 /* sequence number offset before and after last modification */
22 int16_t offset_before, offset_after;
23};
24
Jozsef Kadlecsik5b1158e2006-12-02 22:07:13 -080025#include <linux/list.h>
Yasuyuki Kozakai4ba88772007-07-07 22:22:33 -070026#include <linux/netfilter/nf_conntrack_pptp.h>
Yasuyuki Kozakai2d59e5c2007-07-07 22:24:28 -070027#include <net/netfilter/nf_conntrack_extend.h>
Jozsef Kadlecsik5b1158e2006-12-02 22:07:13 -080028
Yasuyuki Kozakai4ba88772007-07-07 22:22:33 -070029/* per conntrack: nat application helper private data */
Eric Dumazetfd2c3ef2009-11-03 03:26:03 +000030union nf_conntrack_nat_help {
Yasuyuki Kozakai4ba88772007-07-07 22:22:33 -070031 /* insert nat helper private data here */
Changli Gao03c0e5b2010-11-15 12:27:27 +010032#if defined(CONFIG_NF_NAT_PPTP) || defined(CONFIG_NF_NAT_PPTP_MODULE)
Yasuyuki Kozakai4ba88772007-07-07 22:22:33 -070033 struct nf_nat_pptp nat_pptp_info;
Changli Gao03c0e5b2010-11-15 12:27:27 +010034#endif
Yasuyuki Kozakai4ba88772007-07-07 22:22:33 -070035};
36
Yasuyuki Kozakaib6b84d42007-07-07 22:26:35 -070037struct nf_conn;
38
39/* The structure embedded in the conntrack structure. */
Eric Dumazetfd2c3ef2009-11-03 03:26:03 +000040struct nf_conn_nat {
Patrick McHardy53aba592007-07-07 22:30:27 -070041 struct hlist_node bysource;
Yasuyuki Kozakaib6b84d42007-07-07 22:26:35 -070042 struct nf_nat_seq seq[IP_CT_DIR_MAX];
43 struct nf_conn *ct;
Yasuyuki Kozakai4ba88772007-07-07 22:22:33 -070044 union nf_conntrack_nat_help help;
45#if defined(CONFIG_IP_NF_TARGET_MASQUERADE) || \
46 defined(CONFIG_IP_NF_TARGET_MASQUERADE_MODULE)
47 int masq_index;
48#endif
49};
50
Jozsef Kadlecsik5b1158e2006-12-02 22:07:13 -080051/* Set up the info structure to map into this range. */
52extern unsigned int nf_nat_setup_info(struct nf_conn *ct,
Patrick McHardycbc9f2f2011-12-23 13:59:49 +010053 const struct nf_nat_ipv4_range *range,
Patrick McHardycc01dcb2007-12-17 22:38:20 -080054 enum nf_nat_manip_type maniptype);
Jozsef Kadlecsik5b1158e2006-12-02 22:07:13 -080055
56/* Is this tuple already taken? (not by us)*/
57extern int nf_nat_used_tuple(const struct nf_conntrack_tuple *tuple,
58 const struct nf_conn *ignored_conntrack);
59
Yasuyuki Kozakai2d59e5c2007-07-07 22:24:28 -070060static inline struct nf_conn_nat *nfct_nat(const struct nf_conn *ct)
61{
Changli Gaoe0e76c82010-11-15 12:23:24 +010062#if defined(CONFIG_NF_NAT) || defined(CONFIG_NF_NAT_MODULE)
Yasuyuki Kozakai2d59e5c2007-07-07 22:24:28 -070063 return nf_ct_ext_find(ct, NF_CT_EXT_NAT);
Changli Gaoe0e76c82010-11-15 12:23:24 +010064#else
65 return NULL;
66#endif
Yasuyuki Kozakai2d59e5c2007-07-07 22:24:28 -070067}
68
Jozsef Kadlecsik5b1158e2006-12-02 22:07:13 -080069#endif