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