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

📄 cifsglob.h

📁 Linux内核自带的cifs模块
💻 H
📖 第 1 页 / 共 2 页
字号:
/* *   fs/cifs/cifsglob.h * *   Copyright (C) International Business Machines  Corp., 2002,2007 *   Author(s): Steve French (sfrench@us.ibm.com) *              Jeremy Allison (jra@samba.org) * *   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. * */#include <linux/in.h>#include <linux/in6.h>#include <linux/version.h>#include "cifs_fs_sb.h"/* * The sizes of various internal tables and strings */#define MAX_UID_INFO 16#define MAX_SES_INFO 2#define MAX_TCON_INFO 4#define MAX_TREE_SIZE 2 + MAX_SERVER_SIZE + 1 + MAX_SHARE_SIZE + 1#define MAX_SERVER_SIZE 15#define MAX_SHARE_SIZE  64	/* used to be 20, this should still be enough */#define MAX_USERNAME_SIZE 32	/* 32 is to allow for 15 char names + null				   termination then *2 for unicode versions */#define MAX_PASSWORD_SIZE 16#define CIFS_MIN_RCV_POOL 4/* * MAX_REQ is the maximum number of requests that WE will send * on one socket concurently. It also matches the most common * value of max multiplex returned by servers.  We may * eventually want to use the negotiated value (in case * future servers can handle more) when we are more confident that * we will not have problems oveloading the socket with pending * write data. */#define CIFS_MAX_REQ 50#define SERVER_NAME_LENGTH 15#define SERVER_NAME_LEN_WITH_NULL     (SERVER_NAME_LENGTH + 1)/* used to define string lengths for reversing unicode strings *//*         (256+1)*2 = 514                                     *//*           (max path length + 1 for null) * 2 for unicode    */#define MAX_NAME 514#include "cifspdu.h"#ifndef FALSE#define FALSE 0#endif#ifndef TRUE#define TRUE 1#endif#ifndef XATTR_DOS_ATTRIB#define XATTR_DOS_ATTRIB "user.DOSATTRIB"#endif#ifndef SLAB_NOFS#define SLAB_NOFS GFP_NOFS#endif#ifndef SLAB_KERNEL#define SLAB_KERNEL GFP_KERNEL#endif/* * This information is kept on every Server we know about. * * Some things to note: * */#define SERVER_NAME_LEN_WITH_NULL	(SERVER_NAME_LENGTH + 1)/* * CIFS vfs client Status information (based on what we know.) */ /* associated with each tcp and smb session */enum statusEnum {	CifsNew = 0,	CifsGood,	CifsExiting,	CifsNeedReconnect};enum securityEnum {	LANMAN = 0,             /* Legacy LANMAN auth */	NTLM,			/* Legacy NTLM012 auth with NTLM hash */	NTLMv2,			/* Legacy NTLM auth with NTLMv2 hash */	RawNTLMSSP,		/* NTLMSSP without SPNEGO */	NTLMSSP,		/* NTLMSSP via SPNEGO */	Kerberos		/* Kerberos via SPNEGO */};enum protocolEnum {	IPV4 = 0,	IPV6,	SCTP	/* Netbios frames protocol not supported at this time */};struct mac_key {	unsigned int len;	union {		char ntlm[CIFS_SESS_KEY_SIZE + 16];		struct {			char key[16];			struct ntlmv2_resp resp;		} ntlmv2;	} data;};/* ***************************************************************** * Except the CIFS PDUs themselves all the * globally interesting structs should go here ***************************************************************** */struct TCP_Server_Info {	/* 15 character server name + 0x20 16th byte indicating type = srv */	char server_RFC1001_name[SERVER_NAME_LEN_WITH_NULL];	char unicode_server_Name[SERVER_NAME_LEN_WITH_NULL * 2];	struct socket *ssocket;	union {		struct sockaddr_in sockAddr;		struct sockaddr_in6 sockAddr6;	} addr;	wait_queue_head_t response_q;	wait_queue_head_t request_q; /* if more than maxmpx to srvr must block*/	struct list_head pending_mid_q;	void *Server_NlsInfo;	/* BB - placeholder for future NLS info  */	unsigned short server_codepage;	/* codepage for the server    */	unsigned long ip_address;	/* IP addr for the server if known */	enum protocolEnum protocolType;	char versionMajor;	char versionMinor;	unsigned svlocal:1;	/* local server or remote */	atomic_t socketUseCount; /* number of open cifs sessions on socket */	atomic_t inFlight;  /* number of requests on the wire to server */#ifdef CONFIG_CIFS_STATS2	atomic_t inSend; /* requests trying to send */	atomic_t num_waiters;   /* blocked waiting to get in sendrecv */#endif	enum statusEnum tcpStatus; /* what we think the status is */	struct semaphore tcpSem;	struct task_struct *tsk;	char server_GUID[16];	char secMode;	enum securityEnum secType;	unsigned int maxReq;	/* Clients should submit no more */	/* than maxReq distinct unanswered SMBs to the server when using  */	/* multiplexed reads or writes */	unsigned int maxBuf;	/* maxBuf specifies the maximum */	/* message size the server can send or receive for non-raw SMBs */	unsigned int maxRw;	/* maxRw specifies the maximum */	/* message size the server can send or receive for */	/* SMB_COM_WRITE_RAW or SMB_COM_READ_RAW. */	char sessid[4];		/* unique token id for this session */	/* (returned on Negotiate */	int capabilities; /* allow selective disabling of caps by smb sess */	int timeAdj;  /* Adjust for difference in server time zone in sec */	__u16 CurrentMid;         /* multiplex id - rotating counter */	char cryptKey[CIFS_CRYPTO_KEY_SIZE];	/* 16th byte of RFC1001 workstation name is always null */	char workstation_RFC1001_name[SERVER_NAME_LEN_WITH_NULL];	__u32 sequence_number; /* needed for CIFS PDU signature */	struct mac_key mac_signing_key;	char ntlmv2_hash[16];	unsigned long lstrp; /* when we got last response from this server */};/* * The following is our shortcut to user information.  We surface the uid, * and name. We always get the password on the fly in case it * has changed. We also hang a list of sessions owned by this user off here. */struct cifsUidInfo {	struct list_head userList;	struct list_head sessionList; /* SMB sessions for this user */	uid_t linux_uid;	char user[MAX_USERNAME_SIZE + 1];	/* ascii name of user */	/* BB may need ptr or callback for PAM or WinBind info */};/* * Session structure.  One of these for each uid session with a particular host */struct cifsSesInfo {	struct list_head cifsSessionList;	struct semaphore sesSem;#if 0	struct cifsUidInfo *uidInfo;	/* pointer to user info */#endif	struct TCP_Server_Info *server;	/* pointer to server info */	atomic_t inUse; /* # of mounts (tree connections) on this ses */	enum statusEnum status;	unsigned overrideSecFlg;  /* if non-zero override global sec flags */	__u16 ipc_tid;		/* special tid for connection to IPC share */	__u16 flags;	char *serverOS;		/* name of operating system underlying server */	char *serverNOS;	/* name of network operating system of server */	char *serverDomain;	/* security realm of server */	int Suid;		/* remote smb uid  */	uid_t linux_uid;        /* local Linux uid */	int capabilities;	char serverName[SERVER_NAME_LEN_WITH_NULL * 2];	/* BB make bigger for				TCP names - will ipv6 and sctp addresses fit? */	char userName[MAX_USERNAME_SIZE + 1];	char *domainName;	char *password;};/* no more than one of the following three session flags may be set */#define CIFS_SES_NT4 1#define CIFS_SES_OS2 2#define CIFS_SES_W9X 4/* following flag is set for old servers such as OS2 (and Win95?)   which do not negotiate NTLM or POSIX dialects, but instead   negotiate one of the older LANMAN dialects */#define CIFS_SES_LANMAN 8/* * there is one of these for each connection to a resource on a particular * session */struct cifsTconInfo {	struct list_head cifsConnectionList;	struct list_head openFileList;	struct semaphore tconSem;	struct cifsSesInfo *ses;	/* pointer to session associated with */	char treeName[MAX_TREE_SIZE + 1]; /* UNC name of resource in ASCII */	char *nativeFileSystem;	__u16 tid;		/* The 2 byte tree id */	__u16 Flags;		/* optional support bits */	enum statusEnum tidStatus;	atomic_t useCount;	/* how many explicit/implicit mounts to share */#ifdef CONFIG_CIFS_STATS	atomic_t num_smbs_sent;	atomic_t num_writes;	atomic_t num_reads;	atomic_t num_oplock_brks;	atomic_t num_opens;	atomic_t num_closes;	atomic_t num_deletes;	atomic_t num_mkdirs;	atomic_t num_rmdirs;	atomic_t num_renames;	atomic_t num_t2renames;	atomic_t num_ffirst;	atomic_t num_fnext;	atomic_t num_fclose;	atomic_t num_hardlinks;	atomic_t num_symlinks;	atomic_t num_locks;	atomic_t num_acl_get;	atomic_t num_acl_set;#ifdef CONFIG_CIFS_STATS2	unsigned long long time_writes;	unsigned long long time_reads;	unsigned long long time_opens;	unsigned long long time_deletes;	unsigned long long time_closes;	unsigned long long time_mkdirs;	unsigned long long time_rmdirs;	unsigned long long time_renames;	unsigned long long time_t2renames;	unsigned long long time_ffirst;	unsigned long long time_fnext;	unsigned long long time_fclose;#endif /* CONFIG_CIFS_STATS2 */	__u64    bytes_read;	__u64    bytes_written;	spinlock_t stat_lock;#endif /* CONFIG_CIFS_STATS */	FILE_SYSTEM_DEVICE_INFO fsDevInfo;	FILE_SYSTEM_ATTRIBUTE_INFO fsAttrInfo; /* ok if fs name truncated */	FILE_SYSTEM_UNIX_INFO fsUnixInfo;	unsigned retry:1;	unsigned nocase:1;	unsigned unix_ext:1; /* if off disable Linux extensions to CIFS protocol				for this mount even if server would support */	/* BB add field for back pointer to sb struct(s)? */};/* * This info hangs off the cifsFileInfo structure, pointed to by llist. * This is used to track byte stream locks on the file */struct cifsLockInfo {	struct list_head llist;	/* pointer to next cifsLockInfo */	__u64 offset;	__u64 length;	__u8 type;};/* * One of these for each open instance of a file */struct cifs_search_info {	loff_t index_of_last_entry;	__u16 entries_in_buffer;	__u16 info_level;

⌨️ 快捷键说明

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