diff options
Diffstat (limited to 'include/rpcsvc/mount.x')
| -rw-r--r-- | include/rpcsvc/mount.x | 250 | 
1 files changed, 250 insertions, 0 deletions
| diff --git a/include/rpcsvc/mount.x b/include/rpcsvc/mount.x new file mode 100644 index 000000000000..b3a4e11aa2c7 --- /dev/null +++ b/include/rpcsvc/mount.x @@ -0,0 +1,250 @@ +/*- + * Copyright (c) 2010, Oracle America, Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + *     * Redistributions of source code must retain the above copyright + *       notice, this list of conditions and the following disclaimer. + *     * Redistributions in binary form must reproduce the above + *       copyright notice, this list of conditions and the following + *       disclaimer in the documentation and/or other materials + *       provided with the distribution. + *     * Neither the name of the "Oracle America, Inc." nor the names of its + *       contributors may be used to endorse or promote products derived + *       from this software without specific prior written permission. + * + *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * 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 file handle */ +#ifdef WANT_NFS3 +const FHSIZE3 = 64;		/* size in bytes of a file handle (v3) */ +#endif + +/* + * 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. + */ +typedef opaque fhandle[FHSIZE];	 +#ifdef WANT_NFS3 +typedef opaque fhandle3<FHSIZE3>; +#endif + +/* + * If a 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; +}; + +#ifdef WANT_NFS3 +/* + * Status codes returned by the version 3 mount call. + */ +enum mountstat3 { +	MNT3_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,    /* Filename too long */ +	MNT3ERR_NOTSUPP = 10004,     /* Operation not supported */ +	MNT3ERR_SERVERFAULT = 10006  /* A failure on the server */ +}; + +struct mountres3_ok { +	fhandle3	fhandle; +	int		auth_flavors<>; +}; + +union mountres3 switch (mountstat3 fhs_status) { +case 0: +	mountres3_ok	mountinfo; +default: +	void; +}; +#endif + +/* + * 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 + */ +typedef struct mountbody *mountlist; +struct mountbody { +	name ml_hostname; +	dirpath ml_directory; +	mountlist ml_next; +}; + +/* + * 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; +}; + +program MOUNTPROG { +	/* +	 * Version one of the mount protocol communicates with version two +	 * of the NFS protocol. Version three communicates with +	 * version three 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 response 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; +#ifdef WANT_NFS3 +	version MOUNTVERS3 { +		/* +		 * Does no work. It is made available in all RPC services +		 * to allow server response testing and timing +		 */ +		void +		MOUNTPROC_NULL(void) = 0; + +		/* +		 * If mountres3.fhs_status is MNT3_OK, then +		 * mountres3.mountinfo contains the file handle for +		 * the directory and a list of acceptable +		 * authentication flavors.  This file handle may only +		 * be used in the NFS version 3 protocol.  This +		 * procedure also results in the server adding a new +		 * entry to its mount list recording that this client +		 * has mounted the directory. AUTH_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 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; +	} = 3; +#endif +} = 100005; | 
