18360efbdSAlfred Perlstein.\" @(#)rpc_svc_calls.3n 1.28 93/05/10 SMI; from SVr4 28360efbdSAlfred Perlstein.\" Copyright 1989 AT&T 38360efbdSAlfred Perlstein.\" @(#)rpc_svc_calls 1.5 89/07/25 SMI; 48360efbdSAlfred Perlstein.\" Copyright (c) 1988 Sun Microsystems, Inc. - All Rights Reserved. 58360efbdSAlfred Perlstein.\" $NetBSD: rpc_svc_calls.3,v 1.1 2000/06/02 23:11:13 fvdl Exp $ 68360efbdSAlfred Perlstein.\" $FreeBSD$ 78360efbdSAlfred Perlstein.Dd May 3, 1993 88360efbdSAlfred Perlstein.Dt RPC_SVC_CALLS 3 98360efbdSAlfred Perlstein.Os 108360efbdSAlfred Perlstein.Sh NAME 118360efbdSAlfred Perlstein.Nm svc_dg_enablecache , 128360efbdSAlfred Perlstein.Nm svc_exit , 138360efbdSAlfred Perlstein.Nm svc_fdset , 148360efbdSAlfred Perlstein.Nm svc_freeargs , 158360efbdSAlfred Perlstein.Nm svc_getargs , 168360efbdSAlfred Perlstein.Nm svc_getreq_common , 178360efbdSAlfred Perlstein.Nm svc_getreq_poll , 188360efbdSAlfred Perlstein.Nm svc_getreqset , 198360efbdSAlfred Perlstein.Nm svc_getrpccaller , 208360efbdSAlfred Perlstein.Nm svc_pollset , 218360efbdSAlfred Perlstein.Nm svc_run , 228360efbdSAlfred Perlstein.Nm svc_sendreply 238360efbdSAlfred Perlstein.Nd library routines for RPC servers 248360efbdSAlfred Perlstein.Sh LIBRARY 258360efbdSAlfred Perlstein.Lb libc 268360efbdSAlfred Perlstein.Sh SYNOPSIS 2732eef9aeSRuslan Ermilov.In rpc/rpc.h 288360efbdSAlfred Perlstein.Ft int 298360efbdSAlfred Perlstein.Fn svc_dg_enablecache "SVCXPRT *xprt" "const unsigned cache_size" 308360efbdSAlfred Perlstein.Ft void 318360efbdSAlfred Perlstein.Fn svc_exit "void" 328360efbdSAlfred Perlstein.Ft bool_t 338360efbdSAlfred Perlstein.Fn svc_freeargs "const SVCXPRT *xprt" "const xdrproc_t inproc" "caddr_t in" 348360efbdSAlfred Perlstein.Ft bool_t 358360efbdSAlfred Perlstein.Fn svc_getargs "const SVCXPRT *xprt" "const xdrproc_t inproc" "caddr_t in" 368360efbdSAlfred Perlstein.Ft void 378360efbdSAlfred Perlstein.Fn svc_getreq_common "const int fd" 388360efbdSAlfred Perlstein.Ft void 398360efbdSAlfred Perlstein.Fn svc_getreq_poll "struct pollfd *pfdp" "const int pollretval" 408360efbdSAlfred Perlstein.Ft void 418360efbdSAlfred Perlstein.Fn svc_getreqset "fd_set * rdfds" 428360efbdSAlfred Perlstein.Ft "struct netbuf *" 438360efbdSAlfred Perlstein.Fn svc_getrpccaller "const SVCXPRT *xprt" 448360efbdSAlfred Perlstein.Ft "struct cmsgcred *" 458360efbdSAlfred Perlstein.Fn __svc_getcallercreds "const SVCXPRT *xprt" 468360efbdSAlfred Perlstein.Vt struct pollfd svc_pollset[FD_SETSIZE]; 478360efbdSAlfred Perlstein.Ft void 488360efbdSAlfred Perlstein.Fn svc_run "void" 498360efbdSAlfred Perlstein.Ft bool_t 50db7534cfSBruce Evans.Fn svc_sendreply "SVCXPRT *xprt" "xdrproc_t outproc" "char *out" 518360efbdSAlfred Perlstein.Sh DESCRIPTION 528360efbdSAlfred PerlsteinThese routines are part of the 538360efbdSAlfred PerlsteinRPC 548360efbdSAlfred Perlsteinlibrary which allows C language programs to make procedure 558360efbdSAlfred Perlsteincalls on other machines across the network. 568360efbdSAlfred Perlstein.Pp 578360efbdSAlfred PerlsteinThese routines are associated with the server side of the 588360efbdSAlfred PerlsteinRPC mechanism. 598360efbdSAlfred PerlsteinSome of them are called by the server side dispatch function, 608360efbdSAlfred Perlsteinwhile others 618360efbdSAlfred Perlstein(such as 628360efbdSAlfred Perlstein.Fn svc_run ) 638360efbdSAlfred Perlsteinare called when the server is initiated. 648360efbdSAlfred Perlstein.\" .Pp 658360efbdSAlfred Perlstein.\" In the current implementation, the service transport handle, 668360efbdSAlfred Perlstein.\" .Dv SVCXPRT , 678360efbdSAlfred Perlstein.\" contains a single data area for decoding arguments and encoding results. 688360efbdSAlfred Perlstein.\" Therefore, this structure cannot be freely shared between threads that call 698360efbdSAlfred Perlstein.\" functions that do this. 708360efbdSAlfred Perlstein.\" Routines on this page that are affected by this 718360efbdSAlfred Perlstein.\" restriction are marked as unsafe for MT applications. 728360efbdSAlfred Perlstein.Sh Routines 738360efbdSAlfred PerlsteinSee 748360efbdSAlfred Perlstein.Xr rpc 3 758360efbdSAlfred Perlsteinfor the definition of the 768360efbdSAlfred Perlstein.Vt SVCXPRT 778360efbdSAlfred Perlsteindata structure. 788360efbdSAlfred Perlstein.Bl -tag -width __svc_getcallercreds() 798360efbdSAlfred Perlstein.It Fn svc_dg_enablecache 808360efbdSAlfred PerlsteinThis function allocates a duplicate request cache for the 818360efbdSAlfred Perlsteinservice endpoint 828360efbdSAlfred Perlstein.Fa xprt , 838360efbdSAlfred Perlsteinlarge enough to hold 848360efbdSAlfred Perlstein.Fa cache_size 858360efbdSAlfred Perlsteinentries. 868360efbdSAlfred PerlsteinOnce enabled, there is no way to disable caching. 878360efbdSAlfred PerlsteinThis routine returns 0 if space necessary for a cache of the given size 888360efbdSAlfred Perlsteinwas successfully allocated, and 1 otherwise. 898360efbdSAlfred Perlstein.It Fn svc_exit 908360efbdSAlfred PerlsteinThis function, when called by any of the RPC server procedure or 918360efbdSAlfred Perlsteinotherwise, causes 928360efbdSAlfred Perlstein.Fn svc_run 938360efbdSAlfred Perlsteinto return. 948360efbdSAlfred Perlstein.Pp 958360efbdSAlfred PerlsteinAs currently implemented, 968360efbdSAlfred Perlstein.Fn svc_exit 978360efbdSAlfred Perlsteinzeroes the 988360efbdSAlfred Perlstein.Va svc_fdset 998360efbdSAlfred Perlsteinglobal variable. 1008360efbdSAlfred PerlsteinIf RPC server activity is to be resumed, 1018360efbdSAlfred Perlsteinservices must be reregistered with the RPC library 1028360efbdSAlfred Perlsteineither through one of the 10311d84435SRuslan Ermilov.Xr rpc_svc_create 3 1048360efbdSAlfred Perlsteinfunctions, or using 1058360efbdSAlfred Perlstein.Fn xprt_register . 1061fae73b1SRuslan ErmilovThe 1078360efbdSAlfred Perlstein.Fn svc_exit 1081fae73b1SRuslan Ermilovfunction 1098360efbdSAlfred Perlsteinhas global scope and ends all RPC server activity. 1108360efbdSAlfred Perlstein.It Xo 1118360efbdSAlfred Perlstein.Vt fd_set Va svc_fdset 1128360efbdSAlfred Perlstein.Xc 1138360efbdSAlfred PerlsteinA global variable reflecting the 1142efeeba5SRuslan ErmilovRPC server's read file descriptor bit mask; it is suitable as a argument 1158360efbdSAlfred Perlsteinto the 1168360efbdSAlfred Perlstein.Xr select 2 1178360efbdSAlfred Perlsteinsystem call. 1188360efbdSAlfred PerlsteinThis is only of interest 1198360efbdSAlfred Perlsteinif service implementors do not call 1208360efbdSAlfred Perlstein.Fn svc_run , 1218360efbdSAlfred Perlsteinbut rather do their own asynchronous event processing. 1228360efbdSAlfred PerlsteinThis variable is read-only (do not pass its address to 1238360efbdSAlfred Perlstein.Xr select 2 ! ) , 1248360efbdSAlfred Perlsteinyet it may change after calls to 1258360efbdSAlfred Perlstein.Fn svc_getreqset 1268360efbdSAlfred Perlsteinor any creation routines. 1278360efbdSAlfred Perlstein.It Fn svc_freeargs 1288360efbdSAlfred PerlsteinA function macro that frees any data allocated by the 1298360efbdSAlfred PerlsteinRPC/XDR system when it decoded the arguments to a service procedure 1308360efbdSAlfred Perlsteinusing 1318360efbdSAlfred Perlstein.Fn svc_getargs . 1328360efbdSAlfred PerlsteinThis routine returns 1338360efbdSAlfred Perlstein.Dv TRUE 1348360efbdSAlfred Perlsteinif the results were successfully 1358360efbdSAlfred Perlsteinfreed, and 1368360efbdSAlfred Perlstein.Dv FALSE 1378360efbdSAlfred Perlsteinotherwise. 1388360efbdSAlfred Perlstein.It Fn svc_getargs 1398360efbdSAlfred PerlsteinA function macro that decodes the arguments of an 1408360efbdSAlfred PerlsteinRPC request associated with the RPC 1418360efbdSAlfred Perlsteinservice transport handle 1428360efbdSAlfred Perlstein.Fa xprt . 1432efeeba5SRuslan ErmilovThe 1448360efbdSAlfred Perlstein.Fa in 1452efeeba5SRuslan Ermilovargument 1468360efbdSAlfred Perlsteinis the address where the arguments will be placed; 1478360efbdSAlfred Perlstein.Fa inproc 1488360efbdSAlfred Perlsteinis the XDR 1498360efbdSAlfred Perlsteinroutine used to decode the arguments. 1508360efbdSAlfred PerlsteinThis routine returns 1518360efbdSAlfred Perlstein.Dv TRUE 1528360efbdSAlfred Perlsteinif decoding succeeds, and 1538360efbdSAlfred Perlstein.Dv FALSE 1548360efbdSAlfred Perlsteinotherwise. 1558360efbdSAlfred Perlstein.It Fn svc_getreq_common 1568360efbdSAlfred PerlsteinThis routine is called to handle a request on the given 1578360efbdSAlfred Perlsteinfile descriptor. 1588360efbdSAlfred Perlstein.It Fn svc_getreq_poll 1598360efbdSAlfred PerlsteinThis routine is only of interest if a service implementor 1608360efbdSAlfred Perlsteindoes not call 1618360efbdSAlfred Perlstein.Fn svc_run , 1628360efbdSAlfred Perlsteinbut instead implements custom asynchronous event processing. 1638360efbdSAlfred PerlsteinIt is called when 1648360efbdSAlfred Perlstein.Xr poll 2 1658360efbdSAlfred Perlsteinhas determined that an RPC request has arrived on some RPC 1668360efbdSAlfred Perlsteinfile descriptors; 1678360efbdSAlfred Perlstein.Fa pollretval 1688360efbdSAlfred Perlsteinis the return value from 1698360efbdSAlfred Perlstein.Xr poll 2 1708360efbdSAlfred Perlsteinand 1718360efbdSAlfred Perlstein.Fa pfdp 1728360efbdSAlfred Perlsteinis the array of 1738360efbdSAlfred Perlstein.Vt pollfd 1748360efbdSAlfred Perlsteinstructures on which the 1758360efbdSAlfred Perlstein.Xr poll 2 1768360efbdSAlfred Perlsteinwas done. 1778360efbdSAlfred PerlsteinIt is assumed to be an array large enough to 1788360efbdSAlfred Perlsteincontain the maximal number of descriptors allowed. 1798360efbdSAlfred Perlstein.It Fn svc_getreqset 1808360efbdSAlfred PerlsteinThis routine is only of interest if a service implementor 1818360efbdSAlfred Perlsteindoes not call 1828360efbdSAlfred Perlstein.Fn svc_run , 1838360efbdSAlfred Perlsteinbut instead implements custom asynchronous event processing. 1848360efbdSAlfred PerlsteinIt is called when 1858360efbdSAlfred Perlstein.Xr poll 2 1868360efbdSAlfred Perlsteinhas determined that an RPC 1878360efbdSAlfred Perlsteinrequest has arrived on some RPC file descriptors; 1888360efbdSAlfred Perlstein.Fa rdfds 1898360efbdSAlfred Perlsteinis the resultant read file descriptor bit mask. 1908360efbdSAlfred PerlsteinThe routine returns when all file descriptors 1918360efbdSAlfred Perlsteinassociated with the value of 1928360efbdSAlfred Perlstein.Fa rdfds 1938360efbdSAlfred Perlsteinhave been serviced. 1948360efbdSAlfred Perlstein.It Fn svc_getrpccaller 1958360efbdSAlfred PerlsteinThe approved way of getting the network address of the caller 1968360efbdSAlfred Perlsteinof a procedure associated with the 1978360efbdSAlfred PerlsteinRPC service transport handle 1988360efbdSAlfred Perlstein.Fa xprt . 1998360efbdSAlfred Perlstein.It Fn __svc_getcallercreds 2008360efbdSAlfred Perlstein.Em Warning : 2018360efbdSAlfred Perlsteinthis macro is specific to 2028360efbdSAlfred Perlstein.Fx 2038360efbdSAlfred Perlsteinand thus not portable. 2048360efbdSAlfred PerlsteinThis macro returns a pointer to a 2058360efbdSAlfred Perlstein.Vt cmsgcred 2068360efbdSAlfred Perlsteinstructure, defined in 2078360efbdSAlfred Perlstein.Aq Pa sys/socket.h , 2088360efbdSAlfred Perlsteinidentifying the calling client. 2098360efbdSAlfred PerlsteinThis only works if the client is 2108360efbdSAlfred Perlsteincalling the server over an 2118360efbdSAlfred Perlstein.Dv AF_LOCAL 2128360efbdSAlfred Perlsteinsocket. 2138360efbdSAlfred Perlstein.It Xo 2148360efbdSAlfred Perlstein.Vt struct pollfd Va svc_pollset[FD_SETSIZE] ; 2158360efbdSAlfred Perlstein.Xc 2168360efbdSAlfred Perlstein.Va svc_pollset 2178360efbdSAlfred Perlsteinis an array of 2188360efbdSAlfred Perlstein.Vt pollfd 2198360efbdSAlfred Perlsteinstructures derived from 2208360efbdSAlfred Perlstein.Va svc_fdset[] . 2212efeeba5SRuslan ErmilovIt is suitable as an argument to the 2228360efbdSAlfred Perlstein.Xr poll 2 2238360efbdSAlfred Perlsteinsystem call. 2248360efbdSAlfred PerlsteinThe derivation of 2258360efbdSAlfred Perlstein.Va svc_pollset 2268360efbdSAlfred Perlsteinfrom 2278360efbdSAlfred Perlstein.Va svc_fdset 2288360efbdSAlfred Perlsteinis made in the current implementation in 2298360efbdSAlfred Perlstein.Fn svc_run . 2308360efbdSAlfred PerlsteinService implementors who do not call 2318360efbdSAlfred Perlstein.Fn svc_run 2328360efbdSAlfred Perlsteinand who wish to use this array must perform this derivation themselves. 2338360efbdSAlfred Perlstein.It Fn svc_run 2348360efbdSAlfred PerlsteinThis routine never returns. 2358360efbdSAlfred PerlsteinIt waits for RPC 2368360efbdSAlfred Perlsteinrequests to arrive, and calls the appropriate service 2378360efbdSAlfred Perlsteinprocedure using 2388360efbdSAlfred Perlstein.Fn svc_getreq_poll 2398360efbdSAlfred Perlsteinwhen one arrives. 2408360efbdSAlfred PerlsteinThis procedure is usually waiting for the 2418360efbdSAlfred Perlstein.Xr poll 2 2428360efbdSAlfred Perlsteinsystem call to return. 2438360efbdSAlfred Perlstein.It Fn svc_sendreply 2448360efbdSAlfred PerlsteinCalled by an RPC service's dispatch routine to send the results of a 2458360efbdSAlfred Perlsteinremote procedure call. 2462efeeba5SRuslan ErmilovThe 2478360efbdSAlfred Perlstein.Fa xprt 2482efeeba5SRuslan Ermilovargument 2498360efbdSAlfred Perlsteinis the request's associated transport handle; 2508360efbdSAlfred Perlstein.Fa outproc 2518360efbdSAlfred Perlsteinis the XDR 2528360efbdSAlfred Perlsteinroutine which is used to encode the results; and 2538360efbdSAlfred Perlstein.Fa out 2548360efbdSAlfred Perlsteinis the address of the results. 2558360efbdSAlfred PerlsteinThis routine returns 2568360efbdSAlfred Perlstein.Dv TRUE 2578360efbdSAlfred Perlsteinif it succeeds, 2588360efbdSAlfred Perlstein.Dv FALSE 2598360efbdSAlfred Perlsteinotherwise. 2608360efbdSAlfred Perlstein.El 2618360efbdSAlfred Perlstein.Sh SEE ALSO 2628360efbdSAlfred Perlstein.Xr poll 2 , 2638360efbdSAlfred Perlstein.Xr select 2 , 2648360efbdSAlfred Perlstein.Xr rpc 3 , 2658360efbdSAlfred Perlstein.Xr rpc_svc_create 3 , 2668360efbdSAlfred Perlstein.Xr rpc_svc_err 3 , 2678360efbdSAlfred Perlstein.Xr rpc_svc_reg 3 268