/* vi: set sw=4 ts=4: */
/*
 * Please do not edit this file.
 * It was generated using rpcgen.
 */

#ifndef _NFSMOUNT_H_RPCGEN
#define _NFSMOUNT_H_RPCGEN

#include <rpc/rpc.h>

/*
 * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
 * unrestricted use provided that this legend is included on all tape
 * media and as a part of the software program in whole or part.  Users
 * may copy or modify Sun RPC without charge, but are not authorized
 * to license or distribute it to anyone else except as part of a product or
 * program developed by the user or with the express written consent of
 * Sun Microsystems, Inc.
 *
 * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
 * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
 *
 * Sun RPC is provided with no support and without any obligation on the
 * part of Sun Microsystems, Inc. to assist in its use, correction,
 * modification or enhancement.
 *
 * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
 * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
 * OR ANY PART THEREOF.
 *
 * In no event will Sun Microsystems, Inc. be liable for any lost revenue
 * or profits or other special, indirect and consequential damages, even if
 * Sun has been advised of the possibility of such damages.
 *
 * Sun Microsystems, Inc.
 * 2550 Garcia Avenue
 * Mountain View, California  94043
 */
/*
 * Copyright (c) 1985, 1990 by Sun Microsystems, Inc.
 */

/* from @(#)mount.x	1.3 91/03/11 TIRPC 1.0 */
#ifndef _rpcsvc_mount_h
#define _rpcsvc_mount_h
#define MNTPATHLEN 1024
#define MNTNAMLEN 255
#define FHSIZE 32

typedef char fhandle[FHSIZE];
#ifdef __cplusplus 
extern "C" bool_t xdr_fhandle(XDR *, fhandle);
#elif __STDC__ 
extern  bool_t xdr_fhandle(XDR *, fhandle);
#else /* Old Style C */ 
bool_t xdr_fhandle();
#endif /* Old Style C */ 


struct fhstatus {
	u_int fhs_status;
	union {
		fhandle fhs_fhandle;
	} fhstatus_u;
};
typedef struct fhstatus fhstatus;
#ifdef __cplusplus 
extern "C" bool_t xdr_fhstatus(XDR *, fhstatus*);
#elif __STDC__ 
extern  bool_t xdr_fhstatus(XDR *, fhstatus*);
#else /* Old Style C */ 
bool_t xdr_fhstatus();
#endif /* Old Style C */ 


typedef char *dirpath;
#ifdef __cplusplus 
extern "C" bool_t xdr_dirpath(XDR *, dirpath*);
#elif __STDC__ 
extern  bool_t xdr_dirpath(XDR *, dirpath*);
#else /* Old Style C */ 
bool_t xdr_dirpath();
#endif /* Old Style C */ 


typedef char *name;
#ifdef __cplusplus 
extern "C" bool_t xdr_name(XDR *, name*);
#elif __STDC__ 
extern  bool_t xdr_name(XDR *, name*);
#else /* Old Style C */ 
bool_t xdr_name();
#endif /* Old Style C */ 


typedef struct mountbody *mountlist;
#ifdef __cplusplus 
extern "C" bool_t xdr_mountlist(XDR *, mountlist*);
#elif __STDC__ 
extern  bool_t xdr_mountlist(XDR *, mountlist*);
#else /* Old Style C */ 
bool_t xdr_mountlist();
#endif /* Old Style C */ 


struct mountbody {
	name ml_hostname;
	dirpath ml_directory;
	mountlist ml_next;
};
typedef struct mountbody mountbody;
#ifdef __cplusplus 
extern "C" bool_t xdr_mountbody(XDR *, mountbody*);
#elif __STDC__ 
extern  bool_t xdr_mountbody(XDR *, mountbody*);
#else /* Old Style C */ 
bool_t xdr_mountbody();
#endif /* Old Style C */ 


typedef struct groupnode *groups;
#ifdef __cplusplus 
extern "C" bool_t xdr_groups(XDR *, groups*);
#elif __STDC__ 
extern  bool_t xdr_groups(XDR *, groups*);
#else /* Old Style C */ 
bool_t xdr_groups();
#endif /* Old Style C */ 


struct groupnode {
	name gr_name;
	groups gr_next;
};
typedef struct groupnode groupnode;
#ifdef __cplusplus 
extern "C" bool_t xdr_groupnode(XDR *, groupnode*);
#elif __STDC__ 
extern  bool_t xdr_groupnode(XDR *, groupnode*);
#else /* Old Style C */ 
bool_t xdr_groupnode();
#endif /* Old Style C */ 


typedef struct exportnode *exports;
#ifdef __cplusplus 
extern "C" bool_t xdr_exports(XDR *, exports*);
#elif __STDC__ 
extern  bool_t xdr_exports(XDR *, exports*);
#else /* Old Style C */ 
bool_t xdr_exports();
#endif /* Old Style C */ 


struct exportnode {
	dirpath ex_dir;
	groups ex_groups;
	exports ex_next;
};
typedef struct exportnode exportnode;
#ifdef __cplusplus 
extern "C" bool_t xdr_exportnode(XDR *, exportnode*);
#elif __STDC__ 
extern  bool_t xdr_exportnode(XDR *, exportnode*);
#else /* Old Style C */ 
bool_t xdr_exportnode();
#endif /* Old Style C */ 


struct ppathcnf {
	int pc_link_max;
	short pc_max_canon;
	short pc_max_input;
	short pc_name_max;
	short pc_path_max;
	short pc_pipe_buf;
	u_char pc_vdisable;
	char pc_xxx;
	short pc_mask[2];
};
typedef struct ppathcnf ppathcnf;
#ifdef __cplusplus 
extern "C" bool_t xdr_ppathcnf(XDR *, ppathcnf*);
#elif __STDC__ 
extern  bool_t xdr_ppathcnf(XDR *, ppathcnf*);
#else /* Old Style C */ 
bool_t xdr_ppathcnf();
#endif /* Old Style C */ 

#endif /*!_rpcsvc_mount_h*/

#define MOUNTPROG ((u_long)100005)
#define MOUNTVERS ((u_long)1)

#ifdef __cplusplus
#define MOUNTPROC_NULL ((u_long)0)
extern "C" void * mountproc_null_1(void *, CLIENT *);
extern "C" void * mountproc_null_1_svc(void *, struct svc_req *);
#define MOUNTPROC_MNT ((u_long)1)
extern "C" fhstatus * mountproc_mnt_1(dirpath *, CLIENT *);
extern "C" fhstatus * mountproc_mnt_1_svc(dirpath *, struct svc_req *);
#define MOUNTPROC_DUMP ((u_long)2)
extern "C" mountlist * mountproc_dump_1(void *, CLIENT *);
extern "C" mountlist * mountproc_dump_1_svc(void *, struct svc_req *);
#define MOUNTPROC_UMNT ((u_long)3)
extern "C" void * mountproc_umnt_1(dirpath *, CLIENT *);
extern "C" void * mountproc_umnt_1_svc(dirpath *, struct svc_req *);
#define MOUNTPROC_UMNTALL ((u_long)4)
extern "C" void * mountproc_umntall_1(void *, CLIENT *);
extern "C" void * mountproc_umntall_1_svc(void *, struct svc_req *);
#define MOUNTPROC_EXPORT ((u_long)5)
extern "C" exports * mountproc_export_1(void *, CLIENT *);
extern "C" exports * mountproc_export_1_svc(void *, struct svc_req *);
#define MOUNTPROC_EXPORTALL ((u_long)6)
extern "C" exports * mountproc_exportall_1(void *, CLIENT *);
extern "C" exports * mountproc_exportall_1_svc(void *, struct svc_req *);

#elif __STDC__
#define MOUNTPROC_NULL ((u_long)0)
extern  void * mountproc_null_1(void *, CLIENT *);
extern  void * mountproc_null_1_svc(void *, struct svc_req *);
#define MOUNTPROC_MNT ((u_long)1)
extern  fhstatus * mountproc_mnt_1(dirpath *, CLIENT *);
extern  fhstatus * mountproc_mnt_1_svc(dirpath *, struct svc_req *);
#define MOUNTPROC_DUMP ((u_long)2)
extern  mountlist * mountproc_dump_1(void *, CLIENT *);
extern  mountlist * mountproc_dump_1_svc(void *, struct svc_req *);
#define MOUNTPROC_UMNT ((u_long)3)
extern  void * mountproc_umnt_1(dirpath *, CLIENT *);
extern  void * mountproc_umnt_1_svc(dirpath *, struct svc_req *);
#define MOUNTPROC_UMNTALL ((u_long)4)
extern  void * mountproc_umntall_1(void *, CLIENT *);
extern  void * mountproc_umntall_1_svc(void *, struct svc_req *);
#define MOUNTPROC_EXPORT ((u_long)5)
extern  exports * mountproc_export_1(void *, CLIENT *);
extern  exports * mountproc_export_1_svc(void *, struct svc_req *);
#define MOUNTPROC_EXPORTALL ((u_long)6)
extern  exports * mountproc_exportall_1(void *, CLIENT *);
extern  exports * mountproc_exportall_1_svc(void *, struct svc_req *);

#else /* Old Style C */ 
#define MOUNTPROC_NULL ((u_long)0)
extern  void * mountproc_null_1();
extern  void * mountproc_null_1_svc();
#define MOUNTPROC_MNT ((u_long)1)
extern  fhstatus * mountproc_mnt_1();
extern  fhstatus * mountproc_mnt_1_svc();
#define MOUNTPROC_DUMP ((u_long)2)
extern  mountlist * mountproc_dump_1();
extern  mountlist * mountproc_dump_1_svc();
#define MOUNTPROC_UMNT ((u_long)3)
extern  void * mountproc_umnt_1();
extern  void * mountproc_umnt_1_svc();
#define MOUNTPROC_UMNTALL ((u_long)4)
extern  void * mountproc_umntall_1();
extern  void * mountproc_umntall_1_svc();
#define MOUNTPROC_EXPORT ((u_long)5)
extern  exports * mountproc_export_1();
extern  exports * mountproc_export_1_svc();
#define MOUNTPROC_EXPORTALL ((u_long)6)
extern  exports * mountproc_exportall_1();
extern  exports * mountproc_exportall_1_svc();
#endif /* Old Style C */ 
#define MOUNTVERS_POSIX ((u_long)2)

#ifdef __cplusplus
extern "C" void * mountproc_null_2(void *, CLIENT *);
extern "C" void * mountproc_null_2_svc(void *, struct svc_req *);
extern "C" fhstatus * mountproc_mnt_2(dirpath *, CLIENT *);
extern "C" fhstatus * mountproc_mnt_2_svc(dirpath *, struct svc_req *);
extern "C" mountlist * mountproc_dump_2(void *, CLIENT *);
extern "C" mountlist * mountproc_dump_2_svc(void *, struct svc_req *);
extern "C" void * mountproc_umnt_2(dirpath *, CLIENT *);
extern "C" void * mountproc_umnt_2_svc(dirpath *, struct svc_req *);
extern "C" void * mountproc_umntall_2(void *, CLIENT *);
extern "C" void * mountproc_umntall_2_svc(void *, struct svc_req *);
extern "C" exports * mountproc_export_2(void *, CLIENT *);
extern "C" exports * mountproc_export_2_svc(void *, struct svc_req *);
extern "C" exports * mountproc_exportall_2(void *, CLIENT *);
extern "C" exports * mountproc_exportall_2_svc(void *, struct svc_req *);
#define MOUNTPROC_PATHCONF ((u_long)7)
extern "C" ppathcnf * mountproc_pathconf_2(dirpath *, CLIENT *);
extern "C" ppathcnf * mountproc_pathconf_2_svc(dirpath *, struct svc_req *);

#elif __STDC__
extern  void * mountproc_null_2(void *, CLIENT *);
extern  void * mountproc_null_2_svc(void *, struct svc_req *);
extern  fhstatus * mountproc_mnt_2(dirpath *, CLIENT *);
extern  fhstatus * mountproc_mnt_2_svc(dirpath *, struct svc_req *);
extern  mountlist * mountproc_dump_2(void *, CLIENT *);
extern  mountlist * mountproc_dump_2_svc(void *, struct svc_req *);
extern  void * mountproc_umnt_2(dirpath *, CLIENT *);
extern  void * mountproc_umnt_2_svc(dirpath *, struct svc_req *);
extern  void * mountproc_umntall_2(void *, CLIENT *);
extern  void * mountproc_umntall_2_svc(void *, struct svc_req *);
extern  exports * mountproc_export_2(void *, CLIENT *);
extern  exports * mountproc_export_2_svc(void *, struct svc_req *);
extern  exports * mountproc_exportall_2(void *, CLIENT *);
extern  exports * mountproc_exportall_2_svc(void *, struct svc_req *);
#define MOUNTPROC_PATHCONF ((u_long)7)
extern  ppathcnf * mountproc_pathconf_2(dirpath *, CLIENT *);
extern  ppathcnf * mountproc_pathconf_2_svc(dirpath *, struct svc_req *);

#else /* Old Style C */ 
extern  void * mountproc_null_2();
extern  void * mountproc_null_2_svc();
extern  fhstatus * mountproc_mnt_2();
extern  fhstatus * mountproc_mnt_2_svc();
extern  mountlist * mountproc_dump_2();
extern  mountlist * mountproc_dump_2_svc();
extern  void * mountproc_umnt_2();
extern  void * mountproc_umnt_2_svc();
extern  void * mountproc_umntall_2();
extern  void * mountproc_umntall_2_svc();
extern  exports * mountproc_export_2();
extern  exports * mountproc_export_2_svc();
extern  exports * mountproc_exportall_2();
extern  exports * mountproc_exportall_2_svc();
#define MOUNTPROC_PATHCONF ((u_long)7)
extern  ppathcnf * mountproc_pathconf_2();
extern  ppathcnf * mountproc_pathconf_2_svc();
#endif /* Old Style C */ 

#endif /* !_NFSMOUNT_H_RPCGEN */
