/*
 * $Header: /proj/freeware1.0/nfswatch/nfswatch4.1/RCS/rpcdefs.h,v 1.1 1995/08/08 04:40:49 rck Exp $
 *
 * rpcdefs.h - definitions for RPC processing code.
 *
 * David A. Curry				Jeffrey C. Mogul
 * Purdue University				Digital Equipment Corporation
 * Engineering Computer Network			Western Research Laboratory
 * 1285 Electrical Engineering Building		250 University Avenue
 * West Lafayette, IN 47907-1285		Palo Alto, CA 94301
 * davy@ecn.purdue.edu				mogul@decwrl.dec.com
 *
 * $Log: rpcdefs.h,v $
 * Revision 1.1  1995/08/08  04:40:49  rck
 * initial checkin
 *
 * Revision 4.1  1993/09/15  20:50:44  davy
 * GCC fixes from Guy Harris.
 *
 * Revision 4.0  1993/03/01  19:59:00  davy
 * NFSWATCH Version 4.0.
 *
 * Revision 3.3  1993/01/16  19:08:59  davy
 * Corrected Jeff's address.
 *
 * Revision 3.2  1993/01/15  19:33:39  davy
 * Miscellaneous cleanups.
 *
 * Revision 3.1  1993/01/13  20:18:17  davy
 * Put in OS-specific define scheme, and merged in Tim Hudson's code for
 * SGI systems (as yet untested).
 *
 * Revision 3.0  1991/01/23  08:23:19  davy
 * NFSWATCH Version 3.0.
 *
 * Revision 1.2  90/08/17  15:47:10  davy
 * NFSWATCH Version 2.0.
 * 
 * Revision 1.1  88/11/29  11:20:30  davy
 * NFSWATCH Release 1.0
 * 
 */

#define NFS_READ		0
#define NFS_WRITE		1

/*
 * RPC programs, from "Remote Procedure Call Programming Guide",
 * Revision A, 9 May 1988, pp. 64-65.
 */
#define RPC_PMAPPROG		((u_long) 100000) /* portmapper		     */
#define RPC_RSTATPROG		((u_long) 100001) /* remote stats	     */
#define RPC_RUSERSPROG		((u_long) 100002) /* remote users	     */
#define RPC_NFSPROG		((u_long) 100003) /* NFS		     */
#define RPC_YPPROG		((u_long) 100004) /* Yellow Pages	     */
#define RPC_MOUNTPROG		((u_long) 100005) /* mount daemon	     */
#define RPC_DBXPROG		((u_long) 100006) /* remote dbx		     */
#define RPC_YPBINDPROG		((u_long) 100007) /* yp binder		     */
#define RPC_WALLPROG		((u_long) 100008) /* shutdown msg	     */
#define RPC_YPPASSWDPROG	((u_long) 100009) /* yppasswd server	     */
#define RPC_ETHERSTATPROG	((u_long) 100010) /* ether stats	     */
#define RPC_RQUOTAPROG		((u_long) 100011) /* disk quotas	     */
#define RPC_SPRAYPROG		((u_long) 100012) /* spray packets	     */
#define RPC_IBM3270PROG		((u_long) 100013) /* 3270 mapper	     */
#define RPC_IBMRJEPROG		((u_long) 100014) /* RJE mapper		     */
#define RPC_SELNSVCPROG		((u_long) 100015) /* selection service	     */
#define RPC_RDATABASEPROG	((u_long) 100016) /* remote database access  */
#define RPC_REXECPROG		((u_long) 100017) /* remote execution	     */
#define RPC_ALICEPROG		((u_long) 100018) /* Alice Office Automation */
#define RPC_SCHEDPROG		((u_long) 100019) /* scheduling service      */
#define RPC_LOCKPROG		((u_long) 100020) /* local lock manager      */
#define RPC_NETLOCKPROG		((u_long) 100021) /* network lock manager    */
#define RPC_X25PROG		((u_long) 100022) /* X.25 inr protocol	     */
#define RPC_STATMON1PROG	((u_long) 100023) /* status monitor 1	     */
#define RPC_STATMON2PROG	((u_long) 100024) /* status monitor 2	     */
#define RPC_SELNLIBPROG		((u_long) 100025) /* selection library	     */
#define RPC_BOOTPARAMPROG	((u_long) 100026) /* boot parameters service */
#define RPC_MAZEPROG		((u_long) 100027) /* mazewars game	     */
#define RPC_YPUPDATEPROG	((u_long) 100028) /* yp update		     */
#define RPC_KEYSERVEPROG	((u_long) 100029) /* key server		     */
#define RPC_SECURECMDPROG	((u_long) 100030) /* secure login	     */
#define RPC_NETFWDIPROG		((u_long) 100031) /* NFS net forwarder init  */
#define RPC_NETFWDTPROG		((u_long) 100032) /* NFS net forwarder trans */
#define RPC_SUNLINKMAP_PROG	((u_long) 100033) /* sunlink MAP	     */
#define RPC_NETMONPROG		((u_long) 100034) /* network monitor	     */
#define RPC_DBASEPROG		((u_long) 100035) /* lightweight database    */
#define RPC_PWDAUTHPROG		((u_long) 100036) /* password authorization  */
#define RPC_TFSPROG		((u_long) 100037) /* translucent file svc    */
#define RPC_NSEPROG		((u_long) 100038) /* nse server		     */
#define RPC_NSE_ACTIVATE_PROG	((u_long) 100039) /* nse activate daemon     */
#define RPC_CACHEPROG		((u_long) 100301) /* nis+ cache		     */
#define RPC_CB_PROG		((u_long) 100302) /* nis+ callback	     */

#define RPC_PCNFSDPROG		((u_long) 150001) /* pc passwd authorization */

#define RPC_PYRAMIDLOCKINGPROG	((u_long) 200000) /* Pyramid-locking	     */
#define RPC_PYRAMIDSYS5		((u_long) 200001) /* Pyramid-sys5	     */
#define RPC_CADDS_IMAGE		((u_long) 200002) /* CV cadds_image	     */

#define RPC_ADT_RFLOCKPROG	((u_long) 300001) /* ADT file locking	     */

#ifdef NFSSERVER
/*
 * Classification of NFS procedures.
 */
struct nfs_proc {
	int		nfs_proctype;
	xdrproc_t	nfs_xdrargs;
	int		nfs_argsz;
};

/*
 * NFS procedure argument structures.
 */
union nfs_rfsargs {
	fhandle_t fhandle;
	struct nfssaargs nfssaargs;
	struct nfsdiropargs nfsdiropargs;
	struct nfsreadargs nfsreadargs;
	struct nfswriteargs nfswriteargs;
	struct nfscreatargs nfscreatargs;
	struct nfsrnmargs nfsrnmargs;
	struct nfslinkargs nfslinkargs;
	struct nfsslargs nfsslargs;
	struct nfsrddirargs nfsrddirargs;
};

/*
 * Macros for use with RPC stuff.
 */
#define min(a, b)		((a) < (b) ? (a) : (b))
#define rpc_buffer(xprt)	((xprt)->xp_p1)
#define su_data(xprt)		((struct svcudp_data *)((xprt)->xp_p2))

/*
 * UDP service data.
 */
struct svcudp_data {
	u_int	su_iosz;	/* byte size of send/recv buffer	*/
	u_long	su_xid;		/* transaction id			*/
	XDR	su_xdrs;	/* XDR handle				*/
	char	su_verfbody[MAX_AUTH_BYTES];	/* verifier body	*/
};
#endif
