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