]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - net/ipv4/netfilter/ip_nat_proto_icmp.c
[SK_BUFF]: Introduce ipv6_hdr(), remove skb->nh.ipv6h
[linux-2.6-omap-h63xx.git] / net / ipv4 / netfilter / ip_nat_proto_icmp.c
index 3f6efc13ac74e7a20f9a9ecd9bbd9a1d99e5a2c7..22a528ae0380bef73f1f6bfa10cf25c5e6b8c6a7 100644 (file)
@@ -24,8 +24,8 @@ icmp_in_range(const struct ip_conntrack_tuple *tuple,
              const union ip_conntrack_manip_proto *min,
              const union ip_conntrack_manip_proto *max)
 {
-       return (tuple->src.u.icmp.id >= min->icmp.id
-               && tuple->src.u.icmp.id <= max->icmp.id);
+       return ntohs(tuple->src.u.icmp.id) >= ntohs(min->icmp.id) &&
+              ntohs(tuple->src.u.icmp.id) <= ntohs(max->icmp.id);
 }
 
 static int
@@ -45,7 +45,7 @@ icmp_unique_tuple(struct ip_conntrack_tuple *tuple,
 
        for (i = 0; i < range_size; i++, id++) {
                tuple->src.u.icmp.id = htons(ntohs(range->min.icmp.id) +
-                                            (id % range_size));
+                                            (id % range_size));
                if (!ip_nat_used_tuple(tuple, conntrack))
                        return 1;
        }
@@ -66,10 +66,8 @@ icmp_manip_pkt(struct sk_buff **pskb,
                return 0;
 
        hdr = (struct icmphdr *)((*pskb)->data + hdroff);
-       hdr->checksum = nf_proto_csum_update(*pskb,
-                                            hdr->un.echo.id ^ htons(0xFFFF),
-                                            tuple->src.u.icmp.id,
-                                            hdr->checksum, 0);
+       nf_proto_csum_replace2(&hdr->checksum, *pskb,
+                              hdr->un.echo.id, tuple->src.u.icmp.id, 0);
        hdr->un.echo.id = tuple->src.u.icmp.id;
        return 1;
 }