xref: /freebsd/lib/libc/rpc/rpc_svc_create.3 (revision 2efeeba554cbd7bdee9cfe17641c8bd335c7972f)
18360efbdSAlfred Perlstein.\" @(#)rpc_svc_create.3n 1.26 93/08/26 SMI; from SVr4
28360efbdSAlfred Perlstein.\" Copyright 1989 AT&T
38360efbdSAlfred Perlstein.\" @(#)rpc_svc_create 1.3 89/06/28 SMI;
48360efbdSAlfred Perlstein.\" Copyright (c) 1988 Sun Microsystems, Inc. - All Rights Reserved.
58360efbdSAlfred Perlstein.\" $FreeBSD$
68360efbdSAlfred Perlstein.Dd May 3, 1993
78360efbdSAlfred Perlstein.Dt RPC_SVC_CREATE 3
88360efbdSAlfred Perlstein.Os
98360efbdSAlfred Perlstein.Sh NAME
108360efbdSAlfred Perlstein.Nm rpc_svc_create ,
118360efbdSAlfred Perlstein.Nm svc_control ,
128360efbdSAlfred Perlstein.Nm svc_create ,
138360efbdSAlfred Perlstein.Nm svc_destroy ,
148360efbdSAlfred Perlstein.Nm svc_dg_create ,
158360efbdSAlfred Perlstein.Nm svc_fd_create ,
168360efbdSAlfred Perlstein.Nm svc_raw_create ,
178360efbdSAlfred Perlstein.Nm svc_tli_create ,
188360efbdSAlfred Perlstein.Nm svc_tp_create ,
198360efbdSAlfred Perlstein.Nm svc_vc_create
208360efbdSAlfred Perlstein.Nd library routines for the creation of server handles
218360efbdSAlfred Perlstein.Sh LIBRARY
228360efbdSAlfred Perlstein.Lb libc
238360efbdSAlfred Perlstein.Sh SYNOPSIS
2432eef9aeSRuslan Ermilov.In rpc/rpc.h
258360efbdSAlfred Perlstein.Ft bool_t
268360efbdSAlfred Perlstein.Fn svc_control "SVCXPRT *svc" "const u_int req" "void *info"
278360efbdSAlfred Perlstein.Ft int
28db7534cfSBruce Evans.Fn svc_create "void (*dispatch)(struct svc_req *, SVCXPRT *)" "const rpcprog_t prognum" "const rpcvers_t versnum" "const char *nettype"
29db7534cfSBruce Evans.Ft SVCXPRT *
308360efbdSAlfred Perlstein.Fn svc_dg_create "const int fildes" "const u_int sendsz" "const u_int recvsz"
318360efbdSAlfred Perlstein.Ft void
328360efbdSAlfred Perlstein.Fn svc_destroy "SVCXPRT *xprt"
338360efbdSAlfred Perlstein.Ft "SVCXPRT *"
348360efbdSAlfred Perlstein.Fn svc_fd_create "const int fildes" "const u_int sendsz" "const u_int recvsz"
358360efbdSAlfred Perlstein.Ft "SVCXPRT *"
368360efbdSAlfred Perlstein.Fn svc_raw_create "void"
378360efbdSAlfred Perlstein.Ft "SVCXPRT *"
388360efbdSAlfred Perlstein.Fn svc_tli_create "const int fildes" "const struct netconfig *netconf" "const struct t_bind *bindaddr" "const u_int sendsz" "const u_int recvsz"
398360efbdSAlfred Perlstein.Ft "SVCXPRT *"
40db7534cfSBruce Evans.Fn svc_tp_create "void (*dispatch)(struct svc_req *, SVCXPRT *)" "const rpcprog_t prognum" "const rpcvers_t versnum" "const struct netconfig *netconf"
418360efbdSAlfred Perlstein.Ft "SVCXPRT *"
428360efbdSAlfred Perlstein.Fn svc_vc_create "const int fildes" "const u_int sendsz" "const u_int recvsz"
438360efbdSAlfred Perlstein.Sh DESCRIPTION
448360efbdSAlfred PerlsteinThese routines are part of the RPC
458360efbdSAlfred Perlsteinlibrary which allows C language programs to make procedure
468360efbdSAlfred Perlsteincalls on servers across the network.
478360efbdSAlfred PerlsteinThese routines deal with the creation of service handles.
488360efbdSAlfred PerlsteinOnce the handle is created, the server can be invoked by calling
498360efbdSAlfred Perlstein.Fn svc_run .
508360efbdSAlfred Perlstein.Sh Routines
518360efbdSAlfred PerlsteinSee
528360efbdSAlfred Perlstein.Xr rpc 3
538360efbdSAlfred Perlsteinfor the definition of the
548360efbdSAlfred Perlstein.Vt SVCXPRT
558360efbdSAlfred Perlsteindata structure.
568360efbdSAlfred Perlstein.Bl -tag -width XXXXX
578360efbdSAlfred Perlstein.It Fn svc_control
588360efbdSAlfred PerlsteinA function to change or retrieve various information
598360efbdSAlfred Perlsteinabout a service object.
602efeeba5SRuslan ErmilovThe
618360efbdSAlfred Perlstein.Fa req
622efeeba5SRuslan Ermilovargument
638360efbdSAlfred Perlsteinindicates the type of operation and
648360efbdSAlfred Perlstein.Fa info
658360efbdSAlfred Perlsteinis a pointer to the information.
668360efbdSAlfred PerlsteinThe supported values of
678360efbdSAlfred Perlstein.Fa req ,
688360efbdSAlfred Perlsteintheir argument types, and what they do are:
698360efbdSAlfred Perlstein.Bl -tag -width SVCGET_XID
708360efbdSAlfred Perlstein.It Dv SVCGET_VERSQUIET
718360efbdSAlfred PerlsteinIf a request is received for a program number
728360efbdSAlfred Perlsteinserved by this server but the version number
738360efbdSAlfred Perlsteinis outside the range registered with the server,
748360efbdSAlfred Perlsteinan
758360efbdSAlfred Perlstein.Dv RPC_PROGVERSMISMATCH
768360efbdSAlfred Perlsteinerror will normally
778360efbdSAlfred Perlsteinbe returned.
782efeeba5SRuslan ErmilovThe
798360efbdSAlfred Perlstein.Fa info
802efeeba5SRuslan Ermilovargument
818360efbdSAlfred Perlsteinshould be a pointer to an
828360efbdSAlfred Perlsteininteger.
838360efbdSAlfred PerlsteinUpon successful completion of the
848360efbdSAlfred Perlstein.Dv SVCGET_VERSQUIET
858360efbdSAlfred Perlsteinrequest,
868360efbdSAlfred Perlstein.Fa *info
878360efbdSAlfred Perlsteincontains an
888360efbdSAlfred Perlsteininteger which describes the server's current
898360efbdSAlfred Perlsteinbehavior: 0 indicates normal server behavior
908360efbdSAlfred Perlstein(that is, an
918360efbdSAlfred Perlstein.Dv RPC_PROGVERSMISMATCH
928360efbdSAlfred Perlsteinerror
938360efbdSAlfred Perlsteinwill be returned); 1 indicates that the out of
948360efbdSAlfred Perlsteinrange request will be silently ignored.
958360efbdSAlfred Perlstein.It Dv SVCSET_VERSQUIET
968360efbdSAlfred PerlsteinIf a request is received for a program number
978360efbdSAlfred Perlsteinserved by this server but the version number
988360efbdSAlfred Perlsteinis outside the range registered with the server,
998360efbdSAlfred Perlsteinan
1008360efbdSAlfred Perlstein.Dv RPC_PROGVERSMISMATCH
1018360efbdSAlfred Perlsteinerror will normally
1028360efbdSAlfred Perlsteinbe returned.
1038360efbdSAlfred PerlsteinIt is sometimes desirable to
1048360efbdSAlfred Perlsteinchange this behavior.
1052efeeba5SRuslan ErmilovThe
1068360efbdSAlfred Perlstein.Fa info
1072efeeba5SRuslan Ermilovargument
1088360efbdSAlfred Perlsteinshould be a
1098360efbdSAlfred Perlsteinpointer to an integer which is either 0
1108360efbdSAlfred Perlstein(indicating normal server behavior - an
1118360efbdSAlfred Perlstein.Dv RPC_PROGVERSMISMATCH
1128360efbdSAlfred Perlsteinerror will be returned),
1138360efbdSAlfred Perlsteinor 1 (indicating that the out of range request
1148360efbdSAlfred Perlsteinshould be silently ignored).
1158360efbdSAlfred Perlstein.El
1168360efbdSAlfred Perlstein.It Fn svc_create
1171fae73b1SRuslan ErmilovThe
1188360efbdSAlfred Perlstein.Fn svc_create
1191fae73b1SRuslan Ermilovfunction
1208360efbdSAlfred Perlsteincreates server handles for all the transports
1218360efbdSAlfred Perlsteinbelonging to the class
1228360efbdSAlfred Perlstein.Fa nettype .
1232efeeba5SRuslan ErmilovThe
1248360efbdSAlfred Perlstein.Fa nettype
1252efeeba5SRuslan Ermilovargument
1268360efbdSAlfred Perlsteindefines a class of transports which can be used
1278360efbdSAlfred Perlsteinfor a particular application.
1288360efbdSAlfred PerlsteinThe transports are tried in left to right order in
1298360efbdSAlfred Perlstein.Ev NETPATH
1308360efbdSAlfred Perlsteinvariable or in top to bottom order in the netconfig database.
1318360efbdSAlfred PerlsteinIf
1328360efbdSAlfred Perlstein.Fa nettype
1338360efbdSAlfred Perlsteinis
1348360efbdSAlfred Perlstein.Dv NULL ,
1358360efbdSAlfred Perlsteinit defaults to
1368360efbdSAlfred Perlstein.Qq netpath .
1378360efbdSAlfred Perlstein.Pp
1381fae73b1SRuslan ErmilovThe
1398360efbdSAlfred Perlstein.Fn svc_create
1401fae73b1SRuslan Ermilovfunction
1418360efbdSAlfred Perlsteinregisters itself with the rpcbind
1428360efbdSAlfred Perlsteinservice (see
1438360efbdSAlfred Perlstein.Xr rpcbind 8 ) .
1442efeeba5SRuslan ErmilovThe
1458360efbdSAlfred Perlstein.Fa dispatch
1462efeeba5SRuslan Ermilovfunction
1478360efbdSAlfred Perlsteinis called when there is a remote procedure call for the given
1488360efbdSAlfred Perlstein.Fa prognum
1498360efbdSAlfred Perlsteinand
1508360efbdSAlfred Perlstein.Fa versnum ;
1518360efbdSAlfred Perlsteinthis requires calling
1528360efbdSAlfred Perlstein.Fn svc_run
1538360efbdSAlfred Perlstein(see
1548360efbdSAlfred Perlstein.Fn svc_run
1558360efbdSAlfred Perlsteinin
1568360efbdSAlfred Perlstein.Xr rpc_svc_reg 3 ) .
1578360efbdSAlfred PerlsteinIf
1588360efbdSAlfred Perlstein.Fn svc_create
1598360efbdSAlfred Perlsteinsucceeds, it returns the number of server
1608360efbdSAlfred Perlsteinhandles it created,
1618360efbdSAlfred Perlsteinotherwise it returns 0 and an error message is logged.
1628360efbdSAlfred Perlstein.It Fn svc_destroy
1638360efbdSAlfred PerlsteinA function macro that destroys the RPC
1648360efbdSAlfred Perlsteinservice handle
1658360efbdSAlfred Perlstein.Fa xprt .
1668360efbdSAlfred PerlsteinDestruction usually involves deallocation
1678360efbdSAlfred Perlsteinof private data structures,
1688360efbdSAlfred Perlsteinincluding
1698360efbdSAlfred Perlstein.Fa xprt
1708360efbdSAlfred Perlsteinitself.
1718360efbdSAlfred PerlsteinUse of
1728360efbdSAlfred Perlstein.Fa xprt
1738360efbdSAlfred Perlsteinis undefined after calling this routine.
1748360efbdSAlfred Perlstein.It Fn svc_dg_create
1758360efbdSAlfred PerlsteinThis routine creates a connectionless RPC
1768360efbdSAlfred Perlsteinservice handle, and returns a pointer to it.
1778360efbdSAlfred PerlsteinThis routine returns
1788360efbdSAlfred Perlstein.Dv NULL
1798360efbdSAlfred Perlsteinif it fails, and an error message is logged.
1802efeeba5SRuslan ErmilovThe
1818360efbdSAlfred Perlstein.Fa sendsz
1828360efbdSAlfred Perlsteinand
1838360efbdSAlfred Perlstein.Fa recvsz
1842efeeba5SRuslan Ermilovarguments
1852efeeba5SRuslan Ermilovare arguments used to specify the size of the buffers.
1868360efbdSAlfred PerlsteinIf they are 0, suitable defaults are chosen.
1878360efbdSAlfred PerlsteinThe file descriptor
1888360efbdSAlfred Perlstein.Fa fildes
1898360efbdSAlfred Perlsteinshould be open and bound.
1908360efbdSAlfred PerlsteinThe server is not registered with
1918360efbdSAlfred Perlstein.Xr rpcbind 8 .
1928360efbdSAlfred Perlstein.Pp
1938360efbdSAlfred PerlsteinWarning:
1948360efbdSAlfred Perlsteinsince connectionless-based RPC
1958360efbdSAlfred Perlsteinmessages can only hold limited amount of encoded data,
1968360efbdSAlfred Perlsteinthis transport cannot be used for procedures
1978360efbdSAlfred Perlsteinthat take large arguments or return huge results.
1988360efbdSAlfred Perlstein.It Fn svc_fd_create
1998360efbdSAlfred PerlsteinThis routine creates a service on top of an open and bound file descriptor,
2008360efbdSAlfred Perlsteinand returns the handle to it.
2018360efbdSAlfred PerlsteinTypically, this descriptor is a connected file descriptor for a
2028360efbdSAlfred Perlsteinconnection-oriented transport.
2032efeeba5SRuslan ErmilovThe
2048360efbdSAlfred Perlstein.Fa sendsz
2058360efbdSAlfred Perlsteinand
2068360efbdSAlfred Perlstein.Fa recvsz
2072efeeba5SRuslan Ermilovarguments
2088360efbdSAlfred Perlsteinindicate sizes for the send and receive buffers.
2098360efbdSAlfred PerlsteinIf they are 0, reasonable defaults are chosen.
2108360efbdSAlfred PerlsteinThis routine returns
2118360efbdSAlfred Perlstein.Dv NULL
2128360efbdSAlfred Perlsteinif it fails, and an error message is logged.
2138360efbdSAlfred Perlstein.It Fn svc_raw_create
2148360efbdSAlfred PerlsteinThis routine creates an RPC
2158360efbdSAlfred Perlsteinservice handle and returns a pointer to it.
2168360efbdSAlfred PerlsteinThe transport is really a buffer within the process's
2178360efbdSAlfred Perlsteinaddress space, so the corresponding RPC
2188360efbdSAlfred Perlsteinclient should live in the same address space;
2198360efbdSAlfred Perlstein(see
2208360efbdSAlfred Perlstein.Fn clnt_raw_create
2218360efbdSAlfred Perlsteinin
2228360efbdSAlfred Perlstein.Xr rpc_clnt_create 3 ) .
2238360efbdSAlfred PerlsteinThis routine allows simulation of RPC and acquisition of
2248360efbdSAlfred PerlsteinRPC overheads (such as round trip times),
2258360efbdSAlfred Perlsteinwithout any kernel and networking interference.
2268360efbdSAlfred PerlsteinThis routine returns
2278360efbdSAlfred Perlstein.Dv NULL
2288360efbdSAlfred Perlsteinif it fails, and an error message is logged.
2298360efbdSAlfred Perlstein.Pp
2308360efbdSAlfred PerlsteinNote:
2318360efbdSAlfred Perlstein.Fn svc_run
2328360efbdSAlfred Perlsteinshould not be called when the raw interface is being used.
2338360efbdSAlfred Perlstein.It Fn svc_tli_create
2348360efbdSAlfred PerlsteinThis routine creates an RPC
2358360efbdSAlfred Perlsteinserver handle, and returns a pointer to it.
2362efeeba5SRuslan ErmilovThe
2378360efbdSAlfred Perlstein.Fa fildes
2382efeeba5SRuslan Ermilovargument
2398360efbdSAlfred Perlsteinis the file descriptor on which the service is listening.
2408360efbdSAlfred PerlsteinIf
2418360efbdSAlfred Perlstein.Fa fildes
2428360efbdSAlfred Perlsteinis
2438360efbdSAlfred Perlstein.Dv RPC_ANYFD ,
2448360efbdSAlfred Perlsteinit opens a file descriptor on the transport specified by
2458360efbdSAlfred Perlstein.Fa netconf .
2468360efbdSAlfred PerlsteinIf the file descriptor is unbound and
2478360efbdSAlfred Perlstein.Fa bindaddr
2488360efbdSAlfred Perlsteinis not
2498360efbdSAlfred Perlstein.Dv NULL ,
2508360efbdSAlfred Perlstein.Fa fildes
2518360efbdSAlfred Perlsteinis bound to the address specified by
2528360efbdSAlfred Perlstein.Fa bindaddr ,
2538360efbdSAlfred Perlsteinotherwise
2548360efbdSAlfred Perlstein.Fa fildes
2558360efbdSAlfred Perlsteinis bound to a default address chosen by the transport.
2568360efbdSAlfred Perlstein.Pp
2578360efbdSAlfred PerlsteinNote: the
2588360efbdSAlfred Perlstein.Vt t_bind
2598360efbdSAlfred Perlsteinstructure comes from the TLI/XTI SysV interface, which
2608360efbdSAlfred Perlstein.Nx
2618360efbdSAlfred Perlsteindoes not use.
2628360efbdSAlfred PerlsteinThe structure is defined in
2638360efbdSAlfred Perlstein.Aq Pa rpc/types.h
2648360efbdSAlfred Perlsteinfor compatibility as:
2658360efbdSAlfred Perlstein.Bd -literal
2668360efbdSAlfred Perlsteinstruct t_bind {
2678360efbdSAlfred Perlstein    struct netbuf addr;	/* network address, see rpc(3) */
2688360efbdSAlfred Perlstein    unsigned int  qlen;	/* queue length (for listen(2)) */
2698360efbdSAlfred Perlstein};
2708360efbdSAlfred Perlstein.Ed
2718360efbdSAlfred Perlstein.Pp
2728360efbdSAlfred PerlsteinIn the case where the default address is chosen,
2738360efbdSAlfred Perlsteinthe number of outstanding connect requests is set to 8
2748360efbdSAlfred Perlsteinfor connection-oriented transports.
2758360efbdSAlfred PerlsteinThe user may specify the size of the send and receive buffers
2762efeeba5SRuslan Ermilovwith the arguments
2778360efbdSAlfred Perlstein.Fa sendsz
2788360efbdSAlfred Perlsteinand
2798360efbdSAlfred Perlstein.Fa recvsz ;
2808360efbdSAlfred Perlsteinvalues of 0 choose suitable defaults.
2818360efbdSAlfred PerlsteinThis routine returns
2828360efbdSAlfred Perlstein.Dv NULL
2838360efbdSAlfred Perlsteinif it fails,
2848360efbdSAlfred Perlsteinand an error message is logged.
2858360efbdSAlfred PerlsteinThe server is not registered with the
2868360efbdSAlfred Perlstein.Xr rpcbind 8
2878360efbdSAlfred Perlsteinservice.
2888360efbdSAlfred Perlstein.It Fn svc_tp_create
2891fae73b1SRuslan ErmilovThe
2908360efbdSAlfred Perlstein.Fn svc_tp_create
2911fae73b1SRuslan Ermilovfunction
2928360efbdSAlfred Perlsteincreates a server handle for the network
2938360efbdSAlfred Perlsteinspecified by
2948360efbdSAlfred Perlstein.Fa netconf ,
2958360efbdSAlfred Perlsteinand registers itself with the rpcbind service.
2962efeeba5SRuslan ErmilovThe
2978360efbdSAlfred Perlstein.Fa dispatch
2982efeeba5SRuslan Ermilovfunction
2998360efbdSAlfred Perlsteinis called when there is a remote procedure call
3008360efbdSAlfred Perlsteinfor the given
3018360efbdSAlfred Perlstein.Fa prognum
3028360efbdSAlfred Perlsteinand
3038360efbdSAlfred Perlstein.Fa versnum ;
3048360efbdSAlfred Perlsteinthis requires calling
3058360efbdSAlfred Perlstein.Fn svc_run .
3061fae73b1SRuslan ErmilovThe
3078360efbdSAlfred Perlstein.Fn svc_tp_create
3081fae73b1SRuslan Ermilovfunction
3098360efbdSAlfred Perlsteinreturns the service handle if it succeeds,
3108360efbdSAlfred Perlsteinotherwise a
3118360efbdSAlfred Perlstein.Dv NULL
3128360efbdSAlfred Perlsteinis returned and an error message is logged.
3138360efbdSAlfred Perlstein.It Fn svc_vc_create
3148360efbdSAlfred PerlsteinThis routine creates a connection-oriented RPC
3158360efbdSAlfred Perlsteinservice and returns a pointer to it.
3168360efbdSAlfred PerlsteinThis routine returns
3178360efbdSAlfred Perlstein.Dv NULL
3188360efbdSAlfred Perlsteinif it fails, and an error message is logged.
3198360efbdSAlfred PerlsteinThe users may specify the size of the send and receive buffers
3202efeeba5SRuslan Ermilovwith the arguments
3218360efbdSAlfred Perlstein.Fa sendsz
3228360efbdSAlfred Perlsteinand
3238360efbdSAlfred Perlstein.Fa recvsz ;
3248360efbdSAlfred Perlsteinvalues of 0 choose suitable defaults.
3258360efbdSAlfred PerlsteinThe file descriptor
3268360efbdSAlfred Perlstein.Fa fildes
3278360efbdSAlfred Perlsteinshould be open and bound.
3288360efbdSAlfred PerlsteinThe server is not registered with the
3298360efbdSAlfred Perlstein.Xr rpcbind 8
3308360efbdSAlfred Perlsteinservice.
3318360efbdSAlfred Perlstein.El
3328360efbdSAlfred Perlstein.Sh SEE ALSO
3338360efbdSAlfred Perlstein.Xr rpc 3 ,
3348360efbdSAlfred Perlstein.Xr rpc_svc_calls 3 ,
3358360efbdSAlfred Perlstein.Xr rpc_svc_err 3 ,
3368360efbdSAlfred Perlstein.Xr rpc_svc_reg 3 ,
3378360efbdSAlfred Perlstein.Xr rpcbind 8
338