OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [uclinux/] [uC-libc/] [include/] [rpc/] [clnt.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 199 simons
/* @(#)clnt.h   2.1 88/07/29 4.0 RPCSRC; from 1.31 88/02/08 SMI*/
2
/*
3
 * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
4
 * unrestricted use provided that this legend is included on all tape
5
 * media and as a part of the software program in whole or part.  Users
6
 * may copy or modify Sun RPC without charge, but are not authorized
7
 * to license or distribute it to anyone else except as part of a product or
8
 * program developed by the user.
9
 *
10
 * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
11
 * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
12
 * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
13
 *
14
 * Sun RPC is provided with no support and without any obligation on the
15
 * part of Sun Microsystems, Inc. to assist in its use, correction,
16
 * modification or enhancement.
17
 *
18
 * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
19
 * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
20
 * OR ANY PART THEREOF.
21
 *
22
 * In no event will Sun Microsystems, Inc. be liable for any lost revenue
23
 * or profits or other special, indirect and consequential damages, even if
24
 * Sun has been advised of the possibility of such damages.
25
 *
26
 * Sun Microsystems, Inc.
27
 * 2550 Garcia Avenue
28
 * Mountain View, California  94043
29
 */
30
 
31
/*
32
 * clnt.h - Client side remote procedure call interface.
33
 *
34
 * Copyright (C) 1984, Sun Microsystems, Inc.
35
 */
36
 
37
#ifndef _CLNT_
38
#define _CLNT_
39
 
40
/*
41
 * Rpc calls return an enum clnt_stat.  This should be looked at more,
42
 * since each implementation is required to live with this (implementation
43
 * independent) list of errors.
44
 */
45
enum clnt_stat {
46
        RPC_SUCCESS=0,                   /* call succeeded */
47
        /*
48
         * local errors
49
         */
50
        RPC_CANTENCODEARGS=1,           /* can't encode arguments */
51
        RPC_CANTDECODERES=2,            /* can't decode results */
52
        RPC_CANTSEND=3,                 /* failure in sending call */
53
        RPC_CANTRECV=4,                 /* failure in receiving result */
54
        RPC_TIMEDOUT=5,                 /* call timed out */
55
        /*
56
         * remote errors
57
         */
58
        RPC_VERSMISMATCH=6,             /* rpc versions not compatible */
59
        RPC_AUTHERROR=7,                /* authentication error */
60
        RPC_PROGUNAVAIL=8,              /* program not available */
61
        RPC_PROGVERSMISMATCH=9,         /* program version mismatched */
62
        RPC_PROCUNAVAIL=10,             /* procedure unavailable */
63
        RPC_CANTDECODEARGS=11,          /* decode arguments error */
64
        RPC_SYSTEMERROR=12,             /* generic "other problem" */
65
 
66
        /*
67
         * callrpc & clnt_create errors
68
         */
69
        RPC_UNKNOWNHOST=13,             /* unknown host name */
70
        RPC_UNKNOWNPROTO=17,            /* unkown protocol */
71
 
72
        /*
73
         * _ create errors
74
         */
75
        RPC_PMAPFAILURE=14,             /* the pmapper failed in its call */
76
        RPC_PROGNOTREGISTERED=15,       /* remote program is not registered */
77
        /*
78
         * unspecified error
79
         */
80
        RPC_FAILED=16
81
};
82
 
83
 
84
/*
85
 * Error info.
86
 */
87
struct rpc_err {
88
        enum clnt_stat re_status;
89
        union {
90
                int RE_errno;           /* realated system error */
91
                enum auth_stat RE_why;  /* why the auth error occurred */
92
                struct {
93
                        u_long low;     /* lowest verion supported */
94
                        u_long high;    /* highest verion supported */
95
                } RE_vers;
96
                struct {                /* maybe meaningful if RPC_FAILED */
97
                        long s1;
98
                        long s2;
99
                } RE_lb;                /* life boot & debugging only */
100
        } ru;
101
#define re_errno        ru.RE_errno
102
#define re_why          ru.RE_why
103
#define re_vers         ru.RE_vers
104
#define re_lb           ru.RE_lb
105
};
106
 
107
 
108
/*
109
 * Client rpc handle.
110
 * Created by individual implementations, see e.g. rpc_udp.c.
111
 * Client is responsible for initializing auth, see e.g. auth_none.c.
112
 */
113
typedef struct {
114
        AUTH    *cl_auth;                       /* authenticator */
115
        struct clnt_ops {
116
                enum clnt_stat  (*cl_call)();   /* call remote procedure */
117
                void            (*cl_abort)();  /* abort a call */
118
                void            (*cl_geterr)(); /* get specific error code */
119
                bool_t          (*cl_freeres)(); /* frees results */
120
                void            (*cl_destroy)();/* destroy this structure */
121
                bool_t          (*cl_control)();/* the ioctl() of rpc */
122
        } *cl_ops;
123
        caddr_t                 cl_private;     /* private stuff */
124
} CLIENT;
125
 
126
 
127
/*
128
 * client side rpc interface ops
129
 *
130
 * Parameter types are:
131
 *
132
 */
133
 
134
/*
135
 * enum clnt_stat
136
 * CLNT_CALL(rh, proc, xargs, argsp, xres, resp, timeout)
137
 *      CLIENT *rh;
138
 *      u_long proc;
139
 *      xdrproc_t xargs;
140
 *      caddr_t argsp;
141
 *      xdrproc_t xres;
142
 *      caddr_t resp;
143
 *      struct timeval timeout;
144
 */
145
#define CLNT_CALL(rh, proc, xargs, argsp, xres, resp, secs)     \
146
        ((*(rh)->cl_ops->cl_call)(rh, proc, xargs, argsp, xres, resp, secs))
147
#define clnt_call(rh, proc, xargs, argsp, xres, resp, secs)     \
148
        ((*(rh)->cl_ops->cl_call)(rh, proc, xargs, argsp, xres, resp, secs))
149
 
150
/*
151
 * void
152
 * CLNT_ABORT(rh);
153
 *      CLIENT *rh;
154
 */
155
#define CLNT_ABORT(rh)  ((*(rh)->cl_ops->cl_abort)(rh))
156
#define clnt_abort(rh)  ((*(rh)->cl_ops->cl_abort)(rh))
157
 
158
/*
159
 * struct rpc_err
160
 * CLNT_GETERR(rh);
161
 *      CLIENT *rh;
162
 */
163
#define CLNT_GETERR(rh,errp)    ((*(rh)->cl_ops->cl_geterr)(rh, errp))
164
#define clnt_geterr(rh,errp)    ((*(rh)->cl_ops->cl_geterr)(rh, errp))
165
 
166
 
167
/*
168
 * bool_t
169
 * CLNT_FREERES(rh, xres, resp);
170
 *      CLIENT *rh;
171
 *      xdrproc_t xres;
172
 *      caddr_t resp;
173
 */
174
#define CLNT_FREERES(rh,xres,resp) ((*(rh)->cl_ops->cl_freeres)(rh,xres,resp))
175
#define clnt_freeres(rh,xres,resp) ((*(rh)->cl_ops->cl_freeres)(rh,xres,resp))
176
 
177
/*
178
 * bool_t
179
 * CLNT_CONTROL(cl, request, info)
180
 *      CLIENT *cl;
181
 *      u_int request;
182
 *      char *info;
183
 */
184
#define CLNT_CONTROL(cl,rq,in) ((*(cl)->cl_ops->cl_control)(cl,rq,in))
185
#define clnt_control(cl,rq,in) ((*(cl)->cl_ops->cl_control)(cl,rq,in))
186
 
187
/*
188
 * control operations that apply to both udp and tcp transports
189
 */
190
#define CLSET_TIMEOUT       1   /* set timeout (timeval) */
191
#define CLGET_TIMEOUT       2   /* get timeout (timeval) */
192
#define CLGET_SERVER_ADDR   3   /* get server's address (sockaddr) */
193
/*
194
 * udp only control operations
195
 */
196
#define CLSET_RETRY_TIMEOUT 4   /* set retry timeout (timeval) */
197
#define CLGET_RETRY_TIMEOUT 5   /* get retry timeout (timeval) */
198
 
199
/*
200
 * void
201
 * CLNT_DESTROY(rh);
202
 *      CLIENT *rh;
203
 */
204
#define CLNT_DESTROY(rh)        ((*(rh)->cl_ops->cl_destroy)(rh))
205
#define clnt_destroy(rh)        ((*(rh)->cl_ops->cl_destroy)(rh))
206
 
207
 
208
/*
209
 * RPCTEST is a test program which is accessable on every rpc
210
 * transport/port.  It is used for testing, performance evaluation,
211
 * and network administration.
212
 */
213
 
214
#define RPCTEST_PROGRAM         ((u_long)1)
215
#define RPCTEST_VERSION         ((u_long)1)
216
#define RPCTEST_NULL_PROC       ((u_long)2)
217
#define RPCTEST_NULL_BATCH_PROC ((u_long)3)
218
 
219
/*
220
 * By convention, procedure 0 takes null arguments and returns them
221
 */
222
 
223
#define NULLPROC ((u_long)0)
224
 
225
/*
226
 * Below are the client handle creation routines for the various
227
 * implementations of client side rpc.  They can return NULL if a
228
 * creation failure occurs.
229
 */
230
 
231
/*
232
 * Memory based rpc (for speed check and testing)
233
 * CLIENT *
234
 * clntraw_create(prog, vers)
235
 *      u_long prog;
236
 *      u_long vers;
237
 */
238
extern CLIENT *clntraw_create();
239
 
240
 
241
/*
242
 * Generic client creation routine. Supported protocols are "udp" and "tcp"
243
 */
244
extern CLIENT *
245
clnt_create(/*host, prog, vers, prot*/); /*
246
        char *host;     -- hostname
247
        u_long prog;    -- program number
248
        u_long vers;    -- version number
249
        char *prot;     -- protocol
250
*/
251
 
252
 
253
 
254
 
255
/*
256
 * TCP based rpc
257
 * CLIENT *
258
 * clnttcp_create(raddr, prog, vers, sockp, sendsz, recvsz)
259
 *      struct sockaddr_in *raddr;
260
 *      u_long prog;
261
 *      u_long version;
262
 *      register int *sockp;
263
 *      u_int sendsz;
264
 *      u_int recvsz;
265
 */
266
extern CLIENT *clnttcp_create();
267
 
268
/*
269
 * UDP based rpc.
270
 * CLIENT *
271
 * clntudp_create(raddr, program, version, wait, sockp)
272
 *      struct sockaddr_in *raddr;
273
 *      u_long program;
274
 *      u_long version;
275
 *      struct timeval wait;
276
 *      int *sockp;
277
 *
278
 * Same as above, but you specify max packet sizes.
279
 * CLIENT *
280
 * clntudp_bufcreate(raddr, program, version, wait, sockp, sendsz, recvsz)
281
 *      struct sockaddr_in *raddr;
282
 *      u_long program;
283
 *      u_long version;
284
 *      struct timeval wait;
285
 *      int *sockp;
286
 *      u_int sendsz;
287
 *      u_int recvsz;
288
 */
289
extern CLIENT *clntudp_create();
290
extern CLIENT *clntudp_bufcreate();
291
 
292
/*
293
 * Print why creation failed
294
 */
295
void clnt_pcreateerror(/* char *msg */);        /* stderr */
296
char *clnt_spcreateerror(/* char *msg */);      /* string */
297
 
298
/*
299
 * Like clnt_perror(), but is more verbose in its output
300
 */
301
void clnt_perrno(/* enum clnt_stat num */);     /* stderr */
302
 
303
/*
304
 * Print an English error message, given the client error code
305
 */
306
void clnt_perror(/* CLIENT *clnt, char *msg */);        /* stderr */
307
char *clnt_sperror(/* CLIENT *clnt, char *msg */);      /* string */
308
 
309
/*
310
 * If a creation fails, the following allows the user to figure out why.
311
 */
312
struct rpc_createerr {
313
        enum clnt_stat cf_stat;
314
        struct rpc_err cf_error; /* useful when cf_stat == RPC_PMAPFAILURE */
315
};
316
 
317
extern struct rpc_createerr rpc_createerr;
318
 
319
 
320
 
321
/*
322
 * Copy error message to buffer.
323
 */
324
char *clnt_sperrno(/* enum clnt_stat num */);   /* string */
325
 
326
 
327
 
328
#define UDPMSGSIZE      8800    /* rpc imposed limit on udp msg size */
329
#define RPCSMALLMSGSIZE 400     /* a more reasonable packet size */
330
 
331
#endif /*!_CLNT_*/

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.