xref: /freebsd/sys/rpc/rpc_msg.h (revision 51369649b03ece2aed3eb61b0c8214b9aa5b2fa2)
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  *	from: @(#)rpc_msg.h 1.7 86/07/16 SMI
33dfdcada3SDoug Rabson  *	from: @(#)rpc_msg.h	2.1 88/07/29 4.0 RPCSRC
34dfdcada3SDoug Rabson  * $FreeBSD$
35dfdcada3SDoug Rabson  */
36dfdcada3SDoug Rabson 
37dfdcada3SDoug Rabson /*
38dfdcada3SDoug Rabson  * rpc_msg.h
39dfdcada3SDoug Rabson  * rpc message definition
40dfdcada3SDoug Rabson  *
41dfdcada3SDoug Rabson  * Copyright (C) 1984, Sun Microsystems, Inc.
42dfdcada3SDoug Rabson  */
43dfdcada3SDoug Rabson 
44dfdcada3SDoug Rabson #ifndef _RPC_RPC_MSG_H
45dfdcada3SDoug Rabson #define _RPC_RPC_MSG_H
46dfdcada3SDoug Rabson 
47dfdcada3SDoug Rabson #define RPC_MSG_VERSION		((uint32_t) 2)
48dfdcada3SDoug Rabson #define RPC_SERVICE_PORT	((u_short) 2048)
49dfdcada3SDoug Rabson 
50dfdcada3SDoug Rabson /*
51dfdcada3SDoug Rabson  * Bottom up definition of an rpc message.
52dfdcada3SDoug Rabson  * NOTE: call and reply use the same overall stuct but
53dfdcada3SDoug Rabson  * different parts of unions within it.
54dfdcada3SDoug Rabson  */
55dfdcada3SDoug Rabson 
56dfdcada3SDoug Rabson enum msg_type {
57dfdcada3SDoug Rabson 	CALL=0,
58dfdcada3SDoug Rabson 	REPLY=1
59dfdcada3SDoug Rabson };
60dfdcada3SDoug Rabson 
61dfdcada3SDoug Rabson enum reply_stat {
62dfdcada3SDoug Rabson 	MSG_ACCEPTED=0,
63dfdcada3SDoug Rabson 	MSG_DENIED=1
64dfdcada3SDoug Rabson };
65dfdcada3SDoug Rabson 
66dfdcada3SDoug Rabson enum accept_stat {
67dfdcada3SDoug Rabson 	SUCCESS=0,
68dfdcada3SDoug Rabson 	PROG_UNAVAIL=1,
69dfdcada3SDoug Rabson 	PROG_MISMATCH=2,
70dfdcada3SDoug Rabson 	PROC_UNAVAIL=3,
71dfdcada3SDoug Rabson 	GARBAGE_ARGS=4,
72dfdcada3SDoug Rabson 	SYSTEM_ERR=5
73dfdcada3SDoug Rabson };
74dfdcada3SDoug Rabson 
75dfdcada3SDoug Rabson enum reject_stat {
76dfdcada3SDoug Rabson 	RPC_MISMATCH=0,
77dfdcada3SDoug Rabson 	AUTH_ERROR=1
78dfdcada3SDoug Rabson };
79dfdcada3SDoug Rabson 
80dfdcada3SDoug Rabson /*
81dfdcada3SDoug Rabson  * Reply part of an rpc exchange
82dfdcada3SDoug Rabson  */
83dfdcada3SDoug Rabson 
84dfdcada3SDoug Rabson /*
85dfdcada3SDoug Rabson  * Reply to an rpc request that was accepted by the server.
86dfdcada3SDoug Rabson  * Note: there could be an error even though the request was
87dfdcada3SDoug Rabson  * accepted.
88dfdcada3SDoug Rabson  */
89dfdcada3SDoug Rabson struct accepted_reply {
90dfdcada3SDoug Rabson 	struct opaque_auth	ar_verf;
91dfdcada3SDoug Rabson 	enum accept_stat	ar_stat;
92dfdcada3SDoug Rabson 	union {
93dfdcada3SDoug Rabson 		struct {
94dfdcada3SDoug Rabson 			rpcvers_t low;
95dfdcada3SDoug Rabson 			rpcvers_t high;
96dfdcada3SDoug Rabson 		} AR_versions;
97dfdcada3SDoug Rabson 		struct {
98dfdcada3SDoug Rabson 			caddr_t	where;
99dfdcada3SDoug Rabson 			xdrproc_t proc;
100dfdcada3SDoug Rabson 		} AR_results;
101dfdcada3SDoug Rabson 		/* and many other null cases */
102dfdcada3SDoug Rabson 	} ru;
103dfdcada3SDoug Rabson #define	ar_results	ru.AR_results
104dfdcada3SDoug Rabson #define	ar_vers		ru.AR_versions
105dfdcada3SDoug Rabson };
106dfdcada3SDoug Rabson 
107dfdcada3SDoug Rabson /*
108dfdcada3SDoug Rabson  * Reply to an rpc request that was rejected by the server.
109dfdcada3SDoug Rabson  */
110dfdcada3SDoug Rabson struct rejected_reply {
111dfdcada3SDoug Rabson 	enum reject_stat rj_stat;
112dfdcada3SDoug Rabson 	union {
113dfdcada3SDoug Rabson 		struct {
114dfdcada3SDoug Rabson 			rpcvers_t low;
115dfdcada3SDoug Rabson 			rpcvers_t high;
116dfdcada3SDoug Rabson 		} RJ_versions;
117dfdcada3SDoug Rabson 		enum auth_stat RJ_why;  /* why authentication did not work */
118dfdcada3SDoug Rabson 	} ru;
119dfdcada3SDoug Rabson #define	rj_vers	ru.RJ_versions
120dfdcada3SDoug Rabson #define	rj_why	ru.RJ_why
121dfdcada3SDoug Rabson };
122dfdcada3SDoug Rabson 
123dfdcada3SDoug Rabson /*
124dfdcada3SDoug Rabson  * Body of a reply to an rpc request.
125dfdcada3SDoug Rabson  */
126dfdcada3SDoug Rabson struct reply_body {
127dfdcada3SDoug Rabson 	enum reply_stat rp_stat;
128dfdcada3SDoug Rabson 	union {
129dfdcada3SDoug Rabson 		struct accepted_reply RP_ar;
130dfdcada3SDoug Rabson 		struct rejected_reply RP_dr;
131dfdcada3SDoug Rabson 	} ru;
132dfdcada3SDoug Rabson #define	rp_acpt	ru.RP_ar
133dfdcada3SDoug Rabson #define	rp_rjct	ru.RP_dr
134dfdcada3SDoug Rabson };
135dfdcada3SDoug Rabson 
136dfdcada3SDoug Rabson /*
137dfdcada3SDoug Rabson  * Body of an rpc request call.
138dfdcada3SDoug Rabson  */
139dfdcada3SDoug Rabson struct call_body {
140dfdcada3SDoug Rabson 	rpcvers_t cb_rpcvers;	/* must be equal to two */
141dfdcada3SDoug Rabson 	rpcprog_t cb_prog;
142dfdcada3SDoug Rabson 	rpcvers_t cb_vers;
143dfdcada3SDoug Rabson 	rpcproc_t cb_proc;
144dfdcada3SDoug Rabson 	struct opaque_auth cb_cred;
145dfdcada3SDoug Rabson 	struct opaque_auth cb_verf; /* protocol specific - provided by client */
146dfdcada3SDoug Rabson };
147dfdcada3SDoug Rabson 
148dfdcada3SDoug Rabson /*
149dfdcada3SDoug Rabson  * The rpc message
150dfdcada3SDoug Rabson  */
151dfdcada3SDoug Rabson struct rpc_msg {
152dfdcada3SDoug Rabson 	uint32_t		rm_xid;
153dfdcada3SDoug Rabson 	enum msg_type		rm_direction;
154dfdcada3SDoug Rabson 	union {
155dfdcada3SDoug Rabson 		struct call_body RM_cmb;
156dfdcada3SDoug Rabson 		struct reply_body RM_rmb;
157dfdcada3SDoug Rabson 	} ru;
158dfdcada3SDoug Rabson #define	rm_call		ru.RM_cmb
159dfdcada3SDoug Rabson #define	rm_reply	ru.RM_rmb
160dfdcada3SDoug Rabson };
161dfdcada3SDoug Rabson #define	acpted_rply	ru.RM_rmb.ru.RP_ar
162dfdcada3SDoug Rabson #define	rjcted_rply	ru.RM_rmb.ru.RP_dr
163dfdcada3SDoug Rabson 
164dfdcada3SDoug Rabson __BEGIN_DECLS
165dfdcada3SDoug Rabson /*
166dfdcada3SDoug Rabson  * XDR routine to handle a rpc message.
167dfdcada3SDoug Rabson  * xdr_callmsg(xdrs, cmsg)
168dfdcada3SDoug Rabson  * 	XDR *xdrs;
169dfdcada3SDoug Rabson  * 	struct rpc_msg *cmsg;
170dfdcada3SDoug Rabson  */
171dfdcada3SDoug Rabson extern bool_t	xdr_callmsg(XDR *, struct rpc_msg *);
172dfdcada3SDoug Rabson 
173dfdcada3SDoug Rabson /*
174dfdcada3SDoug Rabson  * XDR routine to pre-serialize the static part of a rpc message.
175dfdcada3SDoug Rabson  * xdr_callhdr(xdrs, cmsg)
176dfdcada3SDoug Rabson  * 	XDR *xdrs;
177dfdcada3SDoug Rabson  * 	struct rpc_msg *cmsg;
178dfdcada3SDoug Rabson  */
179dfdcada3SDoug Rabson extern bool_t	xdr_callhdr(XDR *, struct rpc_msg *);
180dfdcada3SDoug Rabson 
181dfdcada3SDoug Rabson /*
182dfdcada3SDoug Rabson  * XDR routine to handle a rpc reply.
183dfdcada3SDoug Rabson  * xdr_replymsg(xdrs, rmsg)
184dfdcada3SDoug Rabson  * 	XDR *xdrs;
185dfdcada3SDoug Rabson  * 	struct rpc_msg *rmsg;
186dfdcada3SDoug Rabson  */
187dfdcada3SDoug Rabson extern bool_t	xdr_replymsg(XDR *, struct rpc_msg *);
188dfdcada3SDoug Rabson 
189dfdcada3SDoug Rabson 
190dfdcada3SDoug Rabson /*
191dfdcada3SDoug Rabson  * XDR routine to handle an accepted rpc reply.
192dfdcada3SDoug Rabson  * xdr_accepted_reply(xdrs, rej)
193dfdcada3SDoug Rabson  * 	XDR *xdrs;
194dfdcada3SDoug Rabson  * 	struct accepted_reply *rej;
195dfdcada3SDoug Rabson  */
196dfdcada3SDoug Rabson extern bool_t	xdr_accepted_reply(XDR *, struct accepted_reply *);
197dfdcada3SDoug Rabson 
198dfdcada3SDoug Rabson /*
199dfdcada3SDoug Rabson  * XDR routine to handle a rejected rpc reply.
200dfdcada3SDoug Rabson  * xdr_rejected_reply(xdrs, rej)
201dfdcada3SDoug Rabson  * 	XDR *xdrs;
202dfdcada3SDoug Rabson  * 	struct rejected_reply *rej;
203dfdcada3SDoug Rabson  */
204dfdcada3SDoug Rabson extern bool_t	xdr_rejected_reply(XDR *, struct rejected_reply *);
205dfdcada3SDoug Rabson 
206dfdcada3SDoug Rabson /*
207dfdcada3SDoug Rabson  * Fills in the error part of a reply message.
208dfdcada3SDoug Rabson  * _seterr_reply(msg, error)
209dfdcada3SDoug Rabson  * 	struct rpc_msg *msg;
210dfdcada3SDoug Rabson  * 	struct rpc_err *error;
211dfdcada3SDoug Rabson  */
212a9148abdSDoug Rabson extern enum clnt_stat _seterr_reply(struct rpc_msg *, struct rpc_err *);
213dfdcada3SDoug Rabson __END_DECLS
214dfdcada3SDoug Rabson 
215dfdcada3SDoug Rabson #endif /* !_RPC_RPC_MSG_H */
216