From: Leon Romanovsky <leonro@xxxxxxxxxxxx> Reuse existing RDMA_NLDEV_ATTR_LINK_TYPE to give ability for stable names UDEV rule create Ib device stable names based on link type protocol. The assumption that devices like mlx4 with duality in their link type under one IB device struct won't be allowed in the future. Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxxxx> --- Changelog: v0 -> v1: * Added special return type for RXE to return same information as it was provided by link_set while RXE link is created. --- drivers/infiniband/core/nldev.c | 34 +++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/drivers/infiniband/core/nldev.c b/drivers/infiniband/core/nldev.c index 854f47d78d8e..d81f866b01ea 100644 --- a/drivers/infiniband/core/nldev.c +++ b/drivers/infiniband/core/nldev.c @@ -200,6 +200,7 @@ static int fill_nldev_handle(struct sk_buff *msg, struct ib_device *device) static int fill_dev_info(struct sk_buff *msg, struct ib_device *device) { char fw[IB_FW_VERSION_NAME_MAX]; + u8 port; if (fill_nldev_handle(msg, device)) return -EMSGSIZE; @@ -228,6 +229,39 @@ static int fill_dev_info(struct sk_buff *msg, struct ib_device *device) return -EMSGSIZE; if (nla_put_u8(msg, RDMA_NLDEV_ATTR_DEV_NODE_TYPE, device->node_type)) return -EMSGSIZE; + + /* + * Link type is determined on first port and mlx4 device + * which can potentialy have two different link type for the same + * IB device is considered as better to be avoided in the future, + */ + port = rdma_start_port(device); + if (rdma_protocol_ib(device, port) && + nla_put_string(msg, RDMA_NLDEV_ATTR_LINK_TYPE, "ib")) + return -EMSGSIZE; + if (rdma_protocol_iwarp(device, port) && + nla_put_string(msg, RDMA_NLDEV_ATTR_LINK_TYPE, "iw")) + return -EMSGSIZE; + if (rdma_protocol_roce(device, port)) { + int ret; + + if (device->driver_id == RDMA_DRIVER_RXE) + ret = nla_put_string(msg, RDMA_NLDEV_ATTR_LINK_TYPE, + "rxe"); + else + ret = nla_put_string(msg, RDMA_NLDEV_ATTR_LINK_TYPE, + "roce"); + + if (ret) + return -EMSGSIZE; + } + if (rdma_protocol_usnic(device, port) && + nla_put_string(msg, RDMA_NLDEV_ATTR_LINK_TYPE, "usnic")) + return -EMSGSIZE; + if (rdma_cap_opa_mad(device, port) && + nla_put_string(msg, RDMA_NLDEV_ATTR_LINK_TYPE, "opa")) + return -EMSGSIZE; + return 0; } -- 2.20.1