ksmbd: set 445 port to smbdirect port by default
authorNamjae Jeon <linkinjeon@kernel.org>
Wed, 29 Dec 2021 14:02:50 +0000 (23:02 +0900)
committerSteve French <stfrench@microsoft.com>
Mon, 10 Jan 2022 18:44:19 +0000 (12:44 -0600)
When SMB Direct is used with iWARP, Windows use 5445 port for smb direct
port, 445 port for SMB. This patch check ib_device using ib_client to
know if NICs type is iWARP or Infiniband.

Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/ksmbd/transport_rdma.c
fs/ksmbd/transport_rdma.h

index 339fa4f..f89b64e 100644 (file)
@@ -34,7 +34,8 @@
 #include "smbstatus.h"
 #include "transport_rdma.h"
 
-#define SMB_DIRECT_PORT        5445
+#define SMB_DIRECT_PORT_IWARP          5445
+#define SMB_DIRECT_PORT_INFINIBAND     445
 
 #define SMB_DIRECT_VERSION_LE          cpu_to_le16(0x0100)
 
  * as defined in [MS-SMBD] 3.1.1.1
  * Those may change after a SMB_DIRECT negotiation
  */
+
+/* Set 445 port to SMB Direct port by default */
+static int smb_direct_port = SMB_DIRECT_PORT_INFINIBAND;
+
 /* The local peer's maximum number of credits to grant to the peer */
 static int smb_direct_receive_credit_max = 255;
 
@@ -1942,7 +1947,7 @@ static int smb_direct_handle_connect_request(struct rdma_cm_id *new_cm_id)
 
        KSMBD_TRANS(t)->handler = kthread_run(ksmbd_conn_handler_loop,
                                              KSMBD_TRANS(t)->conn, "ksmbd:r%u",
-                                             SMB_DIRECT_PORT);
+                                             smb_direct_port);
        if (IS_ERR(KSMBD_TRANS(t)->handler)) {
                int ret = PTR_ERR(KSMBD_TRANS(t)->handler);
 
@@ -2019,6 +2024,10 @@ static int smb_direct_ib_client_add(struct ib_device *ib_dev)
 {
        struct smb_direct_device *smb_dev;
 
+       /* Set 5445 port if device type is iWARP(No IB) */
+       if (ib_dev->node_type != RDMA_NODE_IB_CA)
+               smb_direct_port = SMB_DIRECT_PORT_IWARP;
+
        if (!ib_dev->ops.get_netdev ||
            !rdma_frwr_is_supported(&ib_dev->attrs))
                return 0;
@@ -2080,7 +2089,7 @@ int ksmbd_rdma_init(void)
        if (!smb_direct_wq)
                return -ENOMEM;
 
-       ret = smb_direct_listen(SMB_DIRECT_PORT);
+       ret = smb_direct_listen(smb_direct_port);
        if (ret) {
                destroy_workqueue(smb_direct_wq);
                smb_direct_wq = NULL;
index ab9250a..5567d93 100644 (file)
@@ -7,8 +7,6 @@
 #ifndef __KSMBD_TRANSPORT_RDMA_H__
 #define __KSMBD_TRANSPORT_RDMA_H__
 
-#define SMB_DIRECT_PORT        5445
-
 /* SMB DIRECT negotiation request packet [MS-SMBD] 2.2.1 */
 struct smb_direct_negotiate_req {
        __le16 min_version;