 b6cbf7203b
			
		
	
	
		b6cbf7203b
		
	
	
	
	
		
			
			This patch imports the unmodified current version of NetBSD libc. The NetBSD includes are in /nbsd_include, while the libc code itself is split between lib/nbsd_libc and common/lib/libc.
		
			
				
	
	
		
			1067 lines
		
	
	
		
			29 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			1067 lines
		
	
	
		
			29 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .\"	@(#)rpc.3n	2.4 88/08/08 4.0 RPCSRC; from 1.19 88/06/24 SMI
 | |
| .\"	$NetBSD: rpc_soc.3,v 1.13 2009/01/11 02:46:29 christos Exp $
 | |
| .\" Converted to mdoc by Thomas Klausner <wiz@NetBSD.org>
 | |
| .\"
 | |
| .Dd December 12, 2008
 | |
| .Dt RPC_SOC 3
 | |
| .Os
 | |
| .Sh NAME
 | |
| .Nm rpc_soc ,
 | |
| .Nm auth_destroy ,
 | |
| .Nm authnone_create ,
 | |
| .Nm authunix_create ,
 | |
| .Nm authunix_create_default ,
 | |
| .Nm callrpc ,
 | |
| .Nm clnt_broadcast ,
 | |
| .Nm clnt_call ,
 | |
| .Nm clnt_control ,
 | |
| .Nm clnt_create ,
 | |
| .Nm clnt_destroy ,
 | |
| .Nm clnt_freeres ,
 | |
| .Nm clnt_geterr ,
 | |
| .Nm clnt_pcreateerror ,
 | |
| .Nm clnt_perrno ,
 | |
| .Nm clnt_perror ,
 | |
| .Nm clnt_spcreateerror ,
 | |
| .Nm clnt_sperrno ,
 | |
| .Nm clnt_sperror ,
 | |
| .Nm clntraw_create ,
 | |
| .Nm clnttcp_create ,
 | |
| .Nm clntudp_bufcreate ,
 | |
| .Nm clntudp_create ,
 | |
| .Nm get_myaddress ,
 | |
| .Nm pmap_getmaps ,
 | |
| .Nm pmap_getport ,
 | |
| .Nm pmap_rmtcall ,
 | |
| .Nm pmap_set ,
 | |
| .Nm pmap_unset ,
 | |
| .Nm registerrpc ,
 | |
| .Nm rpc_createerr ,
 | |
| .Nm svc_destroy ,
 | |
| .Nm svc_fds ,
 | |
| .Nm svc_fdset ,
 | |
| .Nm svc_getargs ,
 | |
| .Nm svc_getcaller ,
 | |
| .Nm svc_getreg ,
 | |
| .Nm svc_getregset ,
 | |
| .Nm svc_getrpccaller ,
 | |
| .Nm svc_register ,
 | |
| .Nm svc_run ,
 | |
| .Nm svc_sendreply ,
 | |
| .Nm svc_unregister ,
 | |
| .Nm svcerr_auth ,
 | |
| .Nm svcerr_decode ,
 | |
| .Nm svcerr_noproc ,
 | |
| .Nm svcerr_noprog ,
 | |
| .Nm svcerr_progvers ,
 | |
| .Nm svcerr_systemerr ,
 | |
| .Nm svcerr_weakauth ,
 | |
| .Nm svcfd_create ,
 | |
| .Nm svcraw_create ,
 | |
| .Nm xdr_accepted_reply ,
 | |
| .Nm xdr_authunix_parms ,
 | |
| .Nm xdr_callhdr ,
 | |
| .Nm xdr_callmsg ,
 | |
| .Nm xdr_opaque_auth ,
 | |
| .Nm xdr_pmap ,
 | |
| .Nm xdr_pmaplist ,
 | |
| .Nm xdr_rejected_reply ,
 | |
| .Nm xdr_replymsg ,
 | |
| .Nm xprt_register ,
 | |
| .Nm xprt_unregister
 | |
| .Nd library routines for remote procedure calls
 | |
| .Sh SYNOPSIS
 | |
| .In rpc/rpc.h
 | |
| .Ft void
 | |
| .Fn auth_destroy "AUTH *auth"
 | |
| .Ft AUTH *
 | |
| .Fn authnone_create "void"
 | |
| .Ft AUTH *
 | |
| .Fn authunix_create "char *host" "int uid" "int gid" "int len" "int *aup_gids"
 | |
| .Ft AUTH *
 | |
| .Fn authunix_create_default "void"
 | |
| .Ft int
 | |
| .Fn callrpc "char *host" "u_long prognum" "u_long versnum" \
 | |
| "u_long procnum" "xdrproc_t inproc" "char *in" "xdrproc_t outproc" "char *out"
 | |
| .Ft enum clnt_stat
 | |
| .Fn clnt_broadcast "u_long prognum" "u_long versnum" "u_long procnum" \
 | |
| "xdrproc_t inproc" "char *in" "xdrproc_t outproc" "char *out" \
 | |
| "resultproc_t eachresult"
 | |
| .Ft enum clnt_stat
 | |
| .Fn clnt_call "CLIENT *clnt" "u_long procnum" "xdrproc_t inproc" \
 | |
| "char *in" "xdrproc_t outproc" "char *out" "struct timeval tout"
 | |
| .Ft int
 | |
| .Fn clnt_destroy "CLIENT *clnt"
 | |
| .Ft CLIENT *
 | |
| .Fn clnt_create "char *host" "u_long prog" "u_long vers" "char *proto"
 | |
| .Ft bool_t
 | |
| .Fn clnt_control "CLIENT *cl" "u_int req" "char *info"
 | |
| .Ft int
 | |
| .Fn clnt_freeres "CLIENT *clnt" "xdrproc_t outproc" "char *out"
 | |
| .Ft void
 | |
| .Fn clnt_geterr "CLIENT *clnt" "struct rpc_err errp"
 | |
| .Ft void
 | |
| .Fn clnt_pcreateerror "char *s"
 | |
| .Ft void
 | |
| .Fn clnt_perrno "enum clnt_stat stat"
 | |
| .Ft int
 | |
| .Fn clnt_perror "CLIENT *clnt" "char *s"
 | |
| .Ft char *
 | |
| .Fn clnt_spcreateerror "const char *s"
 | |
| .Ft char *
 | |
| .Fn clnt_sperrno "enum clnt_stat stat"
 | |
| .Ft char *
 | |
| .Fn clnt_sperror "CLIENT *rpch" "char *s"
 | |
| .Ft CLIENT *
 | |
| .Fn clntraw_create "u_long prognum" "u_long versnum"
 | |
| .Ft CLIENT *
 | |
| .Fn clnttcp_create "struct sockaddr_in *addr" "u_long prognum" \
 | |
| "u_long versnum" "int *sockp" "u_int sendsz" "u_int recvsz"
 | |
| .Ft CLIENT *
 | |
| .Fn clntudp_create "struct sockaddr_in *addr" "u_long prognum" \
 | |
| "u_long versnum" "struct timeval wait" "int *sockp"
 | |
| .Ft CLIENT *
 | |
| .Fn clntudp_bufcreate "struct sockaddr_in *addr" "u_long prognum" \
 | |
| "u_long versnum" "struct timeval wait" "int *sockp" \
 | |
| "unsigned int sendsize" "unsigned int recosize"
 | |
| .Ft int
 | |
| .Fn get_myaddress "struct sockaddr_in *addr"
 | |
| .Ft struct pmaplist *
 | |
| .Fn pmap_getmaps "struct sockaddr_in *addr"
 | |
| .Ft u_short
 | |
| .Fn pmap_getport "struct sockaddr_in *addr" "u_long prognum" \
 | |
| "u_long versnum" "u_long protocol"
 | |
| .Ft enum clnt_stat
 | |
| .Fo pmap_rmtcall
 | |
| .Fa "struct sockaddr_in *addr"
 | |
| .Fa "u_long prognum"
 | |
| .Fa "u_long versnum"
 | |
| .Fa "u_long procnum"
 | |
| .Fa "xdrproc_t inproc"
 | |
| .Fa "char *in"
 | |
| .Fa "xdrpoc_t outproc"
 | |
| .Fa "char *out"
 | |
| .Fa "struct timeval tout"
 | |
| .Fa "u_long *portp"
 | |
| .Fc
 | |
| .Ft int
 | |
| .Fn pmap_set "u_long prognum" "u_long versnum" "int protocol" \
 | |
| "int port"
 | |
| .Ft int
 | |
| .Fn pmap_unset "u_long prognum" "u_long versnum"
 | |
| .Ft int
 | |
| .Fn registerrpc "u_long prognum" "u_long versnum" "u_long procnum" \
 | |
| "char *(*procname)()" "xdrproc_t inproc" "xdrproc_t outproc"
 | |
| .Fd struct rpc_createerr rpc_createerr;
 | |
| .Ft int
 | |
| .Fn svc_destroy "SVCXPRT *xprt"
 | |
| .Fd fd_set svc_fdset;
 | |
| .Fd int svc_fds;
 | |
| .Ft int
 | |
| .Fn svc_freeargs "SVCXPRT *xprt" "xdrproc_t inproc" "char *in"
 | |
| .Ft int
 | |
| .Fn svc_getargs "SVCXPRT *xprt" "xdrproc_t inproc" "char *in"
 | |
| .Ft struct sockaddr_in *
 | |
| .Fn svc_getcaller "SVCXPRT *xprt"
 | |
| .Ft int
 | |
| .Fn svc_getreqset "fd_set *rdfds"
 | |
| .Ft int
 | |
| .Fn svc_getreq "int rdfds"
 | |
| .Ft struct netbuf *
 | |
| .Fn svc_getrpccaller "SVCXPRT *xprt"
 | |
| .Ft int
 | |
| .Fn svc_register "SVCXPRT *xprt" "u_long prognum" "u_long versnum" \
 | |
| "void (*dispatch)()" "u_long protocol"
 | |
| .Ft int
 | |
| .Fn svc_run "void"
 | |
| .Ft int
 | |
| .Fn svc_sendreply "SVCXPRT *xprt" "xdrproc_t outproc" "char *out"
 | |
| .Ft void
 | |
| .Fn svc_unregister "u_long prognum" "u_long versnum"
 | |
| .Ft void
 | |
| .Fn svcerr_auth "SVCXPRT *xprt" "enum auth_stat why"
 | |
| .Ft void
 | |
| .Fn svcerr_decode "SVCXPRT *xprt"
 | |
| .Ft void
 | |
| .Fn svcerr_noproc "SVCXPRT *xprt"
 | |
| .Ft void
 | |
| .Fn svcerr_noprog "SVCXPRT *xprt"
 | |
| .Ft void
 | |
| .Fn svcerr_progvers "SVCXPRT *xprt"
 | |
| .Ft void
 | |
| .Fn svcerr_systemerr "SVCXPRT *xprt"
 | |
| .Ft void
 | |
| .Fn svcerr_weakauth "SVCXPRT *xprt"
 | |
| .Ft SVCXPRT *
 | |
| .Fn svcraw_create "void"
 | |
| .Ft SVCXPRT *
 | |
| .Fn svctcp_create "int sock" "u_int send_buf_size" \
 | |
| "u_int recv_buf_size"
 | |
| .Ft SVCXPRT *
 | |
| .Fn svcfd_create "int fd" "u_int sendsize" "u_int recvsize"
 | |
| .Ft SVCXPRT *
 | |
| .Fn svcudp_bufcreate "int sock" "u_int sendsize" "u_int recosize"
 | |
| .Ft SVCXPRT *
 | |
| .Fn svcudp_create "int sock"
 | |
| .Ft int
 | |
| .Fn xdr_accepted_reply "XDR *xdrs" "struct accepted_reply *ar"
 | |
| .Ft int
 | |
| .Fn xdr_authunix_parms "XDR *xdrs" "struct authunix_parms *aupp"
 | |
| .Ft void
 | |
| .Fn xdr_callhdr "XDR *xdrs" "struct rpc_msg *chdr"
 | |
| .Ft int
 | |
| .Fn xdr_callmsg "XDR *xdrs" "struct rpc_msg *cmsg"
 | |
| .Ft int
 | |
| .Fn xdr_opaque_auth "XDR *xdrs" "struct opaque_auth *ap"
 | |
| .Ft int
 | |
| .Fn xdr_pmap "XDR *xdrs" "struct pmap *regs"
 | |
| .Ft int
 | |
| .Fn xdr_pmaplist "XDR *xdrs" "struct pmaplist **rp"
 | |
| .Ft int
 | |
| .Fn xdr_rejected_reply "XDR *xdrs" "struct rejected_reply *rr"
 | |
| .Ft int
 | |
| .Fn xdr_replymsg "XDR *xdrs" "struct rpc_msg *rmsg"
 | |
| .Ft void
 | |
| .Fn xprt_register "SVCXPRT *xprt"
 | |
| .Ft void
 | |
| .Fn xprt_unregister "SVCXPRT *xprt"
 | |
| .Sh DESCRIPTION
 | |
| .Em "The svc and clnt functions described in this page are the old, TS-RPC"
 | |
| .Em "interface to the XDR and RPC library, and exist for backward compatibility."
 | |
| .Em "The new interface is described in the pages referenced from"
 | |
| .Xr rpc 3 .
 | |
| .Pp
 | |
| These routines allow C programs to make procedure
 | |
| calls on other machines across the network.
 | |
| First, the client calls a procedure to send a
 | |
| data packet to the server.
 | |
| Upon receipt of the packet, the server calls a dispatch routine
 | |
| to perform the requested service, and then sends back a
 | |
| reply.
 | |
| Finally, the procedure call returns to the client.
 | |
| .\" XXX: NOTYET
 | |
| .\".Pp
 | |
| .\"Routines that are used for Secure RPC (DES authentication) are described in
 | |
| .\".Xr rpc_secure 3 .
 | |
| .\"Secure RPC can be used only if DES encryption is available.
 | |
| .Pp
 | |
| .Bl -tag -width xxx
 | |
| .It Fn auth_destroy
 | |
| A macro that destroys the authentication information associated with
 | |
| .Fa auth .
 | |
| Destruction usually involves deallocation of private data structures.
 | |
| The use of
 | |
| .Fa auth
 | |
| is undefined after calling
 | |
| .Fn auth_destroy .
 | |
| .It Fn authnone_create
 | |
| Create and returns an RPC authentication handle that passes nonusable
 | |
| authentication information with each remote procedure call.
 | |
| This is the default authentication used by RPC.
 | |
| .It Fn authunix_create
 | |
| Create and return an RPC authentication handle that contains
 | |
| .\" XXX: .UX ?
 | |
| authentication information.
 | |
| The parameter
 | |
| .Fa host
 | |
| is the name of the machine on which the information was
 | |
| created;
 | |
| .Fa uid
 | |
| is the user's user ID;
 | |
| .Fa gid
 | |
| is the user's current group id;
 | |
| .Fa len
 | |
| and
 | |
| .Fa aup_gids
 | |
| refer to a counted array of groups to which the user belongs.
 | |
| It is easy to impersonate a user.
 | |
| .It Fn authunix_create_default
 | |
| Calls
 | |
| .Fn authunix_create
 | |
| with the appropriate parameters.
 | |
| .It Fn callrpc
 | |
| Call the remote procedure associated with
 | |
| .Fa prognum ,
 | |
| .Fa versnum ,
 | |
| and
 | |
| .Fa procnum
 | |
| on the machine,
 | |
| .Fa host .
 | |
| The parameter
 | |
| .Fa in
 | |
| is the address of the procedure's argument(s), and
 | |
| .Fa out
 | |
| is the address of where to place the result(s);
 | |
| .Fa inproc
 | |
| is used to encode the procedure's parameters, and
 | |
| .Fa outproc
 | |
| is used to decode the procedure's results.
 | |
| This routine returns zero if it succeeds, or the value of
 | |
| .Va "enum clnt_stat"
 | |
| cast to an integer if it fails.
 | |
| The routine
 | |
| .Fn clnt_perrno
 | |
| is handy for translating failure statuses into messages.
 | |
| .Pp
 | |
| Warning: calling remote procedures with this routine
 | |
| uses UDP/IP as a transport; see
 | |
| .Fn clntudp_create
 | |
| for restrictions.
 | |
| You do not have control of timeouts or authentication using
 | |
| this routine.
 | |
| .It Fn clnt_broadcast
 | |
| Like
 | |
| .Fn callrpc ,
 | |
| except the call message is broadcast to all locally
 | |
| connected broadcast nets.
 | |
| Each time it receives a response, this routine calls
 | |
| .Fn eachresult ,
 | |
| whose form is
 | |
| .Ft int
 | |
| .Fn eachresult "char *out" "struct sockaddr_in *addr"
 | |
| where
 | |
| .Fa out
 | |
| is the same as
 | |
| .Fa out
 | |
| passed to
 | |
| .Fn clnt_broadcast ,
 | |
| except that the remote procedure's output is decoded there;
 | |
| .Fa addr
 | |
| points to the address of the machine that sent the results.
 | |
| If
 | |
| .Fn eachresult
 | |
| returns zero,
 | |
| .Fn clnt_broadcast
 | |
| waits for more replies; otherwise it returns with appropriate
 | |
| status.
 | |
| .Pp
 | |
| Warning: broadcast sockets are limited in size to the
 | |
| maximum transfer unit of the data link.
 | |
| For ethernet, this value is 1500 bytes.
 | |
| .It Fn clnt_call
 | |
| A macro that calls the remote procedure
 | |
| .Fa procnum
 | |
| associated with the client handle,
 | |
| .Fa clnt ,
 | |
| which is obtained with an RPC client creation routine such as
 | |
| .Fn clnt_create .
 | |
| The parameter
 | |
| .Fa in
 | |
| is the address of the procedure's argument(s), and
 | |
| .Fa out
 | |
| is the address of where to place the result(s);
 | |
| .Fa inproc
 | |
| is used to encode the procedure's parameters, and
 | |
| .Fa outproc
 | |
| is used to decode the procedure's results;
 | |
| .Fa tout
 | |
| is the time allowed for results to come back.
 | |
| .It Fn clnt_destroy
 | |
| A macro that destroys the client's RPC handle.
 | |
| Destruction usually involves deallocation
 | |
| of private data structures, including
 | |
| .Fa clnt
 | |
| itself.
 | |
| Use of
 | |
| .Fa clnt
 | |
| is undefined after calling
 | |
| .Fn clnt_destroy .
 | |
| If the RPC library opened the associated socket, it will close it
 | |
| also.
 | |
| Otherwise, the socket remains open.
 | |
| .It Fn clnt_create
 | |
| Generic client creation routine.
 | |
| .Fa host
 | |
| identifies the name of the remote host where the server
 | |
| is located.
 | |
| .Fa proto
 | |
| indicates which kind of transport protocol to use.
 | |
| The currently supported values for this field are
 | |
| .Dq udp
 | |
| and
 | |
| .Dq tcp .
 | |
| Default timeouts are set, but can be modified using
 | |
| .Fn clnt_control .
 | |
| .Pp
 | |
| .Em Warning :
 | |
| Using UDP has its shortcomings.
 | |
| Since UDP-based RPC messages can only hold up to 8 Kbytes of encoded
 | |
| data, this transport cannot be used for procedures that take
 | |
| large arguments or return huge results.
 | |
| .It Fn clnt_control
 | |
| A macro used to change or retrieve various information
 | |
| about a client object.
 | |
| .Fa req
 | |
| indicates the type of operation, and
 | |
| .Fa info
 | |
| is a pointer to the information.
 | |
| For both UDP and TCP the supported values of
 | |
| .Fa req
 | |
| and their argument types and what they do are:
 | |
| .Bl -tag -width CLSET_RETRY_TIMEOUTX
 | |
| .It CLSET_TIMEOUT
 | |
| .Vt struct timeval ;
 | |
| set total timeout.
 | |
| .It CLGET_TIMEOUT
 | |
| .Vt struct timeval ;
 | |
| get total timeout.
 | |
| .Pp
 | |
| Note: if you set the timeout using
 | |
| .Fn clnt_control ,
 | |
| the timeout parameter passed to
 | |
| .Fn clnt_call
 | |
| will be ignored in all future calls.
 | |
| .It CLGET_SERVER_ADDR
 | |
| .Vt struct sockaddr_in ;
 | |
| get server's address.
 | |
| .El
 | |
| .Pp
 | |
| The following operations are valid for UDP only:
 | |
| .Bl -tag -width CLSET_RETRY_TIMEOUT
 | |
| .It CLSET_RETRY_TIMEOUT
 | |
| .Vt struct timeval ;
 | |
| set the retry timeout.
 | |
| .It CLGET_RETRY_TIMEOUT
 | |
| .Vt struct timeval ;
 | |
| get the retry timeout.
 | |
| .Pp
 | |
| The retry timeout is the time that UDP RPC waits for the server to
 | |
| reply before retransmitting the request.
 | |
| .El
 | |
| .It Fn clnt_freeres
 | |
| A macro that frees any data allocated by the RPC/XDR system when it
 | |
| decoded the results of an RPC call.
 | |
| The parameter
 | |
| .Fa out
 | |
| is the address of the results, and
 | |
| .Fa outproc
 | |
| is the XDR routine describing the results.
 | |
| This routine returns one if the results were successfully freed,
 | |
| and zero otherwise.
 | |
| .It Fn clnt_geterr
 | |
| A macro that copies the error structure out of the client
 | |
| handle to the structure at address
 | |
| .Fa errp .
 | |
| .It Fn clnt_pcreateerror
 | |
| Print a message to standard error indicating why a client RPC handle
 | |
| could not be created.
 | |
| The message is prepended with string
 | |
| .Fa s
 | |
| and a colon.
 | |
| A newline character is appended at the end of the message.
 | |
| Used when a
 | |
| .Fn clnt_create ,
 | |
| .Fn clntraw_create ,
 | |
| .Fn clnttcp_create ,
 | |
| or
 | |
| .Fn clntudp_create
 | |
| call fails.
 | |
| .It Fn clnt_perrno
 | |
| Print a message to standard error corresponding
 | |
| to the condition indicated by
 | |
| .Fa stat .
 | |
| A newline character is appended at the end of the message.
 | |
| Used after
 | |
| .Fn callrpc .
 | |
| .It Fn clnt_perror
 | |
| Print a message to standard error indicating why an RPC call failed;
 | |
| .Fa clnt
 | |
| is the handle used to do the call.
 | |
| The message is prepended with string
 | |
| .Fa s
 | |
| and a colon.
 | |
| A newline character is appended at the end of the message.
 | |
| Used after
 | |
| .Fn clnt_call .
 | |
| .It Fn clnt_spcreateerror
 | |
| Like
 | |
| .Fn clnt_pcreateerror ,
 | |
| except that it returns a string
 | |
| instead of printing to the standard error.
 | |
| .Pp
 | |
| Bugs: returns pointer to static data that is overwritten
 | |
| on each call.
 | |
| .It Fn clnt_sperrno
 | |
| Take the same arguments as
 | |
| .Fn clnt_perrno ,
 | |
| but instead of sending a message to the standard error
 | |
| indicating why an RPC call failed, return a pointer to a string which
 | |
| contains the message.
 | |
| .Pp
 | |
| .Fn clnt_sperrno
 | |
| is used instead of
 | |
| .Fn clnt_perrno
 | |
| if the program does not have a standard error (as a program
 | |
| running as a server quite likely does not), or if the
 | |
| programmer does not want the message to be output with
 | |
| .Xr printf 3 ,
 | |
| or if a message format different than that supported by
 | |
| .Fn clnt_perrno
 | |
| is to be used.
 | |
| Note: unlike
 | |
| .Fn clnt_sperror
 | |
| and
 | |
| .Fn clnt_spcreateerror ,
 | |
| .Fn clnt_sperrno
 | |
| returns a pointer to static data, but the
 | |
| result will not get overwritten on each call.
 | |
| .It Fn clnt_sperror
 | |
| Like
 | |
| .Fn clnt_perror ,
 | |
| except that (like
 | |
| .Fn clnt_sperrno )
 | |
| it returns a string instead of printing to standard error.
 | |
| .Pp
 | |
| Bugs: returns pointer to static data that is overwritten
 | |
| on each call.
 | |
| .It Fn clntraw_create
 | |
| This routine creates a toy RPC client for the remote program
 | |
| .Fa prognum ,
 | |
| version
 | |
| .Fa versnum .
 | |
| The transport used to pass messages to the service is
 | |
| actually a buffer within the process's address space, so the
 | |
| corresponding RPC server should live in the same address space; see
 | |
| .Fn svcraw_create .
 | |
| This allows simulation of RPC and acquisition of RPC overheads, such
 | |
| as round trip times, without any kernel interference.
 | |
| This routine returns
 | |
| .Dv NULL
 | |
| if it fails.
 | |
| .It Fn clnttcp_create
 | |
| This routine creates an RPC client for the remote program
 | |
| .Fa prognum ,
 | |
| version
 | |
| .Fa versnum ;
 | |
| the client uses TCP/IP as a transport.
 | |
| The remote program is located at Internet address
 | |
| .Fa *addr .
 | |
| If
 | |
| .Fa addr-\*[Gt]sin_port
 | |
| is zero, then it is set to the actual port that the remote
 | |
| program is listening on (the remote
 | |
| .Xr rpcbind 8
 | |
| or
 | |
| .Cm portmap
 | |
| service is consulted for this information).
 | |
| The parameter
 | |
| .Fa sockp
 | |
| is a socket; if it is
 | |
| .Dv RPC_ANYSOCK ,
 | |
| then this routine opens a new one and sets
 | |
| .Fa sockp .
 | |
| Since TCP-based RPC uses buffered I/O ,
 | |
| the user may specify the size of the send and receive buffers
 | |
| with the parameters
 | |
| .Fa sendsz
 | |
| and
 | |
| .Fa recvsz ;
 | |
| values of zero choose suitable defaults.
 | |
| This routine returns
 | |
| .Dv NULL
 | |
| if it fails.
 | |
| .It Fn clntudp_create
 | |
| This routine creates an RPC client for the remote program
 | |
| .Fa prognum ,
 | |
| version
 | |
| .Fa versnum ;
 | |
| the client uses UDP/IP as a transport.
 | |
| The remote program is located at Internet address
 | |
| .Fa addr .
 | |
| If
 | |
| .Fa addr-\*[Gt]sin_port
 | |
| is zero, then it is set to actual port that the remote
 | |
| program is listening on (the remote
 | |
| .Xr rpcbind 8
 | |
| or
 | |
| .Cm portmap
 | |
| service is consulted for this information).
 | |
| The parameter
 | |
| .Fa sockp
 | |
| is a socket; if it is
 | |
| .Dv RPC_ANYSOCK ,
 | |
| then this routine opens a new one and sets
 | |
| .Fa sockp .
 | |
| The UDP transport resends the call message in intervals of
 | |
| .Fa wait
 | |
| time until a response is received or until the call times out.
 | |
| The total time for the call to time out is specified by
 | |
| .Fa clnt_call .
 | |
| .Pp
 | |
| Warning: since UDP-based RPC messages can only hold up to 8 Kbytes
 | |
| of encoded data, this transport cannot be used for procedures
 | |
| that take large arguments or return huge results.
 | |
| .It Fn clntudp_bufcreate
 | |
| This routine creates an RPC client for the remote program
 | |
| .Fa prognum ,
 | |
| on
 | |
| .Fa versnum ;
 | |
| the client uses UDP/IP as a transport.
 | |
| The remote program is located at Internet address
 | |
| .Fa addr .
 | |
| If
 | |
| .Fa addr-\*[Gt]sin_port
 | |
| is zero, then it is set to actual port that the remote
 | |
| program is listening on (the remote
 | |
| .Xr rpcbind 8
 | |
| or
 | |
| .Cm portmap
 | |
| service is consulted for this information).
 | |
| The parameter
 | |
| .Fa sockp
 | |
| is a socket; if it is
 | |
| .Dv RPC_ANYSOCK ,
 | |
| then this routine opens a new one and sets
 | |
| .Fa sockp .
 | |
| The UDP transport resends the call message in intervals of
 | |
| .Fa wait
 | |
| time until a response is received or until the call times out.
 | |
| The total time for the call to time out is specified by
 | |
| .Fa clnt_call .
 | |
| .Pp
 | |
| This allows the user to specify the maximum packet size for sending and
 | |
| receiving UDP-based RPC messages.
 | |
| .It Fn get_myaddress
 | |
| Stuff the machine's IP address into
 | |
| .Fa *addr ,
 | |
| without consulting the library routines that deal with
 | |
| .Pa /etc/hosts .
 | |
| The port number is always set to
 | |
| .Fn htons "PMAPPORT" .
 | |
| Returns zero on success, non-zero on failure.
 | |
| .It Fn pmap_getmaps
 | |
| A user interface to the
 | |
| .Xr rpcbind 8
 | |
| service, which returns a list of the current RPC program-to-port
 | |
| mappings on the host located at IP address
 | |
| .Fa *addr .
 | |
| This routine can return
 | |
| .Dv NULL .
 | |
| The command
 | |
| .Dl Cm rpcinfo Fl p
 | |
| uses this routine.
 | |
| .It Fn pmap_getport
 | |
| A user interface to the
 | |
| .Xr rpcbind 8
 | |
| service, which returns the port number
 | |
| on which waits a service that supports program number
 | |
| .Fa prognum ,
 | |
| version
 | |
| .Fa versnum ,
 | |
| and speaks the transport protocol associated with
 | |
| .Fa protocol .
 | |
| The value of
 | |
| .Fa protocol
 | |
| is most likely
 | |
| .Dv IPPROTO_UDP
 | |
| or
 | |
| .Dv IPPROTO_TCP .
 | |
| A return value of zero means that the mapping does not exist
 | |
| or that the RPC system failured to contact the remote
 | |
| .Xr rpcbind 8
 | |
| service.
 | |
| In the latter case, the global variable
 | |
| .Fn rpc_createerr
 | |
| contains the RPC status.
 | |
| .It Fn pmap_rmtcall
 | |
| A user interface to the
 | |
| .Xr rpcbind 8
 | |
| service, which instructs
 | |
| .Xr rpcbind 8
 | |
| on the host at IP address
 | |
| .Fa *addr
 | |
| to make an RPC call on your behalf to a procedure on that host.
 | |
| The parameter
 | |
| .Fa *portp
 | |
| will be modified to the program's port number if the
 | |
| procedure succeeds.
 | |
| The definitions of other parameters are discussed in
 | |
| .Fn callrpc
 | |
| and
 | |
| .Fn clnt_call .
 | |
| This procedure should be used for a
 | |
| .Dq ping
 | |
| and nothing else.
 | |
| See also
 | |
| .Fn clnt_broadcast .
 | |
| .It Fn pmap_set
 | |
| A user interface to the
 | |
| .Xr rpcbind 8
 | |
| service, which establishes a mapping between the triple
 | |
| .Fa [ prognum ,
 | |
| .Fa versnum ,
 | |
| .Fa protocol ]
 | |
| and
 | |
| .Fa port
 | |
| on the machine's
 | |
| .Xr rpcbind 8
 | |
| service.
 | |
| The value of
 | |
| .Fa protocol
 | |
| is most likely
 | |
| .Dv IPPROTO_UDP
 | |
| or
 | |
| .Dv IPPROTO_TCP .
 | |
| This routine returns one if it succeeds, zero otherwise.
 | |
| Automatically done by
 | |
| .Fn svc_register .
 | |
| .It Fn pmap_unset
 | |
| A user interface to the
 | |
| .Xr rpcbind 8
 | |
| service, which destroys all mapping between the triple
 | |
| .Fa [ prognum ,
 | |
| .Fa versnum ,
 | |
| .Fa * ]
 | |
| and
 | |
| .Fa ports
 | |
| on the machine's
 | |
| .Xr rpcbind 8
 | |
| service.
 | |
| This routine returns one if it succeeds, zero otherwise.
 | |
| .It Fn registerrpc
 | |
| Register procedure
 | |
| .Fa procname
 | |
| with the RPC service package.
 | |
| If a request arrives for program
 | |
| .Fa prognum ,
 | |
| version
 | |
| .Fa versnum ,
 | |
| and procedure
 | |
| .Fa procnum ,
 | |
| .Fa procname
 | |
| is called with a pointer to its parameter(s);
 | |
| .Fa progname
 | |
| should return a pointer to its static result(s);
 | |
| .Fa inproc
 | |
| is used to decode the parameters while
 | |
| .Fa outproc
 | |
| is used to encode the results.
 | |
| This routine returns zero if the registration succeeded, \-1
 | |
| otherwise.
 | |
| .Pp
 | |
| Warning: remote procedures registered in this form
 | |
| are accessed using the UDP/IP transport; see
 | |
| .Fn svcudp_bufcreate
 | |
| for restrictions.
 | |
| .It struct rpc_createerr rpc_createerr ;
 | |
| A global variable whose value is set by any RPC
 | |
| client creation routine that does not succeed.
 | |
| Use the routine
 | |
| .Fn clnt_pcreateerror
 | |
| to print the reason why.
 | |
| .It Fn svc_destroy
 | |
| A macro that destroys the RPC service transport handle,
 | |
| .Fa xprt .
 | |
| Destruction usually involves deallocation
 | |
| of private data structures, including
 | |
| .Fa xprt
 | |
| itself.
 | |
| Use of
 | |
| .Fa xprt
 | |
| is undefined after calling this routine.
 | |
| .It fd_set svc_fdset ;
 | |
| A global variable reflecting the RPC service side's read file
 | |
| descriptor bit mask; it is suitable as a parameter to the
 | |
| .Xr select 2
 | |
| system call.
 | |
| This is only of interest if a service implementor does not call
 | |
| .Fn svc_run ,
 | |
| but rather does his own asynchronous event processing.
 | |
| This variable is read-only (do not pass its address to
 | |
| .Xr select 2 ! ) ,
 | |
| yet it may change after calls to
 | |
| .Fn svc_getreqset
 | |
| or any creation routines.
 | |
| .It int svc_fds;
 | |
| Similar to
 | |
| .Fn svc_fedset ,
 | |
| but limited to 32 descriptors.
 | |
| This interface is obsoleted by
 | |
| .Fn svc_fdset .
 | |
| .It Fn svc_freeargs
 | |
| A macro that frees any data allocated by the RPC/XDR
 | |
| system when it decoded the arguments to a service procedure using
 | |
| .Fn svc_getargs .
 | |
| This routine returns 1 if the results were successfully freed,
 | |
| and zero otherwise.
 | |
| .It Fn svc_getargs
 | |
| A macro that decodes the arguments of an RPC request associated with
 | |
| the RPC service transport handle,
 | |
| .Fa xprt .
 | |
| The parameter
 | |
| .Fa in
 | |
| is the address where the arguments will be placed;
 | |
| .Fa inproc
 | |
| is the XDR routine used to decode the arguments.
 | |
| This routine returns one if decoding succeeds, and zero otherwise.
 | |
| .It Fn svc_getcaller
 | |
| The obsolete way of getting the network address of the caller
 | |
| of a procedure associated with the RPC service transport handle,
 | |
| .Fa xprt ,
 | |
| use
 | |
| .Fn svc_getrpccaller .
 | |
| .It Fn svc_getreqset
 | |
| This routine is only of interest if a service implementor
 | |
| does not call
 | |
| .Fn svc_run ,
 | |
| but instead implements custom asynchronous event processing.
 | |
| It is called when the
 | |
| .Xr select 2
 | |
| system call has determined that an RPC request has arrived on some
 | |
| RPC socket(s) ;
 | |
| .Fa rdfds
 | |
| is the resultant read file descriptor bit mask.
 | |
| The routine returns when all sockets associated with the
 | |
| value of
 | |
| .Fa rdfds
 | |
| have been serviced.
 | |
| .It Fn svc_getreq
 | |
| Similar to
 | |
| .Fn svc_getreqset ,
 | |
| but limited to 32 descriptors.
 | |
| This interface is obsoleted by
 | |
| .Fn svc_getreqset .
 | |
| .It Fn svc_getrpccaller
 | |
| The approved way of getting the network address of the caller
 | |
| of a procedure associated with the RPC service transport handle,
 | |
| .Fa xprt .
 | |
| .It Fn svc_register
 | |
| Associates
 | |
| .Fa prognum
 | |
| and
 | |
| .Fa versnum
 | |
| with the service dispatch procedure,
 | |
| .Fa dispatch .
 | |
| If
 | |
| .Fa protocol
 | |
| is zero, the service is not registered with the
 | |
| .Xr rpcbind 8
 | |
| service.
 | |
| If
 | |
| .Fa protocol
 | |
| is non-zero, then a mapping of the triple
 | |
| .Fa [ prognum ,
 | |
| .Fa versnum ,
 | |
| .Fa protocol ]
 | |
| to
 | |
| .Fa xprt-\*[Gt]xp_port
 | |
| is established with the local
 | |
| .Xr rpcbind 8
 | |
| service (generally
 | |
| .Fa protocol
 | |
| is zero,
 | |
| .Dv IPPROTO_UDP
 | |
| or
 | |
| .Dv IPPROTO_TCP ) .
 | |
| The procedure
 | |
| .Fa dispatch
 | |
| has the following form:
 | |
| .Ft int
 | |
| .Fn dispatch "struct svc_req *request" "SVCXPRT *xprt" .
 | |
| .Pp
 | |
| The
 | |
| .Fn svc_register
 | |
| routine returns one if it succeeds, and zero otherwise.
 | |
| .It Fn svc_run
 | |
| This routine never returns.
 | |
| It waits for RPC requests to arrive, and calls the appropriate service
 | |
| procedure using
 | |
| .Fn svc_getreq
 | |
| when one arrives.
 | |
| This procedure is usually waiting for a
 | |
| .Xr select 2
 | |
| system call to return.
 | |
| .It Fn svc_sendreply
 | |
| Called by an RPC service's dispatch routine to send the results of a
 | |
| remote procedure call.
 | |
| The parameter
 | |
| .Fa xprt
 | |
| is the request's associated transport handle;
 | |
| .Fa outproc
 | |
| is the XDR routine which is used to encode the results; and
 | |
| .Fa out
 | |
| is the address of the results.
 | |
| This routine returns one if it succeeds, zero otherwise.
 | |
| .It Fn svc_unregister
 | |
| Remove all mapping of the double
 | |
| .Fa [ prognum ,
 | |
| .Fa versnum ]
 | |
| to dispatch routines, and of the triple
 | |
| .Fa [ prognum ,
 | |
| .Fa versnum ,
 | |
| .Fa * ]
 | |
| to port number.
 | |
| .It Fn svcerr_auth
 | |
| Called by a service dispatch routine that refuses to perform
 | |
| a remote procedure call due to an authentication error.
 | |
| .It Fn svcerr_decode
 | |
| Called by a service dispatch routine that cannot successfully
 | |
| decode its parameters.
 | |
| See also
 | |
| .Fn svc_getargs .
 | |
| .It Fn svcerr_noproc
 | |
| Called by a service dispatch routine that does not implement
 | |
| the procedure number that the caller requests.
 | |
| .It Fn svcerr_noprog
 | |
| Called when the desired program is not registered with the RPC
 | |
| package.
 | |
| Service implementors usually do not need this routine.
 | |
| .It Fn svcerr_progvers
 | |
| Called when the desired version of a program is not registered
 | |
| with the RPC package.
 | |
| Service implementors usually do not need this routine.
 | |
| .It Fn svcerr_systemerr
 | |
| Called by a service dispatch routine when it detects a system error
 | |
| not covered by any particular protocol.
 | |
| For example, if a service can no longer allocate storage,
 | |
| it may call this routine.
 | |
| .It Fn svcerr_weakauth
 | |
| Called by a service dispatch routine that refuses to perform
 | |
| a remote procedure call due to insufficient
 | |
| authentication parameters.
 | |
| The routine calls
 | |
| .Fn svcerr_auth "xprt" "AUTH_TOOWEAK" .
 | |
| .It Fn svcraw_create
 | |
| This routine creates a toy RPC service transport, to which it returns
 | |
| a pointer.
 | |
| The transport is really a buffer within the process's address space,
 | |
| so the corresponding RPC client should live in the same address space;
 | |
| see
 | |
| .Fn clntraw_create .
 | |
| This routine allows simulation of RPC and acquisition of RPC overheads
 | |
| (such as round trip times), without any kernel interference.
 | |
| This routine returns
 | |
| .Dv NULL
 | |
| if it fails.
 | |
| .It Fn svctcp_create
 | |
| This routine creates a TCP/IP-based RPC service transport, to which it
 | |
| returns a pointer.
 | |
| The transport is associated with the socket
 | |
| .Fa sock ,
 | |
| which may be
 | |
| .Dv RPC_ANYSOCK ,
 | |
| in which case a new socket is created.
 | |
| If the socket is not bound to a local TCP
 | |
| port, then this routine binds it to an arbitrary port.
 | |
| Upon completion,
 | |
| .Fa xprt-\*[Gt]xp_sock
 | |
| is the transport's socket descriptor, and
 | |
| .Fa xprt-\*[Gt]xp_port
 | |
| is the transport's port number.
 | |
| This routine returns
 | |
| .Dv NULL
 | |
| if it fails.
 | |
| Since TCP-based RPC uses buffered I/O ,
 | |
| users may specify the size of buffers; values of zero
 | |
| choose suitable defaults.
 | |
| .It Fn svcfd_create
 | |
| Create a service on top of any open descriptor.
 | |
| Typically, this descriptor is a connected socket
 | |
| for a stream protocol such as TCP.
 | |
| .Fa sendsize
 | |
| and
 | |
| .Fa recvsize
 | |
| indicate sizes for the send and receive buffers.
 | |
| If they are zero, a reasonable default is chosen.
 | |
| .It Fn svcudp_bufcreate
 | |
| This routine creates a UDP/IP-based RPC
 | |
| service transport, to which it returns a pointer.
 | |
| The transport is associated with the socket
 | |
| .Fa sock ,
 | |
| which may be
 | |
| .Dv RPC_ANYSOCK ,
 | |
| in which case a new socket is created.
 | |
| If the socket is not bound to a local UDP
 | |
| port, then this routine binds it to an arbitrary port.
 | |
| Upon completion,
 | |
| .Fa xprt-\*[Gt]xp_sock
 | |
| is the transport's socket descriptor, and
 | |
| .Fa xprt-\*[Gt]xp_port
 | |
| is the transport's port number.
 | |
| This routine returns
 | |
| .Dv NULL
 | |
| if it fails.
 | |
| .Pp
 | |
| This allows the user to specify the maximum packet size for sending and
 | |
| receiving UDP-based RPC messages.
 | |
| .It Fn svcudp_create
 | |
| This acts as
 | |
| .Fn svcudp_bufcreate with
 | |
| predefined sizes for the maximum packet sizes.
 | |
| .It Fn xdr_accepted_reply
 | |
| Used for encoding RPC reply messages.
 | |
| This routine is useful for users who wish to generate RPC-style
 | |
| messages without using the RPC package.
 | |
| .It Fn xdr_authunix_parms
 | |
| Used for describing UNIX credentials.
 | |
| This routine is useful for users who wish to generate these
 | |
| credentials without using the RPC authentication package.
 | |
| .It Fn xdr_callhdr
 | |
| Used for describing RPC call header messages.
 | |
| This routine is useful for users who wish to generate RPC-style
 | |
| messages without using the RPC package.
 | |
| .It Fn xdr_callmsg
 | |
| Used for describing RPC call messages.
 | |
| This routine is useful for users who wish to generate RPC-style
 | |
| messages without using the RPC package.
 | |
| .It Fn xdr_opaque_auth
 | |
| Used for describing RPC authentication information messages.
 | |
| This routine is useful for users who wish to generate RPC-style
 | |
| messages without using the RPC package.
 | |
| .It Fn xdr_pmap
 | |
| Used for describing parameters to various
 | |
| .Xr rpcbind 8
 | |
| procedures, externally.
 | |
| This routine is useful for users who wish to generate
 | |
| these parameters without using the
 | |
| .Em pmap
 | |
| interface.
 | |
| .It Fn xdr_pmaplist
 | |
| Used for describing a list of port mappings, externally.
 | |
| This routine is useful for users who wish to generate
 | |
| these parameters without using the
 | |
| .Em pmap
 | |
| interface.
 | |
| .It Fn xdr_rejected_reply
 | |
| Used for describing RPC reply messages.
 | |
| This routine is useful for users who wish to generate RPC-style
 | |
| messages without using the RPC package.
 | |
| .It Fn xdr_replymsg
 | |
| Used for describing RPC reply messages.
 | |
| This routine is useful for users who wish to generate RPC-style
 | |
| messages without using the RPC package.
 | |
| .It Fn xprt_register
 | |
| After RPC service transport handles are created,
 | |
| they should register themselves with the RPC service package.
 | |
| This routine modifies the global variable
 | |
| .Va svc_fds .
 | |
| Service implementors usually do not need this routine.
 | |
| .It Fn xprt_unregister
 | |
| Before an RPC service transport handle is destroyed,
 | |
| it should unregister itself with the RPC service package.
 | |
| This routine modifies the global variable
 | |
| .Va svc_fds .
 | |
| Service implementors usually do not need this routine.
 | |
| .El
 | |
| .Sh SEE ALSO
 | |
| .\".Xr rpc_secure 3 ,
 | |
| .Xr xdr 3
 | |
| .Pp
 | |
| The following manuals:
 | |
| .Rs
 | |
| .%B Remote Procedure Calls: Protocol Specification
 | |
| .Re
 | |
| .Rs
 | |
| .%B Remote Procedure Call Programming Guide
 | |
| .Re
 | |
| .Rs
 | |
| .%B rpcgen Programming Guide
 | |
| .Re
 | |
| .Pp
 | |
| .Rs
 | |
| .%A Sun Microsystems, Inc., USC-ISI
 | |
| .%T "RPC: Remote Procedure Call Protocol Specification"
 | |
| .%J RFC
 | |
| .%V 1050
 | |
| .Re
 |