Commit 31a82362 authored by Feras Daoud's avatar Feras Daoud Committed by Doug Ledford

IB/ipoib: Enable ioctl for to IPoIB rdma netdevs

Adds support for ioctl callback in the RDMA netdevs to allow
supporting functions not handled by the generic interface code.
Signed-off-by: default avatarFeras Daoud <ferasda@mellanox.com>
Signed-off-by: default avatarEitan Rabin <rabin@mellanox.com>
Signed-off-by: default avatarLeon Romanovsky <leon@kernel.org>
Reviewed-by: default avatarYuval Shaia <yuval.shaia@oracle.com>
Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
parent 732912c7
...@@ -99,6 +99,8 @@ static struct net_device *ipoib_get_net_dev_by_params( ...@@ -99,6 +99,8 @@ static struct net_device *ipoib_get_net_dev_by_params(
const union ib_gid *gid, const struct sockaddr *addr, const union ib_gid *gid, const struct sockaddr *addr,
void *client_data); void *client_data);
static int ipoib_set_mac(struct net_device *dev, void *addr); static int ipoib_set_mac(struct net_device *dev, void *addr);
static int ipoib_ioctl(struct net_device *dev, struct ifreq *ifr,
int cmd);
static struct ib_client ipoib_client = { static struct ib_client ipoib_client = {
.name = "ipoib", .name = "ipoib",
...@@ -1680,6 +1682,17 @@ static int ipoib_dev_init_default(struct net_device *dev) ...@@ -1680,6 +1682,17 @@ static int ipoib_dev_init_default(struct net_device *dev)
return -ENOMEM; return -ENOMEM;
} }
static int ipoib_ioctl(struct net_device *dev, struct ifreq *ifr,
int cmd)
{
struct ipoib_dev_priv *priv = ipoib_priv(dev);
if (!priv->rn_ops->ndo_do_ioctl)
return -EOPNOTSUPP;
return priv->rn_ops->ndo_do_ioctl(dev, ifr, cmd);
}
int ipoib_dev_init(struct net_device *dev, struct ib_device *ca, int port) int ipoib_dev_init(struct net_device *dev, struct ib_device *ca, int port)
{ {
struct ipoib_dev_priv *priv = ipoib_priv(dev); struct ipoib_dev_priv *priv = ipoib_priv(dev);
...@@ -1834,6 +1847,7 @@ static const struct net_device_ops ipoib_netdev_ops_pf = { ...@@ -1834,6 +1847,7 @@ static const struct net_device_ops ipoib_netdev_ops_pf = {
.ndo_set_vf_guid = ipoib_set_vf_guid, .ndo_set_vf_guid = ipoib_set_vf_guid,
.ndo_set_mac_address = ipoib_set_mac, .ndo_set_mac_address = ipoib_set_mac,
.ndo_get_stats64 = ipoib_get_stats, .ndo_get_stats64 = ipoib_get_stats,
.ndo_do_ioctl = ipoib_ioctl,
}; };
static const struct net_device_ops ipoib_netdev_ops_vf = { static const struct net_device_ops ipoib_netdev_ops_vf = {
...@@ -1847,6 +1861,7 @@ static const struct net_device_ops ipoib_netdev_ops_vf = { ...@@ -1847,6 +1861,7 @@ static const struct net_device_ops ipoib_netdev_ops_vf = {
.ndo_set_rx_mode = ipoib_set_mcast_list, .ndo_set_rx_mode = ipoib_set_mcast_list,
.ndo_get_iflink = ipoib_get_iflink, .ndo_get_iflink = ipoib_get_iflink,
.ndo_get_stats64 = ipoib_get_stats, .ndo_get_stats64 = ipoib_get_stats,
.ndo_do_ioctl = ipoib_ioctl,
}; };
void ipoib_setup_common(struct net_device *dev) void ipoib_setup_common(struct net_device *dev)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment