Extend mlx5_nl_netdev_info_get() to gather Linux netdev's parent device and bus name. This will be used in follow up patches to match probed additional rte_device related to single mlx5 common device.
Signed-off-by: Dariusz Sosnowski <[email protected]> Acked-by: Viacheslav Ovsiienko <[email protected]> --- drivers/common/mlx5/linux/meson.build | 4 ++++ drivers/common/mlx5/linux/mlx5_nl.c | 24 ++++++++++++++++++++++++ drivers/common/mlx5/linux/mlx5_nl.h | 10 ++++++++++ 3 files changed, 38 insertions(+) diff --git a/drivers/common/mlx5/linux/meson.build b/drivers/common/mlx5/linux/meson.build index 3767e7a69b..1b2104b48e 100644 --- a/drivers/common/mlx5/linux/meson.build +++ b/drivers/common/mlx5/linux/meson.build @@ -154,6 +154,10 @@ has_sym_args = [ 'IFLA_PHYS_SWITCH_ID' ], [ 'HAVE_IFLA_PHYS_PORT_NAME', 'linux/if_link.h', 'IFLA_PHYS_PORT_NAME' ], + [ 'HAVE_IFLA_PARENT_DEV_NAME', 'linux/if_link.h', + 'IFLA_PARENT_DEV_NAME' ], + [ 'HAVE_IFLA_PARENT_DEV_BUS_NAME', 'linux/if_link.h', + 'IFLA_PARENT_DEV_BUS_NAME' ], [ 'HAVE_RDMA_NL_NLDEV', 'rdma/rdma_netlink.h', 'RDMA_NL_NLDEV' ], [ 'HAVE_RDMA_NLDEV_CMD_GET', 'rdma/rdma_netlink.h', diff --git a/drivers/common/mlx5/linux/mlx5_nl.c b/drivers/common/mlx5/linux/mlx5_nl.c index eafae78883..4eebec5223 100644 --- a/drivers/common/mlx5/linux/mlx5_nl.c +++ b/drivers/common/mlx5/linux/mlx5_nl.c @@ -113,6 +113,12 @@ #ifndef HAVE_IFLA_PHYS_PORT_NAME #define IFLA_PHYS_PORT_NAME 38 #endif +#ifndef HAVE_IFLA_PARENT_DEV_NAME +#define IFLA_PARENT_DEV_NAME 56 +#endif +#ifndef HAVE_IFLA_PARENT_DEV_BUS_NAME +#define IFLA_PARENT_DEV_BUS_NAME 57 +#endif /* * Some Devlink defines may be missed in old kernel versions, @@ -1427,6 +1433,24 @@ mlx5_nl_netdev_info_cb(struct nlmsghdr *nh, void *arg) } info.flags |= MLX5_NETDEV_INFO_FLAG_PHYS_SWITCH_ID; break; + case IFLA_PARENT_DEV_NAME: + payload_len = RTA_PAYLOAD(ra); + /* Some kernels do not pad attributes with zero. */ + if (payload_len > 0 && payload_len < MLX5_PARENT_DEV_NAME_MAX) { + memcpy(info.parent_dev_name, payload, payload_len); + info.parent_dev_name[payload_len] = '\0'; + info.flags |= MLX5_NETDEV_INFO_FLAG_PARENT_DEV_NAME; + } + break; + case IFLA_PARENT_DEV_BUS_NAME: + payload_len = RTA_PAYLOAD(ra); + /* Some kernels do not pad attributes with zero. */ + if (payload_len > 0 && payload_len < MLX5_PARENT_DEV_BUS_NAME_MAX) { + memcpy(info.parent_dev_bus_name, payload, payload_len); + info.parent_dev_bus_name[payload_len] = '\0'; + info.flags |= MLX5_NETDEV_INFO_FLAG_PARENT_DEV_BUS_NAME; + } + break; } } *out = info; diff --git a/drivers/common/mlx5/linux/mlx5_nl.h b/drivers/common/mlx5/linux/mlx5_nl.h index 6446df1812..39691569bc 100644 --- a/drivers/common/mlx5/linux/mlx5_nl.h +++ b/drivers/common/mlx5/linux/mlx5_nl.h @@ -56,9 +56,17 @@ struct mlx5_nl_port_info { /* Maximal physical port name length. */ #define MLX5_PHYS_PORT_NAME_MAX 128 +/* Maximum length of parent device name. */ +#define MLX5_PARENT_DEV_NAME_MAX 128 + +/* Maximum length of parent device bus name. */ +#define MLX5_PARENT_DEV_BUS_NAME_MAX 128 + #define MLX5_NETDEV_INFO_FLAG_NUM_VF RTE_BIT32(0) #define MLX5_NETDEV_INFO_FLAG_PHYS_PORT_NAME RTE_BIT32(1) #define MLX5_NETDEV_INFO_FLAG_PHYS_SWITCH_ID RTE_BIT32(2) +#define MLX5_NETDEV_INFO_FLAG_PARENT_DEV_NAME RTE_BIT32(3) +#define MLX5_NETDEV_INFO_FLAG_PARENT_DEV_BUS_NAME RTE_BIT32(4) struct mlx5_netdev_info { unsigned int ifindex; /* [in] */ @@ -66,6 +74,8 @@ struct mlx5_netdev_info { uint32_t num_vf; /* [out] */ char phys_port_name[MLX5_PHYS_PORT_NAME_MAX]; /* [out] */ uint64_t phys_switch_id; /* [out] */ + char parent_dev_name[MLX5_PARENT_DEV_NAME_MAX]; /* [out] */ + char parent_dev_bus_name[MLX5_PARENT_DEV_BUS_NAME_MAX]; /* [out] */ }; __rte_internal -- 2.43.0

