Messages in this thread | | | From | Changli Gao <> | Date | Fri, 30 Jul 2010 18:10:19 +0800 | Subject | Re: [PATCH] act_nat: the checksum of ICMP doesn't have pseudo header |
| |
On Fri, Jul 30, 2010 at 5:09 PM, Herbert Xu <herbert@gondor.apana.org.au> wrote: > On Fri, Jul 30, 2010 at 08:04:18AM +0800, Changli Gao wrote: >> after updating the value of the ICMP payload, inet_proto_csum_replace4() should >> be called with zero pseudohdr. >> >> Signed-off-by: Changli Gao <xiaosuo@gmail.com> > > No, the code is correct as is. We need to update the checksum > even if the checksum is partial, which is what the 1 is for. >
Is it really necessary, and I have noticed that netfilter doesn't call inet_proto_csum_replace4 in this way.
static bool icmp_manip_pkt(struct sk_buff *skb, unsigned int iphdroff, const struct nf_conntrack_tuple *tuple, enum nf_nat_manip_type maniptype) { const struct iphdr *iph = (struct iphdr *)(skb->data + iphdroff); struct icmphdr *hdr; unsigned int hdroff = iphdroff + iph->ihl*4;
if (!skb_make_writable(skb, hdroff + sizeof(*hdr))) return false;
hdr = (struct icmphdr *)(skb->data + hdroff); inet_proto_csum_replace2(&hdr->checksum, skb, hdr->un.echo.id, tuple->src.u.icmp.id, 0); hdr->un.echo.id = tuple->src.u.icmp.id; return true; }
Thanks.
-- Regards, Changli Gao(xiaosuo@gmail.com) -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |