Rev 422 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
422 | giacomo | 1 | /* |
2 | You may distribute this file under either of the two licenses that |
||
3 | follow at your discretion. |
||
4 | */ |
||
5 | |||
6 | /* BLURB lgpl |
||
7 | |||
8 | Coda File System |
||
9 | Release 5 |
||
10 | |||
11 | Copyright (c) 1987-1999 Carnegie Mellon University |
||
12 | Additional copyrights listed below |
||
13 | |||
14 | This code is distributed "AS IS" without warranty of any kind under |
||
15 | the terms of the GNU Library General Public Licence Version 2, as |
||
16 | shown in the file LICENSE, or under the license shown below. The |
||
17 | technical and financial contributors to Coda are listed in the file |
||
18 | CREDITS. |
||
19 | |||
20 | Additional copyrights |
||
21 | */ |
||
22 | |||
23 | /* |
||
24 | |||
25 | Coda: an Experimental Distributed File System |
||
26 | Release 4.0 |
||
27 | |||
28 | Copyright (c) 1987-1999 Carnegie Mellon University |
||
29 | All Rights Reserved |
||
30 | |||
31 | Permission to use, copy, modify and distribute this software and its |
||
32 | documentation is hereby granted, provided that both the copyright |
||
33 | notice and this permission notice appear in all copies of the |
||
34 | software, derivative works or modified versions, and any portions |
||
35 | thereof, and that both notices appear in supporting documentation, and |
||
36 | that credit is given to Carnegie Mellon University in all documents |
||
37 | and publicity pertaining to direct or indirect use of this code or its |
||
38 | derivatives. |
||
39 | |||
40 | CODA IS AN EXPERIMENTAL SOFTWARE SYSTEM AND IS KNOWN TO HAVE BUGS, |
||
41 | SOME OF WHICH MAY HAVE SERIOUS CONSEQUENCES. CARNEGIE MELLON ALLOWS |
||
42 | FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION. CARNEGIE MELLON |
||
43 | DISCLAIMS ANY LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER |
||
44 | RESULTING DIRECTLY OR INDIRECTLY FROM THE USE OF THIS SOFTWARE OR OF |
||
45 | ANY DERIVATIVE WORK. |
||
46 | |||
47 | Carnegie Mellon encourages users of this software to return any |
||
48 | improvements or extensions that they make, and to grant Carnegie |
||
49 | Mellon the rights to redistribute these changes without encumbrance. |
||
50 | */ |
||
51 | |||
52 | /* |
||
53 | * |
||
54 | * Based on cfs.h from Mach, but revamped for increased simplicity. |
||
55 | * Linux modifications by |
||
56 | * Peter Braam, Aug 1996 |
||
57 | */ |
||
58 | |||
59 | #ifndef _CODA_HEADER_ |
||
60 | #define _CODA_HEADER_ |
||
61 | |||
62 | #include <linux/config.h> |
||
63 | |||
64 | /* Catch new _KERNEL defn for NetBSD and DJGPP/__CYGWIN32__ */ |
||
65 | #if defined(__NetBSD__) || \ |
||
66 | ((defined(DJGPP) || defined(__CYGWIN32__)) && !defined(KERNEL)) |
||
67 | #include <sys/types.h> |
||
68 | #endif |
||
69 | |||
70 | #ifndef CODA_MAXSYMLINKS |
||
71 | #define CODA_MAXSYMLINKS 10 |
||
72 | #endif |
||
73 | |||
74 | #if defined(DJGPP) || defined(__CYGWIN32__) |
||
75 | #ifdef KERNEL |
||
76 | typedef unsigned long u_long; |
||
77 | typedef unsigned int u_int; |
||
78 | typedef unsigned short u_short; |
||
79 | typedef u_long ino_t; |
||
80 | typedef u_long dev_t; |
||
81 | typedef void * caddr_t; |
||
82 | #ifdef DOS |
||
83 | typedef unsigned __int64 u_quad_t; |
||
84 | #else |
||
85 | typedef unsigned long long u_quad_t; |
||
86 | #endif |
||
87 | |||
88 | #define inline |
||
89 | |||
90 | struct timespec { |
||
91 | long ts_sec; |
||
92 | long ts_nsec; |
||
93 | }; |
||
94 | #else /* DJGPP but not KERNEL */ |
||
95 | #include <sys/time.h> |
||
96 | typedef unsigned long long u_quad_t; |
||
97 | #endif /* !KERNEL */ |
||
98 | #endif /* !DJGPP */ |
||
99 | |||
100 | |||
101 | #if defined(__linux__) |
||
102 | #include <linux/time.h> |
||
103 | #define cdev_t u_quad_t |
||
104 | #ifndef __KERNEL__ |
||
105 | #if !defined(_UQUAD_T_) && (!defined(__GLIBC__) || __GLIBC__ < 2) |
||
106 | #define _UQUAD_T_ 1 |
||
107 | typedef unsigned long long u_quad_t; |
||
108 | #endif |
||
109 | #else /*__KERNEL__ */ |
||
110 | typedef unsigned long long u_quad_t; |
||
111 | #endif /* __KERNEL__ */ |
||
112 | #else |
||
113 | #define cdev_t dev_t |
||
114 | #endif |
||
115 | |||
116 | #ifdef __CYGWIN32__ |
||
117 | struct timespec { |
||
118 | time_t tv_sec; /* seconds */ |
||
119 | long tv_nsec; /* nanoseconds */ |
||
120 | }; |
||
121 | #endif |
||
122 | |||
123 | #ifndef __BIT_TYPES_DEFINED__ |
||
124 | #define __BIT_TYPES_DEFINED__ |
||
125 | typedef signed char int8_t; |
||
126 | typedef unsigned char u_int8_t; |
||
127 | typedef short int16_t; |
||
128 | typedef unsigned short u_int16_t; |
||
129 | typedef int int32_t; |
||
130 | typedef unsigned int u_int32_t; |
||
131 | #endif |
||
132 | |||
133 | |||
134 | /* |
||
135 | * Cfs constants |
||
136 | */ |
||
137 | #define CODA_MAXNAMLEN 255 |
||
138 | #define CODA_MAXPATHLEN 1024 |
||
139 | #define CODA_MAXSYMLINK 10 |
||
140 | |||
141 | /* these are Coda's version of O_RDONLY etc combinations |
||
142 | * to deal with VFS open modes |
||
143 | */ |
||
144 | #define C_O_READ 0x001 |
||
145 | #define C_O_WRITE 0x002 |
||
146 | #define C_O_TRUNC 0x010 |
||
147 | #define C_O_EXCL 0x100 |
||
148 | #define C_O_CREAT 0x200 |
||
149 | |||
150 | /* these are to find mode bits in Venus */ |
||
151 | #define C_M_READ 00400 |
||
152 | #define C_M_WRITE 00200 |
||
153 | |||
154 | /* for access Venus will use */ |
||
155 | #define C_A_C_OK 8 /* Test for writing upon create. */ |
||
156 | #define C_A_R_OK 4 /* Test for read permission. */ |
||
157 | #define C_A_W_OK 2 /* Test for write permission. */ |
||
158 | #define C_A_X_OK 1 /* Test for execute permission. */ |
||
159 | #define C_A_F_OK 0 /* Test for existence. */ |
||
160 | |||
161 | |||
162 | |||
163 | #ifndef _VENUS_DIRENT_T_ |
||
164 | #define _VENUS_DIRENT_T_ 1 |
||
165 | struct venus_dirent { |
||
166 | u_int32_t d_fileno; /* file number of entry */ |
||
167 | u_int16_t d_reclen; /* length of this record */ |
||
168 | u_int8_t d_type; /* file type, see below */ |
||
169 | u_int8_t d_namlen; /* length of string in d_name */ |
||
170 | char d_name[CODA_MAXNAMLEN + 1];/* name must be no longer than this */ |
||
171 | }; |
||
172 | #undef DIRSIZ |
||
173 | #define DIRSIZ(dp) ((sizeof (struct venus_dirent) - (CODA_MAXNAMLEN+1)) + \ |
||
174 | (((dp)->d_namlen+1 + 3) &~ 3)) |
||
175 | |||
176 | /* |
||
177 | * File types |
||
178 | */ |
||
179 | #define CDT_UNKNOWN 0 |
||
180 | #define CDT_FIFO 1 |
||
181 | #define CDT_CHR 2 |
||
182 | #define CDT_DIR 4 |
||
183 | #define CDT_BLK 6 |
||
184 | #define CDT_REG 8 |
||
185 | #define CDT_LNK 10 |
||
186 | #define CDT_SOCK 12 |
||
187 | #define CDT_WHT 14 |
||
188 | |||
189 | /* |
||
190 | * Convert between stat structure types and directory types. |
||
191 | */ |
||
192 | #define IFTOCDT(mode) (((mode) & 0170000) >> 12) |
||
193 | #define CDTTOIF(dirtype) ((dirtype) << 12) |
||
194 | |||
195 | #endif |
||
196 | |||
197 | #ifndef _VUID_T_ |
||
198 | #define _VUID_T_ |
||
199 | typedef u_int32_t vuid_t; |
||
200 | typedef u_int32_t vgid_t; |
||
201 | #endif /*_VUID_T_ */ |
||
202 | |||
203 | #ifdef CODA_FS_OLD_API |
||
204 | struct CodaFid { |
||
205 | u_int32_t opaque[3]; |
||
206 | }; |
||
207 | |||
208 | static __inline__ ino_t coda_f2i(struct CodaFid *fid) |
||
209 | { |
||
210 | if ( ! fid ) |
||
211 | return 0; |
||
212 | if (fid->opaque[1] == 0xfffffffe || fid->opaque[1] == 0xffffffff) |
||
213 | return ((fid->opaque[0] << 20) | (fid->opaque[2] & 0xfffff)); |
||
214 | else |
||
215 | return (fid->opaque[2] + (fid->opaque[1]<<10) + (fid->opaque[0]<<20)); |
||
216 | } |
||
217 | |||
218 | struct coda_cred { |
||
219 | vuid_t cr_uid, cr_euid, cr_suid, cr_fsuid; /* Real, efftve, set, fs uid*/ |
||
220 | vgid_t cr_groupid, cr_egid, cr_sgid, cr_fsgid; /* same for groups */ |
||
221 | }; |
||
222 | |||
223 | #else /* not defined(CODA_FS_OLD_API) */ |
||
224 | |||
225 | struct CodaFid { |
||
226 | u_int32_t opaque[4]; |
||
227 | }; |
||
228 | |||
229 | #define coda_f2i(fid)\ |
||
230 | (fid ? (fid->opaque[3] ^ (fid->opaque[2]<<10) ^ (fid->opaque[1]<<20) ^ fid->opaque[0]) : 0) |
||
231 | |||
232 | #endif |
||
233 | |||
234 | #ifndef _VENUS_VATTR_T_ |
||
235 | #define _VENUS_VATTR_T_ |
||
236 | /* |
||
237 | * Vnode types. VNON means no type. |
||
238 | */ |
||
239 | enum coda_vtype { C_VNON, C_VREG, C_VDIR, C_VBLK, C_VCHR, C_VLNK, C_VSOCK, C_VFIFO, C_VBAD }; |
||
240 | |||
241 | struct coda_vattr { |
||
242 | long va_type; /* vnode type (for create) */ |
||
243 | u_short va_mode; /* files access mode and type */ |
||
244 | short va_nlink; /* number of references to file */ |
||
245 | vuid_t va_uid; /* owner user id */ |
||
246 | vgid_t va_gid; /* owner group id */ |
||
247 | long va_fileid; /* file id */ |
||
248 | u_quad_t va_size; /* file size in bytes */ |
||
249 | long va_blocksize; /* blocksize preferred for i/o */ |
||
250 | struct timespec va_atime; /* time of last access */ |
||
251 | struct timespec va_mtime; /* time of last modification */ |
||
252 | struct timespec va_ctime; /* time file changed */ |
||
253 | u_long va_gen; /* generation number of file */ |
||
254 | u_long va_flags; /* flags defined for file */ |
||
255 | cdev_t va_rdev; /* device special file represents */ |
||
256 | u_quad_t va_bytes; /* bytes of disk space held by file */ |
||
257 | u_quad_t va_filerev; /* file modification number */ |
||
258 | }; |
||
259 | |||
260 | #endif |
||
261 | |||
262 | /* structure used by CODA_STATFS for getting cache information from venus */ |
||
263 | struct coda_statfs { |
||
264 | int32_t f_blocks; |
||
265 | int32_t f_bfree; |
||
266 | int32_t f_bavail; |
||
267 | int32_t f_files; |
||
268 | int32_t f_ffree; |
||
269 | }; |
||
270 | |||
271 | /* |
||
272 | * Kernel <--> Venus communications. |
||
273 | */ |
||
274 | |||
275 | #define CODA_ROOT 2 |
||
276 | #define CODA_OPEN_BY_FD 3 |
||
277 | #define CODA_OPEN 4 |
||
278 | #define CODA_CLOSE 5 |
||
279 | #define CODA_IOCTL 6 |
||
280 | #define CODA_GETATTR 7 |
||
281 | #define CODA_SETATTR 8 |
||
282 | #define CODA_ACCESS 9 |
||
283 | #define CODA_LOOKUP 10 |
||
284 | #define CODA_CREATE 11 |
||
285 | #define CODA_REMOVE 12 |
||
286 | #define CODA_LINK 13 |
||
287 | #define CODA_RENAME 14 |
||
288 | #define CODA_MKDIR 15 |
||
289 | #define CODA_RMDIR 16 |
||
290 | #define CODA_SYMLINK 18 |
||
291 | #define CODA_READLINK 19 |
||
292 | #define CODA_FSYNC 20 |
||
293 | #define CODA_VGET 22 |
||
294 | #define CODA_SIGNAL 23 |
||
295 | #define CODA_REPLACE 24 /* DOWNCALL */ |
||
296 | #define CODA_FLUSH 25 /* DOWNCALL */ |
||
297 | #define CODA_PURGEUSER 26 /* DOWNCALL */ |
||
298 | #define CODA_ZAPFILE 27 /* DOWNCALL */ |
||
299 | #define CODA_ZAPDIR 28 /* DOWNCALL */ |
||
300 | #define CODA_PURGEFID 30 /* DOWNCALL */ |
||
301 | #define CODA_OPEN_BY_PATH 31 |
||
302 | #define CODA_RESOLVE 32 |
||
303 | #define CODA_REINTEGRATE 33 |
||
304 | #define CODA_STATFS 34 |
||
305 | #define CODA_STORE 35 |
||
306 | #define CODA_RELEASE 36 |
||
307 | #define CODA_NCALLS 37 |
||
308 | |||
309 | #define DOWNCALL(opcode) (opcode >= CODA_REPLACE && opcode <= CODA_PURGEFID) |
||
310 | |||
311 | #define VC_MAXDATASIZE 8192 |
||
312 | #define VC_MAXMSGSIZE sizeof(union inputArgs)+sizeof(union outputArgs) +\ |
||
313 | VC_MAXDATASIZE |
||
314 | |||
315 | #define CIOC_KERNEL_VERSION _IOWR('c', 10, size_t) |
||
316 | |||
317 | #if 0 |
||
318 | #define CODA_KERNEL_VERSION 0 /* don't care about kernel version number */ |
||
319 | #define CODA_KERNEL_VERSION 1 /* The old venus 4.6 compatible interface */ |
||
320 | #endif |
||
321 | #ifdef CODA_FS_OLD_API |
||
322 | #define CODA_KERNEL_VERSION 2 /* venus_lookup got an extra parameter */ |
||
323 | #else |
||
324 | #define CODA_KERNEL_VERSION 3 /* 128-bit file identifiers */ |
||
325 | #endif |
||
326 | |||
327 | /* |
||
328 | * Venus <-> Coda RPC arguments |
||
329 | */ |
||
330 | struct coda_in_hdr { |
||
331 | u_int32_t opcode; |
||
332 | u_int32_t unique; /* Keep multiple outstanding msgs distinct */ |
||
333 | #ifdef CODA_FS_OLD_API |
||
334 | u_int16_t pid; /* Common to all */ |
||
335 | u_int16_t pgid; /* Common to all */ |
||
336 | u_int16_t sid; /* Common to all */ |
||
337 | struct coda_cred cred; /* Common to all */ |
||
338 | #else |
||
339 | pid_t pid; |
||
340 | pid_t pgid; |
||
341 | vuid_t uid; |
||
342 | #endif |
||
343 | }; |
||
344 | |||
345 | /* Really important that opcode and unique are 1st two fields! */ |
||
346 | struct coda_out_hdr { |
||
347 | u_int32_t opcode; |
||
348 | u_int32_t unique; |
||
349 | u_int32_t result; |
||
350 | }; |
||
351 | |||
352 | /* coda_root: NO_IN */ |
||
353 | struct coda_root_out { |
||
354 | struct coda_out_hdr oh; |
||
355 | struct CodaFid VFid; |
||
356 | }; |
||
357 | |||
358 | struct coda_root_in { |
||
359 | struct coda_in_hdr in; |
||
360 | }; |
||
361 | |||
362 | /* coda_open: */ |
||
363 | struct coda_open_in { |
||
364 | struct coda_in_hdr ih; |
||
365 | struct CodaFid VFid; |
||
366 | int flags; |
||
367 | }; |
||
368 | |||
369 | struct coda_open_out { |
||
370 | struct coda_out_hdr oh; |
||
371 | cdev_t dev; |
||
372 | ino_t inode; |
||
373 | }; |
||
374 | |||
375 | |||
376 | /* coda_store: */ |
||
377 | struct coda_store_in { |
||
378 | struct coda_in_hdr ih; |
||
379 | struct CodaFid VFid; |
||
380 | int flags; |
||
381 | }; |
||
382 | |||
383 | struct coda_store_out { |
||
384 | struct coda_out_hdr out; |
||
385 | }; |
||
386 | |||
387 | /* coda_release: */ |
||
388 | struct coda_release_in { |
||
389 | struct coda_in_hdr ih; |
||
390 | struct CodaFid VFid; |
||
391 | int flags; |
||
392 | }; |
||
393 | |||
394 | struct coda_release_out { |
||
395 | struct coda_out_hdr out; |
||
396 | }; |
||
397 | |||
398 | /* coda_close: */ |
||
399 | struct coda_close_in { |
||
400 | struct coda_in_hdr ih; |
||
401 | struct CodaFid VFid; |
||
402 | int flags; |
||
403 | }; |
||
404 | |||
405 | struct coda_close_out { |
||
406 | struct coda_out_hdr out; |
||
407 | }; |
||
408 | |||
409 | /* coda_ioctl: */ |
||
410 | struct coda_ioctl_in { |
||
411 | struct coda_in_hdr ih; |
||
412 | struct CodaFid VFid; |
||
413 | int cmd; |
||
414 | int len; |
||
415 | int rwflag; |
||
416 | char *data; /* Place holder for data. */ |
||
417 | }; |
||
418 | |||
419 | struct coda_ioctl_out { |
||
420 | struct coda_out_hdr oh; |
||
421 | int len; |
||
422 | caddr_t data; /* Place holder for data. */ |
||
423 | }; |
||
424 | |||
425 | |||
426 | /* coda_getattr: */ |
||
427 | struct coda_getattr_in { |
||
428 | struct coda_in_hdr ih; |
||
429 | struct CodaFid VFid; |
||
430 | }; |
||
431 | |||
432 | struct coda_getattr_out { |
||
433 | struct coda_out_hdr oh; |
||
434 | struct coda_vattr attr; |
||
435 | }; |
||
436 | |||
437 | |||
438 | /* coda_setattr: NO_OUT */ |
||
439 | struct coda_setattr_in { |
||
440 | struct coda_in_hdr ih; |
||
441 | struct CodaFid VFid; |
||
442 | struct coda_vattr attr; |
||
443 | }; |
||
444 | |||
445 | struct coda_setattr_out { |
||
446 | struct coda_out_hdr out; |
||
447 | }; |
||
448 | |||
449 | /* coda_access: NO_OUT */ |
||
450 | struct coda_access_in { |
||
451 | struct coda_in_hdr ih; |
||
452 | struct CodaFid VFid; |
||
453 | int flags; |
||
454 | }; |
||
455 | |||
456 | struct coda_access_out { |
||
457 | struct coda_out_hdr out; |
||
458 | }; |
||
459 | |||
460 | |||
461 | /* lookup flags */ |
||
462 | #define CLU_CASE_SENSITIVE 0x01 |
||
463 | #define CLU_CASE_INSENSITIVE 0x02 |
||
464 | |||
465 | /* coda_lookup: */ |
||
466 | struct coda_lookup_in { |
||
467 | struct coda_in_hdr ih; |
||
468 | struct CodaFid VFid; |
||
469 | int name; /* Place holder for data. */ |
||
470 | int flags; |
||
471 | }; |
||
472 | |||
473 | struct coda_lookup_out { |
||
474 | struct coda_out_hdr oh; |
||
475 | struct CodaFid VFid; |
||
476 | int vtype; |
||
477 | }; |
||
478 | |||
479 | |||
480 | /* coda_create: */ |
||
481 | struct coda_create_in { |
||
482 | struct coda_in_hdr ih; |
||
483 | struct CodaFid VFid; |
||
484 | struct coda_vattr attr; |
||
485 | int excl; |
||
486 | int mode; |
||
487 | int name; /* Place holder for data. */ |
||
488 | }; |
||
489 | |||
490 | struct coda_create_out { |
||
491 | struct coda_out_hdr oh; |
||
492 | struct CodaFid VFid; |
||
493 | struct coda_vattr attr; |
||
494 | }; |
||
495 | |||
496 | |||
497 | /* coda_remove: NO_OUT */ |
||
498 | struct coda_remove_in { |
||
499 | struct coda_in_hdr ih; |
||
500 | struct CodaFid VFid; |
||
501 | int name; /* Place holder for data. */ |
||
502 | }; |
||
503 | |||
504 | struct coda_remove_out { |
||
505 | struct coda_out_hdr out; |
||
506 | }; |
||
507 | |||
508 | /* coda_link: NO_OUT */ |
||
509 | struct coda_link_in { |
||
510 | struct coda_in_hdr ih; |
||
511 | struct CodaFid sourceFid; /* cnode to link *to* */ |
||
512 | struct CodaFid destFid; /* Directory in which to place link */ |
||
513 | int tname; /* Place holder for data. */ |
||
514 | }; |
||
515 | |||
516 | struct coda_link_out { |
||
517 | struct coda_out_hdr out; |
||
518 | }; |
||
519 | |||
520 | |||
521 | /* coda_rename: NO_OUT */ |
||
522 | struct coda_rename_in { |
||
523 | struct coda_in_hdr ih; |
||
524 | struct CodaFid sourceFid; |
||
525 | int srcname; |
||
526 | struct CodaFid destFid; |
||
527 | int destname; |
||
528 | }; |
||
529 | |||
530 | struct coda_rename_out { |
||
531 | struct coda_out_hdr out; |
||
532 | }; |
||
533 | |||
534 | /* coda_mkdir: */ |
||
535 | struct coda_mkdir_in { |
||
536 | struct coda_in_hdr ih; |
||
537 | struct CodaFid VFid; |
||
538 | struct coda_vattr attr; |
||
539 | int name; /* Place holder for data. */ |
||
540 | }; |
||
541 | |||
542 | struct coda_mkdir_out { |
||
543 | struct coda_out_hdr oh; |
||
544 | struct CodaFid VFid; |
||
545 | struct coda_vattr attr; |
||
546 | }; |
||
547 | |||
548 | |||
549 | /* coda_rmdir: NO_OUT */ |
||
550 | struct coda_rmdir_in { |
||
551 | struct coda_in_hdr ih; |
||
552 | struct CodaFid VFid; |
||
553 | int name; /* Place holder for data. */ |
||
554 | }; |
||
555 | |||
556 | struct coda_rmdir_out { |
||
557 | struct coda_out_hdr out; |
||
558 | }; |
||
559 | |||
560 | /* coda_symlink: NO_OUT */ |
||
561 | struct coda_symlink_in { |
||
562 | struct coda_in_hdr ih; |
||
563 | struct CodaFid VFid; /* Directory to put symlink in */ |
||
564 | int srcname; |
||
565 | struct coda_vattr attr; |
||
566 | int tname; |
||
567 | }; |
||
568 | |||
569 | struct coda_symlink_out { |
||
570 | struct coda_out_hdr out; |
||
571 | }; |
||
572 | |||
573 | /* coda_readlink: */ |
||
574 | struct coda_readlink_in { |
||
575 | struct coda_in_hdr ih; |
||
576 | struct CodaFid VFid; |
||
577 | }; |
||
578 | |||
579 | struct coda_readlink_out { |
||
580 | struct coda_out_hdr oh; |
||
581 | int count; |
||
582 | caddr_t data; /* Place holder for data. */ |
||
583 | }; |
||
584 | |||
585 | |||
586 | /* coda_fsync: NO_OUT */ |
||
587 | struct coda_fsync_in { |
||
588 | struct coda_in_hdr ih; |
||
589 | struct CodaFid VFid; |
||
590 | }; |
||
591 | |||
592 | struct coda_fsync_out { |
||
593 | struct coda_out_hdr out; |
||
594 | }; |
||
595 | |||
596 | /* coda_vget: */ |
||
597 | struct coda_vget_in { |
||
598 | struct coda_in_hdr ih; |
||
599 | struct CodaFid VFid; |
||
600 | }; |
||
601 | |||
602 | struct coda_vget_out { |
||
603 | struct coda_out_hdr oh; |
||
604 | struct CodaFid VFid; |
||
605 | int vtype; |
||
606 | }; |
||
607 | |||
608 | |||
609 | /* CODA_SIGNAL is out-of-band, doesn't need data. */ |
||
610 | /* CODA_INVALIDATE is a venus->kernel call */ |
||
611 | /* CODA_FLUSH is a venus->kernel call */ |
||
612 | |||
613 | /* coda_purgeuser: */ |
||
614 | /* CODA_PURGEUSER is a venus->kernel call */ |
||
615 | struct coda_purgeuser_out { |
||
616 | struct coda_out_hdr oh; |
||
617 | #ifdef CODA_FS_OLD_API |
||
618 | struct coda_cred cred; |
||
619 | #else |
||
620 | vuid_t uid; |
||
621 | #endif |
||
622 | }; |
||
623 | |||
624 | /* coda_zapfile: */ |
||
625 | /* CODA_ZAPFILE is a venus->kernel call */ |
||
626 | struct coda_zapfile_out { |
||
627 | struct coda_out_hdr oh; |
||
628 | struct CodaFid CodaFid; |
||
629 | }; |
||
630 | |||
631 | /* coda_zapdir: */ |
||
632 | /* CODA_ZAPDIR is a venus->kernel call */ |
||
633 | struct coda_zapdir_out { |
||
634 | struct coda_out_hdr oh; |
||
635 | struct CodaFid CodaFid; |
||
636 | }; |
||
637 | |||
638 | /* coda_purgefid: */ |
||
639 | /* CODA_PURGEFID is a venus->kernel call */ |
||
640 | struct coda_purgefid_out { |
||
641 | struct coda_out_hdr oh; |
||
642 | struct CodaFid CodaFid; |
||
643 | }; |
||
644 | |||
645 | /* coda_replace: */ |
||
646 | /* CODA_REPLACE is a venus->kernel call */ |
||
647 | struct coda_replace_out { /* coda_replace is a venus->kernel call */ |
||
648 | struct coda_out_hdr oh; |
||
649 | struct CodaFid NewFid; |
||
650 | struct CodaFid OldFid; |
||
651 | }; |
||
652 | |||
653 | /* coda_open_by_fd: */ |
||
654 | struct coda_open_by_fd_in { |
||
655 | struct coda_in_hdr ih; |
||
656 | struct CodaFid VFid; |
||
657 | int flags; |
||
658 | }; |
||
659 | |||
660 | struct coda_open_by_fd_out { |
||
661 | struct coda_out_hdr oh; |
||
662 | int fd; |
||
663 | |||
664 | #ifdef __KERNEL__ |
||
665 | struct file *fh; /* not passed from userspace but used in-kernel only */ |
||
666 | #endif |
||
667 | }; |
||
668 | |||
669 | /* coda_open_by_path: */ |
||
670 | struct coda_open_by_path_in { |
||
671 | struct coda_in_hdr ih; |
||
672 | struct CodaFid VFid; |
||
673 | int flags; |
||
674 | }; |
||
675 | |||
676 | struct coda_open_by_path_out { |
||
677 | struct coda_out_hdr oh; |
||
678 | int path; |
||
679 | }; |
||
680 | |||
681 | /* coda_statfs: NO_IN */ |
||
682 | struct coda_statfs_in { |
||
683 | struct coda_in_hdr in; |
||
684 | }; |
||
685 | |||
686 | struct coda_statfs_out { |
||
687 | struct coda_out_hdr oh; |
||
688 | struct coda_statfs stat; |
||
689 | }; |
||
690 | |||
691 | /* |
||
692 | * Occasionally, we don't cache the fid returned by CODA_LOOKUP. |
||
693 | * For instance, if the fid is inconsistent. |
||
694 | * This case is handled by setting the top bit of the type result parameter. |
||
695 | */ |
||
696 | #define CODA_NOCACHE 0x80000000 |
||
697 | |||
698 | union inputArgs { |
||
699 | struct coda_in_hdr ih; /* NB: every struct below begins with an ih */ |
||
700 | struct coda_open_in coda_open; |
||
701 | struct coda_store_in coda_store; |
||
702 | struct coda_release_in coda_release; |
||
703 | struct coda_close_in coda_close; |
||
704 | struct coda_ioctl_in coda_ioctl; |
||
705 | struct coda_getattr_in coda_getattr; |
||
706 | struct coda_setattr_in coda_setattr; |
||
707 | struct coda_access_in coda_access; |
||
708 | struct coda_lookup_in coda_lookup; |
||
709 | struct coda_create_in coda_create; |
||
710 | struct coda_remove_in coda_remove; |
||
711 | struct coda_link_in coda_link; |
||
712 | struct coda_rename_in coda_rename; |
||
713 | struct coda_mkdir_in coda_mkdir; |
||
714 | struct coda_rmdir_in coda_rmdir; |
||
715 | struct coda_symlink_in coda_symlink; |
||
716 | struct coda_readlink_in coda_readlink; |
||
717 | struct coda_fsync_in coda_fsync; |
||
718 | struct coda_vget_in coda_vget; |
||
719 | struct coda_open_by_fd_in coda_open_by_fd; |
||
720 | struct coda_open_by_path_in coda_open_by_path; |
||
721 | struct coda_statfs_in coda_statfs; |
||
722 | }; |
||
723 | |||
724 | union outputArgs { |
||
725 | struct coda_out_hdr oh; /* NB: every struct below begins with an oh */ |
||
726 | struct coda_root_out coda_root; |
||
727 | struct coda_open_out coda_open; |
||
728 | struct coda_ioctl_out coda_ioctl; |
||
729 | struct coda_getattr_out coda_getattr; |
||
730 | struct coda_lookup_out coda_lookup; |
||
731 | struct coda_create_out coda_create; |
||
732 | struct coda_mkdir_out coda_mkdir; |
||
733 | struct coda_readlink_out coda_readlink; |
||
734 | struct coda_vget_out coda_vget; |
||
735 | struct coda_purgeuser_out coda_purgeuser; |
||
736 | struct coda_zapfile_out coda_zapfile; |
||
737 | struct coda_zapdir_out coda_zapdir; |
||
738 | struct coda_purgefid_out coda_purgefid; |
||
739 | struct coda_replace_out coda_replace; |
||
740 | struct coda_open_by_fd_out coda_open_by_fd; |
||
741 | struct coda_open_by_path_out coda_open_by_path; |
||
742 | struct coda_statfs_out coda_statfs; |
||
743 | }; |
||
744 | |||
745 | union coda_downcalls { |
||
746 | /* CODA_INVALIDATE is a venus->kernel call */ |
||
747 | /* CODA_FLUSH is a venus->kernel call */ |
||
748 | struct coda_purgeuser_out purgeuser; |
||
749 | struct coda_zapfile_out zapfile; |
||
750 | struct coda_zapdir_out zapdir; |
||
751 | struct coda_purgefid_out purgefid; |
||
752 | struct coda_replace_out replace; |
||
753 | }; |
||
754 | |||
755 | |||
756 | /* |
||
757 | * Used for identifying usage of "Control" and pioctls |
||
758 | */ |
||
759 | |||
760 | #define PIOCPARM_MASK 0x0000ffff |
||
761 | struct ViceIoctl { |
||
762 | caddr_t in, out; /* Data to be transferred in, or out */ |
||
763 | short in_size; /* Size of input buffer <= 2K */ |
||
764 | short out_size; /* Maximum size of output buffer, <= 2K */ |
||
765 | }; |
||
766 | |||
767 | struct PioctlData { |
||
768 | const char *path; |
||
769 | int follow; |
||
770 | struct ViceIoctl vi; |
||
771 | }; |
||
772 | |||
773 | #define CODA_CONTROL ".CONTROL" |
||
774 | #define CODA_CONTROLLEN 8 |
||
775 | #define CTL_INO -1 |
||
776 | |||
777 | /* Data passed to mount */ |
||
778 | |||
779 | #define CODA_MOUNT_VERSION 1 |
||
780 | |||
781 | struct coda_mount_data { |
||
782 | int version; |
||
783 | int fd; /* Opened device */ |
||
784 | }; |
||
785 | |||
786 | #endif |
||
787 |