Commit | Line | Data |
---|---|---|
805e021f CE |
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_SGI61_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__ */ |