On Tue, May 27, 2008 at 12:20:47PM +0100, Mark McLoughlin wrote:> hdr->csum_start is the offset from the start of the ethernet > header to the transport layer checksum field. skb->csum_start > is the offset from skb->head. > > skb_partial_csum_set() assumes that skb->data points to the > ethernet header - i.e. it computes skb->csum_start by adding > the headroom to hdr->csum_start. > > Since eth_type_trans() skb_pull()s the ethernet header, > skb_partial_csum_set() should be called before > eth_type_trans(). > > Signed-off-by: Mark McLoughlin <markmc at redhat.com>Good catch! Clearly shows I never ran this across a real Ethernet device :) Acked-by: Herbert Xu <herbert at gondor.apana.org.au> Thanks, -- Visit Openswan at http://www.openswan.org/ Email: Herbert Xu ~{PmV>HI~} <herbert at gondor.apana.org.au> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
Rusty Russell
2008-May-29 07:31 UTC
[PATCH 3/3] virtio_net: Fix skb->csum_start computation
On Tuesday 27 May 2008 21:20:47 Mark McLoughlin wrote:> hdr->csum_start is the offset from the start of the ethernet > header to the transport layer checksum field. skb->csum_start > is the offset from skb->head. > > skb_partial_csum_set() assumes that skb->data points to the > ethernet header - i.e. it computes skb->csum_start by adding > the headroom to hdr->csum_start. > > Since eth_type_trans() skb_pull()s the ethernet header, > skb_partial_csum_set() should be called before > eth_type_trans().As should the rx_bytes += skb->len. Thanks for this! Applied (and 1/3, the typo patch). I'll backport this to -stable, as well. Thanks, Rusty.
Maybe Matching Threads
- [PATCH 3/3] virtio_net: Fix skb->csum_start computation
- [PATCH] virtio_net: Fix skb->csum_start computation (2.6.24, 2.6.25)
- [PATCH] virtio_net: Fix skb->csum_start computation (2.6.24, 2.6.25)
- [PATCH 1/4] virtio_net: Fix skb->csum_start computation
- [patch 05/15] virtio_net: Fix skb->csum_start computation