/*
 * 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 */
