vlan: more careful checksum features handling
authorMichal Kubeček <mkubecek@suse.cz>
Tue, 20 May 2014 06:29:25 +0000 (08:29 +0200)
committerDavid S. Miller <davem@davemloft.net>
Thu, 22 May 2014 19:07:23 +0000 (15:07 -0400)
commitda08143b85203b581f4a6461b149186b0e9592df
tree92f3c5efc8225ddd941f0c80ac8c7caa8ed5211f
parent98a6eeb8f5dbae8012cd4ec7b6c13efd5b5ced8a
vlan: more careful checksum features handling

When combining real_dev's features and vlan_features, simple
bitwise AND is used. This doesn't work well for checksum
offloading features as if one set has NETIF_F_HW_CSUM and the
other NETIF_F_IP_CSUM and/or NETIF_F_IPV6_CSUM, we end up with
no checksum offloading. However, from the logical point of view
(how can_checksum_protocol() works), NETIF_F_HW_CSUM contains
the functionality of NETIF_F_IP_CSUM and NETIF_F_IPV6_CSUM so
that the result should be IP/IPV6.

Add helper function netdev_intersect_features() implementing
this logic and use it in vlan_dev_fix_features().

Signed-off-by: Michal Kubecek <mkubecek@suse.cz>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/netdevice.h
net/8021q/vlan_dev.c