linux/fs/cifs/smb2pdu.h
<<
>>
Prefs
   1/*
   2 *   fs/cifs/smb2pdu.h
   3 *
   4 *   Copyright (c) International Business Machines  Corp., 2009, 2010
   5 *                 Etersoft, 2012
   6 *   Author(s): Steve French (sfrench@us.ibm.com)
   7 *              Pavel Shilovsky (pshilovsky@samba.org) 2012
   8 *
   9 *   This library is free software; you can redistribute it and/or modify
  10 *   it under the terms of the GNU Lesser General Public License as published
  11 *   by the Free Software Foundation; either version 2.1 of the License, or
  12 *   (at your option) any later version.
  13 *
  14 *   This library is distributed in the hope that it will be useful,
  15 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
  16 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
  17 *   the GNU Lesser General Public License for more details.
  18 *
  19 *   You should have received a copy of the GNU Lesser General Public License
  20 *   along with this library; if not, write to the Free Software
  21 *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  22 */
  23
  24#ifndef _SMB2PDU_H
  25#define _SMB2PDU_H
  26
  27#include <net/sock.h>
  28
  29/*
  30 * Note that, due to trying to use names similar to the protocol specifications,
  31 * there are many mixed case field names in the structures below.  Although
  32 * this does not match typical Linux kernel style, it is necessary to be
  33 * be able to match against the protocol specfication.
  34 *
  35 * SMB2 commands
  36 * Some commands have minimal (wct=0,bcc=0), or uninteresting, responses
  37 * (ie no useful data other than the SMB error code itself) and are marked such.
  38 * Knowing this helps avoid response buffer allocations and copy in some cases.
  39 */
  40
  41/* List of commands in host endian */
  42#define SMB2_NEGOTIATE_HE       0x0000
  43#define SMB2_SESSION_SETUP_HE   0x0001
  44#define SMB2_LOGOFF_HE          0x0002 /* trivial request/resp */
  45#define SMB2_TREE_CONNECT_HE    0x0003
  46#define SMB2_TREE_DISCONNECT_HE 0x0004 /* trivial req/resp */
  47#define SMB2_CREATE_HE          0x0005
  48#define SMB2_CLOSE_HE           0x0006
  49#define SMB2_FLUSH_HE           0x0007 /* trivial resp */
  50#define SMB2_READ_HE            0x0008
  51#define SMB2_WRITE_HE           0x0009
  52#define SMB2_LOCK_HE            0x000A
  53#define SMB2_IOCTL_HE           0x000B
  54#define SMB2_CANCEL_HE          0x000C
  55#define SMB2_ECHO_HE            0x000D
  56#define SMB2_QUERY_DIRECTORY_HE 0x000E
  57#define SMB2_CHANGE_NOTIFY_HE   0x000F
  58#define SMB2_QUERY_INFO_HE      0x0010
  59#define SMB2_SET_INFO_HE        0x0011
  60#define SMB2_OPLOCK_BREAK_HE    0x0012
  61
  62/* The same list in little endian */
  63#define SMB2_NEGOTIATE          cpu_to_le16(SMB2_NEGOTIATE_HE)
  64#define SMB2_SESSION_SETUP      cpu_to_le16(SMB2_SESSION_SETUP_HE)
  65#define SMB2_LOGOFF             cpu_to_le16(SMB2_LOGOFF_HE)
  66#define SMB2_TREE_CONNECT       cpu_to_le16(SMB2_TREE_CONNECT_HE)
  67#define SMB2_TREE_DISCONNECT    cpu_to_le16(SMB2_TREE_DISCONNECT_HE)
  68#define SMB2_CREATE             cpu_to_le16(SMB2_CREATE_HE)
  69#define SMB2_CLOSE              cpu_to_le16(SMB2_CLOSE_HE)
  70#define SMB2_FLUSH              cpu_to_le16(SMB2_FLUSH_HE)
  71#define SMB2_READ               cpu_to_le16(SMB2_READ_HE)
  72#define SMB2_WRITE              cpu_to_le16(SMB2_WRITE_HE)
  73#define SMB2_LOCK               cpu_to_le16(SMB2_LOCK_HE)
  74#define SMB2_IOCTL              cpu_to_le16(SMB2_IOCTL_HE)
  75#define SMB2_CANCEL             cpu_to_le16(SMB2_CANCEL_HE)
  76#define SMB2_ECHO               cpu_to_le16(SMB2_ECHO_HE)
  77#define SMB2_QUERY_DIRECTORY    cpu_to_le16(SMB2_QUERY_DIRECTORY_HE)
  78#define SMB2_CHANGE_NOTIFY      cpu_to_le16(SMB2_CHANGE_NOTIFY_HE)
  79#define SMB2_QUERY_INFO         cpu_to_le16(SMB2_QUERY_INFO_HE)
  80#define SMB2_SET_INFO           cpu_to_le16(SMB2_SET_INFO_HE)
  81#define SMB2_OPLOCK_BREAK       cpu_to_le16(SMB2_OPLOCK_BREAK_HE)
  82
  83#define NUMBER_OF_SMB2_COMMANDS 0x0013
  84
  85/* BB FIXME - analyze following length BB */
  86#define MAX_SMB2_HDR_SIZE 0x78 /* 4 len + 64 hdr + (2*24 wct) + 2 bct + 2 pad */
  87
  88#define SMB2_PROTO_NUMBER __constant_cpu_to_le32(0x424d53fe)
  89
  90/*
  91 * SMB2 Header Definition
  92 *
  93 * "MBZ" :  Must be Zero
  94 * "BB"  :  BugBug, Something to check/review/analyze later
  95 * "PDU" :  "Protocol Data Unit" (ie a network "frame")
  96 *
  97 */
  98
  99#define SMB2_HEADER_STRUCTURE_SIZE __constant_cpu_to_le16(64)
 100
 101struct smb2_hdr {
 102        __be32 smb2_buf_length; /* big endian on wire */
 103                                /* length is only two or three bytes - with
 104                                 one or two byte type preceding it that MBZ */
 105        __u8   ProtocolId[4];   /* 0xFE 'S' 'M' 'B' */
 106        __le16 StructureSize;   /* 64 */
 107        __le16 CreditCharge;    /* MBZ */
 108        __le32 Status;          /* Error from server */
 109        __le16 Command;
 110        __le16 CreditRequest;  /* CreditResponse */
 111        __le32 Flags;
 112        __le32 NextCommand;
 113        __u64  MessageId;       /* opaque - so can stay little endian */
 114        __le32 ProcessId;
 115        __u32  TreeId;          /* opaque - so do not make little endian */
 116        __u64  SessionId;       /* opaque - so do not make little endian */
 117        __u8   Signature[16];
 118} __packed;
 119
 120struct smb2_pdu {
 121        struct smb2_hdr hdr;
 122        __le16 StructureSize2; /* size of wct area (varies, request specific) */
 123} __packed;
 124
 125/*
 126 *      SMB2 flag definitions
 127 */
 128#define SMB2_FLAGS_SERVER_TO_REDIR      __constant_cpu_to_le32(0x00000001)
 129#define SMB2_FLAGS_ASYNC_COMMAND        __constant_cpu_to_le32(0x00000002)
 130#define SMB2_FLAGS_RELATED_OPERATIONS   __constant_cpu_to_le32(0x00000004)
 131#define SMB2_FLAGS_SIGNED               __constant_cpu_to_le32(0x00000008)
 132#define SMB2_FLAGS_DFS_OPERATIONS       __constant_cpu_to_le32(0x10000000)
 133
 134/*
 135 *      Definitions for SMB2 Protocol Data Units (network frames)
 136 *
 137 *  See MS-SMB2.PDF specification for protocol details.
 138 *  The Naming convention is the lower case version of the SMB2
 139 *  command code name for the struct. Note that structures must be packed.
 140 *
 141 */
 142
 143#define SMB2_ERROR_STRUCTURE_SIZE2 __constant_cpu_to_le16(9)
 144
 145struct smb2_err_rsp {
 146        struct smb2_hdr hdr;
 147        __le16 StructureSize;
 148        __le16 Reserved; /* MBZ */
 149        __le32 ByteCount;  /* even if zero, at least one byte follows */
 150        __u8   ErrorData[1];  /* variable length */
 151} __packed;
 152
 153struct smb2_negotiate_req {
 154        struct smb2_hdr hdr;
 155        __le16 StructureSize; /* Must be 36 */
 156        __le16 DialectCount;
 157        __le16 SecurityMode;
 158        __le16 Reserved;        /* MBZ */
 159        __le32 Capabilities;
 160        __u8   ClientGUID[16];  /* MBZ */
 161        __le64 ClientStartTime; /* MBZ */
 162        __le16 Dialects[2]; /* variable length */
 163} __packed;
 164
 165/* SecurityMode flags */
 166#define SMB2_NEGOTIATE_SIGNING_ENABLED  0x0001
 167#define SMB2_NEGOTIATE_SIGNING_REQUIRED 0x0002
 168/* Capabilities flags */
 169#define SMB2_GLOBAL_CAP_DFS             0x00000001
 170#define SMB2_GLOBAL_CAP_LEASING         0x00000002 /* Resp only New to SMB2.1 */
 171#define SMB2_GLOBAL_CAP_LARGE_MTU       0X00000004 /* Resp only New to SMB2.1 */
 172/* Internal types */
 173#define SMB2_NT_FIND                    0x00100000
 174#define SMB2_LARGE_FILES                0x00200000
 175
 176struct smb2_negotiate_rsp {
 177        struct smb2_hdr hdr;
 178        __le16 StructureSize;   /* Must be 65 */
 179        __le16 SecurityMode;
 180        __le16 DialectRevision;
 181        __le16 Reserved;        /* MBZ */
 182        __u8   ServerGUID[16];
 183        __le32 Capabilities;
 184        __le32 MaxTransactSize;
 185        __le32 MaxReadSize;
 186        __le32 MaxWriteSize;
 187        __le64 SystemTime;      /* MBZ */
 188        __le64 ServerStartTime;
 189        __le16 SecurityBufferOffset;
 190        __le16 SecurityBufferLength;
 191        __le32 Reserved2;       /* may be any value, ignore */
 192        __u8   Buffer[1];       /* variable length GSS security buffer */
 193} __packed;
 194
 195struct smb2_sess_setup_req {
 196        struct smb2_hdr hdr;
 197        __le16 StructureSize; /* Must be 25 */
 198        __u8   VcNumber;
 199        __u8   SecurityMode;
 200        __le32 Capabilities;
 201        __le32 Channel;
 202        __le16 SecurityBufferOffset;
 203        __le16 SecurityBufferLength;
 204        __le64 PreviousSessionId;
 205        __u8   Buffer[1];       /* variable length GSS security buffer */
 206} __packed;
 207
 208/* Currently defined SessionFlags */
 209#define SMB2_SESSION_FLAG_IS_GUEST      0x0001
 210#define SMB2_SESSION_FLAG_IS_NULL       0x0002
 211struct smb2_sess_setup_rsp {
 212        struct smb2_hdr hdr;
 213        __le16 StructureSize; /* Must be 9 */
 214        __le16 SessionFlags;
 215        __le16 SecurityBufferOffset;
 216        __le16 SecurityBufferLength;
 217        __u8   Buffer[1];       /* variable length GSS security buffer */
 218} __packed;
 219
 220struct smb2_logoff_req {
 221        struct smb2_hdr hdr;
 222        __le16 StructureSize;   /* Must be 4 */
 223        __le16 Reserved;
 224} __packed;
 225
 226struct smb2_logoff_rsp {
 227        struct smb2_hdr hdr;
 228        __le16 StructureSize;   /* Must be 4 */
 229        __le16 Reserved;
 230} __packed;
 231
 232struct smb2_tree_connect_req {
 233        struct smb2_hdr hdr;
 234        __le16 StructureSize;   /* Must be 9 */
 235        __le16 Reserved;
 236        __le16 PathOffset;
 237        __le16 PathLength;
 238        __u8   Buffer[1];       /* variable length */
 239} __packed;
 240
 241struct smb2_tree_connect_rsp {
 242        struct smb2_hdr hdr;
 243        __le16 StructureSize;   /* Must be 16 */
 244        __u8   ShareType;  /* see below */
 245        __u8   Reserved;
 246        __le32 ShareFlags; /* see below */
 247        __le32 Capabilities; /* see below */
 248        __le32 MaximalAccess;
 249} __packed;
 250
 251/* Possible ShareType values */
 252#define SMB2_SHARE_TYPE_DISK    0x01
 253#define SMB2_SHARE_TYPE_PIPE    0x02
 254#define SMB2_SHARE_TYPE_PRINT   0x03
 255
 256/*
 257 * Possible ShareFlags - exactly one and only one of the first 4 caching flags
 258 * must be set (any of the remaining, SHI1005, flags may be set individually
 259 * or in combination.
 260 */
 261#define SMB2_SHAREFLAG_MANUAL_CACHING                   0x00000000
 262#define SMB2_SHAREFLAG_AUTO_CACHING                     0x00000010
 263#define SMB2_SHAREFLAG_VDO_CACHING                      0x00000020
 264#define SMB2_SHAREFLAG_NO_CACHING                       0x00000030
 265#define SHI1005_FLAGS_DFS                               0x00000001
 266#define SHI1005_FLAGS_DFS_ROOT                          0x00000002
 267#define SHI1005_FLAGS_RESTRICT_EXCLUSIVE_OPENS          0x00000100
 268#define SHI1005_FLAGS_FORCE_SHARED_DELETE               0x00000200
 269#define SHI1005_FLAGS_ALLOW_NAMESPACE_CACHING           0x00000400
 270#define SHI1005_FLAGS_ACCESS_BASED_DIRECTORY_ENUM       0x00000800
 271#define SHI1005_FLAGS_FORCE_LEVELII_OPLOCK              0x00001000
 272#define SHI1005_FLAGS_ENABLE_HASH                       0x00002000
 273
 274/* Possible share capabilities */
 275#define SMB2_SHARE_CAP_DFS      cpu_to_le32(0x00000008)
 276
 277struct smb2_tree_disconnect_req {
 278        struct smb2_hdr hdr;
 279        __le16 StructureSize;   /* Must be 4 */
 280        __le16 Reserved;
 281} __packed;
 282
 283struct smb2_tree_disconnect_rsp {
 284        struct smb2_hdr hdr;
 285        __le16 StructureSize;   /* Must be 4 */
 286        __le16 Reserved;
 287} __packed;
 288
 289/* File Attrubutes */
 290#define FILE_ATTRIBUTE_READONLY                 0x00000001
 291#define FILE_ATTRIBUTE_HIDDEN                   0x00000002
 292#define FILE_ATTRIBUTE_SYSTEM                   0x00000004
 293#define FILE_ATTRIBUTE_DIRECTORY                0x00000010
 294#define FILE_ATTRIBUTE_ARCHIVE                  0x00000020
 295#define FILE_ATTRIBUTE_NORMAL                   0x00000080
 296#define FILE_ATTRIBUTE_TEMPORARY                0x00000100
 297#define FILE_ATTRIBUTE_SPARSE_FILE              0x00000200
 298#define FILE_ATTRIBUTE_REPARSE_POINT            0x00000400
 299#define FILE_ATTRIBUTE_COMPRESSED               0x00000800
 300#define FILE_ATTRIBUTE_OFFLINE                  0x00001000
 301#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED      0x00002000
 302#define FILE_ATTRIBUTE_ENCRYPTED                0x00004000
 303
 304/* Oplock levels */
 305#define SMB2_OPLOCK_LEVEL_NONE          0x00
 306#define SMB2_OPLOCK_LEVEL_II            0x01
 307#define SMB2_OPLOCK_LEVEL_EXCLUSIVE     0x08
 308#define SMB2_OPLOCK_LEVEL_BATCH         0x09
 309#define SMB2_OPLOCK_LEVEL_LEASE         0xFF
 310
 311/* Desired Access Flags */
 312#define FILE_READ_DATA_LE               cpu_to_le32(0x00000001)
 313#define FILE_WRITE_DATA_LE              cpu_to_le32(0x00000002)
 314#define FILE_APPEND_DATA_LE             cpu_to_le32(0x00000004)
 315#define FILE_READ_EA_LE                 cpu_to_le32(0x00000008)
 316#define FILE_WRITE_EA_LE                cpu_to_le32(0x00000010)
 317#define FILE_EXECUTE_LE                 cpu_to_le32(0x00000020)
 318#define FILE_READ_ATTRIBUTES_LE         cpu_to_le32(0x00000080)
 319#define FILE_WRITE_ATTRIBUTES_LE        cpu_to_le32(0x00000100)
 320#define FILE_DELETE_LE                  cpu_to_le32(0x00010000)
 321#define FILE_READ_CONTROL_LE            cpu_to_le32(0x00020000)
 322#define FILE_WRITE_DAC_LE               cpu_to_le32(0x00040000)
 323#define FILE_WRITE_OWNER_LE             cpu_to_le32(0x00080000)
 324#define FILE_SYNCHRONIZE_LE             cpu_to_le32(0x00100000)
 325#define FILE_ACCESS_SYSTEM_SECURITY_LE  cpu_to_le32(0x01000000)
 326#define FILE_MAXIMAL_ACCESS_LE          cpu_to_le32(0x02000000)
 327#define FILE_GENERIC_ALL_LE             cpu_to_le32(0x10000000)
 328#define FILE_GENERIC_EXECUTE_LE         cpu_to_le32(0x20000000)
 329#define FILE_GENERIC_WRITE_LE           cpu_to_le32(0x40000000)
 330#define FILE_GENERIC_READ_LE            cpu_to_le32(0x80000000)
 331
 332/* ShareAccess Flags */
 333#define FILE_SHARE_READ_LE              cpu_to_le32(0x00000001)
 334#define FILE_SHARE_WRITE_LE             cpu_to_le32(0x00000002)
 335#define FILE_SHARE_DELETE_LE            cpu_to_le32(0x00000004)
 336#define FILE_SHARE_ALL_LE               cpu_to_le32(0x00000007)
 337
 338/* CreateDisposition Flags */
 339#define FILE_SUPERSEDE_LE               cpu_to_le32(0x00000000)
 340#define FILE_OPEN_LE                    cpu_to_le32(0x00000001)
 341#define FILE_CREATE_LE                  cpu_to_le32(0x00000002)
 342#define FILE_OPEN_IF_LE                 cpu_to_le32(0x00000003)
 343#define FILE_OVERWRITE_LE               cpu_to_le32(0x00000004)
 344#define FILE_OVERWRITE_IF_LE            cpu_to_le32(0x00000005)
 345
 346/* CreateOptions Flags */
 347#define FILE_DIRECTORY_FILE_LE          cpu_to_le32(0x00000001)
 348/* same as #define CREATE_NOT_FILE_LE   cpu_to_le32(0x00000001) */
 349#define FILE_WRITE_THROUGH_LE           cpu_to_le32(0x00000002)
 350#define FILE_SEQUENTIAL_ONLY_LE         cpu_to_le32(0x00000004)
 351#define FILE_NO_INTERMEDIATE_BUFFERRING_LE cpu_to_le32(0x00000008)
 352#define FILE_SYNCHRONOUS_IO_ALERT_LE    cpu_to_le32(0x00000010)
 353#define FILE_SYNCHRONOUS_IO_NON_ALERT_LE        cpu_to_le32(0x00000020)
 354#define FILE_NON_DIRECTORY_FILE_LE      cpu_to_le32(0x00000040)
 355#define FILE_COMPLETE_IF_OPLOCKED_LE    cpu_to_le32(0x00000100)
 356#define FILE_NO_EA_KNOWLEDGE_LE         cpu_to_le32(0x00000200)
 357#define FILE_RANDOM_ACCESS_LE           cpu_to_le32(0x00000800)
 358#define FILE_DELETE_ON_CLOSE_LE         cpu_to_le32(0x00001000)
 359#define FILE_OPEN_BY_FILE_ID_LE         cpu_to_le32(0x00002000)
 360#define FILE_OPEN_FOR_BACKUP_INTENT_LE  cpu_to_le32(0x00004000)
 361#define FILE_NO_COMPRESSION_LE          cpu_to_le32(0x00008000)
 362#define FILE_RESERVE_OPFILTER_LE        cpu_to_le32(0x00100000)
 363#define FILE_OPEN_REPARSE_POINT_LE      cpu_to_le32(0x00200000)
 364#define FILE_OPEN_NO_RECALL_LE          cpu_to_le32(0x00400000)
 365#define FILE_OPEN_FOR_FREE_SPACE_QUERY_LE cpu_to_le32(0x00800000)
 366
 367#define FILE_READ_RIGHTS_LE (FILE_READ_DATA_LE | FILE_READ_EA_LE \
 368                        | FILE_READ_ATTRIBUTES_LE)
 369#define FILE_WRITE_RIGHTS_LE (FILE_WRITE_DATA_LE | FILE_APPEND_DATA_LE \
 370                        | FILE_WRITE_EA_LE | FILE_WRITE_ATTRIBUTES_LE)
 371#define FILE_EXEC_RIGHTS_LE (FILE_EXECUTE_LE)
 372
 373/* Impersonation Levels */
 374#define IL_ANONYMOUS            cpu_to_le32(0x00000000)
 375#define IL_IDENTIFICATION       cpu_to_le32(0x00000001)
 376#define IL_IMPERSONATION        cpu_to_le32(0x00000002)
 377#define IL_DELEGATE             cpu_to_le32(0x00000003)
 378
 379/* Create Context Values */
 380#define SMB2_CREATE_EA_BUFFER                   "ExtA" /* extended attributes */
 381#define SMB2_CREATE_SD_BUFFER                   "SecD" /* security descriptor */
 382#define SMB2_CREATE_DURABLE_HANDLE_REQUEST      "DHnQ"
 383#define SMB2_CREATE_DURABLE_HANDLE_RECONNECT    "DHnC"
 384#define SMB2_CREATE_ALLOCATION_SIZE             "AlSi"
 385#define SMB2_CREATE_QUERY_MAXIMAL_ACCESS_REQUEST "MxAc"
 386#define SMB2_CREATE_TIMEWARP_REQUEST            "TWrp"
 387#define SMB2_CREATE_QUERY_ON_DISK_ID            "QFid"
 388#define SMB2_CREATE_REQUEST_LEASE               "RqLs"
 389
 390struct smb2_create_req {
 391        struct smb2_hdr hdr;
 392        __le16 StructureSize;   /* Must be 57 */
 393        __u8   SecurityFlags;
 394        __u8   RequestedOplockLevel;
 395        __le32 ImpersonationLevel;
 396        __le64 SmbCreateFlags;
 397        __le64 Reserved;
 398        __le32 DesiredAccess;
 399        __le32 FileAttributes;
 400        __le32 ShareAccess;
 401        __le32 CreateDisposition;
 402        __le32 CreateOptions;
 403        __le16 NameOffset;
 404        __le16 NameLength;
 405        __le32 CreateContextsOffset;
 406        __le32 CreateContextsLength;
 407        __u8   Buffer[1];
 408} __packed;
 409
 410struct smb2_create_rsp {
 411        struct smb2_hdr hdr;
 412        __le16 StructureSize;   /* Must be 89 */
 413        __u8   OplockLevel;
 414        __u8   Reserved;
 415        __le32 CreateAction;
 416        __le64 CreationTime;
 417        __le64 LastAccessTime;
 418        __le64 LastWriteTime;
 419        __le64 ChangeTime;
 420        __le64 AllocationSize;
 421        __le64 EndofFile;
 422        __le32 FileAttributes;
 423        __le32 Reserved2;
 424        __u64  PersistentFileId; /* opaque endianness */
 425        __u64  VolatileFileId; /* opaque endianness */
 426        __le32 CreateContextsOffset;
 427        __le32 CreateContextsLength;
 428        __u8   Buffer[1];
 429} __packed;
 430
 431/* Currently defined values for close flags */
 432#define SMB2_CLOSE_FLAG_POSTQUERY_ATTRIB        cpu_to_le16(0x0001)
 433struct smb2_close_req {
 434        struct smb2_hdr hdr;
 435        __le16 StructureSize;   /* Must be 24 */
 436        __le16 Flags;
 437        __le32 Reserved;
 438        __u64  PersistentFileId; /* opaque endianness */
 439        __u64  VolatileFileId; /* opaque endianness */
 440} __packed;
 441
 442struct smb2_close_rsp {
 443        struct smb2_hdr hdr;
 444        __le16 StructureSize; /* 60 */
 445        __le16 Flags;
 446        __le32 Reserved;
 447        __le64 CreationTime;
 448        __le64 LastAccessTime;
 449        __le64 LastWriteTime;
 450        __le64 ChangeTime;
 451        __le64 AllocationSize;  /* Beginning of FILE_STANDARD_INFO equivalent */
 452        __le64 EndOfFile;
 453        __le32 Attributes;
 454} __packed;
 455
 456struct smb2_echo_req {
 457        struct smb2_hdr hdr;
 458        __le16 StructureSize;   /* Must be 4 */
 459        __u16  Reserved;
 460} __packed;
 461
 462struct smb2_echo_rsp {
 463        struct smb2_hdr hdr;
 464        __le16 StructureSize;   /* Must be 4 */
 465        __u16  Reserved;
 466} __packed;
 467
 468/* Possible InfoType values */
 469#define SMB2_O_INFO_FILE        0x01
 470#define SMB2_O_INFO_FILESYSTEM  0x02
 471#define SMB2_O_INFO_SECURITY    0x03
 472#define SMB2_O_INFO_QUOTA       0x04
 473
 474struct smb2_query_info_req {
 475        struct smb2_hdr hdr;
 476        __le16 StructureSize; /* Must be 41 */
 477        __u8   InfoType;
 478        __u8   FileInfoClass;
 479        __le32 OutputBufferLength;
 480        __le16 InputBufferOffset;
 481        __u16  Reserved;
 482        __le32 InputBufferLength;
 483        __le32 AdditionalInformation;
 484        __le32 Flags;
 485        __u64  PersistentFileId; /* opaque endianness */
 486        __u64  VolatileFileId; /* opaque endianness */
 487        __u8   Buffer[1];
 488} __packed;
 489
 490struct smb2_query_info_rsp {
 491        struct smb2_hdr hdr;
 492        __le16 StructureSize; /* Must be 9 */
 493        __le16 OutputBufferOffset;
 494        __le32 OutputBufferLength;
 495        __u8   Buffer[1];
 496} __packed;
 497
 498/*
 499 *      PDU infolevel structure definitions
 500 *      BB consider moving to a different header
 501 */
 502
 503/* partial list of QUERY INFO levels */
 504#define FILE_DIRECTORY_INFORMATION      1
 505#define FILE_FULL_DIRECTORY_INFORMATION 2
 506#define FILE_BOTH_DIRECTORY_INFORMATION 3
 507#define FILE_BASIC_INFORMATION          4
 508#define FILE_STANDARD_INFORMATION       5
 509#define FILE_INTERNAL_INFORMATION       6
 510#define FILE_EA_INFORMATION             7
 511#define FILE_ACCESS_INFORMATION         8
 512#define FILE_NAME_INFORMATION           9
 513#define FILE_RENAME_INFORMATION         10
 514#define FILE_LINK_INFORMATION           11
 515#define FILE_NAMES_INFORMATION          12
 516#define FILE_DISPOSITION_INFORMATION    13
 517#define FILE_POSITION_INFORMATION       14
 518#define FILE_FULL_EA_INFORMATION        15
 519#define FILE_MODE_INFORMATION           16
 520#define FILE_ALIGNMENT_INFORMATION      17
 521#define FILE_ALL_INFORMATION            18
 522#define FILE_ALLOCATION_INFORMATION     19
 523#define FILE_END_OF_FILE_INFORMATION    20
 524#define FILE_ALTERNATE_NAME_INFORMATION 21
 525#define FILE_STREAM_INFORMATION         22
 526#define FILE_PIPE_INFORMATION           23
 527#define FILE_PIPE_LOCAL_INFORMATION     24
 528#define FILE_PIPE_REMOTE_INFORMATION    25
 529#define FILE_MAILSLOT_QUERY_INFORMATION 26
 530#define FILE_MAILSLOT_SET_INFORMATION   27
 531#define FILE_COMPRESSION_INFORMATION    28
 532#define FILE_OBJECT_ID_INFORMATION      29
 533/* Number 30 not defined in documents */
 534#define FILE_MOVE_CLUSTER_INFORMATION   31
 535#define FILE_QUOTA_INFORMATION          32
 536#define FILE_REPARSE_POINT_INFORMATION  33
 537#define FILE_NETWORK_OPEN_INFORMATION   34
 538#define FILE_ATTRIBUTE_TAG_INFORMATION  35
 539#define FILE_TRACKING_INFORMATION       36
 540#define FILEID_BOTH_DIRECTORY_INFORMATION 37
 541#define FILEID_FULL_DIRECTORY_INFORMATION 38
 542#define FILE_VALID_DATA_LENGTH_INFORMATION 39
 543#define FILE_SHORT_NAME_INFORMATION     40
 544#define FILE_SFIO_RESERVE_INFORMATION   44
 545#define FILE_SFIO_VOLUME_INFORMATION    45
 546#define FILE_HARD_LINK_INFORMATION      46
 547#define FILE_NORMALIZED_NAME_INFORMATION 48
 548#define FILEID_GLOBAL_TX_DIRECTORY_INFORMATION 50
 549#define FILE_STANDARD_LINK_INFORMATION  54
 550
 551/*
 552 * This level 18, although with struct with same name is different from cifs
 553 * level 0x107. Level 0x107 has an extra u64 between AccessFlags and
 554 * CurrentByteOffset.
 555 */
 556struct smb2_file_all_info { /* data block encoding of response to level 18 */
 557        __le64 CreationTime;    /* Beginning of FILE_BASIC_INFO equivalent */
 558        __le64 LastAccessTime;
 559        __le64 LastWriteTime;
 560        __le64 ChangeTime;
 561        __le32 Attributes;
 562        __u32  Pad1;            /* End of FILE_BASIC_INFO_INFO equivalent */
 563        __le64 AllocationSize;  /* Beginning of FILE_STANDARD_INFO equivalent */
 564        __le64 EndOfFile;       /* size ie offset to first free byte in file */
 565        __le32 NumberOfLinks;   /* hard links */
 566        __u8   DeletePending;
 567        __u8   Directory;
 568        __u16  Pad2;            /* End of FILE_STANDARD_INFO equivalent */
 569        __le64 IndexNumber;
 570        __le32 EASize;
 571        __le32 AccessFlags;
 572        __le64 CurrentByteOffset;
 573        __le32 Mode;
 574        __le32 AlignmentRequirement;
 575        __le32 FileNameLength;
 576        char   FileName[1];
 577} __packed; /* level 18 Query */
 578
 579#endif                          /* _SMB2PDU_H */
 580
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.