diff options
author | Changli Gao <xiaosuo@gmail.com> | 2010-08-02 11:15:30 -0400 |
---|---|---|
committer | Patrick McHardy <kaber@trash.net> | 2010-08-02 11:15:30 -0400 |
commit | 794dbc1d712e181a9eb8d1ae799ed7c526963a7c (patch) | |
tree | 920418736aea470df9daa80e83f4733588535b89 /net | |
parent | 5c0d2374a16fcb52096df914ee57720987677be5 (diff) |
netfilter: nf_nat: use local variable hdrlen
Use local variable hdrlen instead of ip_hdrlen(skb).
Signed-off-by: Changli Gao <xiaosuo@gmail.com>
Signed-off-by: Patrick McHardy <kaber@trash.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/ipv4/netfilter/nf_nat_core.c | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/net/ipv4/netfilter/nf_nat_core.c b/net/ipv4/netfilter/nf_nat_core.c index 037a3a659930..8c8632d9b93c 100644 --- a/net/ipv4/netfilter/nf_nat_core.c +++ b/net/ipv4/netfilter/nf_nat_core.c | |||
@@ -435,7 +435,7 @@ int nf_nat_icmp_reply_translation(struct nf_conn *ct, | |||
435 | if (!skb_make_writable(skb, hdrlen + sizeof(*inside))) | 435 | if (!skb_make_writable(skb, hdrlen + sizeof(*inside))) |
436 | return 0; | 436 | return 0; |
437 | 437 | ||
438 | inside = (void *)skb->data + ip_hdrlen(skb); | 438 | inside = (void *)skb->data + hdrlen; |
439 | 439 | ||
440 | /* We're actually going to mangle it beyond trivial checksum | 440 | /* We're actually going to mangle it beyond trivial checksum |
441 | adjustment, so make sure the current checksum is correct. */ | 441 | adjustment, so make sure the current checksum is correct. */ |
@@ -465,12 +465,10 @@ int nf_nat_icmp_reply_translation(struct nf_conn *ct, | |||
465 | /* rcu_read_lock()ed by nf_hook_slow */ | 465 | /* rcu_read_lock()ed by nf_hook_slow */ |
466 | l4proto = __nf_ct_l4proto_find(PF_INET, inside->ip.protocol); | 466 | l4proto = __nf_ct_l4proto_find(PF_INET, inside->ip.protocol); |
467 | 467 | ||
468 | if (!nf_ct_get_tuple(skb, | 468 | if (!nf_ct_get_tuple(skb, hdrlen + sizeof(struct icmphdr), |
469 | ip_hdrlen(skb) + sizeof(struct icmphdr), | 469 | (hdrlen + |
470 | (ip_hdrlen(skb) + | ||
471 | sizeof(struct icmphdr) + inside->ip.ihl * 4), | 470 | sizeof(struct icmphdr) + inside->ip.ihl * 4), |
472 | (u_int16_t)AF_INET, | 471 | (u_int16_t)AF_INET, inside->ip.protocol, |
473 | inside->ip.protocol, | ||
474 | &inner, l3proto, l4proto)) | 472 | &inner, l3proto, l4proto)) |
475 | return 0; | 473 | return 0; |
476 | 474 | ||
@@ -479,15 +477,13 @@ int nf_nat_icmp_reply_translation(struct nf_conn *ct, | |||
479 | pass all hooks (locally-generated ICMP). Consider incoming | 477 | pass all hooks (locally-generated ICMP). Consider incoming |
480 | packet: PREROUTING (DST manip), routing produces ICMP, goes | 478 | packet: PREROUTING (DST manip), routing produces ICMP, goes |
481 | through POSTROUTING (which must correct the DST manip). */ | 479 | through POSTROUTING (which must correct the DST manip). */ |
482 | if (!manip_pkt(inside->ip.protocol, skb, | 480 | if (!manip_pkt(inside->ip.protocol, skb, hdrlen + sizeof(inside->icmp), |
483 | ip_hdrlen(skb) + sizeof(inside->icmp), | 481 | &ct->tuplehash[!dir].tuple, !manip)) |
484 | &ct->tuplehash[!dir].tuple, | ||
485 | !manip)) | ||
486 | return 0; | 482 | return 0; |
487 | 483 | ||
488 | if (skb->ip_summed != CHECKSUM_PARTIAL) { | 484 | if (skb->ip_summed != CHECKSUM_PARTIAL) { |
489 | /* Reloading "inside" here since manip_pkt inner. */ | 485 | /* Reloading "inside" here since manip_pkt inner. */ |
490 | inside = (void *)skb->data + ip_hdrlen(skb); | 486 | inside = (void *)skb->data + hdrlen; |
491 | inside->icmp.checksum = 0; | 487 | inside->icmp.checksum = 0; |
492 | inside->icmp.checksum = | 488 | inside->icmp.checksum = |
493 | csum_fold(skb_checksum(skb, hdrlen, | 489 | csum_fold(skb_checksum(skb, hdrlen, |