aboutsummaryrefslogtreecommitdiffstats
path: root/fs/cifs/cifspdu.h
diff options
context:
space:
mode:
Diffstat (limited to 'fs/cifs/cifspdu.h')
-rw-r--r--fs/cifs/cifspdu.h343
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
314struct smb_hdr { 315struct 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
396typedef struct negotiate_rsp { 399typedef 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
565typedef struct smb_com_tconx_rsp { 571typedef 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
583typedef struct smb_com_logoff_andx_req { 590typedef 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
591typedef struct smb_com_logoff_andx_rsp { 598typedef 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
599typedef union smb_com_tree_disconnect { /* as an altetnative can use flag on tree_connect PDU to effect disconnect *//* probably the simplest SMB PDU */ 606typedef 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
610typedef struct smb_com_close_req { 617typedef 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
617typedef struct smb_com_close_rsp { 624typedef 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
622typedef struct smb_com_findclose_req { 629typedef 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 */
686typedef struct smb_com_openx_req { 693typedef 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
704typedef struct smb_com_openx_rsp { 711typedef 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 */
723typedef struct smb_com_writex_req { 730typedef 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
741typedef struct smb_com_write_req { 748typedef 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
760typedef struct smb_com_write_rsp { 767typedef 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 */
773typedef struct smb_com_readx_req { 780typedef 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
787typedef struct smb_com_read_req { 794typedef 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
802typedef struct smb_com_read_rsp { 809typedef 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
819typedef struct locking_andx_range { 826typedef 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
850typedef struct cifs_posix_lock { 857typedef 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
859typedef struct smb_com_lock_rsp { 866typedef 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
867typedef struct smb_com_rename_req { 874typedef 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
897typedef struct smb_com_copy_rsp { 904typedef 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
921typedef struct smb_com_rename_rsp { 928typedef 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
926typedef struct smb_com_delete_file_req { 933typedef 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
934typedef struct smb_com_delete_file_rsp { 941typedef 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
939typedef struct smb_com_delete_directory_req { 946typedef 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
946typedef struct smb_com_delete_directory_rsp { 953typedef 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
951typedef struct smb_com_create_directory_req { 958typedef 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
958typedef struct smb_com_create_directory_rsp { 965typedef 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
963typedef struct smb_com_query_information_req { 970typedef 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
970typedef struct smb_com_query_information_rsp { 977typedef 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
979typedef struct smb_com_setattr_req { 986typedef 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
990typedef struct smb_com_setattr_rsp { 997typedef 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
1025typedef struct smb_com_transaction_ioctl_rsp { 1032typedef 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
1042typedef struct smb_com_transaction_change_notify_req { 1049typedef 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
1066typedef struct smb_com_transaction_change_notify_rsp { 1073typedef 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
1113struct reparse_data { 1120struct 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
1124struct cifs_quota_data { 1131struct 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
1160struct smb_t2_req { 1167struct 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
1165struct trans2_resp { 1172struct 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
1184struct smb_t2_rsp { 1191struct 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
1276typedef struct smb_com_transaction2_qpi_rsp { 1283typedef 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
1283typedef struct smb_com_transaction2_spi_req { 1290typedef 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
1309typedef struct smb_com_transaction2_spi_rsp { 1316typedef 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
1316struct set_file_rename { 1323struct 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
1323struct smb_com_transaction2_sfi_req { 1330struct 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
1349struct smb_com_transaction2_sfi_rsp { 1356struct 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
1357struct smb_t2_qfi_req { 1364struct 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
1365struct smb_t2_qfi_rsp { 1372struct 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
1415typedef struct smb_com_transaction2_ffirst_rsp { 1422typedef 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
1421typedef struct smb_com_transaction2_ffirst_rsp_parms { 1428typedef 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
1429typedef struct smb_com_transaction2_fnext_req { 1436typedef 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
1457typedef struct smb_com_transaction2_fnext_rsp { 1464typedef 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
1463typedef struct smb_com_transaction2_fnext_rsp_parms { 1470typedef 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
1507typedef struct smb_com_transaction_qfsi_rsp { 1514typedef 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
1544typedef struct smb_com_transaction2_setfsi_rsp { 1551typedef 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
1551typedef struct smb_com_transaction2_get_dfs_refer_req { 1558typedef 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
1575typedef struct dfs_referral_level_3 { 1582typedef 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
1587typedef struct smb_com_transaction_get_dfs_refer_rsp { 1594typedef 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
1666struct aliasInfo { 1673struct 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
1673struct aliasInfo92 { 1680struct 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
1679typedef struct { 1686typedef 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
1686typedef struct { 1693typedef 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
1694typedef struct { 1701typedef 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 {
1755typedef struct { 1762typedef 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
1760typedef struct { 1767typedef 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
1818typedef struct { 1825typedef 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
1831typedef struct { 1838typedef 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
1837typedef struct { 1844typedef 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
1850typedef struct { 1857typedef 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
1859struct file_allocation_info { 1866struct 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
1863struct file_end_of_file_info { 1870struct 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
1867struct file_alt_name_info { 1874struct file_alt_name_info {
1868 __u8 alt_name[1]; 1875 __u8 alt_name[1];
1869}; /* level 0x0108 */ 1876} __attribute__((packed)); /* level 0x0108 */
1870 1877
1871struct file_stream_info { 1878struct 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
1896struct cifs_posix_acl { /* access conrol list (ACL) */ 1903struct 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
1920struct file_internal_info { 1927struct file_internal_info {
1921 __u64 UniqueId; /* inode number */ 1928 __u64 UniqueId; /* inode number */
1922}; /* level 0x3ee */ 1929} __attribute__((packed)); /* level 0x3ee */
1923struct file_mode_info { 1930struct file_mode_info {
1924 __le32 Mode; 1931 __le32 Mode;
1925}; /* level 0x3f8 */ 1932} __attribute__((packed)); /* level 0x3f8 */
1926 1933
1927struct file_attrib_tag { 1934struct 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
1956typedef struct { 1963typedef 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
1970typedef struct { 1977typedef 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
1985typedef struct { 1992typedef 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
2002typedef struct { 2009typedef 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
2021struct gea { 2028struct 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
2026struct gealist { 2033struct 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
2031struct fea { 2038struct 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
2041struct fealist { 2048struct 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 */
2047struct data_blob { 2054struct 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
2156typedef struct file_xattr_info { 2163typedef 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 {
2185typedef struct file_chattr_info { 2192typedef 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 */