Prev: Staging: slicoss: Remove net_device_stats from the driver's private
Next: irq: Add new IRQ flag IRQF_NO_SUSPEND
From: Changli Gao on 30 Jul 2010 06:20 On Fri, Jul 30, 2010 at 5:09 PM, Herbert Xu <herbert(a)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(a)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(a)gmail.com) -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Changli Gao on 30 Jul 2010 10:20
On Fri, Jul 30, 2010 at 6:24 PM, Herbert Xu <herbert(a)gondor.apana.org.au> wrote: > > The checksum update is for the inner IP header. �netfilter does > of course update the checksum, it just doesn't do it here which is > for the outer IP header. > I know we need to update the ICMP checksum if we alter the payload(the inner IP header here) of ICMP. But I doubt if the update is really necessary if the checksum is partial, as the checksum will be done later(by ether skb_checksum_help() or NIC hardware). In fact, as there isn't any pseudo header, the icmph->checksum should be always ZERO, otherwise skb_checksum_help() or NIC will give the wrong checksums, when the checksum is partial. -- Regards, Changli Gao(xiaosuo(a)gmail.com) -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |