1*10465441SEvalZero /* 2*10465441SEvalZero * Copyright (c) 2006-2018, RT-Thread Development Team 3*10465441SEvalZero * 4*10465441SEvalZero * SPDX-License-Identifier: Apache-2.0 5*10465441SEvalZero * 6*10465441SEvalZero * Change Logs: 7*10465441SEvalZero * Date Author Notes 8*10465441SEvalZero */ 9*10465441SEvalZero /* @(#)rpc_msg.h 2.1 88/07/29 4.0 RPCSRC */ 10*10465441SEvalZero /* 11*10465441SEvalZero * Sun RPC is a product of Sun Microsystems, Inc. and is provided for 12*10465441SEvalZero * unrestricted use provided that this legend is included on all tape 13*10465441SEvalZero * media and as a part of the software program in whole or part. Users 14*10465441SEvalZero * may copy or modify Sun RPC without charge, but are not authorized 15*10465441SEvalZero * to license or distribute it to anyone else except as part of a product or 16*10465441SEvalZero * program developed by the user. 17*10465441SEvalZero * 18*10465441SEvalZero * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE 19*10465441SEvalZero * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR 20*10465441SEvalZero * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. 21*10465441SEvalZero * 22*10465441SEvalZero * Sun RPC is provided with no support and without any obligation on the 23*10465441SEvalZero * part of Sun Microsystems, Inc. to assist in its use, correction, 24*10465441SEvalZero * modification or enhancement. 25*10465441SEvalZero * 26*10465441SEvalZero * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE 27*10465441SEvalZero * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC 28*10465441SEvalZero * OR ANY PART THEREOF. 29*10465441SEvalZero * 30*10465441SEvalZero * In no event will Sun Microsystems, Inc. be liable for any lost revenue 31*10465441SEvalZero * or profits or other special, indirect and consequential damages, even if 32*10465441SEvalZero * Sun has been advised of the possibility of such damages. 33*10465441SEvalZero * 34*10465441SEvalZero * Sun Microsystems, Inc. 35*10465441SEvalZero * 2550 Garcia Avenue 36*10465441SEvalZero * Mountain View, California 94043 37*10465441SEvalZero */ 38*10465441SEvalZero /* @(#)rpc_msg.h 1.7 86/07/16 SMI */ 39*10465441SEvalZero 40*10465441SEvalZero #ifndef _RPC_MSG_H 41*10465441SEvalZero #define _RPC_MSG_H 1 42*10465441SEvalZero 43*10465441SEvalZero #include <rpc/xdr.h> 44*10465441SEvalZero #include <rpc/clnt.h> 45*10465441SEvalZero 46*10465441SEvalZero /* 47*10465441SEvalZero * rpc_msg.h 48*10465441SEvalZero * rpc message definition 49*10465441SEvalZero * 50*10465441SEvalZero * Copyright (C) 1984, Sun Microsystems, Inc. 51*10465441SEvalZero */ 52*10465441SEvalZero 53*10465441SEvalZero #define RPC_MSG_VERSION ((unsigned long) 2) 54*10465441SEvalZero #define RPC_SERVICE_PORT ((unsigned short) 2048) 55*10465441SEvalZero 56*10465441SEvalZero /* 57*10465441SEvalZero * Bottom up definition of an rpc message. 58*10465441SEvalZero * NOTE: call and reply use the same overall struct but 59*10465441SEvalZero * different parts of unions within it. 60*10465441SEvalZero */ 61*10465441SEvalZero 62*10465441SEvalZero enum msg_type { 63*10465441SEvalZero CALL=0, 64*10465441SEvalZero REPLY=1 65*10465441SEvalZero }; 66*10465441SEvalZero 67*10465441SEvalZero enum reply_stat { 68*10465441SEvalZero MSG_ACCEPTED=0, 69*10465441SEvalZero MSG_DENIED=1 70*10465441SEvalZero }; 71*10465441SEvalZero 72*10465441SEvalZero enum accept_stat { 73*10465441SEvalZero SUCCESS=0, 74*10465441SEvalZero PROG_UNAVAIL=1, 75*10465441SEvalZero PROG_MISMATCH=2, 76*10465441SEvalZero PROC_UNAVAIL=3, 77*10465441SEvalZero GARBAGE_ARGS=4, 78*10465441SEvalZero SYSTEM_ERR=5 79*10465441SEvalZero }; 80*10465441SEvalZero 81*10465441SEvalZero enum reject_stat { 82*10465441SEvalZero RPC_MISMATCH=0, 83*10465441SEvalZero AUTH_ERROR=1 84*10465441SEvalZero }; 85*10465441SEvalZero 86*10465441SEvalZero /* 87*10465441SEvalZero * Reply part of an rpc exchange 88*10465441SEvalZero */ 89*10465441SEvalZero 90*10465441SEvalZero /* 91*10465441SEvalZero * Reply to an rpc request that was accepted by the server. 92*10465441SEvalZero * Note: there could be an error even though the request was 93*10465441SEvalZero * accepted. 94*10465441SEvalZero */ 95*10465441SEvalZero struct accepted_reply { 96*10465441SEvalZero struct opaque_auth ar_verf; 97*10465441SEvalZero int ar_stat; 98*10465441SEvalZero union { 99*10465441SEvalZero struct { 100*10465441SEvalZero unsigned long low; 101*10465441SEvalZero unsigned long high; 102*10465441SEvalZero } AR_versions; 103*10465441SEvalZero struct { 104*10465441SEvalZero char* where; 105*10465441SEvalZero xdrproc_t proc; 106*10465441SEvalZero } AR_results; 107*10465441SEvalZero /* and many other null cases */ 108*10465441SEvalZero } ru; 109*10465441SEvalZero #define ar_results ru.AR_results 110*10465441SEvalZero #define ar_vers ru.AR_versions 111*10465441SEvalZero }; 112*10465441SEvalZero 113*10465441SEvalZero /* 114*10465441SEvalZero * Reply to an rpc request that was rejected by the server. 115*10465441SEvalZero */ 116*10465441SEvalZero struct rejected_reply { 117*10465441SEvalZero int rj_stat; 118*10465441SEvalZero union { 119*10465441SEvalZero struct { 120*10465441SEvalZero unsigned long low; 121*10465441SEvalZero unsigned long high; 122*10465441SEvalZero } RJ_versions; 123*10465441SEvalZero int RJ_why; /* why authentication did not work */ 124*10465441SEvalZero } ru; 125*10465441SEvalZero #define rj_vers ru.RJ_versions 126*10465441SEvalZero #define rj_why ru.RJ_why 127*10465441SEvalZero }; 128*10465441SEvalZero 129*10465441SEvalZero /* 130*10465441SEvalZero * Body of a reply to an rpc request. 131*10465441SEvalZero */ 132*10465441SEvalZero struct reply_body { 133*10465441SEvalZero int rp_stat; 134*10465441SEvalZero union { 135*10465441SEvalZero struct accepted_reply RP_ar; 136*10465441SEvalZero struct rejected_reply RP_dr; 137*10465441SEvalZero } ru; 138*10465441SEvalZero #define rp_acpt ru.RP_ar 139*10465441SEvalZero #define rp_rjct ru.RP_dr 140*10465441SEvalZero }; 141*10465441SEvalZero 142*10465441SEvalZero /* 143*10465441SEvalZero * Body of an rpc request call. 144*10465441SEvalZero */ 145*10465441SEvalZero struct call_body { 146*10465441SEvalZero unsigned long cb_rpcvers; /* must be equal to two */ 147*10465441SEvalZero unsigned long cb_prog; 148*10465441SEvalZero unsigned long cb_vers; 149*10465441SEvalZero unsigned long cb_proc; 150*10465441SEvalZero struct opaque_auth cb_cred; 151*10465441SEvalZero struct opaque_auth cb_verf; /* protocol specific - provided by client */ 152*10465441SEvalZero }; 153*10465441SEvalZero 154*10465441SEvalZero /* 155*10465441SEvalZero * The rpc message 156*10465441SEvalZero */ 157*10465441SEvalZero struct rpc_msg { 158*10465441SEvalZero unsigned long rm_xid; 159*10465441SEvalZero int rm_direction; 160*10465441SEvalZero union { 161*10465441SEvalZero struct call_body RM_cmb; 162*10465441SEvalZero struct reply_body RM_rmb; 163*10465441SEvalZero } ru; 164*10465441SEvalZero #define rm_call ru.RM_cmb 165*10465441SEvalZero #define rm_reply ru.RM_rmb 166*10465441SEvalZero }; 167*10465441SEvalZero #define acpted_rply ru.RM_rmb.ru.RP_ar 168*10465441SEvalZero #define rjcted_rply ru.RM_rmb.ru.RP_dr 169*10465441SEvalZero 170*10465441SEvalZero 171*10465441SEvalZero /* 172*10465441SEvalZero * XDR routine to handle a rpc message. 173*10465441SEvalZero * xdr_callmsg(xdrs, cmsg) 174*10465441SEvalZero * XDR *xdrs; 175*10465441SEvalZero * struct rpc_msg *cmsg; 176*10465441SEvalZero */ 177*10465441SEvalZero extern bool_t xdr_callmsg (XDR *__xdrs, struct rpc_msg *__cmsg); 178*10465441SEvalZero 179*10465441SEvalZero /* 180*10465441SEvalZero * XDR routine to pre-serialize the static part of a rpc message. 181*10465441SEvalZero * xdr_callhdr(xdrs, cmsg) 182*10465441SEvalZero * XDR *xdrs; 183*10465441SEvalZero * struct rpc_msg *cmsg; 184*10465441SEvalZero */ 185*10465441SEvalZero extern bool_t xdr_callhdr (XDR *__xdrs, struct rpc_msg *__cmsg); 186*10465441SEvalZero 187*10465441SEvalZero /* 188*10465441SEvalZero * XDR routine to handle a rpc reply. 189*10465441SEvalZero * xdr_replymsg(xdrs, rmsg) 190*10465441SEvalZero * XDR *xdrs; 191*10465441SEvalZero * struct rpc_msg *rmsg; 192*10465441SEvalZero */ 193*10465441SEvalZero extern bool_t xdr_replymsg (XDR *__xdrs, struct rpc_msg *__rmsg); 194*10465441SEvalZero 195*10465441SEvalZero /* 196*10465441SEvalZero * Fills in the error part of a reply message. 197*10465441SEvalZero * _seterr_reply(msg, error) 198*10465441SEvalZero * struct rpc_msg *msg; 199*10465441SEvalZero * struct rpc_err *error; 200*10465441SEvalZero */ 201*10465441SEvalZero extern void _seterr_reply (struct rpc_msg *__msg, struct rpc_err *__error); 202*10465441SEvalZero 203*10465441SEvalZero #endif /* rpc/rpc_msg.h */ 204