diff options
| author | Pablo Neira Ayuso <pablo@netfilter.org> | 2013-10-14 04:57:04 -0400 |
|---|---|---|
| committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2013-10-14 05:29:39 -0400 |
| commit | f59cb0453cd885736daa11ae2445982c5ab2fc83 (patch) | |
| tree | e9df44bf9834bf57df4e84f0b564629e887bbcc2 | |
| parent | 795aa6ef6a1aba99050735eadd0c2341b789b53b (diff) | |
netfilter: nf_nat: move alloc_null_binding to nf_nat_core.c
Similar to nat_decode_session, alloc_null_binding is needed for both
ip_tables and nf_tables, so move it to nf_nat_core.c. This change
is required by nf_tables.
This is an adapted version of the original patch from Patrick McHardy.
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
| -rw-r--r-- | include/net/netfilter/nf_nat.h | 3 | ||||
| -rw-r--r-- | net/netfilter/nf_nat_core.c | 20 |
2 files changed, 23 insertions, 0 deletions
diff --git a/include/net/netfilter/nf_nat.h b/include/net/netfilter/nf_nat.h index c29b4e545f87..07eaaf604092 100644 --- a/include/net/netfilter/nf_nat.h +++ b/include/net/netfilter/nf_nat.h | |||
| @@ -45,6 +45,9 @@ unsigned int nf_nat_setup_info(struct nf_conn *ct, | |||
| 45 | const struct nf_nat_range *range, | 45 | const struct nf_nat_range *range, |
| 46 | enum nf_nat_manip_type maniptype); | 46 | enum nf_nat_manip_type maniptype); |
| 47 | 47 | ||
| 48 | extern unsigned int nf_nat_alloc_null_binding(struct nf_conn *ct, | ||
| 49 | unsigned int hooknum); | ||
| 50 | |||
| 48 | /* Is this tuple already taken? (not by us)*/ | 51 | /* Is this tuple already taken? (not by us)*/ |
| 49 | int nf_nat_used_tuple(const struct nf_conntrack_tuple *tuple, | 52 | int nf_nat_used_tuple(const struct nf_conntrack_tuple *tuple, |
| 50 | const struct nf_conn *ignored_conntrack); | 53 | const struct nf_conn *ignored_conntrack); |
diff --git a/net/netfilter/nf_nat_core.c b/net/netfilter/nf_nat_core.c index 6f0f4f7f68a5..63a815402211 100644 --- a/net/netfilter/nf_nat_core.c +++ b/net/netfilter/nf_nat_core.c | |||
| @@ -432,6 +432,26 @@ nf_nat_setup_info(struct nf_conn *ct, | |||
| 432 | } | 432 | } |
| 433 | EXPORT_SYMBOL(nf_nat_setup_info); | 433 | EXPORT_SYMBOL(nf_nat_setup_info); |
| 434 | 434 | ||
| 435 | unsigned int | ||
| 436 | nf_nat_alloc_null_binding(struct nf_conn *ct, unsigned int hooknum) | ||
| 437 | { | ||
| 438 | /* Force range to this IP; let proto decide mapping for | ||
| 439 | * per-proto parts (hence not IP_NAT_RANGE_PROTO_SPECIFIED). | ||
| 440 | * Use reply in case it's already been mangled (eg local packet). | ||
| 441 | */ | ||
| 442 | union nf_inet_addr ip = | ||
| 443 | (HOOK2MANIP(hooknum) == NF_NAT_MANIP_SRC ? | ||
| 444 | ct->tuplehash[IP_CT_DIR_REPLY].tuple.dst.u3 : | ||
| 445 | ct->tuplehash[IP_CT_DIR_REPLY].tuple.src.u3); | ||
| 446 | struct nf_nat_range range = { | ||
| 447 | .flags = NF_NAT_RANGE_MAP_IPS, | ||
| 448 | .min_addr = ip, | ||
| 449 | .max_addr = ip, | ||
| 450 | }; | ||
| 451 | return nf_nat_setup_info(ct, &range, HOOK2MANIP(hooknum)); | ||
| 452 | } | ||
| 453 | EXPORT_SYMBOL_GPL(nf_nat_alloc_null_binding); | ||
| 454 | |||
| 435 | /* Do packet manipulations according to nf_nat_setup_info. */ | 455 | /* Do packet manipulations according to nf_nat_setup_info. */ |
| 436 | unsigned int nf_nat_packet(struct nf_conn *ct, | 456 | unsigned int nf_nat_packet(struct nf_conn *ct, |
| 437 | enum ip_conntrack_info ctinfo, | 457 | enum ip_conntrack_info ctinfo, |
