]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - include/rpcsvc/mount.x
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / include / rpcsvc / mount.x
1 /*
2  * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
3  * unrestricted use provided that this legend is included on all tape
4  * media and as a part of the software program in whole or part.  Users
5  * may copy or modify Sun RPC without charge, but are not authorized
6  * to license or distribute it to anyone else except as part of a product or
7  * program developed by the user.
8  * 
9  * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
10  * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
11  * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
12  * 
13  * Sun RPC is provided with no support and without any obligation on the
14  * part of Sun Microsystems, Inc. to assist in its use, correction,
15  * modification or enhancement.
16  * 
17  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
18  * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
19  * OR ANY PART THEREOF.
20  * 
21  * In no event will Sun Microsystems, Inc. be liable for any lost revenue
22  * or profits or other special, indirect and consequential damages, even if
23  * Sun has been advised of the possibility of such damages.
24  * 
25  * Sun Microsystems, Inc.
26  * 2550 Garcia Avenue
27  * Mountain View, California  94043
28  */
29
30 /*
31  * Protocol description for the mount program
32  */
33
34 #ifndef RPC_HDR
35 %#ifndef lint
36 %/*static char sccsid[] = "from: @(#)mount.x 1.2 87/09/18 Copyr 1987 Sun Micro";*/
37 %/*static char sccsid[] = "from: @(#)mount.x    2.1 88/08/01 4.0 RPCSRC";*/
38 %#endif /* not lint */
39 %#include <sys/cdefs.h>
40 %__FBSDID("$FreeBSD$");
41 #endif
42
43 const MNTPATHLEN = 1024;        /* maximum bytes in a pathname argument */
44 const MNTNAMLEN = 255;          /* maximum bytes in a name argument */
45 const FHSIZE = 32;              /* size in bytes of a file handle */
46 #ifdef WANT_NFS3
47 const FHSIZE3 = 64;             /* size in bytes of a file handle (v3) */
48 #endif
49
50 /*
51  * The fhandle is the file handle that the server passes to the client.
52  * All file operations are done using the file handles to refer to a file
53  * or a directory. The file handle can contain whatever information the
54  * server needs to distinguish an individual file.
55  */
56 typedef opaque fhandle[FHSIZE]; 
57 #ifdef WANT_NFS3
58 typedef opaque fhandle3<FHSIZE3>;
59 #endif
60
61 /*
62  * If a status of zero is returned, the call completed successfully, and 
63  * a file handle for the directory follows. A non-zero status indicates
64  * some sort of error. The status corresponds with UNIX error numbers.
65  */
66 union fhstatus switch (unsigned fhs_status) {
67 case 0:
68         fhandle fhs_fhandle;
69 default:
70         void;
71 };
72
73 #ifdef WANT_NFS3
74 /*
75  * Status codes returned by the version 3 mount call.
76  */
77 enum mountstat3 {
78         MNT3_OK = 0,                 /* no error */
79         MNT3ERR_PERM = 1,            /* Not owner */
80         MNT3ERR_NOENT = 2,           /* No such file or directory */
81         MNT3ERR_IO = 5,              /* I/O error */
82         MNT3ERR_ACCES = 13,          /* Permission denied */
83         MNT3ERR_NOTDIR = 20,         /* Not a directory */
84         MNT3ERR_INVAL = 22,          /* Invalid argument */
85         MNT3ERR_NAMETOOLONG = 63,    /* Filename too long */
86         MNT3ERR_NOTSUPP = 10004,     /* Operation not supported */
87         MNT3ERR_SERVERFAULT = 10006  /* A failure on the server */
88 };
89
90 struct mountres3_ok {
91         fhandle3        fhandle;
92         int             auth_flavors<>;
93 };
94
95 union mountres3 switch (mountstat3 fhs_status) {
96 case 0:
97         mountres3_ok    mountinfo;
98 default:
99         void;
100 };
101 #endif
102
103 /*
104  * The type dirpath is the pathname of a directory
105  */
106 typedef string dirpath<MNTPATHLEN>;
107
108 /*
109  * The type name is used for arbitrary names (hostnames, groupnames)
110  */
111 typedef string name<MNTNAMLEN>;
112
113 /*
114  * A list of who has what mounted
115  */
116 typedef struct mountbody *mountlist;
117 struct mountbody {
118         name ml_hostname;
119         dirpath ml_directory;
120         mountlist ml_next;
121 };
122
123 /*
124  * A list of netgroups
125  */
126 typedef struct groupnode *groups;
127 struct groupnode {
128         name gr_name;
129         groups gr_next;
130 };
131
132 /*
133  * A list of what is exported and to whom
134  */
135 typedef struct exportnode *exports;
136 struct exportnode {
137         dirpath ex_dir;
138         groups ex_groups;
139         exports ex_next;
140 };
141
142 program MOUNTPROG {
143         /*
144          * Version one of the mount protocol communicates with version two
145          * of the NFS protocol. Version three communicates with
146          * version three of the NFS protocol. The only connecting
147          * point is the fhandle structure, which is the same for both
148          * protocols.
149          */
150         version MOUNTVERS {
151                 /*
152                  * Does no work. It is made available in all RPC services
153                  * to allow server response testing and timing
154                  */
155                 void
156                 MOUNTPROC_NULL(void) = 0;
157
158                 /*      
159                  * If fhs_status is 0, then fhs_fhandle contains the
160                  * file handle for the directory. This file handle may
161                  * be used in the NFS protocol. This procedure also adds
162                  * a new entry to the mount list for this client mounting
163                  * the directory.
164                  * Unix authentication required.
165                  */
166                 fhstatus 
167                 MOUNTPROC_MNT(dirpath) = 1;
168
169                 /*
170                  * Returns the list of remotely mounted filesystems. The 
171                  * mountlist contains one entry for each hostname and 
172                  * directory pair.
173                  */
174                 mountlist
175                 MOUNTPROC_DUMP(void) = 2;
176
177                 /*
178                  * Removes the mount list entry for the directory
179                  * Unix authentication required.
180                  */
181                 void
182                 MOUNTPROC_UMNT(dirpath) = 3;
183
184                 /*
185                  * Removes all of the mount list entries for this client
186                  * Unix authentication required.
187                  */
188                 void
189                 MOUNTPROC_UMNTALL(void) = 4;
190
191                 /*
192                  * Returns a list of all the exported filesystems, and which
193                  * machines are allowed to import it.
194                  */
195                 exports
196                 MOUNTPROC_EXPORT(void)  = 5;
197
198                 /*
199                  * Identical to MOUNTPROC_EXPORT above
200                  */
201                 exports
202                 MOUNTPROC_EXPORTALL(void) = 6;
203         } = 1;
204 #ifdef WANT_NFS3
205         version MOUNTVERS3 {
206                 /*
207                  * Does no work. It is made available in all RPC services
208                  * to allow server response testing and timing
209                  */
210                 void
211                 MOUNTPROC_NULL(void) = 0;
212
213                 /*
214                  * If mountres3.fhs_status is MNT3_OK, then
215                  * mountres3.mountinfo contains the file handle for
216                  * the directory and a list of acceptable
217                  * authentication flavors.  This file handle may only
218                  * be used in the NFS version 3 protocol.  This
219                  * procedure also results in the server adding a new
220                  * entry to its mount list recording that this client
221                  * has mounted the directory. AUTH_UNIX authentication
222                  * or better is required.
223                  */
224                 mountres3
225                 MOUNTPROC_MNT(dirpath) = 1;
226
227                 /*
228                  * Returns the list of remotely mounted filesystems. The 
229                  * mountlist contains one entry for each hostname and 
230                  * directory pair.
231                  */
232                 mountlist
233                 MOUNTPROC_DUMP(void) = 2;
234
235                 /*
236                  * Removes the mount list entry for the directory
237                  * Unix authentication required.
238                  */
239                 void
240                 MOUNTPROC_UMNT(dirpath) = 3;
241
242                 /*
243                  * Removes all of the mount list entries for this client
244                  * Unix authentication required.
245                  */
246                 void
247                 MOUNTPROC_UMNTALL(void) = 4;
248
249                 /*
250                  * Returns a list of all the exported filesystems, and which
251                  * machines are allowed to import it.
252                  */
253                 exports
254                 MOUNTPROC_EXPORT(void)  = 5;
255         } = 3;
256 #endif
257 } = 100005;