⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cifspdu.h

📁 Linux内核自带的cifs模块
💻 H
📖 第 1 页 / 共 5 页
字号:
/* *   fs/cifs/cifspdu.h * *   Copyright (c) International Business Machines  Corp., 2002,2007 *   Author(s): Steve French (sfrench@us.ibm.com) * *   This library is free software; you can redistribute it and/or modify *   it under the terms of the GNU Lesser General Public License as published *   by the Free Software Foundation; either version 2.1 of the License, or *   (at your option) any later version. * *   This library is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See *   the GNU Lesser General Public License for more details. * *   You should have received a copy of the GNU Lesser General Public License *   along with this library; if not, write to the Free Software *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */#ifndef _CIFSPDU_H#define _CIFSPDU_H#include <net/sock.h>#ifdef CONFIG_CIFS_WEAK_PW_HASH#define LANMAN_PROT 0#define LANMAN2_PROT 1#define CIFS_PROT   2#else#define CIFS_PROT   0#endif#define POSIX_PROT  CIFS_PROT+1#define BAD_PROT 0xFFFF/* SMB command codes *//* * Some commands have minimal (wct=0,bcc=0), or uninteresting, responses * (ie which include no useful data other than the SMB error code itself). * Knowing this helps avoid response buffer allocations and copy in some cases */#define SMB_COM_CREATE_DIRECTORY      0x00 /* trivial response */#define SMB_COM_DELETE_DIRECTORY      0x01 /* trivial response */#define SMB_COM_CLOSE                 0x04 /* triv req/rsp, timestamp ignored */#define SMB_COM_DELETE                0x06 /* trivial response */#define SMB_COM_RENAME                0x07 /* trivial response */#define SMB_COM_QUERY_INFORMATION     0x08 /* aka getattr */#define SMB_COM_SETATTR               0x09 /* trivial response */#define SMB_COM_LOCKING_ANDX          0x24 /* trivial response */#define SMB_COM_COPY                  0x29 /* trivial rsp, fail filename ignrd*/#define SMB_COM_OPEN_ANDX             0x2D /* Legacy open for old servers */#define SMB_COM_READ_ANDX             0x2E#define SMB_COM_WRITE_ANDX            0x2F#define SMB_COM_TRANSACTION2          0x32#define SMB_COM_TRANSACTION2_SECONDARY 0x33#define SMB_COM_FIND_CLOSE2           0x34 /* trivial response */#define SMB_COM_TREE_DISCONNECT       0x71 /* trivial response */#define SMB_COM_NEGOTIATE             0x72#define SMB_COM_SESSION_SETUP_ANDX    0x73#define SMB_COM_LOGOFF_ANDX           0x74 /* trivial response */#define SMB_COM_TREE_CONNECT_ANDX     0x75#define SMB_COM_NT_TRANSACT           0xA0#define SMB_COM_NT_TRANSACT_SECONDARY 0xA1#define SMB_COM_NT_CREATE_ANDX        0xA2#define SMB_COM_NT_CANCEL             0xA4 /* no response */#define SMB_COM_NT_RENAME             0xA5 /* trivial response *//* Transact2 subcommand codes */#define TRANS2_OPEN                   0x00#define TRANS2_FIND_FIRST             0x01#define TRANS2_FIND_NEXT              0x02#define TRANS2_QUERY_FS_INFORMATION   0x03#define TRANS2_SET_FS_INFORMATION     0x04#define TRANS2_QUERY_PATH_INFORMATION 0x05#define TRANS2_SET_PATH_INFORMATION   0x06#define TRANS2_QUERY_FILE_INFORMATION 0x07#define TRANS2_SET_FILE_INFORMATION   0x08#define TRANS2_GET_DFS_REFERRAL       0x10#define TRANS2_REPORT_DFS_INCOSISTENCY 0x11/* NT Transact subcommand codes */#define NT_TRANSACT_CREATE            0x01#define NT_TRANSACT_IOCTL             0x02#define NT_TRANSACT_SET_SECURITY_DESC 0x03#define NT_TRANSACT_NOTIFY_CHANGE     0x04#define NT_TRANSACT_RENAME            0x05#define NT_TRANSACT_QUERY_SECURITY_DESC 0x06#define NT_TRANSACT_GET_USER_QUOTA    0x07#define NT_TRANSACT_SET_USER_QUOTA    0x08#define MAX_CIFS_SMALL_BUFFER_SIZE 448 /* big enough for most *//* future chained NTCreateXReadX bigger, but for time being NTCreateX biggest *//* among the requests (NTCreateX response is bigger with wct of 34) */#define MAX_CIFS_HDR_SIZE 0x58 /* 4 len + 32 hdr + (2*24 wct) + 2 bct + 2 pad */#define CIFS_SMALL_PATH 120 /* allows for (448-88)/3 *//* internal cifs vfs structures *//***************************************************************** * All constants go here ***************************************************************** */#ifndef __le16#define __le16 __u16#define __le32 __u32#define __le64 __u64#define __be16 __u16#define __be32 __u32#define __be64 __u64#endif/* * Starting value for maximum SMB size negotiation */#define CIFS_MAX_MSGSIZE (4*4096)/* * Size of encrypted user password in bytes */#define CIFS_ENCPWD_SIZE (16)/* * Size of the crypto key returned on the negotiate SMB in bytes */#define CIFS_CRYPTO_KEY_SIZE (8)/* * Size of the session key (crypto key encrypted with the password */#define CIFS_SESS_KEY_SIZE (24)/* * Maximum user name length */#define CIFS_UNLEN (20)/* * Flags on SMB open */#define SMBOPEN_WRITE_THROUGH 0x4000#define SMBOPEN_DENY_ALL      0x0010#define SMBOPEN_DENY_WRITE    0x0020#define SMBOPEN_DENY_READ     0x0030#define SMBOPEN_DENY_NONE     0x0040#define SMBOPEN_READ          0x0000#define SMBOPEN_WRITE         0x0001#define SMBOPEN_READWRITE     0x0002#define SMBOPEN_EXECUTE       0x0003#define SMBOPEN_OCREATE       0x0010#define SMBOPEN_OTRUNC        0x0002#define SMBOPEN_OAPPEND       0x0001/* * SMB flag definitions */#define SMBFLG_EXTD_LOCK 0x01	/* server supports lock-read write-unlock smb */#define SMBFLG_RCV_POSTED 0x02	/* obsolete */#define SMBFLG_RSVD 0x04#define SMBFLG_CASELESS 0x08	/* all pathnames treated as caseless (off				implies case sensitive file handling request) */#define SMBFLG_CANONICAL_PATH_FORMAT 0x10	/* obsolete */#define SMBFLG_OLD_OPLOCK 0x20	/* obsolete */#define SMBFLG_OLD_OPLOCK_NOTIFY 0x40	/* obsolete */#define SMBFLG_RESPONSE 0x80	/* this PDU is a response from server *//* * SMB flag2 definitions */#define SMBFLG2_KNOWS_LONG_NAMES cpu_to_le16(1)	/* can send long (non-8.3)						   path names in response */#define SMBFLG2_KNOWS_EAS cpu_to_le16(2)#define SMBFLG2_SECURITY_SIGNATURE cpu_to_le16(4)#define SMBFLG2_IS_LONG_NAME cpu_to_le16(0x40)#define SMBFLG2_EXT_SEC cpu_to_le16(0x800)#define SMBFLG2_DFS cpu_to_le16(0x1000)#define SMBFLG2_PAGING_IO cpu_to_le16(0x2000)#define SMBFLG2_ERR_STATUS cpu_to_le16(0x4000)#define SMBFLG2_UNICODE cpu_to_le16(0x8000)/* * These are the file access permission bits defined in CIFS for the * NTCreateAndX as well as the level 0x107 * TRANS2_QUERY_PATH_INFORMATION API.  The level 0x107, SMB_QUERY_FILE_ALL_INFO * responds with the AccessFlags. * The AccessFlags specifies the access permissions a caller has to the * file and can have any suitable combination of the following values: */#define FILE_READ_DATA        0x00000001  /* Data can be read from the file   */#define FILE_WRITE_DATA       0x00000002  /* Data can be written to the file  */#define FILE_APPEND_DATA      0x00000004  /* Data can be appended to the file */#define FILE_READ_EA          0x00000008  /* Extended attributes associated   */					  /* with the file can be read        */#define FILE_WRITE_EA         0x00000010  /* Extended attributes associated   */					  /* with the file can be written     */#define FILE_EXECUTE          0x00000020  /*Data can be read into memory from */					  /* the file using system paging I/O */#define FILE_DELETE_CHILD     0x00000040#define FILE_READ_ATTRIBUTES  0x00000080  /* Attributes associated with the   */					  /* file can be read                 */#define FILE_WRITE_ATTRIBUTES 0x00000100  /* Attributes associated with the   */					  /* file can be written              */#define DELETE                0x00010000  /* The file can be deleted          */#define READ_CONTROL          0x00020000  /* The access control list and      */					  /* ownership associated with the    */					  /* file can be read                 */#define WRITE_DAC             0x00040000  /* The access control list and      */					  /* ownership associated with the    */					  /* file can be written.             */#define WRITE_OWNER           0x00080000  /* Ownership information associated */					  /* with the file can be written     */#define SYNCHRONIZE           0x00100000  /* The file handle can waited on to */					  /* synchronize with the completion  */					  /* of an input/output request       */#define GENERIC_ALL           0x10000000#define GENERIC_EXECUTE       0x20000000#define GENERIC_WRITE         0x40000000#define GENERIC_READ          0x80000000					 /* In summary - Relevant file       */					 /* access flags from CIFS are       */					 /* file_read_data, file_write_data  */					 /* file_execute, file_read_attributes*/					 /* write_dac, and delete.           *//* * Invalid readdir handle */#define CIFS_NO_HANDLE        0xFFFF#define NO_CHANGE_64          cpu_to_le64(0xFFFFFFFFFFFFFFFFULL)#define NO_CHANGE_32          0xFFFFFFFFUL/* IPC$ in ASCII */#define CIFS_IPC_RESOURCE "\x49\x50\x43\x24"/* IPC$ in Unicode */#define CIFS_IPC_UNICODE_RESOURCE "\x00\x49\x00\x50\x00\x43\x00\x24\x00\x00"/* Unicode Null terminate 2 bytes of 0 */#define UNICODE_NULL "\x00\x00"#define ASCII_NULL 0x00/* * Server type values (returned on EnumServer API */#define CIFS_SV_TYPE_DC     0x00000008#define CIFS_SV_TYPE_BACKDC 0x00000010/* * Alias type flags (From EnumAlias API call */#define CIFS_ALIAS_TYPE_FILE 0x0001#define CIFS_SHARE_TYPE_FILE 0x0000/* * File Attribute flags */#define ATTR_READONLY  0x0001#define ATTR_HIDDEN    0x0002#define ATTR_SYSTEM    0x0004#define ATTR_VOLUME    0x0008#define ATTR_DIRECTORY 0x0010#define ATTR_ARCHIVE   0x0020#define ATTR_DEVICE    0x0040#define ATTR_NORMAL    0x0080#define ATTR_TEMPORARY 0x0100#define ATTR_SPARSE    0x0200#define ATTR_REPARSE   0x0400#define ATTR_COMPRESSED 0x0800#define ATTR_OFFLINE    0x1000	/* ie file not immediately available -					on offline storage */#define ATTR_NOT_CONTENT_INDEXED 0x2000#define ATTR_ENCRYPTED  0x4000#define ATTR_POSIX_SEMANTICS 0x01000000#define ATTR_BACKUP_SEMANTICS 0x02000000#define ATTR_DELETE_ON_CLOSE 0x04000000#define ATTR_SEQUENTIAL_SCAN 0x08000000#define ATTR_RANDOM_ACCESS   0x10000000#define ATTR_NO_BUFFERING    0x20000000#define ATTR_WRITE_THROUGH   0x80000000/* ShareAccess flags */#define FILE_NO_SHARE     0x00000000#define FILE_SHARE_READ   0x00000001#define FILE_SHARE_WRITE  0x00000002#define FILE_SHARE_DELETE 0x00000004#define FILE_SHARE_ALL    0x00000007/* CreateDisposition flags */#define FILE_SUPERSEDE    0x00000000#define FILE_OPEN         0x00000001#define FILE_CREATE       0x00000002#define FILE_OPEN_IF      0x00000003#define FILE_OVERWRITE    0x00000004#define FILE_OVERWRITE_IF 0x00000005/* CreateOptions */#define CREATE_NOT_FILE		0x00000001	/* if set must not be file */#define CREATE_WRITE_THROUGH	0x00000002#define CREATE_SEQUENTIAL       0x00000004#define CREATE_SYNC_ALERT       0x00000010#define CREATE_ASYNC_ALERT      0x00000020#define CREATE_NOT_DIR		0x00000040    /* if set must not be directory */#define CREATE_NO_EA_KNOWLEDGE  0x00000200#define CREATE_EIGHT_DOT_THREE  0x00000400#define CREATE_RANDOM_ACCESS	0x00000800#define CREATE_DELETE_ON_CLOSE	0x00001000#define CREATE_OPEN_BY_ID       0x00002000#define OPEN_REPARSE_POINT	0x00200000#define CREATE_OPTIONS_MASK     0x007FFFFF#define CREATE_OPTION_SPECIAL   0x20000000   /* system. NB not sent over wire *//* ImpersonationLevel flags */#define SECURITY_ANONYMOUS      0#define SECURITY_IDENTIFICATION 1#define SECURITY_IMPERSONATION  2#define SECURITY_DELEGATION     3/* SecurityFlags */#define SECURITY_CONTEXT_TRACKING 0x01#define SECURITY_EFFECTIVE_ONLY   0x02/* * Default PID value, used in all SMBs where the PID is not important */#define CIFS_DFT_PID  0x1234/* * We use the same routine for Copy and Move SMBs.  This flag is used to * distinguish */#define CIFS_COPY_OP 1#define CIFS_RENAME_OP 2#define GETU16(var)  (*((__u16 *)var))	/* BB check for endian issues */#define GETU32(var)  (*((__u32 *)var))	/* BB check for endian issues */struct smb_hdr {	__u32 smb_buf_length;	/* big endian on wire *//* BB length is only two		or three bytes - with one or two byte type preceding it that are		zero - we could mask the type byte off just in case BB */	__u8 Protocol[4];	__u8 Command;	union {		struct {			__u8 ErrorClass;			__u8 Reserved;			__le16 Error;		} __attribute__((packed)) DosError;		__le32 CifsError;	} __attribute__((packed)) Status;	__u8 Flags;	__le16 Flags2;		/* note: le */	__le16 PidHigh;	union {		struct {			__le32 SequenceNumber;  /* le */			__u32 Reserved; /* zero */		} __attribute__((packed)) Sequence;		__u8 SecuritySignature[8];	/* le */	} __attribute__((packed)) Signature;	__u8 pad[2];	__u16 Tid;	__le16 Pid;	__u16 Uid;	__u16 Mid;	__u8 WordCount;} __attribute__((packed));/* given a pointer to an smb_hdr retrieve the value of byte count */#define BCC(smb_var) ( *(__u16 *)((char *)smb_var + sizeof(struct smb_hdr) + (2 * smb_var->WordCount)))#define BCC_LE(smb_var) ( *(__le16 *)((char *)smb_var + sizeof(struct smb_hdr) + (2 * smb_var->WordCount)))/* given a pointer to an smb_hdr retrieve the pointer to the byte area */#define pByteArea(smb_var) ((unsigned char *)smb_var + sizeof(struct smb_hdr) + (2 * smb_var->WordCount) + 2)/* * Computer Name Length (since Netbios name was length 16 with last byte 0x20) * No longer as important, now that TCP names are more commonly used to * resolve hosts. */#define CNLEN 15/* * Share Name Length (SNLEN) * Note:  This length was limited by the SMB used to get *        the Share info.   NetShareEnum only returned 13 *        chars, including the null termination. * This was removed because it no longer is limiting. *//* * Comment Length */#define MAXCOMMENTLEN 40/* * The OS/2 maximum path name */#define MAX_PATHCONF 256/* *  SMB frame definitions  (following must be packed structs) *  See the SNIA CIFS Specification for details. * *  The Naming convention is the lower case version of the *  smb command code name for the struct and this is typedef to the *  uppercase version of the same name with the prefix SMB_ removed *  for brevity.  Although typedefs are not commonly used for *  structure definitions in the Linux kernel, their use in the *  CIFS standards document, which this code is based on, may *  make this one of the cases where typedefs for structures make *  sense to improve readability for readers of the standards doc. *  Typedefs can always be removed later if they are too distracting *  and they are only used for the CIFSs PDUs themselves, not *  internal cifs vfs structures * */typedef struct negotiate_req {	struct smb_hdr hdr;	/* wct = 0 */	__le16 ByteCount;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -