1177633Sdfr/* $NetBSD: rpc_msg.h,v 1.11 2000/06/02 22:57:56 fvdl Exp $ */ 2177633Sdfr 3261046Smav/*- 4261046Smav * Copyright (c) 2009, Sun Microsystems, Inc. 5261046Smav * All rights reserved. 6177633Sdfr * 7261046Smav * Redistribution and use in source and binary forms, with or without 8261046Smav * modification, are permitted provided that the following conditions are met: 9261046Smav * - Redistributions of source code must retain the above copyright notice, 10261046Smav * this list of conditions and the following disclaimer. 11261046Smav * - Redistributions in binary form must reproduce the above copyright notice, 12261046Smav * this list of conditions and the following disclaimer in the documentation 13261046Smav * and/or other materials provided with the distribution. 14261046Smav * - Neither the name of Sun Microsystems, Inc. nor the names of its 15261046Smav * contributors may be used to endorse or promote products derived 16261046Smav * from this software without specific prior written permission. 17261046Smav * 18261046Smav * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19261046Smav * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20261046Smav * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21261046Smav * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 22261046Smav * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23261046Smav * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24261046Smav * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25261046Smav * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26261046Smav * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27261046Smav * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28261046Smav * POSSIBILITY OF SUCH DAMAGE. 29177633Sdfr * 30177633Sdfr * from: @(#)rpc_msg.h 1.7 86/07/16 SMI 31177633Sdfr * from: @(#)rpc_msg.h 2.1 88/07/29 4.0 RPCSRC 32177633Sdfr * $FreeBSD$ 33177633Sdfr */ 34177633Sdfr 35177633Sdfr/* 36177633Sdfr * rpc_msg.h 37177633Sdfr * rpc message definition 38177633Sdfr * 39177633Sdfr * Copyright (C) 1984, Sun Microsystems, Inc. 40177633Sdfr */ 41177633Sdfr 42177633Sdfr#ifndef _RPC_RPC_MSG_H 43177633Sdfr#define _RPC_RPC_MSG_H 44177633Sdfr 45177633Sdfr#define RPC_MSG_VERSION ((uint32_t) 2) 46177633Sdfr#define RPC_SERVICE_PORT ((u_short) 2048) 47177633Sdfr 48177633Sdfr/* 49177633Sdfr * Bottom up definition of an rpc message. 50177633Sdfr * NOTE: call and reply use the same overall stuct but 51177633Sdfr * different parts of unions within it. 52177633Sdfr */ 53177633Sdfr 54177633Sdfrenum msg_type { 55177633Sdfr CALL=0, 56177633Sdfr REPLY=1 57177633Sdfr}; 58177633Sdfr 59177633Sdfrenum reply_stat { 60177633Sdfr MSG_ACCEPTED=0, 61177633Sdfr MSG_DENIED=1 62177633Sdfr}; 63177633Sdfr 64177633Sdfrenum accept_stat { 65177633Sdfr SUCCESS=0, 66177633Sdfr PROG_UNAVAIL=1, 67177633Sdfr PROG_MISMATCH=2, 68177633Sdfr PROC_UNAVAIL=3, 69177633Sdfr GARBAGE_ARGS=4, 70177633Sdfr SYSTEM_ERR=5 71177633Sdfr}; 72177633Sdfr 73177633Sdfrenum reject_stat { 74177633Sdfr RPC_MISMATCH=0, 75177633Sdfr AUTH_ERROR=1 76177633Sdfr}; 77177633Sdfr 78177633Sdfr/* 79177633Sdfr * Reply part of an rpc exchange 80177633Sdfr */ 81177633Sdfr 82177633Sdfr/* 83177633Sdfr * Reply to an rpc request that was accepted by the server. 84177633Sdfr * Note: there could be an error even though the request was 85177633Sdfr * accepted. 86177633Sdfr */ 87177633Sdfrstruct accepted_reply { 88177633Sdfr struct opaque_auth ar_verf; 89177633Sdfr enum accept_stat ar_stat; 90177633Sdfr union { 91177633Sdfr struct { 92177633Sdfr rpcvers_t low; 93177633Sdfr rpcvers_t high; 94177633Sdfr } AR_versions; 95177633Sdfr struct { 96177633Sdfr caddr_t where; 97177633Sdfr xdrproc_t proc; 98177633Sdfr } AR_results; 99177633Sdfr /* and many other null cases */ 100177633Sdfr } ru; 101177633Sdfr#define ar_results ru.AR_results 102177633Sdfr#define ar_vers ru.AR_versions 103177633Sdfr}; 104177633Sdfr 105177633Sdfr/* 106177633Sdfr * Reply to an rpc request that was rejected by the server. 107177633Sdfr */ 108177633Sdfrstruct rejected_reply { 109177633Sdfr enum reject_stat rj_stat; 110177633Sdfr union { 111177633Sdfr struct { 112177633Sdfr rpcvers_t low; 113177633Sdfr rpcvers_t high; 114177633Sdfr } RJ_versions; 115177633Sdfr enum auth_stat RJ_why; /* why authentication did not work */ 116177633Sdfr } ru; 117177633Sdfr#define rj_vers ru.RJ_versions 118177633Sdfr#define rj_why ru.RJ_why 119177633Sdfr}; 120177633Sdfr 121177633Sdfr/* 122177633Sdfr * Body of a reply to an rpc request. 123177633Sdfr */ 124177633Sdfrstruct reply_body { 125177633Sdfr enum reply_stat rp_stat; 126177633Sdfr union { 127177633Sdfr struct accepted_reply RP_ar; 128177633Sdfr struct rejected_reply RP_dr; 129177633Sdfr } ru; 130177633Sdfr#define rp_acpt ru.RP_ar 131177633Sdfr#define rp_rjct ru.RP_dr 132177633Sdfr}; 133177633Sdfr 134177633Sdfr/* 135177633Sdfr * Body of an rpc request call. 136177633Sdfr */ 137177633Sdfrstruct call_body { 138177633Sdfr rpcvers_t cb_rpcvers; /* must be equal to two */ 139177633Sdfr rpcprog_t cb_prog; 140177633Sdfr rpcvers_t cb_vers; 141177633Sdfr rpcproc_t cb_proc; 142177633Sdfr struct opaque_auth cb_cred; 143177633Sdfr struct opaque_auth cb_verf; /* protocol specific - provided by client */ 144177633Sdfr}; 145177633Sdfr 146177633Sdfr/* 147177633Sdfr * The rpc message 148177633Sdfr */ 149177633Sdfrstruct rpc_msg { 150177633Sdfr uint32_t rm_xid; 151177633Sdfr enum msg_type rm_direction; 152177633Sdfr union { 153177633Sdfr struct call_body RM_cmb; 154177633Sdfr struct reply_body RM_rmb; 155177633Sdfr } ru; 156177633Sdfr#define rm_call ru.RM_cmb 157177633Sdfr#define rm_reply ru.RM_rmb 158177633Sdfr}; 159177633Sdfr#define acpted_rply ru.RM_rmb.ru.RP_ar 160177633Sdfr#define rjcted_rply ru.RM_rmb.ru.RP_dr 161177633Sdfr 162177633Sdfr__BEGIN_DECLS 163177633Sdfr/* 164177633Sdfr * XDR routine to handle a rpc message. 165177633Sdfr * xdr_callmsg(xdrs, cmsg) 166177633Sdfr * XDR *xdrs; 167177633Sdfr * struct rpc_msg *cmsg; 168177633Sdfr */ 169177633Sdfrextern bool_t xdr_callmsg(XDR *, struct rpc_msg *); 170177633Sdfr 171177633Sdfr/* 172177633Sdfr * XDR routine to pre-serialize the static part of a rpc message. 173177633Sdfr * xdr_callhdr(xdrs, cmsg) 174177633Sdfr * XDR *xdrs; 175177633Sdfr * struct rpc_msg *cmsg; 176177633Sdfr */ 177177633Sdfrextern bool_t xdr_callhdr(XDR *, struct rpc_msg *); 178177633Sdfr 179177633Sdfr/* 180177633Sdfr * XDR routine to handle a rpc reply. 181177633Sdfr * xdr_replymsg(xdrs, rmsg) 182177633Sdfr * XDR *xdrs; 183177633Sdfr * struct rpc_msg *rmsg; 184177633Sdfr */ 185177633Sdfrextern bool_t xdr_replymsg(XDR *, struct rpc_msg *); 186177633Sdfr 187177633Sdfr 188177633Sdfr/* 189177633Sdfr * XDR routine to handle an accepted rpc reply. 190177633Sdfr * xdr_accepted_reply(xdrs, rej) 191177633Sdfr * XDR *xdrs; 192177633Sdfr * struct accepted_reply *rej; 193177633Sdfr */ 194177633Sdfrextern bool_t xdr_accepted_reply(XDR *, struct accepted_reply *); 195177633Sdfr 196177633Sdfr/* 197177633Sdfr * XDR routine to handle a rejected rpc reply. 198177633Sdfr * xdr_rejected_reply(xdrs, rej) 199177633Sdfr * XDR *xdrs; 200177633Sdfr * struct rejected_reply *rej; 201177633Sdfr */ 202177633Sdfrextern bool_t xdr_rejected_reply(XDR *, struct rejected_reply *); 203177633Sdfr 204177633Sdfr/* 205177633Sdfr * Fills in the error part of a reply message. 206177633Sdfr * _seterr_reply(msg, error) 207177633Sdfr * struct rpc_msg *msg; 208177633Sdfr * struct rpc_err *error; 209177633Sdfr */ 210184588Sdfrextern enum clnt_stat _seterr_reply(struct rpc_msg *, struct rpc_err *); 211177633Sdfr__END_DECLS 212177633Sdfr 213177633Sdfr#endif /* !_RPC_RPC_MSG_H */ 214