bozo: Introduce bnode_Wait()
[openafs.git] / src / afs / exporter.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 __EXPORTER__
11 #define __EXPORTER__
12
13 #ifdef UID_NOBODY
14 #define NFS_NOBODY      UID_NOBODY
15 #endif
16 #ifndef NFS_NOBODY
17 #define NFS_NOBODY      -2      /* maps Nfs's "nobody" but since not declared by some systems (i.e. Ultrix) we use a constant  */
18 #endif
19 #define RMTUSER_REQ             0xabc
20 #define RMTUSER_REQ_PRIV        0xabe
21
22 /**
23   * There is a limitation on the number of bytes that can be passed into
24   * the file handle that nfs passes into AFS.  The limit is 10 bytes.
25   * We pass in an array of long of size 2. On a 32 bit system this would be
26   * 8 bytes. But on a 64 bit system this would be 16 bytes. The first
27   * element of this array is a pointer so we cannot truncate that. But the
28   * second element is the AFS_XLATOR_MAGIC, which we can truncate.
29   * So on a 64 bit system the 10 bytes are used as below
30   * Bytes 1-8                   pointer to vnode
31   * Bytes 9 and 10              AFS_XLATOR_MAGIC
32   *
33   * And hence for 64 bit environments AFS_XLATOR_MAGIC is 8765 which takes
34   * up 2 bytes
35   */
36
37 #if defined(AFS_SUN5_64BIT_ENV) || (defined(AFS_SGI_ENV) && (_MIPS_SZPTR==64)) || defined(AFS_LINUX_64BIT_KERNEL)
38 #define AFS_XLATOR_MAGIC        0x8765  /* XXX */
39 #else
40 #define AFS_XLATOR_MAGIC        0x87654321
41 #endif
42
43 #if defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
44 #define AFS_NFSXLATORREQ(cred) 0
45 #else
46 #define AFS_NFSXLATORREQ(cred)    (afs_cr_rgid(cred) == NFSXLATOR_CRED)
47 #endif
48
49 struct afs_exporter;
50
51 struct exporterops {
52     int (*export_reqhandler) (struct afs_exporter *exp,
53                               afs_ucred_t **cred,
54                               afs_uint32 host,
55                               afs_int32 *pag,
56                               struct afs_exporter **expp);
57     void (*export_hold) (struct afs_exporter *exp);
58     void (*export_rele) (struct afs_exporter *exp);
59     int (*export_sysname) (struct afs_exporter *exp,
60                            char *inname,
61                            char ***outname,
62                            int *num,
63                            int allpags);
64     void (*export_garbagecollect) (struct afs_exporter *exp,
65                                    afs_int32 param);
66     int (*export_statistics) (struct afs_exporter *exp);
67     int (*export_checkhost) (struct afs_exporter *exp, afs_uint32 host);
68     afs_uint32 (*export_gethost) (struct afs_exporter *exp);
69 };
70
71 struct exporterstats {
72     afs_int32 calls;            /* # of calls to the exporter */
73     afs_int32 rejectedcalls;    /* # of afs rejected  calls */
74     afs_int32 nopag;            /* # of unpagged remote calls */
75     afs_int32 invalidpag;       /* # of invalid pag calls */
76 };
77
78 struct afs_exporter {
79     struct afs_exporter *exp_next;
80     struct exporterops *exp_op;
81     afs_int32 exp_states;
82     afs_int32 exp_type;
83     struct exporterstats exp_stats;
84     char *exp_data;
85 };
86
87 /* exp_type values */
88 #define EXP_NULL    0           /* Undefined */
89 #define EXP_NFS     1           /* Nfs/Afs translator */
90
91 /* exp_states values */
92 #define EXP_EXPORTED    1
93 #define EXP_UNIXMODE    2
94 #define EXP_PWSYNC      4
95 #define EXP_SUBMOUNTS   8
96 #define EXP_CLIPAGS    16
97 #define EXP_CALLBACK   32
98
99
100 #define AFS_NFSFULLFID  1
101
102 #define EXP_REQHANDLER(EXP, CRED, HOST, PAG, EXPP) \
103         (*(EXP)->exp_op->export_reqhandler)(EXP, CRED, HOST, PAG, EXPP)
104 #define EXP_HOLD(EXP)   \
105         (*(EXP)->exp_op->export_hold)(EXP)
106 #define EXP_RELE(EXP)   \
107         (*(EXP)->exp_op->export_rele)(EXP)
108 #define EXP_SYSNAME(EXP, INNAME, OUTNAME, NUM, ALLPAGS)   \
109         (*(EXP)->exp_op->export_sysname)(EXP, INNAME, OUTNAME, NUM, ALLPAGS)
110 #define EXP_GC(EXP, param)      \
111         (*(EXP)->exp_op->export_garbagecollect)(EXP, param)
112 #define EXP_STATISTICS(EXP)     \
113         (*(EXP)->exp_op->export_statistics)(EXP)
114 #define EXP_CHECKHOST(EXP, HOST)        \
115         (*(EXP)->exp_op->export_checkhost)(EXP, HOST)
116 #define EXP_GETHOST(EXP)        \
117         (*(EXP)->exp_op->export_gethost)(EXP)
118
119 struct afs3_fid {
120     u_short len;
121     u_short padding;
122     afs_uint32 Cell;
123     afs_uint32 Volume;
124     afs_uint32 Vnode;
125     afs_uint32 Unique;
126 };
127
128 struct Sfid {
129     afs_uint32 padding;
130     afs_uint32 Cell;
131     afs_uint32 Volume;
132     afs_uint32 Vnode;
133     afs_uint32 Unique;
134 #ifdef  AFS_SUN5_ENV
135     struct cred *credp;
136 #endif
137 };
138
139
140 #endif /* __EXPORTER__ */