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