14f5b86de792860ab660628c586740373a2df002
[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_SUN57_64BIT_ENV) || defined(AFS_OSF_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 #ifdef  AFS_OSF_ENV
47 #define AFS_NFSXLATORREQ(cred)    ((cred)->cr_ruid == NFSXLATOR_CRED)
48 #else
49 #define AFS_NFSXLATORREQ(cred)    ((cred)->cr_rgid == NFSXLATOR_CRED)
50 #endif
51 #endif
52
53 struct exporterops {
54     int (*export_reqhandler) ();
55     void (*export_hold) ();
56     void (*export_rele) ();
57     int (*export_sysname) ();
58     void (*export_garbagecollect) ();
59     int (*export_statistics) ();
60     int (*export_checkhost) ();
61     afs_int32 (*export_gethost) ();
62 };
63
64 struct exporterstats {
65     afs_int32 calls;            /* # of calls to the exporter */
66     afs_int32 rejectedcalls;    /* # of afs rejected  calls */
67     afs_int32 nopag;            /* # of unpagged remote calls */
68     afs_int32 invalidpag;       /* # of invalid pag calls */
69 };
70
71 struct afs_exporter {
72     struct afs_exporter *exp_next;
73     struct exporterops *exp_op;
74     afs_int32 exp_states;
75     afs_int32 exp_type;
76     struct exporterstats exp_stats;
77     char *exp_data;
78 };
79
80 /* exp_type values */
81 #define EXP_NULL    0           /* Undefined */
82 #define EXP_NFS     1           /* Nfs/Afs translator */
83
84 /* exp_states values */
85 #define EXP_EXPORTED    1
86 #define EXP_UNIXMODE    2
87 #define EXP_PWSYNC      4
88 #define EXP_SUBMOUNTS   8
89 #define EXP_CLIPAGS    16
90 #define EXP_CALLBACK   32
91
92
93 #define AFS_NFSFULLFID  1
94
95 #define EXP_REQHANDLER(EXP, CRED, HOST, PAG, EXPP) \
96         (*(EXP)->exp_op->export_reqhandler)(EXP, CRED, HOST, PAG, EXPP)
97 #define EXP_HOLD(EXP)   \
98         (*(EXP)->exp_op->export_hold)(EXP)
99 #define EXP_RELE(EXP)   \
100         (*(EXP)->exp_op->export_rele)(EXP)
101 #define EXP_SYSNAME(EXP, INNAME, OUTNAME, NUM, ALLPAGS)   \
102         (*(EXP)->exp_op->export_sysname)(EXP, INNAME, OUTNAME, NUM, ALLPAGS)
103 #define EXP_GC(EXP, param)      \
104         (*(EXP)->exp_op->export_garbagecollect)(EXP, param)
105 #define EXP_STATISTICS(EXP)     \
106         (*(EXP)->exp_op->export_statistics)(EXP)
107 #define EXP_CHECKHOST(EXP, HOST)        \
108         (*(EXP)->exp_op->export_checkhost)(EXP, HOST)
109 #define EXP_GETHOST(EXP)        \
110         (*(EXP)->exp_op->export_checkhost)(EXP)
111
112 struct afs3_fid {
113     u_short len;
114     u_short padding;
115     afs_uint32 Cell;
116     afs_uint32 Volume;
117     afs_uint32 Vnode;
118     afs_uint32 Unique;
119 };
120
121 struct Sfid {
122     afs_uint32 padding;
123     afs_uint32 Cell;
124     afs_uint32 Volume;
125     afs_uint32 Vnode;
126     afs_uint32 Unique;
127 #ifdef  AFS_SUN5_ENV
128     struct cred *credp;
129 #endif
130 };
131
132
133 #endif /* __EXPORTER__ */