linux/include/rdma
Stefan Metzmacher a760e80e90 RDMA/core: introduce rdma_restrict_node_type()
For smbdirect it required to use different ports depending
on the RDMA protocol. E.g. for iWarp 5445 is needed
(as tcp port 445 already used by the raw tcp transport for SMB),
while InfiniBand, RoCEv1 and RoCEv2 use port 445, as they
use an independent port range (even for RoCEv2, which uses udp
port 4791 itself).

Currently ksmbd is not able to function correctly at
all if the system has iWarp (RDMA_NODE_RNIC) interface(s)
and any InfiniBand, RoCEv1 and/or RoCEv2 interface(s)
at the same time.

And cifs.ko uses 5445 with a fallback to 445, which
means depending on the available interfaces, it tries
5445 in the RoCE range or may tries iWarp with 445
as a fallback. This leads to strange error messages
and strange network captures.

To avoid these problems they will be able to
use rdma_restrict_node_type(RDMA_NODE_RNIC) before
trying port 5445 and rdma_restrict_node_type(RDMA_NODE_IB_CA)
before trying port 445. It means we'll get early
-ENODEV early from rdma_resolve_addr() without any
network traffic and timeouts.

This is designed to be called before calling any
of rdma_bind_addr(), rdma_resolve_addr() or rdma_listen().

Cc: Jason Gunthorpe <jgg@ziepe.ca>
Cc: Steve French <smfrench@gmail.com>
Cc: Tom Talpey <tom@talpey.com>
Cc: Long Li <longli@microsoft.com>
Cc: linux-rdma@vger.kernel.org
Cc: linux-cifs@vger.kernel.org
Cc: samba-technical@lists.samba.org
Acked-by: Leon Romanovsky <leon@kernel.org>
Acked-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
2026-02-08 17:12:58 -06:00
..
ib.h uaccess: remove CONFIG_SET_FS 2022-02-25 09:36:06 +01:00
ib_addr.h RDMA/cma: Always set static rate to 0 for RoCE 2023-06-11 11:26:02 +03:00
ib_cache.h RDMA/core: Remove unused ib_find_exact_cached_pkey 2024-12-24 05:00:42 -05:00
ib_cm.h RDMA/cm: Correct typedef and bad line warnings 2025-11-12 04:39:12 -05:00
ib_hdrs.h move asm/unaligned.h to linux/unaligned.h 2024-10-02 17:23:23 -04:00
ib_mad.h RDMA/sa_query: Support IB service records resolution 2025-08-13 06:15:56 -04:00
ib_marshall.h RDMA/core: Remove unused ib_copy_path_rec_from_user 2024-12-24 05:00:42 -05:00
ib_pack.h RDMA/core: Remove unused ib_ud_header_unpack 2024-12-24 05:00:42 -05:00
ib_pma.h RDMA/include: Replace license text with SPDX tags 2020-07-29 14:48:36 -03:00
ib_sa.h RDMA/sa_query: Support IB service records resolution 2025-08-13 06:15:56 -04:00
ib_smi.h RDMA/mad: Delete duplicated init_query_mad functions 2022-01-05 15:18:36 -04:00
ib_sysfs.h RDMA: Change ops->init_port to ops->port_groups 2021-06-16 20:58:31 -03:00
ib_ucaps.h RDMA/uverbs: Introduce UCAP (User CAPabilities) API 2025-03-09 13:13:02 -04:00
ib_umem.h RDMA/core: Add umem "is_contiguous" and "start_dma_addr" helpers 2025-07-13 04:00:34 -04:00
ib_umem_odp.h RDMA/core: Convert UMEM ODP DMA mapping to caching IOVA and page linkage 2025-05-12 06:06:51 -04:00
ib_verbs.h RDMA/core: Add new IB rate for XDR (8x) support 2025-11-24 02:58:30 -05:00
iba.h move asm/unaligned.h to linux/unaligned.h 2024-10-02 17:23:23 -04:00
ibta_vol1_c12.h RDMA/cm: Add Enhanced Connection Establishment (ECE) bits 2020-05-27 16:05:05 -03:00
iw_cm.h RDMA Remove unused function declarations 2023-08-13 10:32:35 +03:00
iw_portmap.h RDMA/include: Replace license text with SPDX tags 2020-07-29 14:48:36 -03:00
lag.h RDMA/core: Add LAG functionality 2020-05-02 20:19:54 -03:00
mr_pool.h Linux 5.2-rc6 2019-06-28 21:18:23 -03:00
opa_addr.h RDMA/include: Replace license text with SPDX tags 2020-07-29 14:48:36 -03:00
opa_port_info.h RDMA/include: Replace license text with SPDX tags 2020-07-29 14:48:36 -03:00
opa_smi.h RDMA/include: Replace license text with SPDX tags 2020-07-29 14:48:36 -03:00
opa_vnic.h RDMA/opa_vnic: fix spelling typo in comment 2022-10-19 10:02:37 +03:00
rdma_cm.h RDMA/core: introduce rdma_restrict_node_type() 2026-02-08 17:12:58 -06:00
rdma_cm_ib.h RDMA/include: Replace license text with SPDX tags 2020-07-29 14:48:36 -03:00
rdma_counter.h RDMA/core: Pass port to counter bind/unbind operations 2025-03-18 06:18:46 -04:00
rdma_netlink.h RDMA/nldev: Add support for RDMA monitoring 2024-09-13 08:29:14 +03:00
rdma_vt.h IB: move from strlcpy with unused retval to strscpy 2022-08-21 14:18:02 +03:00
rdmavt_cq.h RDMA/include: Replace license text with SPDX tags 2020-07-29 14:48:36 -03:00
rdmavt_mr.h RDMA/include: Replace license text with SPDX tags 2020-07-29 14:48:36 -03:00
rdmavt_qp.h IB/rdmavt: rdmavt_qp.h: clean up kernel-doc comments 2025-11-06 02:23:23 -05:00
restrack.h RDMA/core: Introduce a DMAH object and its alloc/free APIs 2025-07-23 01:42:10 -04:00
rw.h RDMA: Support more than 255 rdma ports 2021-03-26 09:31:21 -03:00
signature.h RDMA: Make most headers compile stand alone 2019-07-25 13:58:47 -03:00
tid_rdma_defs.h IB/hfi1: Build TID RDMA WRITE request 2019-02-05 18:07:43 -05:00
uverbs_ioctl.h RDMA/uverbs: Avoid -Wflex-array-member-not-at-end warnings 2024-03-03 15:38:44 +02:00
uverbs_named_ioctl.h RDMA/uverbs: Make UVERBS_OBJECT_METHODS to consider line number 2021-04-13 19:36:35 -03:00
uverbs_std_types.h RDMA/uverbs: Propagate errors from rdma_lookup_get_uobject() 2025-03-13 08:26:37 -04:00
uverbs_types.h RDMA/core: Move ib_uverbs_file struct to uverbs_types.h 2024-11-04 06:57:21 -05:00