1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 #ifndef _UAPI_CODA_HEADER_
60 #define _UAPI_CODA_HEADER_
61
62
63
64 #if defined(__NetBSD__) || \
65 ((defined(DJGPP) || defined(__CYGWIN32__)) && !defined(KERNEL))
66 #include <sys/types.h>
67 #endif
68
69 #ifndef CODA_MAXSYMLINKS
70 #define CODA_MAXSYMLINKS 10
71 #endif
72
73 #if defined(DJGPP) || defined(__CYGWIN32__)
74 #ifdef KERNEL
75 typedef unsigned long u_long;
76 typedef unsigned int u_int;
77 typedef unsigned short u_short;
78 typedef u_long ino_t;
79 typedef u_long dev_t;
80 typedef void * caddr_t;
81 #ifdef DOS
82 typedef unsigned __int64 u_quad_t;
83 #else
84 typedef unsigned long long u_quad_t;
85 #endif
86
87 #define inline
88
89 #else
90 #include <sys/time.h>
91 typedef unsigned long long u_quad_t;
92 #endif
93 #endif
94
95
96 #if defined(__linux__)
97 #include <linux/time.h>
98 #define cdev_t u_quad_t
99 #ifndef __KERNEL__
100 #if !defined(_UQUAD_T_) && (!defined(__GLIBC__) || __GLIBC__ < 2)
101 #define _UQUAD_T_ 1
102 typedef unsigned long long u_quad_t;
103 #endif
104 #endif
105 #else
106 #define cdev_t dev_t
107 #endif
108
109 #ifndef __BIT_TYPES_DEFINED__
110 #define __BIT_TYPES_DEFINED__
111 typedef signed char int8_t;
112 typedef unsigned char u_int8_t;
113 typedef short int16_t;
114 typedef unsigned short u_int16_t;
115 typedef int int32_t;
116 typedef unsigned int u_int32_t;
117 #endif
118
119
120
121
122
123 #define CODA_MAXNAMLEN 255
124 #define CODA_MAXPATHLEN 1024
125 #define CODA_MAXSYMLINK 10
126
127
128
129
130 #define C_O_READ 0x001
131 #define C_O_WRITE 0x002
132 #define C_O_TRUNC 0x010
133 #define C_O_EXCL 0x100
134 #define C_O_CREAT 0x200
135
136
137 #define C_M_READ 00400
138 #define C_M_WRITE 00200
139
140
141 #define C_A_C_OK 8
142 #define C_A_R_OK 4
143 #define C_A_W_OK 2
144 #define C_A_X_OK 1
145 #define C_A_F_OK 0
146
147
148
149 #ifndef _VENUS_DIRENT_T_
150 #define _VENUS_DIRENT_T_ 1
151 struct venus_dirent {
152 u_int32_t d_fileno;
153 u_int16_t d_reclen;
154 u_int8_t d_type;
155 u_int8_t d_namlen;
156 char d_name[CODA_MAXNAMLEN + 1];
157 };
158 #undef DIRSIZ
159 #define DIRSIZ(dp) ((sizeof (struct venus_dirent) - (CODA_MAXNAMLEN+1)) + \
160 (((dp)->d_namlen+1 + 3) &~ 3))
161
162
163
164
165 #define CDT_UNKNOWN 0
166 #define CDT_FIFO 1
167 #define CDT_CHR 2
168 #define CDT_DIR 4
169 #define CDT_BLK 6
170 #define CDT_REG 8
171 #define CDT_LNK 10
172 #define CDT_SOCK 12
173 #define CDT_WHT 14
174
175
176
177
178 #define IFTOCDT(mode) (((mode) & 0170000) >> 12)
179 #define CDTTOIF(dirtype) ((dirtype) << 12)
180
181 #endif
182
183 #ifndef _VUID_T_
184 #define _VUID_T_
185 typedef u_int32_t vuid_t;
186 typedef u_int32_t vgid_t;
187 #endif
188
189 struct CodaFid {
190 u_int32_t opaque[4];
191 };
192
193 #define coda_f2i(fid)\
194 (fid ? (fid->opaque[3] ^ (fid->opaque[2]<<10) ^ (fid->opaque[1]<<20) ^ fid->opaque[0]) : 0)
195
196 #ifndef _VENUS_VATTR_T_
197 #define _VENUS_VATTR_T_
198
199
200
201 enum coda_vtype { C_VNON, C_VREG, C_VDIR, C_VBLK, C_VCHR, C_VLNK, C_VSOCK, C_VFIFO, C_VBAD };
202
203 struct coda_timespec {
204 int64_t tv_sec;
205 long tv_nsec;
206 };
207
208 struct coda_vattr {
209 long va_type;
210 u_short va_mode;
211 short va_nlink;
212 vuid_t va_uid;
213 vgid_t va_gid;
214 long va_fileid;
215 u_quad_t va_size;
216 long va_blocksize;
217 struct coda_timespec va_atime;
218 struct coda_timespec va_mtime;
219 struct coda_timespec va_ctime;
220 u_long va_gen;
221 u_long va_flags;
222 cdev_t va_rdev;
223 u_quad_t va_bytes;
224 u_quad_t va_filerev;
225 };
226
227 #endif
228
229
230 struct coda_statfs {
231 int32_t f_blocks;
232 int32_t f_bfree;
233 int32_t f_bavail;
234 int32_t f_files;
235 int32_t f_ffree;
236 };
237
238
239
240
241
242 #define CODA_ROOT 2
243 #define CODA_OPEN_BY_FD 3
244 #define CODA_OPEN 4
245 #define CODA_CLOSE 5
246 #define CODA_IOCTL 6
247 #define CODA_GETATTR 7
248 #define CODA_SETATTR 8
249 #define CODA_ACCESS 9
250 #define CODA_LOOKUP 10
251 #define CODA_CREATE 11
252 #define CODA_REMOVE 12
253 #define CODA_LINK 13
254 #define CODA_RENAME 14
255 #define CODA_MKDIR 15
256 #define CODA_RMDIR 16
257 #define CODA_SYMLINK 18
258 #define CODA_READLINK 19
259 #define CODA_FSYNC 20
260 #define CODA_VGET 22
261 #define CODA_SIGNAL 23
262 #define CODA_REPLACE 24
263 #define CODA_FLUSH 25
264 #define CODA_PURGEUSER 26
265 #define CODA_ZAPFILE 27
266 #define CODA_ZAPDIR 28
267 #define CODA_PURGEFID 30
268 #define CODA_OPEN_BY_PATH 31
269 #define CODA_RESOLVE 32
270 #define CODA_REINTEGRATE 33
271 #define CODA_STATFS 34
272 #define CODA_STORE 35
273 #define CODA_RELEASE 36
274 #define CODA_ACCESS_INTENT 37
275 #define CODA_NCALLS 38
276
277 #define DOWNCALL(opcode) (opcode >= CODA_REPLACE && opcode <= CODA_PURGEFID)
278
279 #define VC_MAXDATASIZE 8192
280 #define VC_MAXMSGSIZE sizeof(union inputArgs)+sizeof(union outputArgs) +\
281 VC_MAXDATASIZE
282
283 #define CIOC_KERNEL_VERSION _IOWR('c', 10, size_t)
284
285
286
287
288
289
290 #define CODA_KERNEL_VERSION 5
291
292
293
294
295 struct coda_in_hdr {
296 u_int32_t opcode;
297 u_int32_t unique;
298 __kernel_pid_t pid;
299 __kernel_pid_t pgid;
300 vuid_t uid;
301 };
302
303
304 struct coda_out_hdr {
305 u_int32_t opcode;
306 u_int32_t unique;
307 u_int32_t result;
308 };
309
310
311 struct coda_root_out {
312 struct coda_out_hdr oh;
313 struct CodaFid VFid;
314 };
315
316 struct coda_root_in {
317 struct coda_in_hdr in;
318 };
319
320
321 struct coda_open_in {
322 struct coda_in_hdr ih;
323 struct CodaFid VFid;
324 int flags;
325 };
326
327 struct coda_open_out {
328 struct coda_out_hdr oh;
329 cdev_t dev;
330 ino_t inode;
331 };
332
333
334
335 struct coda_store_in {
336 struct coda_in_hdr ih;
337 struct CodaFid VFid;
338 int flags;
339 };
340
341 struct coda_store_out {
342 struct coda_out_hdr out;
343 };
344
345
346 struct coda_release_in {
347 struct coda_in_hdr ih;
348 struct CodaFid VFid;
349 int flags;
350 };
351
352 struct coda_release_out {
353 struct coda_out_hdr out;
354 };
355
356
357 struct coda_close_in {
358 struct coda_in_hdr ih;
359 struct CodaFid VFid;
360 int flags;
361 };
362
363 struct coda_close_out {
364 struct coda_out_hdr out;
365 };
366
367
368 struct coda_ioctl_in {
369 struct coda_in_hdr ih;
370 struct CodaFid VFid;
371 int cmd;
372 int len;
373 int rwflag;
374 char *data;
375 };
376
377 struct coda_ioctl_out {
378 struct coda_out_hdr oh;
379 int len;
380 caddr_t data;
381 };
382
383
384
385 struct coda_getattr_in {
386 struct coda_in_hdr ih;
387 struct CodaFid VFid;
388 };
389
390 struct coda_getattr_out {
391 struct coda_out_hdr oh;
392 struct coda_vattr attr;
393 };
394
395
396
397 struct coda_setattr_in {
398 struct coda_in_hdr ih;
399 struct CodaFid VFid;
400 struct coda_vattr attr;
401 };
402
403 struct coda_setattr_out {
404 struct coda_out_hdr out;
405 };
406
407
408 struct coda_access_in {
409 struct coda_in_hdr ih;
410 struct CodaFid VFid;
411 int flags;
412 };
413
414 struct coda_access_out {
415 struct coda_out_hdr out;
416 };
417
418
419
420 #define CLU_CASE_SENSITIVE 0x01
421 #define CLU_CASE_INSENSITIVE 0x02
422
423
424 struct coda_lookup_in {
425 struct coda_in_hdr ih;
426 struct CodaFid VFid;
427 int name;
428 int flags;
429 };
430
431 struct coda_lookup_out {
432 struct coda_out_hdr oh;
433 struct CodaFid VFid;
434 int vtype;
435 };
436
437
438
439 struct coda_create_in {
440 struct coda_in_hdr ih;
441 struct CodaFid VFid;
442 struct coda_vattr attr;
443 int excl;
444 int mode;
445 int name;
446 };
447
448 struct coda_create_out {
449 struct coda_out_hdr oh;
450 struct CodaFid VFid;
451 struct coda_vattr attr;
452 };
453
454
455
456 struct coda_remove_in {
457 struct coda_in_hdr ih;
458 struct CodaFid VFid;
459 int name;
460 };
461
462 struct coda_remove_out {
463 struct coda_out_hdr out;
464 };
465
466
467 struct coda_link_in {
468 struct coda_in_hdr ih;
469 struct CodaFid sourceFid;
470 struct CodaFid destFid;
471 int tname;
472 };
473
474 struct coda_link_out {
475 struct coda_out_hdr out;
476 };
477
478
479
480 struct coda_rename_in {
481 struct coda_in_hdr ih;
482 struct CodaFid sourceFid;
483 int srcname;
484 struct CodaFid destFid;
485 int destname;
486 };
487
488 struct coda_rename_out {
489 struct coda_out_hdr out;
490 };
491
492
493 struct coda_mkdir_in {
494 struct coda_in_hdr ih;
495 struct CodaFid VFid;
496 struct coda_vattr attr;
497 int name;
498 };
499
500 struct coda_mkdir_out {
501 struct coda_out_hdr oh;
502 struct CodaFid VFid;
503 struct coda_vattr attr;
504 };
505
506
507
508 struct coda_rmdir_in {
509 struct coda_in_hdr ih;
510 struct CodaFid VFid;
511 int name;
512 };
513
514 struct coda_rmdir_out {
515 struct coda_out_hdr out;
516 };
517
518
519 struct coda_symlink_in {
520 struct coda_in_hdr ih;
521 struct CodaFid VFid;
522 int srcname;
523 struct coda_vattr attr;
524 int tname;
525 };
526
527 struct coda_symlink_out {
528 struct coda_out_hdr out;
529 };
530
531
532 struct coda_readlink_in {
533 struct coda_in_hdr ih;
534 struct CodaFid VFid;
535 };
536
537 struct coda_readlink_out {
538 struct coda_out_hdr oh;
539 int count;
540 caddr_t data;
541 };
542
543
544
545 struct coda_fsync_in {
546 struct coda_in_hdr ih;
547 struct CodaFid VFid;
548 };
549
550 struct coda_fsync_out {
551 struct coda_out_hdr out;
552 };
553
554
555 struct coda_vget_in {
556 struct coda_in_hdr ih;
557 struct CodaFid VFid;
558 };
559
560 struct coda_vget_out {
561 struct coda_out_hdr oh;
562 struct CodaFid VFid;
563 int vtype;
564 };
565
566
567
568
569
570
571
572
573 struct coda_purgeuser_out {
574 struct coda_out_hdr oh;
575 vuid_t uid;
576 };
577
578
579
580 struct coda_zapfile_out {
581 struct coda_out_hdr oh;
582 struct CodaFid CodaFid;
583 };
584
585
586
587 struct coda_zapdir_out {
588 struct coda_out_hdr oh;
589 struct CodaFid CodaFid;
590 };
591
592
593
594 struct coda_purgefid_out {
595 struct coda_out_hdr oh;
596 struct CodaFid CodaFid;
597 };
598
599
600
601 struct coda_replace_out {
602 struct coda_out_hdr oh;
603 struct CodaFid NewFid;
604 struct CodaFid OldFid;
605 };
606
607
608 struct coda_open_by_fd_in {
609 struct coda_in_hdr ih;
610 struct CodaFid VFid;
611 int flags;
612 };
613
614 struct coda_open_by_fd_out {
615 struct coda_out_hdr oh;
616 int fd;
617
618 #ifdef __KERNEL__
619 struct file *fh;
620 #endif
621 };
622
623
624 struct coda_open_by_path_in {
625 struct coda_in_hdr ih;
626 struct CodaFid VFid;
627 int flags;
628 };
629
630 struct coda_open_by_path_out {
631 struct coda_out_hdr oh;
632 int path;
633 };
634
635
636 struct coda_statfs_in {
637 struct coda_in_hdr in;
638 };
639
640 struct coda_statfs_out {
641 struct coda_out_hdr oh;
642 struct coda_statfs stat;
643 };
644
645 #define CODA_ACCESS_TYPE_READ 1
646 #define CODA_ACCESS_TYPE_WRITE 2
647 #define CODA_ACCESS_TYPE_MMAP 3
648 #define CODA_ACCESS_TYPE_READ_FINISH 4
649 #define CODA_ACCESS_TYPE_WRITE_FINISH 5
650
651
652 struct coda_access_intent_in {
653 struct coda_in_hdr ih;
654 struct CodaFid VFid;
655 int count;
656 int pos;
657 int type;
658 };
659
660 struct coda_access_intent_out {
661 struct coda_out_hdr out;
662 };
663
664
665
666
667
668
669 #define CODA_NOCACHE 0x80000000
670
671 union inputArgs {
672 struct coda_in_hdr ih;
673 struct coda_open_in coda_open;
674 struct coda_store_in coda_store;
675 struct coda_release_in coda_release;
676 struct coda_close_in coda_close;
677 struct coda_ioctl_in coda_ioctl;
678 struct coda_getattr_in coda_getattr;
679 struct coda_setattr_in coda_setattr;
680 struct coda_access_in coda_access;
681 struct coda_lookup_in coda_lookup;
682 struct coda_create_in coda_create;
683 struct coda_remove_in coda_remove;
684 struct coda_link_in coda_link;
685 struct coda_rename_in coda_rename;
686 struct coda_mkdir_in coda_mkdir;
687 struct coda_rmdir_in coda_rmdir;
688 struct coda_symlink_in coda_symlink;
689 struct coda_readlink_in coda_readlink;
690 struct coda_fsync_in coda_fsync;
691 struct coda_vget_in coda_vget;
692 struct coda_open_by_fd_in coda_open_by_fd;
693 struct coda_open_by_path_in coda_open_by_path;
694 struct coda_statfs_in coda_statfs;
695 struct coda_access_intent_in coda_access_intent;
696 };
697
698 union outputArgs {
699 struct coda_out_hdr oh;
700 struct coda_root_out coda_root;
701 struct coda_open_out coda_open;
702 struct coda_ioctl_out coda_ioctl;
703 struct coda_getattr_out coda_getattr;
704 struct coda_lookup_out coda_lookup;
705 struct coda_create_out coda_create;
706 struct coda_mkdir_out coda_mkdir;
707 struct coda_readlink_out coda_readlink;
708 struct coda_vget_out coda_vget;
709 struct coda_purgeuser_out coda_purgeuser;
710 struct coda_zapfile_out coda_zapfile;
711 struct coda_zapdir_out coda_zapdir;
712 struct coda_purgefid_out coda_purgefid;
713 struct coda_replace_out coda_replace;
714 struct coda_open_by_fd_out coda_open_by_fd;
715 struct coda_open_by_path_out coda_open_by_path;
716 struct coda_statfs_out coda_statfs;
717 };
718
719 union coda_downcalls {
720
721
722 struct coda_purgeuser_out purgeuser;
723 struct coda_zapfile_out zapfile;
724 struct coda_zapdir_out zapdir;
725 struct coda_purgefid_out purgefid;
726 struct coda_replace_out replace;
727 };
728
729
730
731
732
733
734 #define PIOCPARM_MASK 0x0000ffff
735 struct ViceIoctl {
736 void __user *in;
737 void __user *out;
738 u_short in_size;
739 u_short out_size;
740 };
741
742 struct PioctlData {
743 const char __user *path;
744 int follow;
745 struct ViceIoctl vi;
746 };
747
748 #define CODA_CONTROL ".CONTROL"
749 #define CODA_CONTROLLEN 8
750 #define CTL_INO -1
751
752
753
754 #define CODA_MOUNT_VERSION 1
755
756 struct coda_mount_data {
757 int version;
758 int fd;
759 };
760
761 #endif