Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 215454
b: refs/heads/master
c: 5b92b61
h: refs/heads/master
v: v3
  • Loading branch information
Pablo Neira Ayuso authored and Patrick McHardy committed Sep 22, 2010
1 parent 389d666 commit 77dd862
Show file tree
Hide file tree
Showing 6 changed files with 94 additions and 15 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: 26c15cfd291f8b4ee40b4bbdf5e3772adfd704f5
refs/heads/master: 5b92b61f3891517d18d0573ad2c939c81b59ecfe
9 changes: 8 additions & 1 deletion trunk/net/ipv4/netfilter/nf_nat_amanda.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,16 @@ static unsigned int help(struct sk_buff *skb,

/* Try to get same port: if not, try to change it. */
for (port = ntohs(exp->saved_proto.tcp.port); port != 0; port++) {
int ret;

exp->tuple.dst.u.tcp.port = htons(port);
if (nf_ct_expect_related(exp) == 0)
ret = nf_ct_expect_related(exp);
if (ret == 0)
break;
else if (ret != -EBUSY) {
port = 0;
break;
}
}

if (port == 0)
Expand Down
9 changes: 8 additions & 1 deletion trunk/net/ipv4/netfilter/nf_nat_ftp.c
Original file line number Diff line number Diff line change
Expand Up @@ -79,9 +79,16 @@ static unsigned int nf_nat_ftp(struct sk_buff *skb,

/* Try to get same port: if not, try to change it. */
for (port = ntohs(exp->saved_proto.tcp.port); port != 0; port++) {
int ret;

exp->tuple.dst.u.tcp.port = htons(port);
if (nf_ct_expect_related(exp) == 0)
ret = nf_ct_expect_related(exp);
if (ret == 0)
break;
else if (ret != -EBUSY) {
port = 0;
break;
}
}

if (port == 0)
Expand Down
53 changes: 46 additions & 7 deletions trunk/net/ipv4/netfilter/nf_nat_h323.c
Original file line number Diff line number Diff line change
Expand Up @@ -222,13 +222,24 @@ static int nat_rtp_rtcp(struct sk_buff *skb, struct nf_conn *ct,
/* Try to get a pair of ports. */
for (nated_port = ntohs(rtp_exp->tuple.dst.u.udp.port);
nated_port != 0; nated_port += 2) {
int ret;

rtp_exp->tuple.dst.u.udp.port = htons(nated_port);
if (nf_ct_expect_related(rtp_exp) == 0) {
ret = nf_ct_expect_related(rtp_exp);
if (ret == 0) {
rtcp_exp->tuple.dst.u.udp.port =
htons(nated_port + 1);
if (nf_ct_expect_related(rtcp_exp) == 0)
ret = nf_ct_expect_related(rtcp_exp);
if (ret == 0)
break;
else if (ret != -EBUSY) {
nf_ct_unexpect_related(rtp_exp);
nated_port = 0;
break;
nf_ct_unexpect_related(rtp_exp);
}
} else if (ret != -EBUSY) {
nated_port = 0;
break;
}
}

Expand Down Expand Up @@ -284,9 +295,16 @@ static int nat_t120(struct sk_buff *skb, struct nf_conn *ct,

/* Try to get same port: if not, try to change it. */
for (; nated_port != 0; nated_port++) {
int ret;

exp->tuple.dst.u.tcp.port = htons(nated_port);
if (nf_ct_expect_related(exp) == 0)
ret = nf_ct_expect_related(exp);
if (ret == 0)
break;
else if (ret != -EBUSY) {
nated_port = 0;
break;
}
}

if (nated_port == 0) { /* No port available */
Expand Down Expand Up @@ -334,9 +352,16 @@ static int nat_h245(struct sk_buff *skb, struct nf_conn *ct,

/* Try to get same port: if not, try to change it. */
for (; nated_port != 0; nated_port++) {
int ret;

exp->tuple.dst.u.tcp.port = htons(nated_port);
if (nf_ct_expect_related(exp) == 0)
ret = nf_ct_expect_related(exp);
if (ret == 0)
break;
else if (ret != -EBUSY) {
nated_port = 0;
break;
}
}

if (nated_port == 0) { /* No port available */
Expand Down Expand Up @@ -418,9 +443,16 @@ static int nat_q931(struct sk_buff *skb, struct nf_conn *ct,

/* Try to get same port: if not, try to change it. */
for (; nated_port != 0; nated_port++) {
int ret;

exp->tuple.dst.u.tcp.port = htons(nated_port);
if (nf_ct_expect_related(exp) == 0)
ret = nf_ct_expect_related(exp);
if (ret == 0)
break;
else if (ret != -EBUSY) {
nated_port = 0;
break;
}
}

if (nated_port == 0) { /* No port available */
Expand Down Expand Up @@ -500,9 +532,16 @@ static int nat_callforwarding(struct sk_buff *skb, struct nf_conn *ct,

/* Try to get same port: if not, try to change it. */
for (nated_port = ntohs(port); nated_port != 0; nated_port++) {
int ret;

exp->tuple.dst.u.tcp.port = htons(nated_port);
if (nf_ct_expect_related(exp) == 0)
ret = nf_ct_expect_related(exp);
if (ret == 0)
break;
else if (ret != -EBUSY) {
nated_port = 0;
break;
}
}

if (nated_port == 0) { /* No port available */
Expand Down
9 changes: 8 additions & 1 deletion trunk/net/ipv4/netfilter/nf_nat_irc.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,16 @@ static unsigned int help(struct sk_buff *skb,

/* Try to get same port: if not, try to change it. */
for (port = ntohs(exp->saved_proto.tcp.port); port != 0; port++) {
int ret;

exp->tuple.dst.u.tcp.port = htons(port);
if (nf_ct_expect_related(exp) == 0)
ret = nf_ct_expect_related(exp);
if (ret == 0)
break;
else if (ret != -EBUSY) {
port = 0;
break;
}
}

if (port == 0)
Expand Down
27 changes: 23 additions & 4 deletions trunk/net/ipv4/netfilter/nf_nat_sip.c
Original file line number Diff line number Diff line change
Expand Up @@ -307,9 +307,16 @@ static unsigned int ip_nat_sip_expect(struct sk_buff *skb, unsigned int dataoff,
exp->expectfn = ip_nat_sip_expected;

for (; port != 0; port++) {
int ret;

exp->tuple.dst.u.udp.port = htons(port);
if (nf_ct_expect_related(exp) == 0)
ret = nf_ct_expect_related(exp);
if (ret == 0)
break;
else if (ret != -EBUSY) {
port = 0;
break;
}
}

if (port == 0)
Expand Down Expand Up @@ -480,13 +487,25 @@ static unsigned int ip_nat_sdp_media(struct sk_buff *skb, unsigned int dataoff,
/* Try to get same pair of ports: if not, try to change them. */
for (port = ntohs(rtp_exp->tuple.dst.u.udp.port);
port != 0; port += 2) {
int ret;

rtp_exp->tuple.dst.u.udp.port = htons(port);
if (nf_ct_expect_related(rtp_exp) != 0)
ret = nf_ct_expect_related(rtp_exp);
if (ret == -EBUSY)
continue;
else if (ret < 0) {
port = 0;
break;
}
rtcp_exp->tuple.dst.u.udp.port = htons(port + 1);
if (nf_ct_expect_related(rtcp_exp) == 0)
ret = nf_ct_expect_related(rtcp_exp);
if (ret == 0)
break;
nf_ct_unexpect_related(rtp_exp);
else if (ret != -EBUSY) {
nf_ct_unexpect_related(rtp_exp);
port = 0;
break;
}
}

if (port == 0)
Expand Down

0 comments on commit 77dd862

Please sign in to comment.