Skip to content

Commit

Permalink
net: Move check of checksum features to netdev_fix_features()
Browse files Browse the repository at this point in the history
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Michał Mirosław authored and David S. Miller committed Jan 24, 2011
1 parent 2505c54 commit 57422dc
Showing 1 changed file with 17 additions and 15 deletions.
32 changes: 17 additions & 15 deletions net/core/dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -5215,6 +5215,23 @@ static void rollback_registered(struct net_device *dev)

unsigned long netdev_fix_features(unsigned long features, const char *name)
{
/* Fix illegal checksum combinations */
if ((features & NETIF_F_HW_CSUM) &&
(features & (NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM))) {
if (name)
printk(KERN_NOTICE "%s: mixed HW and IP checksum settings.\n",
name);
features &= ~(NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM);
}

if ((features & NETIF_F_NO_CSUM) &&
(features & (NETIF_F_HW_CSUM|NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM))) {
if (name)
printk(KERN_NOTICE "%s: mixed no checksumming and other settings.\n",
name);
features &= ~(NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM|NETIF_F_HW_CSUM);
}

/* Fix illegal SG+CSUM combinations. */
if ((features & NETIF_F_SG) &&
!(features & NETIF_F_ALL_CSUM)) {
Expand Down Expand Up @@ -5390,21 +5407,6 @@ int register_netdevice(struct net_device *dev)
if (dev->iflink == -1)
dev->iflink = dev->ifindex;

/* Fix illegal checksum combinations */
if ((dev->features & NETIF_F_HW_CSUM) &&
(dev->features & (NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM))) {
printk(KERN_NOTICE "%s: mixed HW and IP checksum settings.\n",
dev->name);
dev->features &= ~(NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM);
}

if ((dev->features & NETIF_F_NO_CSUM) &&
(dev->features & (NETIF_F_HW_CSUM|NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM))) {
printk(KERN_NOTICE "%s: mixed no checksumming and other settings.\n",
dev->name);
dev->features &= ~(NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM|NETIF_F_HW_CSUM);
}

dev->features = netdev_fix_features(dev->features, dev->name);

/* Enable software GSO if SG is supported. */
Expand Down

0 comments on commit 57422dc

Please sign in to comment.