xref: /freebsd/lib/libc/rpc/rpc_svc_calls.3 (revision 79be508c8f9afb73e85ef379ae1620f67a0e6c4c)
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
5079be508cSRuslan Ermilov.Fn svc_sendreply "SVCXPRT *xprt" "xdrproc_t outproc" "void *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
1149d5abbddSJens SchweikhardtRPC server's read file descriptor bit mask; it is suitable as an 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
207fe08efe6SRuslan Ermilov.In 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