sparc-linux-20001223
[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
21 /**
22   * There is a limitation on the number of bytes that can be passed into
23   * the file handle that nfs passes into AFS.  The limit is 10 bytes.
24   * We pass in an array of long of size 2. On a 32 bit system this would be
25   * 8 bytes. But on a 64 bit system this would be 16 bytes. The first
26   * element of this array is a pointer so we cannot truncate that. But the
27   * second element is the AFS_XLATOR_MAGIC, which we can truncate.
28   * So on a 64 bit system the 10 bytes are used as below
29   * Bytes 1-8                   pointer to vnode
30   * Bytes 9 and 10              AFS_XLATOR_MAGIC
31   *
32   * And hence for 64 bit environments AFS_XLATOR_MAGIC is 8765 which takes
33   * up 2 bytes
34   */
35
36 #if defined(AFS_SUN57_64BIT_ENV) || defined(AFS_OSF_ENV) || (defined(AFS_SGI61_ENV) && (_MIPS_SZPTR==64)) || defined(AFS_LINUX_64BIT_KERNEL)
37 #define AFS_XLATOR_MAGIC        0x8765          /* XXX */
38 #else
39 #define AFS_XLATOR_MAGIC        0x87654321
40 #endif
41
42 #ifdef  AFS_OSF_ENV
43 #define AFS_NFSXLATORREQ(cred)    ((cred)->cr_ruid == NFSXLATOR_CRED)
44 #else
45 #define AFS_NFSXLATORREQ(cred)    ((cred)->cr_rgid == NFSXLATOR_CRED)
46 #endif
47
48 struct  exporterops {
49     int     (*export_reqhandler)();
50     int     (*export_hold)();
51     int     (*export_rele)();
52     int     (*export_sysname)();
53     int     (*export_garbagecollect)();
54     int     (*export_statistics)();
55 };
56
57 struct exporterstats {
58     afs_int32 calls;                    /* # of calls to the exporter */
59     afs_int32 rejectedcalls;            /* # of afs rejected  calls */
60     afs_int32 nopag;                    /* # of unpagged remote calls */
61     afs_int32 invalidpag;               /* # of invalid pag calls */
62 };
63
64 struct afs_exporter {
65     struct  afs_exporter   *exp_next;
66     struct  exporterops     *exp_op;
67     afs_int32               exp_states;
68     afs_int32               exp_type;
69     struct  exporterstats   exp_stats;
70     char                    *exp_data;
71 };
72
73 /* exp_type values */
74 #define EXP_NULL    0       /* Undefined */
75 #define EXP_NFS     1       /* Nfs/Afs translator */
76
77 /* exp_states values */
78 #define EXP_EXPORTED    1
79 #define EXP_UNIXMODE    2
80 #define EXP_PWSYNC      4
81 #define EXP_SUBMOUNTS   8
82
83
84 #define AFS_NFSFULLFID  1
85
86 #define EXP_REQHANDLER(EXP, CRED, HOST, PAG, EXPP) \
87         (*(EXP)->exp_op->export_reqhandler)(EXP, CRED, HOST, PAG, EXPP)
88 #define EXP_HOLD(EXP)   \
89         (*(EXP)->exp_op->export_hold)(EXP)
90 #define EXP_RELE(EXP)   \
91         (*(EXP)->exp_op->export_rele)(EXP)
92 #define EXP_SYSNAME(EXP, INNAME, OUTNAME)   \
93         (*(EXP)->exp_op->export_sysname)(EXP, INNAME, OUTNAME)
94 #define EXP_GC(EXP, param)      \
95         (*(EXP)->exp_op->export_garbagecollect)(EXP, param)
96 #define EXP_STATISTICS(EXP)     \
97         (*(EXP)->exp_op->export_statistics)(EXP)
98
99 struct afs3_fid {
100     u_short len;
101     u_short padding;
102     afs_uint32 Cell;
103     afs_uint32 Volume;
104     afs_uint32 Vnode;
105     afs_uint32 Unique;
106 };
107
108 struct Sfid {
109     afs_uint32 padding;
110     afs_uint32 Cell;
111     afs_uint32 Volume;
112     afs_uint32 Vnode;
113     afs_uint32 Unique;
114 #ifdef  AFS_SUN5_ENV
115     struct cred *credp;
116 #endif
117 };
118
119
120 #endif /* __EXPORTER__ */