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