xref: /linux/fs/smb/smbdirect/smbdirect.h (revision 0fc8f6200d2313278fbf4539bbab74677c685531)
1*1249c01aSStefan Metzmacher /* SPDX-License-Identifier: GPL-2.0-or-later */
2*1249c01aSStefan Metzmacher /*
3*1249c01aSStefan Metzmacher  *   Copyright (C) 2025 Stefan Metzmacher
4*1249c01aSStefan Metzmacher  */
5*1249c01aSStefan Metzmacher 
6*1249c01aSStefan Metzmacher #ifndef __FS_SMB_COMMON_SMBDIRECT_SMBDIRECT_H__
7*1249c01aSStefan Metzmacher #define __FS_SMB_COMMON_SMBDIRECT_SMBDIRECT_H__
8*1249c01aSStefan Metzmacher 
9*1249c01aSStefan Metzmacher #include <linux/types.h>
10*1249c01aSStefan Metzmacher 
11*1249c01aSStefan Metzmacher /* SMB-DIRECT buffer descriptor V1 structure [MS-SMBD] 2.2.3.1 */
12*1249c01aSStefan Metzmacher struct smbdirect_buffer_descriptor_v1 {
13*1249c01aSStefan Metzmacher 	__le64 offset;
14*1249c01aSStefan Metzmacher 	__le32 token;
15*1249c01aSStefan Metzmacher 	__le32 length;
16*1249c01aSStefan Metzmacher } __packed;
17*1249c01aSStefan Metzmacher 
18*1249c01aSStefan Metzmacher /*
19*1249c01aSStefan Metzmacher  * Connection parameters mostly from [MS-SMBD] 3.1.1.1
20*1249c01aSStefan Metzmacher  *
21*1249c01aSStefan Metzmacher  * These are setup and negotiated at the beginning of a
22*1249c01aSStefan Metzmacher  * connection and remain constant unless explicitly changed.
23*1249c01aSStefan Metzmacher  *
24*1249c01aSStefan Metzmacher  * Some values are important for the upper layer.
25*1249c01aSStefan Metzmacher  */
26*1249c01aSStefan Metzmacher struct smbdirect_socket_parameters {
27*1249c01aSStefan Metzmacher 	__u64 flags;
28*1249c01aSStefan Metzmacher #define SMBDIRECT_FLAG_PORT_RANGE_ONLY_IB ((__u64)0x1)
29*1249c01aSStefan Metzmacher #define SMBDIRECT_FLAG_PORT_RANGE_ONLY_IW ((__u64)0x2)
30*1249c01aSStefan Metzmacher 	__u32 resolve_addr_timeout_msec;
31*1249c01aSStefan Metzmacher 	__u32 resolve_route_timeout_msec;
32*1249c01aSStefan Metzmacher 	__u32 rdma_connect_timeout_msec;
33*1249c01aSStefan Metzmacher 	__u32 negotiate_timeout_msec;
34*1249c01aSStefan Metzmacher 	__u16 initiator_depth;     /* limited to U8_MAX */
35*1249c01aSStefan Metzmacher 	__u16 responder_resources; /* limited to U8_MAX */
36*1249c01aSStefan Metzmacher 	__u16 recv_credit_max;
37*1249c01aSStefan Metzmacher 	__u16 send_credit_target;
38*1249c01aSStefan Metzmacher 	__u32 max_send_size;
39*1249c01aSStefan Metzmacher 	__u32 max_fragmented_send_size;
40*1249c01aSStefan Metzmacher 	__u32 max_recv_size;
41*1249c01aSStefan Metzmacher 	__u32 max_fragmented_recv_size;
42*1249c01aSStefan Metzmacher 	__u32 max_read_write_size;
43*1249c01aSStefan Metzmacher 	__u32 max_frmr_depth;
44*1249c01aSStefan Metzmacher 	__u32 keepalive_interval_msec;
45*1249c01aSStefan Metzmacher 	__u32 keepalive_timeout_msec;
46*1249c01aSStefan Metzmacher } __packed;
47*1249c01aSStefan Metzmacher 
48*1249c01aSStefan Metzmacher #define SMBDIRECT_FLAG_PORT_RANGE_MASK ( \
49*1249c01aSStefan Metzmacher 		SMBDIRECT_FLAG_PORT_RANGE_ONLY_IB | \
50*1249c01aSStefan Metzmacher 		SMBDIRECT_FLAG_PORT_RANGE_ONLY_IW)
51*1249c01aSStefan Metzmacher 
52*1249c01aSStefan Metzmacher #endif /* __FS_SMB_COMMON_SMBDIRECT_SMBDIRECT_H__ */
53