rpc_msg.h revision 267654
1203954Srdivacky/*	$NetBSD: rpc_msg.h,v 1.11 2000/06/02 22:57:56 fvdl Exp $	*/
2203954Srdivacky
3203954Srdivacky/*-
4203954Srdivacky * Copyright (c) 2009, Sun Microsystems, Inc.
5203954Srdivacky * All rights reserved.
6203954Srdivacky *
7203954Srdivacky * Redistribution and use in source and binary forms, with or without
8203954Srdivacky * modification, are permitted provided that the following conditions are met:
9203954Srdivacky * - Redistributions of source code must retain the above copyright notice,
10203954Srdivacky *   this list of conditions and the following disclaimer.
11203954Srdivacky * - Redistributions in binary form must reproduce the above copyright notice,
12203954Srdivacky *   this list of conditions and the following disclaimer in the documentation
13203954Srdivacky *   and/or other materials provided with the distribution.
14203954Srdivacky * - Neither the name of Sun Microsystems, Inc. nor the names of its
15203954Srdivacky *   contributors may be used to endorse or promote products derived
16203954Srdivacky *   from this software without specific prior written permission.
17243830Sdim *
18226633Sdim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19203954Srdivacky * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20203954Srdivacky * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21203954Srdivacky * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22203954Srdivacky * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23203954Srdivacky * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24203954Srdivacky * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25203954Srdivacky * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26203954Srdivacky * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27203954Srdivacky * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28203954Srdivacky * POSSIBILITY OF SUCH DAMAGE.
29203954Srdivacky *
30203954Srdivacky *	from: @(#)rpc_msg.h 1.7 86/07/16 SMI
31203954Srdivacky *	from: @(#)rpc_msg.h	2.1 88/07/29 4.0 RPCSRC
32203954Srdivacky * $FreeBSD: releng/9.3/include/rpc/rpc_msg.h 261057 2014-01-23 00:28:17Z mav $
33203954Srdivacky */
34203954Srdivacky
35263508Sdim/*
36203954Srdivacky * rpc_msg.h
37203954Srdivacky * rpc message definition
38263508Sdim *
39203954Srdivacky * Copyright (C) 1984, Sun Microsystems, Inc.
40203954Srdivacky */
41203954Srdivacky
42206274Srdivacky#ifndef _RPC_RPC_MSG_H
43203954Srdivacky#define _RPC_RPC_MSG_H
44203954Srdivacky
45203954Srdivacky#define RPC_MSG_VERSION		((u_int32_t) 2)
46203954Srdivacky#define RPC_SERVICE_PORT	((u_short) 2048)
47203954Srdivacky
48203954Srdivacky/*
49203954Srdivacky * Bottom up definition of an rpc message.
50203954Srdivacky * NOTE: call and reply use the same overall stuct but
51203954Srdivacky * different parts of unions within it.
52203954Srdivacky */
53203954Srdivacky
54203954Srdivackyenum msg_type {
55203954Srdivacky	CALL=0,
56263508Sdim	REPLY=1
57203954Srdivacky};
58203954Srdivacky
59263508Sdimenum reply_stat {
60263508Sdim	MSG_ACCEPTED=0,
61263508Sdim	MSG_DENIED=1
62203954Srdivacky};
63203954Srdivacky
64218893Sdimenum accept_stat {
65203954Srdivacky	SUCCESS=0,
66203954Srdivacky	PROG_UNAVAIL=1,
67203954Srdivacky	PROG_MISMATCH=2,
68218893Sdim	PROC_UNAVAIL=3,
69203954Srdivacky	GARBAGE_ARGS=4,
70263508Sdim	SYSTEM_ERR=5
71203954Srdivacky};
72203954Srdivacky
73218893Sdimenum reject_stat {
74218893Sdim	RPC_MISMATCH=0,
75218893Sdim	AUTH_ERROR=1
76218893Sdim};
77218893Sdim
78218893Sdim/*
79218893Sdim * Reply part of an rpc exchange
80218893Sdim */
81218893Sdim
82218893Sdim/*
83218893Sdim * Reply to an rpc request that was accepted by the server.
84218893Sdim * Note: there could be an error even though the request was
85263508Sdim * accepted.
86218893Sdim */
87218893Sdimstruct accepted_reply {
88218893Sdim	struct opaque_auth	ar_verf;
89218893Sdim	enum accept_stat	ar_stat;
90218893Sdim	union {
91218893Sdim		struct {
92218893Sdim			rpcvers_t low;
93218893Sdim			rpcvers_t high;
94218893Sdim		} AR_versions;
95218893Sdim		struct {
96218893Sdim			caddr_t	where;
97218893Sdim			xdrproc_t proc;
98218893Sdim		} AR_results;
99218893Sdim		/* and many other null cases */
100218893Sdim	} ru;
101218893Sdim#define	ar_results	ru.AR_results
102218893Sdim#define	ar_vers		ru.AR_versions
103218893Sdim};
104203954Srdivacky
105218893Sdim/*
106203954Srdivacky * Reply to an rpc request that was rejected by the server.
107203954Srdivacky */
108203954Srdivackystruct rejected_reply {
109203954Srdivacky	enum reject_stat rj_stat;
110203954Srdivacky	union {
111203954Srdivacky		struct {
112203954Srdivacky			rpcvers_t low;
113203954Srdivacky			rpcvers_t high;
114203954Srdivacky		} RJ_versions;
115263508Sdim		enum auth_stat RJ_why;  /* why authentication did not work */
116203954Srdivacky	} ru;
117263508Sdim#define	rj_vers	ru.RJ_versions
118203954Srdivacky#define	rj_why	ru.RJ_why
119203954Srdivacky};
120203954Srdivacky
121203954Srdivacky/*
122203954Srdivacky * Body of a reply to an rpc request.
123263508Sdim */
124203954Srdivackystruct reply_body {
125203954Srdivacky	enum reply_stat rp_stat;
126203954Srdivacky	union {
127243830Sdim		struct accepted_reply RP_ar;
128243830Sdim		struct rejected_reply RP_dr;
129203954Srdivacky	} ru;
130203954Srdivacky#define	rp_acpt	ru.RP_ar
131203954Srdivacky#define	rp_rjct	ru.RP_dr
132203954Srdivacky};
133203954Srdivacky
134203954Srdivacky/*
135218893Sdim * Body of an rpc request call.
136203954Srdivacky */
137203954Srdivackystruct call_body {
138203954Srdivacky	rpcvers_t cb_rpcvers;	/* must be equal to two */
139203954Srdivacky	rpcprog_t cb_prog;
140263508Sdim	rpcvers_t cb_vers;
141203954Srdivacky	rpcproc_t cb_proc;
142203954Srdivacky	struct opaque_auth cb_cred;
143203954Srdivacky	struct opaque_auth cb_verf; /* protocol specific - provided by client */
144203954Srdivacky};
145203954Srdivacky
146203954Srdivacky/*
147203954Srdivacky * The rpc message
148203954Srdivacky */
149203954Srdivackystruct rpc_msg {
150263508Sdim	u_int32_t		rm_xid;
151203954Srdivacky	enum msg_type		rm_direction;
152203954Srdivacky	union {
153203954Srdivacky		struct call_body RM_cmb;
154203954Srdivacky		struct reply_body RM_rmb;
155263508Sdim	} ru;
156203954Srdivacky#define	rm_call		ru.RM_cmb
157203954Srdivacky#define	rm_reply	ru.RM_rmb
158203954Srdivacky};
159203954Srdivacky#define	acpted_rply	ru.RM_rmb.ru.RP_ar
160263508Sdim#define	rjcted_rply	ru.RM_rmb.ru.RP_dr
161203954Srdivacky
162203954Srdivacky__BEGIN_DECLS
163203954Srdivacky/*
164203954Srdivacky * XDR routine to handle a rpc message.
165203954Srdivacky * xdr_callmsg(xdrs, cmsg)
166243830Sdim * 	XDR *xdrs;
167243830Sdim * 	struct rpc_msg *cmsg;
168263508Sdim */
169203954Srdivackyextern bool_t	xdr_callmsg(XDR *, struct rpc_msg *);
170203954Srdivacky
171203954Srdivacky/*
172203954Srdivacky * XDR routine to pre-serialize the static part of a rpc message.
173243830Sdim * xdr_callhdr(xdrs, cmsg)
174243830Sdim * 	XDR *xdrs;
175263508Sdim * 	struct rpc_msg *cmsg;
176203954Srdivacky */
177203954Srdivackyextern bool_t	xdr_callhdr(XDR *, struct rpc_msg *);
178203954Srdivacky
179203954Srdivacky/*
180203954Srdivacky * XDR routine to handle a rpc reply.
181203954Srdivacky * xdr_replymsg(xdrs, rmsg)
182243830Sdim * 	XDR *xdrs;
183203954Srdivacky * 	struct rpc_msg *rmsg;
184263508Sdim */
185203954Srdivackyextern bool_t	xdr_replymsg(XDR *, struct rpc_msg *);
186243830Sdim
187243830Sdim
188203954Srdivacky/*
189203954Srdivacky * XDR routine to handle an accepted rpc reply.
190203954Srdivacky * xdr_accepted_reply(xdrs, rej)
191243830Sdim * 	XDR *xdrs;
192243830Sdim * 	struct accepted_reply *rej;
193263508Sdim */
194203954Srdivackyextern bool_t	xdr_accepted_reply(XDR *, struct accepted_reply *);
195203954Srdivacky
196263508Sdim/*
197263508Sdim * XDR routine to handle a rejected rpc reply.
198263508Sdim * xdr_rejected_reply(xdrs, rej)
199203954Srdivacky * 	XDR *xdrs;
200203954Srdivacky * 	struct rejected_reply *rej;
201203954Srdivacky */
202218893Sdimextern bool_t	xdr_rejected_reply(XDR *, struct rejected_reply *);
203218893Sdim
204263508Sdim/*
205218893Sdim * Fills in the error part of a reply message.
206263508Sdim * _seterr_reply(msg, error)
207218893Sdim * 	struct rpc_msg *msg;
208203954Srdivacky * 	struct rpc_err *error;
209203954Srdivacky */
210203954Srdivackyextern void	_seterr_reply(struct rpc_msg *, struct rpc_err *);
211203954Srdivacky__END_DECLS
212263508Sdim
213203954Srdivacky#endif /* !_RPC_RPC_MSG_H */
214203954Srdivacky