Print netdevice names and indexes for relevant RDMA devices
Subsystems (3)
cover Print netdevice names and indexes for relevant RDMA devices
From: Leon Romanovsky <[email protected]>
Hi,
This is user space part of the kernel patch [1], which exposed net device name and index through RDMA netlink interface.
First patch is actually updates rdma_netlink.h to the latest kernel variant, while second patch implements the print.
[1] https://patchwork.kernel.org/patch/10307339/
Leon Romanovsky (2):
rdma: Update RDMA header file
rdma: Print net device name and index for RDMA device
rdma/include/uapi/rdma/rdma_netlink.h | 42 +++++++++++++++++++++++++++++++++++ rdma/link.c | 21 ++++++++++++++++++ rdma/utils.c | 2 ++ 3 files changed, 65 insertions(+)
PATCH 1/2 rdma: Update RDMA header file
From: Leon Romanovsky <[email protected]>
Update RDMA netlink header file to kernel commit 29cf1351d450 ("RDMA/nldev: provide detailed PD information")
--- rdma/include/uapi/rdma/rdma_netlink.h | 38 +++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+)
rdma/include/uapi/rdma/rdma_netlink.h +38 -0
@@ -238,6 +238,14 @@ enum rdma_nldev_command {RDMA_NLDEV_CMD_RES_QP_GET ,/* can dump */ +RDMA_NLDEV_CMD_RES_CM_ID_GET ,/* can dump */ + +RDMA_NLDEV_CMD_RES_CQ_GET ,/* can dump */ + +RDMA_NLDEV_CMD_RES_MR_GET ,/* can dump */ + +RDMA_NLDEV_CMD_RES_PD_GET ,/* can dump */ + RDMA_NLDEV_NUM_OPS };
@@ -350,6 +358,36 @@ enum rdma_nldev_attr {*/ RDMA_NLDEV_ATTR_RES_KERN_NAME ,/* string */ +RDMA_NLDEV_ATTR_RES_CM_ID ,/* nested table */ +RDMA_NLDEV_ATTR_RES_CM_ID_ENTRY ,/* nested table */ +/* +* rdma_cm_id port space. +*/ +RDMA_NLDEV_ATTR_RES_PS ,/* u32 */ +/* +* Source and destination socket addresses +*/ +RDMA_NLDEV_ATTR_RES_SRC_ADDR ,/* __kernel_sockaddr_storage */ +RDMA_NLDEV_ATTR_RES_DST_ADDR ,/* __kernel_sockaddr_storage */ + +RDMA_NLDEV_ATTR_RES_CQ ,/* nested table */ +RDMA_NLDEV_ATTR_RES_CQ_ENTRY ,/* nested table */ +RDMA_NLDEV_ATTR_RES_CQE ,/* u32 */ +RDMA_NLDEV_ATTR_RES_USECNT ,/* u64 */ +RDMA_NLDEV_ATTR_RES_POLL_CTX ,/* u8 */ + +RDMA_NLDEV_ATTR_RES_MR ,/* nested table */ +RDMA_NLDEV_ATTR_RES_MR_ENTRY ,/* nested table */ +RDMA_NLDEV_ATTR_RES_RKEY ,/* u32 */ +RDMA_NLDEV_ATTR_RES_LKEY ,/* u32 */ +RDMA_NLDEV_ATTR_RES_IOVA ,/* u64 */ +RDMA_NLDEV_ATTR_RES_MRLEN ,/* u64 */ + +RDMA_NLDEV_ATTR_RES_PD ,/* nested table */ +RDMA_NLDEV_ATTR_RES_PD_ENTRY ,/* nested table */ +RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY ,/* u32 */ +RDMA_NLDEV_ATTR_RES_UNSAFE_GLOBAL_RKEY ,/* u32 */ +RDMA_NLDEV_ATTR_MAX };#endif /* _RDMA_NETLINK_H */
PATCH 2/2 rdma: Print net device name and index for RDMA device
In reply to Leon RomanovskyFrom: Leon Romanovsky <[email protected]>
The RDMA devices are operated in RoCE and iWARP modes have net device underneath. Present their names in regular output and their net index in detailed mode.
[root@nps ~]# rdma link show mlx5_3/1
4/1: mlx5_3/1: state ACTIVE physical_state LINK_UP netdev ens7 [root@nps ~]# rdma link show mlx5_3/1 -d
4/1: mlx5_3/1: state ACTIVE physical_state LINK_UP netdev ens7 netdev_index 7
caps: <CM, IP_BASED_GIDS>
--- rdma/include/uapi/rdma/rdma_netlink.h | 4 ++++ rdma/link.c | 21 +++++++++++++++++++++ rdma/utils.c | 2 ++ 3 files changed, 27 insertions(+)
rdma/include/uapi/rdma/rdma_netlink.h +4 -0
@@ -388,6 +388,10 @@ enum rdma_nldev_attr {RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY ,/* u32 */ RDMA_NLDEV_ATTR_RES_UNSAFE_GLOBAL_RKEY ,/* u32 */ +/* Netdev information for relevant protocols, like RoCE and iWARP */ +RDMA_NLDEV_ATTR_NDEV_INDEX ,/* u32 */ +RDMA_NLDEV_ATTR_NDEV_NAME ,/* string */ +RDMA_NLDEV_ATTR_MAX };#endif /* _RDMA_NETLINK_H */
rdma/link.c +21 -0
@@ -205,6 +205,26 @@ static void link_print_phys_state(struct rd *rd, struct nlattr **tb)pr_out ("physical_state %s " ,phys_state_to_str (phys_state)); } +static void link_print_netdev (struct rd *rd,struct nlattr **tb) +{ +const char *netdev_name; +uint32_t idx; + +if (!tb[RDMA_NLDEV_ATTR_NDEV_NAME ] || !tb[RDMA_NLDEV_ATTR_NDEV_INDEX ]) +return ; + + netdev_name =mnl_attr_get_str (tb[RDMA_NLDEV_ATTR_NDEV_NAME ]); + idx =mnl_attr_get_u32 (tb[RDMA_NLDEV_ATTR_NDEV_INDEX ]); +if (rd->json_output) { +jsonw_string_field (rd->jw,"netdev" , netdev_name); +jsonw_uint_field (rd->jw,"netdev_index" , idx); + }else { +pr_out ("netdev %s " , netdev_name); +if (rd->show_details) +pr_out ("netdev_index %u " , idx); + } +} +static int link_parse_cb (const struct nlmsghdr *nlh,void *data) {struct nlattr *tb[RDMA_NLDEV_ATTR_MAX ] = {};
@@ -241,6 +261,7 @@ static int link_parse_cb(const struct nlmsghdr *nlh, void *data)link_print_lmc (rd, tb);link_print_state (rd, tb);link_print_phys_state (rd, tb); +link_print_netdev (rd, tb);if (rd->show_details)link_print_caps (rd, tb);
rdma/utils.c +2 -0
@@ -375,6 +375,8 @@ static const enum mnl_attr_data_type nldev_policy[RDMA_NLDEV_ATTR_MAX] = { [RDMA_NLDEV_ATTR_RES_STATE] = MNL_TYPE_U8, [RDMA_NLDEV_ATTR_RES_PID] = MNL_TYPE_U32, [RDMA_NLDEV_ATTR_RES_KERN_NAME] = MNL_TYPE_NUL_STRING, + [RDMA_NLDEV_ATTR_NDEV_INDEX] = MNL_TYPE_U32, + [RDMA_NLDEV_ATTR_NDEV_NAME] = MNL_TYPE_NUL_STRING, };int rd_attr_cb (const struct nlattr *attr,void *data)
Re: [PATCH iproute2-next 2/2] rdma: Print net device name and index for RDMA device
Quoted 5 lines · Leon Romanovsky
rdma/include/uapi/rdma/rdma_netlink.h +0
-0
rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_attr { · line 397
Quoted 10 lines
rdma/include/uapi/rdma/rdma_netlink.h +4
-0@@ -388,6 +388,10 @@ enum rdma_nldev_attr {RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY ,/* u32 */ RDMA_NLDEV_ATTR_RES_UNSAFE_GLOBAL_RKEY ,/* u32 */ +/* Netdev information for relevant protocols, like RoCE and iWARP */ +RDMA_NLDEV_ATTR_NDEV_INDEX ,/* u32 */ +RDMA_NLDEV_ATTR_NDEV_NAME ,/* string */ +RDMA_NLDEV_ATTR_MAX };#endif /* _RDMA_NETLINK_H */
Why wasn't the above included in patch 1 as part of the header file update?
Re: [PATCH iproute2-next 2/2] rdma: Print net device name and index for RDMA device
Quoted 9 lines · David Ahern
Quoted 8 lines · Leon Romanovsky
rdma/include/uapi/rdma/rdma_netlink.h +0
-0@@ -388,6 +388,10 @@ enum rdma_nldev_attr {RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY ,/* u32 */ RDMA_NLDEV_ATTR_RES_UNSAFE_GLOBAL_RKEY, /* u32 */
Quoted 11 lines
rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_attr { · line 397
Quoted 7 lines
rdma/include/uapi/rdma/rdma_netlink.h +4
-0+/* Netdev information for relevant protocols, like RoCE and iWARP */ +RDMA_NLDEV_ATTR_NDEV_INDEX ,/* u32 */ +RDMA_NLDEV_ATTR_NDEV_NAME ,/* string */ +RDMA_NLDEV_ATTR_MAX };#endif /* _RDMA_NETLINK_H */ Why wasn't the above included in patch 1 as part of the header file update?
Kernel part is not accepted yet, this is why I separated them.
Thanks
Re: [PATCH iproute2-next 2/2] rdma: Print net device name and index for RDMA device
In reply to Leon RomanovskyQuoted 52 lines · Leon Romanovsky
From: Leon Romanovsky <[email protected]>
The RDMA devices are operated in RoCE and iWARP modes have net device underneath. Present their names in regular output and their net index in detailed mode.
[root@nps ~]# rdma link show mlx5_3/1
4/1: mlx5_3/1: state ACTIVEphysical_stateLINK_UPnetdev ens7 [root@nps ~]# rdma link show mlx5_3/1 -d
4/1: mlx5_3/1: state ACTIVEphysical_stateLINK_UPnetdev ens7netdev_index7
caps: <CM,IP_BASED_GIDS>Signed-off-by Leon Romanovsky <[email protected]>--- rdma/include/uapi/rdma/rdma_netlink.h | 4 ++++ rdma/link.c | 21 +++++++++++++++++++++ rdma/utils.c | 2 ++ 3 files changed, 27 insertions(+)rdma/include/uapi/rdma/rdma_netlink.h +4
-0@@ -388,6 +388,10 @@ enum rdma_nldev_attr {RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY ,/* u32 */ RDMA_NLDEV_ATTR_RES_UNSAFE_GLOBAL_RKEY ,/* u32 */ +/* Netdev information for relevant protocols, like RoCE and iWARP */ +RDMA_NLDEV_ATTR_NDEV_INDEX ,/* u32 */ +RDMA_NLDEV_ATTR_NDEV_NAME ,/* string */ +RDMA_NLDEV_ATTR_MAX };#endif /* _RDMA_NETLINK_H */ rdma/link.c +10
-0@@ -205,6 +205,26 @@ static void link_print_phys_state(struct rd *rd, struct nlattr **tb)pr_out ("physical_state %s " ,phys_state_to_str (phys_state)); } +static void link_print_netdev (struct rd *rd,struct nlattr **tb) +{ +const char *netdev_name; +uint32_t idx; + +if (!tb[RDMA_NLDEV_ATTR_NDEV_NAME ] || !tb[RDMA_NLDEV_ATTR_NDEV_INDEX ]) +return ; + + netdev_name =mnl_attr_get_str (tb[RDMA_NLDEV_ATTR_NDEV_NAME ]); + idx =mnl_attr_get_u32 (tb[RDMA_NLDEV_ATTR_NDEV_INDEX ]);
rdma/link.c static void link_print_phys_state(struct rd *rd, struct nlattr **tb) · line 227
Quoted 10 lines
rdma/link.c +10
-0+if (rd->json_output) { +jsonw_string_field (rd->jw,"netdev" , netdev_name); +jsonw_uint_field (rd->jw,"netdev_index" , idx); + }else { +pr_out ("netdev %s " , netdev_name); +if (rd->show_details) +pr_out ("netdev_index %u " , idx); + } +} +
Why is the netdev_index under 'show_details'?
Quoted 31 lines
rdma/link.c +1
-0static int link_parse_cb (const struct nlmsghdr *nlh,void *data) {struct nlattr *tb[RDMA_NLDEV_ATTR_MAX ] = {};@@ -241,6 +261,7 @@ static int link_parse_cb(const struct nlmsghdr *nlh, void *data)link_print_lmc (rd, tb);link_print_state (rd, tb);link_print_phys_state (rd, tb); +link_print_netdev (rd, tb);if (rd->show_details)link_print_caps (rd, tb);rdma/utils.c +2
-1@@ -375,6 +375,8 @@ static const enum mnl_attr_data_type nldev_policy[RDMA_NLDEV_ATTR_MAX] = { [RDMA_NLDEV_ATTR_RES_STATE] = MNL_TYPE_U8, [RDMA_NLDEV_ATTR_RES_PID] = MNL_TYPE_U32, [RDMA_NLDEV_ATTR_RES_KERN_NAME] = MNL_TYPE_NUL_STRING, + [RDMA_NLDEV_ATTR_NDEV_INDEX] = MNL_TYPE_U32, + [RDMA_NLDEV_ATTR_NDEV_NAME] = MNL_TYPE_NUL_STRING, };int rd_attr_cb (const struct nlattr *attr,void *data) --2.14.3
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH iproute2-next 2/2] rdma: Print net device name and index for RDMA device
In reply to Leon RomanovskyQuoted 22 lines · Leon Romanovsky
Quoted 9 lines · David Ahern
Quoted 8 lines · Leon Romanovsky
rdma/include/uapi/rdma/rdma_netlink.h +0
-0@@ -388,6 +388,10 @@ enum rdma_nldev_attr {RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY ,/* u32 */ RDMA_NLDEV_ATTR_RES_UNSAFE_GLOBAL_RKEY, /* u32 */Quoted 11 lines
rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_attr { · line 397
Quoted 7 lines
rdma/include/uapi/rdma/rdma_netlink.h +4
-0+/* Netdev information for relevant protocols, like RoCE and iWARP */ +RDMA_NLDEV_ATTR_NDEV_INDEX ,/* u32 */ +RDMA_NLDEV_ATTR_NDEV_NAME ,/* string */ +RDMA_NLDEV_ATTR_MAX };#endif /* _RDMA_NETLINK_H */ Why wasn't the above included in patch 1 as part of the header file update?
Quoted 2 lines
Kernel part is not accepted yet, this is why I separated them.
Please don't mix patches in a set like this. The entire set should be consistent -- either all of them are in the kernel or all of them are waiting to be committed.
Re: [PATCH iproute2-next 2/2] rdma: Print net device name and index for RDMA device
Quoted 23 lines · David Ahern
Quoted 22 lines · Leon Romanovsky
Quoted 20 lines · David Ahern
Quoted 5 lines · Leon Romanovsky
rdma/include/uapi/rdma/rdma_netlink.h +0
-0rdma/include/uapi/rdma/rdma_netlink.h enum rdma_nldev_attr { · line 397
Quoted 10 lines
rdma/include/uapi/rdma/rdma_netlink.h +4
-0@@ -388,6 +388,10 @@ enum rdma_nldev_attr {RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY ,/* u32 */ RDMA_NLDEV_ATTR_RES_UNSAFE_GLOBAL_RKEY ,/* u32 */ +/* Netdev information for relevant protocols, like RoCE and iWARP */ +RDMA_NLDEV_ATTR_NDEV_INDEX ,/* u32 */ +RDMA_NLDEV_ATTR_NDEV_NAME ,/* string */ +RDMA_NLDEV_ATTR_MAX };#endif /* _RDMA_NETLINK_H */ Why wasn't the above included in patch 1 as part of the header file update?
Quoted 5 lines
Quoted 2 lines
Kernel part is not accepted yet, this is why I separated them.
Please don't mix patches in a set like this. The entire set should be consistent -- either all of them are in the kernel or all of them are waiting to be committed.
Ok, I'll do.
Re: [PATCH iproute2-next 2/2] rdma: Print net device name and index for RDMA device
In reply to Steve WiseQuoted 59 lines · Steve Wise
Quoted 56 lines · Leon Romanovsky
From: Leon Romanovsky <[email protected]>
The RDMA devices are operated in RoCE and iWARP modes have net device underneath. Present their names in regular output and their net index in detailed mode.
[root@nps ~]# rdma link show mlx5_3/1
4/1: mlx5_3/1: state ACTIVEphysical_stateLINK_UPnetdev ens7 [root@nps ~]# rdma link show mlx5_3/1 -d
4/1: mlx5_3/1: state ACTIVEphysical_stateLINK_UPnetdev ens7netdev_index7
caps: <CM,IP_BASED_GIDS>Signed-off-by Leon Romanovsky <[email protected]>--- rdma/include/uapi/rdma/rdma_netlink.h | 4 ++++ rdma/link.c | 21 +++++++++++++++++++++ rdma/utils.c | 2 ++ 3 files changed, 27 insertions(+)rdma/include/uapi/rdma/rdma_netlink.h +4
-0@@ -388,6 +388,10 @@ enum rdma_nldev_attr {RDMA_NLDEV_ATTR_RES_LOCAL_DMA_LKEY ,/* u32 */ RDMA_NLDEV_ATTR_RES_UNSAFE_GLOBAL_RKEY ,/* u32 */ +/* Netdev information for relevant protocols, like RoCE and iWARP */ +RDMA_NLDEV_ATTR_NDEV_INDEX ,/* u32 */ +RDMA_NLDEV_ATTR_NDEV_NAME ,/* string */ +RDMA_NLDEV_ATTR_MAX };#endif /* _RDMA_NETLINK_H */ rdma/link.c +14
-0@@ -205,6 +205,26 @@ static void link_print_phys_state(struct rd *rd, struct nlattr **tb)pr_out ("physical_state %s " ,phys_state_to_str (phys_state)); } +static void link_print_netdev (struct rd *rd,struct nlattr **tb) +{ +const char *netdev_name; +uint32_t idx; + +if (!tb[RDMA_NLDEV_ATTR_NDEV_NAME ] || !tb[RDMA_NLDEV_ATTR_NDEV_INDEX ]) +return ; + + netdev_name =mnl_attr_get_str (tb[RDMA_NLDEV_ATTR_NDEV_NAME ]); + idx =mnl_attr_get_u32 (tb[RDMA_NLDEV_ATTR_NDEV_INDEX ]); +if (rd->json_output) { +jsonw_string_field (rd->jw,"netdev" , netdev_name); +jsonw_uint_field (rd->jw,"netdev_index" , idx); + }else {
Quoted 8 lines
rdma/link.c static void link_print_phys_state(struct rd *rd, struct nlattr **tb) · line 227
Quoted 6 lines
rdma/link.c +6
-0+pr_out ("netdev %s " , netdev_name); +if (rd->show_details) +pr_out ("netdev_index %u " , idx); + } +} +Why is the
netdev_indexunder 'show_details'?
Because I think that it is useless for day-to-day usage of average rdmatool user and mostly will be used as pipe to other scripts, if JSON doesn't good fit for any reasons. So I decided do not clutter "general output".
Quoted 2 lines
Reviewed-by Steve Wise <[email protected]>
Thanks
Quoted 33 lines
Quoted 32 lines
rdma/link.c +1
-0static int link_parse_cb (const struct nlmsghdr *nlh,void *data) {struct nlattr *tb[RDMA_NLDEV_ATTR_MAX ] = {};@@ -241,6 +261,7 @@ static int link_parse_cb(const struct nlmsghdr *nlh, void *data)link_print_lmc (rd, tb);link_print_state (rd, tb);link_print_phys_state (rd, tb); +link_print_netdev (rd, tb);if (rd->show_details)link_print_caps (rd, tb);rdma/utils.c +2
-1@@ -375,6 +375,8 @@ static const enum mnl_attr_data_type nldev_policy[RDMA_NLDEV_ATTR_MAX] = { [RDMA_NLDEV_ATTR_RES_STATE] = MNL_TYPE_U8, [RDMA_NLDEV_ATTR_RES_PID] = MNL_TYPE_U32, [RDMA_NLDEV_ATTR_RES_KERN_NAME] = MNL_TYPE_NUL_STRING, + [RDMA_NLDEV_ATTR_NDEV_INDEX] = MNL_TYPE_U32, + [RDMA_NLDEV_ATTR_NDEV_NAME] = MNL_TYPE_NUL_STRING, };int rd_attr_cb (const struct nlattr *attr,void *data) --2.14.3
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html