2021-03-16 07:07:11 +03:00
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* Copyright ( C ) 2017 , Microsoft Corporation .
* Copyright ( C ) 2018 , LG Electronics .
*/
# ifndef __KSMBD_TRANSPORT_RDMA_H__
# define __KSMBD_TRANSPORT_RDMA_H__
# define SMB_DIRECT_PORT 5445
2021-07-16 11:16:11 +03:00
/* SMB DIRECT negotiation request packet [MS-SMBD] 2.2.1 */
2021-03-16 07:07:11 +03:00
struct smb_direct_negotiate_req {
__le16 min_version ;
__le16 max_version ;
__le16 reserved ;
__le16 credits_requested ;
__le32 preferred_send_size ;
__le32 max_receive_size ;
__le32 max_fragmented_size ;
} __packed ;
2021-07-16 11:16:11 +03:00
/* SMB DIRECT negotiation response packet [MS-SMBD] 2.2.2 */
2021-03-16 07:07:11 +03:00
struct smb_direct_negotiate_resp {
__le16 min_version ;
__le16 max_version ;
__le16 negotiated_version ;
__le16 reserved ;
__le16 credits_requested ;
__le16 credits_granted ;
__le32 status ;
__le32 max_readwrite_size ;
__le32 preferred_send_size ;
__le32 max_receive_size ;
__le32 max_fragmented_size ;
} __packed ;
# define SMB_DIRECT_RESPONSE_REQUESTED 0x0001
2021-07-16 11:16:11 +03:00
/* SMB DIRECT data transfer packet with payload [MS-SMBD] 2.2.3 */
2021-03-16 07:07:11 +03:00
struct smb_direct_data_transfer {
__le16 credits_requested ;
__le16 credits_granted ;
__le16 flags ;
__le16 reserved ;
__le32 remaining_data_length ;
__le32 data_offset ;
__le32 data_length ;
__le32 padding ;
__u8 buffer [ ] ;
} __packed ;
# ifdef CONFIG_SMB_SERVER_SMBDIRECT
int ksmbd_rdma_init ( void ) ;
int ksmbd_rdma_destroy ( void ) ;
2021-07-13 10:09:34 +03:00
bool ksmbd_rdma_capable_netdev ( struct net_device * netdev ) ;
2021-03-16 07:07:11 +03:00
# else
static inline int ksmbd_rdma_init ( void ) { return 0 ; }
static inline int ksmbd_rdma_destroy ( void ) { return 0 ; }
2021-07-13 10:09:34 +03:00
static inline bool ksmbd_rdma_capable_netdev ( struct net_device * netdev ) { return false ; }
2021-03-16 07:07:11 +03:00
# endif
# endif /* __KSMBD_TRANSPORT_RDMA_H__ */