libafs-prototypes-20081129
[openafs.git] / src / afs / UKERNEL / sysincludes.h
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  * 
5  * This software has been released under the terms of the IBM Public
6  * License.  For details, see the LICENSE file in the top-level source
7  * directory or online at http://www.openafs.org/dl/license10.html
8  */
9
10 #ifndef __AFS_SYSINCLUDESH__
11 #define __AFS_SYSINCLUDESH__ 1
12
13 #include  <stdio.h>
14 #if !defined(AFS_USR_DARWIN_ENV) && !defined(AFS_USR_FBSD_ENV)  /* must be included after KERNEL undef'd */
15 #include  <errno.h>
16 #endif
17 #include  <stdlib.h>
18 #include  <string.h>
19 #include  <unistd.h>
20 #include  <dirent.h>
21 #include  <limits.h>
22 #include  <assert.h>
23 #include  <stdarg.h>
24 #if !defined(AFS_USR_DARWIN_ENV) && !defined(AFS_USR_FBSD_ENV) /* must be included after KERNEL undef'd */
25 #include <setjmp.h>
26 #endif
27
28 #ifdef AFS_USR_SUN5_ENV
29 #include  <signal.h>
30 #include  <sys/param.h>
31 #include  <sys/types.h>
32 #include  <sys/socket.h>
33 #include  <net/if.h>
34 #include  <sys/sockio.h>
35 #include  <sys/file.h>
36 #include  <sys/stat.h>
37 #include  <sys/fcntl.h>
38 #include  <netinet/in.h>
39 #include  <netdb.h>
40 #include  <arpa/inet.h>
41 #endif /* AFS_USR_SUN5_ENV */
42
43
44 #ifdef AFS_USR_AIX_ENV
45 #include  <sys/param.h>
46 #include  <sys/types.h>
47 #include  <sys/socket.h>
48 #include  <net/if.h>
49 #include  <fcntl.h>
50 #include  <netinet/in.h>
51 #include  <sys/stropts.h>
52 #include  <netdb.h>
53 #include  <sys/timers.h>
54 #include  <arpa/inet.h>
55 #endif /* AFS_USR_AIX_ENV */
56
57 #ifdef AFS_USR_SGI_ENV
58 #include  <sys/param.h>
59 #include  <sys/types.h>
60 #include  <sys/socket.h>
61 #include  <net/if.h>
62 #include  <sys/sockio.h>
63 #include  <sys/file.h>
64 #include  <sys/stat.h>
65 #include  <sys/fcntl.h>
66 #include  <netinet/in.h>
67 #include  <netdb.h>
68 #include  <arpa/inet.h>
69 #endif /* AFS_USR_SGI_ENV */
70
71 #ifdef AFS_USR_HPUX_ENV
72 #include  <sys/param.h>
73 #include  <sys/types.h>
74 #include  <sys/socket.h>
75 #include  <net/if.h>
76 #include  <sys/file.h>
77 #include  <sys/stat.h>
78 #include  <sys/fcntl.h>
79 #include  <netinet/in.h>
80 #include  <netdb.h>
81 #include  <arpa/inet.h>
82 #endif /* AFS_USR_HPUX_ENV */
83
84 #ifdef AFS_USR_OSF_ENV
85 #ifdef KERNEL
86 #undef KERNEL
87 #define AFS_USR_UNDEF_KERNEL_ENV 1
88 #endif
89 #include  <sys/param.h>
90 #include  <sys/types.h>
91 #include  <sys/socket.h>
92 #include  <net/if.h>
93 #include  <sys/file.h>
94 #include  <sys/ioctl.h>
95 #include  <sys/stat.h>
96 #include  <sys/fcntl.h>
97 #include  <netinet/in.h>
98 #include  <netdb.h>
99 #include  <arpa/inet.h>
100 #endif /* AFS_USR_OSF_ENV */
101
102 #ifdef AFS_USR_LINUX22_ENV
103 #include  <sys/ioctl.h>         /* _IOW() */
104 #include  <sys/uio.h>           /* struct iovec */
105 #include  <sys/time.h>          /* struct timeval */
106 #include  <sys/param.h>
107 #include  <sys/types.h>
108 #include  <sys/socket.h>
109 #include  <net/if.h>
110 #include  <sys/file.h>
111 #include  <sys/stat.h>
112 #include  <sys/fcntl.h>
113 #include  <netinet/in.h>
114 #include  <netdb.h>
115 #include  <arpa/inet.h>
116 #define FREAD                   0x0001
117 #endif /* AFS_USR_LINUX22_ENV */
118
119 #if defined(AFS_USR_DARWIN_ENV) || defined(AFS_USR_FBSD_ENV)
120 #ifdef KERNEL
121 #undef KERNEL
122 #define AFS_USR_UNDEF_KERNEL_ENV 1
123 #endif
124 #include  <errno.h>
125 #include  <setjmp.h>
126 #include  <sys/param.h>
127 #include  <sys/types.h>
128 #include  <sys/socket.h>
129 #include  <net/if.h>
130 #include  <sys/file.h>
131 #include  <sys/ioctl.h>
132 #include  <sys/stat.h>
133 #include  <sys/fcntl.h>
134 #include  <sys/uio.h>
135 #include  <netinet/in.h>
136 #include  <netdb.h>
137 #include  <arpa/inet.h>
138 #ifndef O_SYNC
139 #define O_SYNC O_FSYNC
140 #endif
141 #endif /* AFS_USR_DARWIN_ENV || AFS_USR_FBSD_ENV */
142
143 #ifdef AFS_AFSDB_ENV
144 #include <arpa/nameser.h>
145 #include <resolv.h>
146 #endif /* AFS_AFSDB_ENV */
147
148 /* glibc 2.2 has pthread_attr_setstacksize */
149 #if (defined(AFS_LINUX22_ENV) && !defined(AFS_USR_LINUX22_ENV)) || (defined(AFS_USR_LINUX22_ENV) && (__GLIBC_MINOR__ < 2))
150 #define pthread_attr_setstacksize(a,b) 0
151 #endif
152
153 #include  <sys/stat.h>          /* afs_usrops.h uses struct stat in prototypes */
154
155 #ifdef NETSCAPE_NSAPI
156
157 #include  <nsapi.h>
158
159 #else /* NETSCAPE_NSAPI */
160
161 #include  <pthread.h>
162
163 #endif /* NETSCAPE_NSAPI */
164
165 #ifdef AFS_USR_UNDEF_KERNEL_ENV
166 #undef AFS_USR_UNDEF_KERNEL_ENV
167 #define KERNEL 1
168 #endif
169
170 /*
171  * User space versions of kernel data structures.
172  */
173
174 #ifndef MAXNAMLEN
175 #define MAXNAMLEN               512
176 #endif
177
178 /*
179  * This file contains data types and definitions for running
180  * the AFS client in user space. Kernel data structures
181  * are renamed from XXXX to usr_XXXX.
182  */
183
184 #ifdef UKERNEL
185
186 #ifdef AFS_USR_SGI_ENV
187 #undef socket
188 #endif /* AFS_USR_SGI_ENV */
189
190 #if defined(AFS_USR_DARWIN_ENV) || defined(AFS_USR_FBSD_ENV)
191 #undef if_mtu
192 #undef if_metric
193 #endif
194
195 #define mount                   usr_mount
196 #define fs                      usr_fs
197 #define uio                     usr_uio
198 #define fileops                 usr_fileops
199 #define vnodeops                usr_vnodeops
200 #define vnode                   usr_vnode
201 #define inode                   usr_inode
202 #define whymountroot_t          usr_whymountroot_t
203 #define vfsops                  usr_vfsops
204 #define vfs                     usr_vfs
205 #define vattr                   usr_vattr
206 #define buf                     usr_buf
207 #define statfs                  usr_statfs
208 #define ucred                   usr_ucred
209 #define user                    usr_user
210 #define proc                    usr_proc
211 #define file                    usr_file
212 #define dirent                  usr_dirent
213 #define flock                   usr_flock
214 #define fid                     usr_fid
215 #define sysent                  usr_sysent
216 #define in_ifaddr               usr_in_ifaddr
217 #define ifaddr                  usr_ifaddr
218 #define ifnet                   usr_ifnet
219 #define socket                  usr_socket
220 #define crget                   usr_crget
221 #define crcopy                  usr_crcopy
222 #define crhold                  usr_crhold
223 #define crfree                  usr_crfree
224 #define vtype_t                 usr_vtype_t
225 #define vcexcl                  usr_vcexcl
226 #define m_free                  usr_m_free
227 #define m_freem                 usr_m_freem
228 #define m_adj                   usr_m_adj
229 #define m_pullup                usr_m_pullup
230 #define uiomove                 usr_uiomove
231 #define EXCL                    usr_EXCL
232 #define NONEXCL                 usr_NONEXCL
233 #define uio_rw                  usr_uio_rw
234 #ifdef ino_t
235 #undef ino_t
236 #endif
237 #define ino_t                   usr_ino_t
238 #define offset_t                usr_offset_t
239 #define getpid()                usr_getpid()
240 #define setpag(A,B,C,D)         usr_setpag((A),(B),(C),(D))
241 #ifdef pid_t
242 #undef pid_t
243 #endif
244 #define pid_t                   int
245
246 enum usr_vcexcl { usr_NONEXCL, usr_EXCL };
247 typedef long offset_t;
248 #ifdef AFS_USR_OSF_ENV
249 typedef int usr_ino_t;
250 #else /* AFS_USR_OSF_ENV */
251 typedef long usr_ino_t;
252 #endif /* AFS_USR_OSF_ENV */
253
254 #if defined(AFS_USR_AIX_ENV) || defined(AFS_USR_SGI_ENV)
255 #define SYS_setgroups           101
256 #endif
257
258 #define ioctl()                 usr_ioctl()
259
260 #define label_t                 jmp_buf
261
262 #ifdef VFSTOM
263 #undef VFSTOM
264 #endif
265
266 #define VFSTOM(VP)              ((struct usr_mount *)(VP)->vfs_mount)
267
268 #ifdef VINACT
269 #undef VINACT
270 #endif
271 #ifdef VLOCK
272 #undef VLOCK
273 #endif
274 #ifdef VNOMAP
275 #undef VNOMAP
276 #endif
277 #ifdef VROOT
278 #undef VROOT
279 #endif
280 #ifdef VSHARE
281 #undef VSHARE
282 #endif
283 #ifdef VTEXT
284 #undef VTEXT
285 #endif
286 #ifdef VWAIT
287 #undef VWAIT
288 #endif
289 #ifdef VWASMAP
290 #undef VWASMAP
291 #endif
292 #ifdef VXLOCK
293 #undef VXLOCK
294 #endif
295
296 #define VINACT                  0x0001
297 #define VLOCK                   0x0002
298 #define VNOMAP                  0x0004
299 #define VROOT                   0x0008
300 #define VSHARE                  0x0010
301 #define VTEXT                   0x0020
302 #define VWAIT                   0x0040
303 #define VWASMAP                 0x0080
304 #define VXLOCK                  0x0100
305
306 #ifdef VNON
307 #undef VNON
308 #endif
309 #ifdef VREG
310 #undef VREG
311 #endif
312 #ifdef VDIR
313 #undef VDIR
314 #endif
315 #ifdef VBLK
316 #undef VBLK
317 #endif
318 #ifdef VCHR
319 #undef VCHR
320 #endif
321 #ifdef VLNK
322 #undef VLNK
323 #endif
324 #ifdef VFIFO
325 #undef VFIFO
326 #endif
327 #ifdef VDOOR
328 #undef VDOOR
329 #endif
330 #ifdef VBAD
331 #undef VBAD
332 #endif
333 #ifdef VSOCK
334 #undef VSOCK
335 #endif
336
337 #define VNON                    0
338 #define VREG                    1
339 #define VDIR                    2
340 #define VBLK                    3
341 #define VCHR                    4
342 #define VLNK                    5
343 #define VFIFO                   6
344 #define VDOOR                   7
345 #define VBAD                    8
346 #define VSOCK                   9
347
348 typedef int usr_vtype_t;
349
350 #ifdef VOP_RDWR
351 #undef VOP_RDWR
352 #endif
353
354 #define VOP_RDWR                afs_osi_VOP_RDWR
355
356 #ifdef NDADDR
357 #undef NDADDR
358 #endif
359 #ifdef NIADDR
360 #undef NIADDR
361 #endif
362
363 #define NDADDR                  12
364 #define NIADDR                  3
365
366 #ifdef DTYPE_VNODE
367 #undef DTYPE_VNODE
368 #endif
369
370 #define DTYPE_VNODE             1
371
372 #ifdef IUPD
373 #undef IUPD
374 #endif
375 #ifdef IACC
376 #undef IACC
377 #endif
378 #ifdef IMOD
379 #undef IMOD
380 #endif
381 #ifdef ICHG
382 #undef ICHG
383 #endif
384 #ifdef INOACC
385 #undef INOACC
386 #endif
387 #ifdef IMODTIME
388 #undef IMODTIME
389 #endif
390 #ifdef IREF
391 #undef IREF
392 #endif
393 #ifdef ISYNC
394 #undef ISYNC
395 #endif
396 #ifdef IFASTSYMLNK
397 #undef IFASTSYMLNK
398 #endif
399 #ifdef IMODACC
400 #undef IMODACC
401 #endif
402 #ifdef IATTCHG
403 #undef IATTCHG
404 #endif
405 #ifdef IBDWRITE
406 #undef IBDWRITE
407 #endif
408 #ifdef IBAD
409 #undef IBAD
410 #endif
411 #ifdef IDEL
412 #undef IDEL
413 #endif
414
415 #define IUPD                    0x0001
416 #define IACC                    0x0002
417 #define IMOD                    0x0004
418 #define ICHG                    0x0008
419 #define INOACC                  0x0010
420 #define IMODTIME                0x0020
421 #define IREF                    0x0040
422 #define ISYNC                   0x0080
423 #define IFASTSYMLNK             0x0100
424 #define IMODACC                 0x0200
425 #define IATTCHG                 0x0400
426 #define IBDWRITE                0x0800
427 #define IBAD                    0x1000
428 #define IDEL                    0x2000
429
430 #ifdef IFMT
431 #undef IFMT
432 #endif
433 #ifdef IFIFO
434 #undef IFIFO
435 #endif
436 #ifdef IFCHR
437 #undef IFCHR
438 #endif
439 #ifdef IFDIR
440 #undef IFDIR
441 #endif
442 #ifdef IFBLK
443 #undef IFBLK
444 #endif
445 #ifdef IFREG
446 #undef IFREG
447 #endif
448 #ifdef IFLNK
449 #undef IFLNK
450 #endif
451 #ifdef IFSHAD
452 #undef IFSHAD
453 #endif
454 #ifdef IFSOCK
455 #undef IFSOCK
456 #endif
457
458 #define IFMT                    0170000
459 #define IFIFO                   0010000
460 #define IFCHR                   0020000
461 #define IFDIR                   0040000
462 #define IFBLK                   0060000
463 #define IFREG                   0100000
464 #define IFLNK                   0120000
465 #define IFSHAD                  0130000
466 #define IFSOCK                  0140000
467
468 #ifdef ISUID
469 #undef ISUID
470 #endif
471 #ifdef ISGID
472 #undef ISGID
473 #endif
474 #ifdef ISVTX
475 #undef ISVTX
476 #endif
477 #ifdef IREAD
478 #undef IREAD
479 #endif
480 #ifdef IWRITE
481 #undef IWRITE
482 #endif
483 #ifdef IEXEC
484 #undef IEXEC
485 #endif
486
487 #define ISUID                   04000
488 #define ISGID                   02000
489 #define ISVTX                   01000
490 #define IREAD                   0400
491 #define IWRITE                  0200
492 #define IEXEC                   0100
493
494 #ifdef I_SYNC
495 #undef I_SYNC
496 #endif
497 #ifdef I_DSYNC
498 #undef I_DSYNC
499 #endif
500 #ifdef I_ASYNC
501 #undef I_ASYNC
502 #endif
503
504 #define I_SYNC                  1
505 #define I_DSYNC                 2
506 #define I_ASYNC                 0
507
508 #ifdef I_FREE
509 #undef I_FREE
510 #endif
511 #ifdef I_DIR
512 #undef I_DIR
513 #endif
514 #ifdef I_IBLK
515 #undef I_IBLK
516 #endif
517 #ifdef I_CHEAP
518 #undef I_CHEAP
519 #endif
520 #ifdef I_SHAD
521 #undef I_SHAD
522 #endif
523 #ifdef I_QUOTA
524 #undef I_QUOTA
525 #endif
526
527 #define I_FREE                  0x00000001
528 #define I_DIR                   0x00000002
529 #define I_IBLK                  0x00000004
530 #define I_CHEAP                 0x00000008
531 #define I_SHAD                  0x00000010
532 #define I_QUOTA                 0x00000020
533
534 #ifdef VTOI
535 #undef VTOI
536 #endif
537 #ifdef ITOV
538 #undef ITOV
539 #endif
540
541 #define VTOI(VP)        ((struct usr_inode *)(VP)->v_data)
542 #define ITOV(IP)        ((struct usr_vnode *)&(IP)->i_vnode)
543
544 #ifdef VN_HOLD
545 #undef VN_HOLD
546 #endif
547 #ifdef VN_RELE
548 #undef VN_RELE
549 #endif
550
551 #ifdef ROOT_INIT
552 #undef ROOT_INIT
553 #endif
554 #ifdef ROOT_REMOUNT
555 #undef ROOT_REMOUNT
556 #endif
557 #ifdef ROOT_UNMOUNT
558 #undef ROOT_UNMOUNT
559 #endif
560 #ifdef ROOT_FRONTMOUNT
561 #undef ROOT_FRONTMOUNT
562 #endif
563 #ifdef ROOT_BACKMOUNT
564 #undef ROOT_BACKMOUNT
565 #endif
566
567 #define ROOT_INIT                       0x0001
568 #define ROOT_REMOUNT                    0X0002
569 #define ROOT_UNMOUNT                    0x0003
570 #define ROOT_FRONTMOUNT                 0x0004
571 #define ROOT_BACKMOUNT                  0x0005
572
573 #ifdef  MAXFIDSZ
574 #undef  MAXFIDSZ
575 #endif
576
577 #define MAXFIDSZ                        64
578
579 #ifdef FSTYPSZ
580 #undef FSTYPSZ
581 #endif
582
583 #define FSTYPSZ                         16
584
585 #ifdef  VFS_MOUNT
586 #undef  VFS_MOUNT
587 #endif
588 #ifdef  VFS_UNMOUNT
589 #undef  VFS_UNMOUNT
590 #endif
591 #ifdef  VFS_ROOT
592 #undef  VFS_ROOT
593 #endif
594 #ifdef  VFS_STATFS
595 #undef  VFS_STATFFS
596 #endif
597 #ifdef  VFS_SYNC
598 #undef  VFS_SYNC
599 #endif
600 #ifdef  VFS_VGET
601 #undef  VFS_VGET
602 #endif
603 #ifdef  VFS_MOUNTROOT
604 #undef  VFS_MOUNTROOT
605 #endif
606 #ifdef  VFS_SWAPVP
607 #undef  VFS_SWAPVP
608 #endif
609 #ifdef  VFS_MOUNT
610 #undef  VFS_MOUNT
611 #endif
612
613 #define VFS_STATFS(vfsp, sp)    ((sp)->f_bsize=4096, 0)
614
615 #ifdef FAPPEND
616 #undef FAPPEND
617 #endif
618 #ifdef FSYNC
619 #undef FSYNC
620 #endif
621 #ifdef FTRUNC
622 #undef FTRUNC
623 #endif
624 #ifdef FWRITE
625 #undef FWRITE
626 #endif
627 #ifdef IO_APPEND
628 #undef IO_APPEND
629 #endif
630 #ifdef IO_SYNC
631 #undef IO_SYNC
632 #endif
633
634 #define FAPPEND                 0x0100
635 #define IO_APPEND               FAPPEND
636 #define FSYNC                   0x0200
637 #define IO_SYNC                 FSYNC
638 #define FTRUNC                  0x0400
639 #define FWRITE                  0x0800
640
641 #ifdef F_GETLK
642 #undef F_GETLK
643 #endif
644 #ifdef F_RDLCK
645 #undef F_RDLCK
646 #endif
647 #ifdef F_SETLK
648 #undef F_SETLK
649 #endif
650 #ifdef F_SETLKW
651 #undef F_SETLKW
652 #endif
653 #ifdef F_UNLCK
654 #undef F_UNLCK
655 #endif
656 #ifdef F_WRLCK
657 #undef F_WRLCK
658 #endif
659
660 #define F_GETLK                 0x0001
661 #define F_RDLCK                 0x0002
662 #define F_SETLK                 0x0003
663 #define F_SETLKW                0x0004
664 #define F_UNLCK                 0x0005
665 #define F_WRLCK                 0x0006
666
667 #ifdef LOCK_SH
668 #undef LOCK_SH
669 #endif
670 #ifdef LOCK_EX
671 #undef LOCK_EX
672 #endif
673 #ifdef LOCK_NB
674 #undef LOCK_NB
675 #endif
676 #ifdef LOCK_UN
677 #undef LOCK_UN
678 #endif
679
680 #define LOCK_SH                 F_RDLCK
681 #define LOCK_UN                 F_UNLCK
682 #define LOCK_EX                 F_WRLCK
683 #define LOCK_NB                 0x0007
684
685 #ifdef FEXLOCK
686 #undef FEXLOCK
687 #endif
688 #ifdef FSHLOCK
689 #undef FSHLOCK
690 #endif
691
692 #define FEXLOCK                 F_WRLCK
693 #define FSHLOCK                 F_RDLCK
694
695 #ifdef SSYS
696 #undef SSYS
697 #endif
698
699 #define SSYS                    0x0001
700
701 enum usr_uio_rw { USR_UIO_READ, USR_UIO_WRITE };
702
703 #ifdef UIO_READ
704 #undef UIO_READ
705 #endif
706 #ifdef UIO_WRITE
707 #undef UIO_WRITE
708 #endif
709
710 #define UIO_READ                0x0000
711 #define UIO_WRITE               0x0001
712
713 #ifdef UIO_USERSPACE
714 #undef UIO_USERSPACE
715 #endif
716 #ifdef UIO_SYSSPACE
717 #undef UIO_SYSSPACE
718 #endif
719
720 #define UIO_USERSPACE           0x0000
721 #define UIO_SYSSPACE            0x0001
722
723 #ifdef B_AGE
724 #undef B_AGE
725 #endif
726 #ifdef B_ASYNC
727 #undef B_ASYNC
728 #endif
729 #ifdef B_DELWRI
730 #undef B_DELWRI
731 #endif
732 #ifdef B_DIRTY
733 #undef B_DIRTY
734 #endif
735 #ifdef B_DONE
736 #undef B_DONE
737 #endif
738 #ifdef B_ERROR
739 #undef B_ERROR
740 #endif
741 #ifdef B_FREE
742 #undef B_FREE
743 #endif
744 #ifdef B_NOCACHE
745 #undef B_NOCACHE
746 #endif
747 #ifdef B_PFSTORE
748 #undef B_PFSTORE
749 #endif
750 #ifdef B_READ
751 #undef B_READ
752 #endif
753 #ifdef B_UBC
754 #undef B_UBC
755 #endif
756 #ifdef B_WANTED
757 #undef B_WANTED
758 #endif
759 #ifdef B_WRITE
760 #undef B_WRITE
761 #endif
762
763 #define B_AGE                   0x0001
764 #define B_ASYNC                 0x0002
765 #define B_DELWRI                0x0004
766 #define B_DIRTY                 0x0008
767 #define B_DONE                  0x0010
768 #define B_ERROR                 0x0020
769 #define B_FREE                  0x0040
770 #define B_NOCACHE               0x0080
771 #define B_PFSTORE               0x0100
772 #define B_READ                  0x0200
773 #define B_UBC                   0x0400
774 #define B_WANTED                0x0800
775 #define B_WRITE                 0x1000
776
777 #ifdef MFREE
778 #undef MFREE
779 #endif
780 #ifdef MINUSE
781 #undef MINUSE
782 #endif
783 #ifdef MINTER
784 #undef MINTER
785 #endif
786 #ifdef MUPDATE
787 #undef MUPDATE
788 #endif
789
790 #define MFREE                   0
791 #define MINUSE                  1
792 #define MINTER                  2
793 #define MUPDATE                 4
794
795 #ifdef MSIZE
796 #undef MSIZE
797 #endif
798 #ifdef MMAXOFF
799 #undef MMAXOFF
800 #endif
801
802 #define MSIZE                   16384
803 #define MMAXOFF                 16384
804
805 #ifdef IA_SIN
806 #undef IA_SIN
807 #endif
808
809 #define   IA_SIN(IA)            (&(IA)->ia_addr)
810
811 #ifdef mtod
812 #undef mtod
813 #endif
814 #ifdef dtom
815 #undef dtom
816 #endif
817 #ifdef mtocl
818 #undef mtocl
819 #endif
820
821 #define mtod(m,t)       ((t)((m)->m_data))
822
823 #ifdef NBPG
824 #undef NBPG
825 #endif
826 #define NBPG                    4096
827
828 #define panic(S)                do{fprintf(stderr, S);assert(0);}while(0)
829 #define abort()                 assert(0)
830 #define usr_assert(A)           assert(A)
831
832 #ifdef NETSCAPE_NSAPI
833
834 /*
835  * All CONDVARs created with the same CRITICAL end up being the
836  * same CONDVAR, not a new one. If we want to use more than
837  * one usr_cond_t with the same usr_mutex_t, then we need a CRITICAL
838  * for each CONDVAR, otherwise we cannot know which thread we are
839  * waking when we do the signal.
840  */
841 typedef struct {
842     int waiters;
843     CRITICAL lock;
844     CONDVAR cond;
845 } usr_cond_t;
846
847 #define usr_mutex_t             CRITICAL
848 #define usr_thread_t            SYS_THREAD
849 #define usr_key_t               int
850
851 #define usr_mutex_init(A)       (*(A)=crit_init(), 0)
852 #define usr_mutex_destroy(A)    (crit_terminate(*(A)), 0)
853 #define usr_mutex_lock(A)       crit_enter(*(A))
854 #define usr_mutex_trylock(A)    (crit_enter(*(A)),1)
855 #define usr_mutex_unlock(A)     crit_exit(*(A))
856
857 #define usr_cond_init(A)        \
858      ((A)->waiters = 0,         \
859       (A)->lock = crit_init(),  \
860       (A)->cond = condvar_init((A)->lock), 0)
861
862 #define usr_cond_destroy(A)     \
863     (condvar_terminate((A)->cond), \
864      crit_terminate((A)->lock), 0)
865
866 #define usr_cond_signal(A)      \
867 {                               \
868     crit_enter((A)->lock);      \
869     if ((A)->waiters != 0) {    \
870       condvar_notify((A)->cond);\
871       (A)->waiters -= 1;        \
872     }                           \
873     crit_exit((A)->lock);       \
874 }
875
876 #define usr_cond_broadcast(A)   \
877 {                               \
878    crit_enter((A)->lock);       \
879    while ((A)->waiters != 0) {  \
880      condvar_notify((A)->cond); \
881      (A)->waiters -= 1;         \
882    }                            \
883    crit_exit((A)->lock);        \
884 }
885
886 #define usr_cond_wait(A,B)      \
887     (crit_enter((A)->lock),     \
888      crit_exit(*(B)),           \
889      (A)->waiters += 1,         \
890      condvar_wait((A)->cond),   \
891      crit_exit((A)->lock),      \
892      crit_enter(*(B)), 0)
893
894 #define usr_thread_create(A,B,C) \
895     ((*(A)=systhread_start(SYSTHREAD_DEFAULT_PRIORITY, \
896                            0,B,C))==SYS_THREAD_ERROR)
897 #define usr_thread_detach(A)    0
898 #define usr_keycreate(A,B)      (*(A)=systhread_newkey(),0)
899 #define usr_setspecific(A,B)    (systhread_setdata(A,B),0)
900 #define usr_getspecific(A,B)    (*(B)=systhread_getdata(A),0)
901 #define usr_thread_self()       systhread_current()
902 #ifdef AFS_USR_SUN5_ENV
903 #define usr_thread_sleep(A) \
904     poll(0, 0, (A)->tv_sec*1000+(A)->tv_nsec/1000000)
905 #else /* AFS_USR_SUN5_ENV */
906 #define usr_thread_sleep(A) \
907     systhread_sleep((A)->tv_sec*1000+(A)->tv_nsec/1000000)
908 #endif /* AFS_USR_SUN5_ENV */
909
910 #define uprintf                 printf
911
912 #define usr_getpid()            (int)(usr_thread_self())
913
914 #define ISAFS_GLOCK() (usr_thread_self() ==  afs_global_owner)
915
916 #else /* NETSCAPE_NSAPI */
917
918 /*
919  * Mutex and condition variable used to implement sleep
920  */
921 extern pthread_mutex_t usr_sleep_mutex;
922 extern pthread_cond_t usr_sleep_cond;
923
924 #define usr_cond_t              pthread_cond_t
925 #define usr_mutex_t             pthread_mutex_t
926 #define usr_thread_t            pthread_t
927 #define usr_key_t               pthread_key_t
928
929 #define usr_mutex_init(A)       assert(pthread_mutex_init(A,NULL) == 0)
930 #define usr_mutex_destroy(A)    assert(pthread_mutex_destroy(A) == 0)
931 #define usr_mutex_lock(A)       assert(pthread_mutex_lock(A) == 0)
932 #define usr_mutex_trylock(A)    ((pthread_mutex_trylock(A)==0)?1:0)
933 #define usr_mutex_unlock(A)     assert(pthread_mutex_unlock(A) == 0)
934 #define usr_cond_init(A)        assert(pthread_cond_init(A,NULL) == 0)
935 #define usr_cond_destroy(A)     assert(pthread_cond_destroy(A) == 0)
936 #define usr_cond_signal(A)      assert(pthread_cond_signal(A) == 0)
937 #define usr_cond_broadcast(A)   assert(pthread_cond_broadcast(A) == 0)
938 #define usr_cond_wait(A,B)      pthread_cond_wait(A,B)
939 #define usr_cond_timedwait(A,B,C)  pthread_cond_timedwait(A,B,C)
940
941 #define usr_thread_create(A,B,C) \
942     do { \
943         pthread_attr_t attr; \
944         assert(pthread_attr_init(&attr) == 0); \
945         assert(pthread_attr_setstacksize(&attr, 124288) == 0); \
946         assert(pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED) == 0); \
947         assert(pthread_create((A), &attr, (B), (void *)(C)) == 0); \
948         assert(pthread_attr_destroy(&attr) == 0); \
949     } while(0)
950 #define usr_thread_detach(A)    pthread_detach(A)
951 #define usr_keycreate(A,B)      assert(pthread_key_create(A,B) == 0)
952 #define usr_setspecific(A,B)    pthread_setspecific(A,B)
953 #define usr_getspecific(A,B)    (*(B)=pthread_getspecific(A),0)
954 #define usr_thread_self()       pthread_self()
955 #define usr_thread_sleep(A)                                                \
956 {                                                                          \
957     struct timespec _sleep_ts;                                             \
958     struct timeval _sleep_tv;                                              \
959     gettimeofday(&_sleep_tv, NULL);                                        \
960     _sleep_ts = *(A);                                                      \
961     _sleep_ts.tv_sec += _sleep_tv.tv_sec;                                  \
962     _sleep_ts.tv_nsec += _sleep_tv.tv_usec * 1000;                         \
963     if (_sleep_ts.tv_nsec >= 1000000000) {                                 \
964         _sleep_ts.tv_sec += 1;                                             \
965         _sleep_ts.tv_nsec -= 1000000000;                                   \
966     }                                                                      \
967     assert(pthread_mutex_lock(&usr_sleep_mutex) == 0);                     \
968     pthread_cond_timedwait(&usr_sleep_cond, &usr_sleep_mutex, &_sleep_ts); \
969     assert(pthread_mutex_unlock(&usr_sleep_mutex) == 0);                   \
970 }
971
972 #define uprintf                 printf
973
974 #define usr_getpid()            (int)(usr_thread_self())
975 #ifdef ISAFS_GLOCK
976 #undef ISAFS_GLOCK
977 #endif
978 #define ISAFS_GLOCK() (usr_thread_self() == afs_global_owner)
979
980 #endif /* NETSCAPE_NSAPI */
981
982 #define copyin(A,B,C)           (memcpy((void *)B,(void *)A,C), 0)
983 #define copyout(A,B,C)          (memcpy((void *)B,(void *)A,C), 0)
984 #define copyinstr(A,B,C,D)      (strncpy(B,A,C),(*D)=strlen(B), 0)
985 #define copyoutstr(A,B,C,D)     (strncpy(B,A,C),(*D)=strlen(B), 0)
986
987 #define vattr_null(A)           usr_vattr_null(A)
988
989 #define VN_HOLD(vp)     \
990 { \
991     (vp)->v_count++; \
992 }
993
994 #define VN_RELE(vp)     \
995 do { \
996     AFS_ASSERT_GLOCK(); \
997     usr_assert((vp)->v_count > 0); \
998     if (--((vp)->v_count) == 0) \
999         afs_inactive(vp, u.u_cred); \
1000 } while(0)
1001
1002 struct usr_statfs {
1003     unsigned long f_type;
1004     unsigned long f_bsize;
1005     unsigned long f_frsize;
1006     unsigned long f_ffree;
1007     unsigned long f_favail;
1008     struct {
1009         unsigned long val[2];
1010     } f_fsid;
1011     char f_basetype[FSTYPSZ];
1012     unsigned long f_flag;
1013     unsigned long f_namemax;
1014     unsigned long f_blocks;
1015     unsigned long f_bfree;
1016     unsigned long f_bavail;
1017     unsigned long f_files;
1018 };
1019
1020 struct usr_vattr {
1021     long va_mask;
1022     usr_vtype_t va_type;
1023     unsigned short va_mode;
1024     long va_uid;
1025     long va_gid;
1026     unsigned long va_fsid;
1027     unsigned long va_nodeid;
1028     unsigned long va_nlink;
1029     unsigned long va_size;
1030     struct timeval va_atime;
1031     struct timeval va_mtime;
1032     struct timeval va_ctime;
1033     unsigned long va_rdev;
1034     unsigned long va_blocksize;
1035     unsigned long va_blocks;
1036     unsigned long va_vcode;
1037 };
1038
1039 #ifdef VSUID
1040 #undef VSUID
1041 #endif
1042 #ifdef VSGID
1043 #undef VSGID
1044 #endif
1045 #ifdef VSVTX
1046 #undef VSVTX
1047 #endif
1048 #ifdef VREAD
1049 #undef VREAD
1050 #endif
1051 #ifdef VWRITE
1052 #undef VWRITE
1053 #endif
1054 #ifdef VEXEC
1055 #undef VEXEC
1056 #endif
1057
1058 #define VSUID                   04000
1059 #define VSGID                   02000
1060 #define VSVTX                   01000
1061 #define VREAD                   00400
1062 #define VWRITE                  00200
1063 #define VEXEC                   00100
1064
1065
1066 struct usr_vnode {
1067     unsigned short v_flag;
1068     unsigned long v_count;
1069     struct usr_vnodeops *v_op;
1070     struct usr_vfs *v_vfsp;
1071     long v_type;
1072     unsigned long v_rdev;
1073     char *v_data;
1074 };
1075
1076 struct usr_inode {
1077     daddr_t i_db[NDADDR];
1078     struct usr_vnode *i_devvp;
1079     unsigned long i_dev;
1080     long i_flag;
1081     struct usr_inode *i_freef;
1082     struct usr_inode **i_freeb;
1083     long i_gid;
1084     daddr_t i_ib[NIADDR];
1085     unsigned short i_mode;
1086     short i_nlink;
1087     unsigned long i_number;
1088     long i_size;
1089     long i_uid;
1090     struct usr_vnode i_vnode;
1091     struct {
1092         unsigned long ic_spare[4];
1093     } i_ic;
1094 };
1095
1096 struct usr_fileops {
1097     int (*vno_rw) (void);
1098     int (*vno_ioctl) (void);
1099     int (*vno_select) (void);
1100     int (*vno_closex) (void);
1101 };
1102
1103 struct usr_file {
1104     unsigned short f_flag;
1105     offset_t f_offset;
1106     struct usr_ucred *f_cred;
1107     struct usr_fileops *f_ops;
1108     char *f_data;
1109     long f_type;
1110 };
1111
1112 extern struct usr_file *getf(int);
1113
1114 #ifdef  fid_len
1115 #undef  fid_len
1116 #endif
1117 #ifdef  fid_data
1118 #undef  fid_data
1119 #endif
1120
1121 struct usr_fid {
1122     unsigned short fid_len;
1123     unsigned short fid_reserved;
1124     char fid_data[MAXFIDSZ];
1125 };
1126
1127 struct usr_flock {
1128     short l_type;
1129     short l_whence;
1130     off_t l_start;
1131     off_t l_len;
1132     long l_sysid;
1133     pid_t l_pid;
1134 };
1135
1136 extern struct usr_ucred *usr_crget(void);
1137 extern struct usr_ucred *usr_crcopy(struct usr_ucred *);
1138 extern int usr_crhold(struct usr_ucred *);
1139 extern int usr_crfree(struct usr_ucred *);
1140 extern struct usr_ucred *afs_global_ucredp;
1141
1142 struct usr_proc {
1143     unsigned long p_flag;
1144     pid_t p_pid;
1145     pid_t p_ppid;
1146     struct usr_ucred *p_ucred;
1147     char p_cursig;
1148 };
1149
1150 struct usr_a {
1151     int fd;
1152     int syscall;
1153     int parm1;
1154     int parm2;
1155     int parm3;
1156     int parm4;
1157     int parm5;
1158     int parm6;
1159 };
1160
1161 #ifdef uio_offset
1162 #undef uio_offset
1163 #endif
1164
1165 struct usr_uio {
1166     struct iovec *uio_iov;
1167     int uio_iovcnt;
1168     long uio_offset;
1169     int uio_segflg;
1170     short uio_fmode;
1171     int uio_resid;
1172 };
1173
1174 #ifdef b_blkno
1175 #undef b_blkno
1176 #endif
1177 #ifdef b_vp
1178 #undef b_vp
1179 #endif
1180
1181 struct usr_buf {
1182     int b_flags;
1183     short b_dev;
1184     unsigned b_bcount;
1185     struct {
1186         char *b_addr;
1187         struct usr_fs *b_fs;
1188     } b_un;
1189     long b_blkno;
1190     unsigned int b_resid;
1191     struct usr_vnode *b_vp;
1192 };
1193
1194 struct usr_socket {
1195     int sock;
1196     short port;
1197 };
1198
1199 #define NDIRSIZ_LEN(len) \
1200 ((sizeof (struct usr_dirent)+4 - (MAXNAMLEN+1)) + (((len)+1 + 3) &~ 3))
1201
1202 struct vcache;
1203 #define AFS_UCRED usr_ucred
1204 #define AFS_FLOCK       flock
1205
1206
1207 struct usr_vnodeops {
1208     int (*vn_open) (char *path, int flags, int mode);
1209     int (*vn_close) (int fd);
1210     int (*vn_rdwr) (struct usr_vnode *avc, struct usr_uio *uio, 
1211                     int rw, int io, struct usr_ucred *cred);
1212     int (*vn_ioctl) (void);
1213     int (*vn_select) (void);
1214     int (*vn_getattr) (struct vcache *avc, struct vattr *, struct AFS_UCRED *);
1215     int (*vn_setattr) (struct vcache *avc, struct vattr *, struct AFS_UCRED *);
1216     int (*vn_access) (struct vcache *avc, afs_int32, struct AFS_UCRED *);
1217     int (*vn_lookup) (struct vcache *adp, char *, struct vcache **, 
1218                       struct AFS_UCRED *, int);
1219     int (*vn_create) (struct vcache *adp, char *, struct vattr *, 
1220                       enum vcexcl, int, struct vcache **, struct AFS_UCRED *);
1221     int (*vn_remove) (struct vcache *adp, char *, struct AFS_UCRED *);
1222     int (*vn_link) (struct vcache *avc, struct vcache *adp, char *, 
1223                     struct AFS_UCRED *);
1224     int (*vn_rename) (struct vcache *aodp, char *, struct vcache *, char *,
1225                       struct AFS_UCRED *);
1226     int (*vn_mkdir) (struct vcache *adp, char *, struct vattr *, 
1227                      struct vcache **, struct AFS_UCRED *);
1228     int (*vn_rmdir) (struct vcache *adp, char *, struct AFS_UCRED *);
1229     int (*vn_readdir) (struct vcache *avc, struct uio *, struct AFS_UCRED *);
1230     int (*vn_symlink) (struct vcache *adp, char *, struct vattr *, char *,
1231                        struct AFS_UCRED *);
1232     int (*vn_readlink) (struct vcache *avc, struct uio *, struct AFS_UCRED *);
1233     int (*vn_fsync) (struct vcache *avc, struct AFS_UCRED *);
1234     int (*vn_inactive) (struct vcache *avc, struct AFS_UCRED *acred);
1235     int (*vn_bmap) (void);
1236     int (*vn_strategy) (void);
1237     int (*vn_bread) (void);
1238     int (*vn_brelse) (void);
1239     int (*vn_lockctl) (struct vcache *, struct AFS_FLOCK *, int,
1240                        struct AFS_UCRED *);
1241     int (*vn_fid) (struct vcache *avc, struct fid **);
1242 };
1243
1244 struct usr_fs {
1245     int dummy;
1246 };
1247
1248 struct usr_mount {
1249     char m_flags;
1250     unsigned long m_dev;
1251     struct usr_inode *m_inodp;
1252     struct usr_buf *m_bufp;
1253     struct usr_vnode *m_mount;
1254 };
1255 extern struct usr_mount *getmp(unsigned long);
1256
1257 typedef long usr_whymountroot_t;
1258
1259 struct usr_vfsops {
1260     int (*vfs_mount) (struct vfs *, char *, caddr_t);
1261     int (*vfs_unmount) (struct vfs *);
1262     int (*vfs_root) (struct vfs *, struct vnode **);
1263     int (*vfs_statfs) (struct vfs *, struct statfs *);
1264     int (*vfs_mountroot) (struct vfs *);
1265     int (*vfs_swapvp) (void);
1266 };
1267
1268 struct usr_vfs {
1269     struct usr_vnode *vfs_vnodecovered;
1270     struct {
1271         unsigned long val[2];
1272     } vfs_fsid;
1273     char *vfs_data;
1274     unsigned long vfs_bsize;
1275     struct usr_mount *vfs_mount;
1276     struct usr_vfsops *vfs_op;
1277 };
1278
1279 struct usr_sysent {
1280     char sy_narg;
1281     int (*sy_call) (void);
1282 };
1283 extern struct usr_sysent usr_sysent[];
1284
1285 struct usr_ifnet {
1286     struct usr_ifnet *if_next;
1287     short if_flags;
1288     u_int if_mtu;
1289     u_int if_metric;
1290     struct usr_ifaddr *if_addrlist;
1291 };
1292 extern struct usr_ifnet *usr_ifnet;
1293
1294 struct usr_ifaddr {
1295     struct usr_ifaddr *ifa_next;
1296     struct usr_ifnet *ifa_ifp;
1297     struct sockaddr ifa_addr;
1298 };
1299
1300 #ifdef ia_ifp
1301 #undef ia_ifp
1302 #endif
1303 #ifdef ia_addr
1304 #undef ia_addr
1305 #endif
1306
1307 struct usr_in_ifaddr {
1308     struct usr_in_ifaddr *ia_next;
1309     struct usr_ifnet *ia_ifp;
1310     struct sockaddr_in ia_addr;
1311     unsigned long ia_net;
1312     unsigned long ia_netmask;
1313     unsigned long ia_subnet;
1314     unsigned long ia_subnetmask;
1315     struct in_addr ia_netbroadcast;
1316 };
1317 extern struct usr_in_ifaddr *usr_in_ifaddr;
1318
1319 extern usr_key_t afs_global_u_key;      /* for per thread authentication */
1320
1321 #if defined(AFS_USR_OSF_ENV)
1322 extern char V;
1323 #else
1324 extern long V;
1325 #endif
1326
1327 #endif /* UKERNEL */
1328
1329 struct min_direct {
1330 #if defined(AFS_OFS_ENV) || defined(AFS_USR_OSF_ENV)
1331     unsigned int d_fileno;
1332 #else                           /* AFS_OFS_ENV || AFS_USR_OSF_ENV */
1333     unsigned long d_fileno;
1334 #endif                          /* AFS_OFS_ENV || AFS_USR_OSF_ENV */
1335     unsigned short d_reclen;
1336     unsigned short d_namlen;
1337 };
1338
1339 #ifndef NGROUPS
1340 #define NGROUPS                 NGROUPS_MAX
1341 #endif
1342 #ifndef NOGROUP
1343 #define NOGROUP                 (-1)
1344 #endif
1345 #ifdef cr_gid
1346 #undef cr_gid
1347 #endif
1348
1349 struct usr_ucred {
1350     unsigned long cr_ref;
1351     long cr_uid;
1352     long cr_gid;
1353     long cr_ruid;
1354     long cr_rgid;
1355     long cr_suid;
1356     long cr_sgid;
1357     long cr_ngroups;
1358     gid_t cr_groups[NGROUPS];
1359 };
1360
1361 #ifdef u_rval1
1362 #undef u_rval1
1363 #endif
1364
1365 struct usr_user {
1366     int u_error;
1367     int u_prio;
1368     char *u_ap;
1369     int u_rval1;
1370     long u_viceid;
1371     unsigned long u_expiration;
1372     struct usr_proc *u_procp;
1373     struct usr_ucred *u_cred;
1374     struct {
1375         int r_val1;
1376     } u_r;
1377 };
1378 #define u_rval1                 u_r.r_val1
1379 #define u                       (*(get_user_struct()))
1380
1381 extern struct usr_user *get_user_struct(void);
1382
1383 #define USR_DIRSIZE             2048
1384
1385 struct usr_dirent {
1386     unsigned long d_ino;
1387     unsigned long d_off;
1388     unsigned short d_reclen;
1389     char d_name[MAXNAMLEN + 1];
1390 };
1391
1392 typedef struct {
1393     int dd_fd;
1394     int dd_loc;
1395     int dd_size;
1396     int dd_reserved;
1397     char *dd_buf;
1398 } usr_DIR;
1399
1400 extern unsigned short usr_rx_port;
1401
1402 #define AFS_LOOKUP_NOEVAL 1
1403
1404 #endif /* __AFS_SYSINCLUDESH__  so idempotent */