xref: /linux/fs/smb/common/smbdirect/smbdirect_pdu.h (revision 3cd8b194bf3428dfa53120fee47e827a7c495815)
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  *   Copyright (c) 2017 Stefan Metzmacher
4  */
5 
6 #ifndef __FS_SMB_COMMON_SMBDIRECT_SMBDIRECT_PDU_H__
7 #define __FS_SMB_COMMON_SMBDIRECT_SMBDIRECT_PDU_H__
8 
9 #define SMBDIRECT_V1 0x0100
10 
11 /* SMBD minimum receive size and fragmented sized defined in [MS-SMBD] */
12 #define SMBDIRECT_MIN_RECEIVE_SIZE		128
13 #define SMBDIRECT_MIN_FRAGMENTED_SIZE		131072
14 
15 /* SMBD negotiation request packet [MS-SMBD] 2.2.1 */
16 struct smbdirect_negotiate_req {
17 	__le16 min_version;
18 	__le16 max_version;
19 	__le16 reserved;
20 	__le16 credits_requested;
21 	__le32 preferred_send_size;
22 	__le32 max_receive_size;
23 	__le32 max_fragmented_size;
24 } __packed;
25 
26 /* SMBD negotiation response packet [MS-SMBD] 2.2.2 */
27 struct smbdirect_negotiate_resp {
28 	__le16 min_version;
29 	__le16 max_version;
30 	__le16 negotiated_version;
31 	__le16 reserved;
32 	__le16 credits_requested;
33 	__le16 credits_granted;
34 	__le32 status;
35 	__le32 max_readwrite_size;
36 	__le32 preferred_send_size;
37 	__le32 max_receive_size;
38 	__le32 max_fragmented_size;
39 } __packed;
40 
41 #define SMBDIRECT_DATA_MIN_HDR_SIZE 0x14
42 #define SMBDIRECT_DATA_OFFSET       0x18
43 
44 #define SMBDIRECT_FLAG_RESPONSE_REQUESTED 0x0001
45 
46 /* SMBD data transfer packet with payload [MS-SMBD] 2.2.3 */
47 struct smbdirect_data_transfer {
48 	__le16 credits_requested;
49 	__le16 credits_granted;
50 	__le16 flags;
51 	__le16 reserved;
52 	__le32 remaining_data_length;
53 	__le32 data_offset;
54 	__le32 data_length;
55 	__le32 padding;
56 	__u8 buffer[];
57 } __packed;
58 
59 #endif /* __FS_SMB_COMMON_SMBDIRECT_SMBDIRECT_PDU_H__ */
60