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