RDMA/rxe: Make rping work with tun device

Because the type of tun device is ARPHRD_NONE, in cma, ARPHRD_NONE is
not recognized. To RXE device, just as SIW does, ARPHRD_NONE is added
to support.

Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev>
Link: https://patch.msgid.link/20250119172831.3123110-4-yanjun.zhu@linux.dev
Signed-off-by: Leon Romanovsky <leon@kernel.org>
This commit is contained in:
Zhu Yanjun
2025-02-03 06:38:43 -05:00
committed by Leon Romanovsky
parent 93486fc96f
commit 190797d47f
+19 -5
View File
@@ -739,12 +739,26 @@ cma_validate_port(struct ib_device *device, u32 port,
goto out;
}
if (dev_type == ARPHRD_ETHER && rdma_protocol_roce(device, port)) {
ndev = dev_get_by_index(dev_addr->net, bound_if_index);
if (!ndev)
goto out;
/*
* For a RXE device, it should work with TUN device and normal ethernet
* devices. Use driver_id to check if a device is a RXE device or not.
* ARPHDR_NONE means a TUN device.
*/
if (device->ops.driver_id == RDMA_DRIVER_RXE) {
if ((dev_type == ARPHRD_NONE || dev_type == ARPHRD_ETHER)
&& rdma_protocol_roce(device, port)) {
ndev = dev_get_by_index(dev_addr->net, bound_if_index);
if (!ndev)
goto out;
}
} else {
gid_type = IB_GID_TYPE_IB;
if (dev_type == ARPHRD_ETHER && rdma_protocol_roce(device, port)) {
ndev = dev_get_by_index(dev_addr->net, bound_if_index);
if (!ndev)
goto out;
} else {
gid_type = IB_GID_TYPE_IB;
}
}
sgid_attr = rdma_find_gid_by_port(device, gid, gid_type, port, ndev);