xref: /freebsd/lib/libc/rpc/rpc_svc_calls.3 (revision 8360efbd6c932013ffdb2f83d2f2de4278febb5e)
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
278360efbdSAlfred Perlstein.Fd #include <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
508360efbdSAlfred Perlstein.Fn svc_sendreply "const SVCXPRT *xprt" "const xdrproc_t outproc" "const caddr_t *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
1038360efbdSAlfred Perlstein.Fn rpc_svc_create
1048360efbdSAlfred Perlsteinfunctions, or using
1058360efbdSAlfred Perlstein.Fn xprt_register .
1068360efbdSAlfred Perlstein.Fn svc_exit
1078360efbdSAlfred Perlsteinhas global scope and ends all RPC server activity.
1088360efbdSAlfred Perlstein.It Xo
1098360efbdSAlfred Perlstein.Vt fd_set Va svc_fdset
1108360efbdSAlfred Perlstein.Xc
1118360efbdSAlfred PerlsteinA global variable reflecting the
1128360efbdSAlfred PerlsteinRPC server's read file descriptor bit mask; it is suitable as a parameter
1138360efbdSAlfred Perlsteinto the
1148360efbdSAlfred Perlstein.Xr select 2
1158360efbdSAlfred Perlsteinsystem call.
1168360efbdSAlfred PerlsteinThis is only of interest
1178360efbdSAlfred Perlsteinif service implementors do not call
1188360efbdSAlfred Perlstein.Fn svc_run ,
1198360efbdSAlfred Perlsteinbut rather do their own asynchronous event processing.
1208360efbdSAlfred PerlsteinThis variable is read-only (do not pass its address to
1218360efbdSAlfred Perlstein.Xr select 2 ! ) ,
1228360efbdSAlfred Perlsteinyet it may change after calls to
1238360efbdSAlfred Perlstein.Fn svc_getreqset
1248360efbdSAlfred Perlsteinor any creation routines.
1258360efbdSAlfred Perlstein.It Fn svc_freeargs
1268360efbdSAlfred PerlsteinA function macro that frees any data allocated by the
1278360efbdSAlfred PerlsteinRPC/XDR system when it decoded the arguments to a service procedure
1288360efbdSAlfred Perlsteinusing
1298360efbdSAlfred Perlstein.Fn svc_getargs .
1308360efbdSAlfred PerlsteinThis routine returns
1318360efbdSAlfred Perlstein.Dv TRUE
1328360efbdSAlfred Perlsteinif the results were successfully
1338360efbdSAlfred Perlsteinfreed, and
1348360efbdSAlfred Perlstein.Dv FALSE
1358360efbdSAlfred Perlsteinotherwise.
1368360efbdSAlfred Perlstein.It Fn svc_getargs
1378360efbdSAlfred PerlsteinA function macro that decodes the arguments of an
1388360efbdSAlfred PerlsteinRPC request associated with the RPC
1398360efbdSAlfred Perlsteinservice transport handle
1408360efbdSAlfred Perlstein.Fa xprt .
1418360efbdSAlfred PerlsteinThe parameter
1428360efbdSAlfred Perlstein.Fa in
1438360efbdSAlfred Perlsteinis the address where the arguments will be placed;
1448360efbdSAlfred Perlstein.Fa inproc
1458360efbdSAlfred Perlsteinis the XDR
1468360efbdSAlfred Perlsteinroutine used to decode the arguments.
1478360efbdSAlfred PerlsteinThis routine returns
1488360efbdSAlfred Perlstein.Dv TRUE
1498360efbdSAlfred Perlsteinif decoding succeeds, and
1508360efbdSAlfred Perlstein.Dv FALSE
1518360efbdSAlfred Perlsteinotherwise.
1528360efbdSAlfred Perlstein.It Fn svc_getreq_common
1538360efbdSAlfred PerlsteinThis routine is called to handle a request on the given
1548360efbdSAlfred Perlsteinfile descriptor.
1558360efbdSAlfred Perlstein.It Fn svc_getreq_poll
1568360efbdSAlfred PerlsteinThis routine is only of interest if a service implementor
1578360efbdSAlfred Perlsteindoes not call
1588360efbdSAlfred Perlstein.Fn svc_run ,
1598360efbdSAlfred Perlsteinbut instead implements custom asynchronous event processing.
1608360efbdSAlfred PerlsteinIt is called when
1618360efbdSAlfred Perlstein.Xr poll 2
1628360efbdSAlfred Perlsteinhas determined that an RPC request has arrived on some RPC
1638360efbdSAlfred Perlsteinfile descriptors;
1648360efbdSAlfred Perlstein.Fa pollretval
1658360efbdSAlfred Perlsteinis the return value from
1668360efbdSAlfred Perlstein.Xr poll 2
1678360efbdSAlfred Perlsteinand
1688360efbdSAlfred Perlstein.Fa pfdp
1698360efbdSAlfred Perlsteinis the array of
1708360efbdSAlfred Perlstein.Vt pollfd
1718360efbdSAlfred Perlsteinstructures on which the
1728360efbdSAlfred Perlstein.Xr poll 2
1738360efbdSAlfred Perlsteinwas done.
1748360efbdSAlfred PerlsteinIt is assumed to be an array large enough to
1758360efbdSAlfred Perlsteincontain the maximal number of descriptors allowed.
1768360efbdSAlfred Perlstein.It Fn svc_getreqset
1778360efbdSAlfred PerlsteinThis routine is only of interest if a service implementor
1788360efbdSAlfred Perlsteindoes not call
1798360efbdSAlfred Perlstein.Fn svc_run ,
1808360efbdSAlfred Perlsteinbut instead implements custom asynchronous event processing.
1818360efbdSAlfred PerlsteinIt is called when
1828360efbdSAlfred Perlstein.Xr poll 2
1838360efbdSAlfred Perlsteinhas determined that an RPC
1848360efbdSAlfred Perlsteinrequest has arrived on some RPC file descriptors;
1858360efbdSAlfred Perlstein.Fa rdfds
1868360efbdSAlfred Perlsteinis the resultant read file descriptor bit mask.
1878360efbdSAlfred PerlsteinThe routine returns when all file descriptors
1888360efbdSAlfred Perlsteinassociated with the value of
1898360efbdSAlfred Perlstein.Fa rdfds
1908360efbdSAlfred Perlsteinhave been serviced.
1918360efbdSAlfred Perlstein.It Fn svc_getrpccaller
1928360efbdSAlfred PerlsteinThe approved way of getting the network address of the caller
1938360efbdSAlfred Perlsteinof a procedure associated with the
1948360efbdSAlfred PerlsteinRPC service transport handle
1958360efbdSAlfred Perlstein.Fa xprt .
1968360efbdSAlfred Perlstein.It Fn __svc_getcallercreds
1978360efbdSAlfred Perlstein.Em Warning :
1988360efbdSAlfred Perlsteinthis macro is specific to
1998360efbdSAlfred Perlstein.Fx
2008360efbdSAlfred Perlsteinand thus not portable.
2018360efbdSAlfred PerlsteinThis macro returns a pointer to a
2028360efbdSAlfred Perlstein.Vt cmsgcred
2038360efbdSAlfred Perlsteinstructure, defined in
2048360efbdSAlfred Perlstein.Aq Pa sys/socket.h ,
2058360efbdSAlfred Perlsteinidentifying the calling client.
2068360efbdSAlfred PerlsteinThis only works if the client is
2078360efbdSAlfred Perlsteincalling the server over an
2088360efbdSAlfred Perlstein.Dv AF_LOCAL
2098360efbdSAlfred Perlsteinsocket.
2108360efbdSAlfred Perlstein.It Xo
2118360efbdSAlfred Perlstein.Vt struct pollfd Va svc_pollset[FD_SETSIZE] ;
2128360efbdSAlfred Perlstein.Xc
2138360efbdSAlfred Perlstein.Va svc_pollset
2148360efbdSAlfred Perlsteinis an array of
2158360efbdSAlfred Perlstein.Vt pollfd
2168360efbdSAlfred Perlsteinstructures derived from
2178360efbdSAlfred Perlstein.Va svc_fdset[] .
2188360efbdSAlfred PerlsteinIt is suitable as a parameter to the
2198360efbdSAlfred Perlstein.Xr poll 2
2208360efbdSAlfred Perlsteinsystem call.
2218360efbdSAlfred PerlsteinThe derivation of
2228360efbdSAlfred Perlstein.Va svc_pollset
2238360efbdSAlfred Perlsteinfrom
2248360efbdSAlfred Perlstein.Va svc_fdset
2258360efbdSAlfred Perlsteinis made in the current implementation in
2268360efbdSAlfred Perlstein.Fn svc_run .
2278360efbdSAlfred PerlsteinService implementors who do not call
2288360efbdSAlfred Perlstein.Fn svc_run
2298360efbdSAlfred Perlsteinand who wish to use this array must perform this derivation themselves.
2308360efbdSAlfred Perlstein.It Fn svc_run
2318360efbdSAlfred PerlsteinThis routine never returns.
2328360efbdSAlfred PerlsteinIt waits for RPC
2338360efbdSAlfred Perlsteinrequests to arrive, and calls the appropriate service
2348360efbdSAlfred Perlsteinprocedure using
2358360efbdSAlfred Perlstein.Fn svc_getreq_poll
2368360efbdSAlfred Perlsteinwhen one arrives.
2378360efbdSAlfred PerlsteinThis procedure is usually waiting for the
2388360efbdSAlfred Perlstein.Xr poll 2
2398360efbdSAlfred Perlsteinsystem call to return.
2408360efbdSAlfred Perlstein.It Fn svc_sendreply
2418360efbdSAlfred PerlsteinCalled by an RPC service's dispatch routine to send the results of a
2428360efbdSAlfred Perlsteinremote procedure call.
2438360efbdSAlfred PerlsteinThe parameter
2448360efbdSAlfred Perlstein.Fa xprt
2458360efbdSAlfred Perlsteinis the request's associated transport handle;
2468360efbdSAlfred Perlstein.Fa outproc
2478360efbdSAlfred Perlsteinis the XDR
2488360efbdSAlfred Perlsteinroutine which is used to encode the results; and
2498360efbdSAlfred Perlstein.Fa out
2508360efbdSAlfred Perlsteinis the address of the results.
2518360efbdSAlfred PerlsteinThis routine returns
2528360efbdSAlfred Perlstein.Dv TRUE
2538360efbdSAlfred Perlsteinif it succeeds,
2548360efbdSAlfred Perlstein.Dv FALSE
2558360efbdSAlfred Perlsteinotherwise.
2568360efbdSAlfred Perlstein.El
2578360efbdSAlfred Perlstein.Sh SEE ALSO
2588360efbdSAlfred Perlstein.Xr poll 2 ,
2598360efbdSAlfred Perlstein.Xr select 2 ,
2608360efbdSAlfred Perlstein.Xr rpc 3 ,
2618360efbdSAlfred Perlstein.Xr rpc_svc_create 3 ,
2628360efbdSAlfred Perlstein.Xr rpc_svc_err 3 ,
2638360efbdSAlfred Perlstein.Xr rpc_svc_reg 3
264