net: Fix ETHTOOL_GFEATURES compatibility
authorMichał Mirosław <mirq-linux@rere.qmqm.pl>
Tue, 22 Feb 2011 16:52:28 +0000 (16:52 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 23 Feb 2011 22:23:32 +0000 (14:23 -0800)
Implement getting rx checksum state for not updated drivers.

Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/ethtool.c

index 66cdc76770ce7c1c1cfd83810f33bb0ee75fa9f4..69a3edc182f9952b043cff344f0d50382038cf02 100644 (file)
@@ -168,6 +168,18 @@ EXPORT_SYMBOL(ethtool_ntuple_flush);
 
 #define ETHTOOL_DEV_FEATURE_WORDS      1
 
+static void ethtool_get_features_compat(struct net_device *dev,
+       struct ethtool_get_features_block *features)
+{
+       if (!dev->ethtool_ops)
+               return;
+
+       /* getting RX checksum */
+       if (dev->ethtool_ops->get_rx_csum)
+               if (dev->ethtool_ops->get_rx_csum(dev))
+                       features[0].active |= NETIF_F_RXCSUM;
+}
+
 static int ethtool_get_features(struct net_device *dev, void __user *useraddr)
 {
        struct ethtool_gfeatures cmd = {
@@ -185,6 +197,8 @@ static int ethtool_get_features(struct net_device *dev, void __user *useraddr)
        u32 __user *sizeaddr;
        u32 copy_size;
 
+       ethtool_get_features_compat(dev, features);
+
        sizeaddr = useraddr + offsetof(struct ethtool_gfeatures, size);
        if (get_user(copy_size, sizeaddr))
                return -EFAULT;