summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorViacheslav Ovsiienko <viacheslavo@mellanox.com>2019-03-27 13:15:36 +0000
committerFerruh Yigit <ferruh.yigit@intel.com>2019-03-29 17:25:32 +0100
commite505508a385826f2731cae825a332af122e9b783 (patch)
treef1a7e2b8c15bc1c8fa1f5a769c3020d2c81b50a6
parent299d7dc28c37afc459a802f6f1ef9ece9f9c0a0c (diff)
downloaddpdk-next-eventdev-e505508a385826f2731cae825a332af122e9b783.zip
dpdk-next-eventdev-e505508a385826f2731cae825a332af122e9b783.tar.gz
dpdk-next-eventdev-e505508a385826f2731cae825a332af122e9b783.tar.xz
net/mlx5: modify get ifindex routine for multiport IB
There is the routine mlx5_nl_ifindex() returning the network interface index associated with Infiniband device. We are going to support multiport IB devices, now function takes the IB port as argument and returns ifindex associated with tuple <IB device, IB port> Signed-off-by: Viacheslav Ovsiienko <viacheslavo@mellanox.com> Acked-by: Shahaf Shuler <shahafs@mellanox.com>
-rw-r--r--drivers/net/mlx5/mlx5.c2
-rw-r--r--drivers/net/mlx5/mlx5.h2
-rw-r--r--drivers/net/mlx5/mlx5_ethdev.c2
-rw-r--r--drivers/net/mlx5/mlx5_nl.c20
4 files changed, 16 insertions, 10 deletions
diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c
index 6641133..9d0b129 100644
--- a/drivers/net/mlx5/mlx5.c
+++ b/drivers/net/mlx5/mlx5.c
@@ -1434,7 +1434,7 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
list[i].ifindex = 0;
else
list[i].ifindex = mlx5_nl_ifindex
- (nl_rdma, list[i].ibv_dev->name);
+ (nl_rdma, list[i].ibv_dev->name, 1);
if (nl_route < 0 ||
!list[i].ifindex ||
mlx5_nl_switch_info(nl_route, list[i].ifindex,
diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h
index 70a611f..befe0ec 100644
--- a/drivers/net/mlx5/mlx5.h
+++ b/drivers/net/mlx5/mlx5.h
@@ -422,7 +422,7 @@ void mlx5_nl_mac_addr_sync(struct rte_eth_dev *dev);
void mlx5_nl_mac_addr_flush(struct rte_eth_dev *dev);
int mlx5_nl_promisc(struct rte_eth_dev *dev, int enable);
int mlx5_nl_allmulti(struct rte_eth_dev *dev, int enable);
-unsigned int mlx5_nl_ifindex(int nl, const char *name);
+unsigned int mlx5_nl_ifindex(int nl, const char *name, uint32_t pindex);
int mlx5_nl_switch_info(int nl, unsigned int ifindex,
struct mlx5_switch_info *info);
diff --git a/drivers/net/mlx5/mlx5_ethdev.c b/drivers/net/mlx5/mlx5_ethdev.c
index 933839c..2b83898 100644
--- a/drivers/net/mlx5/mlx5_ethdev.c
+++ b/drivers/net/mlx5/mlx5_ethdev.c
@@ -222,7 +222,7 @@ mlx5_get_ifname(const struct rte_eth_dev *dev, char (*ifname)[IF_NAMESIZE])
struct mlx5_priv *priv = dev->data->dev_private;
unsigned int ifindex =
priv->nl_socket_rdma >= 0 ?
- mlx5_nl_ifindex(priv->nl_socket_rdma, priv->ibdev_name) : 0;
+ mlx5_nl_ifindex(priv->nl_socket_rdma, priv->ibdev_name, 1) : 0;
if (!ifindex) {
if (!priv->representor)
diff --git a/drivers/net/mlx5/mlx5_nl.c b/drivers/net/mlx5/mlx5_nl.c
index 58bbfed..4209801 100644
--- a/drivers/net/mlx5/mlx5_nl.c
+++ b/drivers/net/mlx5/mlx5_nl.c
@@ -85,11 +85,12 @@ struct mlx5_nl_mac_addr {
int mac_n; /**< Number of addresses in the array. */
};
-/** Data structure used by mlx5_nl_ifindex_cb(). */
+/** Data structure used by mlx5_nl_cmdget_cb(). */
struct mlx5_nl_ifindex_data {
const char *name; /**< IB device name (in). */
uint32_t ibindex; /**< IB device index (out). */
uint32_t ifindex; /**< Network interface index (out). */
+ uint32_t portnum; /**< IB device max port number. */
};
/**
@@ -695,12 +696,13 @@ mlx5_nl_allmulti(struct rte_eth_dev *dev, int enable)
* 0 on success, a negative errno value otherwise and rte_errno is set.
*/
static int
-mlx5_nl_ifindex_cb(struct nlmsghdr *nh, void *arg)
+mlx5_nl_cmdget_cb(struct nlmsghdr *nh, void *arg)
{
struct mlx5_nl_ifindex_data *data = arg;
size_t off = NLMSG_HDRLEN;
uint32_t ibindex = 0;
uint32_t ifindex = 0;
+ uint32_t portnum = 0;
int found = 0;
if (nh->nlmsg_type !=
@@ -725,6 +727,9 @@ mlx5_nl_ifindex_cb(struct nlmsghdr *nh, void *arg)
case RDMA_NLDEV_ATTR_NDEV_INDEX:
ifindex = *(uint32_t *)payload;
break;
+ case RDMA_NLDEV_ATTR_PORT_INDEX:
+ portnum = *(uint32_t *)payload;
+ break;
default:
break;
}
@@ -733,6 +738,7 @@ mlx5_nl_ifindex_cb(struct nlmsghdr *nh, void *arg)
if (found) {
data->ibindex = ibindex;
data->ifindex = ifindex;
+ data->portnum = portnum;
}
return 0;
error:
@@ -751,15 +757,15 @@ error:
* Netlink socket of the RDMA kind (NETLINK_RDMA).
* @param[in] name
* IB device name.
- *
+ * @param[in] pindex
+ * IB device port index, starting from 1
* @return
* A valid (nonzero) interface index on success, 0 otherwise and rte_errno
* is set.
*/
unsigned int
-mlx5_nl_ifindex(int nl, const char *name)
+mlx5_nl_ifindex(int nl, const char *name, uint32_t pindex)
{
- static const uint32_t pindex = 1;
uint32_t seq = random();
struct mlx5_nl_ifindex_data data = {
.name = name,
@@ -785,7 +791,7 @@ mlx5_nl_ifindex(int nl, const char *name)
ret = mlx5_nl_send(nl, &req.nh, seq);
if (ret < 0)
return 0;
- ret = mlx5_nl_recv(nl, seq, mlx5_nl_ifindex_cb, &data);
+ ret = mlx5_nl_recv(nl, seq, mlx5_nl_cmdget_cb, &data);
if (ret < 0)
return 0;
if (!data.ibindex)
@@ -808,7 +814,7 @@ mlx5_nl_ifindex(int nl, const char *name)
ret = mlx5_nl_send(nl, &req.nh, seq);
if (ret < 0)
return 0;
- ret = mlx5_nl_recv(nl, seq, mlx5_nl_ifindex_cb, &data);
+ ret = mlx5_nl_recv(nl, seq, mlx5_nl_cmdget_cb, &data);
if (ret < 0)
return 0;
if (!data.ifindex)