xref: /freebsd/sys/rpc/rpc_msg.h (revision a9148abd9da5db2f1c682fb17bed791845fc41c9)
1dfdcada3SDoug Rabson /*	$NetBSD: rpc_msg.h,v 1.11 2000/06/02 22:57:56 fvdl Exp $	*/
2dfdcada3SDoug Rabson 
3dfdcada3SDoug Rabson /*
4dfdcada3SDoug Rabson  * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
5dfdcada3SDoug Rabson  * unrestricted use provided that this legend is included on all tape
6dfdcada3SDoug Rabson  * media and as a part of the software program in whole or part.  Users
7dfdcada3SDoug Rabson  * may copy or modify Sun RPC without charge, but are not authorized
8dfdcada3SDoug Rabson  * to license or distribute it to anyone else except as part of a product or
9dfdcada3SDoug Rabson  * program developed by the user.
10dfdcada3SDoug Rabson  *
11dfdcada3SDoug Rabson  * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
12dfdcada3SDoug Rabson  * WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
13dfdcada3SDoug Rabson  * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
14dfdcada3SDoug Rabson  *
15dfdcada3SDoug Rabson  * Sun RPC is provided with no support and without any obligation on the
16dfdcada3SDoug Rabson  * part of Sun Microsystems, Inc. to assist in its use, correction,
17dfdcada3SDoug Rabson  * modification or enhancement.
18dfdcada3SDoug Rabson  *
19dfdcada3SDoug Rabson  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
20dfdcada3SDoug Rabson  * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
21dfdcada3SDoug Rabson  * OR ANY PART THEREOF.
22dfdcada3SDoug Rabson  *
23dfdcada3SDoug Rabson  * In no event will Sun Microsystems, Inc. be liable for any lost revenue
24dfdcada3SDoug Rabson  * or profits or other special, indirect and consequential damages, even if
25dfdcada3SDoug Rabson  * Sun has been advised of the possibility of such damages.
26dfdcada3SDoug Rabson  *
27dfdcada3SDoug Rabson  * Sun Microsystems, Inc.
28dfdcada3SDoug Rabson  * 2550 Garcia Avenue
29dfdcada3SDoug Rabson  * Mountain View, California  94043
30dfdcada3SDoug Rabson  *
31dfdcada3SDoug Rabson  *	from: @(#)rpc_msg.h 1.7 86/07/16 SMI
32dfdcada3SDoug Rabson  *	from: @(#)rpc_msg.h	2.1 88/07/29 4.0 RPCSRC
33dfdcada3SDoug Rabson  * $FreeBSD$
34dfdcada3SDoug Rabson  */
35dfdcada3SDoug Rabson 
36dfdcada3SDoug Rabson /*
37dfdcada3SDoug Rabson  * rpc_msg.h
38dfdcada3SDoug Rabson  * rpc message definition
39dfdcada3SDoug Rabson  *
40dfdcada3SDoug Rabson  * Copyright (C) 1984, Sun Microsystems, Inc.
41dfdcada3SDoug Rabson  */
42dfdcada3SDoug Rabson 
43dfdcada3SDoug Rabson #ifndef _RPC_RPC_MSG_H
44dfdcada3SDoug Rabson #define _RPC_RPC_MSG_H
45dfdcada3SDoug Rabson 
46dfdcada3SDoug Rabson #define RPC_MSG_VERSION		((uint32_t) 2)
47dfdcada3SDoug Rabson #define RPC_SERVICE_PORT	((u_short) 2048)
48dfdcada3SDoug Rabson 
49dfdcada3SDoug Rabson /*
50dfdcada3SDoug Rabson  * Bottom up definition of an rpc message.
51dfdcada3SDoug Rabson  * NOTE: call and reply use the same overall stuct but
52dfdcada3SDoug Rabson  * different parts of unions within it.
53dfdcada3SDoug Rabson  */
54dfdcada3SDoug Rabson 
55dfdcada3SDoug Rabson enum msg_type {
56dfdcada3SDoug Rabson 	CALL=0,
57dfdcada3SDoug Rabson 	REPLY=1
58dfdcada3SDoug Rabson };
59dfdcada3SDoug Rabson 
60dfdcada3SDoug Rabson enum reply_stat {
61dfdcada3SDoug Rabson 	MSG_ACCEPTED=0,
62dfdcada3SDoug Rabson 	MSG_DENIED=1
63dfdcada3SDoug Rabson };
64dfdcada3SDoug Rabson 
65dfdcada3SDoug Rabson enum accept_stat {
66dfdcada3SDoug Rabson 	SUCCESS=0,
67dfdcada3SDoug Rabson 	PROG_UNAVAIL=1,
68dfdcada3SDoug Rabson 	PROG_MISMATCH=2,
69dfdcada3SDoug Rabson 	PROC_UNAVAIL=3,
70dfdcada3SDoug Rabson 	GARBAGE_ARGS=4,
71dfdcada3SDoug Rabson 	SYSTEM_ERR=5
72dfdcada3SDoug Rabson };
73dfdcada3SDoug Rabson 
74dfdcada3SDoug Rabson enum reject_stat {
75dfdcada3SDoug Rabson 	RPC_MISMATCH=0,
76dfdcada3SDoug Rabson 	AUTH_ERROR=1
77dfdcada3SDoug Rabson };
78dfdcada3SDoug Rabson 
79dfdcada3SDoug Rabson /*
80dfdcada3SDoug Rabson  * Reply part of an rpc exchange
81dfdcada3SDoug Rabson  */
82dfdcada3SDoug Rabson 
83dfdcada3SDoug Rabson /*
84dfdcada3SDoug Rabson  * Reply to an rpc request that was accepted by the server.
85dfdcada3SDoug Rabson  * Note: there could be an error even though the request was
86dfdcada3SDoug Rabson  * accepted.
87dfdcada3SDoug Rabson  */
88dfdcada3SDoug Rabson struct accepted_reply {
89dfdcada3SDoug Rabson 	struct opaque_auth	ar_verf;
90dfdcada3SDoug Rabson 	enum accept_stat	ar_stat;
91dfdcada3SDoug Rabson 	union {
92dfdcada3SDoug Rabson 		struct {
93dfdcada3SDoug Rabson 			rpcvers_t low;
94dfdcada3SDoug Rabson 			rpcvers_t high;
95dfdcada3SDoug Rabson 		} AR_versions;
96dfdcada3SDoug Rabson 		struct {
97dfdcada3SDoug Rabson 			caddr_t	where;
98dfdcada3SDoug Rabson 			xdrproc_t proc;
99dfdcada3SDoug Rabson 		} AR_results;
100dfdcada3SDoug Rabson 		/* and many other null cases */
101dfdcada3SDoug Rabson 	} ru;
102dfdcada3SDoug Rabson #define	ar_results	ru.AR_results
103dfdcada3SDoug Rabson #define	ar_vers		ru.AR_versions
104dfdcada3SDoug Rabson };
105dfdcada3SDoug Rabson 
106dfdcada3SDoug Rabson /*
107dfdcada3SDoug Rabson  * Reply to an rpc request that was rejected by the server.
108dfdcada3SDoug Rabson  */
109dfdcada3SDoug Rabson struct rejected_reply {
110dfdcada3SDoug Rabson 	enum reject_stat rj_stat;
111dfdcada3SDoug Rabson 	union {
112dfdcada3SDoug Rabson 		struct {
113dfdcada3SDoug Rabson 			rpcvers_t low;
114dfdcada3SDoug Rabson 			rpcvers_t high;
115dfdcada3SDoug Rabson 		} RJ_versions;
116dfdcada3SDoug Rabson 		enum auth_stat RJ_why;  /* why authentication did not work */
117dfdcada3SDoug Rabson 	} ru;
118dfdcada3SDoug Rabson #define	rj_vers	ru.RJ_versions
119dfdcada3SDoug Rabson #define	rj_why	ru.RJ_why
120dfdcada3SDoug Rabson };
121dfdcada3SDoug Rabson 
122dfdcada3SDoug Rabson /*
123dfdcada3SDoug Rabson  * Body of a reply to an rpc request.
124dfdcada3SDoug Rabson  */
125dfdcada3SDoug Rabson struct reply_body {
126dfdcada3SDoug Rabson 	enum reply_stat rp_stat;
127dfdcada3SDoug Rabson 	union {
128dfdcada3SDoug Rabson 		struct accepted_reply RP_ar;
129dfdcada3SDoug Rabson 		struct rejected_reply RP_dr;
130dfdcada3SDoug Rabson 	} ru;
131dfdcada3SDoug Rabson #define	rp_acpt	ru.RP_ar
132dfdcada3SDoug Rabson #define	rp_rjct	ru.RP_dr
133dfdcada3SDoug Rabson };
134dfdcada3SDoug Rabson 
135dfdcada3SDoug Rabson /*
136dfdcada3SDoug Rabson  * Body of an rpc request call.
137dfdcada3SDoug Rabson  */
138dfdcada3SDoug Rabson struct call_body {
139dfdcada3SDoug Rabson 	rpcvers_t cb_rpcvers;	/* must be equal to two */
140dfdcada3SDoug Rabson 	rpcprog_t cb_prog;
141dfdcada3SDoug Rabson 	rpcvers_t cb_vers;
142dfdcada3SDoug Rabson 	rpcproc_t cb_proc;
143dfdcada3SDoug Rabson 	struct opaque_auth cb_cred;
144dfdcada3SDoug Rabson 	struct opaque_auth cb_verf; /* protocol specific - provided by client */
145dfdcada3SDoug Rabson };
146dfdcada3SDoug Rabson 
147dfdcada3SDoug Rabson /*
148dfdcada3SDoug Rabson  * The rpc message
149dfdcada3SDoug Rabson  */
150dfdcada3SDoug Rabson struct rpc_msg {
151dfdcada3SDoug Rabson 	uint32_t		rm_xid;
152dfdcada3SDoug Rabson 	enum msg_type		rm_direction;
153dfdcada3SDoug Rabson 	union {
154dfdcada3SDoug Rabson 		struct call_body RM_cmb;
155dfdcada3SDoug Rabson 		struct reply_body RM_rmb;
156dfdcada3SDoug Rabson 	} ru;
157dfdcada3SDoug Rabson #define	rm_call		ru.RM_cmb
158dfdcada3SDoug Rabson #define	rm_reply	ru.RM_rmb
159dfdcada3SDoug Rabson };
160dfdcada3SDoug Rabson #define	acpted_rply	ru.RM_rmb.ru.RP_ar
161dfdcada3SDoug Rabson #define	rjcted_rply	ru.RM_rmb.ru.RP_dr
162dfdcada3SDoug Rabson 
163dfdcada3SDoug Rabson __BEGIN_DECLS
164dfdcada3SDoug Rabson /*
165dfdcada3SDoug Rabson  * XDR routine to handle a rpc message.
166dfdcada3SDoug Rabson  * xdr_callmsg(xdrs, cmsg)
167dfdcada3SDoug Rabson  * 	XDR *xdrs;
168dfdcada3SDoug Rabson  * 	struct rpc_msg *cmsg;
169dfdcada3SDoug Rabson  */
170dfdcada3SDoug Rabson extern bool_t	xdr_callmsg(XDR *, struct rpc_msg *);
171dfdcada3SDoug Rabson 
172dfdcada3SDoug Rabson /*
173dfdcada3SDoug Rabson  * XDR routine to pre-serialize the static part of a rpc message.
174dfdcada3SDoug Rabson  * xdr_callhdr(xdrs, cmsg)
175dfdcada3SDoug Rabson  * 	XDR *xdrs;
176dfdcada3SDoug Rabson  * 	struct rpc_msg *cmsg;
177dfdcada3SDoug Rabson  */
178dfdcada3SDoug Rabson extern bool_t	xdr_callhdr(XDR *, struct rpc_msg *);
179dfdcada3SDoug Rabson 
180dfdcada3SDoug Rabson /*
181dfdcada3SDoug Rabson  * XDR routine to handle a rpc reply.
182dfdcada3SDoug Rabson  * xdr_replymsg(xdrs, rmsg)
183dfdcada3SDoug Rabson  * 	XDR *xdrs;
184dfdcada3SDoug Rabson  * 	struct rpc_msg *rmsg;
185dfdcada3SDoug Rabson  */
186dfdcada3SDoug Rabson extern bool_t	xdr_replymsg(XDR *, struct rpc_msg *);
187dfdcada3SDoug Rabson 
188dfdcada3SDoug Rabson 
189dfdcada3SDoug Rabson /*
190dfdcada3SDoug Rabson  * XDR routine to handle an accepted rpc reply.
191dfdcada3SDoug Rabson  * xdr_accepted_reply(xdrs, rej)
192dfdcada3SDoug Rabson  * 	XDR *xdrs;
193dfdcada3SDoug Rabson  * 	struct accepted_reply *rej;
194dfdcada3SDoug Rabson  */
195dfdcada3SDoug Rabson extern bool_t	xdr_accepted_reply(XDR *, struct accepted_reply *);
196dfdcada3SDoug Rabson 
197dfdcada3SDoug Rabson /*
198dfdcada3SDoug Rabson  * XDR routine to handle a rejected rpc reply.
199dfdcada3SDoug Rabson  * xdr_rejected_reply(xdrs, rej)
200dfdcada3SDoug Rabson  * 	XDR *xdrs;
201dfdcada3SDoug Rabson  * 	struct rejected_reply *rej;
202dfdcada3SDoug Rabson  */
203dfdcada3SDoug Rabson extern bool_t	xdr_rejected_reply(XDR *, struct rejected_reply *);
204dfdcada3SDoug Rabson 
205dfdcada3SDoug Rabson /*
206dfdcada3SDoug Rabson  * Fills in the error part of a reply message.
207dfdcada3SDoug Rabson  * _seterr_reply(msg, error)
208dfdcada3SDoug Rabson  * 	struct rpc_msg *msg;
209dfdcada3SDoug Rabson  * 	struct rpc_err *error;
210dfdcada3SDoug Rabson  */
211a9148abdSDoug Rabson extern enum clnt_stat _seterr_reply(struct rpc_msg *, struct rpc_err *);
212dfdcada3SDoug Rabson __END_DECLS
213dfdcada3SDoug Rabson 
214dfdcada3SDoug Rabson #endif /* !_RPC_RPC_MSG_H */
215