> On Jun 9, 2023, at 8:04 PM, Zhu Yanjun <yanjun.zhu@xxxxxxxxx> wrote: > > 在 2023/6/10 4:49, Tom Talpey 写道: >> On 6/7/2023 3:43 PM, Chuck Lever wrote: >>> From: Chuck Lever <chuck.lever@xxxxxxxxxx> >>> >>> We would like to enable the use of siw on top of a VPN that is >>> constructed and managed via a tun device. That hasn't worked up >>> until now because ARPHRD_NONE devices (such as tun devices) have >>> no GID for the RDMA/core to look up. >>> >>> But it turns out that the egress device has already been picked for >>> us. addr_handler() just has to do the right thing with it. >>> >>> Tested with siw and qedr, both initiator and target. >>> >>> Suggested-by: Jason Gunthorpe <jgg@xxxxxxxxxx> >>> Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> >>> --- >>> drivers/infiniband/core/cma.c | 3 +++ >>> 1 file changed, 3 insertions(+) >>> >>> This of course needs broader testing, but it seems to work, and it's >>> a little nicer than "if (dev_type == ARPHRD_NONE)". >>> >>> One thing I discovered is that the NFS/RDMA server implementation >>> does not deal at all with more than one RDMA device on the system. >>> I will address that with an ib_client; SunRPC patches forthcoming. >>> >>> diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c >>> index 56e568fcd32b..c9a2bdb49e3c 100644 >>> --- a/drivers/infiniband/core/cma.c >>> +++ b/drivers/infiniband/core/cma.c >>> @@ -694,6 +694,9 @@ cma_validate_port(struct ib_device *device, u32 port, >>> if (!rdma_dev_access_netns(device, id_priv->id.route.addr.dev_addr.net)) >>> return ERR_PTR(-ENODEV); >>> + if (rdma_protocol_iwarp(device, port)) >>> + return rdma_get_gid_attr(device, port, 0); >> This might work, but I'm skeptical of the conditional. There's nothing >> special about iWARP that says a GID should come from the outgoing device >> mac. And, other protocols without IB GID addressing won't benefit. Hi Zhu, thanks for having a look. > Agree with you. Other protocols, such as RXE, also need be handled. > So a better solution than this needs. I assume you mean, in particular, RoCEv2 with rxe on a non-Ethernet device? Tom and I discussed that possibility privately while I developed this patch. I do not object to that idea. But I would feel more comfortable if that was justified and tested via a separate patch. I expect that the logic for those cases will look different to what I'm adding here. > Zhu Yanjun > >> Wouldn't it be better to detect a missing GID, or infer the need from >> some other transport attribute? >> Tom. >>> + >>> if ((dev_type == ARPHRD_INFINIBAND) && !rdma_protocol_ib(device, port)) >>> return ERR_PTR(-ENODEV); -- Chuck Lever