netfilter: nf_conntrack: make sequence number adjustments usuable without NAT
[deliverable/linux.git] / include / net / netfilter / nf_nat.h
CommitLineData
5b1158e9
JK
1#ifndef _NF_NAT_H
2#define _NF_NAT_H
3#include <linux/netfilter_ipv4.h>
cbc9f2f4 4#include <linux/netfilter/nf_nat.h>
5b1158e9
JK
5#include <net/netfilter/nf_conntrack_tuple.h>
6
fd2c3ef7 7enum nf_nat_manip_type {
cbc9f2f4
PM
8 NF_NAT_MANIP_SRC,
9 NF_NAT_MANIP_DST
5b1158e9
JK
10};
11
12/* SRC manip occurs POST_ROUTING or LOCAL_IN */
6e23ae2a
PM
13#define HOOK2MANIP(hooknum) ((hooknum) != NF_INET_POST_ROUTING && \
14 (hooknum) != NF_INET_LOCAL_IN)
5b1158e9 15
5b1158e9 16#include <linux/list.h>
4ba88779 17#include <linux/netfilter/nf_conntrack_pptp.h>
2d59e5ca 18#include <net/netfilter/nf_conntrack_extend.h>
5b1158e9 19
4ba88779 20/* per conntrack: nat application helper private data */
fd2c3ef7 21union nf_conntrack_nat_help {
4ba88779 22 /* insert nat helper private data here */
03c0e5bb 23#if defined(CONFIG_NF_NAT_PPTP) || defined(CONFIG_NF_NAT_PPTP_MODULE)
4ba88779 24 struct nf_nat_pptp nat_pptp_info;
03c0e5bb 25#endif
4ba88779
YK
26};
27
b6b84d4a
YK
28struct nf_conn;
29
30/* The structure embedded in the conntrack structure. */
fd2c3ef7 31struct nf_conn_nat {
53aba597 32 struct hlist_node bysource;
b6b84d4a 33 struct nf_conn *ct;
4ba88779
YK
34 union nf_conntrack_nat_help help;
35#if defined(CONFIG_IP_NF_TARGET_MASQUERADE) || \
b3f644fc
PM
36 defined(CONFIG_IP_NF_TARGET_MASQUERADE_MODULE) || \
37 defined(CONFIG_IP6_NF_TARGET_MASQUERADE) || \
38 defined(CONFIG_IP6_NF_TARGET_MASQUERADE_MODULE)
4ba88779
YK
39 int masq_index;
40#endif
41};
42
5b1158e9
JK
43/* Set up the info structure to map into this range. */
44extern unsigned int nf_nat_setup_info(struct nf_conn *ct,
c7232c99 45 const struct nf_nat_range *range,
cc01dcbd 46 enum nf_nat_manip_type maniptype);
5b1158e9
JK
47
48/* Is this tuple already taken? (not by us)*/
49extern int nf_nat_used_tuple(const struct nf_conntrack_tuple *tuple,
50 const struct nf_conn *ignored_conntrack);
51
2d59e5ca
YK
52static inline struct nf_conn_nat *nfct_nat(const struct nf_conn *ct)
53{
e0e76c83 54#if defined(CONFIG_NF_NAT) || defined(CONFIG_NF_NAT_MODULE)
2d59e5ca 55 return nf_ct_ext_find(ct, NF_CT_EXT_NAT);
e0e76c83
CG
56#else
57 return NULL;
58#endif
2d59e5ca
YK
59}
60
a0ecb85a
JK
61static inline bool nf_nat_oif_changed(unsigned int hooknum,
62 enum ip_conntrack_info ctinfo,
63 struct nf_conn_nat *nat,
64 const struct net_device *out)
65{
66#if IS_ENABLED(CONFIG_IP_NF_TARGET_MASQUERADE) || \
67 IS_ENABLED(CONFIG_IP6_NF_TARGET_MASQUERADE)
68 return nat->masq_index && hooknum == NF_INET_POST_ROUTING &&
69 CTINFO2DIR(ctinfo) == IP_CT_DIR_ORIGINAL &&
70 nat->masq_index != out->ifindex;
71#else
72 return false;
73#endif
74}
75
5b1158e9 76#endif
This page took 0.510073 seconds and 5 git commands to generate.