Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 236652
b: refs/heads/master
c: 41a7cab
h: refs/heads/master
v: v3
  • Loading branch information
Changli Gao authored and Patrick McHardy committed Jan 20, 2011
1 parent 2c8d598 commit 7632858
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 8 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 4cda47d2e7b21b0b41e44dbe4cd9804fea2d30e9
refs/heads/master: 41a7cab6d329039d614ca5f0f87aff2dfd90637c
18 changes: 11 additions & 7 deletions trunk/net/ipv4/netfilter/nf_nat_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,14 @@ get_unique_tuple(struct nf_conntrack_tuple *tuple,
manips not an issue. */
if (maniptype == IP_NAT_MANIP_SRC &&
!(range->flags & IP_NAT_RANGE_PROTO_RANDOM)) {
if (find_appropriate_src(net, zone, orig_tuple, tuple, range)) {
/* try the original tuple first */
if (in_range(orig_tuple, range)) {
if (!nf_nat_used_tuple(orig_tuple, ct)) {
*tuple = *orig_tuple;
return;
}
} else if (find_appropriate_src(net, zone, orig_tuple, tuple,
range)) {
pr_debug("get_unique_tuple: Found current src map\n");
if (!nf_nat_used_tuple(tuple, ct))
return;
Expand Down Expand Up @@ -266,7 +273,6 @@ nf_nat_setup_info(struct nf_conn *ct,
struct net *net = nf_ct_net(ct);
struct nf_conntrack_tuple curr_tuple, new_tuple;
struct nf_conn_nat *nat;
int have_to_hash = !(ct->status & IPS_NAT_DONE_MASK);

/* nat helper or nfctnetlink also setup binding */
nat = nfct_nat(ct);
Expand Down Expand Up @@ -306,8 +312,7 @@ nf_nat_setup_info(struct nf_conn *ct,
ct->status |= IPS_DST_NAT;
}

/* Place in source hash if this is the first time. */
if (have_to_hash) {
if (maniptype == IP_NAT_MANIP_SRC) {
unsigned int srchash;

srchash = hash_by_src(net, nf_ct_zone(ct),
Expand Down Expand Up @@ -535,7 +540,7 @@ static void nf_nat_cleanup_conntrack(struct nf_conn *ct)
if (nat == NULL || nat->ct == NULL)
return;

NF_CT_ASSERT(nat->ct->status & IPS_NAT_DONE_MASK);
NF_CT_ASSERT(nat->ct->status & IPS_SRC_NAT_DONE);

spin_lock_bh(&nf_nat_lock);
hlist_del_rcu(&nat->bysource);
Expand All @@ -548,11 +553,10 @@ static void nf_nat_move_storage(void *new, void *old)
struct nf_conn_nat *old_nat = old;
struct nf_conn *ct = old_nat->ct;

if (!ct || !(ct->status & IPS_NAT_DONE_MASK))
if (!ct || !(ct->status & IPS_SRC_NAT_DONE))
return;

spin_lock_bh(&nf_nat_lock);
new_nat->ct = ct;
hlist_replace_rcu(&old_nat->bysource, &new_nat->bysource);
spin_unlock_bh(&nf_nat_lock);
}
Expand Down

0 comments on commit 7632858

Please sign in to comment.