public inbox for netdev@vger.kernel.org 
 help / color / mirror / Atom feed
* Rx checksum offload for fragments
@ 2010-07-27 22:56 Dimitris Michailidis
  0 siblings, 0 replies; only message in thread
From: Dimitris Michailidis @ 2010-07-27 22:56 UTC (permalink / raw)
  To: David Miller, netdev

I am looking at a problem with the cxgb4 driver related to Rx checksum 
offload and IPv6 fragments.  For IP/IPv6 fragments the device provides the 
L4 checksum without the pseudo-header, which the driver passes in skb->csum 
and sets CHECKSUM_COMPLETE.  This works for IP fragments but triggers errors 
  from netdev_rx_csum_fault for IPv6.  The errors are because of this code 
in ip6_frag_queue:

	if (skb->ip_summed == CHECKSUM_COMPLETE) {
		const unsigned char *nh = skb_network_header(skb);
		skb->csum = csum_sub(skb->csum,
			             csum_partial(nh, (u8 *)(fhdr + 1) - nh,
                                                   0));
	}

which subtracts the checksum for the L3 headers (that HW does not include in 
the first place).  AFAICS IPv4 does not make a similar adjustment to 
skb->csum for its header.  Am I missing something here or do IP and IPv6 
interpret CHECKSUM_COMPLETE differently?  And what should the driver do?

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2010-07-27 22:56 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-07-27 22:56 Rx checksum offload for fragments Dimitris Michailidis

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox