[dpdk-dev] [PATCH 03/14] net/mlx5: modify get ifindex routine for multiport IB
Shahaf Shuler
shahafs at mellanox.com
Thu Mar 21 13:14:16 CET 2019
Thursday, March 21, 2019 10:11 AM, Viacheslav Ovsiienko:
> Subject: [PATCH 03/14] 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 at mellanox.com>
> ---
> drivers/net/mlx5/mlx5.c | 2 +-
> drivers/net/mlx5/mlx5.h | 2 +-
> drivers/net/mlx5/mlx5_ethdev.c | 2 +-
> drivers/net/mlx5/mlx5_nl.c | 20 +++++++++++++-------
> 4 files changed, 16 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c index
> ea3d00c..89c30af 100644
> --- a/drivers/net/mlx5/mlx5.c
> +++ b/drivers/net/mlx5/mlx5.c
> @@ -1441,7 +1441,7 @@ struct mlx5_dev_spawn_data {
> 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);
Why hardcoded to 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
> 1716cd1..f5e29ca 100644
> --- a/drivers/net/mlx5/mlx5.h
> +++ b/drivers/net/mlx5/mlx5.h
> @@ -470,7 +470,7 @@ int mlx5_nl_mac_addr_remove(struct rte_eth_dev
> *dev, struct ether_addr *mac, 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 81f2a42..5b44889 100644
> --- a/drivers/net/mlx5/mlx5_ethdev.c
> +++ b/drivers/net/mlx5/mlx5_ethdev.c
> @@ -222,7 +222,7 @@ struct ethtool_link_settings {
> 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
> aa49cb4..6e9145a 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. */
What happen w/ old kernel which don't support it? the portnum is ignored?
> };
>
> /**
> @@ -695,12 +696,13 @@ struct mlx5_nl_ifindex_data {
> * 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 @@ struct mlx5_nl_ifindex_data {
> 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 @@ struct mlx5_nl_ifindex_data {
> if (found) {
> data->ibindex = ibindex;
> data->ifindex = ifindex;
> + data->portnum = portnum;
> }
> return 0;
> error:
> @@ -751,15 +757,15 @@ struct mlx5_nl_ifindex_data {
> * 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 @@ struct mlx5_nl_ifindex_data {
> 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 @@ struct mlx5_nl_ifindex_data {
> 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)
> --
> 1.8.3.1
More information about the dev
mailing list