Import Upstream version 1.8.5
[hcoop/debian/openafs.git] / src / afs / exporter.h
CommitLineData
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
49struct afs_exporter;
50
51struct 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
71struct 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
78struct 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
119struct 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
128struct 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__ */