1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
|
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/* ident "%Z%%M% %I% %E% SMI" */
/*
* Copyright (c) 1988,1990-1992,1998 by Sun Microsystems, Inc.
* All rights reserved.
*/
/*
* Protocol description for the mount program
*/
const MNTPATHLEN = 1024; /* maximum bytes in a pathname argument */
const MNTNAMLEN = 255; /* maximum bytes in a name argument */
const FHSIZE = 32; /* size in bytes of a v2 file handle */
const FHSIZE3 = 64; /* " " " " " v3 " " */
/*
* The fhandle is the file handle that the server passes to the client.
* All file operations are done using the file handles to refer to a file
* or a directory. The file handle can contain whatever information the
* server needs to distinguish an individual file.
*
* Versions 1 and 2 of the protocol share a filehandle of 32 bytes.
*
* Version 3 supports a 64 byte filehandle that can be used only
* with version 3 of the NFS protocol.
*/
typedef opaque fhandle[FHSIZE];
typedef opaque fhandle3<FHSIZE3>;
/*
* If a V2 status of zero is returned, the call completed successfully, and
* a file handle for the directory follows. A non-zero status indicates
* some sort of error. The status corresponds with UNIX error numbers.
*/
union fhstatus switch (unsigned fhs_status) {
case 0:
fhandle fhs_fhandle;
default:
void;
};
/*
* This #define is added for backwards compatability with applications
* which reference the old style fhstatus. The second element of that
* structure was called fhs_fh, instead of the current fhs_fhandle.
*/
%
%#define fhs_fh fhstatus_u.fhs_fhandle
/*
* The following status codes are defined for the V3 mount service:
* Note that the precise enum encoding must be followed; the values
* are derived from existing implementation practice, and there is
* no good reason to disturb them.
*/
enum mountstat3 {
MNT_OK= 0, /* no error */
MNT3ERR_PERM=1, /* Not owner */
MNT3ERR_NOENT=2, /* No such file or directory */
MNT3ERR_IO=5, /* I/O error */
MNT3ERR_ACCES=13, /* Permission denied */
MNT3ERR_NOTDIR=20, /* Not a directory*/
MNT3ERR_INVAL=22, /* Invalid argument.*/
MNT3ERR_NAMETOOLONG=63, /* File name too long */
MNT3ERR_NOTSUPP=10004, /* operation not supported */
MNT3ERR_SERVERFAULT=10006 /* An i/o or similar failure caused */
/* the server to abandon the request */
/* No attributes can be returned. The */
/* client should translate this into EIO */
};
/*
* A V3 server returns a file handle and a list of the authentication
* flavors that the server will accept for this mount. If the list
* is empty, AUTH_UNIX is required. Otherwise, any of the flavors
* listed in auth_flavors<> may be used (but no others).
* The values of the authentication flavors are defined in the
* underlying RPC protocol.
*/
struct mountres3_ok {
fhandle3 fhandle;
int auth_flavors<>;
};
/*
* If a V3 status of MNT_OK is returned, the call completed successfully, and
* a file handle for the directory follows. Any other status indicates
* some sort of error.
*/
union mountres3 switch (mountstat3 fhs_status) {
case MNT_OK:
mountres3_ok mountinfo;
default:
void;
};
/*
* The type dirpath is the pathname of a directory
*/
typedef string dirpath<MNTPATHLEN>;
/*
* The type name is used for arbitrary names (hostnames, groupnames)
*/
typedef string name<MNTNAMLEN>;
/*
* A list of who has what mounted. This information is
* strictly advisory, since there is no mechanism to
* enforce the removal of stale information. The strongest
* assertion that can be made is that if a hostname:directory
* pair appears in the list, the server has exported the
* directory to that client at some point since the server
* export data base was (re)initialized. Note also that there
* is no limit on the length of the information returned
* in this structure, and this may cause problems if the
* mount service is accessed via a connectionless transport.
*
* The ifdef will ensure that these are only carried over to
* mount.h - no xdr routines will be generated. We want to
* do these by hand, to avoid the recursive stack-blowing ones
* that rpcgen will generate.
*/
#ifdef RPC_HDR
typedef struct mountbody *mountlist;
struct mountbody {
name ml_hostname;
dirpath ml_directory;
mountlist ml_next;
};
#endif /* RPC_HDR */
/*
* A list of netgroups
*/
typedef struct groupnode *groups;
struct groupnode {
name gr_name;
groups gr_next;
};
/*
* A list of what is exported and to whom
*/
typedef struct exportnode *exports;
struct exportnode {
dirpath ex_dir;
groups ex_groups;
exports ex_next;
};
/*
* POSIX pathconf information
*/
struct ppathcnf {
int pc_link_max; /* max links allowed */
short pc_max_canon; /* max line len for a tty */
short pc_max_input; /* input a tty can eat all at once */
short pc_name_max; /* max file name length (dir entry) */
short pc_path_max; /* max path name length (/x/y/x/.. ) */
short pc_pipe_buf; /* size of a pipe (bytes) */
u_char pc_vdisable; /* safe char to turn off c_cc[i] */
char pc_xxx; /* alignment padding; cc_t == char */
short pc_mask[2]; /* validity and boolean bits */
};
program MOUNTPROG {
/*
* Version one of the mount protocol communicates with version two
* of the NFS protocol. The only connecting point is the fhandle
* structure, which is the same for both protocols.
*/
version MOUNTVERS {
/*
* Does no work. It is made available in all RPC services
* to allow server reponse testing and timing
*/
void
MOUNTPROC_NULL(void) = 0;
/*
* If fhs_status is 0, then fhs_fhandle contains the
* file handle for the directory. This file handle may
* be used in the NFS protocol. This procedure also adds
* a new entry to the mount list for this client mounting
* the directory.
* Unix authentication required.
*/
fhstatus
MOUNTPROC_MNT(dirpath) = 1;
/*
* Returns the list of remotely mounted filesystems. The
* mountlist contains one entry for each hostname and
* directory pair.
*/
mountlist
MOUNTPROC_DUMP(void) = 2;
/*
* Removes the mount list entry for the directory
* Unix authentication required.
*/
void
MOUNTPROC_UMNT(dirpath) = 3;
/*
* Removes all of the mount list entries for this client
* Unix authentication required.
*/
void
MOUNTPROC_UMNTALL(void) = 4;
/*
* Returns a list of all the exported filesystems, and which
* machines are allowed to import it.
*/
exports
MOUNTPROC_EXPORT(void) = 5;
/*
* Identical to MOUNTPROC_EXPORT above
*/
exports
MOUNTPROC_EXPORTALL(void) = 6;
} = 1;
/*
* Version two of the mount protocol communicates with version two
* of the NFS protocol. It is identical to version one except for a
* new procedure call for posix.
*/
version MOUNTVERS_POSIX {
/*
* Does no work. It is made available in all RPC services
* to allow server reponse testing and timing
*/
void
MOUNTPROC_NULL(void) = 0;
/*
* If fhs_status is 0, then fhs_fhandle contains the
* file handle for the directory. This file handle may
* be used in the NFS protocol. This procedure also adds
* a new entry to the mount list for this client mounting
* the directory.
* Unix authentication required.
*/
fhstatus
MOUNTPROC_MNT(dirpath) = 1;
/*
* Returns the list of remotely mounted filesystems. The
* mountlist contains one entry for each hostname and
* directory pair.
*/
mountlist
MOUNTPROC_DUMP(void) = 2;
/*
* Removes the mount list entry for the directory
* Unix authentication required.
*/
void
MOUNTPROC_UMNT(dirpath) = 3;
/*
* Removes all of the mount list entries for this client
* Unix authentication required.
*/
void
MOUNTPROC_UMNTALL(void) = 4;
/*
* Returns a list of all the exported filesystems, and which
* machines are allowed to import it.
*/
exports
MOUNTPROC_EXPORT(void) = 5;
/*
* Identical to MOUNTPROC_EXPORT above
*/
exports
MOUNTPROC_EXPORTALL(void) = 6;
/*
* Posix info over the wire isn't supported in NFS version 2
* so we get it here at mount time.
*/
ppathcnf
MOUNTPROC_PATHCONF(dirpath) = 7;
} = 2;
/*
* Version 3 of the mount protocol communicates with version 3
* of the NFS protocol. The only connecting point is the nfs_fh3
* structure, which is the same for both protocols.
*
* The only significant change over version 2 is that MOUNTPROC_MNT
* returns a longer filehandle (64 bytes instead of 32) as well
* as authentication information. MOUNTPROC_PATHCONF is subsumed
* into V3 of the NFS protocol and MOUNTPROC_EXPORTALL is eliminated.
*/
version MOUNTVERS3 {
/*
* Does no work. It is made available in all RPC services
* to allow server reponse testing and timing
*/
void
MOUNTPROC_NULL(void) = 0;
/*
* Mount a file system.
*
* If mountres.fhs_status is NFS_OK, then mountres.mountinfo
* contains the file handle for the directory and
* a list of acceptable authentication flavors. This file
* handle may only be used in version 3 of the NFS protocol.
* This procedure also results in the server adding a new
* entry to its mount list recording that this client has
* mounted the directory. Unix authentication or better
* is required.
*/
mountres3
MOUNTPROC_MNT(dirpath) = 1;
/*
* Returns the list of remotely mounted filesystems. The
* mountlist contains one entry for each hostname and
* directory pair.
*/
mountlist
MOUNTPROC_DUMP(void) = 2;
/*
* Removes the mount list entry for the directory
* Unix authentication or better is required.
*/
void
MOUNTPROC_UMNT(dirpath) = 3;
/*
* Removes all of the mount list entries for this client
* Unix authentication or better is required.
*/
void
MOUNTPROC_UMNTALL(void) = 4;
/*
* Returns a list of all the exported filesystems, and which
* machines are allowed to import each one.
*/
exports
MOUNTPROC_EXPORT(void) = 5;
} = 3;
} = 100005;
|