xref: /plan9/sys/src/cmd/9nfs/rpc.h (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
17dd7cddfSDavid du Colombier /*
27dd7cddfSDavid du Colombier  *	Cf. /lib/rfc/rfc1014, /lib/rfc/rfc1050
37dd7cddfSDavid du Colombier  */
47dd7cddfSDavid du Colombier 
57dd7cddfSDavid du Colombier enum Bool
67dd7cddfSDavid du Colombier {
77dd7cddfSDavid du Colombier 	FALSE	= 0,
87dd7cddfSDavid du Colombier 	TRUE	= 1
97dd7cddfSDavid du Colombier };
107dd7cddfSDavid du Colombier 
117dd7cddfSDavid du Colombier enum Auth_flavor
127dd7cddfSDavid du Colombier {
137dd7cddfSDavid du Colombier 	AUTH_NULL	= 0,
147dd7cddfSDavid du Colombier 	AUTH_UNIX	= 1,
157dd7cddfSDavid du Colombier 	AUTH_SHORT	= 2,
167dd7cddfSDavid du Colombier 	AUTH_DES	= 3
177dd7cddfSDavid du Colombier };
187dd7cddfSDavid du Colombier 
197dd7cddfSDavid du Colombier enum Msg_type
207dd7cddfSDavid du Colombier {
217dd7cddfSDavid du Colombier 	CALL	= 0,
227dd7cddfSDavid du Colombier 	REPLY	= 1
237dd7cddfSDavid du Colombier };
247dd7cddfSDavid du Colombier 
257dd7cddfSDavid du Colombier /*
267dd7cddfSDavid du Colombier  * A reply to a call message can take on two forms:
277dd7cddfSDavid du Colombier  * The message was either accepted or rejected.
287dd7cddfSDavid du Colombier  */
297dd7cddfSDavid du Colombier 
307dd7cddfSDavid du Colombier enum Reply_stat
317dd7cddfSDavid du Colombier {
327dd7cddfSDavid du Colombier 	MSG_ACCEPTED	= 0,
337dd7cddfSDavid du Colombier 	MSG_DENIED	= 1
347dd7cddfSDavid du Colombier };
357dd7cddfSDavid du Colombier 
367dd7cddfSDavid du Colombier /*
377dd7cddfSDavid du Colombier  * Given that a call message was accepted, the following is the
387dd7cddfSDavid du Colombier  * status of an attempt to call a remote procedure.
397dd7cddfSDavid du Colombier  */
407dd7cddfSDavid du Colombier enum Accept_stat
417dd7cddfSDavid du Colombier {
427dd7cddfSDavid du Colombier 	SUCCESS		= 0,	/* RPC executed successfully       */
437dd7cddfSDavid du Colombier 	PROG_UNAVAIL	= 1,	/* remote hasn't exported program  */
447dd7cddfSDavid du Colombier 	PROG_MISMATCH	= 2,	/* remote can't support version #  */
457dd7cddfSDavid du Colombier 	PROC_UNAVAIL	= 3,	/* program can't support procedure */
467dd7cddfSDavid du Colombier 	GARBAGE_ARGS	= 4	/* procedure can't decode params   */
477dd7cddfSDavid du Colombier };
487dd7cddfSDavid du Colombier 
497dd7cddfSDavid du Colombier /*
507dd7cddfSDavid du Colombier  * Reasons why a call message was rejected:
517dd7cddfSDavid du Colombier  */
527dd7cddfSDavid du Colombier enum Reject_stat
537dd7cddfSDavid du Colombier {
547dd7cddfSDavid du Colombier 	RPC_MISMATCH	= 0,	/* RPC version number != 2          */
557dd7cddfSDavid du Colombier 	AUTH_ERROR	= 1	/* remote can't authenticate caller */
567dd7cddfSDavid du Colombier };
577dd7cddfSDavid du Colombier 
587dd7cddfSDavid du Colombier /*
597dd7cddfSDavid du Colombier  * Why authentication failed:
607dd7cddfSDavid du Colombier  */
617dd7cddfSDavid du Colombier enum Auth_stat
627dd7cddfSDavid du Colombier {
637dd7cddfSDavid du Colombier 	AUTH_BADCRED		= 1,	/* bad credentials (seal broken) */
647dd7cddfSDavid du Colombier 	AUTH_REJECTEDCRED	= 2,	/* client must begin new session */
657dd7cddfSDavid du Colombier 	AUTH_BADVERF		= 3,	/* bad verifier (seal broken)    */
667dd7cddfSDavid du Colombier 	AUTH_REJECTEDVERF	= 4,	/* verifier expired or replayed  */
677dd7cddfSDavid du Colombier 	AUTH_TOOWEAK		= 5	/* rejected for security reasons */
687dd7cddfSDavid du Colombier };
697dd7cddfSDavid du Colombier 
707dd7cddfSDavid du Colombier enum
717dd7cddfSDavid du Colombier {
727dd7cddfSDavid du Colombier 	IPPROTO_TCP	= 6,	/* protocol number for TCP/IP */
737dd7cddfSDavid du Colombier 	IPPROTO_UDP	= 17	/* protocol number for UDP/IP */
747dd7cddfSDavid du Colombier };
757dd7cddfSDavid du Colombier 
767dd7cddfSDavid du Colombier #define	ROUNDUP(n)	((n) + ((-(n))&3))
777dd7cddfSDavid du Colombier 
787dd7cddfSDavid du Colombier #define	PLONG(x)	(dataptr[3] = ((ulong)(x)), dataptr[2] = ((ulong)(x))>>8, dataptr[1] = ((ulong)(x))>>16, dataptr[0] = ((ulong)(x))>>24, dataptr += 4)
797dd7cddfSDavid du Colombier #define	PPTR(x, n)	(memmove(dataptr, (x), n), dataptr += ROUNDUP(n))
80*9a747e4fSDavid du Colombier #define	PBYTE(x)	(*dataptr++ = (x))
817dd7cddfSDavid du Colombier 
827dd7cddfSDavid du Colombier #define	GLONG()		(argptr += 4, (((uchar*)argptr)[-1] | (((uchar*)argptr)[-2]<<8) | (((uchar*)argptr)[-3]<<16) | (((uchar*)argptr)[-4]<<24)))
837dd7cddfSDavid du Colombier #define	GPTR(n)		(void *)(argptr); argptr += ROUNDUP(n)
84*9a747e4fSDavid du Colombier #define	GBYTE()	(argptr++, ((uchar*)argptr)[-1])
85