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