1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 #ifndef _SMB2PDU_H
25 #define _SMB2PDU_H
26
27 #include <net/sock.h>
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 #define SMB2_NEGOTIATE_HE 0x0000
43 #define SMB2_SESSION_SETUP_HE 0x0001
44 #define SMB2_LOGOFF_HE 0x0002
45 #define SMB2_TREE_CONNECT_HE 0x0003
46 #define SMB2_TREE_DISCONNECT_HE 0x0004
47 #define SMB2_CREATE_HE 0x0005
48 #define SMB2_CLOSE_HE 0x0006
49 #define SMB2_FLUSH_HE 0x0007
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
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
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
96
97
98
99
100
101
102
103 #define SMB2_HEADER_STRUCTURE_SIZE cpu_to_le16(64)
104
105 struct smb2_sync_hdr {
106 __le32 ProtocolId;
107 __le16 StructureSize;
108 __le16 CreditCharge;
109 __le32 Status;
110 __le16 Command;
111 __le16 CreditRequest;
112 __le32 Flags;
113 __le32 NextCommand;
114 __le64 MessageId;
115 __le32 ProcessId;
116 __u32 TreeId;
117 __u64 SessionId;
118 __u8 Signature[16];
119 } __packed;
120
121 struct smb2_sync_pdu {
122 struct smb2_sync_hdr sync_hdr;
123 __le16 StructureSize2;
124 } __packed;
125
126 #define SMB3_AES128CCM_NONCE 11
127 #define SMB3_AES128GCM_NONCE 12
128
129 struct smb2_transform_hdr {
130 __le32 ProtocolId;
131 __u8 Signature[16];
132 __u8 Nonce[16];
133 __le32 OriginalMessageSize;
134 __u16 Reserved1;
135 __le16 Flags;
136 __u64 SessionId;
137 } __packed;
138
139
140
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)
147 #define SMB2_FLAGS_DFS_OPERATIONS cpu_to_le32(0x10000000)
148 #define SMB2_FLAGS_REPLAY_OPERATION cpu_to_le32(0x20000000)
149
150
151
152
153
154
155
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;
167 __le32 ByteCount;
168 __u8 ErrorData[1];
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
188 struct smb2_error_context_rsp {
189 __le32 ErrorDataLength;
190 __le32 ErrorId;
191 __u8 ErrorContextData;
192 } __packed;
193
194
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];
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
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;
221 __le16 DialectCount;
222 __le16 SecurityMode;
223 __le16 Reserved;
224 __le32 Capabilities;
225 __u8 ClientGUID[SMB2_CLIENT_GUID_SIZE];
226
227 __le32 NegotiateContextOffset;
228 __le16 NegotiateContextCount;
229 __le16 Reserved2;
230 __le16 Dialects[1];
231 } __packed;
232
233
234 #define SMB10_PROT_ID 0x0000
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
243 #define SMB2_NEGOTIATE_SIGNING_ENABLED 0x0001
244 #define SMB2_NEGOTIATE_SIGNING_REQUIRED 0x0002
245 #define SMB2_SEC_MODE_FLAGS_ALL 0x0003
246
247
248 #define SMB2_GLOBAL_CAP_DFS 0x00000001
249 #define SMB2_GLOBAL_CAP_LEASING 0x00000002
250 #define SMB2_GLOBAL_CAP_LARGE_MTU 0X00000004
251 #define SMB2_GLOBAL_CAP_MULTI_CHANNEL 0x00000008
252 #define SMB2_GLOBAL_CAP_PERSISTENT_HANDLES 0x00000010
253 #define SMB2_GLOBAL_CAP_DIRECTORY_LEASING 0x00000020
254 #define SMB2_GLOBAL_CAP_ENCRYPTION 0x00000040
255
256 #define SMB2_NT_FIND 0x00100000
257 #define SMB2_LARGE_FILES 0x00200000
258
259
260
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
272 } __packed;
273
274 #define SMB311_SALT_SIZE 32
275
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;
282 __le16 DataLength;
283 __le32 Reserved;
284 __le16 HashAlgorithmCount;
285 __le16 SaltLength;
286 __le16 HashAlgorithms;
287 __u8 Salt[SMB311_SALT_SIZE];
288 } __packed;
289
290
291 #define SMB2_ENCRYPTION_AES128_CCM cpu_to_le16(0x0001)
292 #define SMB2_ENCRYPTION_AES128_GCM cpu_to_le16(0x0002)
293
294
295 #define MIN_ENCRYPT_CTXT_DATA_LEN 4
296 struct smb2_encryption_neg_context {
297 __le16 ContextType;
298 __le16 DataLength;
299 __le32 Reserved;
300 __le16 CipherCount;
301 __le16 Ciphers[2];
302 } __packed;
303
304
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;
312 __le16 DataLength;
313 __u32 Reserved;
314 __le16 CompressionAlgorithmCount;
315 __u16 Padding;
316 __u32 Reserved1;
317 __le16 CompressionAlgorithms[3];
318 } __packed;
319
320
321
322
323
324 struct smb2_netname_neg_context {
325 __le16 ContextType;
326 __le16 DataLength;
327 __le32 Reserved;
328 __le16 NetName[0];
329 } __packed;
330
331 #define POSIX_CTXT_DATA_LEN 16
332 struct smb2_posix_neg_context {
333 __le16 ContextType;
334 __le16 DataLength;
335 __le32 Reserved;
336 __u8 Name[16];
337 } __packed;
338
339 struct smb2_negotiate_rsp {
340 struct smb2_sync_hdr sync_hdr;
341 __le16 StructureSize;
342 __le16 SecurityMode;
343 __le16 DialectRevision;
344 __le16 NegotiateContextCount;
345 __u8 ServerGUID[16];
346 __le32 Capabilities;
347 __le32 MaxTransactSize;
348 __le32 MaxReadSize;
349 __le32 MaxWriteSize;
350 __le64 SystemTime;
351 __le64 ServerStartTime;
352 __le16 SecurityBufferOffset;
353 __le16 SecurityBufferLength;
354 __le32 NegotiateContextOffset;
355 __u8 Buffer[1];
356 } __packed;
357
358
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;
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];
373 } __packed;
374
375
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;
382 __le16 SessionFlags;
383 __le16 SecurityBufferOffset;
384 __le16 SecurityBufferLength;
385 __u8 Buffer[1];
386 } __packed;
387
388 struct smb2_logoff_req {
389 struct smb2_sync_hdr sync_hdr;
390 __le16 StructureSize;
391 __le16 Reserved;
392 } __packed;
393
394 struct smb2_logoff_rsp {
395 struct smb2_sync_hdr sync_hdr;
396 __le16 StructureSize;
397 __le16 Reserved;
398 } __packed;
399
400
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;
408 __le16 Reserved;
409 __le16 PathOffset;
410 __le16 PathLength;
411 __u8 Buffer[1];
412 } __packed;
413
414
415
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
427 struct smb3_blob_data {
428 __le16 BlobSize;
429 __u8 BlobData[0];
430 } __packed;
431
432
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
444
445 struct sid_array_data {
446 __le16 SidAttrCount;
447
448 } __packed;
449
450 struct luid_attr_data {
451
452 } __packed;
453
454
455
456
457
458
459 struct privilege_array_data {
460 __le16 PrivilegeCount;
461
462 } __packed;
463
464 struct remoted_identity_tcon_context {
465 __le16 TicketType;
466 __le16 TicketSize;
467 __le16 User;
468 __le16 UserName;
469 __le16 Domain;
470 __le16 Groups;
471 __le16 RestrictedGroups;
472 __le16 Privileges;
473 __le16 PrimaryGroup;
474 __le16 Owner;
475 __le16 DefaultDacl;
476 __le16 DeviceGroups;
477 __le16 UserClaims;
478 __le16 DeviceClaims;
479 __u8 TicketInfo[0];
480 } __packed;
481
482 struct smb2_tree_connect_req_extension {
483 __le32 TreeConnectContextOffset;
484 __le16 TreeConnectContextCount;
485 __u8 Reserved[10];
486 __u8 PathName[0];
487
488 } __packed;
489
490 struct smb2_tree_connect_rsp {
491 struct smb2_sync_hdr sync_hdr;
492 __le16 StructureSize;
493 __u8 ShareType;
494 __u8 Reserved;
495 __le32 ShareFlags;
496 __le32 Capabilities;
497 __le32 MaximalAccess;
498 } __packed;
499
500
501 #define SMB2_SHARE_TYPE_DISK 0x01
502 #define SMB2_SHARE_TYPE_PIPE 0x02
503 #define SMB2_SHARE_TYPE_PRINT 0x03
504
505
506
507
508
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
525 #define SHI1005_FLAGS_ALL 0x0004FF33
526
527
528 #define SMB2_SHARE_CAP_DFS cpu_to_le32(0x00000008)
529 #define SMB2_SHARE_CAP_CONTINUOUS_AVAILABILITY cpu_to_le32(0x00000010)
530 #define SMB2_SHARE_CAP_SCALEOUT cpu_to_le32(0x00000020)
531 #define SMB2_SHARE_CAP_CLUSTER cpu_to_le32(0x00000040)
532 #define SMB2_SHARE_CAP_ASYMMETRIC cpu_to_le32(0x00000080)
533 #define SMB2_SHARE_CAP_REDIRECT_TO_OWNER cpu_to_le32(0x00000100)
534
535 struct smb2_tree_disconnect_req {
536 struct smb2_sync_hdr sync_hdr;
537 __le16 StructureSize;
538 __le16 Reserved;
539 } __packed;
540
541 struct smb2_tree_disconnect_rsp {
542 struct smb2_sync_hdr sync_hdr;
543 __le16 StructureSize;
544 __le16 Reserved;
545 } __packed;
546
547
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
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
571 #define SMB2_OPLOCK_LEVEL_NOCHANGE 0x99
572
573
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
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
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
609 #define FILE_DIRECTORY_FILE_LE cpu_to_le32(0x00000001)
610
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
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
642 #define SMB2_CREATE_EA_BUFFER "ExtA"
643 #define SMB2_CREATE_SD_BUFFER "SecD"
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
659 #define SMB2_CREATE_FLAG_REPARSEPOINT 0x01
660
661
662
663
664
665
666
667
668
669
670
671
672 #define SMB2_CREATE_IOV_SIZE 8
673
674 struct smb2_create_req {
675 struct smb2_sync_hdr sync_hdr;
676 __le16 StructureSize;
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
696
697
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;
704 __u8 OplockLevel;
705 __u8 Flag;
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;
716 __u64 VolatileFileId;
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
797
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
813 struct durable_reconnect_context_v2 {
814 struct {
815 __u64 PersistentFileId;
816 __u64 VolatileFileId;
817 } Fid;
818 __u8 CreateGuid[16];
819 __le32 Flags;
820 } __packed;
821
822
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
832 struct durable_reconnect_context_v2_rsp {
833 __le32 Timeout;
834 __le32 Flags;
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
845 struct crt_twarp_ctxt {
846 struct create_context ccontext;
847 __u8 Name[8];
848 __le64 Timestamp;
849
850 } __packed;
851
852
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;
862 char Context[0];
863 } __packed;
864
865
866 struct copychunk_ioctl {
867 char SourceKey[COPY_CHUNK_RES_KEY_SIZE];
868 __le32 ChunkCount;
869 __le32 Reserved;
870
871 __le64 SourceOffset;
872 __le64 TargetOffset;
873 __le32 Length;
874 __u32 Reserved2;
875 } __packed;
876
877
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
909 #define CHECKSUM_TYPE_NONE 0x0000
910 #define CHECKSUM_TYPE_CRC64 0x0002
911 #define CHECKSUM_TYPE_UNCHANGED 0xFFFF
912
913
914 #define FSCTL_INTEGRITY_FLAG_CHECKSUM_ENFORCEMENT_OFF 0x00000001
915
916
917
918
919
920 struct reparse_data_buffer {
921 __le32 ReparseTag;
922 __le16 ReparseDataLength;
923 __u16 Reserved;
924 __u8 DataBuffer[0];
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];
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];
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];
958 } __packed;
959
960
961
962
963
964 struct fsctl_get_dfs_referral_req {
965 __le16 MaxReferralLevel;
966 __u8 RequestFileName[];
967 } __packed;
968
969
970
971
972 struct network_resiliency_req {
973 __le32 Timeout;
974 __le32 Reserved;
975 } __packed;
976
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];
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;
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;
1002 __le32 IfIndex;
1003 __le32 Capability;
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
1024
1025 struct compress_ioctl {
1026 __le16 CompressionState;
1027 } __packed;
1028
1029 struct duplicate_extents_to_file {
1030 __u64 PersistentFileHandle;
1031 __u64 VolatileFileHandle;
1032 __le64 SourceFileOffset;
1033 __le64 TargetFileOffset;
1034 __le64 ByteCount;
1035 } __packed;
1036
1037
1038
1039
1040
1041
1042 #define SMB2_IOCTL_IOV_SIZE 2
1043
1044 struct smb2_ioctl_req {
1045 struct smb2_sync_hdr sync_hdr;
1046 __le16 StructureSize;
1047 __u16 Reserved;
1048 __le32 CtlCode;
1049 __u64 PersistentFileId;
1050 __u64 VolatileFileId;
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;
1065 __u16 Reserved;
1066 __le32 CtlCode;
1067 __u64 PersistentFileId;
1068 __u64 VolatileFileId;
1069 __le32 InputOffset;
1070 __le32 InputCount;
1071 __le32 OutputOffset;
1072 __le32 OutputCount;
1073 __le32 Flags;
1074 __u32 Reserved2;
1075
1076 } __packed;
1077
1078
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;
1083 __le16 Flags;
1084 __le32 Reserved;
1085 __u64 PersistentFileId;
1086 __u64 VolatileFileId;
1087 } __packed;
1088
1089
1090
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;
1097 __le16 Flags;
1098 __le32 Reserved;
1099 __le64 CreationTime;
1100 __le64 LastAccessTime;
1101 __le64 LastWriteTime;
1102 __le64 ChangeTime;
1103 __le64 AllocationSize;
1104 __le64 EndOfFile;
1105 __le32 Attributes;
1106 } __packed;
1107
1108 struct smb2_flush_req {
1109 struct smb2_sync_hdr sync_hdr;
1110 __le16 StructureSize;
1111 __le16 Reserved1;
1112 __le32 Reserved2;
1113 __u64 PersistentFileId;
1114 __u64 VolatileFileId;
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
1124 #define SMB2_READFLAG_READ_UNBUFFERED 0x01
1125 #define SMB2_READFLAG_REQUEST_COMPRESSED 0x02
1126
1127
1128 #define SMB2_CHANNEL_NONE cpu_to_le32(0x00000000)
1129 #define SMB2_CHANNEL_RDMA_V1 cpu_to_le32(0x00000001)
1130 #define SMB2_CHANNEL_RDMA_V1_INVALIDATE cpu_to_le32(0x00000002)
1131
1132
1133 struct smb2_read_plain_req {
1134 struct smb2_sync_hdr sync_hdr;
1135 __le16 StructureSize;
1136 __u8 Padding;
1137 __u8 Flags;
1138 __le32 Length;
1139 __le64 Offset;
1140 __u64 PersistentFileId;
1141 __u64 VolatileFileId;
1142 __le32 MinimumCount;
1143 __le32 Channel;
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;
1153 __u8 DataOffset;
1154 __u8 Reserved;
1155 __le32 DataLength;
1156 __le32 DataRemaining;
1157 __u32 Reserved2;
1158 __u8 Buffer[1];
1159 } __packed;
1160
1161
1162 #define SMB2_WRITEFLAG_WRITE_THROUGH 0x00000001
1163 #define SMB2_WRITEFLAG_WRITE_UNBUFFERED 0x00000002
1164
1165 struct smb2_write_req {
1166 struct smb2_sync_hdr sync_hdr;
1167 __le16 StructureSize;
1168 __le16 DataOffset;
1169 __le32 Length;
1170 __le64 Offset;
1171 __u64 PersistentFileId;
1172 __u64 VolatileFileId;
1173 __le32 Channel;
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;
1184 __u8 DataOffset;
1185 __u8 Reserved;
1186 __le32 DataLength;
1187 __le32 DataRemaining;
1188 __u32 Reserved2;
1189 __u8 Buffer[1];
1190 } __packed;
1191
1192
1193 #define SMB2_WATCH_TREE 0x0001
1194
1195
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;
1215 __u64 VolatileFileId;
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;
1223 __le16 OutputBufferOffset;
1224 __le32 OutputBufferLength;
1225 __u8 Buffer[1];
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;
1243 __le16 LockCount;
1244 __le32 Reserved;
1245 __u64 PersistentFileId;
1246 __u64 VolatileFileId;
1247
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;
1254 __le16 Reserved;
1255 } __packed;
1256
1257 struct smb2_echo_req {
1258 struct smb2_sync_hdr sync_hdr;
1259 __le16 StructureSize;
1260 __u16 Reserved;
1261 } __packed;
1262
1263 struct smb2_echo_rsp {
1264 struct smb2_sync_hdr sync_hdr;
1265 __le16 StructureSize;
1266 __u16 Reserved;
1267 } __packed;
1268
1269
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;
1278 __u8 FileInformationClass;
1279 __u8 Flags;
1280 __le32 FileIndex;
1281 __u64 PersistentFileId;
1282 __u64 VolatileFileId;
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;
1292 __le16 OutputBufferOffset;
1293 __le32 OutputBufferLength;
1294 __u8 Buffer[1];
1295 } __packed;
1296
1297
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
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
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;
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;
1334 __u64 VolatileFileId;
1335 __u8 Buffer[1];
1336 } __packed;
1337
1338 struct smb2_query_info_rsp {
1339 struct smb2_sync_hdr sync_hdr;
1340 __le16 StructureSize;
1341 __le16 OutputBufferOffset;
1342 __le32 OutputBufferLength;
1343 __u8 Buffer[1];
1344 } __packed;
1345
1346
1347
1348
1349
1350
1351
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;
1358 __u8 InfoType;
1359 __u8 FileInfoClass;
1360 __le32 BufferLength;
1361 __le16 BufferOffset;
1362 __u16 Reserved;
1363 __le32 AdditionalInformation;
1364 __u64 PersistentFileId;
1365 __u64 VolatileFileId;
1366 __u8 Buffer[1];
1367 } __packed;
1368
1369 struct smb2_set_info_rsp {
1370 struct smb2_sync_hdr sync_hdr;
1371 __le16 StructureSize;
1372 } __packed;
1373
1374 struct smb2_oplock_break {
1375 struct smb2_sync_hdr sync_hdr;
1376 __le16 StructureSize;
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;
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;
1402 __le16 Reserved;
1403 __le32 Flags;
1404 __u8 LeaseKey[16];
1405 __le32 LeaseState;
1406 __le64 LeaseDuration;
1407 } __packed;
1408
1409
1410
1411
1412
1413
1414
1415 #define FS_VOLUME_INFORMATION 1
1416 #define FS_LABEL_INFORMATION 2
1417 #define FS_SIZE_INFORMATION 3
1418 #define FS_DEVICE_INFORMATION 4
1419 #define FS_ATTRIBUTE_INFORMATION 5
1420 #define FS_CONTROL_INFORMATION 6
1421 #define FS_FULL_SIZE_INFORMATION 7
1422 #define FS_OBJECT_ID_INFORMATION 8
1423 #define FS_DRIVER_PATH_INFORMATION 9
1424 #define FS_VOLUME_FLAGS_INFORMATION 10
1425 #define FS_SECTOR_SIZE_INFORMATION 11
1426 #define FS_POSIX_INFORMATION 100
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
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
1453 #define MAX_VOL_LABEL_LEN 32
1454 struct smb3_fs_vol_info {
1455 __le64 VolumeCreationTime;
1456 __u32 VolumeSerialNumber;
1457 __le32 VolumeLabelLength;
1458 __u8 SupportsObjects;
1459 __u8 Reserved;
1460 __u8 VolumeLabel[0];
1461 } __packed;
1462
1463
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
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;
1514
1515 struct smb2_file_rename_info {
1516 __u8 ReplaceIfExists;
1517
1518 __u8 Reserved[7];
1519 __u64 RootDirectory;
1520 __le32 FileNameLength;
1521 char FileName[0];
1522 } __packed;
1523
1524 struct smb2_file_link_info {
1525 __u8 ReplaceIfExists;
1526
1527 __u8 Reserved[7];
1528 __u64 RootDirectory;
1529 __le32 FileNameLength;
1530 char FileName[0];
1531 } __packed;
1532
1533 struct smb2_file_full_ea_info {
1534 __le32 next_entry_offset;
1535 __u8 flags;
1536 __u8 ea_name_length;
1537 __le16 ea_value_length;
1538 char ea_data[0];
1539 } __packed;
1540
1541
1542
1543
1544
1545
1546 struct smb2_file_all_info {
1547 __le64 CreationTime;
1548 __le64 LastAccessTime;
1549 __le64 LastWriteTime;
1550 __le64 ChangeTime;
1551 __le32 Attributes;
1552 __u32 Pad1;
1553 __le64 AllocationSize;
1554 __le64 EndOfFile;
1555 __le32 NumberOfLinks;
1556 __u8 DeletePending;
1557 __u8 Directory;
1558 __u16 Pad2;
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;
1568
1569 struct smb2_file_eof_info {
1570 __le64 EndOfFile;
1571 } __packed;
1572
1573 extern char smb2_padding[7];
1574
1575 #endif