xref: /freebsd/sys/rpc/rpc_msg.h (revision 2e322d379631c3bd6107e295f3e5d814c7845fc7)
1dfdcada3SDoug Rabson /*	$NetBSD: rpc_msg.h,v 1.11 2000/06/02 22:57:56 fvdl Exp $	*/
2dfdcada3SDoug Rabson 
3*2e322d37SHiroki Sato /*-
4*2e322d37SHiroki Sato  * Copyright (c) 2009, Sun Microsystems, Inc.
5*2e322d37SHiroki Sato  * All rights reserved.
6dfdcada3SDoug Rabson  *
7*2e322d37SHiroki Sato  * Redistribution and use in source and binary forms, with or without
8*2e322d37SHiroki Sato  * modification, are permitted provided that the following conditions are met:
9*2e322d37SHiroki Sato  * - Redistributions of source code must retain the above copyright notice,
10*2e322d37SHiroki Sato  *   this list of conditions and the following disclaimer.
11*2e322d37SHiroki Sato  * - Redistributions in binary form must reproduce the above copyright notice,
12*2e322d37SHiroki Sato  *   this list of conditions and the following disclaimer in the documentation
13*2e322d37SHiroki Sato  *   and/or other materials provided with the distribution.
14*2e322d37SHiroki Sato  * - Neither the name of Sun Microsystems, Inc. nor the names of its
15*2e322d37SHiroki Sato  *   contributors may be used to endorse or promote products derived
16*2e322d37SHiroki Sato  *   from this software without specific prior written permission.
17dfdcada3SDoug Rabson  *
18*2e322d37SHiroki Sato  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19*2e322d37SHiroki Sato  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20*2e322d37SHiroki Sato  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21*2e322d37SHiroki Sato  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22*2e322d37SHiroki Sato  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23*2e322d37SHiroki Sato  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24*2e322d37SHiroki Sato  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25*2e322d37SHiroki Sato  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26*2e322d37SHiroki Sato  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27*2e322d37SHiroki Sato  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28*2e322d37SHiroki Sato  * POSSIBILITY OF SUCH DAMAGE.
29dfdcada3SDoug Rabson  *
30dfdcada3SDoug Rabson  *	from: @(#)rpc_msg.h 1.7 86/07/16 SMI
31dfdcada3SDoug Rabson  *	from: @(#)rpc_msg.h	2.1 88/07/29 4.0 RPCSRC
32dfdcada3SDoug Rabson  * $FreeBSD$
33dfdcada3SDoug Rabson  */
34dfdcada3SDoug Rabson 
35dfdcada3SDoug Rabson /*
36dfdcada3SDoug Rabson  * rpc_msg.h
37dfdcada3SDoug Rabson  * rpc message definition
38dfdcada3SDoug Rabson  *
39dfdcada3SDoug Rabson  * Copyright (C) 1984, Sun Microsystems, Inc.
40dfdcada3SDoug Rabson  */
41dfdcada3SDoug Rabson 
42dfdcada3SDoug Rabson #ifndef _RPC_RPC_MSG_H
43dfdcada3SDoug Rabson #define _RPC_RPC_MSG_H
44dfdcada3SDoug Rabson 
45dfdcada3SDoug Rabson #define RPC_MSG_VERSION		((uint32_t) 2)
46dfdcada3SDoug Rabson #define RPC_SERVICE_PORT	((u_short) 2048)
47dfdcada3SDoug Rabson 
48dfdcada3SDoug Rabson /*
49dfdcada3SDoug Rabson  * Bottom up definition of an rpc message.
50dfdcada3SDoug Rabson  * NOTE: call and reply use the same overall stuct but
51dfdcada3SDoug Rabson  * different parts of unions within it.
52dfdcada3SDoug Rabson  */
53dfdcada3SDoug Rabson 
54dfdcada3SDoug Rabson enum msg_type {
55dfdcada3SDoug Rabson 	CALL=0,
56dfdcada3SDoug Rabson 	REPLY=1
57dfdcada3SDoug Rabson };
58dfdcada3SDoug Rabson 
59dfdcada3SDoug Rabson enum reply_stat {
60dfdcada3SDoug Rabson 	MSG_ACCEPTED=0,
61dfdcada3SDoug Rabson 	MSG_DENIED=1
62dfdcada3SDoug Rabson };
63dfdcada3SDoug Rabson 
64dfdcada3SDoug Rabson enum accept_stat {
65dfdcada3SDoug Rabson 	SUCCESS=0,
66dfdcada3SDoug Rabson 	PROG_UNAVAIL=1,
67dfdcada3SDoug Rabson 	PROG_MISMATCH=2,
68dfdcada3SDoug Rabson 	PROC_UNAVAIL=3,
69dfdcada3SDoug Rabson 	GARBAGE_ARGS=4,
70dfdcada3SDoug Rabson 	SYSTEM_ERR=5
71dfdcada3SDoug Rabson };
72dfdcada3SDoug Rabson 
73dfdcada3SDoug Rabson enum reject_stat {
74dfdcada3SDoug Rabson 	RPC_MISMATCH=0,
75dfdcada3SDoug Rabson 	AUTH_ERROR=1
76dfdcada3SDoug Rabson };
77dfdcada3SDoug Rabson 
78dfdcada3SDoug Rabson /*
79dfdcada3SDoug Rabson  * Reply part of an rpc exchange
80dfdcada3SDoug Rabson  */
81dfdcada3SDoug Rabson 
82dfdcada3SDoug Rabson /*
83dfdcada3SDoug Rabson  * Reply to an rpc request that was accepted by the server.
84dfdcada3SDoug Rabson  * Note: there could be an error even though the request was
85dfdcada3SDoug Rabson  * accepted.
86dfdcada3SDoug Rabson  */
87dfdcada3SDoug Rabson struct accepted_reply {
88dfdcada3SDoug Rabson 	struct opaque_auth	ar_verf;
89dfdcada3SDoug Rabson 	enum accept_stat	ar_stat;
90dfdcada3SDoug Rabson 	union {
91dfdcada3SDoug Rabson 		struct {
92dfdcada3SDoug Rabson 			rpcvers_t low;
93dfdcada3SDoug Rabson 			rpcvers_t high;
94dfdcada3SDoug Rabson 		} AR_versions;
95dfdcada3SDoug Rabson 		struct {
96dfdcada3SDoug Rabson 			caddr_t	where;
97dfdcada3SDoug Rabson 			xdrproc_t proc;
98dfdcada3SDoug Rabson 		} AR_results;
99dfdcada3SDoug Rabson 		/* and many other null cases */
100dfdcada3SDoug Rabson 	} ru;
101dfdcada3SDoug Rabson #define	ar_results	ru.AR_results
102dfdcada3SDoug Rabson #define	ar_vers		ru.AR_versions
103dfdcada3SDoug Rabson };
104dfdcada3SDoug Rabson 
105dfdcada3SDoug Rabson /*
106dfdcada3SDoug Rabson  * Reply to an rpc request that was rejected by the server.
107dfdcada3SDoug Rabson  */
108dfdcada3SDoug Rabson struct rejected_reply {
109dfdcada3SDoug Rabson 	enum reject_stat rj_stat;
110dfdcada3SDoug Rabson 	union {
111dfdcada3SDoug Rabson 		struct {
112dfdcada3SDoug Rabson 			rpcvers_t low;
113dfdcada3SDoug Rabson 			rpcvers_t high;
114dfdcada3SDoug Rabson 		} RJ_versions;
115dfdcada3SDoug Rabson 		enum auth_stat RJ_why;  /* why authentication did not work */
116dfdcada3SDoug Rabson 	} ru;
117dfdcada3SDoug Rabson #define	rj_vers	ru.RJ_versions
118dfdcada3SDoug Rabson #define	rj_why	ru.RJ_why
119dfdcada3SDoug Rabson };
120dfdcada3SDoug Rabson 
121dfdcada3SDoug Rabson /*
122dfdcada3SDoug Rabson  * Body of a reply to an rpc request.
123dfdcada3SDoug Rabson  */
124dfdcada3SDoug Rabson struct reply_body {
125dfdcada3SDoug Rabson 	enum reply_stat rp_stat;
126dfdcada3SDoug Rabson 	union {
127dfdcada3SDoug Rabson 		struct accepted_reply RP_ar;
128dfdcada3SDoug Rabson 		struct rejected_reply RP_dr;
129dfdcada3SDoug Rabson 	} ru;
130dfdcada3SDoug Rabson #define	rp_acpt	ru.RP_ar
131dfdcada3SDoug Rabson #define	rp_rjct	ru.RP_dr
132dfdcada3SDoug Rabson };
133dfdcada3SDoug Rabson 
134dfdcada3SDoug Rabson /*
135dfdcada3SDoug Rabson  * Body of an rpc request call.
136dfdcada3SDoug Rabson  */
137dfdcada3SDoug Rabson struct call_body {
138dfdcada3SDoug Rabson 	rpcvers_t cb_rpcvers;	/* must be equal to two */
139dfdcada3SDoug Rabson 	rpcprog_t cb_prog;
140dfdcada3SDoug Rabson 	rpcvers_t cb_vers;
141dfdcada3SDoug Rabson 	rpcproc_t cb_proc;
142dfdcada3SDoug Rabson 	struct opaque_auth cb_cred;
143dfdcada3SDoug Rabson 	struct opaque_auth cb_verf; /* protocol specific - provided by client */
144dfdcada3SDoug Rabson };
145dfdcada3SDoug Rabson 
146dfdcada3SDoug Rabson /*
147dfdcada3SDoug Rabson  * The rpc message
148dfdcada3SDoug Rabson  */
149dfdcada3SDoug Rabson struct rpc_msg {
150dfdcada3SDoug Rabson 	uint32_t		rm_xid;
151dfdcada3SDoug Rabson 	enum msg_type		rm_direction;
152dfdcada3SDoug Rabson 	union {
153dfdcada3SDoug Rabson 		struct call_body RM_cmb;
154dfdcada3SDoug Rabson 		struct reply_body RM_rmb;
155dfdcada3SDoug Rabson 	} ru;
156dfdcada3SDoug Rabson #define	rm_call		ru.RM_cmb
157dfdcada3SDoug Rabson #define	rm_reply	ru.RM_rmb
158dfdcada3SDoug Rabson };
159dfdcada3SDoug Rabson #define	acpted_rply	ru.RM_rmb.ru.RP_ar
160dfdcada3SDoug Rabson #define	rjcted_rply	ru.RM_rmb.ru.RP_dr
161dfdcada3SDoug Rabson 
162dfdcada3SDoug Rabson __BEGIN_DECLS
163dfdcada3SDoug Rabson /*
164dfdcada3SDoug Rabson  * XDR routine to handle a rpc message.
165dfdcada3SDoug Rabson  * xdr_callmsg(xdrs, cmsg)
166dfdcada3SDoug Rabson  * 	XDR *xdrs;
167dfdcada3SDoug Rabson  * 	struct rpc_msg *cmsg;
168dfdcada3SDoug Rabson  */
169dfdcada3SDoug Rabson extern bool_t	xdr_callmsg(XDR *, struct rpc_msg *);
170dfdcada3SDoug Rabson 
171dfdcada3SDoug Rabson /*
172dfdcada3SDoug Rabson  * XDR routine to pre-serialize the static part of a rpc message.
173dfdcada3SDoug Rabson  * xdr_callhdr(xdrs, cmsg)
174dfdcada3SDoug Rabson  * 	XDR *xdrs;
175dfdcada3SDoug Rabson  * 	struct rpc_msg *cmsg;
176dfdcada3SDoug Rabson  */
177dfdcada3SDoug Rabson extern bool_t	xdr_callhdr(XDR *, struct rpc_msg *);
178dfdcada3SDoug Rabson 
179dfdcada3SDoug Rabson /*
180dfdcada3SDoug Rabson  * XDR routine to handle a rpc reply.
181dfdcada3SDoug Rabson  * xdr_replymsg(xdrs, rmsg)
182dfdcada3SDoug Rabson  * 	XDR *xdrs;
183dfdcada3SDoug Rabson  * 	struct rpc_msg *rmsg;
184dfdcada3SDoug Rabson  */
185dfdcada3SDoug Rabson extern bool_t	xdr_replymsg(XDR *, struct rpc_msg *);
186dfdcada3SDoug Rabson 
187dfdcada3SDoug Rabson 
188dfdcada3SDoug Rabson /*
189dfdcada3SDoug Rabson  * XDR routine to handle an accepted rpc reply.
190dfdcada3SDoug Rabson  * xdr_accepted_reply(xdrs, rej)
191dfdcada3SDoug Rabson  * 	XDR *xdrs;
192dfdcada3SDoug Rabson  * 	struct accepted_reply *rej;
193dfdcada3SDoug Rabson  */
194dfdcada3SDoug Rabson extern bool_t	xdr_accepted_reply(XDR *, struct accepted_reply *);
195dfdcada3SDoug Rabson 
196dfdcada3SDoug Rabson /*
197dfdcada3SDoug Rabson  * XDR routine to handle a rejected rpc reply.
198dfdcada3SDoug Rabson  * xdr_rejected_reply(xdrs, rej)
199dfdcada3SDoug Rabson  * 	XDR *xdrs;
200dfdcada3SDoug Rabson  * 	struct rejected_reply *rej;
201dfdcada3SDoug Rabson  */
202dfdcada3SDoug Rabson extern bool_t	xdr_rejected_reply(XDR *, struct rejected_reply *);
203dfdcada3SDoug Rabson 
204dfdcada3SDoug Rabson /*
205dfdcada3SDoug Rabson  * Fills in the error part of a reply message.
206dfdcada3SDoug Rabson  * _seterr_reply(msg, error)
207dfdcada3SDoug Rabson  * 	struct rpc_msg *msg;
208dfdcada3SDoug Rabson  * 	struct rpc_err *error;
209dfdcada3SDoug Rabson  */
210a9148abdSDoug Rabson extern enum clnt_stat _seterr_reply(struct rpc_msg *, struct rpc_err *);
211dfdcada3SDoug Rabson __END_DECLS
212dfdcada3SDoug Rabson 
213dfdcada3SDoug Rabson #endif /* !_RPC_RPC_MSG_H */
214