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

📄 9p.h

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 H
字号:
#ifndef _9FS_9P_H_#define _9FS_9P_H_#define U9FS_AUTHLEN 13#define U9FS_NAMELEN    28#define U9FS_TICKETLEN  72#define U9FS_ERRLEN     64#define U9FS_DOMLEN     48#define U9FS_CHALLEN    8#define U9FS_DIRLEN     116#define U9FS_MAXFDATA  8192#define U9FS_MAXDDATA  (((int)U9FS_MAXFDATA/U9FS_DIRLEN)*U9FS_DIRLEN)#define U9P_MODE_RD    0x0#define U9P_MODE_WR    0x1#define U9P_MODE_RDWR  0x2#define U9P_MODE_EX    0x3#define U9P_MODE_TRUNC 0x10#define U9P_MODE_CLOSE 0x40#define U9P_PERM_CHDIR(m) (0x80000000&(m))#define U9P_PERM_OWNER(m) ((m)&0x7)#define U9P_PERM_GROUP(m) (((m)>>3)&0x7)#define U9P_PERM_OTHER(m) (((m)>>6)&0x7)#define U9P_PERM_ALL(m)   ((m)&0777)/* this is too small */typedef u_int32_t u9fsfh_t;struct u9fd_qid {	u9fsfh_t	path;	u_int32_t	vers;};struct	u9fsreq {  TAILQ_ENTRY(u9fsreq) r_chain;  struct u9fsreq * r_rep;  struct mbuf * r_mrep;  struct proc	*r_procp;	/* Proc that did I/O system call */  struct u9fsmount *r_nmp;  /* actual content of the 9P message */	char	r_type;	short	r_fid;	u_short	r_tag;	union {		struct {			u_short	oldtag;		/* Tflush */			struct u9fd_qid qid;		/* Rattach, Rwalk, Ropen, Rcreate */			char	rauth[U9FS_AUTHLEN];	/* Rattach */		} u1;		struct {			char	uname[U9FS_NAMELEN];		/* Tattach */			char	aname[U9FS_NAMELEN];		/* Tattach */			char	ticket[U9FS_TICKETLEN];	/* Tattach */			char	auth[U9FS_AUTHLEN];	/* Tattach */		} u2;		struct {			char	ename[U9FS_ERRLEN];		/* Rerror */			char	authid[U9FS_NAMELEN];	/* Rsession */			char	authdom[U9FS_DOMLEN];	/* Rsession */			char	chal[U9FS_CHALLEN];		/* Tsession/Rsession */		} u3;		struct {			u_int32_t	perm;		/* Tcreate */ 			short	newfid;		/* Tclone, Tclwalk */			char	name[U9FS_NAMELEN];	/* Twalk, Tclwalk, Tcreate */			char	mode;		/* Tcreate, Topen */		} u4;		struct {			u_int64_t	offset;		/* Tread, Twrite */			u_short	        count;		/* Tread, Twrite, Rread */			char	*data;		/* Twrite, Rread */		} u5;			char	stat[U9FS_DIRLEN];	/* Twstat, Rstat */	} u;};#define r_oldtag u.u1.oldtag#define r_qid u.u1.qid#define r_rauth u.u1.rauth#define r_uname u.u2.uname#define r_aname u.u2.aname#define r_ticket  u.u2.ticket#define r_auth  u.u2.auth#define r_ename  u.u3.ename#define r_authid  u.u3.authid#define r_authdom  u.u3.authdom#define r_chal  u.u3.chal#define r_perm  u.u4.perm#define r_newfid  u.u4.newfid#define r_name  u.u4.name#define r_mode  u.u4.mode#define r_offset  u.u5.offset#define r_count  u.u5.count#define r_data  u.u5.data#define r_stat  u.statextern TAILQ_HEAD(u9fs_reqq, u9fsreq) u9fs_reqq;struct u9fsdir {  char	dir_name[U9FS_NAMELEN];  char	dir_uid[U9FS_NAMELEN];  char	dir_gid[U9FS_NAMELEN];  struct u9fd_qid	dir_qid;  u_int32_t	dir_mode;  u_int32_t	dir_atime;  u_int32_t	dir_mtime;  union {    u_int64_t	length;    struct {	/* little endian */      u_int32_t	llength;      u_int32_t	hlength;    } l;  } u;  u_short	dir_type;  u_short	dir_dev;};#define dir_length u.length#define dir_llength u.l.llength#define dir_hlength u.l.hlengthenum{	Tnop =		50,	Rnop,	Tosession =	52,	/* illegal */	Rosession,		/* illegal */	Terror =	54,	/* illegal */	Rerror,	Tflush =	56,	Rflush,	Toattach =	58,	/* illegal */	Roattach,		/* illegal */	Tclone =	60,	Rclone,	Twalk =		62,	Rwalk,	Topen =		64,	Ropen,	Tcreate =	66,	Rcreate,	Tread =		68,	Rread,	Twrite =	70,	Rwrite,	Tclunk =	72,	Rclunk,	Tremove =	74,	Rremove,	Tstat =		76,	Rstat,	Twstat =	78,	Rwstat,	Tclwalk =	80,	Rclwalk,	Tauth =		82,	/* illegal */	Rauth,			/* illegal */	Tsession =	84,	Rsession,	Tattach =	86,	Rattach,	Ttunnel =	88,	Rtunnel,	Tmax};static char * u9p_types[] = {  "Tnop",  "Rnop",  "Tosession",  "Rosession",  "Terror",  "Rerror",  "Tflush",  "Rflush",  "Toattach",  "Roattach",  "Tclone",  "Rclone",  "Twalk",  "Rwalk",  "Topen",  "Ropen",  "Tcreate",  "Rcreate",  "Tread",  "Rread",  "Twrite",  "Rwrite",  "Tclunk",  "Rclunk",  "Tremove",  "Rremove",  "Tstat",  "Rstat",  "Twstat",  "Rwstat",  "Tclwalk",  "Rclwalk",  "Tauth",  "Rauth",  "Tsession",  "Rsession",  "Tattach",  "Rattach",  "Ttunnel",  "Rtunnel",  "Tmax"};int u9p_m2s __P((char *ap, int n, struct u9fsreq *f));int u9p_s2m __P((struct u9fsreq *f, char *ap, int copydata));int u9p_m2d __P((char *ap, struct u9fsdir *f));int u9p_d2m __P((struct u9fsdir *f, char *ap));int u9p_type __P((char * t));int u9p_m_m2s __P((struct mbuf **m, struct u9fsreq *f));struct mbuf * u9p_m_s2m __P((struct u9fsreq *f));int u9p_m_m2d __P((struct mbuf **m, struct u9fsdir *f));struct mbuf * u9p_m_d2m __P((struct u9fsdir *f));u_short u9p_m_tag __P((struct mbuf **m));#endif

⌨️ 快捷键说明

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