1 1.33 andvar /* $NetBSD: svc.h,v 1.33 2022/05/28 21:14:56 andvar Exp $ */ 2 1.4 cgd 3 1.1 deraadt /* 4 1.1 deraadt * Sun RPC is a product of Sun Microsystems, Inc. and is provided for 5 1.1 deraadt * unrestricted use provided that this legend is included on all tape 6 1.1 deraadt * media and as a part of the software program in whole or part. Users 7 1.1 deraadt * may copy or modify Sun RPC without charge, but are not authorized 8 1.1 deraadt * to license or distribute it to anyone else except as part of a product or 9 1.1 deraadt * program developed by the user. 10 1.19 simonb * 11 1.1 deraadt * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE 12 1.1 deraadt * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR 13 1.1 deraadt * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. 14 1.19 simonb * 15 1.1 deraadt * Sun RPC is provided with no support and without any obligation on the 16 1.1 deraadt * part of Sun Microsystems, Inc. to assist in its use, correction, 17 1.1 deraadt * modification or enhancement. 18 1.19 simonb * 19 1.1 deraadt * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE 20 1.1 deraadt * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC 21 1.1 deraadt * OR ANY PART THEREOF. 22 1.19 simonb * 23 1.1 deraadt * In no event will Sun Microsystems, Inc. be liable for any lost revenue 24 1.1 deraadt * or profits or other special, indirect and consequential damages, even if 25 1.1 deraadt * Sun has been advised of the possibility of such damages. 26 1.19 simonb * 27 1.1 deraadt * Sun Microsystems, Inc. 28 1.1 deraadt * 2550 Garcia Avenue 29 1.1 deraadt * Mountain View, California 94043 30 1.3 mycroft * 31 1.17 fvdl * from: @(#)svc.h 1.35 88/12/17 SMI 32 1.17 fvdl * @(#)svc.h 1.27 94/04/25 SMI 33 1.1 deraadt */ 34 1.1 deraadt 35 1.1 deraadt /* 36 1.1 deraadt * svc.h, Server-side remote procedure call interface. 37 1.1 deraadt * 38 1.17 fvdl * Copyright (C) 1986-1993 by Sun Microsystems, Inc. 39 1.1 deraadt */ 40 1.1 deraadt 41 1.11 perry #ifndef _RPC_SVC_H_ 42 1.11 perry #define _RPC_SVC_H_ 43 1.2 brezak #include <sys/cdefs.h> 44 1.1 deraadt 45 1.32 dholland #include <sys/select.h> 46 1.20 fvdl #include <rpc/rpc_com.h> 47 1.20 fvdl 48 1.1 deraadt /* 49 1.1 deraadt * This interface must manage two items concerning remote procedure calling: 50 1.1 deraadt * 51 1.13 lukem * 1) An arbitrary number of transport connections upon which rpc requests 52 1.1 deraadt * are received. The two most notable transports are TCP and UDP; they are 53 1.1 deraadt * created and registered by routines in svc_tcp.c and svc_udp.c, respectively; 54 1.1 deraadt * they in turn call xprt_register and xprt_unregister. 55 1.1 deraadt * 56 1.1 deraadt * 2) An arbitrary number of locally registered services. Services are 57 1.1 deraadt * described by the following four data: program number, version number, 58 1.1 deraadt * "service dispatch" function, a transport handle, and a boolean that 59 1.1 deraadt * indicates whether or not the exported program should be registered with a 60 1.1 deraadt * local binder service; if true the program's number and version and the 61 1.1 deraadt * port number from the transport handle are registered with the binder. 62 1.13 lukem * These data are registered with the rpc svc system via svc_register. 63 1.1 deraadt * 64 1.13 lukem * A service's dispatch function is called whenever an rpc request comes in 65 1.1 deraadt * on a transport. The request's program and version numbers must match 66 1.1 deraadt * those of the registered service. The dispatch function is passed two 67 1.1 deraadt * parameters, struct svc_req * and SVCXPRT *, defined below. 68 1.1 deraadt */ 69 1.1 deraadt 70 1.17 fvdl /* 71 1.19 simonb * Service control requests 72 1.17 fvdl */ 73 1.17 fvdl #define SVCGET_VERSQUIET 1 74 1.17 fvdl #define SVCSET_VERSQUIET 2 75 1.20 fvdl #define SVCGET_CONNMAXREC 3 76 1.20 fvdl #define SVCSET_CONNMAXREC 4 77 1.17 fvdl 78 1.17 fvdl 79 1.1 deraadt enum xprt_stat { 80 1.1 deraadt XPRT_DIED, 81 1.1 deraadt XPRT_MOREREQS, 82 1.1 deraadt XPRT_IDLE 83 1.1 deraadt }; 84 1.1 deraadt 85 1.1 deraadt /* 86 1.1 deraadt * Server side transport handle 87 1.1 deraadt */ 88 1.5 cgd typedef struct __rpc_svcxprt { 89 1.17 fvdl int xp_fd; 90 1.30 dholland unsigned short xp_port; /* associated port number */ 91 1.14 mycroft const struct xp_ops { 92 1.33 andvar /* receive incoming requests */ 93 1.21 perry bool_t (*xp_recv)(struct __rpc_svcxprt *, struct rpc_msg *); 94 1.5 cgd /* get transport status */ 95 1.21 perry enum xprt_stat (*xp_stat)(struct __rpc_svcxprt *); 96 1.5 cgd /* get arguments */ 97 1.21 perry bool_t (*xp_getargs)(struct __rpc_svcxprt *, xdrproc_t, 98 1.21 perry caddr_t); 99 1.5 cgd /* send reply */ 100 1.21 perry bool_t (*xp_reply)(struct __rpc_svcxprt *, struct rpc_msg *); 101 1.5 cgd /* free mem allocated for args */ 102 1.21 perry bool_t (*xp_freeargs)(struct __rpc_svcxprt *, xdrproc_t, 103 1.21 perry caddr_t); 104 1.5 cgd /* destroy this struct */ 105 1.21 perry void (*xp_destroy)(struct __rpc_svcxprt *); 106 1.1 deraadt } *xp_ops; 107 1.13 lukem int xp_addrlen; /* length of remote address */ 108 1.17 fvdl struct sockaddr_in xp_raddr; /* rem. addr. (backward ABI compat) */ 109 1.17 fvdl /* XXX - fvdl stick this here for ABI backward compat reasons */ 110 1.17 fvdl const struct xp_ops2 { 111 1.17 fvdl /* catch-all function */ 112 1.31 dholland bool_t (*xp_control)(struct __rpc_svcxprt *, 113 1.31 dholland const unsigned int, void *); 114 1.17 fvdl } *xp_ops2; 115 1.17 fvdl char *xp_tp; /* transport provider device name */ 116 1.17 fvdl char *xp_netid; /* network token */ 117 1.17 fvdl struct netbuf xp_ltaddr; /* local transport address */ 118 1.17 fvdl struct netbuf xp_rtaddr; /* remote transport address */ 119 1.13 lukem struct opaque_auth xp_verf; /* raw response verifier */ 120 1.17 fvdl void *xp_p1; /* private: for use by svc ops */ 121 1.17 fvdl void *xp_p2; /* private: for use by svc ops */ 122 1.17 fvdl void *xp_p3; /* private: for use by svc lib */ 123 1.17 fvdl int xp_type; /* transport type */ 124 1.1 deraadt } SVCXPRT; 125 1.1 deraadt 126 1.1 deraadt /* 127 1.17 fvdl * Service request 128 1.17 fvdl */ 129 1.17 fvdl struct svc_req { 130 1.23 perry uint32_t rq_prog; /* service program number */ 131 1.23 perry uint32_t rq_vers; /* service protocol version */ 132 1.23 perry uint32_t rq_proc; /* the desired procedure */ 133 1.17 fvdl struct opaque_auth rq_cred; /* raw creds from the wire */ 134 1.17 fvdl void *rq_clntcred; /* read only cooked cred */ 135 1.17 fvdl SVCXPRT *rq_xprt; /* associated transport */ 136 1.17 fvdl }; 137 1.17 fvdl 138 1.17 fvdl /* 139 1.19 simonb * Approved way of getting address of caller 140 1.1 deraadt */ 141 1.17 fvdl #define svc_getrpccaller(x) (&(x)->xp_rtaddr) 142 1.17 fvdl 143 1.17 fvdl /* 144 1.17 fvdl * NetBSD-only definition to get the creds of the caller (AF_LOCAL). 145 1.17 fvdl */ 146 1.17 fvdl #define __svc_getcallercreds(x) ((struct sockcred *)(x)->xp_p2) 147 1.1 deraadt 148 1.1 deraadt /* 149 1.1 deraadt * Operations defined on an SVCXPRT handle 150 1.1 deraadt * 151 1.1 deraadt * SVCXPRT *xprt; 152 1.1 deraadt * struct rpc_msg *msg; 153 1.1 deraadt * xdrproc_t xargs; 154 1.1 deraadt * caddr_t argsp; 155 1.1 deraadt */ 156 1.1 deraadt #define SVC_RECV(xprt, msg) \ 157 1.1 deraadt (*(xprt)->xp_ops->xp_recv)((xprt), (msg)) 158 1.1 deraadt #define svc_recv(xprt, msg) \ 159 1.1 deraadt (*(xprt)->xp_ops->xp_recv)((xprt), (msg)) 160 1.1 deraadt 161 1.1 deraadt #define SVC_STAT(xprt) \ 162 1.1 deraadt (*(xprt)->xp_ops->xp_stat)(xprt) 163 1.1 deraadt #define svc_stat(xprt) \ 164 1.1 deraadt (*(xprt)->xp_ops->xp_stat)(xprt) 165 1.1 deraadt 166 1.1 deraadt #define SVC_GETARGS(xprt, xargs, argsp) \ 167 1.24 plunky (*(xprt)->xp_ops->xp_getargs)((xprt), ((xdrproc_t)(xargs)), (argsp)) 168 1.1 deraadt #define svc_getargs(xprt, xargs, argsp) \ 169 1.24 plunky (*(xprt)->xp_ops->xp_getargs)((xprt), ((xdrproc_t)(xargs)), (argsp)) 170 1.1 deraadt 171 1.1 deraadt #define SVC_REPLY(xprt, msg) \ 172 1.1 deraadt (*(xprt)->xp_ops->xp_reply) ((xprt), (msg)) 173 1.1 deraadt #define svc_reply(xprt, msg) \ 174 1.1 deraadt (*(xprt)->xp_ops->xp_reply) ((xprt), (msg)) 175 1.1 deraadt 176 1.1 deraadt #define SVC_FREEARGS(xprt, xargs, argsp) \ 177 1.24 plunky (*(xprt)->xp_ops->xp_freeargs)((xprt), ((xdrproc_t)(xargs)), (argsp)) 178 1.1 deraadt #define svc_freeargs(xprt, xargs, argsp) \ 179 1.24 plunky (*(xprt)->xp_ops->xp_freeargs)((xprt), ((xdrproc_t)(xargs)), (argsp)) 180 1.1 deraadt 181 1.1 deraadt #define SVC_DESTROY(xprt) \ 182 1.1 deraadt (*(xprt)->xp_ops->xp_destroy)(xprt) 183 1.1 deraadt #define svc_destroy(xprt) \ 184 1.1 deraadt (*(xprt)->xp_ops->xp_destroy)(xprt) 185 1.1 deraadt 186 1.17 fvdl #define SVC_CONTROL(xprt, rq, in) \ 187 1.17 fvdl (*(xprt)->xp_ops2->xp_control)((xprt), (rq), (in)) 188 1.1 deraadt 189 1.1 deraadt /* 190 1.1 deraadt * Service registration 191 1.1 deraadt * 192 1.17 fvdl * svc_reg(xprt, prog, vers, dispatch, nconf) 193 1.17 fvdl * const SVCXPRT *xprt; 194 1.17 fvdl * const rpcprog_t prog; 195 1.17 fvdl * const rpcvers_t vers; 196 1.19 simonb * const void (*dispatch)(...); 197 1.17 fvdl * const struct netconfig *nconf; 198 1.1 deraadt */ 199 1.17 fvdl 200 1.2 brezak __BEGIN_DECLS 201 1.21 perry extern bool_t svc_reg(SVCXPRT *, const rpcprog_t, const rpcvers_t, 202 1.21 perry void (*)(struct svc_req *, SVCXPRT *), 203 1.21 perry const struct netconfig *); 204 1.2 brezak __END_DECLS 205 1.1 deraadt 206 1.1 deraadt /* 207 1.1 deraadt * Service un-registration 208 1.1 deraadt * 209 1.17 fvdl * svc_unreg(prog, vers) 210 1.17 fvdl * const rpcprog_t prog; 211 1.17 fvdl * const rpcvers_t vers; 212 1.1 deraadt */ 213 1.17 fvdl 214 1.2 brezak __BEGIN_DECLS 215 1.21 perry extern void svc_unreg(const rpcprog_t, const rpcvers_t); 216 1.2 brezak __END_DECLS 217 1.1 deraadt 218 1.1 deraadt /* 219 1.1 deraadt * Transport registration. 220 1.1 deraadt * 221 1.1 deraadt * xprt_register(xprt) 222 1.1 deraadt * SVCXPRT *xprt; 223 1.1 deraadt */ 224 1.2 brezak __BEGIN_DECLS 225 1.25 christos extern bool_t xprt_register (SVCXPRT *); 226 1.2 brezak __END_DECLS 227 1.1 deraadt 228 1.1 deraadt /* 229 1.1 deraadt * Transport un-register 230 1.1 deraadt * 231 1.1 deraadt * xprt_unregister(xprt) 232 1.1 deraadt * SVCXPRT *xprt; 233 1.1 deraadt */ 234 1.2 brezak __BEGIN_DECLS 235 1.21 perry extern void xprt_unregister (SVCXPRT *); 236 1.2 brezak __END_DECLS 237 1.1 deraadt 238 1.1 deraadt 239 1.1 deraadt /* 240 1.1 deraadt * When the service routine is called, it must first check to see if it 241 1.1 deraadt * knows about the procedure; if not, it should call svcerr_noproc 242 1.19 simonb * and return. If so, it should deserialize its arguments via 243 1.1 deraadt * SVC_GETARGS (defined above). If the deserialization does not work, 244 1.1 deraadt * svcerr_decode should be called followed by a return. Successful 245 1.1 deraadt * decoding of the arguments should be followed the execution of the 246 1.1 deraadt * procedure's code and a call to svc_sendreply. 247 1.1 deraadt * 248 1.1 deraadt * Also, if the service refuses to execute the procedure due to too- 249 1.1 deraadt * weak authentication parameters, svcerr_weakauth should be called. 250 1.1 deraadt * Note: do not confuse access-control failure with weak authentication! 251 1.1 deraadt * 252 1.13 lukem * NB: In pure implementations of rpc, the caller always waits for a reply 253 1.19 simonb * msg. This message is sent when svc_sendreply is called. 254 1.1 deraadt * Therefore pure service implementations should always call 255 1.1 deraadt * svc_sendreply even if the function logically returns void; use 256 1.13 lukem * xdr.h - xdr_void for the xdr routine. HOWEVER, tcp based rpc allows 257 1.13 lukem * for the abuse of pure rpc via batched calling or pipelining. In the 258 1.1 deraadt * case of a batched call, svc_sendreply should NOT be called since 259 1.1 deraadt * this would send a return message, which is what batching tries to avoid. 260 1.1 deraadt * It is the service/protocol writer's responsibility to know which calls are 261 1.1 deraadt * batched and which are not. Warning: responding to batch calls may 262 1.1 deraadt * deadlock the caller and server processes! 263 1.1 deraadt */ 264 1.1 deraadt 265 1.2 brezak __BEGIN_DECLS 266 1.22 yamt extern bool_t svc_sendreply (SVCXPRT *, xdrproc_t, const char *); 267 1.21 perry extern void svcerr_decode (SVCXPRT *); 268 1.21 perry extern void svcerr_weakauth (SVCXPRT *); 269 1.21 perry extern void svcerr_noproc (SVCXPRT *); 270 1.21 perry extern void svcerr_progvers (SVCXPRT *, rpcvers_t, rpcvers_t); 271 1.21 perry extern void svcerr_auth (SVCXPRT *, enum auth_stat); 272 1.21 perry extern void svcerr_noprog (SVCXPRT *); 273 1.21 perry extern void svcerr_systemerr(SVCXPRT *); 274 1.21 perry extern int rpc_reg(rpcprog_t, rpcvers_t, rpcproc_t, 275 1.21 perry char *(*)(char *), xdrproc_t, xdrproc_t, 276 1.21 perry char *); 277 1.2 brezak __END_DECLS 278 1.19 simonb 279 1.1 deraadt /* 280 1.1 deraadt * Lowest level dispatching -OR- who owns this process anyway. 281 1.1 deraadt * Somebody has to wait for incoming requests and then call the correct 282 1.1 deraadt * service routine. The routine svc_run does infinite waiting; i.e., 283 1.1 deraadt * svc_run never returns. 284 1.18 wiz * Since another (co-existent) package may wish to selectively wait for 285 1.13 lukem * incoming calls or other events outside of the rpc architecture, the 286 1.1 deraadt * routine svc_getreq is provided. It must be passed readfds, the 287 1.1 deraadt * "in-place" results of a select system call (see select, section 2). 288 1.1 deraadt */ 289 1.1 deraadt 290 1.1 deraadt /* 291 1.13 lukem * Global keeper of rpc service descriptors in use 292 1.19 simonb * dynamic; must be inspected before each call to select 293 1.1 deraadt */ 294 1.27 christos #ifdef SVC_LEGACY 295 1.8 pk extern int svc_maxfd; 296 1.1 deraadt extern fd_set svc_fdset; 297 1.13 lukem #else 298 1.27 christos #define svc_maxfd (*svc_fdset_getmax()) 299 1.27 christos #define svc_fdset (*svc_fdset_get()) 300 1.29 christos #define svc_pollfd svc_pollfd_get() 301 1.29 christos #define svc_max_pollfd (*svc_fdset_getmax()) 302 1.27 christos #endif 303 1.1 deraadt 304 1.27 christos #define svc_fds svc_fdset.fds_bits[0] /* compatibility */ 305 1.26 christos 306 1.1 deraadt /* 307 1.1 deraadt * a small program implemented by the svc_rpc implementation itself; 308 1.1 deraadt * also see clnt.h for protocol numbers. 309 1.1 deraadt */ 310 1.16 christos __BEGIN_DECLS 311 1.21 perry extern void rpctest_service(void); 312 1.16 christos __END_DECLS 313 1.1 deraadt 314 1.2 brezak __BEGIN_DECLS 315 1.26 christos 316 1.29 christos #define SVC_FDSET_MT 1 /* each thread gets own fd_set/pollfd */ 317 1.29 christos #define SVC_FDSET_POLL 2 /* use poll in svc_run */ 318 1.26 christos extern void svc_fdset_init(int); 319 1.29 christos 320 1.26 christos 321 1.26 christos extern void svc_fdset_zero(void); 322 1.26 christos extern int svc_fdset_isset(int); 323 1.28 christos extern int svc_fdset_clr(int); 324 1.28 christos extern int svc_fdset_set(int); 325 1.26 christos 326 1.26 christos extern fd_set *svc_fdset_get(void); 327 1.26 christos extern int svc_fdset_getsize(int); 328 1.26 christos extern int *svc_fdset_getmax(void); 329 1.29 christos extern fd_set *svc_fdset_copy(const fd_set *); 330 1.29 christos 331 1.29 christos extern struct pollfd *svc_pollfd_get(void); 332 1.29 christos extern int svc_pollfd_getsize(int); 333 1.29 christos extern int *svc_pollfd_getmax(void); 334 1.29 christos extern struct pollfd *svc_pollfd_copy(const struct pollfd *); 335 1.26 christos 336 1.21 perry extern void svc_getreq (int); 337 1.21 perry extern void svc_getreqset (fd_set *); 338 1.26 christos extern void svc_getreqset2 (fd_set *, int); 339 1.21 perry extern void svc_getreq_common (int); 340 1.17 fvdl struct pollfd; 341 1.21 perry extern void svc_getreq_poll(struct pollfd *, int); 342 1.17 fvdl 343 1.21 perry extern void svc_run (void); 344 1.21 perry extern void svc_exit (void); 345 1.2 brezak __END_DECLS 346 1.1 deraadt 347 1.1 deraadt /* 348 1.1 deraadt * Socket to use on svcxxx_create call to get default socket 349 1.1 deraadt */ 350 1.1 deraadt #define RPC_ANYSOCK -1 351 1.17 fvdl #define RPC_ANYFD RPC_ANYSOCK 352 1.1 deraadt 353 1.1 deraadt /* 354 1.1 deraadt * These are the existing service side transport implementations 355 1.1 deraadt */ 356 1.1 deraadt 357 1.17 fvdl __BEGIN_DECLS 358 1.17 fvdl /* 359 1.17 fvdl * Transport independent svc_create routine. 360 1.17 fvdl */ 361 1.21 perry extern int svc_create(void (*)(struct svc_req *, SVCXPRT *), 362 1.21 perry const rpcprog_t, const rpcvers_t, const char *); 363 1.17 fvdl /* 364 1.19 simonb * void (*dispatch)(...); -- dispatch routine 365 1.19 simonb * const rpcprog_t prognum; -- program number 366 1.19 simonb * const rpcvers_t versnum; -- version number 367 1.19 simonb * const char *nettype; -- network type 368 1.17 fvdl */ 369 1.17 fvdl 370 1.17 fvdl 371 1.1 deraadt /* 372 1.17 fvdl * Generic server creation routine. It takes a netconfig structure 373 1.17 fvdl * instead of a nettype. 374 1.17 fvdl */ 375 1.17 fvdl 376 1.21 perry extern SVCXPRT *svc_tp_create(void (*)(struct svc_req *, SVCXPRT *), 377 1.17 fvdl const rpcprog_t, const rpcvers_t, 378 1.21 perry const struct netconfig *); 379 1.19 simonb /* 380 1.19 simonb * void (*dispatch)(...); -- dispatch routine 381 1.19 simonb * const rpcprog_t prognum; -- program number 382 1.19 simonb * const rpcvers_t versnum; -- version number 383 1.19 simonb * const struct netconfig *nconf; -- netconfig structure 384 1.19 simonb */ 385 1.17 fvdl 386 1.17 fvdl 387 1.17 fvdl /* 388 1.17 fvdl * Generic TLI create routine 389 1.17 fvdl */ 390 1.21 perry extern SVCXPRT *svc_tli_create(const int, const struct netconfig *, 391 1.31 dholland const struct t_bind *, const unsigned int, 392 1.31 dholland const unsigned int); 393 1.17 fvdl /* 394 1.19 simonb * const int fd; -- connection end point 395 1.19 simonb * const struct netconfig *nconf; -- netconfig structure for network 396 1.19 simonb * const struct t_bind *bindaddr; -- local bind address 397 1.30 dholland * const unsigned sendsz; -- max sendsize 398 1.30 dholland * const unsigned recvsz; -- max recvsize 399 1.1 deraadt */ 400 1.1 deraadt 401 1.17 fvdl /* 402 1.17 fvdl * Connectionless and connectionful create routines 403 1.17 fvdl */ 404 1.2 brezak 405 1.31 dholland extern SVCXPRT *svc_vc_create(const int, const unsigned int, 406 1.31 dholland const unsigned int); 407 1.1 deraadt /* 408 1.19 simonb * const int fd; -- open connection end point 409 1.30 dholland * const unsigned sendsize; -- max send size 410 1.30 dholland * const unsigned recvsize; -- max recv size 411 1.1 deraadt */ 412 1.17 fvdl 413 1.31 dholland extern SVCXPRT *svc_dg_create(const int, const unsigned int, 414 1.31 dholland const unsigned int); 415 1.19 simonb /* 416 1.19 simonb * const int fd; -- open connection 417 1.30 dholland * const unsigned sendsize; -- max send size 418 1.30 dholland * const unsigned recvsize; -- max recv size 419 1.19 simonb */ 420 1.2 brezak 421 1.1 deraadt 422 1.1 deraadt /* 423 1.17 fvdl * the routine takes any *open* connection 424 1.17 fvdl * descriptor as its first input and is used for open connections. 425 1.17 fvdl */ 426 1.31 dholland extern SVCXPRT *svc_fd_create(const int, const unsigned int, 427 1.31 dholland const unsigned int); 428 1.17 fvdl /* 429 1.19 simonb * const int fd; -- open connection end point 430 1.30 dholland * const unsigned sendsize; -- max send size 431 1.30 dholland * const unsigned recvsize; -- max recv size 432 1.1 deraadt */ 433 1.6 cgd 434 1.6 cgd /* 435 1.17 fvdl * Memory based rpc (for speed check and testing) 436 1.17 fvdl */ 437 1.21 perry extern SVCXPRT *svc_raw_create(void); 438 1.17 fvdl 439 1.17 fvdl /* 440 1.17 fvdl * svc_dg_enable_cache() enables the cache on dg transports. 441 1.6 cgd */ 442 1.31 dholland int svc_dg_enablecache(SVCXPRT *, const unsigned int); 443 1.17 fvdl 444 1.2 brezak __END_DECLS 445 1.17 fvdl 446 1.17 fvdl 447 1.17 fvdl /* for backward compatibility */ 448 1.17 fvdl #include <rpc/svc_soc.h> 449 1.1 deraadt 450 1.11 perry #endif /* !_RPC_SVC_H_ */ 451