netdev: Add support for rx flow hash configuration, using ethtool.
Added new interfaces to ethtool to configure receive network flow distribution across multiple rx rings using hashing. Signed-off-by: Santwona Behera <santwona.behera@sun.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
ecbed6a419
commit
0853ad66b1
@ -209,6 +209,36 @@ static int ethtool_get_drvinfo(struct net_device *dev, void __user *useraddr)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ethtool_set_rxhash(struct net_device *dev, void __user *useraddr)
|
||||
{
|
||||
struct ethtool_rxnfc cmd;
|
||||
|
||||
if (!dev->ethtool_ops->set_rxhash)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (copy_from_user(&cmd, useraddr, sizeof(cmd)))
|
||||
return -EFAULT;
|
||||
|
||||
return dev->ethtool_ops->set_rxhash(dev, &cmd);
|
||||
}
|
||||
|
||||
static int ethtool_get_rxhash(struct net_device *dev, void __user *useraddr)
|
||||
{
|
||||
struct ethtool_rxnfc info;
|
||||
|
||||
if (!dev->ethtool_ops->get_rxhash)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (copy_from_user(&info, useraddr, sizeof(info)))
|
||||
return -EFAULT;
|
||||
|
||||
dev->ethtool_ops->get_rxhash(dev, &info);
|
||||
|
||||
if (copy_to_user(useraddr, &info, sizeof(info)))
|
||||
return -EFAULT;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ethtool_get_regs(struct net_device *dev, char __user *useraddr)
|
||||
{
|
||||
struct ethtool_regs regs;
|
||||
@ -826,6 +856,7 @@ int dev_ethtool(struct net *net, struct ifreq *ifr)
|
||||
case ETHTOOL_GGSO:
|
||||
case ETHTOOL_GFLAGS:
|
||||
case ETHTOOL_GPFLAGS:
|
||||
case ETHTOOL_GRXFH:
|
||||
break;
|
||||
default:
|
||||
if (!capable(CAP_NET_ADMIN))
|
||||
@ -977,6 +1008,12 @@ int dev_ethtool(struct net *net, struct ifreq *ifr)
|
||||
rc = ethtool_set_value(dev, useraddr,
|
||||
dev->ethtool_ops->set_priv_flags);
|
||||
break;
|
||||
case ETHTOOL_GRXFH:
|
||||
rc = ethtool_get_rxhash(dev, useraddr);
|
||||
break;
|
||||
case ETHTOOL_SRXFH:
|
||||
rc = ethtool_set_rxhash(dev, useraddr);
|
||||
break;
|
||||
default:
|
||||
rc = -EOPNOTSUPP;
|
||||
}
|
||||
|
Reference in New Issue
Block a user