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