[<prev] [next>] [day] [month] [year] [list]
Message-ID: <4C4F642C.1090901@chelsio.com>
Date: Tue, 27 Jul 2010 15:56:44 -0700
From: Dimitris Michailidis <dm@...lsio.com>
To: David Miller <davem@...emloft.net>, netdev@...r.kernel.org
Subject: Rx checksum offload for fragments
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?
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists