1 /* 2 * fs/cifs/smb2pdu.h 3 * 4 * Copyright (c) International Business Machines Corp., 2009, 2013 5 * Etersoft, 2012 6 * Author(s): Steve French (sfrench@us.ibm.com) 7 * Pavel Shilovsky (pshilovsky@samba.org) 2012 8 * 9 * This library is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU Lesser General Public License as published 11 * by the Free Software Foundation; either version 2.1 of the License, or 12 * (at your option) any later version. 13 * 14 * This library is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 17 * the GNU Lesser General Public License for more details. 18 * 19 * You should have received a copy of the GNU Lesser General Public License 20 * along with this library; if not, write to the Free Software 21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 22 */ 23 24 #ifndef _SMB2PDU_H 25 #define _SMB2PDU_H 26 27 #include <net/sock.h> 28 29 /* 30 * Note that, due to trying to use names similar to the protocol specifications, 31 * there are many mixed case field names in the structures below. Although 32 * this does not match typical Linux kernel style, it is necessary to be 33 * be able to match against the protocol specfication. 34 * 35 * SMB2 commands 36 * Some commands have minimal (wct=0,bcc=0), or uninteresting, responses 37 * (ie no useful data other than the SMB error code itself) and are marked such. 38 * Knowing this helps avoid response buffer allocations and copy in some cases. 39 */ 40 41 /* List of commands in host endian */ 42 #define SMB2_NEGOTIATE_HE 0x0000 43 #define SMB2_SESSION_SETUP_HE 0x0001 44 #define SMB2_LOGOFF_HE 0x0002 /* trivial request/resp */ 45 #define SMB2_TREE_CONNECT_HE 0x0003 46 #define SMB2_TREE_DISCONNECT_HE 0x0004 /* trivial req/resp */ 47 #define SMB2_CREATE_HE 0x0005 48 #define SMB2_CLOSE_HE 0x0006 49 #define SMB2_FLUSH_HE 0x0007 /* trivial resp */ 50 #define SMB2_READ_HE 0x0008 51 #define SMB2_WRITE_HE 0x0009 52 #define SMB2_LOCK_HE 0x000A 53 #define SMB2_IOCTL_HE 0x000B 54 #define SMB2_CANCEL_HE 0x000C 55 #define SMB2_ECHO_HE 0x000D 56 #define SMB2_QUERY_DIRECTORY_HE 0x000E 57 #define SMB2_CHANGE_NOTIFY_HE 0x000F 58 #define SMB2_QUERY_INFO_HE 0x0010 59 #define SMB2_SET_INFO_HE 0x0011 60 #define SMB2_OPLOCK_BREAK_HE 0x0012 61 62 /* The same list in little endian */ 63 #define SMB2_NEGOTIATE cpu_to_le16(SMB2_NEGOTIATE_HE) 64 #define SMB2_SESSION_SETUP cpu_to_le16(SMB2_SESSION_SETUP_HE) 65 #define SMB2_LOGOFF cpu_to_le16(SMB2_LOGOFF_HE) 66 #define SMB2_TREE_CONNECT cpu_to_le16(SMB2_TREE_CONNECT_HE) 67 #define SMB2_TREE_DISCONNECT cpu_to_le16(SMB2_TREE_DISCONNECT_HE) 68 #define SMB2_CREATE cpu_to_le16(SMB2_CREATE_HE) 69 #define SMB2_CLOSE cpu_to_le16(SMB2_CLOSE_HE) 70 #define SMB2_FLUSH cpu_to_le16(SMB2_FLUSH_HE) 71 #define SMB2_READ cpu_to_le16(SMB2_READ_HE) 72 #define SMB2_WRITE cpu_to_le16(SMB2_WRITE_HE) 73 #define SMB2_LOCK cpu_to_le16(SMB2_LOCK_HE) 74 #define SMB2_IOCTL cpu_to_le16(SMB2_IOCTL_HE) 75 #define SMB2_CANCEL cpu_to_le16(SMB2_CANCEL_HE) 76 #define SMB2_ECHO cpu_to_le16(SMB2_ECHO_HE) 77 #define SMB2_QUERY_DIRECTORY cpu_to_le16(SMB2_QUERY_DIRECTORY_HE) 78 #define SMB2_CHANGE_NOTIFY cpu_to_le16(SMB2_CHANGE_NOTIFY_HE) 79 #define SMB2_QUERY_INFO cpu_to_le16(SMB2_QUERY_INFO_HE) 80 #define SMB2_SET_INFO cpu_to_le16(SMB2_SET_INFO_HE) 81 #define SMB2_OPLOCK_BREAK cpu_to_le16(SMB2_OPLOCK_BREAK_HE) 82 83 #define SMB2_INTERNAL_CMD cpu_to_le16(0xFFFF) 84 85 #define NUMBER_OF_SMB2_COMMANDS 0x0013 86 87 /* 52 transform hdr + 64 hdr + 88 create rsp */ 88 #define SMB2_TRANSFORM_HEADER_SIZE 52 89 #define MAX_SMB2_HDR_SIZE 204 90 91 #define SMB2_PROTO_NUMBER cpu_to_le32(0x424d53fe) 92 #define SMB2_TRANSFORM_PROTO_NUM cpu_to_le32(0x424d53fd) 93 94 /* 95 * SMB2 Header Definition 96 * 97 * "MBZ" : Must be Zero 98 * "BB" : BugBug, Something to check/review/analyze later 99 * "PDU" : "Protocol Data Unit" (ie a network "frame") 100 * 101 */ 102 103 #define SMB2_HEADER_STRUCTURE_SIZE cpu_to_le16(64) 104 105 struct smb2_sync_hdr { 106 __le32 ProtocolId; /* 0xFE 'S' 'M' 'B' */ 107 __le16 StructureSize; /* 64 */ 108 __le16 CreditCharge; /* MBZ */ 109 __le32 Status; /* Error from server */ 110 __le16 Command; 111 __le16 CreditRequest; /* CreditResponse */ 112 __le32 Flags; 113 __le32 NextCommand; 114 __le64 MessageId; 115 __le32 ProcessId; 116 __u32 TreeId; /* opaque - so do not make little endian */ 117 __u64 SessionId; /* opaque - so do not make little endian */ 118 __u8 Signature[16]; 119 } __packed; 120 121 struct smb2_sync_pdu { 122 struct smb2_sync_hdr sync_hdr; 123 __le16 StructureSize2; /* size of wct area (varies, request specific) */ 124 } __packed; 125 126 #define SMB3_AES128CCM_NONCE 11 127 #define SMB3_AES128GCM_NONCE 12 128 129 struct smb2_transform_hdr { 130 __le32 ProtocolId; /* 0xFD 'S' 'M' 'B' */ 131 __u8 Signature[16]; 132 __u8 Nonce[16]; 133 __le32 OriginalMessageSize; 134 __u16 Reserved1; 135 __le16 Flags; /* EncryptionAlgorithm */ 136 __u64 SessionId; 137 } __packed; 138 139 /* 140 * SMB2 flag definitions 141 */ 142 #define SMB2_FLAGS_SERVER_TO_REDIR cpu_to_le32(0x00000001) 143 #define SMB2_FLAGS_ASYNC_COMMAND cpu_to_le32(0x00000002) 144 #define SMB2_FLAGS_RELATED_OPERATIONS cpu_to_le32(0x00000004) 145 #define SMB2_FLAGS_SIGNED cpu_to_le32(0x00000008) 146 #define SMB2_FLAGS_PRIORITY_MASK cpu_to_le32(0x00000070) /* SMB3.1.1 */ 147 #define SMB2_FLAGS_DFS_OPERATIONS cpu_to_le32(0x10000000) 148 #define SMB2_FLAGS_REPLAY_OPERATION cpu_to_le32(0x20000000) /* SMB3 & up */ 149 150 /* 151 * Definitions for SMB2 Protocol Data Units (network frames) 152 * 153 * See MS-SMB2.PDF specification for protocol details. 154 * The Naming convention is the lower case version of the SMB2 155 * command code name for the struct. Note that structures must be packed. 156 * 157 */ 158 159 #define COMPOUND_FID 0xFFFFFFFFFFFFFFFFULL 160 161 #define SMB2_ERROR_STRUCTURE_SIZE2 cpu_to_le16(9) 162 163 struct smb2_err_rsp { 164 struct smb2_sync_hdr sync_hdr; 165 __le16 StructureSize; 166 __le16 Reserved; /* MBZ */ 167 __le32 ByteCount; /* even if zero, at least one byte follows */ 168 __u8 ErrorData[1]; /* variable length */ 169 } __packed; 170 171 #define SYMLINK_ERROR_TAG 0x4c4d5953 172 173 struct smb2_symlink_err_rsp { 174 __le32 SymLinkLength; 175 __le32 SymLinkErrorTag; 176 __le32 ReparseTag; 177 __le16 ReparseDataLength; 178 __le16 UnparsedPathLength; 179 __le16 SubstituteNameOffset; 180 __le16 SubstituteNameLength; 181 __le16 PrintNameOffset; 182 __le16 PrintNameLength; 183 __le32 Flags; 184 __u8 PathBuffer[0]; 185 } __packed; 186 187 /* SMB 3.1.1 and later dialects. See MS-SMB2 section 2.2.2.1 */ 188 struct smb2_error_context_rsp { 189 __le32 ErrorDataLength; 190 __le32 ErrorId; 191 __u8 ErrorContextData; /* ErrorDataLength long array */ 192 } __packed; 193 194 /* Defines for Type field below (see MS-SMB2 2.2.2.2.2.1) */ 195 #define MOVE_DST_IPADDR_V4 cpu_to_le32(0x00000001) 196 #define MOVE_DST_IPADDR_V6 cpu_to_le32(0x00000002) 197 198 struct move_dst_ipaddr { 199 __le32 Type; 200 __u32 Reserved; 201 __u8 address[16]; /* IPv4 followed by 12 bytes rsvd or IPv6 address */ 202 } __packed; 203 204 struct share_redirect_error_context_rsp { 205 __le32 StructureSize; 206 __le32 NotificationType; 207 __le32 ResourceNameOffset; 208 __le32 ResourceNameLength; 209 __le16 Flags; 210 __le16 TargetType; 211 __le32 IPAddrCount; 212 struct move_dst_ipaddr IpAddrMoveList[0]; 213 /* __u8 ResourceName[] */ /* Name of share as counted Unicode string */ 214 } __packed; 215 216 #define SMB2_CLIENT_GUID_SIZE 16 217 218 struct smb2_negotiate_req { 219 struct smb2_sync_hdr sync_hdr; 220 __le16 StructureSize; /* Must be 36 */ 221 __le16 DialectCount; 222 __le16 SecurityMode; 223 __le16 Reserved; /* MBZ */ 224 __le32 Capabilities; 225 __u8 ClientGUID[SMB2_CLIENT_GUID_SIZE]; 226 /* In SMB3.02 and earlier next three were MBZ le64 ClientStartTime */ 227 __le32 NegotiateContextOffset; /* SMB3.1.1 only. MBZ earlier */ 228 __le16 NegotiateContextCount; /* SMB3.1.1 only. MBZ earlier */ 229 __le16 Reserved2; 230 __le16 Dialects[4]; /* BB expand this if autonegotiate > 4 dialects */ 231 } __packed; 232 233 /* Dialects */ 234 #define SMB10_PROT_ID 0x0000 /* local only, not sent on wire w/CIFS negprot */ 235 #define SMB20_PROT_ID 0x0202 236 #define SMB21_PROT_ID 0x0210 237 #define SMB30_PROT_ID 0x0300 238 #define SMB302_PROT_ID 0x0302 239 #define SMB311_PROT_ID 0x0311 240 #define BAD_PROT_ID 0xFFFF 241 242 /* SecurityMode flags */ 243 #define SMB2_NEGOTIATE_SIGNING_ENABLED 0x0001 244 #define SMB2_NEGOTIATE_SIGNING_REQUIRED 0x0002 245 #define SMB2_SEC_MODE_FLAGS_ALL 0x0003 246 247 /* Capabilities flags */ 248 #define SMB2_GLOBAL_CAP_DFS 0x00000001 249 #define SMB2_GLOBAL_CAP_LEASING 0x00000002 /* Resp only New to SMB2.1 */ 250 #define SMB2_GLOBAL_CAP_LARGE_MTU 0X00000004 /* Resp only New to SMB2.1 */ 251 #define SMB2_GLOBAL_CAP_MULTI_CHANNEL 0x00000008 /* New to SMB3 */ 252 #define SMB2_GLOBAL_CAP_PERSISTENT_HANDLES 0x00000010 /* New to SMB3 */ 253 #define SMB2_GLOBAL_CAP_DIRECTORY_LEASING 0x00000020 /* New to SMB3 */ 254 #define SMB2_GLOBAL_CAP_ENCRYPTION 0x00000040 /* New to SMB3 */ 255 /* Internal types */ 256 #define SMB2_NT_FIND 0x00100000 257 #define SMB2_LARGE_FILES 0x00200000 258 259 260 /* Negotiate Contexts - ContextTypes. See MS-SMB2 section 2.2.3.1 for details */ 261 #define SMB2_PREAUTH_INTEGRITY_CAPABILITIES cpu_to_le16(1) 262 #define SMB2_ENCRYPTION_CAPABILITIES cpu_to_le16(2) 263 #define SMB2_COMPRESSION_CAPABILITIES cpu_to_le16(3) 264 #define SMB2_NETNAME_NEGOTIATE_CONTEXT_ID cpu_to_le16(5) 265 #define SMB2_POSIX_EXTENSIONS_AVAILABLE cpu_to_le16(0x100) 266 267 struct smb2_neg_context { 268 __le16 ContextType; 269 __le16 DataLength; 270 __le32 Reserved; 271 /* Followed by array of data */ 272 } __packed; 273 274 #define SMB311_LINUX_CLIENT_SALT_SIZE 32 275 /* Hash Algorithm Types */ 276 #define SMB2_PREAUTH_INTEGRITY_SHA512 cpu_to_le16(0x0001) 277 #define SMB2_PREAUTH_HASH_SIZE 64 278 279 /* 280 * SaltLength that the server send can be zero, so the only three required 281 * fields (all __le16) end up six bytes total, so the minimum context data len 282 * in the response is six bytes which accounts for 283 * 284 * HashAlgorithmCount, SaltLength, and 1 HashAlgorithm. 285 */ 286 #define MIN_PREAUTH_CTXT_DATA_LEN 6 287 288 struct smb2_preauth_neg_context { 289 __le16 ContextType; /* 1 */ 290 __le16 DataLength; 291 __le32 Reserved; 292 __le16 HashAlgorithmCount; /* 1 */ 293 __le16 SaltLength; 294 __le16 HashAlgorithms; /* HashAlgorithms[0] since only one defined */ 295 __u8 Salt[SMB311_LINUX_CLIENT_SALT_SIZE]; 296 } __packed; 297 298 /* Encryption Algorithms Ciphers */ 299 #define SMB2_ENCRYPTION_AES128_CCM cpu_to_le16(0x0001) 300 #define SMB2_ENCRYPTION_AES128_GCM cpu_to_le16(0x0002) 301 302 /* Min encrypt context data is one cipher so 2 bytes + 2 byte count field */ 303 #define MIN_ENCRYPT_CTXT_DATA_LEN 4 304 struct smb2_encryption_neg_context { 305 __le16 ContextType; /* 2 */ 306 __le16 DataLength; 307 __le32 Reserved; 308 __le16 CipherCount; /* AES-128-GCM and AES-128-CCM */ 309 __le16 Ciphers[2]; 310 } __packed; 311 312 /* See MS-SMB2 2.2.3.1.3 */ 313 #define SMB3_COMPRESS_NONE cpu_to_le16(0x0000) 314 #define SMB3_COMPRESS_LZNT1 cpu_to_le16(0x0001) 315 #define SMB3_COMPRESS_LZ77 cpu_to_le16(0x0002) 316 #define SMB3_COMPRESS_LZ77_HUFF cpu_to_le16(0x0003) 317 318 struct smb2_compression_capabilities_context { 319 __le16 ContextType; /* 3 */ 320 __le16 DataLength; 321 __u32 Reserved; 322 __le16 CompressionAlgorithmCount; 323 __u16 Padding; 324 __u32 Reserved1; 325 __le16 CompressionAlgorithms[3]; 326 } __packed; 327 328 /* 329 * For smb2_netname_negotiate_context_id See MS-SMB2 2.2.3.1.4. 330 * Its struct simply contains NetName, an array of Unicode characters 331 */ 332 struct smb2_netname_neg_context { 333 __le16 ContextType; /* 0x100 */ 334 __le16 DataLength; 335 __le32 Reserved; 336 __le16 NetName[0]; /* hostname of target converted to UCS-2 */ 337 } __packed; 338 339 #define POSIX_CTXT_DATA_LEN 16 340 struct smb2_posix_neg_context { 341 __le16 ContextType; /* 0x100 */ 342 __le16 DataLength; 343 __le32 Reserved; 344 __u8 Name[16]; /* POSIX ctxt GUID 93AD25509CB411E7B42383DE968BCD7C */ 345 } __packed; 346 347 struct smb2_negotiate_rsp { 348 struct smb2_sync_hdr sync_hdr; 349 __le16 StructureSize; /* Must be 65 */ 350 __le16 SecurityMode; 351 __le16 DialectRevision; 352 __le16 NegotiateContextCount; /* Prior to SMB3.1.1 was Reserved & MBZ */ 353 __u8 ServerGUID[16]; 354 __le32 Capabilities; 355 __le32 MaxTransactSize; 356 __le32 MaxReadSize; 357 __le32 MaxWriteSize; 358 __le64 SystemTime; /* MBZ */ 359 __le64 ServerStartTime; 360 __le16 SecurityBufferOffset; 361 __le16 SecurityBufferLength; 362 __le32 NegotiateContextOffset; /* Pre:SMB3.1.1 was reserved/ignored */ 363 __u8 Buffer[1]; /* variable length GSS security buffer */ 364 } __packed; 365 366 /* Flags */ 367 #define SMB2_SESSION_REQ_FLAG_BINDING 0x01 368 #define SMB2_SESSION_REQ_FLAG_ENCRYPT_DATA 0x04 369 370 struct smb2_sess_setup_req { 371 struct smb2_sync_hdr sync_hdr; 372 __le16 StructureSize; /* Must be 25 */ 373 __u8 Flags; 374 __u8 SecurityMode; 375 __le32 Capabilities; 376 __le32 Channel; 377 __le16 SecurityBufferOffset; 378 __le16 SecurityBufferLength; 379 __u64 PreviousSessionId; 380 __u8 Buffer[1]; /* variable length GSS security buffer */ 381 } __packed; 382 383 /* Currently defined SessionFlags */ 384 #define SMB2_SESSION_FLAG_IS_GUEST 0x0001 385 #define SMB2_SESSION_FLAG_IS_NULL 0x0002 386 #define SMB2_SESSION_FLAG_ENCRYPT_DATA 0x0004 387 struct smb2_sess_setup_rsp { 388 struct smb2_sync_hdr sync_hdr; 389 __le16 StructureSize; /* Must be 9 */ 390 __le16 SessionFlags; 391 __le16 SecurityBufferOffset; 392 __le16 SecurityBufferLength; 393 __u8 Buffer[1]; /* variable length GSS security buffer */ 394 } __packed; 395 396 struct smb2_logoff_req { 397 struct smb2_sync_hdr sync_hdr; 398 __le16 StructureSize; /* Must be 4 */ 399 __le16 Reserved; 400 } __packed; 401 402 struct smb2_logoff_rsp { 403 struct smb2_sync_hdr sync_hdr; 404 __le16 StructureSize; /* Must be 4 */ 405 __le16 Reserved; 406 } __packed; 407 408 /* Flags/Reserved for SMB3.1.1 */ 409 #define SMB2_TREE_CONNECT_FLAG_CLUSTER_RECONNECT cpu_to_le16(0x0001) 410 #define SMB2_TREE_CONNECT_FLAG_REDIRECT_TO_OWNER cpu_to_le16(0x0002) 411 #define SMB2_TREE_CONNECT_FLAG_EXTENSION_PRESENT cpu_to_le16(0x0004) 412 413 struct smb2_tree_connect_req { 414 struct smb2_sync_hdr sync_hdr; 415 __le16 StructureSize; /* Must be 9 */ 416 __le16 Reserved; /* Flags in SMB3.1.1 */ 417 __le16 PathOffset; 418 __le16 PathLength; 419 __u8 Buffer[1]; /* variable length */ 420 } __packed; 421 422 /* See MS-SMB2 section 2.2.9.2 */ 423 /* Context Types */ 424 #define SMB2_RESERVED_TREE_CONNECT_CONTEXT_ID 0x0000 425 #define SMB2_REMOTED_IDENTITY_TREE_CONNECT_CONTEXT_ID cpu_to_le16(0x0001) 426 427 struct tree_connect_contexts { 428 __le16 ContextType; 429 __le16 DataLength; 430 __le32 Reserved; 431 __u8 Data[0]; 432 } __packed; 433 434 /* Remoted identity tree connect context structures - see MS-SMB2 2.2.9.2.1 */ 435 struct smb3_blob_data { 436 __le16 BlobSize; 437 __u8 BlobData[0]; 438 } __packed; 439 440 /* Valid values for Attr */ 441 #define SE_GROUP_MANDATORY 0x00000001 442 #define SE_GROUP_ENABLED_BY_DEFAULT 0x00000002 443 #define SE_GROUP_ENABLED 0x00000004 444 #define SE_GROUP_OWNER 0x00000008 445 #define SE_GROUP_USE_FOR_DENY_ONLY 0x00000010 446 #define SE_GROUP_INTEGRITY 0x00000020 447 #define SE_GROUP_INTEGRITY_ENABLED 0x00000040 448 #define SE_GROUP_RESOURCE 0x20000000 449 #define SE_GROUP_LOGON_ID 0xC0000000 450 451 /* struct sid_attr_data is SidData array in BlobData format then le32 Attr */ 452 453 struct sid_array_data { 454 __le16 SidAttrCount; 455 /* SidAttrList - array of sid_attr_data structs */ 456 } __packed; 457 458 struct luid_attr_data { 459 460 } __packed; 461 462 /* 463 * struct privilege_data is the same as BLOB_DATA - see MS-SMB2 2.2.9.2.1.5 464 * but with size of LUID_ATTR_DATA struct and BlobData set to LUID_ATTR DATA 465 */ 466 467 struct privilege_array_data { 468 __le16 PrivilegeCount; 469 /* array of privilege_data structs */ 470 } __packed; 471 472 struct remoted_identity_tcon_context { 473 __le16 TicketType; /* must be 0x0001 */ 474 __le16 TicketSize; /* total size of this struct */ 475 __le16 User; /* offset to SID_ATTR_DATA struct with user info */ 476 __le16 UserName; /* offset to null terminated Unicode username string */ 477 __le16 Domain; /* offset to null terminated Unicode domain name */ 478 __le16 Groups; /* offset to SID_ARRAY_DATA struct with group info */ 479 __le16 RestrictedGroups; /* similar to above */ 480 __le16 Privileges; /* offset to PRIVILEGE_ARRAY_DATA struct */ 481 __le16 PrimaryGroup; /* offset to SID_ARRAY_DATA struct */ 482 __le16 Owner; /* offset to BLOB_DATA struct */ 483 __le16 DefaultDacl; /* offset to BLOB_DATA struct */ 484 __le16 DeviceGroups; /* offset to SID_ARRAY_DATA struct */ 485 __le16 UserClaims; /* offset to BLOB_DATA struct */ 486 __le16 DeviceClaims; /* offset to BLOB_DATA struct */ 487 __u8 TicketInfo[0]; /* variable length buf - remoted identity data */ 488 } __packed; 489 490 struct smb2_tree_connect_req_extension { 491 __le32 TreeConnectContextOffset; 492 __le16 TreeConnectContextCount; 493 __u8 Reserved[10]; 494 __u8 PathName[0]; /* variable sized array */ 495 /* followed by array of TreeConnectContexts */ 496 } __packed; 497 498 struct smb2_tree_connect_rsp { 499 struct smb2_sync_hdr sync_hdr; 500 __le16 StructureSize; /* Must be 16 */ 501 __u8 ShareType; /* see below */ 502 __u8 Reserved; 503 __le32 ShareFlags; /* see below */ 504 __le32 Capabilities; /* see below */ 505 __le32 MaximalAccess; 506 } __packed; 507 508 /* Possible ShareType values */ 509 #define SMB2_SHARE_TYPE_DISK 0x01 510 #define SMB2_SHARE_TYPE_PIPE 0x02 511 #define SMB2_SHARE_TYPE_PRINT 0x03 512 513 /* 514 * Possible ShareFlags - exactly one and only one of the first 4 caching flags 515 * must be set (any of the remaining, SHI1005, flags may be set individually 516 * or in combination. 517 */ 518 #define SMB2_SHAREFLAG_MANUAL_CACHING 0x00000000 519 #define SMB2_SHAREFLAG_AUTO_CACHING 0x00000010 520 #define SMB2_SHAREFLAG_VDO_CACHING 0x00000020 521 #define SMB2_SHAREFLAG_NO_CACHING 0x00000030 522 #define SHI1005_FLAGS_DFS 0x00000001 523 #define SHI1005_FLAGS_DFS_ROOT 0x00000002 524 #define SHI1005_FLAGS_RESTRICT_EXCLUSIVE_OPENS 0x00000100 525 #define SHI1005_FLAGS_FORCE_SHARED_DELETE 0x00000200 526 #define SHI1005_FLAGS_ALLOW_NAMESPACE_CACHING 0x00000400 527 #define SHI1005_FLAGS_ACCESS_BASED_DIRECTORY_ENUM 0x00000800 528 #define SHI1005_FLAGS_FORCE_LEVELII_OPLOCK 0x00001000 529 #define SHI1005_FLAGS_ENABLE_HASH_V1 0x00002000 530 #define SHI1005_FLAGS_ENABLE_HASH_V2 0x00004000 531 #define SHI1005_FLAGS_ENCRYPT_DATA 0x00008000 532 #define SMB2_SHAREFLAG_IDENTITY_REMOTING 0x00040000 /* 3.1.1 */ 533 #define SHI1005_FLAGS_ALL 0x0004FF33 534 535 /* Possible share capabilities */ 536 #define SMB2_SHARE_CAP_DFS cpu_to_le32(0x00000008) /* all dialects */ 537 #define SMB2_SHARE_CAP_CONTINUOUS_AVAILABILITY cpu_to_le32(0x00000010) /* 3.0 */ 538 #define SMB2_SHARE_CAP_SCALEOUT cpu_to_le32(0x00000020) /* 3.0 */ 539 #define SMB2_SHARE_CAP_CLUSTER cpu_to_le32(0x00000040) /* 3.0 */ 540 #define SMB2_SHARE_CAP_ASYMMETRIC cpu_to_le32(0x00000080) /* 3.02 */ 541 #define SMB2_SHARE_CAP_REDIRECT_TO_OWNER cpu_to_le32(0x00000100) /* 3.1.1 */ 542 543 struct smb2_tree_disconnect_req { 544 struct smb2_sync_hdr sync_hdr; 545 __le16 StructureSize; /* Must be 4 */ 546 __le16 Reserved; 547 } __packed; 548 549 struct smb2_tree_disconnect_rsp { 550 struct smb2_sync_hdr sync_hdr; 551 __le16 StructureSize; /* Must be 4 */ 552 __le16 Reserved; 553 } __packed; 554 555 /* File Attrubutes */ 556 #define FILE_ATTRIBUTE_READONLY 0x00000001 557 #define FILE_ATTRIBUTE_HIDDEN 0x00000002 558 #define FILE_ATTRIBUTE_SYSTEM 0x00000004 559 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010 560 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020 561 #define FILE_ATTRIBUTE_NORMAL 0x00000080 562 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100 563 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200 564 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400 565 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800 566 #define FILE_ATTRIBUTE_OFFLINE 0x00001000 567 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000 568 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000 569 #define FILE_ATTRIBUTE_INTEGRITY_STREAM 0x00008000 570 #define FILE_ATTRIBUTE_NO_SCRUB_DATA 0x00020000 571 572 /* Oplock levels */ 573 #define SMB2_OPLOCK_LEVEL_NONE 0x00 574 #define SMB2_OPLOCK_LEVEL_II 0x01 575 #define SMB2_OPLOCK_LEVEL_EXCLUSIVE 0x08 576 #define SMB2_OPLOCK_LEVEL_BATCH 0x09 577 #define SMB2_OPLOCK_LEVEL_LEASE 0xFF 578 /* Non-spec internal type */ 579 #define SMB2_OPLOCK_LEVEL_NOCHANGE 0x99 580 581 /* Desired Access Flags */ 582 #define FILE_READ_DATA_LE cpu_to_le32(0x00000001) 583 #define FILE_WRITE_DATA_LE cpu_to_le32(0x00000002) 584 #define FILE_APPEND_DATA_LE cpu_to_le32(0x00000004) 585 #define FILE_READ_EA_LE cpu_to_le32(0x00000008) 586 #define FILE_WRITE_EA_LE cpu_to_le32(0x00000010) 587 #define FILE_EXECUTE_LE cpu_to_le32(0x00000020) 588 #define FILE_READ_ATTRIBUTES_LE cpu_to_le32(0x00000080) 589 #define FILE_WRITE_ATTRIBUTES_LE cpu_to_le32(0x00000100) 590 #define FILE_DELETE_LE cpu_to_le32(0x00010000) 591 #define FILE_READ_CONTROL_LE cpu_to_le32(0x00020000) 592 #define FILE_WRITE_DAC_LE cpu_to_le32(0x00040000) 593 #define FILE_WRITE_OWNER_LE cpu_to_le32(0x00080000) 594 #define FILE_SYNCHRONIZE_LE cpu_to_le32(0x00100000) 595 #define FILE_ACCESS_SYSTEM_SECURITY_LE cpu_to_le32(0x01000000) 596 #define FILE_MAXIMAL_ACCESS_LE cpu_to_le32(0x02000000) 597 #define FILE_GENERIC_ALL_LE cpu_to_le32(0x10000000) 598 #define FILE_GENERIC_EXECUTE_LE cpu_to_le32(0x20000000) 599 #define FILE_GENERIC_WRITE_LE cpu_to_le32(0x40000000) 600 #define FILE_GENERIC_READ_LE cpu_to_le32(0x80000000) 601 602 /* ShareAccess Flags */ 603 #define FILE_SHARE_READ_LE cpu_to_le32(0x00000001) 604 #define FILE_SHARE_WRITE_LE cpu_to_le32(0x00000002) 605 #define FILE_SHARE_DELETE_LE cpu_to_le32(0x00000004) 606 #define FILE_SHARE_ALL_LE cpu_to_le32(0x00000007) 607 608 /* CreateDisposition Flags */ 609 #define FILE_SUPERSEDE_LE cpu_to_le32(0x00000000) 610 #define FILE_OPEN_LE cpu_to_le32(0x00000001) 611 #define FILE_CREATE_LE cpu_to_le32(0x00000002) 612 #define FILE_OPEN_IF_LE cpu_to_le32(0x00000003) 613 #define FILE_OVERWRITE_LE cpu_to_le32(0x00000004) 614 #define FILE_OVERWRITE_IF_LE cpu_to_le32(0x00000005) 615 616 /* CreateOptions Flags */ 617 #define FILE_DIRECTORY_FILE_LE cpu_to_le32(0x00000001) 618 /* same as #define CREATE_NOT_FILE_LE cpu_to_le32(0x00000001) */ 619 #define FILE_WRITE_THROUGH_LE cpu_to_le32(0x00000002) 620 #define FILE_SEQUENTIAL_ONLY_LE cpu_to_le32(0x00000004) 621 #define FILE_NO_INTERMEDIATE_BUFFERRING_LE cpu_to_le32(0x00000008) 622 #define FILE_SYNCHRONOUS_IO_ALERT_LE cpu_to_le32(0x00000010) 623 #define FILE_SYNCHRONOUS_IO_NON_ALERT_LE cpu_to_le32(0x00000020) 624 #define FILE_NON_DIRECTORY_FILE_LE cpu_to_le32(0x00000040) 625 #define FILE_COMPLETE_IF_OPLOCKED_LE cpu_to_le32(0x00000100) 626 #define FILE_NO_EA_KNOWLEDGE_LE cpu_to_le32(0x00000200) 627 #define FILE_RANDOM_ACCESS_LE cpu_to_le32(0x00000800) 628 #define FILE_DELETE_ON_CLOSE_LE cpu_to_le32(0x00001000) 629 #define FILE_OPEN_BY_FILE_ID_LE cpu_to_le32(0x00002000) 630 #define FILE_OPEN_FOR_BACKUP_INTENT_LE cpu_to_le32(0x00004000) 631 #define FILE_NO_COMPRESSION_LE cpu_to_le32(0x00008000) 632 #define FILE_RESERVE_OPFILTER_LE cpu_to_le32(0x00100000) 633 #define FILE_OPEN_REPARSE_POINT_LE cpu_to_le32(0x00200000) 634 #define FILE_OPEN_NO_RECALL_LE cpu_to_le32(0x00400000) 635 #define FILE_OPEN_FOR_FREE_SPACE_QUERY_LE cpu_to_le32(0x00800000) 636 637 #define FILE_READ_RIGHTS_LE (FILE_READ_DATA_LE | FILE_READ_EA_LE \ 638 | FILE_READ_ATTRIBUTES_LE) 639 #define FILE_WRITE_RIGHTS_LE (FILE_WRITE_DATA_LE | FILE_APPEND_DATA_LE \ 640 | FILE_WRITE_EA_LE | FILE_WRITE_ATTRIBUTES_LE) 641 #define FILE_EXEC_RIGHTS_LE (FILE_EXECUTE_LE) 642 643 /* Impersonation Levels */ 644 #define IL_ANONYMOUS cpu_to_le32(0x00000000) 645 #define IL_IDENTIFICATION cpu_to_le32(0x00000001) 646 #define IL_IMPERSONATION cpu_to_le32(0x00000002) 647 #define IL_DELEGATE cpu_to_le32(0x00000003) 648 649 /* Create Context Values */ 650 #define SMB2_CREATE_EA_BUFFER "ExtA" /* extended attributes */ 651 #define SMB2_CREATE_SD_BUFFER "SecD" /* security descriptor */ 652 #define SMB2_CREATE_DURABLE_HANDLE_REQUEST "DHnQ" 653 #define SMB2_CREATE_DURABLE_HANDLE_RECONNECT "DHnC" 654 #define SMB2_CREATE_ALLOCATION_SIZE "AlSi" 655 #define SMB2_CREATE_QUERY_MAXIMAL_ACCESS_REQUEST "MxAc" 656 #define SMB2_CREATE_TIMEWARP_REQUEST "TWrp" 657 #define SMB2_CREATE_QUERY_ON_DISK_ID "QFid" 658 #define SMB2_CREATE_REQUEST_LEASE "RqLs" 659 #define SMB2_CREATE_DURABLE_HANDLE_REQUEST_V2 "DH2Q" 660 #define SMB2_CREATE_DURABLE_HANDLE_RECONNECT_V2 "DH2C" 661 #define SMB2_CREATE_APP_INSTANCE_ID 0x45BCA66AEFA7F74A9008FA462E144D74 662 #define SMB2_CREATE_APP_INSTANCE_VERSION 0xB982D0B73B56074FA07B524A8116A010 663 #define SVHDX_OPEN_DEVICE_CONTEX 0x9CCBCF9E04C1E643980E158DA1F6EC83 664 #define SMB2_CREATE_TAG_POSIX 0x93AD25509CB411E7B42383DE968BCD7C 665 666 /* Flag (SMB3 open response) values */ 667 #define SMB2_CREATE_FLAG_REPARSEPOINT 0x01 668 669 /* 670 * Maximum number of iovs we need for an open/create request. 671 * [0] : struct smb2_create_req 672 * [1] : path 673 * [2] : lease context 674 * [3] : durable context 675 * [4] : posix context 676 * [5] : time warp context 677 * [6] : query id context 678 * [7] : compound padding 679 */ 680 #define SMB2_CREATE_IOV_SIZE 8 681 682 struct smb2_create_req { 683 struct smb2_sync_hdr sync_hdr; 684 __le16 StructureSize; /* Must be 57 */ 685 __u8 SecurityFlags; 686 __u8 RequestedOplockLevel; 687 __le32 ImpersonationLevel; 688 __le64 SmbCreateFlags; 689 __le64 Reserved; 690 __le32 DesiredAccess; 691 __le32 FileAttributes; 692 __le32 ShareAccess; 693 __le32 CreateDisposition; 694 __le32 CreateOptions; 695 __le16 NameOffset; 696 __le16 NameLength; 697 __le32 CreateContextsOffset; 698 __le32 CreateContextsLength; 699 __u8 Buffer[0]; 700 } __packed; 701 702 /* 703 * Maximum size of a SMB2_CREATE response is 64 (smb2 header) + 704 * 88 (fixed part of create response) + 520 (path) + 208 (contexts) + 705 * 2 bytes of padding. 706 */ 707 #define MAX_SMB2_CREATE_RESPONSE_SIZE 880 708 709 struct smb2_create_rsp { 710 struct smb2_sync_hdr sync_hdr; 711 __le16 StructureSize; /* Must be 89 */ 712 __u8 OplockLevel; 713 __u8 Flag; /* 0x01 if reparse point */ 714 __le32 CreateAction; 715 __le64 CreationTime; 716 __le64 LastAccessTime; 717 __le64 LastWriteTime; 718 __le64 ChangeTime; 719 __le64 AllocationSize; 720 __le64 EndofFile; 721 __le32 FileAttributes; 722 __le32 Reserved2; 723 __u64 PersistentFileId; /* opaque endianness */ 724 __u64 VolatileFileId; /* opaque endianness */ 725 __le32 CreateContextsOffset; 726 __le32 CreateContextsLength; 727 __u8 Buffer[1]; 728 } __packed; 729 730 struct create_context { 731 __le32 Next; 732 __le16 NameOffset; 733 __le16 NameLength; 734 __le16 Reserved; 735 __le16 DataOffset; 736 __le32 DataLength; 737 __u8 Buffer[0]; 738 } __packed; 739 740 #define SMB2_LEASE_READ_CACHING_HE 0x01 741 #define SMB2_LEASE_HANDLE_CACHING_HE 0x02 742 #define SMB2_LEASE_WRITE_CACHING_HE 0x04 743 744 #define SMB2_LEASE_NONE cpu_to_le32(0x00) 745 #define SMB2_LEASE_READ_CACHING cpu_to_le32(0x01) 746 #define SMB2_LEASE_HANDLE_CACHING cpu_to_le32(0x02) 747 #define SMB2_LEASE_WRITE_CACHING cpu_to_le32(0x04) 748 749 #define SMB2_LEASE_FLAG_BREAK_IN_PROGRESS cpu_to_le32(0x02) 750 #define SMB2_LEASE_FLAG_PARENT_LEASE_KEY_SET cpu_to_le32(0x00000004) 751 752 #define SMB2_LEASE_KEY_SIZE 16 753 754 struct lease_context { 755 u8 LeaseKey[SMB2_LEASE_KEY_SIZE]; 756 __le32 LeaseState; 757 __le32 LeaseFlags; 758 __le64 LeaseDuration; 759 } __packed; 760 761 struct lease_context_v2 { 762 u8 LeaseKey[SMB2_LEASE_KEY_SIZE]; 763 __le32 LeaseState; 764 __le32 LeaseFlags; 765 __le64 LeaseDuration; 766 __le64 ParentLeaseKeyLow; 767 __le64 ParentLeaseKeyHigh; 768 __le16 Epoch; 769 __le16 Reserved; 770 } __packed; 771 772 struct create_lease { 773 struct create_context ccontext; 774 __u8 Name[8]; 775 struct lease_context lcontext; 776 } __packed; 777 778 struct create_lease_v2 { 779 struct create_context ccontext; 780 __u8 Name[8]; 781 struct lease_context_v2 lcontext; 782 __u8 Pad[4]; 783 } __packed; 784 785 struct create_durable { 786 struct create_context ccontext; 787 __u8 Name[8]; 788 union { 789 __u8 Reserved[16]; 790 struct { 791 __u64 PersistentFileId; 792 __u64 VolatileFileId; 793 } Fid; 794 } Data; 795 } __packed; 796 797 struct create_posix { 798 struct create_context ccontext; 799 __u8 Name[16]; 800 __le32 Mode; 801 __u32 Reserved; 802 } __packed; 803 804 /* See MS-SMB2 2.2.13.2.11 */ 805 /* Flags */ 806 #define SMB2_DHANDLE_FLAG_PERSISTENT 0x00000002 807 struct durable_context_v2 { 808 __le32 Timeout; 809 __le32 Flags; 810 __u64 Reserved; 811 __u8 CreateGuid[16]; 812 } __packed; 813 814 struct create_durable_v2 { 815 struct create_context ccontext; 816 __u8 Name[8]; 817 struct durable_context_v2 dcontext; 818 } __packed; 819 820 /* See MS-SMB2 2.2.13.2.12 */ 821 struct durable_reconnect_context_v2 { 822 struct { 823 __u64 PersistentFileId; 824 __u64 VolatileFileId; 825 } Fid; 826 __u8 CreateGuid[16]; 827 __le32 Flags; /* see above DHANDLE_FLAG_PERSISTENT */ 828 } __packed; 829 830 /* See MS-SMB2 2.2.14.2.9 */ 831 struct create_on_disk_id { 832 struct create_context ccontext; 833 __u8 Name[8]; 834 __le64 DiskFileId; 835 __le64 VolumeId; 836 __u32 Reserved[4]; 837 } __packed; 838 839 /* See MS-SMB2 2.2.14.2.12 */ 840 struct durable_reconnect_context_v2_rsp { 841 __le32 Timeout; 842 __le32 Flags; /* see above DHANDLE_FLAG_PERSISTENT */ 843 } __packed; 844 845 struct create_durable_handle_reconnect_v2 { 846 struct create_context ccontext; 847 __u8 Name[8]; 848 struct durable_reconnect_context_v2 dcontext; 849 __u8 Pad[4]; 850 } __packed; 851 852 /* See MS-SMB2 2.2.13.2.5 */ 853 struct crt_twarp_ctxt { 854 struct create_context ccontext; 855 __u8 Name[8]; 856 __le64 Timestamp; 857 858 } __packed; 859 860 /* See MS-SMB2 2.2.13.2.9 */ 861 struct crt_query_id_ctxt { 862 struct create_context ccontext; 863 __u8 Name[8]; 864 } __packed; 865 866 #define COPY_CHUNK_RES_KEY_SIZE 24 867 struct resume_key_req { 868 char ResumeKey[COPY_CHUNK_RES_KEY_SIZE]; 869 __le32 ContextLength; /* MBZ */ 870 char Context[0]; /* ignored, Windows sets to 4 bytes of zero */ 871 } __packed; 872 873 /* this goes in the ioctl buffer when doing a copychunk request */ 874 struct copychunk_ioctl { 875 char SourceKey[COPY_CHUNK_RES_KEY_SIZE]; 876 __le32 ChunkCount; /* we are only sending 1 */ 877 __le32 Reserved; 878 /* array will only be one chunk long for us */ 879 __le64 SourceOffset; 880 __le64 TargetOffset; 881 __le32 Length; /* how many bytes to copy */ 882 __u32 Reserved2; 883 } __packed; 884 885 /* this goes in the ioctl buffer when doing FSCTL_SET_ZERO_DATA */ 886 struct file_zero_data_information { 887 __le64 FileOffset; 888 __le64 BeyondFinalZero; 889 } __packed; 890 891 struct copychunk_ioctl_rsp { 892 __le32 ChunksWritten; 893 __le32 ChunkBytesWritten; 894 __le32 TotalBytesWritten; 895 } __packed; 896 897 struct fsctl_set_integrity_information_req { 898 __le16 ChecksumAlgorithm; 899 __le16 Reserved; 900 __le32 Flags; 901 } __packed; 902 903 struct fsctl_get_integrity_information_rsp { 904 __le16 ChecksumAlgorithm; 905 __le16 Reserved; 906 __le32 Flags; 907 __le32 ChecksumChunkSizeInBytes; 908 __le32 ClusterSizeInBytes; 909 } __packed; 910 911 struct file_allocated_range_buffer { 912 __le64 file_offset; 913 __le64 length; 914 } __packed; 915 916 /* Integrity ChecksumAlgorithm choices for above */ 917 #define CHECKSUM_TYPE_NONE 0x0000 918 #define CHECKSUM_TYPE_CRC64 0x0002 919 #define CHECKSUM_TYPE_UNCHANGED 0xFFFF /* set only */ 920 921 /* Integrity flags for above */ 922 #define FSCTL_INTEGRITY_FLAG_CHECKSUM_ENFORCEMENT_OFF 0x00000001 923 924 /* Reparse structures - see MS-FSCC 2.1.2 */ 925 926 /* struct fsctl_reparse_info_req is empty, only response structs (see below) */ 927 928 struct reparse_data_buffer { 929 __le32 ReparseTag; 930 __le16 ReparseDataLength; 931 __u16 Reserved; 932 __u8 DataBuffer[0]; /* Variable Length */ 933 } __packed; 934 935 struct reparse_guid_data_buffer { 936 __le32 ReparseTag; 937 __le16 ReparseDataLength; 938 __u16 Reserved; 939 __u8 ReparseGuid[16]; 940 __u8 DataBuffer[0]; /* Variable Length */ 941 } __packed; 942 943 struct reparse_mount_point_data_buffer { 944 __le32 ReparseTag; 945 __le16 ReparseDataLength; 946 __u16 Reserved; 947 __le16 SubstituteNameOffset; 948 __le16 SubstituteNameLength; 949 __le16 PrintNameOffset; 950 __le16 PrintNameLength; 951 __u8 PathBuffer[0]; /* Variable Length */ 952 } __packed; 953 954 #define SYMLINK_FLAG_RELATIVE 0x00000001 955 956 struct reparse_symlink_data_buffer { 957 __le32 ReparseTag; 958 __le16 ReparseDataLength; 959 __u16 Reserved; 960 __le16 SubstituteNameOffset; 961 __le16 SubstituteNameLength; 962 __le16 PrintNameOffset; 963 __le16 PrintNameLength; 964 __le32 Flags; 965 __u8 PathBuffer[0]; /* Variable Length */ 966 } __packed; 967 968 /* See MS-FSCC 2.1.2.6 and cifspdu.h for struct reparse_posix_data */ 969 970 971 /* See MS-DFSC 2.2.2 */ 972 struct fsctl_get_dfs_referral_req { 973 __le16 MaxReferralLevel; 974 __u8 RequestFileName[]; 975 } __packed; 976 977 /* DFS response is struct get_dfs_refer_rsp */ 978 979 /* See MS-SMB2 2.2.31.3 */ 980 struct network_resiliency_req { 981 __le32 Timeout; 982 __le32 Reserved; 983 } __packed; 984 /* There is no buffer for the response ie no struct network_resiliency_rsp */ 985 986 987 struct validate_negotiate_info_req { 988 __le32 Capabilities; 989 __u8 Guid[SMB2_CLIENT_GUID_SIZE]; 990 __le16 SecurityMode; 991 __le16 DialectCount; 992 __le16 Dialects[4]; /* BB expand this if autonegotiate > 4 dialects */ 993 } __packed; 994 995 struct validate_negotiate_info_rsp { 996 __le32 Capabilities; 997 __u8 Guid[SMB2_CLIENT_GUID_SIZE]; 998 __le16 SecurityMode; 999 __le16 Dialect; /* Dialect in use for the connection */ 1000 } __packed; 1001 1002 #define RSS_CAPABLE cpu_to_le32(0x00000001) 1003 #define RDMA_CAPABLE cpu_to_le32(0x00000002) 1004 1005 #define INTERNETWORK cpu_to_le16(0x0002) 1006 #define INTERNETWORKV6 cpu_to_le16(0x0017) 1007 1008 struct network_interface_info_ioctl_rsp { 1009 __le32 Next; /* next interface. zero if this is last one */ 1010 __le32 IfIndex; 1011 __le32 Capability; /* RSS or RDMA Capable */ 1012 __le32 Reserved; 1013 __le64 LinkSpeed; 1014 __le16 Family; 1015 __u8 Buffer[126]; 1016 } __packed; 1017 1018 struct iface_info_ipv4 { 1019 __be16 Port; 1020 __be32 IPv4Address; 1021 __be64 Reserved; 1022 } __packed; 1023 1024 struct iface_info_ipv6 { 1025 __be16 Port; 1026 __be32 FlowInfo; 1027 __u8 IPv6Address[16]; 1028 __be32 ScopeId; 1029 } __packed; 1030 1031 #define NO_FILE_ID 0xFFFFFFFFFFFFFFFFULL /* general ioctls to srv not to file */ 1032 1033 struct compress_ioctl { 1034 __le16 CompressionState; /* See cifspdu.h for possible flag values */ 1035 } __packed; 1036 1037 struct duplicate_extents_to_file { 1038 __u64 PersistentFileHandle; /* source file handle, opaque endianness */ 1039 __u64 VolatileFileHandle; 1040 __le64 SourceFileOffset; 1041 __le64 TargetFileOffset; 1042 __le64 ByteCount; /* Bytes to be copied */ 1043 } __packed; 1044 1045 /* 1046 * Maximum number of iovs we need for an ioctl request. 1047 * [0] : struct smb2_ioctl_req 1048 * [1] : in_data 1049 */ 1050 #define SMB2_IOCTL_IOV_SIZE 2 1051 1052 struct smb2_ioctl_req { 1053 struct smb2_sync_hdr sync_hdr; 1054 __le16 StructureSize; /* Must be 57 */ 1055 __u16 Reserved; 1056 __le32 CtlCode; 1057 __u64 PersistentFileId; /* opaque endianness */ 1058 __u64 VolatileFileId; /* opaque endianness */ 1059 __le32 InputOffset; 1060 __le32 InputCount; 1061 __le32 MaxInputResponse; 1062 __le32 OutputOffset; 1063 __le32 OutputCount; 1064 __le32 MaxOutputResponse; 1065 __le32 Flags; 1066 __u32 Reserved2; 1067 __u8 Buffer[0]; 1068 } __packed; 1069 1070 struct smb2_ioctl_rsp { 1071 struct smb2_sync_hdr sync_hdr; 1072 __le16 StructureSize; /* Must be 57 */ 1073 __u16 Reserved; 1074 __le32 CtlCode; 1075 __u64 PersistentFileId; /* opaque endianness */ 1076 __u64 VolatileFileId; /* opaque endianness */ 1077 __le32 InputOffset; 1078 __le32 InputCount; 1079 __le32 OutputOffset; 1080 __le32 OutputCount; 1081 __le32 Flags; 1082 __u32 Reserved2; 1083 /* char * buffer[] */ 1084 } __packed; 1085 1086 /* Currently defined values for close flags */ 1087 #define SMB2_CLOSE_FLAG_POSTQUERY_ATTRIB cpu_to_le16(0x0001) 1088 struct smb2_close_req { 1089 struct smb2_sync_hdr sync_hdr; 1090 __le16 StructureSize; /* Must be 24 */ 1091 __le16 Flags; 1092 __le32 Reserved; 1093 __u64 PersistentFileId; /* opaque endianness */ 1094 __u64 VolatileFileId; /* opaque endianness */ 1095 } __packed; 1096 1097 /* 1098 * Maximum size of a SMB2_CLOSE response is 64 (smb2 header) + 60 (data) 1099 */ 1100 #define MAX_SMB2_CLOSE_RESPONSE_SIZE 124 1101 1102 struct smb2_close_rsp { 1103 struct smb2_sync_hdr sync_hdr; 1104 __le16 StructureSize; /* 60 */ 1105 __le16 Flags; 1106 __le32 Reserved; 1107 __le64 CreationTime; 1108 __le64 LastAccessTime; 1109 __le64 LastWriteTime; 1110 __le64 ChangeTime; 1111 __le64 AllocationSize; /* Beginning of FILE_STANDARD_INFO equivalent */ 1112 __le64 EndOfFile; 1113 __le32 Attributes; 1114 } __packed; 1115 1116 struct smb2_flush_req { 1117 struct smb2_sync_hdr sync_hdr; 1118 __le16 StructureSize; /* Must be 24 */ 1119 __le16 Reserved1; 1120 __le32 Reserved2; 1121 __u64 PersistentFileId; /* opaque endianness */ 1122 __u64 VolatileFileId; /* opaque endianness */ 1123 } __packed; 1124 1125 struct smb2_flush_rsp { 1126 struct smb2_sync_hdr sync_hdr; 1127 __le16 StructureSize; 1128 __le16 Reserved; 1129 } __packed; 1130 1131 /* For read request Flags field below, following flag is defined for SMB3.02 */ 1132 #define SMB2_READFLAG_READ_UNBUFFERED 0x01 1133 #define SMB2_READFLAG_REQUEST_COMPRESSED 0x02 /* See MS-SMB2 2.2.19 */ 1134 1135 /* Channel field for read and write: exactly one of following flags can be set*/ 1136 #define SMB2_CHANNEL_NONE cpu_to_le32(0x00000000) 1137 #define SMB2_CHANNEL_RDMA_V1 cpu_to_le32(0x00000001) /* SMB3 or later */ 1138 #define SMB2_CHANNEL_RDMA_V1_INVALIDATE cpu_to_le32(0x00000002) /* >= SMB3.02 */ 1139 1140 /* SMB2 read request without RFC1001 length at the beginning */ 1141 struct smb2_read_plain_req { 1142 struct smb2_sync_hdr sync_hdr; 1143 __le16 StructureSize; /* Must be 49 */ 1144 __u8 Padding; /* offset from start of SMB2 header to place read */ 1145 __u8 Flags; /* MBZ unless SMB3.02 or later */ 1146 __le32 Length; 1147 __le64 Offset; 1148 __u64 PersistentFileId; /* opaque endianness */ 1149 __u64 VolatileFileId; /* opaque endianness */ 1150 __le32 MinimumCount; 1151 __le32 Channel; /* MBZ except for SMB3 or later */ 1152 __le32 RemainingBytes; 1153 __le16 ReadChannelInfoOffset; 1154 __le16 ReadChannelInfoLength; 1155 __u8 Buffer[1]; 1156 } __packed; 1157 1158 struct smb2_read_rsp { 1159 struct smb2_sync_hdr sync_hdr; 1160 __le16 StructureSize; /* Must be 17 */ 1161 __u8 DataOffset; 1162 __u8 Reserved; 1163 __le32 DataLength; 1164 __le32 DataRemaining; 1165 __u32 Reserved2; 1166 __u8 Buffer[1]; 1167 } __packed; 1168 1169 /* For write request Flags field below the following flags are defined: */ 1170 #define SMB2_WRITEFLAG_WRITE_THROUGH 0x00000001 /* SMB2.1 or later */ 1171 #define SMB2_WRITEFLAG_WRITE_UNBUFFERED 0x00000002 /* SMB3.02 or later */ 1172 1173 struct smb2_write_req { 1174 struct smb2_sync_hdr sync_hdr; 1175 __le16 StructureSize; /* Must be 49 */ 1176 __le16 DataOffset; /* offset from start of SMB2 header to write data */ 1177 __le32 Length; 1178 __le64 Offset; 1179 __u64 PersistentFileId; /* opaque endianness */ 1180 __u64 VolatileFileId; /* opaque endianness */ 1181 __le32 Channel; /* Reserved MBZ */ 1182 __le32 RemainingBytes; 1183 __le16 WriteChannelInfoOffset; 1184 __le16 WriteChannelInfoLength; 1185 __le32 Flags; 1186 __u8 Buffer[1]; 1187 } __packed; 1188 1189 struct smb2_write_rsp { 1190 struct smb2_sync_hdr sync_hdr; 1191 __le16 StructureSize; /* Must be 17 */ 1192 __u8 DataOffset; 1193 __u8 Reserved; 1194 __le32 DataLength; 1195 __le32 DataRemaining; 1196 __u32 Reserved2; 1197 __u8 Buffer[1]; 1198 } __packed; 1199 1200 /* notify flags */ 1201 #define SMB2_WATCH_TREE 0x0001 1202 1203 /* notify completion filter flags. See MS-FSCC 2.6 and MS-SMB2 2.2.35 */ 1204 #define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001 1205 #define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002 1206 #define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004 1207 #define FILE_NOTIFY_CHANGE_SIZE 0x00000008 1208 #define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010 1209 #define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020 1210 #define FILE_NOTIFY_CHANGE_CREATION 0x00000040 1211 #define FILE_NOTIFY_CHANGE_EA 0x00000080 1212 #define FILE_NOTIFY_CHANGE_SECURITY 0x00000100 1213 #define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200 1214 #define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400 1215 #define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800 1216 1217 struct smb2_change_notify_req { 1218 struct smb2_sync_hdr sync_hdr; 1219 __le16 StructureSize; 1220 __le16 Flags; 1221 __le32 OutputBufferLength; 1222 __u64 PersistentFileId; /* opaque endianness */ 1223 __u64 VolatileFileId; /* opaque endianness */ 1224 __le32 CompletionFilter; 1225 __u32 Reserved; 1226 } __packed; 1227 1228 struct smb2_change_notify_rsp { 1229 struct smb2_sync_hdr sync_hdr; 1230 __le16 StructureSize; /* Must be 9 */ 1231 __le16 OutputBufferOffset; 1232 __le32 OutputBufferLength; 1233 __u8 Buffer[1]; /* array of file notify structs */ 1234 } __packed; 1235 1236 #define SMB2_LOCKFLAG_SHARED_LOCK 0x0001 1237 #define SMB2_LOCKFLAG_EXCLUSIVE_LOCK 0x0002 1238 #define SMB2_LOCKFLAG_UNLOCK 0x0004 1239 #define SMB2_LOCKFLAG_FAIL_IMMEDIATELY 0x0010 1240 1241 struct smb2_lock_element { 1242 __le64 Offset; 1243 __le64 Length; 1244 __le32 Flags; 1245 __le32 Reserved; 1246 } __packed; 1247 1248 struct smb2_lock_req { 1249 struct smb2_sync_hdr sync_hdr; 1250 __le16 StructureSize; /* Must be 48 */ 1251 __le16 LockCount; 1252 __le32 Reserved; 1253 __u64 PersistentFileId; /* opaque endianness */ 1254 __u64 VolatileFileId; /* opaque endianness */ 1255 /* Followed by at least one */ 1256 struct smb2_lock_element locks[1]; 1257 } __packed; 1258 1259 struct smb2_lock_rsp { 1260 struct smb2_sync_hdr sync_hdr; 1261 __le16 StructureSize; /* Must be 4 */ 1262 __le16 Reserved; 1263 } __packed; 1264 1265 struct smb2_echo_req { 1266 struct smb2_sync_hdr sync_hdr; 1267 __le16 StructureSize; /* Must be 4 */ 1268 __u16 Reserved; 1269 } __packed; 1270 1271 struct smb2_echo_rsp { 1272 struct smb2_sync_hdr sync_hdr; 1273 __le16 StructureSize; /* Must be 4 */ 1274 __u16 Reserved; 1275 } __packed; 1276 1277 /* search (query_directory) Flags field */ 1278 #define SMB2_RESTART_SCANS 0x01 1279 #define SMB2_RETURN_SINGLE_ENTRY 0x02 1280 #define SMB2_INDEX_SPECIFIED 0x04 1281 #define SMB2_REOPEN 0x10 1282 1283 struct smb2_query_directory_req { 1284 struct smb2_sync_hdr sync_hdr; 1285 __le16 StructureSize; /* Must be 33 */ 1286 __u8 FileInformationClass; 1287 __u8 Flags; 1288 __le32 FileIndex; 1289 __u64 PersistentFileId; /* opaque endianness */ 1290 __u64 VolatileFileId; /* opaque endianness */ 1291 __le16 FileNameOffset; 1292 __le16 FileNameLength; 1293 __le32 OutputBufferLength; 1294 __u8 Buffer[1]; 1295 } __packed; 1296 1297 struct smb2_query_directory_rsp { 1298 struct smb2_sync_hdr sync_hdr; 1299 __le16 StructureSize; /* Must be 9 */ 1300 __le16 OutputBufferOffset; 1301 __le32 OutputBufferLength; 1302 __u8 Buffer[1]; 1303 } __packed; 1304 1305 /* Possible InfoType values */ 1306 #define SMB2_O_INFO_FILE 0x01 1307 #define SMB2_O_INFO_FILESYSTEM 0x02 1308 #define SMB2_O_INFO_SECURITY 0x03 1309 #define SMB2_O_INFO_QUOTA 0x04 1310 1311 /* Security info type additionalinfo flags. See MS-SMB2 (2.2.37) or MS-DTYP */ 1312 #define OWNER_SECINFO 0x00000001 1313 #define GROUP_SECINFO 0x00000002 1314 #define DACL_SECINFO 0x00000004 1315 #define SACL_SECINFO 0x00000008 1316 #define LABEL_SECINFO 0x00000010 1317 #define ATTRIBUTE_SECINFO 0x00000020 1318 #define SCOPE_SECINFO 0x00000040 1319 #define BACKUP_SECINFO 0x00010000 1320 #define UNPROTECTED_SACL_SECINFO 0x10000000 1321 #define UNPROTECTED_DACL_SECINFO 0x20000000 1322 #define PROTECTED_SACL_SECINFO 0x40000000 1323 #define PROTECTED_DACL_SECINFO 0x80000000 1324 1325 /* Flags used for FileFullEAinfo */ 1326 #define SL_RESTART_SCAN 0x00000001 1327 #define SL_RETURN_SINGLE_ENTRY 0x00000002 1328 #define SL_INDEX_SPECIFIED 0x00000004 1329 1330 struct smb2_query_info_req { 1331 struct smb2_sync_hdr sync_hdr; 1332 __le16 StructureSize; /* Must be 41 */ 1333 __u8 InfoType; 1334 __u8 FileInfoClass; 1335 __le32 OutputBufferLength; 1336 __le16 InputBufferOffset; 1337 __u16 Reserved; 1338 __le32 InputBufferLength; 1339 __le32 AdditionalInformation; 1340 __le32 Flags; 1341 __u64 PersistentFileId; /* opaque endianness */ 1342 __u64 VolatileFileId; /* opaque endianness */ 1343 __u8 Buffer[1]; 1344 } __packed; 1345 1346 struct smb2_query_info_rsp { 1347 struct smb2_sync_hdr sync_hdr; 1348 __le16 StructureSize; /* Must be 9 */ 1349 __le16 OutputBufferOffset; 1350 __le32 OutputBufferLength; 1351 __u8 Buffer[1]; 1352 } __packed; 1353 1354 /* 1355 * Maximum number of iovs we need for a set-info request. 1356 * The largest one is rename/hardlink 1357 * [0] : struct smb2_set_info_req + smb2_file_[rename|link]_info 1358 * [1] : path 1359 * [2] : compound padding 1360 */ 1361 #define SMB2_SET_INFO_IOV_SIZE 3 1362 1363 struct smb2_set_info_req { 1364 struct smb2_sync_hdr sync_hdr; 1365 __le16 StructureSize; /* Must be 33 */ 1366 __u8 InfoType; 1367 __u8 FileInfoClass; 1368 __le32 BufferLength; 1369 __le16 BufferOffset; 1370 __u16 Reserved; 1371 __le32 AdditionalInformation; 1372 __u64 PersistentFileId; /* opaque endianness */ 1373 __u64 VolatileFileId; /* opaque endianness */ 1374 __u8 Buffer[1]; 1375 } __packed; 1376 1377 struct smb2_set_info_rsp { 1378 struct smb2_sync_hdr sync_hdr; 1379 __le16 StructureSize; /* Must be 2 */ 1380 } __packed; 1381 1382 struct smb2_oplock_break { 1383 struct smb2_sync_hdr sync_hdr; 1384 __le16 StructureSize; /* Must be 24 */ 1385 __u8 OplockLevel; 1386 __u8 Reserved; 1387 __le32 Reserved2; 1388 __u64 PersistentFid; 1389 __u64 VolatileFid; 1390 } __packed; 1391 1392 #define SMB2_NOTIFY_BREAK_LEASE_FLAG_ACK_REQUIRED cpu_to_le32(0x01) 1393 1394 struct smb2_lease_break { 1395 struct smb2_sync_hdr sync_hdr; 1396 __le16 StructureSize; /* Must be 44 */ 1397 __le16 Epoch; 1398 __le32 Flags; 1399 __u8 LeaseKey[16]; 1400 __le32 CurrentLeaseState; 1401 __le32 NewLeaseState; 1402 __le32 BreakReason; 1403 __le32 AccessMaskHint; 1404 __le32 ShareMaskHint; 1405 } __packed; 1406 1407 struct smb2_lease_ack { 1408 struct smb2_sync_hdr sync_hdr; 1409 __le16 StructureSize; /* Must be 36 */ 1410 __le16 Reserved; 1411 __le32 Flags; 1412 __u8 LeaseKey[16]; 1413 __le32 LeaseState; 1414 __le64 LeaseDuration; 1415 } __packed; 1416 1417 /* 1418 * PDU infolevel structure definitions 1419 * BB consider moving to a different header 1420 */ 1421 1422 /* File System Information Classes */ 1423 #define FS_VOLUME_INFORMATION 1 /* Query */ 1424 #define FS_LABEL_INFORMATION 2 /* Local only */ 1425 #define FS_SIZE_INFORMATION 3 /* Query */ 1426 #define FS_DEVICE_INFORMATION 4 /* Query */ 1427 #define FS_ATTRIBUTE_INFORMATION 5 /* Query */ 1428 #define FS_CONTROL_INFORMATION 6 /* Query, Set */ 1429 #define FS_FULL_SIZE_INFORMATION 7 /* Query */ 1430 #define FS_OBJECT_ID_INFORMATION 8 /* Query, Set */ 1431 #define FS_DRIVER_PATH_INFORMATION 9 /* Local only */ 1432 #define FS_VOLUME_FLAGS_INFORMATION 10 /* Local only */ 1433 #define FS_SECTOR_SIZE_INFORMATION 11 /* SMB3 or later. Query */ 1434 #define FS_POSIX_INFORMATION 100 /* SMB3.1.1 POSIX. Query */ 1435 1436 struct smb2_fs_full_size_info { 1437 __le64 TotalAllocationUnits; 1438 __le64 CallerAvailableAllocationUnits; 1439 __le64 ActualAvailableAllocationUnits; 1440 __le32 SectorsPerAllocationUnit; 1441 __le32 BytesPerSector; 1442 } __packed; 1443 1444 #define SSINFO_FLAGS_ALIGNED_DEVICE 0x00000001 1445 #define SSINFO_FLAGS_PARTITION_ALIGNED_ON_DEVICE 0x00000002 1446 #define SSINFO_FLAGS_NO_SEEK_PENALTY 0x00000004 1447 #define SSINFO_FLAGS_TRIM_ENABLED 0x00000008 1448 1449 /* sector size info struct */ 1450 struct smb3_fs_ss_info { 1451 __le32 LogicalBytesPerSector; 1452 __le32 PhysicalBytesPerSectorForAtomicity; 1453 __le32 PhysicalBytesPerSectorForPerf; 1454 __le32 FileSystemEffectivePhysicalBytesPerSectorForAtomicity; 1455 __le32 Flags; 1456 __le32 ByteOffsetForSectorAlignment; 1457 __le32 ByteOffsetForPartitionAlignment; 1458 } __packed; 1459 1460 /* volume info struct - see MS-FSCC 2.5.9 */ 1461 #define MAX_VOL_LABEL_LEN 32 1462 struct smb3_fs_vol_info { 1463 __le64 VolumeCreationTime; 1464 __u32 VolumeSerialNumber; 1465 __le32 VolumeLabelLength; /* includes trailing null */ 1466 __u8 SupportsObjects; /* True if eg like NTFS, supports objects */ 1467 __u8 Reserved; 1468 __u8 VolumeLabel[0]; /* variable len */ 1469 } __packed; 1470 1471 /* partial list of QUERY INFO levels */ 1472 #define FILE_DIRECTORY_INFORMATION 1 1473 #define FILE_FULL_DIRECTORY_INFORMATION 2 1474 #define FILE_BOTH_DIRECTORY_INFORMATION 3 1475 #define FILE_BASIC_INFORMATION 4 1476 #define FILE_STANDARD_INFORMATION 5 1477 #define FILE_INTERNAL_INFORMATION 6 1478 #define FILE_EA_INFORMATION 7 1479 #define FILE_ACCESS_INFORMATION 8 1480 #define FILE_NAME_INFORMATION 9 1481 #define FILE_RENAME_INFORMATION 10 1482 #define FILE_LINK_INFORMATION 11 1483 #define FILE_NAMES_INFORMATION 12 1484 #define FILE_DISPOSITION_INFORMATION 13 1485 #define FILE_POSITION_INFORMATION 14 1486 #define FILE_FULL_EA_INFORMATION 15 1487 #define FILE_MODE_INFORMATION 16 1488 #define FILE_ALIGNMENT_INFORMATION 17 1489 #define FILE_ALL_INFORMATION 18 1490 #define FILE_ALLOCATION_INFORMATION 19 1491 #define FILE_END_OF_FILE_INFORMATION 20 1492 #define FILE_ALTERNATE_NAME_INFORMATION 21 1493 #define FILE_STREAM_INFORMATION 22 1494 #define FILE_PIPE_INFORMATION 23 1495 #define FILE_PIPE_LOCAL_INFORMATION 24 1496 #define FILE_PIPE_REMOTE_INFORMATION 25 1497 #define FILE_MAILSLOT_QUERY_INFORMATION 26 1498 #define FILE_MAILSLOT_SET_INFORMATION 27 1499 #define FILE_COMPRESSION_INFORMATION 28 1500 #define FILE_OBJECT_ID_INFORMATION 29 1501 /* Number 30 not defined in documents */ 1502 #define FILE_MOVE_CLUSTER_INFORMATION 31 1503 #define FILE_QUOTA_INFORMATION 32 1504 #define FILE_REPARSE_POINT_INFORMATION 33 1505 #define FILE_NETWORK_OPEN_INFORMATION 34 1506 #define FILE_ATTRIBUTE_TAG_INFORMATION 35 1507 #define FILE_TRACKING_INFORMATION 36 1508 #define FILEID_BOTH_DIRECTORY_INFORMATION 37 1509 #define FILEID_FULL_DIRECTORY_INFORMATION 38 1510 #define FILE_VALID_DATA_LENGTH_INFORMATION 39 1511 #define FILE_SHORT_NAME_INFORMATION 40 1512 #define FILE_SFIO_RESERVE_INFORMATION 44 1513 #define FILE_SFIO_VOLUME_INFORMATION 45 1514 #define FILE_HARD_LINK_INFORMATION 46 1515 #define FILE_NORMALIZED_NAME_INFORMATION 48 1516 #define FILEID_GLOBAL_TX_DIRECTORY_INFORMATION 50 1517 #define FILE_STANDARD_LINK_INFORMATION 54 1518 1519 struct smb2_file_internal_info { 1520 __le64 IndexNumber; 1521 } __packed; /* level 6 Query */ 1522 1523 struct smb2_file_rename_info { /* encoding of request for level 10 */ 1524 __u8 ReplaceIfExists; /* 1 = replace existing target with new */ 1525 /* 0 = fail if target already exists */ 1526 __u8 Reserved[7]; 1527 __u64 RootDirectory; /* MBZ for network operations (why says spec?) */ 1528 __le32 FileNameLength; 1529 char FileName[0]; /* New name to be assigned */ 1530 } __packed; /* level 10 Set */ 1531 1532 struct smb2_file_link_info { /* encoding of request for level 11 */ 1533 __u8 ReplaceIfExists; /* 1 = replace existing link with new */ 1534 /* 0 = fail if link already exists */ 1535 __u8 Reserved[7]; 1536 __u64 RootDirectory; /* MBZ for network operations (why says spec?) */ 1537 __le32 FileNameLength; 1538 char FileName[0]; /* Name to be assigned to new link */ 1539 } __packed; /* level 11 Set */ 1540 1541 struct smb2_file_full_ea_info { /* encoding of response for level 15 */ 1542 __le32 next_entry_offset; 1543 __u8 flags; 1544 __u8 ea_name_length; 1545 __le16 ea_value_length; 1546 char ea_data[0]; /* \0 terminated name plus value */ 1547 } __packed; /* level 15 Set */ 1548 1549 /* 1550 * This level 18, although with struct with same name is different from cifs 1551 * level 0x107. Level 0x107 has an extra u64 between AccessFlags and 1552 * CurrentByteOffset. 1553 */ 1554 struct smb2_file_all_info { /* data block encoding of response to level 18 */ 1555 __le64 CreationTime; /* Beginning of FILE_BASIC_INFO equivalent */ 1556 __le64 LastAccessTime; 1557 __le64 LastWriteTime; 1558 __le64 ChangeTime; 1559 __le32 Attributes; 1560 __u32 Pad1; /* End of FILE_BASIC_INFO_INFO equivalent */ 1561 __le64 AllocationSize; /* Beginning of FILE_STANDARD_INFO equivalent */ 1562 __le64 EndOfFile; /* size ie offset to first free byte in file */ 1563 __le32 NumberOfLinks; /* hard links */ 1564 __u8 DeletePending; 1565 __u8 Directory; 1566 __u16 Pad2; /* End of FILE_STANDARD_INFO equivalent */ 1567 __le64 IndexNumber; 1568 __le32 EASize; 1569 __le32 AccessFlags; 1570 __le64 CurrentByteOffset; 1571 __le32 Mode; 1572 __le32 AlignmentRequirement; 1573 __le32 FileNameLength; 1574 char FileName[1]; 1575 } __packed; /* level 18 Query */ 1576 1577 struct smb2_file_eof_info { /* encoding of request for level 10 */ 1578 __le64 EndOfFile; /* new end of file value */ 1579 } __packed; /* level 20 Set */ 1580 1581 extern char smb2_padding[7]; 1582 1583 #endif /* _SMB2PDU_H */ 1584