xref: /plan9/sys/src/cmd/unix/9pfreebsd/mount_9fs/9p.h (revision 144145943e440fe30c4e4512a0856f5e3d5ca4be)
1*14414594SDavid du Colombier #ifndef _9FS_9P_H_
2*14414594SDavid du Colombier #define _9FS_9P_H_
3*14414594SDavid du Colombier 
4*14414594SDavid du Colombier 
5*14414594SDavid du Colombier #define U9FS_AUTHLEN 13
6*14414594SDavid du Colombier #define U9FS_NAMELEN    28
7*14414594SDavid du Colombier #define U9FS_TICKETLEN  72
8*14414594SDavid du Colombier #define U9FS_ERRLEN     64
9*14414594SDavid du Colombier #define U9FS_DOMLEN     48
10*14414594SDavid du Colombier #define U9FS_CHALLEN    8
11*14414594SDavid du Colombier #define U9FS_DIRLEN     116
12*14414594SDavid du Colombier #define U9FS_MAXFDATA  8192
13*14414594SDavid du Colombier #define U9FS_MAXDDATA  (((int)U9FS_MAXFDATA/U9FS_DIRLEN)*U9FS_DIRLEN)
14*14414594SDavid du Colombier 
15*14414594SDavid du Colombier #define U9P_MODE_RD    0x0
16*14414594SDavid du Colombier #define U9P_MODE_WR    0x1
17*14414594SDavid du Colombier #define U9P_MODE_RDWR  0x2
18*14414594SDavid du Colombier #define U9P_MODE_EX    0x3
19*14414594SDavid du Colombier #define U9P_MODE_TRUNC 0x10
20*14414594SDavid du Colombier #define U9P_MODE_CLOSE 0x40
21*14414594SDavid du Colombier 
22*14414594SDavid du Colombier #define U9P_PERM_CHDIR(m) (0x80000000&(m))
23*14414594SDavid du Colombier #define U9P_PERM_OWNER(m) ((m)&0x7)
24*14414594SDavid du Colombier #define U9P_PERM_GROUP(m) (((m)>>3)&0x7)
25*14414594SDavid du Colombier #define U9P_PERM_OTHER(m) (((m)>>6)&0x7)
26*14414594SDavid du Colombier #define U9P_PERM_ALL(m)   ((m)&0777)
27*14414594SDavid du Colombier 
28*14414594SDavid du Colombier /* this is too small */
29*14414594SDavid du Colombier typedef u_int32_t u9fsfh_t;
30*14414594SDavid du Colombier 
31*14414594SDavid du Colombier struct u9fd_qid {
32*14414594SDavid du Colombier 	u9fsfh_t	path;
33*14414594SDavid du Colombier 	u_int32_t	vers;
34*14414594SDavid du Colombier };
35*14414594SDavid du Colombier 
36*14414594SDavid du Colombier struct	u9fsreq {
37*14414594SDavid du Colombier   TAILQ_ENTRY(u9fsreq) r_chain;
38*14414594SDavid du Colombier   struct u9fsreq * r_rep;
39*14414594SDavid du Colombier   struct mbuf * r_mrep;
40*14414594SDavid du Colombier   struct proc	*r_procp;	/* Proc that did I/O system call */
41*14414594SDavid du Colombier   struct u9fsmount *r_nmp;
42*14414594SDavid du Colombier 
43*14414594SDavid du Colombier   /* actual content of the 9P message */
44*14414594SDavid du Colombier 	char	r_type;
45*14414594SDavid du Colombier 	short	r_fid;
46*14414594SDavid du Colombier 	u_short	r_tag;
47*14414594SDavid du Colombier 	union {
48*14414594SDavid du Colombier 		struct {
49*14414594SDavid du Colombier 			u_short	oldtag;		/* Tflush */
50*14414594SDavid du Colombier 			struct u9fd_qid qid;		/* Rattach, Rwalk, Ropen, Rcreate */
51*14414594SDavid du Colombier 			char	rauth[U9FS_AUTHLEN];	/* Rattach */
52*14414594SDavid du Colombier 		} u1;
53*14414594SDavid du Colombier 		struct {
54*14414594SDavid du Colombier 			char	uname[U9FS_NAMELEN];		/* Tattach */
55*14414594SDavid du Colombier 			char	aname[U9FS_NAMELEN];		/* Tattach */
56*14414594SDavid du Colombier 			char	ticket[U9FS_TICKETLEN];	/* Tattach */
57*14414594SDavid du Colombier 			char	auth[U9FS_AUTHLEN];	/* Tattach */
58*14414594SDavid du Colombier 		} u2;
59*14414594SDavid du Colombier 		struct {
60*14414594SDavid du Colombier 			char	ename[U9FS_ERRLEN];		/* Rerror */
61*14414594SDavid du Colombier 			char	authid[U9FS_NAMELEN];	/* Rsession */
62*14414594SDavid du Colombier 			char	authdom[U9FS_DOMLEN];	/* Rsession */
63*14414594SDavid du Colombier 			char	chal[U9FS_CHALLEN];		/* Tsession/Rsession */
64*14414594SDavid du Colombier 		} u3;
65*14414594SDavid du Colombier 		struct {
66*14414594SDavid du Colombier 			u_int32_t	perm;		/* Tcreate */
67*14414594SDavid du Colombier 			short	newfid;		/* Tclone, Tclwalk */
68*14414594SDavid du Colombier 			char	name[U9FS_NAMELEN];	/* Twalk, Tclwalk, Tcreate */
69*14414594SDavid du Colombier 			char	mode;		/* Tcreate, Topen */
70*14414594SDavid du Colombier 		} u4;
71*14414594SDavid du Colombier 		struct {
72*14414594SDavid du Colombier 			u_int64_t	offset;		/* Tread, Twrite */
73*14414594SDavid du Colombier 			u_short	        count;		/* Tread, Twrite, Rread */
74*14414594SDavid du Colombier 			char	*data;		/* Twrite, Rread */
75*14414594SDavid du Colombier 		} u5;
76*14414594SDavid du Colombier 			char	stat[U9FS_DIRLEN];	/* Twstat, Rstat */
77*14414594SDavid du Colombier 	} u;
78*14414594SDavid du Colombier };
79*14414594SDavid du Colombier 
80*14414594SDavid du Colombier #define r_oldtag u.u1.oldtag
81*14414594SDavid du Colombier #define r_qid u.u1.qid
82*14414594SDavid du Colombier #define r_rauth u.u1.rauth
83*14414594SDavid du Colombier #define r_uname u.u2.uname
84*14414594SDavid du Colombier #define r_aname u.u2.aname
85*14414594SDavid du Colombier #define r_ticket  u.u2.ticket
86*14414594SDavid du Colombier #define r_auth  u.u2.auth
87*14414594SDavid du Colombier #define r_ename  u.u3.ename
88*14414594SDavid du Colombier #define r_authid  u.u3.authid
89*14414594SDavid du Colombier #define r_authdom  u.u3.authdom
90*14414594SDavid du Colombier #define r_chal  u.u3.chal
91*14414594SDavid du Colombier #define r_perm  u.u4.perm
92*14414594SDavid du Colombier #define r_newfid  u.u4.newfid
93*14414594SDavid du Colombier #define r_name  u.u4.name
94*14414594SDavid du Colombier #define r_mode  u.u4.mode
95*14414594SDavid du Colombier #define r_offset  u.u5.offset
96*14414594SDavid du Colombier #define r_count  u.u5.count
97*14414594SDavid du Colombier #define r_data  u.u5.data
98*14414594SDavid du Colombier #define r_stat  u.stat
99*14414594SDavid du Colombier 
100*14414594SDavid du Colombier extern TAILQ_HEAD(u9fs_reqq, u9fsreq) u9fs_reqq;
101*14414594SDavid du Colombier 
102*14414594SDavid du Colombier struct u9fsdir {
103*14414594SDavid du Colombier   char	dir_name[U9FS_NAMELEN];
104*14414594SDavid du Colombier   char	dir_uid[U9FS_NAMELEN];
105*14414594SDavid du Colombier   char	dir_gid[U9FS_NAMELEN];
106*14414594SDavid du Colombier   struct u9fd_qid	dir_qid;
107*14414594SDavid du Colombier   u_int32_t	dir_mode;
108*14414594SDavid du Colombier   u_int32_t	dir_atime;
109*14414594SDavid du Colombier   u_int32_t	dir_mtime;
110*14414594SDavid du Colombier   union {
111*14414594SDavid du Colombier     u_int64_t	length;
112*14414594SDavid du Colombier     struct {	/* little endian */
113*14414594SDavid du Colombier       u_int32_t	llength;
114*14414594SDavid du Colombier       u_int32_t	hlength;
115*14414594SDavid du Colombier     } l;
116*14414594SDavid du Colombier   } u;
117*14414594SDavid du Colombier   u_short	dir_type;
118*14414594SDavid du Colombier   u_short	dir_dev;
119*14414594SDavid du Colombier };
120*14414594SDavid du Colombier 
121*14414594SDavid du Colombier #define dir_length u.length
122*14414594SDavid du Colombier #define dir_llength u.l.llength
123*14414594SDavid du Colombier #define dir_hlength u.l.hlength
124*14414594SDavid du Colombier 
125*14414594SDavid du Colombier enum
126*14414594SDavid du Colombier {
127*14414594SDavid du Colombier 	Tnop =		50,
128*14414594SDavid du Colombier 	Rnop,
129*14414594SDavid du Colombier 	Tosession =	52,	/* illegal */
130*14414594SDavid du Colombier 	Rosession,		/* illegal */
131*14414594SDavid du Colombier 	Terror =	54,	/* illegal */
132*14414594SDavid du Colombier 	Rerror,
133*14414594SDavid du Colombier 	Tflush =	56,
134*14414594SDavid du Colombier 	Rflush,
135*14414594SDavid du Colombier 	Toattach =	58,	/* illegal */
136*14414594SDavid du Colombier 	Roattach,		/* illegal */
137*14414594SDavid du Colombier 	Tclone =	60,
138*14414594SDavid du Colombier 	Rclone,
139*14414594SDavid du Colombier 	Twalk =		62,
140*14414594SDavid du Colombier 	Rwalk,
141*14414594SDavid du Colombier 	Topen =		64,
142*14414594SDavid du Colombier 	Ropen,
143*14414594SDavid du Colombier 	Tcreate =	66,
144*14414594SDavid du Colombier 	Rcreate,
145*14414594SDavid du Colombier 	Tread =		68,
146*14414594SDavid du Colombier 	Rread,
147*14414594SDavid du Colombier 	Twrite =	70,
148*14414594SDavid du Colombier 	Rwrite,
149*14414594SDavid du Colombier 	Tclunk =	72,
150*14414594SDavid du Colombier 	Rclunk,
151*14414594SDavid du Colombier 	Tremove =	74,
152*14414594SDavid du Colombier 	Rremove,
153*14414594SDavid du Colombier 	Tstat =		76,
154*14414594SDavid du Colombier 	Rstat,
155*14414594SDavid du Colombier 	Twstat =	78,
156*14414594SDavid du Colombier 	Rwstat,
157*14414594SDavid du Colombier 	Tclwalk =	80,
158*14414594SDavid du Colombier 	Rclwalk,
159*14414594SDavid du Colombier 	Tauth =		82,	/* illegal */
160*14414594SDavid du Colombier 	Rauth,			/* illegal */
161*14414594SDavid du Colombier 	Tsession =	84,
162*14414594SDavid du Colombier 	Rsession,
163*14414594SDavid du Colombier 	Tattach =	86,
164*14414594SDavid du Colombier 	Rattach,
165*14414594SDavid du Colombier 	Ttunnel =	88,
166*14414594SDavid du Colombier 	Rtunnel,
167*14414594SDavid du Colombier 	Tmax
168*14414594SDavid du Colombier };
169*14414594SDavid du Colombier 
170*14414594SDavid du Colombier static char * u9p_types[] = {
171*14414594SDavid du Colombier   "Tnop",
172*14414594SDavid du Colombier   "Rnop",
173*14414594SDavid du Colombier   "Tosession",
174*14414594SDavid du Colombier   "Rosession",
175*14414594SDavid du Colombier   "Terror",
176*14414594SDavid du Colombier   "Rerror",
177*14414594SDavid du Colombier   "Tflush",
178*14414594SDavid du Colombier   "Rflush",
179*14414594SDavid du Colombier   "Toattach",
180*14414594SDavid du Colombier   "Roattach",
181*14414594SDavid du Colombier   "Tclone",
182*14414594SDavid du Colombier   "Rclone",
183*14414594SDavid du Colombier   "Twalk",
184*14414594SDavid du Colombier   "Rwalk",
185*14414594SDavid du Colombier   "Topen",
186*14414594SDavid du Colombier   "Ropen",
187*14414594SDavid du Colombier   "Tcreate",
188*14414594SDavid du Colombier   "Rcreate",
189*14414594SDavid du Colombier   "Tread",
190*14414594SDavid du Colombier   "Rread",
191*14414594SDavid du Colombier   "Twrite",
192*14414594SDavid du Colombier   "Rwrite",
193*14414594SDavid du Colombier   "Tclunk",
194*14414594SDavid du Colombier   "Rclunk",
195*14414594SDavid du Colombier   "Tremove",
196*14414594SDavid du Colombier   "Rremove",
197*14414594SDavid du Colombier   "Tstat",
198*14414594SDavid du Colombier   "Rstat",
199*14414594SDavid du Colombier   "Twstat",
200*14414594SDavid du Colombier   "Rwstat",
201*14414594SDavid du Colombier   "Tclwalk",
202*14414594SDavid du Colombier   "Rclwalk",
203*14414594SDavid du Colombier   "Tauth",
204*14414594SDavid du Colombier   "Rauth",
205*14414594SDavid du Colombier   "Tsession",
206*14414594SDavid du Colombier   "Rsession",
207*14414594SDavid du Colombier   "Tattach",
208*14414594SDavid du Colombier   "Rattach",
209*14414594SDavid du Colombier   "Ttunnel",
210*14414594SDavid du Colombier   "Rtunnel",
211*14414594SDavid du Colombier   "Tmax"
212*14414594SDavid du Colombier };
213*14414594SDavid du Colombier 
214*14414594SDavid du Colombier int u9p_m2s __P((char *ap, int n, struct u9fsreq *f));
215*14414594SDavid du Colombier int u9p_s2m __P((struct u9fsreq *f, char *ap, int copydata));
216*14414594SDavid du Colombier int u9p_m2d __P((char *ap, struct u9fsdir *f));
217*14414594SDavid du Colombier int u9p_d2m __P((struct u9fsdir *f, char *ap));
218*14414594SDavid du Colombier int u9p_type __P((char * t));
219*14414594SDavid du Colombier 
220*14414594SDavid du Colombier int u9p_m_m2s __P((struct mbuf **m, struct u9fsreq *f));
221*14414594SDavid du Colombier struct mbuf * u9p_m_s2m __P((struct u9fsreq *f));
222*14414594SDavid du Colombier int u9p_m_m2d __P((struct mbuf **m, struct u9fsdir *f));
223*14414594SDavid du Colombier struct mbuf * u9p_m_d2m __P((struct u9fsdir *f));
224*14414594SDavid du Colombier u_short u9p_m_tag __P((struct mbuf **m));
225*14414594SDavid du Colombier 
226*14414594SDavid du Colombier #endif
227