162306a36Sopenharmony_ci/* SPDX-License-Identifier: LGPL-2.1 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * Copyright (c) International Business Machines Corp., 2009, 2013 562306a36Sopenharmony_ci * Etersoft, 2012 662306a36Sopenharmony_ci * Author(s): Steve French (sfrench@us.ibm.com) 762306a36Sopenharmony_ci * Pavel Shilovsky (pshilovsky@samba.org) 2012 862306a36Sopenharmony_ci * 962306a36Sopenharmony_ci */ 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#ifndef _SMB2PDU_H 1262306a36Sopenharmony_ci#define _SMB2PDU_H 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#include <net/sock.h> 1562306a36Sopenharmony_ci#include "cifsacl.h" 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci/* 52 transform hdr + 64 hdr + 88 create rsp */ 1862306a36Sopenharmony_ci#define SMB2_TRANSFORM_HEADER_SIZE 52 1962306a36Sopenharmony_ci#define MAX_SMB2_HDR_SIZE 204 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci/* The total header size for SMB2 read and write */ 2262306a36Sopenharmony_ci#define SMB2_READWRITE_PDU_HEADER_SIZE (48 + sizeof(struct smb2_hdr)) 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci/* See MS-SMB2 2.2.43 */ 2562306a36Sopenharmony_cistruct smb2_rdma_transform { 2662306a36Sopenharmony_ci __le16 RdmaDescriptorOffset; 2762306a36Sopenharmony_ci __le16 RdmaDescriptorLength; 2862306a36Sopenharmony_ci __le32 Channel; /* for values see channel description in smb2 read above */ 2962306a36Sopenharmony_ci __le16 TransformCount; 3062306a36Sopenharmony_ci __le16 Reserved1; 3162306a36Sopenharmony_ci __le32 Reserved2; 3262306a36Sopenharmony_ci} __packed; 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci/* TransformType */ 3562306a36Sopenharmony_ci#define SMB2_RDMA_TRANSFORM_TYPE_ENCRYPTION 0x0001 3662306a36Sopenharmony_ci#define SMB2_RDMA_TRANSFORM_TYPE_SIGNING 0x0002 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_cistruct smb2_rdma_crypto_transform { 3962306a36Sopenharmony_ci __le16 TransformType; 4062306a36Sopenharmony_ci __le16 SignatureLength; 4162306a36Sopenharmony_ci __le16 NonceLength; 4262306a36Sopenharmony_ci __u16 Reserved; 4362306a36Sopenharmony_ci __u8 Signature[]; /* variable length */ 4462306a36Sopenharmony_ci /* u8 Nonce[] */ 4562306a36Sopenharmony_ci /* followed by padding */ 4662306a36Sopenharmony_ci} __packed; 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci/* 4962306a36Sopenharmony_ci * Definitions for SMB2 Protocol Data Units (network frames) 5062306a36Sopenharmony_ci * 5162306a36Sopenharmony_ci * See MS-SMB2.PDF specification for protocol details. 5262306a36Sopenharmony_ci * The Naming convention is the lower case version of the SMB2 5362306a36Sopenharmony_ci * command code name for the struct. Note that structures must be packed. 5462306a36Sopenharmony_ci * 5562306a36Sopenharmony_ci */ 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci#define COMPOUND_FID 0xFFFFFFFFFFFFFFFFULL 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci#define SMB2_SYMLINK_STRUCT_SIZE \ 6062306a36Sopenharmony_ci (sizeof(struct smb2_err_rsp) + sizeof(struct smb2_symlink_err_rsp)) 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci#define SYMLINK_ERROR_TAG 0x4c4d5953 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_cistruct smb2_symlink_err_rsp { 6562306a36Sopenharmony_ci __le32 SymLinkLength; 6662306a36Sopenharmony_ci __le32 SymLinkErrorTag; 6762306a36Sopenharmony_ci __le32 ReparseTag; 6862306a36Sopenharmony_ci __le16 ReparseDataLength; 6962306a36Sopenharmony_ci __le16 UnparsedPathLength; 7062306a36Sopenharmony_ci __le16 SubstituteNameOffset; 7162306a36Sopenharmony_ci __le16 SubstituteNameLength; 7262306a36Sopenharmony_ci __le16 PrintNameOffset; 7362306a36Sopenharmony_ci __le16 PrintNameLength; 7462306a36Sopenharmony_ci __le32 Flags; 7562306a36Sopenharmony_ci __u8 PathBuffer[]; 7662306a36Sopenharmony_ci} __packed; 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ci/* SMB 3.1.1 and later dialects. See MS-SMB2 section 2.2.2.1 */ 7962306a36Sopenharmony_cistruct smb2_error_context_rsp { 8062306a36Sopenharmony_ci __le32 ErrorDataLength; 8162306a36Sopenharmony_ci __le32 ErrorId; 8262306a36Sopenharmony_ci __u8 ErrorContextData; /* ErrorDataLength long array */ 8362306a36Sopenharmony_ci} __packed; 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ci/* ErrorId values */ 8662306a36Sopenharmony_ci#define SMB2_ERROR_ID_DEFAULT 0x00000000 8762306a36Sopenharmony_ci#define SMB2_ERROR_ID_SHARE_REDIRECT cpu_to_le32(0x72645253) /* "rdRS" */ 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ci/* Defines for Type field below (see MS-SMB2 2.2.2.2.2.1) */ 9062306a36Sopenharmony_ci#define MOVE_DST_IPADDR_V4 cpu_to_le32(0x00000001) 9162306a36Sopenharmony_ci#define MOVE_DST_IPADDR_V6 cpu_to_le32(0x00000002) 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_cistruct move_dst_ipaddr { 9462306a36Sopenharmony_ci __le32 Type; 9562306a36Sopenharmony_ci __u32 Reserved; 9662306a36Sopenharmony_ci __u8 address[16]; /* IPv4 followed by 12 bytes rsvd or IPv6 address */ 9762306a36Sopenharmony_ci} __packed; 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_cistruct share_redirect_error_context_rsp { 10062306a36Sopenharmony_ci __le32 StructureSize; 10162306a36Sopenharmony_ci __le32 NotificationType; 10262306a36Sopenharmony_ci __le32 ResourceNameOffset; 10362306a36Sopenharmony_ci __le32 ResourceNameLength; 10462306a36Sopenharmony_ci __le16 Reserved; 10562306a36Sopenharmony_ci __le16 TargetType; 10662306a36Sopenharmony_ci __le32 IPAddrCount; 10762306a36Sopenharmony_ci struct move_dst_ipaddr IpAddrMoveList[]; 10862306a36Sopenharmony_ci /* __u8 ResourceName[] */ /* Name of share as counted Unicode string */ 10962306a36Sopenharmony_ci} __packed; 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_ci/* 11262306a36Sopenharmony_ci * Maximum number of iovs we need for an open/create request. 11362306a36Sopenharmony_ci * [0] : struct smb2_create_req 11462306a36Sopenharmony_ci * [1] : path 11562306a36Sopenharmony_ci * [2] : lease context 11662306a36Sopenharmony_ci * [3] : durable context 11762306a36Sopenharmony_ci * [4] : posix context 11862306a36Sopenharmony_ci * [5] : time warp context 11962306a36Sopenharmony_ci * [6] : query id context 12062306a36Sopenharmony_ci * [7] : compound padding 12162306a36Sopenharmony_ci */ 12262306a36Sopenharmony_ci#define SMB2_CREATE_IOV_SIZE 8 12362306a36Sopenharmony_ci 12462306a36Sopenharmony_ci/* 12562306a36Sopenharmony_ci * Maximum size of a SMB2_CREATE response is 64 (smb2 header) + 12662306a36Sopenharmony_ci * 88 (fixed part of create response) + 520 (path) + 208 (contexts) + 12762306a36Sopenharmony_ci * 2 bytes of padding. 12862306a36Sopenharmony_ci */ 12962306a36Sopenharmony_ci#define MAX_SMB2_CREATE_RESPONSE_SIZE 880 13062306a36Sopenharmony_ci 13162306a36Sopenharmony_ci#define SMB2_LEASE_READ_CACHING_HE 0x01 13262306a36Sopenharmony_ci#define SMB2_LEASE_HANDLE_CACHING_HE 0x02 13362306a36Sopenharmony_ci#define SMB2_LEASE_WRITE_CACHING_HE 0x04 13462306a36Sopenharmony_ci 13562306a36Sopenharmony_ci 13662306a36Sopenharmony_ci/* See MS-SMB2 2.2.13.2.11 */ 13762306a36Sopenharmony_ci/* Flags */ 13862306a36Sopenharmony_ci#define SMB2_DHANDLE_FLAG_PERSISTENT 0x00000002 13962306a36Sopenharmony_cistruct durable_context_v2 { 14062306a36Sopenharmony_ci __le32 Timeout; 14162306a36Sopenharmony_ci __le32 Flags; 14262306a36Sopenharmony_ci __u64 Reserved; 14362306a36Sopenharmony_ci __u8 CreateGuid[16]; 14462306a36Sopenharmony_ci} __packed; 14562306a36Sopenharmony_ci 14662306a36Sopenharmony_cistruct create_durable_v2 { 14762306a36Sopenharmony_ci struct create_context ccontext; 14862306a36Sopenharmony_ci __u8 Name[8]; 14962306a36Sopenharmony_ci struct durable_context_v2 dcontext; 15062306a36Sopenharmony_ci} __packed; 15162306a36Sopenharmony_ci 15262306a36Sopenharmony_ci/* See MS-SMB2 2.2.13.2.12 */ 15362306a36Sopenharmony_cistruct durable_reconnect_context_v2 { 15462306a36Sopenharmony_ci struct { 15562306a36Sopenharmony_ci __u64 PersistentFileId; 15662306a36Sopenharmony_ci __u64 VolatileFileId; 15762306a36Sopenharmony_ci } Fid; 15862306a36Sopenharmony_ci __u8 CreateGuid[16]; 15962306a36Sopenharmony_ci __le32 Flags; /* see above DHANDLE_FLAG_PERSISTENT */ 16062306a36Sopenharmony_ci} __packed; 16162306a36Sopenharmony_ci 16262306a36Sopenharmony_ci/* See MS-SMB2 2.2.14.2.12 */ 16362306a36Sopenharmony_cistruct durable_reconnect_context_v2_rsp { 16462306a36Sopenharmony_ci __le32 Timeout; 16562306a36Sopenharmony_ci __le32 Flags; /* see above DHANDLE_FLAG_PERSISTENT */ 16662306a36Sopenharmony_ci} __packed; 16762306a36Sopenharmony_ci 16862306a36Sopenharmony_cistruct create_durable_handle_reconnect_v2 { 16962306a36Sopenharmony_ci struct create_context ccontext; 17062306a36Sopenharmony_ci __u8 Name[8]; 17162306a36Sopenharmony_ci struct durable_reconnect_context_v2 dcontext; 17262306a36Sopenharmony_ci __u8 Pad[4]; 17362306a36Sopenharmony_ci} __packed; 17462306a36Sopenharmony_ci 17562306a36Sopenharmony_ci/* See MS-SMB2 2.2.13.2.5 */ 17662306a36Sopenharmony_cistruct crt_twarp_ctxt { 17762306a36Sopenharmony_ci struct create_context ccontext; 17862306a36Sopenharmony_ci __u8 Name[8]; 17962306a36Sopenharmony_ci __le64 Timestamp; 18062306a36Sopenharmony_ci 18162306a36Sopenharmony_ci} __packed; 18262306a36Sopenharmony_ci 18362306a36Sopenharmony_ci/* See MS-SMB2 2.2.13.2.9 */ 18462306a36Sopenharmony_cistruct crt_query_id_ctxt { 18562306a36Sopenharmony_ci struct create_context ccontext; 18662306a36Sopenharmony_ci __u8 Name[8]; 18762306a36Sopenharmony_ci} __packed; 18862306a36Sopenharmony_ci 18962306a36Sopenharmony_cistruct crt_sd_ctxt { 19062306a36Sopenharmony_ci struct create_context ccontext; 19162306a36Sopenharmony_ci __u8 Name[8]; 19262306a36Sopenharmony_ci struct smb3_sd sd; 19362306a36Sopenharmony_ci} __packed; 19462306a36Sopenharmony_ci 19562306a36Sopenharmony_ci 19662306a36Sopenharmony_ci#define COPY_CHUNK_RES_KEY_SIZE 24 19762306a36Sopenharmony_cistruct resume_key_req { 19862306a36Sopenharmony_ci char ResumeKey[COPY_CHUNK_RES_KEY_SIZE]; 19962306a36Sopenharmony_ci __le32 ContextLength; /* MBZ */ 20062306a36Sopenharmony_ci char Context[]; /* ignored, Windows sets to 4 bytes of zero */ 20162306a36Sopenharmony_ci} __packed; 20262306a36Sopenharmony_ci 20362306a36Sopenharmony_ci/* this goes in the ioctl buffer when doing a copychunk request */ 20462306a36Sopenharmony_cistruct copychunk_ioctl { 20562306a36Sopenharmony_ci char SourceKey[COPY_CHUNK_RES_KEY_SIZE]; 20662306a36Sopenharmony_ci __le32 ChunkCount; /* we are only sending 1 */ 20762306a36Sopenharmony_ci __le32 Reserved; 20862306a36Sopenharmony_ci /* array will only be one chunk long for us */ 20962306a36Sopenharmony_ci __le64 SourceOffset; 21062306a36Sopenharmony_ci __le64 TargetOffset; 21162306a36Sopenharmony_ci __le32 Length; /* how many bytes to copy */ 21262306a36Sopenharmony_ci __u32 Reserved2; 21362306a36Sopenharmony_ci} __packed; 21462306a36Sopenharmony_ci 21562306a36Sopenharmony_cistruct copychunk_ioctl_rsp { 21662306a36Sopenharmony_ci __le32 ChunksWritten; 21762306a36Sopenharmony_ci __le32 ChunkBytesWritten; 21862306a36Sopenharmony_ci __le32 TotalBytesWritten; 21962306a36Sopenharmony_ci} __packed; 22062306a36Sopenharmony_ci 22162306a36Sopenharmony_ci/* See MS-FSCC 2.3.29 and 2.3.30 */ 22262306a36Sopenharmony_cistruct get_retrieval_pointer_count_req { 22362306a36Sopenharmony_ci __le64 StartingVcn; /* virtual cluster number (signed) */ 22462306a36Sopenharmony_ci} __packed; 22562306a36Sopenharmony_ci 22662306a36Sopenharmony_cistruct get_retrieval_pointer_count_rsp { 22762306a36Sopenharmony_ci __le32 ExtentCount; 22862306a36Sopenharmony_ci} __packed; 22962306a36Sopenharmony_ci 23062306a36Sopenharmony_ci/* 23162306a36Sopenharmony_ci * See MS-FSCC 2.3.33 and 2.3.34 23262306a36Sopenharmony_ci * request is the same as get_retrieval_point_count_req struct above 23362306a36Sopenharmony_ci */ 23462306a36Sopenharmony_cistruct smb3_extents { 23562306a36Sopenharmony_ci __le64 NextVcn; 23662306a36Sopenharmony_ci __le64 Lcn; /* logical cluster number */ 23762306a36Sopenharmony_ci} __packed; 23862306a36Sopenharmony_ci 23962306a36Sopenharmony_cistruct get_retrieval_pointers_refcount_rsp { 24062306a36Sopenharmony_ci __le32 ExtentCount; 24162306a36Sopenharmony_ci __u32 Reserved; 24262306a36Sopenharmony_ci __le64 StartingVcn; 24362306a36Sopenharmony_ci struct smb3_extents extents[]; 24462306a36Sopenharmony_ci} __packed; 24562306a36Sopenharmony_ci 24662306a36Sopenharmony_ci/* See MS-DFSC 2.2.2 */ 24762306a36Sopenharmony_cistruct fsctl_get_dfs_referral_req { 24862306a36Sopenharmony_ci __le16 MaxReferralLevel; 24962306a36Sopenharmony_ci __u8 RequestFileName[]; 25062306a36Sopenharmony_ci} __packed; 25162306a36Sopenharmony_ci 25262306a36Sopenharmony_ci/* DFS response is struct get_dfs_refer_rsp */ 25362306a36Sopenharmony_ci 25462306a36Sopenharmony_ci/* See MS-SMB2 2.2.31.3 */ 25562306a36Sopenharmony_cistruct network_resiliency_req { 25662306a36Sopenharmony_ci __le32 Timeout; 25762306a36Sopenharmony_ci __le32 Reserved; 25862306a36Sopenharmony_ci} __packed; 25962306a36Sopenharmony_ci/* There is no buffer for the response ie no struct network_resiliency_rsp */ 26062306a36Sopenharmony_ci 26162306a36Sopenharmony_ci#define RSS_CAPABLE cpu_to_le32(0x00000001) 26262306a36Sopenharmony_ci#define RDMA_CAPABLE cpu_to_le32(0x00000002) 26362306a36Sopenharmony_ci 26462306a36Sopenharmony_ci#define INTERNETWORK cpu_to_le16(0x0002) 26562306a36Sopenharmony_ci#define INTERNETWORKV6 cpu_to_le16(0x0017) 26662306a36Sopenharmony_ci 26762306a36Sopenharmony_cistruct network_interface_info_ioctl_rsp { 26862306a36Sopenharmony_ci __le32 Next; /* next interface. zero if this is last one */ 26962306a36Sopenharmony_ci __le32 IfIndex; 27062306a36Sopenharmony_ci __le32 Capability; /* RSS or RDMA Capable */ 27162306a36Sopenharmony_ci __le32 Reserved; 27262306a36Sopenharmony_ci __le64 LinkSpeed; 27362306a36Sopenharmony_ci __le16 Family; 27462306a36Sopenharmony_ci __u8 Buffer[126]; 27562306a36Sopenharmony_ci} __packed; 27662306a36Sopenharmony_ci 27762306a36Sopenharmony_cistruct iface_info_ipv4 { 27862306a36Sopenharmony_ci __be16 Port; 27962306a36Sopenharmony_ci __be32 IPv4Address; 28062306a36Sopenharmony_ci __be64 Reserved; 28162306a36Sopenharmony_ci} __packed; 28262306a36Sopenharmony_ci 28362306a36Sopenharmony_cistruct iface_info_ipv6 { 28462306a36Sopenharmony_ci __be16 Port; 28562306a36Sopenharmony_ci __be32 FlowInfo; 28662306a36Sopenharmony_ci __u8 IPv6Address[16]; 28762306a36Sopenharmony_ci __be32 ScopeId; 28862306a36Sopenharmony_ci} __packed; 28962306a36Sopenharmony_ci 29062306a36Sopenharmony_ci#define NO_FILE_ID 0xFFFFFFFFFFFFFFFFULL /* general ioctls to srv not to file */ 29162306a36Sopenharmony_ci 29262306a36Sopenharmony_cistruct compress_ioctl { 29362306a36Sopenharmony_ci __le16 CompressionState; /* See cifspdu.h for possible flag values */ 29462306a36Sopenharmony_ci} __packed; 29562306a36Sopenharmony_ci 29662306a36Sopenharmony_ci/* 29762306a36Sopenharmony_ci * Maximum number of iovs we need for an ioctl request. 29862306a36Sopenharmony_ci * [0] : struct smb2_ioctl_req 29962306a36Sopenharmony_ci * [1] : in_data 30062306a36Sopenharmony_ci */ 30162306a36Sopenharmony_ci#define SMB2_IOCTL_IOV_SIZE 2 30262306a36Sopenharmony_ci 30362306a36Sopenharmony_ci/* 30462306a36Sopenharmony_ci * PDU query infolevel structure definitions 30562306a36Sopenharmony_ci * BB consider moving to a different header 30662306a36Sopenharmony_ci */ 30762306a36Sopenharmony_ci 30862306a36Sopenharmony_cistruct smb2_file_full_ea_info { /* encoding of response for level 15 */ 30962306a36Sopenharmony_ci __le32 next_entry_offset; 31062306a36Sopenharmony_ci __u8 flags; 31162306a36Sopenharmony_ci __u8 ea_name_length; 31262306a36Sopenharmony_ci __le16 ea_value_length; 31362306a36Sopenharmony_ci char ea_data[]; /* \0 terminated name plus value */ 31462306a36Sopenharmony_ci} __packed; /* level 15 Set */ 31562306a36Sopenharmony_ci 31662306a36Sopenharmony_cistruct smb2_file_reparse_point_info { 31762306a36Sopenharmony_ci __le64 IndexNumber; 31862306a36Sopenharmony_ci __le32 Tag; 31962306a36Sopenharmony_ci} __packed; 32062306a36Sopenharmony_ci 32162306a36Sopenharmony_cistruct smb2_file_network_open_info { 32262306a36Sopenharmony_ci struct_group(network_open_info, 32362306a36Sopenharmony_ci __le64 CreationTime; 32462306a36Sopenharmony_ci __le64 LastAccessTime; 32562306a36Sopenharmony_ci __le64 LastWriteTime; 32662306a36Sopenharmony_ci __le64 ChangeTime; 32762306a36Sopenharmony_ci __le64 AllocationSize; 32862306a36Sopenharmony_ci __le64 EndOfFile; 32962306a36Sopenharmony_ci __le32 Attributes; 33062306a36Sopenharmony_ci ); 33162306a36Sopenharmony_ci __le32 Reserved; 33262306a36Sopenharmony_ci} __packed; /* level 34 Query also similar returned in close rsp and open rsp */ 33362306a36Sopenharmony_ci 33462306a36Sopenharmony_ci/* See MS-FSCC 2.4.21 */ 33562306a36Sopenharmony_cistruct smb2_file_id_information { 33662306a36Sopenharmony_ci __le64 VolumeSerialNumber; 33762306a36Sopenharmony_ci __u64 PersistentFileId; /* opaque endianness */ 33862306a36Sopenharmony_ci __u64 VolatileFileId; /* opaque endianness */ 33962306a36Sopenharmony_ci} __packed; /* level 59 */ 34062306a36Sopenharmony_ci 34162306a36Sopenharmony_ci/* See MS-FSCC 2.4.18 */ 34262306a36Sopenharmony_cistruct smb2_file_id_extd_directory_info { 34362306a36Sopenharmony_ci __le32 NextEntryOffset; 34462306a36Sopenharmony_ci __u32 FileIndex; 34562306a36Sopenharmony_ci __le64 CreationTime; 34662306a36Sopenharmony_ci __le64 LastAccessTime; 34762306a36Sopenharmony_ci __le64 LastWriteTime; 34862306a36Sopenharmony_ci __le64 ChangeTime; 34962306a36Sopenharmony_ci __le64 EndOfFile; 35062306a36Sopenharmony_ci __le64 AllocationSize; 35162306a36Sopenharmony_ci __le32 FileAttributes; 35262306a36Sopenharmony_ci __le32 FileNameLength; 35362306a36Sopenharmony_ci __le32 EaSize; /* EA size */ 35462306a36Sopenharmony_ci __le32 ReparsePointTag; /* valid if FILE_ATTR_REPARSE_POINT set in FileAttributes */ 35562306a36Sopenharmony_ci __le64 UniqueId; /* inode num - le since Samba puts ino in low 32 bit */ 35662306a36Sopenharmony_ci char FileName[]; 35762306a36Sopenharmony_ci} __packed; /* level 60 */ 35862306a36Sopenharmony_ci 35962306a36Sopenharmony_ciextern char smb2_padding[7]; 36062306a36Sopenharmony_ci 36162306a36Sopenharmony_ci/* equivalent of the contents of SMB3.1.1 POSIX open context response */ 36262306a36Sopenharmony_cistruct create_posix_rsp { 36362306a36Sopenharmony_ci u32 nlink; 36462306a36Sopenharmony_ci u32 reparse_tag; 36562306a36Sopenharmony_ci u32 mode; 36662306a36Sopenharmony_ci struct cifs_sid owner; /* var-sized on the wire */ 36762306a36Sopenharmony_ci struct cifs_sid group; /* var-sized on the wire */ 36862306a36Sopenharmony_ci} __packed; 36962306a36Sopenharmony_ci 37062306a36Sopenharmony_ci#define SMB2_QUERY_DIRECTORY_IOV_SIZE 2 37162306a36Sopenharmony_ci 37262306a36Sopenharmony_ci/* 37362306a36Sopenharmony_ci * SMB2-only POSIX info level for query dir 37462306a36Sopenharmony_ci * 37562306a36Sopenharmony_ci * See posix_info_sid_size(), posix_info_extra_size() and 37662306a36Sopenharmony_ci * posix_info_parse() to help with the handling of this struct. 37762306a36Sopenharmony_ci */ 37862306a36Sopenharmony_cistruct smb2_posix_info { 37962306a36Sopenharmony_ci __le32 NextEntryOffset; 38062306a36Sopenharmony_ci __u32 Ignored; 38162306a36Sopenharmony_ci __le64 CreationTime; 38262306a36Sopenharmony_ci __le64 LastAccessTime; 38362306a36Sopenharmony_ci __le64 LastWriteTime; 38462306a36Sopenharmony_ci __le64 ChangeTime; 38562306a36Sopenharmony_ci __le64 EndOfFile; 38662306a36Sopenharmony_ci __le64 AllocationSize; 38762306a36Sopenharmony_ci __le32 DosAttributes; 38862306a36Sopenharmony_ci __le64 Inode; 38962306a36Sopenharmony_ci __le32 DeviceId; 39062306a36Sopenharmony_ci __le32 Zero; 39162306a36Sopenharmony_ci /* beginning of POSIX Create Context Response */ 39262306a36Sopenharmony_ci __le32 HardLinks; 39362306a36Sopenharmony_ci __le32 ReparseTag; 39462306a36Sopenharmony_ci __le32 Mode; 39562306a36Sopenharmony_ci /* 39662306a36Sopenharmony_ci * var sized owner SID 39762306a36Sopenharmony_ci * var sized group SID 39862306a36Sopenharmony_ci * le32 filenamelength 39962306a36Sopenharmony_ci * u8 filename[] 40062306a36Sopenharmony_ci */ 40162306a36Sopenharmony_ci} __packed; 40262306a36Sopenharmony_ci 40362306a36Sopenharmony_ci/* 40462306a36Sopenharmony_ci * Parsed version of the above struct. Allows direct access to the 40562306a36Sopenharmony_ci * variable length fields 40662306a36Sopenharmony_ci */ 40762306a36Sopenharmony_cistruct smb2_posix_info_parsed { 40862306a36Sopenharmony_ci const struct smb2_posix_info *base; 40962306a36Sopenharmony_ci size_t size; 41062306a36Sopenharmony_ci struct cifs_sid owner; 41162306a36Sopenharmony_ci struct cifs_sid group; 41262306a36Sopenharmony_ci int name_len; 41362306a36Sopenharmony_ci const u8 *name; 41462306a36Sopenharmony_ci}; 41562306a36Sopenharmony_ci 41662306a36Sopenharmony_ci#endif /* _SMB2PDU_H */ 417