git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
vserver 1.9.5.x5
[linux-2.6.git]
/
net
/
ipv4
/
netfilter
/
ip_nat_proto_icmp.c
diff --git
a/net/ipv4/netfilter/ip_nat_proto_icmp.c
b/net/ipv4/netfilter/ip_nat_proto_icmp.c
index
6fb50de
..
a558cf0
100644
(file)
--- a/
net/ipv4/netfilter/ip_nat_proto_icmp.c
+++ b/
net/ipv4/netfilter/ip_nat_proto_icmp.c
@@
-53,21
+53,23
@@
icmp_unique_tuple(struct ip_conntrack_tuple *tuple,
static int
icmp_manip_pkt(struct sk_buff **pskb,
static int
icmp_manip_pkt(struct sk_buff **pskb,
- unsigned int hdroff,
- const struct ip_conntrack_
manip *manip
,
+ unsigned int
ip
hdroff,
+ const struct ip_conntrack_
tuple *tuple
,
enum ip_nat_manip_type maniptype)
{
enum ip_nat_manip_type maniptype)
{
+ struct iphdr *iph = (struct iphdr *)((*pskb)->data + iphdroff);
struct icmphdr *hdr;
struct icmphdr *hdr;
+ unsigned int hdroff = iphdroff + iph->ihl*4;
if (!skb_ip_make_writable(pskb, hdroff + sizeof(*hdr)))
return 0;
if (!skb_ip_make_writable(pskb, hdroff + sizeof(*hdr)))
return 0;
- hdr = (
void *)(*pskb)->data + hdroff
;
+ hdr = (
struct icmphdr *)((*pskb)->data + hdroff)
;
hdr->checksum = ip_nat_cheat_check(hdr->un.echo.id ^ 0xFFFF,
hdr->checksum = ip_nat_cheat_check(hdr->un.echo.id ^ 0xFFFF,
-
manip->
u.icmp.id,
+
tuple->src.
u.icmp.id,
hdr->checksum);
hdr->checksum);
- hdr->un.echo.id =
manip->
u.icmp.id;
+ hdr->un.echo.id =
tuple->src.
u.icmp.id;
return 1;
}
return 1;
}