net/macb: add RX checksum offload feature
authorCyrille Pitchen <cyrille.pitchen@atmel.com>
Thu, 24 Jul 2014 11:51:01 +0000 (13:51 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 25 Jul 2014 06:39:55 +0000 (23:39 -0700)
commit924ec53c4130a5013161c463330ddbb12ef306cf
tree0a0134461a301628ea5faa747c84cbae23a94cb8
parent85ff3d87bf2ef1fadcde8553628c60f79806fdb4
net/macb: add RX checksum offload feature

When RX checksum offload is enabled at GEM level (bit 24 set in the Network
Control Register), frames with invalid IP, TCP or UDP checksums are
discarted even if promiscuous mode is enabled (bit 4 set in the Network Control
Register).

This was verified with a simple userspace program, which corrupts UDP checksum
using libnetfilter_queue.

Then both IFF_PROMISC bit must be clear in dev->flags and NETIF_F_RXCSUM bit
must be set in dev->features to enable RX checksum offload at GEM level. This
way tcpdump is still able to capture corrupted frames.

Also skb->ip_summed is set to CHECKSUM_UNNECESSARY only when both TCP/IP or
UDP/IP checksums were verified by the GEM. Indeed the GEM may verify only IP
checksum but not the one for ICMP (or other protocol than TCP or UDP).

Signed-off-by: Cyrille Pitchen <cyrille.pitchen@atmel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/cadence/macb.c
drivers/net/ethernet/cadence/macb.h