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