xref: /utopia/UTPA2-700.0.x/projects/tools/lint/mips-linux-gnu_include/rpcsvc/nfs_prot.x (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1 /* @(#)nfs_prot.x	2.1 88/08/01 4.0 RPCSRC */
2 
3 /*
4  * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
5  * unrestricted use provided that this legend is included on all tape
6  * media and as a part of the software program in whole or part.  Users
7  * may copy or modify Sun RPC without charge, but are not authorized
8  * to license or distribute it to anyone else except as part of a product or
9  * program developed by the user.
10  *
11  * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
12  * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
13  * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
14  *
15  * Sun RPC is provided with no support and without any obligation on the
16  * part of Sun Microsystems, Inc. to assist in its use, correction,
17  * modification or enhancement.
18  *
19  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
20  * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
21  * OR ANY PART THEREOF.
22  *
23  * In no event will Sun Microsystems, Inc. be liable for any lost revenue
24  * or profits or other special, indirect and consequential damages, even if
25  * Sun has been advised of the possibility of such damages.
26  *
27  * Sun Microsystems, Inc.
28  * 2550 Garcia Avenue
29  * Mountain View, California  94043
30  */
31 
32 /*
33  * nfs_prot.x 1.2 87/10/12
34  * Copyright 1987 Sun Microsystems, Inc.
35  */
36 const NFS_PORT          = 2049;
37 const NFS_MAXDATA       = 8192;
38 const NFS_MAXPATHLEN    = 1024;
39 const NFS_MAXNAMLEN	= 255;
40 const NFS_FHSIZE	= 32;
41 const NFS_COOKIESIZE	= 4;
42 const NFS_FIFO_DEV	= -1;	/* size kludge for named pipes */
43 
44 /*
45  * File types
46  */
47 const NFSMODE_FMT  = 0170000;	/* type of file */
48 const NFSMODE_DIR  = 0040000;	/* directory */
49 const NFSMODE_CHR  = 0020000;	/* character special */
50 const NFSMODE_BLK  = 0060000;	/* block special */
51 const NFSMODE_REG  = 0100000;	/* regular */
52 const NFSMODE_LNK  = 0120000;	/* symbolic link */
53 const NFSMODE_SOCK = 0140000;	/* socket */
54 const NFSMODE_FIFO = 0010000;	/* fifo */
55 
56 /*
57  * Error status
58  */
59 enum nfsstat {
60 	NFS_OK= 0,		/* no error */
61 	NFSERR_PERM=1,		/* Not owner */
62 	NFSERR_NOENT=2,		/* No such file or directory */
63 	NFSERR_IO=5,		/* I/O error */
64 	NFSERR_NXIO=6,		/* No such device or address */
65 	NFSERR_ACCES=13,	/* Permission denied */
66 	NFSERR_EXIST=17,	/* File exists */
67 	NFSERR_NODEV=19,	/* No such device */
68 	NFSERR_NOTDIR=20,	/* Not a directory*/
69 	NFSERR_ISDIR=21,	/* Is a directory */
70 	NFSERR_FBIG=27,		/* File too large */
71 	NFSERR_NOSPC=28,	/* No space left on device */
72 	NFSERR_ROFS=30,		/* Read-only file system */
73 	NFSERR_NAMETOOLONG=63,	/* File name too long */
74 	NFSERR_NOTEMPTY=66,	/* Directory not empty */
75 	NFSERR_DQUOT=69,	/* Disc quota exceeded */
76 	NFSERR_STALE=70,	/* Stale NFS file handle */
77 	NFSERR_WFLUSH=99	/* write cache flushed */
78 };
79 
80 /*
81  * File types
82  */
83 enum ftype {
84 	NFNON = 0,	/* non-file */
85 	NFREG = 1,	/* regular file */
86 	NFDIR = 2,	/* directory */
87 	NFBLK = 3,	/* block special */
88 	NFCHR = 4,	/* character special */
89 	NFLNK = 5,	/* symbolic link */
90 	NFSOCK = 6,	/* unix domain sockets */
91 	NFBAD = 7,	/* unused */
92 	NFFIFO = 8 	/* named pipe */
93 };
94 
95 /*
96  * File access handle
97  */
98 struct nfs_fh {
99 	opaque data[NFS_FHSIZE];
100 };
101 
102 /*
103  * Timeval
104  */
105 struct nfstime {
106 	unsigned seconds;
107 	unsigned useconds;
108 };
109 
110 
111 /*
112  * File attributes
113  */
114 struct fattr {
115 	ftype type;		/* file type */
116 	unsigned mode;		/* protection mode bits */
117 	unsigned nlink;		/* # hard links */
118 	unsigned uid;		/* owner user id */
119 	unsigned gid;		/* owner group id */
120 	unsigned size;		/* file size in bytes */
121 	unsigned blocksize;	/* preferred block size */
122 	unsigned rdev;		/* special device # */
123 	unsigned blocks;	/* Kb of disk used by file */
124 	unsigned fsid;		/* device # */
125 	unsigned fileid;	/* inode # */
126 	nfstime	atime;		/* time of last access */
127 	nfstime	mtime;		/* time of last modification */
128 	nfstime	ctime;		/* time of last change */
129 };
130 
131 /*
132  * File attributes which can be set
133  */
134 struct sattr {
135 	unsigned mode;	/* protection mode bits */
136 	unsigned uid;	/* owner user id */
137 	unsigned gid;	/* owner group id */
138 	unsigned size;	/* file size in bytes */
139 	nfstime	atime;	/* time of last access */
140 	nfstime	mtime;	/* time of last modification */
141 };
142 
143 
144 typedef string filename<NFS_MAXNAMLEN>;
145 typedef string nfspath<NFS_MAXPATHLEN>;
146 
147 /*
148  * Reply status with file attributes
149  */
150 union attrstat switch (nfsstat status) {
151 case NFS_OK:
152 	fattr attributes;
153 default:
154 	void;
155 };
156 
157 struct sattrargs {
158 	nfs_fh file;
159 	sattr attributes;
160 };
161 
162 /*
163  * Arguments for directory operations
164  */
165 struct diropargs {
166 	nfs_fh	dir;	/* directory file handle */
167 	filename name;		/* name (up to NFS_MAXNAMLEN bytes) */
168 };
169 
170 struct diropokres {
171 	nfs_fh file;
172 	fattr attributes;
173 };
174 
175 /*
176  * Results from directory operation
177  */
178 union diropres switch (nfsstat status) {
179 case NFS_OK:
180 	diropokres diropres;
181 default:
182 	void;
183 };
184 
185 union readlinkres switch (nfsstat status) {
186 case NFS_OK:
187 	nfspath data;
188 default:
189 	void;
190 };
191 
192 /*
193  * Arguments to remote read
194  */
195 struct readargs {
196 	nfs_fh file;		/* handle for file */
197 	unsigned offset;	/* byte offset in file */
198 	unsigned count;		/* immediate read count */
199 	unsigned totalcount;	/* total read count (from this offset)*/
200 };
201 
202 /*
203  * Status OK portion of remote read reply
204  */
205 struct readokres {
206 	fattr	attributes;	/* attributes, need for pagin*/
207 	opaque data<NFS_MAXDATA>;
208 };
209 
210 union readres switch (nfsstat status) {
211 case NFS_OK:
212 	readokres reply;
213 default:
214 	void;
215 };
216 
217 /*
218  * Arguments to remote write
219  */
220 struct writeargs {
221 	nfs_fh	file;		/* handle for file */
222 	unsigned beginoffset;	/* beginning byte offset in file */
223 	unsigned offset;	/* current byte offset in file */
224 	unsigned totalcount;	/* total write count (to this offset)*/
225 	opaque data<NFS_MAXDATA>;
226 };
227 
228 struct createargs {
229 	diropargs where;
230 	sattr attributes;
231 };
232 
233 struct renameargs {
234 	diropargs from;
235 	diropargs to;
236 };
237 
238 struct linkargs {
239 	nfs_fh from;
240 	diropargs to;
241 };
242 
243 struct symlinkargs {
244 	diropargs from;
245 	nfspath to;
246 	sattr attributes;
247 };
248 
249 
250 typedef opaque nfscookie[NFS_COOKIESIZE];
251 
252 /*
253  * Arguments to readdir
254  */
255 struct readdirargs {
256 	nfs_fh dir;		/* directory handle */
257 	nfscookie cookie;
258 	unsigned count;		/* number of directory bytes to read */
259 };
260 
261 struct entry {
262 	unsigned fileid;
263 	filename name;
264 	nfscookie cookie;
265 	entry *nextentry;
266 };
267 
268 struct dirlist {
269 	entry *entries;
270 	bool eof;
271 };
272 
273 union readdirres switch (nfsstat status) {
274 case NFS_OK:
275 	dirlist reply;
276 default:
277 	void;
278 };
279 
280 struct statfsokres {
281 	unsigned tsize;	/* preferred transfer size in bytes */
282 	unsigned bsize;	/* fundamental file system block size */
283 	unsigned blocks;	/* total blocks in file system */
284 	unsigned bfree;	/* free blocks in fs */
285 	unsigned bavail;	/* free blocks avail to non-superuser */
286 };
287 
288 union statfsres switch (nfsstat status) {
289 case NFS_OK:
290 	statfsokres reply;
291 default:
292 	void;
293 };
294 
295 /*
296  * Remote file service routines
297  */
298 program NFS_PROGRAM {
299 	version NFS_VERSION {
300 		void
301 		NFSPROC_NULL(void) = 0;
302 
303 		attrstat
304 		NFSPROC_GETATTR(nfs_fh) =	1;
305 
306 		attrstat
307 		NFSPROC_SETATTR(sattrargs) = 2;
308 
309 		void
310 		NFSPROC_ROOT(void) = 3;
311 
312 		diropres
313 		NFSPROC_LOOKUP(diropargs) = 4;
314 
315 		readlinkres
316 		NFSPROC_READLINK(nfs_fh) = 5;
317 
318 		readres
319 		NFSPROC_READ(readargs) = 6;
320 
321 		void
322 		NFSPROC_WRITECACHE(void) = 7;
323 
324 		attrstat
325 		NFSPROC_WRITE(writeargs) = 8;
326 
327 		diropres
328 		NFSPROC_CREATE(createargs) = 9;
329 
330 		nfsstat
331 		NFSPROC_REMOVE(diropargs) = 10;
332 
333 		nfsstat
334 		NFSPROC_RENAME(renameargs) = 11;
335 
336 		nfsstat
337 		NFSPROC_LINK(linkargs) = 12;
338 
339 		nfsstat
340 		NFSPROC_SYMLINK(symlinkargs) = 13;
341 
342 		diropres
343 		NFSPROC_MKDIR(createargs) = 14;
344 
345 		nfsstat
346 		NFSPROC_RMDIR(diropargs) = 15;
347 
348 		readdirres
349 		NFSPROC_READDIR(readdirargs) = 16;
350 
351 		statfsres
352 		NFSPROC_STATFS(nfs_fh) = 17;
353 	} = 2;
354 } = 100003;
355