diff options
Diffstat (limited to 'fs/cifs/cifspdu.h')
-rw-r--r-- | fs/cifs/cifspdu.h | 343 |
1 files changed, 174 insertions, 169 deletions
diff --git a/fs/cifs/cifspdu.h b/fs/cifs/cifspdu.h index 193f06eb43f9..48a05b9df7eb 100644 --- a/fs/cifs/cifspdu.h +++ b/fs/cifs/cifspdu.h | |||
@@ -80,7 +80,7 @@ | |||
80 | #define NT_TRANSACT_GET_USER_QUOTA 0x07 | 80 | #define NT_TRANSACT_GET_USER_QUOTA 0x07 |
81 | #define NT_TRANSACT_SET_USER_QUOTA 0x08 | 81 | #define NT_TRANSACT_SET_USER_QUOTA 0x08 |
82 | 82 | ||
83 | #define MAX_CIFS_HDR_SIZE 256 /* chained NTCreateXReadX will probably be biggest */ | 83 | #define MAX_CIFS_HDR_SIZE 256 /* is future chained NTCreateXReadX bigger? */ |
84 | 84 | ||
85 | /* internal cifs vfs structures */ | 85 | /* internal cifs vfs structures */ |
86 | /***************************************************************** | 86 | /***************************************************************** |
@@ -133,10 +133,11 @@ | |||
133 | /* | 133 | /* |
134 | * SMB flag definitions | 134 | * SMB flag definitions |
135 | */ | 135 | */ |
136 | #define SMBFLG_EXTD_LOCK 0x01 /* server supports lock-read write-unlock primitives */ | 136 | #define SMBFLG_EXTD_LOCK 0x01 /* server supports lock-read write-unlock smb */ |
137 | #define SMBFLG_RCV_POSTED 0x02 /* obsolete */ | 137 | #define SMBFLG_RCV_POSTED 0x02 /* obsolete */ |
138 | #define SMBFLG_RSVD 0x04 | 138 | #define SMBFLG_RSVD 0x04 |
139 | #define SMBFLG_CASELESS 0x08 /* all pathnames treated as caseless (off implies case sensitive file handling requested) */ | 139 | #define SMBFLG_CASELESS 0x08 /* all pathnames treated as caseless (off |
140 | implies case sensitive file handling request) */ | ||
140 | #define SMBFLG_CANONICAL_PATH_FORMAT 0x10 /* obsolete */ | 141 | #define SMBFLG_CANONICAL_PATH_FORMAT 0x10 /* obsolete */ |
141 | #define SMBFLG_OLD_OPLOCK 0x20 /* obsolete */ | 142 | #define SMBFLG_OLD_OPLOCK 0x20 /* obsolete */ |
142 | #define SMBFLG_OLD_OPLOCK_NOTIFY 0x40 /* obsolete */ | 143 | #define SMBFLG_OLD_OPLOCK_NOTIFY 0x40 /* obsolete */ |
@@ -145,7 +146,8 @@ | |||
145 | /* | 146 | /* |
146 | * SMB flag2 definitions | 147 | * SMB flag2 definitions |
147 | */ | 148 | */ |
148 | #define SMBFLG2_KNOWS_LONG_NAMES cpu_to_le16(1) /* can send long (non-8.3) path names in response */ | 149 | #define SMBFLG2_KNOWS_LONG_NAMES cpu_to_le16(1) /* can send long (non-8.3) |
150 | path names in response */ | ||
149 | #define SMBFLG2_KNOWS_EAS cpu_to_le16(2) | 151 | #define SMBFLG2_KNOWS_EAS cpu_to_le16(2) |
150 | #define SMBFLG2_SECURITY_SIGNATURE cpu_to_le16(4) | 152 | #define SMBFLG2_SECURITY_SIGNATURE cpu_to_le16(4) |
151 | #define SMBFLG2_IS_LONG_NAME cpu_to_le16(0x40) | 153 | #define SMBFLG2_IS_LONG_NAME cpu_to_le16(0x40) |
@@ -164,32 +166,32 @@ | |||
164 | * file and can have any suitable combination of the following values: | 166 | * file and can have any suitable combination of the following values: |
165 | */ | 167 | */ |
166 | 168 | ||
167 | #define FILE_READ_DATA 0x00000001 /* Data can be read from the file */ | 169 | #define FILE_READ_DATA 0x00000001 /* Data can be read from the file */ |
168 | #define FILE_WRITE_DATA 0x00000002 /* Data can be written to the file */ | 170 | #define FILE_WRITE_DATA 0x00000002 /* Data can be written to the file */ |
169 | #define FILE_APPEND_DATA 0x00000004 /* Data can be appended to the file */ | 171 | #define FILE_APPEND_DATA 0x00000004 /* Data can be appended to the file */ |
170 | #define FILE_READ_EA 0x00000008 /* Extended attributes associated */ | 172 | #define FILE_READ_EA 0x00000008 /* Extended attributes associated */ |
171 | /* with the file can be read */ | 173 | /* with the file can be read */ |
172 | #define FILE_WRITE_EA 0x00000010 /* Extended attributes associated */ | 174 | #define FILE_WRITE_EA 0x00000010 /* Extended attributes associated */ |
173 | /* with the file can be written */ | 175 | /* with the file can be written */ |
174 | #define FILE_EXECUTE 0x00000020 /*Data can be read into memory from */ | 176 | #define FILE_EXECUTE 0x00000020 /*Data can be read into memory from */ |
175 | /* the file using system paging I/O */ | 177 | /* the file using system paging I/O */ |
176 | #define FILE_DELETE_CHILD 0x00000040 | 178 | #define FILE_DELETE_CHILD 0x00000040 |
177 | #define FILE_READ_ATTRIBUTES 0x00000080 /* Attributes associated with the */ | 179 | #define FILE_READ_ATTRIBUTES 0x00000080 /* Attributes associated with the */ |
178 | /* file can be read */ | 180 | /* file can be read */ |
179 | #define FILE_WRITE_ATTRIBUTES 0x00000100 /* Attributes associated with the */ | 181 | #define FILE_WRITE_ATTRIBUTES 0x00000100 /* Attributes associated with the */ |
180 | /* file can be written */ | 182 | /* file can be written */ |
181 | #define DELETE 0x00010000 /* The file can be deleted */ | 183 | #define DELETE 0x00010000 /* The file can be deleted */ |
182 | #define READ_CONTROL 0x00020000 /* The access control list and */ | 184 | #define READ_CONTROL 0x00020000 /* The access control list and */ |
183 | /* ownership associated with the */ | 185 | /* ownership associated with the */ |
184 | /* file can be read */ | 186 | /* file can be read */ |
185 | #define WRITE_DAC 0x00040000 /* The access control list and */ | 187 | #define WRITE_DAC 0x00040000 /* The access control list and */ |
186 | /* ownership associated with the */ | 188 | /* ownership associated with the */ |
187 | /* file can be written. */ | 189 | /* file can be written. */ |
188 | #define WRITE_OWNER 0x00080000 /* Ownership information associated */ | 190 | #define WRITE_OWNER 0x00080000 /* Ownership information associated */ |
189 | /* with the file can be written */ | 191 | /* with the file can be written */ |
190 | #define SYNCHRONIZE 0x00100000 /* The file handle can waited on to */ | 192 | #define SYNCHRONIZE 0x00100000 /* The file handle can waited on to */ |
191 | /* synchronize with the completion */ | 193 | /* synchronize with the completion */ |
192 | /* of an input/output request */ | 194 | /* of an input/output request */ |
193 | #define GENERIC_ALL 0x10000000 | 195 | #define GENERIC_ALL 0x10000000 |
194 | #define GENERIC_EXECUTE 0x20000000 | 196 | #define GENERIC_EXECUTE 0x20000000 |
195 | #define GENERIC_WRITE 0x40000000 | 197 | #define GENERIC_WRITE 0x40000000 |
@@ -197,7 +199,7 @@ | |||
197 | /* In summary - Relevant file */ | 199 | /* In summary - Relevant file */ |
198 | /* access flags from CIFS are */ | 200 | /* access flags from CIFS are */ |
199 | /* file_read_data, file_write_data */ | 201 | /* file_read_data, file_write_data */ |
200 | /* file_execute, file_read_attributes */ | 202 | /* file_execute, file_read_attributes*/ |
201 | /* write_dac, and delete. */ | 203 | /* write_dac, and delete. */ |
202 | 204 | ||
203 | /* | 205 | /* |
@@ -242,7 +244,8 @@ | |||
242 | #define ATTR_SPARSE 0x0200 | 244 | #define ATTR_SPARSE 0x0200 |
243 | #define ATTR_REPARSE 0x0400 | 245 | #define ATTR_REPARSE 0x0400 |
244 | #define ATTR_COMPRESSED 0x0800 | 246 | #define ATTR_COMPRESSED 0x0800 |
245 | #define ATTR_OFFLINE 0x1000 /* ie file not immediately available - offline storage */ | 247 | #define ATTR_OFFLINE 0x1000 /* ie file not immediately available - |
248 | on offline storage */ | ||
246 | #define ATTR_NOT_CONTENT_INDEXED 0x2000 | 249 | #define ATTR_NOT_CONTENT_INDEXED 0x2000 |
247 | #define ATTR_ENCRYPTED 0x4000 | 250 | #define ATTR_ENCRYPTED 0x4000 |
248 | #define ATTR_POSIX_SEMANTICS 0x01000000 | 251 | #define ATTR_POSIX_SEMANTICS 0x01000000 |
@@ -309,10 +312,10 @@ | |||
309 | #define GETU16(var) (*((__u16 *)var)) /* BB check for endian issues */ | 312 | #define GETU16(var) (*((__u16 *)var)) /* BB check for endian issues */ |
310 | #define GETU32(var) (*((__u32 *)var)) /* BB check for endian issues */ | 313 | #define GETU32(var) (*((__u32 *)var)) /* BB check for endian issues */ |
311 | 314 | ||
312 | #pragma pack(1) | ||
313 | |||
314 | struct smb_hdr { | 315 | struct smb_hdr { |
315 | __u32 smb_buf_length; /* big endian on wire *//* BB length is only two or three bytes - with one or two byte type preceding it but that is always zero - we could mask the type byte off just in case BB */ | 316 | __u32 smb_buf_length; /* big endian on wire *//* BB length is only two |
317 | or three bytes - with one or two byte type preceding it that are | ||
318 | zero - we could mask the type byte off just in case BB */ | ||
316 | __u8 Protocol[4]; | 319 | __u8 Protocol[4]; |
317 | __u8 Command; | 320 | __u8 Command; |
318 | union { | 321 | union { |
@@ -320,9 +323,9 @@ struct smb_hdr { | |||
320 | __u8 ErrorClass; | 323 | __u8 ErrorClass; |
321 | __u8 Reserved; | 324 | __u8 Reserved; |
322 | __le16 Error; | 325 | __le16 Error; |
323 | } DosError; | 326 | } __attribute__((packed)) DosError; |
324 | __le32 CifsError; | 327 | __le32 CifsError; |
325 | } Status; | 328 | } __attribute__((packed)) Status; |
326 | __u8 Flags; | 329 | __u8 Flags; |
327 | __le16 Flags2; /* note: le */ | 330 | __le16 Flags2; /* note: le */ |
328 | __le16 PidHigh; | 331 | __le16 PidHigh; |
@@ -330,16 +333,16 @@ struct smb_hdr { | |||
330 | struct { | 333 | struct { |
331 | __le32 SequenceNumber; /* le */ | 334 | __le32 SequenceNumber; /* le */ |
332 | __u32 Reserved; /* zero */ | 335 | __u32 Reserved; /* zero */ |
333 | } Sequence; | 336 | } __attribute__((packed)) Sequence; |
334 | __u8 SecuritySignature[8]; /* le */ | 337 | __u8 SecuritySignature[8]; /* le */ |
335 | } Signature; | 338 | } __attribute__((packed)) Signature; |
336 | __u8 pad[2]; | 339 | __u8 pad[2]; |
337 | __u16 Tid; | 340 | __u16 Tid; |
338 | __le16 Pid; | 341 | __le16 Pid; |
339 | __u16 Uid; | 342 | __u16 Uid; |
340 | __u16 Mid; | 343 | __u16 Mid; |
341 | __u8 WordCount; | 344 | __u8 WordCount; |
342 | }; | 345 | } __attribute__((packed)); |
343 | /* given a pointer to an smb_hdr retrieve the value of byte count */ | 346 | /* given a pointer to an smb_hdr retrieve the value of byte count */ |
344 | #define BCC(smb_var) ( *(__u16 *)((char *)smb_var + sizeof(struct smb_hdr) + (2* smb_var->WordCount) ) ) | 347 | #define BCC(smb_var) ( *(__u16 *)((char *)smb_var + sizeof(struct smb_hdr) + (2* smb_var->WordCount) ) ) |
345 | #define BCC_LE(smb_var) ( *(__le16 *)((char *)smb_var + sizeof(struct smb_hdr) + (2* smb_var->WordCount) ) ) | 348 | #define BCC_LE(smb_var) ( *(__le16 *)((char *)smb_var + sizeof(struct smb_hdr) + (2* smb_var->WordCount) ) ) |
@@ -391,7 +394,7 @@ typedef struct negotiate_req { | |||
391 | struct smb_hdr hdr; /* wct = 0 */ | 394 | struct smb_hdr hdr; /* wct = 0 */ |
392 | __le16 ByteCount; | 395 | __le16 ByteCount; |
393 | unsigned char DialectsArray[1]; | 396 | unsigned char DialectsArray[1]; |
394 | } NEGOTIATE_REQ; | 397 | } __attribute__((packed)) NEGOTIATE_REQ; |
395 | 398 | ||
396 | typedef struct negotiate_rsp { | 399 | typedef struct negotiate_rsp { |
397 | struct smb_hdr hdr; /* wct = 17 */ | 400 | struct smb_hdr hdr; /* wct = 17 */ |
@@ -409,16 +412,16 @@ typedef struct negotiate_rsp { | |||
409 | __u8 EncryptionKeyLength; | 412 | __u8 EncryptionKeyLength; |
410 | __u16 ByteCount; | 413 | __u16 ByteCount; |
411 | union { | 414 | union { |
412 | unsigned char EncryptionKey[1]; /* if cap extended security is off */ | 415 | unsigned char EncryptionKey[1]; /* cap extended security off */ |
413 | /* followed by Domain name - if extended security is off */ | 416 | /* followed by Domain name - if extended security is off */ |
414 | /* followed by 16 bytes of server GUID */ | 417 | /* followed by 16 bytes of server GUID */ |
415 | /* followed by security blob if cap_extended_security negotiated */ | 418 | /* then security blob if cap_extended_security negotiated */ |
416 | struct { | 419 | struct { |
417 | unsigned char GUID[16]; | 420 | unsigned char GUID[16]; |
418 | unsigned char SecurityBlob[1]; | 421 | unsigned char SecurityBlob[1]; |
419 | } extended_response; | 422 | } __attribute__((packed)) extended_response; |
420 | } u; | 423 | } __attribute__((packed)) u; |
421 | } NEGOTIATE_RSP; | 424 | } __attribute__((packed)) NEGOTIATE_RSP; |
422 | 425 | ||
423 | /* SecurityMode bits */ | 426 | /* SecurityMode bits */ |
424 | #define SECMODE_USER 0x01 /* off indicates share level security */ | 427 | #define SECMODE_USER 0x01 /* off indicates share level security */ |
@@ -464,7 +467,8 @@ typedef union smb_com_session_setup_andx { | |||
464 | unsigned char SecurityBlob[1]; /* followed by */ | 467 | unsigned char SecurityBlob[1]; /* followed by */ |
465 | /* STRING NativeOS */ | 468 | /* STRING NativeOS */ |
466 | /* STRING NativeLanMan */ | 469 | /* STRING NativeLanMan */ |
467 | } req; /* NTLM request format (with extended security */ | 470 | } __attribute__((packed)) req; /* NTLM request format (with |
471 | extended security */ | ||
468 | 472 | ||
469 | struct { /* request format */ | 473 | struct { /* request format */ |
470 | struct smb_hdr hdr; /* wct = 13 */ | 474 | struct smb_hdr hdr; /* wct = 13 */ |
@@ -475,18 +479,19 @@ typedef union smb_com_session_setup_andx { | |||
475 | __le16 MaxMpxCount; | 479 | __le16 MaxMpxCount; |
476 | __le16 VcNumber; | 480 | __le16 VcNumber; |
477 | __u32 SessionKey; | 481 | __u32 SessionKey; |
478 | __le16 CaseInsensitivePasswordLength; /* ASCII password length */ | 482 | __le16 CaseInsensitivePasswordLength; /* ASCII password len */ |
479 | __le16 CaseSensitivePasswordLength; /* Unicode password length */ | 483 | __le16 CaseSensitivePasswordLength; /* Unicode password length*/ |
480 | __u32 Reserved; /* see below */ | 484 | __u32 Reserved; /* see below */ |
481 | __le32 Capabilities; | 485 | __le32 Capabilities; |
482 | __le16 ByteCount; | 486 | __le16 ByteCount; |
483 | unsigned char CaseInsensitivePassword[1]; /* followed by: */ | 487 | unsigned char CaseInsensitivePassword[1]; /* followed by: */ |
484 | /* unsigned char * CaseSensitivePassword; */ | 488 | /* unsigned char * CaseSensitivePassword; */ |
485 | /* STRING AccountName */ | 489 | /* STRING AccountName */ |
486 | /* STRING PrimaryDomain */ | 490 | /* STRING PrimaryDomain */ |
487 | /* STRING NativeOS */ | 491 | /* STRING NativeOS */ |
488 | /* STRING NativeLanMan */ | 492 | /* STRING NativeLanMan */ |
489 | } req_no_secext; /* NTLM request format (without extended security */ | 493 | } __attribute__((packed)) req_no_secext; /* NTLM request format (without |
494 | extended security */ | ||
490 | 495 | ||
491 | struct { /* default (NTLM) response format */ | 496 | struct { /* default (NTLM) response format */ |
492 | struct smb_hdr hdr; /* wct = 4 */ | 497 | struct smb_hdr hdr; /* wct = 4 */ |
@@ -500,7 +505,7 @@ typedef union smb_com_session_setup_andx { | |||
500 | /* unsigned char * NativeOS; */ | 505 | /* unsigned char * NativeOS; */ |
501 | /* unsigned char * NativeLanMan; */ | 506 | /* unsigned char * NativeLanMan; */ |
502 | /* unsigned char * PrimaryDomain; */ | 507 | /* unsigned char * PrimaryDomain; */ |
503 | } resp; /* NTLM response format (with or without extended security */ | 508 | } __attribute__((packed)) resp; /* NTLM response format (with or without extended security */ |
504 | 509 | ||
505 | struct { /* request format */ | 510 | struct { /* request format */ |
506 | struct smb_hdr hdr; /* wct = 10 */ | 511 | struct smb_hdr hdr; /* wct = 10 */ |
@@ -519,7 +524,7 @@ typedef union smb_com_session_setup_andx { | |||
519 | /* STRING PrimaryDomain */ | 524 | /* STRING PrimaryDomain */ |
520 | /* STRING NativeOS */ | 525 | /* STRING NativeOS */ |
521 | /* STRING NativeLanMan */ | 526 | /* STRING NativeLanMan */ |
522 | } old_req; /* pre-NTLM (LANMAN2.1) request format */ | 527 | } __attribute__((packed)) old_req; /* pre-NTLM (LANMAN2.1) request format */ |
523 | 528 | ||
524 | struct { /* default (NTLM) response format */ | 529 | struct { /* default (NTLM) response format */ |
525 | struct smb_hdr hdr; /* wct = 3 */ | 530 | struct smb_hdr hdr; /* wct = 3 */ |
@@ -531,8 +536,8 @@ typedef union smb_com_session_setup_andx { | |||
531 | unsigned char NativeOS[1]; /* followed by */ | 536 | unsigned char NativeOS[1]; /* followed by */ |
532 | /* unsigned char * NativeLanMan; */ | 537 | /* unsigned char * NativeLanMan; */ |
533 | /* unsigned char * PrimaryDomain; */ | 538 | /* unsigned char * PrimaryDomain; */ |
534 | } old_resp; /* pre-NTLM (LANMAN2.1) response format */ | 539 | } __attribute__((packed)) old_resp; /* pre-NTLM (LANMAN2.1) response format */ |
535 | } SESSION_SETUP_ANDX; | 540 | } __attribute__((packed)) SESSION_SETUP_ANDX; |
536 | 541 | ||
537 | #define CIFS_NETWORK_OPSYS "CIFS VFS Client for Linux" | 542 | #define CIFS_NETWORK_OPSYS "CIFS VFS Client for Linux" |
538 | 543 | ||
@@ -542,7 +547,8 @@ typedef union smb_com_session_setup_andx { | |||
542 | #define CAP_NT_SMBS 0x00000010 | 547 | #define CAP_NT_SMBS 0x00000010 |
543 | #define CAP_STATUS32 0x00000040 | 548 | #define CAP_STATUS32 0x00000040 |
544 | #define CAP_LEVEL_II_OPLOCKS 0x00000080 | 549 | #define CAP_LEVEL_II_OPLOCKS 0x00000080 |
545 | #define CAP_NT_FIND 0x00000200 /* reserved should be zero (presumably because NT_SMBs implies the same thing) */ | 550 | #define CAP_NT_FIND 0x00000200 /* reserved should be zero |
551 | (because NT_SMBs implies the same thing?) */ | ||
546 | #define CAP_BULK_TRANSFER 0x20000000 | 552 | #define CAP_BULK_TRANSFER 0x20000000 |
547 | #define CAP_EXTENDED_SECURITY 0x80000000 | 553 | #define CAP_EXTENDED_SECURITY 0x80000000 |
548 | 554 | ||
@@ -560,7 +566,7 @@ typedef struct smb_com_tconx_req { | |||
560 | unsigned char Password[1]; /* followed by */ | 566 | unsigned char Password[1]; /* followed by */ |
561 | /* STRING Path *//* \\server\share name */ | 567 | /* STRING Path *//* \\server\share name */ |
562 | /* STRING Service */ | 568 | /* STRING Service */ |
563 | } TCONX_REQ; | 569 | } __attribute__((packed)) TCONX_REQ; |
564 | 570 | ||
565 | typedef struct smb_com_tconx_rsp { | 571 | typedef struct smb_com_tconx_rsp { |
566 | struct smb_hdr hdr; /* wct = 3 *//* note that Win2000 has sent wct=7 in some cases on responses. Four unspecified words followed OptionalSupport */ | 572 | struct smb_hdr hdr; /* wct = 3 *//* note that Win2000 has sent wct=7 in some cases on responses. Four unspecified words followed OptionalSupport */ |
@@ -571,13 +577,14 @@ typedef struct smb_com_tconx_rsp { | |||
571 | __u16 ByteCount; | 577 | __u16 ByteCount; |
572 | unsigned char Service[1]; /* always ASCII, not Unicode */ | 578 | unsigned char Service[1]; /* always ASCII, not Unicode */ |
573 | /* STRING NativeFileSystem */ | 579 | /* STRING NativeFileSystem */ |
574 | } TCONX_RSP; | 580 | } __attribute__((packed)) TCONX_RSP; |
575 | 581 | ||
576 | /* tree connect Flags */ | 582 | /* tree connect Flags */ |
577 | #define DISCONNECT_TID 0x0001 | 583 | #define DISCONNECT_TID 0x0001 |
578 | #define TCON_EXTENDED_SECINFO 0x0008 | 584 | #define TCON_EXTENDED_SECINFO 0x0008 |
579 | /* OptionalSupport bits */ | 585 | /* OptionalSupport bits */ |
580 | #define SMB_SUPPORT_SEARCH_BITS 0x0001 /* must have bits (exclusive searches suppt. */ | 586 | #define SMB_SUPPORT_SEARCH_BITS 0x0001 /* "must have" directory search bits |
587 | (exclusive searches supported) */ | ||
581 | #define SMB_SHARE_IS_IN_DFS 0x0002 | 588 | #define SMB_SHARE_IS_IN_DFS 0x0002 |
582 | 589 | ||
583 | typedef struct smb_com_logoff_andx_req { | 590 | typedef struct smb_com_logoff_andx_req { |
@@ -586,7 +593,7 @@ typedef struct smb_com_logoff_andx_req { | |||
586 | __u8 AndXReserved; | 593 | __u8 AndXReserved; |
587 | __u16 AndXOffset; | 594 | __u16 AndXOffset; |
588 | __u16 ByteCount; | 595 | __u16 ByteCount; |
589 | } LOGOFF_ANDX_REQ; | 596 | } __attribute__((packed)) LOGOFF_ANDX_REQ; |
590 | 597 | ||
591 | typedef struct smb_com_logoff_andx_rsp { | 598 | typedef struct smb_com_logoff_andx_rsp { |
592 | struct smb_hdr hdr; /* wct = 2 */ | 599 | struct smb_hdr hdr; /* wct = 2 */ |
@@ -594,36 +601,36 @@ typedef struct smb_com_logoff_andx_rsp { | |||
594 | __u8 AndXReserved; | 601 | __u8 AndXReserved; |
595 | __u16 AndXOffset; | 602 | __u16 AndXOffset; |
596 | __u16 ByteCount; | 603 | __u16 ByteCount; |
597 | } LOGOFF_ANDX_RSP; | 604 | } __attribute__((packed)) LOGOFF_ANDX_RSP; |
598 | 605 | ||
599 | typedef union smb_com_tree_disconnect { /* as an altetnative can use flag on tree_connect PDU to effect disconnect *//* probably the simplest SMB PDU */ | 606 | typedef union smb_com_tree_disconnect { /* as an altetnative can use flag on tree_connect PDU to effect disconnect *//* probably the simplest SMB PDU */ |
600 | struct { | 607 | struct { |
601 | struct smb_hdr hdr; /* wct = 0 */ | 608 | struct smb_hdr hdr; /* wct = 0 */ |
602 | __u16 ByteCount; /* bcc = 0 */ | 609 | __u16 ByteCount; /* bcc = 0 */ |
603 | } req; | 610 | } __attribute__((packed)) req; |
604 | struct { | 611 | struct { |
605 | struct smb_hdr hdr; /* wct = 0 */ | 612 | struct smb_hdr hdr; /* wct = 0 */ |
606 | __u16 ByteCount; /* bcc = 0 */ | 613 | __u16 ByteCount; /* bcc = 0 */ |
607 | } resp; | 614 | } __attribute__((packed)) resp; |
608 | } TREE_DISCONNECT; | 615 | } __attribute__((packed)) TREE_DISCONNECT; |
609 | 616 | ||
610 | typedef struct smb_com_close_req { | 617 | typedef struct smb_com_close_req { |
611 | struct smb_hdr hdr; /* wct = 3 */ | 618 | struct smb_hdr hdr; /* wct = 3 */ |
612 | __u16 FileID; | 619 | __u16 FileID; |
613 | __u32 LastWriteTime; /* should be zero */ | 620 | __u32 LastWriteTime; /* should be zero */ |
614 | __u16 ByteCount; /* 0 */ | 621 | __u16 ByteCount; /* 0 */ |
615 | } CLOSE_REQ; | 622 | } __attribute__((packed)) CLOSE_REQ; |
616 | 623 | ||
617 | typedef struct smb_com_close_rsp { | 624 | typedef struct smb_com_close_rsp { |
618 | struct smb_hdr hdr; /* wct = 0 */ | 625 | struct smb_hdr hdr; /* wct = 0 */ |
619 | __u16 ByteCount; /* bct = 0 */ | 626 | __u16 ByteCount; /* bct = 0 */ |
620 | } CLOSE_RSP; | 627 | } __attribute__((packed)) CLOSE_RSP; |
621 | 628 | ||
622 | typedef struct smb_com_findclose_req { | 629 | typedef struct smb_com_findclose_req { |
623 | struct smb_hdr hdr; /* wct = 1 */ | 630 | struct smb_hdr hdr; /* wct = 1 */ |
624 | __u16 FileID; | 631 | __u16 FileID; |
625 | __u16 ByteCount; /* 0 */ | 632 | __u16 ByteCount; /* 0 */ |
626 | } FINDCLOSE_REQ; | 633 | } __attribute__((packed)) FINDCLOSE_REQ; |
627 | 634 | ||
628 | /* OpenFlags */ | 635 | /* OpenFlags */ |
629 | #define REQ_MORE_INFO 0x00000001 /* legacy (OPEN_AND_X) only */ | 636 | #define REQ_MORE_INFO 0x00000001 /* legacy (OPEN_AND_X) only */ |
@@ -650,7 +657,7 @@ typedef struct smb_com_open_req { /* also handles create */ | |||
650 | __u8 SecurityFlags; | 657 | __u8 SecurityFlags; |
651 | __le16 ByteCount; | 658 | __le16 ByteCount; |
652 | char fileName[1]; | 659 | char fileName[1]; |
653 | } OPEN_REQ; | 660 | } __attribute__((packed)) OPEN_REQ; |
654 | 661 | ||
655 | /* open response: oplock levels */ | 662 | /* open response: oplock levels */ |
656 | #define OPLOCK_NONE 0 | 663 | #define OPLOCK_NONE 0 |
@@ -680,7 +687,7 @@ typedef struct smb_com_open_rsp { | |||
680 | __le16 DeviceState; | 687 | __le16 DeviceState; |
681 | __u8 DirectoryFlag; | 688 | __u8 DirectoryFlag; |
682 | __u16 ByteCount; /* bct = 0 */ | 689 | __u16 ByteCount; /* bct = 0 */ |
683 | } OPEN_RSP; | 690 | } __attribute__((packed)) OPEN_RSP; |
684 | 691 | ||
685 | /* format of legacy open request */ | 692 | /* format of legacy open request */ |
686 | typedef struct smb_com_openx_req { | 693 | typedef struct smb_com_openx_req { |
@@ -699,7 +706,7 @@ typedef struct smb_com_openx_req { | |||
699 | __le32 Reserved; | 706 | __le32 Reserved; |
700 | __le16 ByteCount; /* file name follows */ | 707 | __le16 ByteCount; /* file name follows */ |
701 | char fileName[1]; | 708 | char fileName[1]; |
702 | } OPENX_REQ; | 709 | } __attribute__((packed)) OPENX_REQ; |
703 | 710 | ||
704 | typedef struct smb_com_openx_rsp { | 711 | typedef struct smb_com_openx_rsp { |
705 | struct smb_hdr hdr; /* wct = 15 */ | 712 | struct smb_hdr hdr; /* wct = 15 */ |
@@ -717,7 +724,7 @@ typedef struct smb_com_openx_rsp { | |||
717 | __u32 FileId; | 724 | __u32 FileId; |
718 | __u16 Reserved; | 725 | __u16 Reserved; |
719 | __u16 ByteCount; | 726 | __u16 ByteCount; |
720 | } OPENX_RSP; | 727 | } __attribute__((packed)) OPENX_RSP; |
721 | 728 | ||
722 | /* Legacy write request for older servers */ | 729 | /* Legacy write request for older servers */ |
723 | typedef struct smb_com_writex_req { | 730 | typedef struct smb_com_writex_req { |
@@ -736,7 +743,7 @@ typedef struct smb_com_writex_req { | |||
736 | __le16 ByteCount; | 743 | __le16 ByteCount; |
737 | __u8 Pad; /* BB check for whether padded to DWORD boundary and optimum performance here */ | 744 | __u8 Pad; /* BB check for whether padded to DWORD boundary and optimum performance here */ |
738 | char Data[0]; | 745 | char Data[0]; |
739 | } WRITEX_REQ; | 746 | } __attribute__((packed)) WRITEX_REQ; |
740 | 747 | ||
741 | typedef struct smb_com_write_req { | 748 | typedef struct smb_com_write_req { |
742 | struct smb_hdr hdr; /* wct = 14 */ | 749 | struct smb_hdr hdr; /* wct = 14 */ |
@@ -755,7 +762,7 @@ typedef struct smb_com_write_req { | |||
755 | __le16 ByteCount; | 762 | __le16 ByteCount; |
756 | __u8 Pad; /* BB check for whether padded to DWORD boundary and optimum performance here */ | 763 | __u8 Pad; /* BB check for whether padded to DWORD boundary and optimum performance here */ |
757 | char Data[0]; | 764 | char Data[0]; |
758 | } WRITE_REQ; | 765 | } __attribute__((packed)) WRITE_REQ; |
759 | 766 | ||
760 | typedef struct smb_com_write_rsp { | 767 | typedef struct smb_com_write_rsp { |
761 | struct smb_hdr hdr; /* wct = 6 */ | 768 | struct smb_hdr hdr; /* wct = 6 */ |
@@ -767,7 +774,7 @@ typedef struct smb_com_write_rsp { | |||
767 | __le16 CountHigh; | 774 | __le16 CountHigh; |
768 | __u16 Reserved; | 775 | __u16 Reserved; |
769 | __u16 ByteCount; | 776 | __u16 ByteCount; |
770 | } WRITE_RSP; | 777 | } __attribute__((packed)) WRITE_RSP; |
771 | 778 | ||
772 | /* legacy read request for older servers */ | 779 | /* legacy read request for older servers */ |
773 | typedef struct smb_com_readx_req { | 780 | typedef struct smb_com_readx_req { |
@@ -782,7 +789,7 @@ typedef struct smb_com_readx_req { | |||
782 | __le32 Reserved; | 789 | __le32 Reserved; |
783 | __le16 Remaining; | 790 | __le16 Remaining; |
784 | __le16 ByteCount; | 791 | __le16 ByteCount; |
785 | } READX_REQ; | 792 | } __attribute__((packed)) READX_REQ; |
786 | 793 | ||
787 | typedef struct smb_com_read_req { | 794 | typedef struct smb_com_read_req { |
788 | struct smb_hdr hdr; /* wct = 12 */ | 795 | struct smb_hdr hdr; /* wct = 12 */ |
@@ -797,7 +804,7 @@ typedef struct smb_com_read_req { | |||
797 | __le16 Remaining; | 804 | __le16 Remaining; |
798 | __le32 OffsetHigh; | 805 | __le32 OffsetHigh; |
799 | __le16 ByteCount; | 806 | __le16 ByteCount; |
800 | } READ_REQ; | 807 | } __attribute__((packed)) READ_REQ; |
801 | 808 | ||
802 | typedef struct smb_com_read_rsp { | 809 | typedef struct smb_com_read_rsp { |
803 | struct smb_hdr hdr; /* wct = 12 */ | 810 | struct smb_hdr hdr; /* wct = 12 */ |
@@ -814,7 +821,7 @@ typedef struct smb_com_read_rsp { | |||
814 | __u16 ByteCount; | 821 | __u16 ByteCount; |
815 | __u8 Pad; /* BB check for whether padded to DWORD boundary and optimum performance here */ | 822 | __u8 Pad; /* BB check for whether padded to DWORD boundary and optimum performance here */ |
816 | char Data[1]; | 823 | char Data[1]; |
817 | } READ_RSP; | 824 | } __attribute__((packed)) READ_RSP; |
818 | 825 | ||
819 | typedef struct locking_andx_range { | 826 | typedef struct locking_andx_range { |
820 | __le16 Pid; | 827 | __le16 Pid; |
@@ -823,7 +830,7 @@ typedef struct locking_andx_range { | |||
823 | __le32 OffsetLow; | 830 | __le32 OffsetLow; |
824 | __le32 LengthHigh; | 831 | __le32 LengthHigh; |
825 | __le32 LengthLow; | 832 | __le32 LengthLow; |
826 | } LOCKING_ANDX_RANGE; | 833 | } __attribute__((packed)) LOCKING_ANDX_RANGE; |
827 | 834 | ||
828 | #define LOCKING_ANDX_SHARED_LOCK 0x01 | 835 | #define LOCKING_ANDX_SHARED_LOCK 0x01 |
829 | #define LOCKING_ANDX_OPLOCK_RELEASE 0x02 | 836 | #define LOCKING_ANDX_OPLOCK_RELEASE 0x02 |
@@ -844,7 +851,7 @@ typedef struct smb_com_lock_req { | |||
844 | __le16 NumberOfLocks; | 851 | __le16 NumberOfLocks; |
845 | __le16 ByteCount; | 852 | __le16 ByteCount; |
846 | LOCKING_ANDX_RANGE Locks[1]; | 853 | LOCKING_ANDX_RANGE Locks[1]; |
847 | } LOCK_REQ; | 854 | } __attribute__((packed)) LOCK_REQ; |
848 | 855 | ||
849 | 856 | ||
850 | typedef struct cifs_posix_lock { | 857 | typedef struct cifs_posix_lock { |
@@ -854,7 +861,7 @@ typedef struct cifs_posix_lock { | |||
854 | __le64 start; | 861 | __le64 start; |
855 | __le64 length; | 862 | __le64 length; |
856 | /* BB what about additional owner info to identify network client */ | 863 | /* BB what about additional owner info to identify network client */ |
857 | } CIFS_POSIX_LOCK; | 864 | } __attribute__((packed)) CIFS_POSIX_LOCK; |
858 | 865 | ||
859 | typedef struct smb_com_lock_rsp { | 866 | typedef struct smb_com_lock_rsp { |
860 | struct smb_hdr hdr; /* wct = 2 */ | 867 | struct smb_hdr hdr; /* wct = 2 */ |
@@ -862,7 +869,7 @@ typedef struct smb_com_lock_rsp { | |||
862 | __u8 AndXReserved; | 869 | __u8 AndXReserved; |
863 | __le16 AndXOffset; | 870 | __le16 AndXOffset; |
864 | __u16 ByteCount; | 871 | __u16 ByteCount; |
865 | } LOCK_RSP; | 872 | } __attribute__((packed)) LOCK_RSP; |
866 | 873 | ||
867 | typedef struct smb_com_rename_req { | 874 | typedef struct smb_com_rename_req { |
868 | struct smb_hdr hdr; /* wct = 1 */ | 875 | struct smb_hdr hdr; /* wct = 1 */ |
@@ -872,7 +879,7 @@ typedef struct smb_com_rename_req { | |||
872 | unsigned char OldFileName[1]; | 879 | unsigned char OldFileName[1]; |
873 | /* followed by __u8 BufferFormat2 */ | 880 | /* followed by __u8 BufferFormat2 */ |
874 | /* followed by NewFileName */ | 881 | /* followed by NewFileName */ |
875 | } RENAME_REQ; | 882 | } __attribute__((packed)) RENAME_REQ; |
876 | 883 | ||
877 | /* copy request flags */ | 884 | /* copy request flags */ |
878 | #define COPY_MUST_BE_FILE 0x0001 | 885 | #define COPY_MUST_BE_FILE 0x0001 |
@@ -892,7 +899,7 @@ typedef struct smb_com_copy_req { | |||
892 | unsigned char OldFileName[1]; | 899 | unsigned char OldFileName[1]; |
893 | /* followed by __u8 BufferFormat2 */ | 900 | /* followed by __u8 BufferFormat2 */ |
894 | /* followed by NewFileName string */ | 901 | /* followed by NewFileName string */ |
895 | } COPY_REQ; | 902 | } __attribute__((packed)) COPY_REQ; |
896 | 903 | ||
897 | typedef struct smb_com_copy_rsp { | 904 | typedef struct smb_com_copy_rsp { |
898 | struct smb_hdr hdr; /* wct = 1 */ | 905 | struct smb_hdr hdr; /* wct = 1 */ |
@@ -900,7 +907,7 @@ typedef struct smb_com_copy_rsp { | |||
900 | __u16 ByteCount; /* may be zero */ | 907 | __u16 ByteCount; /* may be zero */ |
901 | __u8 BufferFormat; /* 0x04 - only present if errored file follows */ | 908 | __u8 BufferFormat; /* 0x04 - only present if errored file follows */ |
902 | unsigned char ErrorFileName[1]; /* only present if error in copy */ | 909 | unsigned char ErrorFileName[1]; /* only present if error in copy */ |
903 | } COPY_RSP; | 910 | } __attribute__((packed)) COPY_RSP; |
904 | 911 | ||
905 | #define CREATE_HARD_LINK 0x103 | 912 | #define CREATE_HARD_LINK 0x103 |
906 | #define MOVEFILE_COPY_ALLOWED 0x0002 | 913 | #define MOVEFILE_COPY_ALLOWED 0x0002 |
@@ -916,12 +923,12 @@ typedef struct smb_com_nt_rename_req { /* A5 - also used for create hardlink */ | |||
916 | unsigned char OldFileName[1]; | 923 | unsigned char OldFileName[1]; |
917 | /* followed by __u8 BufferFormat2 */ | 924 | /* followed by __u8 BufferFormat2 */ |
918 | /* followed by NewFileName */ | 925 | /* followed by NewFileName */ |
919 | } NT_RENAME_REQ; | 926 | } __attribute__((packed)) NT_RENAME_REQ; |
920 | 927 | ||
921 | typedef struct smb_com_rename_rsp { | 928 | typedef struct smb_com_rename_rsp { |
922 | struct smb_hdr hdr; /* wct = 0 */ | 929 | struct smb_hdr hdr; /* wct = 0 */ |
923 | __u16 ByteCount; /* bct = 0 */ | 930 | __u16 ByteCount; /* bct = 0 */ |
924 | } RENAME_RSP; | 931 | } __attribute__((packed)) RENAME_RSP; |
925 | 932 | ||
926 | typedef struct smb_com_delete_file_req { | 933 | typedef struct smb_com_delete_file_req { |
927 | struct smb_hdr hdr; /* wct = 1 */ | 934 | struct smb_hdr hdr; /* wct = 1 */ |
@@ -929,43 +936,43 @@ typedef struct smb_com_delete_file_req { | |||
929 | __le16 ByteCount; | 936 | __le16 ByteCount; |
930 | __u8 BufferFormat; /* 4 = ASCII */ | 937 | __u8 BufferFormat; /* 4 = ASCII */ |
931 | unsigned char fileName[1]; | 938 | unsigned char fileName[1]; |
932 | } DELETE_FILE_REQ; | 939 | } __attribute__((packed)) DELETE_FILE_REQ; |
933 | 940 | ||
934 | typedef struct smb_com_delete_file_rsp { | 941 | typedef struct smb_com_delete_file_rsp { |
935 | struct smb_hdr hdr; /* wct = 0 */ | 942 | struct smb_hdr hdr; /* wct = 0 */ |
936 | __u16 ByteCount; /* bct = 0 */ | 943 | __u16 ByteCount; /* bct = 0 */ |
937 | } DELETE_FILE_RSP; | 944 | } __attribute__((packed)) DELETE_FILE_RSP; |
938 | 945 | ||
939 | typedef struct smb_com_delete_directory_req { | 946 | typedef struct smb_com_delete_directory_req { |
940 | struct smb_hdr hdr; /* wct = 0 */ | 947 | struct smb_hdr hdr; /* wct = 0 */ |
941 | __le16 ByteCount; | 948 | __le16 ByteCount; |
942 | __u8 BufferFormat; /* 4 = ASCII */ | 949 | __u8 BufferFormat; /* 4 = ASCII */ |
943 | unsigned char DirName[1]; | 950 | unsigned char DirName[1]; |
944 | } DELETE_DIRECTORY_REQ; | 951 | } __attribute__((packed)) DELETE_DIRECTORY_REQ; |
945 | 952 | ||
946 | typedef struct smb_com_delete_directory_rsp { | 953 | typedef struct smb_com_delete_directory_rsp { |
947 | struct smb_hdr hdr; /* wct = 0 */ | 954 | struct smb_hdr hdr; /* wct = 0 */ |
948 | __u16 ByteCount; /* bct = 0 */ | 955 | __u16 ByteCount; /* bct = 0 */ |
949 | } DELETE_DIRECTORY_RSP; | 956 | } __attribute__((packed)) DELETE_DIRECTORY_RSP; |
950 | 957 | ||
951 | typedef struct smb_com_create_directory_req { | 958 | typedef struct smb_com_create_directory_req { |
952 | struct smb_hdr hdr; /* wct = 0 */ | 959 | struct smb_hdr hdr; /* wct = 0 */ |
953 | __le16 ByteCount; | 960 | __le16 ByteCount; |
954 | __u8 BufferFormat; /* 4 = ASCII */ | 961 | __u8 BufferFormat; /* 4 = ASCII */ |
955 | unsigned char DirName[1]; | 962 | unsigned char DirName[1]; |
956 | } CREATE_DIRECTORY_REQ; | 963 | } __attribute__((packed)) CREATE_DIRECTORY_REQ; |
957 | 964 | ||
958 | typedef struct smb_com_create_directory_rsp { | 965 | typedef struct smb_com_create_directory_rsp { |
959 | struct smb_hdr hdr; /* wct = 0 */ | 966 | struct smb_hdr hdr; /* wct = 0 */ |
960 | __u16 ByteCount; /* bct = 0 */ | 967 | __u16 ByteCount; /* bct = 0 */ |
961 | } CREATE_DIRECTORY_RSP; | 968 | } __attribute__((packed)) CREATE_DIRECTORY_RSP; |
962 | 969 | ||
963 | typedef struct smb_com_query_information_req { | 970 | typedef struct smb_com_query_information_req { |
964 | struct smb_hdr hdr; /* wct = 0 */ | 971 | struct smb_hdr hdr; /* wct = 0 */ |
965 | __le16 ByteCount; /* 1 + namelen + 1 */ | 972 | __le16 ByteCount; /* 1 + namelen + 1 */ |
966 | __u8 BufferFormat; /* 4 = ASCII */ | 973 | __u8 BufferFormat; /* 4 = ASCII */ |
967 | unsigned char FileName[1]; | 974 | unsigned char FileName[1]; |
968 | } QUERY_INFORMATION_REQ; | 975 | } __attribute__((packed)) QUERY_INFORMATION_REQ; |
969 | 976 | ||
970 | typedef struct smb_com_query_information_rsp { | 977 | typedef struct smb_com_query_information_rsp { |
971 | struct smb_hdr hdr; /* wct = 10 */ | 978 | struct smb_hdr hdr; /* wct = 10 */ |
@@ -974,7 +981,7 @@ typedef struct smb_com_query_information_rsp { | |||
974 | __le32 size; | 981 | __le32 size; |
975 | __u16 reserved[5]; | 982 | __u16 reserved[5]; |
976 | __le16 ByteCount; /* bcc = 0 */ | 983 | __le16 ByteCount; /* bcc = 0 */ |
977 | } QUERY_INFORMATION_RSP; | 984 | } __attribute__((packed)) QUERY_INFORMATION_RSP; |
978 | 985 | ||
979 | typedef struct smb_com_setattr_req { | 986 | typedef struct smb_com_setattr_req { |
980 | struct smb_hdr hdr; /* wct = 8 */ | 987 | struct smb_hdr hdr; /* wct = 8 */ |
@@ -985,12 +992,12 @@ typedef struct smb_com_setattr_req { | |||
985 | __u16 ByteCount; | 992 | __u16 ByteCount; |
986 | __u8 BufferFormat; /* 4 = ASCII */ | 993 | __u8 BufferFormat; /* 4 = ASCII */ |
987 | unsigned char fileName[1]; | 994 | unsigned char fileName[1]; |
988 | } SETATTR_REQ; | 995 | } __attribute__((packed)) SETATTR_REQ; |
989 | 996 | ||
990 | typedef struct smb_com_setattr_rsp { | 997 | typedef struct smb_com_setattr_rsp { |
991 | struct smb_hdr hdr; /* wct = 0 */ | 998 | struct smb_hdr hdr; /* wct = 0 */ |
992 | __u16 ByteCount; /* bct = 0 */ | 999 | __u16 ByteCount; /* bct = 0 */ |
993 | } SETATTR_RSP; | 1000 | } __attribute__((packed)) SETATTR_RSP; |
994 | 1001 | ||
995 | /* empty wct response to setattr */ | 1002 | /* empty wct response to setattr */ |
996 | 1003 | ||
@@ -1020,7 +1027,7 @@ typedef struct smb_com_transaction_ioctl_req { | |||
1020 | __le16 ByteCount; | 1027 | __le16 ByteCount; |
1021 | __u8 Pad[3]; | 1028 | __u8 Pad[3]; |
1022 | __u8 Data[1]; | 1029 | __u8 Data[1]; |
1023 | } TRANSACT_IOCTL_REQ; | 1030 | } __attribute__((packed)) TRANSACT_IOCTL_REQ; |
1024 | 1031 | ||
1025 | typedef struct smb_com_transaction_ioctl_rsp { | 1032 | typedef struct smb_com_transaction_ioctl_rsp { |
1026 | struct smb_hdr hdr; /* wct = 19 */ | 1033 | struct smb_hdr hdr; /* wct = 19 */ |
@@ -1037,7 +1044,7 @@ typedef struct smb_com_transaction_ioctl_rsp { | |||
1037 | __le16 ReturnedDataLen; | 1044 | __le16 ReturnedDataLen; |
1038 | __u16 ByteCount; | 1045 | __u16 ByteCount; |
1039 | __u8 Pad[3]; | 1046 | __u8 Pad[3]; |
1040 | } TRANSACT_IOCTL_RSP; | 1047 | } __attribute__((packed)) TRANSACT_IOCTL_RSP; |
1041 | 1048 | ||
1042 | typedef struct smb_com_transaction_change_notify_req { | 1049 | typedef struct smb_com_transaction_change_notify_req { |
1043 | struct smb_hdr hdr; /* wct = 23 */ | 1050 | struct smb_hdr hdr; /* wct = 23 */ |
@@ -1061,7 +1068,7 @@ typedef struct smb_com_transaction_change_notify_req { | |||
1061 | __le16 ByteCount; | 1068 | __le16 ByteCount; |
1062 | /* __u8 Pad[3];*/ | 1069 | /* __u8 Pad[3];*/ |
1063 | /* __u8 Data[1];*/ | 1070 | /* __u8 Data[1];*/ |
1064 | } TRANSACT_CHANGE_NOTIFY_REQ; | 1071 | } __attribute__((packed)) TRANSACT_CHANGE_NOTIFY_REQ; |
1065 | 1072 | ||
1066 | typedef struct smb_com_transaction_change_notify_rsp { | 1073 | typedef struct smb_com_transaction_change_notify_rsp { |
1067 | struct smb_hdr hdr; /* wct = 18 */ | 1074 | struct smb_hdr hdr; /* wct = 18 */ |
@@ -1077,7 +1084,7 @@ typedef struct smb_com_transaction_change_notify_rsp { | |||
1077 | __u8 SetupCount; /* 0 */ | 1084 | __u8 SetupCount; /* 0 */ |
1078 | __u16 ByteCount; | 1085 | __u16 ByteCount; |
1079 | /* __u8 Pad[3]; */ | 1086 | /* __u8 Pad[3]; */ |
1080 | } TRANSACT_CHANGE_NOTIFY_RSP; | 1087 | } __attribute__((packed)) TRANSACT_CHANGE_NOTIFY_RSP; |
1081 | /* Completion Filter flags for Notify */ | 1088 | /* Completion Filter flags for Notify */ |
1082 | #define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001 | 1089 | #define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001 |
1083 | #define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002 | 1090 | #define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002 |
@@ -1108,7 +1115,7 @@ struct file_notify_information { | |||
1108 | __le32 Action; | 1115 | __le32 Action; |
1109 | __le32 FileNameLength; | 1116 | __le32 FileNameLength; |
1110 | __u8 FileName[0]; | 1117 | __u8 FileName[0]; |
1111 | }; | 1118 | } __attribute__((packed)); |
1112 | 1119 | ||
1113 | struct reparse_data { | 1120 | struct reparse_data { |
1114 | __u32 ReparseTag; | 1121 | __u32 ReparseTag; |
@@ -1119,7 +1126,7 @@ struct reparse_data { | |||
1119 | __u16 TargetNameOffset; | 1126 | __u16 TargetNameOffset; |
1120 | __u16 TargetNameLen; | 1127 | __u16 TargetNameLen; |
1121 | char LinkNamesBuf[1]; | 1128 | char LinkNamesBuf[1]; |
1122 | }; | 1129 | } __attribute__((packed)); |
1123 | 1130 | ||
1124 | struct cifs_quota_data { | 1131 | struct cifs_quota_data { |
1125 | __u32 rsrvd1; /* 0 */ | 1132 | __u32 rsrvd1; /* 0 */ |
@@ -1129,7 +1136,7 @@ struct cifs_quota_data { | |||
1129 | __u64 soft_limit; | 1136 | __u64 soft_limit; |
1130 | __u64 hard_limit; | 1137 | __u64 hard_limit; |
1131 | char sid[1]; /* variable size? */ | 1138 | char sid[1]; /* variable size? */ |
1132 | }; | 1139 | } __attribute__((packed)); |
1133 | 1140 | ||
1134 | /* quota sub commands */ | 1141 | /* quota sub commands */ |
1135 | #define QUOTA_LIST_CONTINUE 0 | 1142 | #define QUOTA_LIST_CONTINUE 0 |
@@ -1155,12 +1162,12 @@ struct trans2_req { | |||
1155 | __u8 Reserved3; | 1162 | __u8 Reserved3; |
1156 | __le16 SubCommand; /* 1st setup word - SetupCount words follow */ | 1163 | __le16 SubCommand; /* 1st setup word - SetupCount words follow */ |
1157 | __le16 ByteCount; | 1164 | __le16 ByteCount; |
1158 | }; | 1165 | } __attribute__((packed)); |
1159 | 1166 | ||
1160 | struct smb_t2_req { | 1167 | struct smb_t2_req { |
1161 | struct smb_hdr hdr; | 1168 | struct smb_hdr hdr; |
1162 | struct trans2_req t2_req; | 1169 | struct trans2_req t2_req; |
1163 | }; | 1170 | } __attribute__((packed)); |
1164 | 1171 | ||
1165 | struct trans2_resp { | 1172 | struct trans2_resp { |
1166 | /* struct smb_hdr hdr precedes. Note wct = 10 + setup count */ | 1173 | /* struct smb_hdr hdr precedes. Note wct = 10 + setup count */ |
@@ -1179,12 +1186,12 @@ struct trans2_resp { | |||
1179 | __u16 ByteCount; | 1186 | __u16 ByteCount; |
1180 | __u16 Reserved2;*/ | 1187 | __u16 Reserved2;*/ |
1181 | /* data area follows */ | 1188 | /* data area follows */ |
1182 | }; | 1189 | } __attribute__((packed)); |
1183 | 1190 | ||
1184 | struct smb_t2_rsp { | 1191 | struct smb_t2_rsp { |
1185 | struct smb_hdr hdr; | 1192 | struct smb_hdr hdr; |
1186 | struct trans2_resp t2_rsp; | 1193 | struct trans2_resp t2_rsp; |
1187 | }; | 1194 | } __attribute__((packed)); |
1188 | 1195 | ||
1189 | /* PathInfo/FileInfo infolevels */ | 1196 | /* PathInfo/FileInfo infolevels */ |
1190 | #define SMB_INFO_STANDARD 1 | 1197 | #define SMB_INFO_STANDARD 1 |
@@ -1271,14 +1278,14 @@ typedef struct smb_com_transaction2_qpi_req { | |||
1271 | __le16 InformationLevel; | 1278 | __le16 InformationLevel; |
1272 | __u32 Reserved4; | 1279 | __u32 Reserved4; |
1273 | char FileName[1]; | 1280 | char FileName[1]; |
1274 | } TRANSACTION2_QPI_REQ; | 1281 | } __attribute__((packed)) TRANSACTION2_QPI_REQ; |
1275 | 1282 | ||
1276 | typedef struct smb_com_transaction2_qpi_rsp { | 1283 | typedef struct smb_com_transaction2_qpi_rsp { |
1277 | struct smb_hdr hdr; /* wct = 10 + SetupCount */ | 1284 | struct smb_hdr hdr; /* wct = 10 + SetupCount */ |
1278 | struct trans2_resp t2; | 1285 | struct trans2_resp t2; |
1279 | __u16 ByteCount; | 1286 | __u16 ByteCount; |
1280 | __u16 Reserved2; /* parameter word reserved - present for infolevels > 100 */ | 1287 | __u16 Reserved2; /* parameter word reserved - present for infolevels > 100 */ |
1281 | } TRANSACTION2_QPI_RSP; | 1288 | } __attribute__((packed)) TRANSACTION2_QPI_RSP; |
1282 | 1289 | ||
1283 | typedef struct smb_com_transaction2_spi_req { | 1290 | typedef struct smb_com_transaction2_spi_req { |
1284 | struct smb_hdr hdr; /* wct = 15 */ | 1291 | struct smb_hdr hdr; /* wct = 15 */ |
@@ -1304,21 +1311,21 @@ typedef struct smb_com_transaction2_spi_req { | |||
1304 | __le16 InformationLevel; | 1311 | __le16 InformationLevel; |
1305 | __u32 Reserved4; | 1312 | __u32 Reserved4; |
1306 | char FileName[1]; | 1313 | char FileName[1]; |
1307 | } TRANSACTION2_SPI_REQ; | 1314 | } __attribute__((packed)) TRANSACTION2_SPI_REQ; |
1308 | 1315 | ||
1309 | typedef struct smb_com_transaction2_spi_rsp { | 1316 | typedef struct smb_com_transaction2_spi_rsp { |
1310 | struct smb_hdr hdr; /* wct = 10 + SetupCount */ | 1317 | struct smb_hdr hdr; /* wct = 10 + SetupCount */ |
1311 | struct trans2_resp t2; | 1318 | struct trans2_resp t2; |
1312 | __u16 ByteCount; | 1319 | __u16 ByteCount; |
1313 | __u16 Reserved2; /* parameter word reserved - present for infolevels > 100 */ | 1320 | __u16 Reserved2; /* parameter word reserved - present for infolevels > 100 */ |
1314 | } TRANSACTION2_SPI_RSP; | 1321 | } __attribute__((packed)) TRANSACTION2_SPI_RSP; |
1315 | 1322 | ||
1316 | struct set_file_rename { | 1323 | struct set_file_rename { |
1317 | __le32 overwrite; /* 1 = overwrite dest */ | 1324 | __le32 overwrite; /* 1 = overwrite dest */ |
1318 | __u32 root_fid; /* zero */ | 1325 | __u32 root_fid; /* zero */ |
1319 | __le32 target_name_len; | 1326 | __le32 target_name_len; |
1320 | char target_name[0]; /* Must be unicode */ | 1327 | char target_name[0]; /* Must be unicode */ |
1321 | }; | 1328 | } __attribute__((packed)); |
1322 | 1329 | ||
1323 | struct smb_com_transaction2_sfi_req { | 1330 | struct smb_com_transaction2_sfi_req { |
1324 | struct smb_hdr hdr; /* wct = 15 */ | 1331 | struct smb_hdr hdr; /* wct = 15 */ |
@@ -1344,7 +1351,7 @@ struct smb_com_transaction2_sfi_req { | |||
1344 | __u16 Fid; | 1351 | __u16 Fid; |
1345 | __le16 InformationLevel; | 1352 | __le16 InformationLevel; |
1346 | __u16 Reserved4; | 1353 | __u16 Reserved4; |
1347 | }; | 1354 | } __attribute__((packed)); |
1348 | 1355 | ||
1349 | struct smb_com_transaction2_sfi_rsp { | 1356 | struct smb_com_transaction2_sfi_rsp { |
1350 | struct smb_hdr hdr; /* wct = 10 + SetupCount */ | 1357 | struct smb_hdr hdr; /* wct = 10 + SetupCount */ |
@@ -1352,7 +1359,7 @@ struct smb_com_transaction2_sfi_rsp { | |||
1352 | __u16 ByteCount; | 1359 | __u16 ByteCount; |
1353 | __u16 Reserved2; /* parameter word reserved - | 1360 | __u16 Reserved2; /* parameter word reserved - |
1354 | present for infolevels > 100 */ | 1361 | present for infolevels > 100 */ |
1355 | }; | 1362 | } __attribute__((packed)); |
1356 | 1363 | ||
1357 | struct smb_t2_qfi_req { | 1364 | struct smb_t2_qfi_req { |
1358 | struct smb_hdr hdr; | 1365 | struct smb_hdr hdr; |
@@ -1360,7 +1367,7 @@ struct smb_t2_qfi_req { | |||
1360 | __u8 Pad; | 1367 | __u8 Pad; |
1361 | __u16 Fid; | 1368 | __u16 Fid; |
1362 | __le16 InformationLevel; | 1369 | __le16 InformationLevel; |
1363 | }; | 1370 | } __attribute__((packed)); |
1364 | 1371 | ||
1365 | struct smb_t2_qfi_rsp { | 1372 | struct smb_t2_qfi_rsp { |
1366 | struct smb_hdr hdr; /* wct = 10 + SetupCount */ | 1373 | struct smb_hdr hdr; /* wct = 10 + SetupCount */ |
@@ -1368,7 +1375,7 @@ struct smb_t2_qfi_rsp { | |||
1368 | __u16 ByteCount; | 1375 | __u16 ByteCount; |
1369 | __u16 Reserved2; /* parameter word reserved - | 1376 | __u16 Reserved2; /* parameter word reserved - |
1370 | present for infolevels > 100 */ | 1377 | present for infolevels > 100 */ |
1371 | }; | 1378 | } __attribute__((packed)); |
1372 | 1379 | ||
1373 | /* | 1380 | /* |
1374 | * Flags on T2 FINDFIRST and FINDNEXT | 1381 | * Flags on T2 FINDFIRST and FINDNEXT |
@@ -1410,13 +1417,13 @@ typedef struct smb_com_transaction2_ffirst_req { | |||
1410 | __le16 InformationLevel; | 1417 | __le16 InformationLevel; |
1411 | __le32 SearchStorageType; | 1418 | __le32 SearchStorageType; |
1412 | char FileName[1]; | 1419 | char FileName[1]; |
1413 | } TRANSACTION2_FFIRST_REQ; | 1420 | } __attribute__((packed)) TRANSACTION2_FFIRST_REQ; |
1414 | 1421 | ||
1415 | typedef struct smb_com_transaction2_ffirst_rsp { | 1422 | typedef struct smb_com_transaction2_ffirst_rsp { |
1416 | struct smb_hdr hdr; /* wct = 10 */ | 1423 | struct smb_hdr hdr; /* wct = 10 */ |
1417 | struct trans2_resp t2; | 1424 | struct trans2_resp t2; |
1418 | __u16 ByteCount; | 1425 | __u16 ByteCount; |
1419 | } TRANSACTION2_FFIRST_RSP; | 1426 | } __attribute__((packed)) TRANSACTION2_FFIRST_RSP; |
1420 | 1427 | ||
1421 | typedef struct smb_com_transaction2_ffirst_rsp_parms { | 1428 | typedef struct smb_com_transaction2_ffirst_rsp_parms { |
1422 | __u16 SearchHandle; | 1429 | __u16 SearchHandle; |
@@ -1424,7 +1431,7 @@ typedef struct smb_com_transaction2_ffirst_rsp_parms { | |||
1424 | __le16 EndofSearch; | 1431 | __le16 EndofSearch; |
1425 | __le16 EAErrorOffset; | 1432 | __le16 EAErrorOffset; |
1426 | __le16 LastNameOffset; | 1433 | __le16 LastNameOffset; |
1427 | } T2_FFIRST_RSP_PARMS; | 1434 | } __attribute__((packed)) T2_FFIRST_RSP_PARMS; |
1428 | 1435 | ||
1429 | typedef struct smb_com_transaction2_fnext_req { | 1436 | typedef struct smb_com_transaction2_fnext_req { |
1430 | struct smb_hdr hdr; /* wct = 15 */ | 1437 | struct smb_hdr hdr; /* wct = 15 */ |
@@ -1452,20 +1459,20 @@ typedef struct smb_com_transaction2_fnext_req { | |||
1452 | __u32 ResumeKey; | 1459 | __u32 ResumeKey; |
1453 | __le16 SearchFlags; | 1460 | __le16 SearchFlags; |
1454 | char ResumeFileName[1]; | 1461 | char ResumeFileName[1]; |
1455 | } TRANSACTION2_FNEXT_REQ; | 1462 | } __attribute__((packed)) TRANSACTION2_FNEXT_REQ; |
1456 | 1463 | ||
1457 | typedef struct smb_com_transaction2_fnext_rsp { | 1464 | typedef struct smb_com_transaction2_fnext_rsp { |
1458 | struct smb_hdr hdr; /* wct = 10 */ | 1465 | struct smb_hdr hdr; /* wct = 10 */ |
1459 | struct trans2_resp t2; | 1466 | struct trans2_resp t2; |
1460 | __u16 ByteCount; | 1467 | __u16 ByteCount; |
1461 | } TRANSACTION2_FNEXT_RSP; | 1468 | } __attribute__((packed)) TRANSACTION2_FNEXT_RSP; |
1462 | 1469 | ||
1463 | typedef struct smb_com_transaction2_fnext_rsp_parms { | 1470 | typedef struct smb_com_transaction2_fnext_rsp_parms { |
1464 | __le16 SearchCount; | 1471 | __le16 SearchCount; |
1465 | __le16 EndofSearch; | 1472 | __le16 EndofSearch; |
1466 | __le16 EAErrorOffset; | 1473 | __le16 EAErrorOffset; |
1467 | __le16 LastNameOffset; | 1474 | __le16 LastNameOffset; |
1468 | } T2_FNEXT_RSP_PARMS; | 1475 | } __attribute__((packed)) T2_FNEXT_RSP_PARMS; |
1469 | 1476 | ||
1470 | /* QFSInfo Levels */ | 1477 | /* QFSInfo Levels */ |
1471 | #define SMB_INFO_ALLOCATION 1 | 1478 | #define SMB_INFO_ALLOCATION 1 |
@@ -1502,14 +1509,14 @@ typedef struct smb_com_transaction2_qfsi_req { | |||
1502 | __le16 ByteCount; | 1509 | __le16 ByteCount; |
1503 | __u8 Pad; | 1510 | __u8 Pad; |
1504 | __le16 InformationLevel; | 1511 | __le16 InformationLevel; |
1505 | } TRANSACTION2_QFSI_REQ; | 1512 | } __attribute__((packed)) TRANSACTION2_QFSI_REQ; |
1506 | 1513 | ||
1507 | typedef struct smb_com_transaction_qfsi_rsp { | 1514 | typedef struct smb_com_transaction_qfsi_rsp { |
1508 | struct smb_hdr hdr; /* wct = 10 + SetupCount */ | 1515 | struct smb_hdr hdr; /* wct = 10 + SetupCount */ |
1509 | struct trans2_resp t2; | 1516 | struct trans2_resp t2; |
1510 | __u16 ByteCount; | 1517 | __u16 ByteCount; |
1511 | __u8 Pad; /* may be three bytes *//* followed by data area */ | 1518 | __u8 Pad; /* may be three bytes *//* followed by data area */ |
1512 | } TRANSACTION2_QFSI_RSP; | 1519 | } __attribute__((packed)) TRANSACTION2_QFSI_RSP; |
1513 | 1520 | ||
1514 | 1521 | ||
1515 | /* SETFSInfo Levels */ | 1522 | /* SETFSInfo Levels */ |
@@ -1539,13 +1546,13 @@ typedef struct smb_com_transaction2_setfsi_req { | |||
1539 | __le16 ClientUnixMajor; /* Data start. */ | 1546 | __le16 ClientUnixMajor; /* Data start. */ |
1540 | __le16 ClientUnixMinor; | 1547 | __le16 ClientUnixMinor; |
1541 | __le64 ClientUnixCap; /* Data end */ | 1548 | __le64 ClientUnixCap; /* Data end */ |
1542 | } TRANSACTION2_SETFSI_REQ; | 1549 | } __attribute__((packed)) TRANSACTION2_SETFSI_REQ; |
1543 | 1550 | ||
1544 | typedef struct smb_com_transaction2_setfsi_rsp { | 1551 | typedef struct smb_com_transaction2_setfsi_rsp { |
1545 | struct smb_hdr hdr; /* wct = 10 */ | 1552 | struct smb_hdr hdr; /* wct = 10 */ |
1546 | struct trans2_resp t2; | 1553 | struct trans2_resp t2; |
1547 | __u16 ByteCount; | 1554 | __u16 ByteCount; |
1548 | } TRANSACTION2_SETFSI_RSP; | 1555 | } __attribute__((packed)) TRANSACTION2_SETFSI_RSP; |
1549 | 1556 | ||
1550 | 1557 | ||
1551 | typedef struct smb_com_transaction2_get_dfs_refer_req { | 1558 | typedef struct smb_com_transaction2_get_dfs_refer_req { |
@@ -1570,7 +1577,7 @@ typedef struct smb_com_transaction2_get_dfs_refer_req { | |||
1570 | __u8 Pad[3]; /* Win2K has sent 0x0F01 (max resp length perhaps?) followed by one byte pad - doesn't seem to matter though */ | 1577 | __u8 Pad[3]; /* Win2K has sent 0x0F01 (max resp length perhaps?) followed by one byte pad - doesn't seem to matter though */ |
1571 | __le16 MaxReferralLevel; | 1578 | __le16 MaxReferralLevel; |
1572 | char RequestFileName[1]; | 1579 | char RequestFileName[1]; |
1573 | } TRANSACTION2_GET_DFS_REFER_REQ; | 1580 | } __attribute__((packed)) TRANSACTION2_GET_DFS_REFER_REQ; |
1574 | 1581 | ||
1575 | typedef struct dfs_referral_level_3 { | 1582 | typedef struct dfs_referral_level_3 { |
1576 | __le16 VersionNumber; | 1583 | __le16 VersionNumber; |
@@ -1582,7 +1589,7 @@ typedef struct dfs_referral_level_3 { | |||
1582 | __le16 DfsPathOffset; | 1589 | __le16 DfsPathOffset; |
1583 | __le16 DfsAlternatePathOffset; | 1590 | __le16 DfsAlternatePathOffset; |
1584 | __le16 NetworkAddressOffset; | 1591 | __le16 NetworkAddressOffset; |
1585 | } REFERRAL3; | 1592 | } __attribute__((packed)) REFERRAL3; |
1586 | 1593 | ||
1587 | typedef struct smb_com_transaction_get_dfs_refer_rsp { | 1594 | typedef struct smb_com_transaction_get_dfs_refer_rsp { |
1588 | struct smb_hdr hdr; /* wct = 10 */ | 1595 | struct smb_hdr hdr; /* wct = 10 */ |
@@ -1595,7 +1602,7 @@ typedef struct smb_com_transaction_get_dfs_refer_rsp { | |||
1595 | __u16 Pad2; | 1602 | __u16 Pad2; |
1596 | REFERRAL3 referrals[1]; /* array of level 3 dfs_referral structures */ | 1603 | REFERRAL3 referrals[1]; /* array of level 3 dfs_referral structures */ |
1597 | /* followed by the strings pointed to by the referral structures */ | 1604 | /* followed by the strings pointed to by the referral structures */ |
1598 | } TRANSACTION2_GET_DFS_REFER_RSP; | 1605 | } __attribute__((packed)) TRANSACTION2_GET_DFS_REFER_RSP; |
1599 | 1606 | ||
1600 | /* DFS Flags */ | 1607 | /* DFS Flags */ |
1601 | #define DFSREF_REFERRAL_SERVER 0x0001 | 1608 | #define DFSREF_REFERRAL_SERVER 0x0001 |
@@ -1649,7 +1656,7 @@ struct serverInfo { | |||
1649 | unsigned char versionMinor; | 1656 | unsigned char versionMinor; |
1650 | unsigned long type; | 1657 | unsigned long type; |
1651 | unsigned int commentOffset; | 1658 | unsigned int commentOffset; |
1652 | }; | 1659 | } __attribute__((packed)); |
1653 | 1660 | ||
1654 | /* | 1661 | /* |
1655 | * The following structure is the format of the data returned on a NetShareEnum | 1662 | * The following structure is the format of the data returned on a NetShareEnum |
@@ -1661,27 +1668,27 @@ struct shareInfo { | |||
1661 | char pad; | 1668 | char pad; |
1662 | unsigned short type; | 1669 | unsigned short type; |
1663 | unsigned int commentOffset; | 1670 | unsigned int commentOffset; |
1664 | }; | 1671 | } __attribute__((packed)); |
1665 | 1672 | ||
1666 | struct aliasInfo { | 1673 | struct aliasInfo { |
1667 | char aliasName[9]; | 1674 | char aliasName[9]; |
1668 | char pad; | 1675 | char pad; |
1669 | unsigned int commentOffset; | 1676 | unsigned int commentOffset; |
1670 | unsigned char type[2]; | 1677 | unsigned char type[2]; |
1671 | }; | 1678 | } __attribute__((packed)); |
1672 | 1679 | ||
1673 | struct aliasInfo92 { | 1680 | struct aliasInfo92 { |
1674 | int aliasNameOffset; | 1681 | int aliasNameOffset; |
1675 | int serverNameOffset; | 1682 | int serverNameOffset; |
1676 | int shareNameOffset; | 1683 | int shareNameOffset; |
1677 | }; | 1684 | } __attribute__((packed)); |
1678 | 1685 | ||
1679 | typedef struct { | 1686 | typedef struct { |
1680 | __le64 TotalAllocationUnits; | 1687 | __le64 TotalAllocationUnits; |
1681 | __le64 FreeAllocationUnits; | 1688 | __le64 FreeAllocationUnits; |
1682 | __le32 SectorsPerAllocationUnit; | 1689 | __le32 SectorsPerAllocationUnit; |
1683 | __le32 BytesPerSector; | 1690 | __le32 BytesPerSector; |
1684 | } FILE_SYSTEM_INFO; /* size info, level 0x103 */ | 1691 | } __attribute__((packed)) FILE_SYSTEM_INFO; /* size info, level 0x103 */ |
1685 | 1692 | ||
1686 | typedef struct { | 1693 | typedef struct { |
1687 | __le32 fsid; | 1694 | __le32 fsid; |
@@ -1689,13 +1696,13 @@ typedef struct { | |||
1689 | __le32 TotalAllocationUnits; | 1696 | __le32 TotalAllocationUnits; |
1690 | __le32 FreeAllocationUnits; | 1697 | __le32 FreeAllocationUnits; |
1691 | __le16 BytesPerSector; | 1698 | __le16 BytesPerSector; |
1692 | } FILE_SYSTEM_ALLOC_INFO; | 1699 | } __attribute__((packed)) FILE_SYSTEM_ALLOC_INFO; |
1693 | 1700 | ||
1694 | typedef struct { | 1701 | typedef struct { |
1695 | __le16 MajorVersionNumber; | 1702 | __le16 MajorVersionNumber; |
1696 | __le16 MinorVersionNumber; | 1703 | __le16 MinorVersionNumber; |
1697 | __le64 Capability; | 1704 | __le64 Capability; |
1698 | } FILE_SYSTEM_UNIX_INFO; /* Unix extensions info, level 0x200 */ | 1705 | } __attribute__((packed)) FILE_SYSTEM_UNIX_INFO; /* Unix extensions info, level 0x200 */ |
1699 | 1706 | ||
1700 | /* Version numbers for CIFS UNIX major and minor. */ | 1707 | /* Version numbers for CIFS UNIX major and minor. */ |
1701 | #define CIFS_UNIX_MAJOR_VERSION 1 | 1708 | #define CIFS_UNIX_MAJOR_VERSION 1 |
@@ -1730,7 +1737,7 @@ typedef struct { | |||
1730 | __le64 FileSysIdentifier; /* fsid */ | 1737 | __le64 FileSysIdentifier; /* fsid */ |
1731 | /* NB Namelen comes from FILE_SYSTEM_ATTRIBUTE_INFO call */ | 1738 | /* NB Namelen comes from FILE_SYSTEM_ATTRIBUTE_INFO call */ |
1732 | /* NB flags can come from FILE_SYSTEM_DEVICE_INFO call */ | 1739 | /* NB flags can come from FILE_SYSTEM_DEVICE_INFO call */ |
1733 | } FILE_SYSTEM_POSIX_INFO; | 1740 | } __attribute__((packed)) FILE_SYSTEM_POSIX_INFO; |
1734 | 1741 | ||
1735 | /* DeviceType Flags */ | 1742 | /* DeviceType Flags */ |
1736 | #define FILE_DEVICE_CD_ROM 0x00000002 | 1743 | #define FILE_DEVICE_CD_ROM 0x00000002 |
@@ -1755,14 +1762,14 @@ typedef struct { | |||
1755 | typedef struct { | 1762 | typedef struct { |
1756 | __le32 DeviceType; | 1763 | __le32 DeviceType; |
1757 | __le32 DeviceCharacteristics; | 1764 | __le32 DeviceCharacteristics; |
1758 | } FILE_SYSTEM_DEVICE_INFO; /* device info, level 0x104 */ | 1765 | } __attribute__((packed)) FILE_SYSTEM_DEVICE_INFO; /* device info, level 0x104 */ |
1759 | 1766 | ||
1760 | typedef struct { | 1767 | typedef struct { |
1761 | __le32 Attributes; | 1768 | __le32 Attributes; |
1762 | __le32 MaxPathNameComponentLength; | 1769 | __le32 MaxPathNameComponentLength; |
1763 | __le32 FileSystemNameLen; | 1770 | __le32 FileSystemNameLen; |
1764 | char FileSystemName[52]; /* do not really need to save this - so potentially get only subset of name */ | 1771 | char FileSystemName[52]; /* do not really need to save this - so potentially get only subset of name */ |
1765 | } FILE_SYSTEM_ATTRIBUTE_INFO; | 1772 | } __attribute__((packed)) FILE_SYSTEM_ATTRIBUTE_INFO; |
1766 | 1773 | ||
1767 | /******************************************************************************/ | 1774 | /******************************************************************************/ |
1768 | /* QueryFileInfo/QueryPathinfo (also for SetPath/SetFile) data buffer formats */ | 1775 | /* QueryFileInfo/QueryPathinfo (also for SetPath/SetFile) data buffer formats */ |
@@ -1789,7 +1796,7 @@ typedef struct { /* data block encoding of response to level 263 QPathInfo */ | |||
1789 | __le32 AlignmentRequirement; | 1796 | __le32 AlignmentRequirement; |
1790 | __le32 FileNameLength; | 1797 | __le32 FileNameLength; |
1791 | char FileName[1]; | 1798 | char FileName[1]; |
1792 | } FILE_ALL_INFO; /* level 0x107 QPathInfo */ | 1799 | } __attribute__((packed)) FILE_ALL_INFO; /* level 0x107 QPathInfo */ |
1793 | 1800 | ||
1794 | /* defines for enumerating possible values of the Unix type field below */ | 1801 | /* defines for enumerating possible values of the Unix type field below */ |
1795 | #define UNIX_FILE 0 | 1802 | #define UNIX_FILE 0 |
@@ -1813,11 +1820,11 @@ typedef struct { | |||
1813 | __u64 UniqueId; | 1820 | __u64 UniqueId; |
1814 | __le64 Permissions; | 1821 | __le64 Permissions; |
1815 | __le64 Nlinks; | 1822 | __le64 Nlinks; |
1816 | } FILE_UNIX_BASIC_INFO; /* level 0x200 QPathInfo */ | 1823 | } __attribute__((packed)) FILE_UNIX_BASIC_INFO; /* level 0x200 QPathInfo */ |
1817 | 1824 | ||
1818 | typedef struct { | 1825 | typedef struct { |
1819 | char LinkDest[1]; | 1826 | char LinkDest[1]; |
1820 | } FILE_UNIX_LINK_INFO; /* level 0x201 QPathInfo */ | 1827 | } __attribute__((packed)) FILE_UNIX_LINK_INFO; /* level 0x201 QPathInfo */ |
1821 | 1828 | ||
1822 | /* The following three structures are needed only for | 1829 | /* The following three structures are needed only for |
1823 | setting time to NT4 and some older servers via | 1830 | setting time to NT4 and some older servers via |
@@ -1826,13 +1833,13 @@ typedef struct { | |||
1826 | __u16 Day:5; | 1833 | __u16 Day:5; |
1827 | __u16 Month:4; | 1834 | __u16 Month:4; |
1828 | __u16 Year:7; | 1835 | __u16 Year:7; |
1829 | } SMB_DATE; | 1836 | } __attribute__((packed)) SMB_DATE; |
1830 | 1837 | ||
1831 | typedef struct { | 1838 | typedef struct { |
1832 | __u16 TwoSeconds:5; | 1839 | __u16 TwoSeconds:5; |
1833 | __u16 Minutes:6; | 1840 | __u16 Minutes:6; |
1834 | __u16 Hours:5; | 1841 | __u16 Hours:5; |
1835 | } SMB_TIME; | 1842 | } __attribute__((packed)) SMB_TIME; |
1836 | 1843 | ||
1837 | typedef struct { | 1844 | typedef struct { |
1838 | __le16 CreationDate; /* SMB Date see above */ | 1845 | __le16 CreationDate; /* SMB Date see above */ |
@@ -1845,7 +1852,7 @@ typedef struct { | |||
1845 | __le32 AllocationSize; | 1852 | __le32 AllocationSize; |
1846 | __le16 Attributes; /* verify not u32 */ | 1853 | __le16 Attributes; /* verify not u32 */ |
1847 | __le32 EASize; | 1854 | __le32 EASize; |
1848 | } FILE_INFO_STANDARD; /* level 1 SetPath/FileInfo */ | 1855 | } __attribute__((packed)) FILE_INFO_STANDARD; /* level 1 SetPath/FileInfo */ |
1849 | 1856 | ||
1850 | typedef struct { | 1857 | typedef struct { |
1851 | __le64 CreationTime; | 1858 | __le64 CreationTime; |
@@ -1854,19 +1861,19 @@ typedef struct { | |||
1854 | __le64 ChangeTime; | 1861 | __le64 ChangeTime; |
1855 | __le32 Attributes; | 1862 | __le32 Attributes; |
1856 | __u32 Pad; | 1863 | __u32 Pad; |
1857 | } FILE_BASIC_INFO; /* size info, level 0x101 */ | 1864 | } __attribute__((packed)) FILE_BASIC_INFO; /* size info, level 0x101 */ |
1858 | 1865 | ||
1859 | struct file_allocation_info { | 1866 | struct file_allocation_info { |
1860 | __le64 AllocationSize; /* Note old Samba srvr rounds this up too much */ | 1867 | __le64 AllocationSize; /* Note old Samba srvr rounds this up too much */ |
1861 | }; /* size used on disk, level 0x103 for set, 0x105 for query */ | 1868 | } __attribute__((packed)); /* size used on disk, level 0x103 for set, 0x105 for query */ |
1862 | 1869 | ||
1863 | struct file_end_of_file_info { | 1870 | struct file_end_of_file_info { |
1864 | __le64 FileSize; /* offset to end of file */ | 1871 | __le64 FileSize; /* offset to end of file */ |
1865 | }; /* size info, level 0x104 for set, 0x106 for query */ | 1872 | } __attribute__((packed)); /* size info, level 0x104 for set, 0x106 for query */ |
1866 | 1873 | ||
1867 | struct file_alt_name_info { | 1874 | struct file_alt_name_info { |
1868 | __u8 alt_name[1]; | 1875 | __u8 alt_name[1]; |
1869 | }; /* level 0x0108 */ | 1876 | } __attribute__((packed)); /* level 0x0108 */ |
1870 | 1877 | ||
1871 | struct file_stream_info { | 1878 | struct file_stream_info { |
1872 | __le32 number_of_streams; /* BB check sizes and verify location */ | 1879 | __le32 number_of_streams; /* BB check sizes and verify location */ |
@@ -1883,7 +1890,7 @@ struct file_compression_info { | |||
1883 | __u8 ch_shift; | 1890 | __u8 ch_shift; |
1884 | __u8 cl_shift; | 1891 | __u8 cl_shift; |
1885 | __u8 pad[3]; | 1892 | __u8 pad[3]; |
1886 | }; /* level 0x10b */ | 1893 | } __attribute__((packed)); /* level 0x10b */ |
1887 | 1894 | ||
1888 | /* POSIX ACL set/query path info structures */ | 1895 | /* POSIX ACL set/query path info structures */ |
1889 | #define CIFS_ACL_VERSION 1 | 1896 | #define CIFS_ACL_VERSION 1 |
@@ -1891,7 +1898,7 @@ struct cifs_posix_ace { /* access control entry (ACE) */ | |||
1891 | __u8 cifs_e_tag; | 1898 | __u8 cifs_e_tag; |
1892 | __u8 cifs_e_perm; | 1899 | __u8 cifs_e_perm; |
1893 | __le64 cifs_uid; /* or gid */ | 1900 | __le64 cifs_uid; /* or gid */ |
1894 | }; | 1901 | } __attribute__((packed)); |
1895 | 1902 | ||
1896 | struct cifs_posix_acl { /* access conrol list (ACL) */ | 1903 | struct cifs_posix_acl { /* access conrol list (ACL) */ |
1897 | __le16 version; | 1904 | __le16 version; |
@@ -1900,7 +1907,7 @@ struct cifs_posix_acl { /* access conrol list (ACL) */ | |||
1900 | struct cifs_posix_ace ace_array[0]; | 1907 | struct cifs_posix_ace ace_array[0]; |
1901 | /* followed by | 1908 | /* followed by |
1902 | struct cifs_posix_ace default_ace_arraay[] */ | 1909 | struct cifs_posix_ace default_ace_arraay[] */ |
1903 | }; /* level 0x204 */ | 1910 | } __attribute__((packed)); /* level 0x204 */ |
1904 | 1911 | ||
1905 | /* types of access control entries already defined in posix_acl.h */ | 1912 | /* types of access control entries already defined in posix_acl.h */ |
1906 | /* #define CIFS_POSIX_ACL_USER_OBJ 0x01 | 1913 | /* #define CIFS_POSIX_ACL_USER_OBJ 0x01 |
@@ -1919,15 +1926,15 @@ struct cifs_posix_acl { /* access conrol list (ACL) */ | |||
1919 | 1926 | ||
1920 | struct file_internal_info { | 1927 | struct file_internal_info { |
1921 | __u64 UniqueId; /* inode number */ | 1928 | __u64 UniqueId; /* inode number */ |
1922 | }; /* level 0x3ee */ | 1929 | } __attribute__((packed)); /* level 0x3ee */ |
1923 | struct file_mode_info { | 1930 | struct file_mode_info { |
1924 | __le32 Mode; | 1931 | __le32 Mode; |
1925 | }; /* level 0x3f8 */ | 1932 | } __attribute__((packed)); /* level 0x3f8 */ |
1926 | 1933 | ||
1927 | struct file_attrib_tag { | 1934 | struct file_attrib_tag { |
1928 | __le32 Attribute; | 1935 | __le32 Attribute; |
1929 | __le32 ReparseTag; | 1936 | __le32 ReparseTag; |
1930 | }; /* level 0x40b */ | 1937 | } __attribute__((packed)); /* level 0x40b */ |
1931 | 1938 | ||
1932 | 1939 | ||
1933 | /********************************************************/ | 1940 | /********************************************************/ |
@@ -1951,7 +1958,7 @@ typedef struct { | |||
1951 | __le64 Permissions; | 1958 | __le64 Permissions; |
1952 | __le64 Nlinks; | 1959 | __le64 Nlinks; |
1953 | char FileName[1]; | 1960 | char FileName[1]; |
1954 | } FILE_UNIX_INFO; /* level 0x202 */ | 1961 | } __attribute__((packed)) FILE_UNIX_INFO; /* level 0x202 */ |
1955 | 1962 | ||
1956 | typedef struct { | 1963 | typedef struct { |
1957 | __le32 NextEntryOffset; | 1964 | __le32 NextEntryOffset; |
@@ -1965,7 +1972,7 @@ typedef struct { | |||
1965 | __le32 ExtFileAttributes; | 1972 | __le32 ExtFileAttributes; |
1966 | __le32 FileNameLength; | 1973 | __le32 FileNameLength; |
1967 | char FileName[1]; | 1974 | char FileName[1]; |
1968 | } FILE_DIRECTORY_INFO; /* level 0x101 FF response data area */ | 1975 | } __attribute__((packed)) FILE_DIRECTORY_INFO; /* level 0x101 FF response data area */ |
1969 | 1976 | ||
1970 | typedef struct { | 1977 | typedef struct { |
1971 | __le32 NextEntryOffset; | 1978 | __le32 NextEntryOffset; |
@@ -1980,7 +1987,7 @@ typedef struct { | |||
1980 | __le32 FileNameLength; | 1987 | __le32 FileNameLength; |
1981 | __le32 EaSize; /* length of the xattrs */ | 1988 | __le32 EaSize; /* length of the xattrs */ |
1982 | char FileName[1]; | 1989 | char FileName[1]; |
1983 | } FILE_FULL_DIRECTORY_INFO; /* level 0x102 FF response data area */ | 1990 | } __attribute__((packed)) FILE_FULL_DIRECTORY_INFO; /* level 0x102 FF response data area */ |
1984 | 1991 | ||
1985 | typedef struct { | 1992 | typedef struct { |
1986 | __le32 NextEntryOffset; | 1993 | __le32 NextEntryOffset; |
@@ -1997,7 +2004,7 @@ typedef struct { | |||
1997 | __le32 Reserved; | 2004 | __le32 Reserved; |
1998 | __u64 UniqueId; /* inode num - le since Samba puts ino in low 32 bit*/ | 2005 | __u64 UniqueId; /* inode num - le since Samba puts ino in low 32 bit*/ |
1999 | char FileName[1]; | 2006 | char FileName[1]; |
2000 | } SEARCH_ID_FULL_DIR_INFO; /* level 0x105 FF response data area */ | 2007 | } __attribute__((packed)) SEARCH_ID_FULL_DIR_INFO; /* level 0x105 FF response data area */ |
2001 | 2008 | ||
2002 | typedef struct { | 2009 | typedef struct { |
2003 | __le32 NextEntryOffset; | 2010 | __le32 NextEntryOffset; |
@@ -2015,18 +2022,18 @@ typedef struct { | |||
2015 | __u8 Reserved; | 2022 | __u8 Reserved; |
2016 | __u8 ShortName[12]; | 2023 | __u8 ShortName[12]; |
2017 | char FileName[1]; | 2024 | char FileName[1]; |
2018 | } FILE_BOTH_DIRECTORY_INFO; /* level 0x104 FF response data area */ | 2025 | } __attribute__((packed)) FILE_BOTH_DIRECTORY_INFO; /* level 0x104 FF response data area */ |
2019 | 2026 | ||
2020 | 2027 | ||
2021 | struct gea { | 2028 | struct gea { |
2022 | unsigned char name_len; | 2029 | unsigned char name_len; |
2023 | char name[1]; | 2030 | char name[1]; |
2024 | }; | 2031 | } __attribute__((packed)); |
2025 | 2032 | ||
2026 | struct gealist { | 2033 | struct gealist { |
2027 | unsigned long list_len; | 2034 | unsigned long list_len; |
2028 | struct gea list[1]; | 2035 | struct gea list[1]; |
2029 | }; | 2036 | } __attribute__((packed)); |
2030 | 2037 | ||
2031 | struct fea { | 2038 | struct fea { |
2032 | unsigned char EA_flags; | 2039 | unsigned char EA_flags; |
@@ -2034,21 +2041,21 @@ struct fea { | |||
2034 | __le16 value_len; | 2041 | __le16 value_len; |
2035 | char name[1]; | 2042 | char name[1]; |
2036 | /* optionally followed by value */ | 2043 | /* optionally followed by value */ |
2037 | }; | 2044 | } __attribute__((packed)); |
2038 | /* flags for _FEA.fEA */ | 2045 | /* flags for _FEA.fEA */ |
2039 | #define FEA_NEEDEA 0x80 /* need EA bit */ | 2046 | #define FEA_NEEDEA 0x80 /* need EA bit */ |
2040 | 2047 | ||
2041 | struct fealist { | 2048 | struct fealist { |
2042 | __le32 list_len; | 2049 | __le32 list_len; |
2043 | struct fea list[1]; | 2050 | struct fea list[1]; |
2044 | }; | 2051 | } __attribute__((packed)); |
2045 | 2052 | ||
2046 | /* used to hold an arbitrary blob of data */ | 2053 | /* used to hold an arbitrary blob of data */ |
2047 | struct data_blob { | 2054 | struct data_blob { |
2048 | __u8 *data; | 2055 | __u8 *data; |
2049 | size_t length; | 2056 | size_t length; |
2050 | void (*free) (struct data_blob * data_blob); | 2057 | void (*free) (struct data_blob * data_blob); |
2051 | }; | 2058 | } __attribute__((packed)); |
2052 | 2059 | ||
2053 | 2060 | ||
2054 | #ifdef CONFIG_CIFS_POSIX | 2061 | #ifdef CONFIG_CIFS_POSIX |
@@ -2151,7 +2158,7 @@ struct xsymlink { | |||
2151 | char cr2; /* \n */ | 2158 | char cr2; /* \n */ |
2152 | /* if room left, then end with \n then 0x20s by convention but not required */ | 2159 | /* if room left, then end with \n then 0x20s by convention but not required */ |
2153 | char path[1024]; | 2160 | char path[1024]; |
2154 | }; | 2161 | } __attribute__((packed)); |
2155 | 2162 | ||
2156 | typedef struct file_xattr_info { | 2163 | typedef struct file_xattr_info { |
2157 | /* BB do we need another field for flags? BB */ | 2164 | /* BB do we need another field for flags? BB */ |
@@ -2159,7 +2166,7 @@ typedef struct file_xattr_info { | |||
2159 | __u32 xattr_value_len; | 2166 | __u32 xattr_value_len; |
2160 | char xattr_name[0]; | 2167 | char xattr_name[0]; |
2161 | /* followed by xattr_value[xattr_value_len], no pad */ | 2168 | /* followed by xattr_value[xattr_value_len], no pad */ |
2162 | } FILE_XATTR_INFO; /* extended attribute, info level 0x205 */ | 2169 | } __attribute__((packed)) FILE_XATTR_INFO; /* extended attribute, info level 0x205 */ |
2163 | 2170 | ||
2164 | 2171 | ||
2165 | /* flags for chattr command */ | 2172 | /* flags for chattr command */ |
@@ -2185,10 +2192,8 @@ typedef struct file_xattr_info { | |||
2185 | typedef struct file_chattr_info { | 2192 | typedef struct file_chattr_info { |
2186 | __le64 mask; /* list of all possible attribute bits */ | 2193 | __le64 mask; /* list of all possible attribute bits */ |
2187 | __le64 mode; /* list of actual attribute bits on this inode */ | 2194 | __le64 mode; /* list of actual attribute bits on this inode */ |
2188 | } FILE_CHATTR_INFO; /* ext attributes (chattr, chflags) level 0x206 */ | 2195 | } __attribute__((packed)) FILE_CHATTR_INFO; /* ext attributes (chattr, chflags) level 0x206 */ |
2189 | 2196 | ||
2190 | #endif | 2197 | #endif |
2191 | 2198 | ||
2192 | #pragma pack() /* resume default structure packing */ | ||
2193 | |||
2194 | #endif /* _CIFSPDU_H */ | 2199 | #endif /* _CIFSPDU_H */ |