netdev: ethtool RXHASH flag
authorstephen hemminger <shemminger@vyatta.com>
Mon, 29 Mar 2010 14:47:27 +0000 (14:47 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 31 Mar 2010 06:51:08 +0000 (23:51 -0700)
This adds ethtool and device feature flag to allow control
of receive hashing offload.

Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Acked-by: Jeff Garzik <jgarzik@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/ethtool.h
include/linux/netdevice.h
net/core/ethtool.c

index b33f316bb92e0f984c5ed593ed48e845fb242cba..b391969a0dd9b23ea6baf1ad3b4a10db7814a6fb 100644 (file)
@@ -310,6 +310,7 @@ struct ethtool_perm_addr {
 enum ethtool_flags {
        ETH_FLAG_LRO            = (1 << 15),    /* LRO is enabled */
        ETH_FLAG_NTUPLE         = (1 << 27),    /* N-tuple filters enabled */
+       ETH_FLAG_RXHASH         = (1 << 28),
 };
 
 /* The following structures are for supporting RX network flow
index 53c272f2a734481e92995f36aa73082ef2c61c10..b5670ab5107cff1be9cc63f9d6f23bb39eb6962e 100644 (file)
@@ -785,6 +785,7 @@ struct net_device {
 #define NETIF_F_SCTP_CSUM      (1 << 25) /* SCTP checksum offload */
 #define NETIF_F_FCOE_MTU       (1 << 26) /* Supports max FCoE MTU, 2158 bytes*/
 #define NETIF_F_NTUPLE         (1 << 27) /* N-tuple filters supported */
+#define NETIF_F_RXHASH         (1 << 28) /* Receive hashing offload */
 
        /* Segmentation offload features */
 #define NETIF_F_GSO_SHIFT      16
index f4cb6b6299d9ad833c442455944133c5c55868dd..73c81edde8d98d000e0941eaf98966906e6a7aeb 100644 (file)
@@ -121,7 +121,7 @@ int ethtool_op_set_ufo(struct net_device *dev, u32 data)
  * NETIF_F_xxx values in include/linux/netdevice.h
  */
 static const u32 flags_dup_features =
-       (ETH_FLAG_LRO | ETH_FLAG_NTUPLE);
+       (ETH_FLAG_LRO | ETH_FLAG_NTUPLE | ETH_FLAG_RXHASH);
 
 u32 ethtool_op_get_flags(struct net_device *dev)
 {
@@ -152,6 +152,11 @@ int ethtool_op_set_flags(struct net_device *dev, u32 data)
                features &= ~NETIF_F_NTUPLE;
        }
 
+       if (data & ETH_FLAG_RXHASH)
+               features |= NETIF_F_RXHASH;
+       else
+               features &= ~NETIF_F_RXHASH;
+
        dev->features = features;
        return 0;
 }