p All RPC routines require the header n rpc/rpc.h . Routines that take a .Fa netconfig structure also require that n netconfig.h be included. .Ss Nettype Some of the high-level RPC interface routines take a .Fa nettype string as one of the parameters (for example, .Fn clnt_create , .Fn svc_create , .Fn rpc_reg , .Fn rpc_call . This string defines a class of transports which can be used for a particular application.
p .Fa nettype can be one of the following: l -tag -width datagram_v t netpath Choose from the transports which have been indicated by their token names in the .Ev NETPATH environment variable. If .Ev NETPATH is unset or .Dv NULL , it defaults to .Fa visible . .Fa netpath is the default .Fa nettype . t visible Choose the transports which have the visible flag (v) set in the
a /etc/netconfig file. t circuit_v This is same as .Fa visible except that it chooses only the connection oriented transports (semantics .Fa tpi_cots or .Fa tpi_cots_ord ) from the entries in the
a /etc/netconfig file. t datagram_v This is same as .Fa visible except that it chooses only the connectionless datagram transports (semantics .Fa tpi_clts ) from the entries in the
a /etc/netconfig file. t circuit_n This is same as .Fa netpath except that it chooses only the connection oriented datagram transports (semantics .Fa tpi_cots or .Fa tpi_cots_ord ) . t datagram_n This is same as .Fa netpath except that it chooses only the connectionless datagram transports (semantics .Fa tpi_clts ) . t udp This refers to Internet UDP, both version 4 and 6. t tcp This refers to Internet TCP, both version 4 and 6. .El
p If .Fa nettype is .Dv NULL , it defaults to .Fa netpath . The transports are tried in left to right order in the .Ev NETPATH variable or in top to down order in the
a /etc/netconfig file. .Ss Derived Types The derived types used in the RPC interfaces are defined as follows: d -literal typedef uint32_t rpcprog_t; typedef uint32_t rpcvers_t; typedef uint32_t rpcproc_t; typedef uint32_t rpcprot_t; typedef uint32_t rpcport_t; typedef int32_t rpc_inline_t; .Ed .Ss Data Structures Some of the data structures used by the RPC package are shown below. .Ss The AUTH Structure d -literal /* * Authentication info. Opaque to client. */ struct opaque_auth { enum_t oa_flavor; /* flavor of auth */ caddr_t oa_base; /* address of more auth stuff */ u_int oa_length; /* not to exceed MAX_AUTH_BYTES */ }; /* * Auth handle, interface to client side authenticators. */ typedef struct { struct opaque_auth ah_cred; struct opaque_auth ah_verf; struct auth_ops { void (*ah_nextverf)(\|); int (*ah_marshal)(\|); /* nextverf & serialize */ int (*ah_validate)(\|); /* validate verifier */ int (*ah_refresh)(\|); /* refresh credentials */ void (*ah_destroy)(\|); /* destroy this structure */ } *ah_ops; caddr_t ah_private; } AUTH; .Ed .Ss The CLIENT Structure d -literal /* * Client rpc handle. * Created by individual implementations. * Client is responsible for initializing auth. */ typedef struct { AUTH *cl_auth; /* authenticator */ struct clnt_ops { enum clnt_stat (*cl_call)(); /* call remote procedure */ void (*cl_abort)(); /* abort a call */ void (*cl_geterr)(); /* get specific error code */ bool_t (*cl_freeres)(); /* frees results */ void (*cl_destroy)(); /* destroy this structure */ bool_t (*cl_control)(); /* the ioctl() of rpc */ } *cl_ops; caddr_t cl_private; /* private stuff */ char *cl_netid; /* network identifier */ char *cl_tp; /* device name */ } CLIENT; .Ed .Ss The SVCXPRT structure d -literal enum xprt_stat { XPRT_DIED, XPRT_MOREREQS, XPRT_IDLE }; /* * Server side transport handle */ typedef struct { int xp_fd; /* file descriptor for the server handle */ u_short xp_port; /* obsolete */ const struct xp_ops { bool_t (*xp_recv)(); /* receive incoming requests */ enum xprt_stat (*xp_stat)(); /* get transport status */ bool_t (*xp_getargs)(); /* get arguments */ bool_t (*xp_reply)(); /* send reply */ bool_t (*xp_freeargs)(); /* free mem allocated for args */ void (*xp_destroy)(); /* destroy this struct */ } *xp_ops; int xp_addrlen; /* length of remote addr. Obsolete */ struct sockaddr_in xp_raddr; /* Obsolete */ const struct xp_ops2 { bool_t (*xp_control)(); /* catch-all function */ } *xp_ops2; char *xp_tp; /* transport provider device name */ char *xp_netid; /* network identifier */ struct netbuf xp_ltaddr; /* local transport address */ struct netbuf xp_rtaddr; /* remote transport address */ struct opaque_auth xp_verf; /* raw response verifier */ caddr_t xp_p1; /* private: for use by svc ops */ caddr_t xp_p2; /* private: for use by svc ops */ caddr_t xp_p3; /* private: for use by svc lib */ int xp_type /* transport type */ } SVCXPRT; .Ed .Ss The svc_req structure d -literal struct svc_req { rpcprog_t rq_prog; /* service program number */ rpcvers_t rq_vers; /* service protocol version */ rpcproc_t rq_proc; /* the desired procedure */ struct opaque_auth rq_cred; /* raw creds from the wire */ caddr_t rq_clntcred; /* read only cooked cred */ SVCXPRT *rq_xprt; /* associated transport */ }; .Ed .Ss The XDR structure d -literal /* * XDR operations. * XDR_ENCODE causes the type to be encoded into the stream. * XDR_DECODE causes the type to be extracted from the stream. * XDR_FREE can be used to release the space allocated by an XDR_DECODE * request. */ enum xdr_op { XDR_ENCODE=0, XDR_DECODE=1, XDR_FREE=2 }; /* * This is the number of bytes per unit of external data. */ #define BYTES_PER_XDR_UNIT (4) #define RNDUP(x) ((((x) + BYTES_PER_XDR_UNIT - 1) / BYTES_PER_XDR_UNIT) \e * BYTES_PER_XDR_UNIT) /* * A xdrproc_t exists for each data type which is to be encoded or * decoded. The second argument to the xdrproc_t is a pointer to * an opaque pointer. The opaque pointer generally points to a * structure of the data type to be decoded. If this points to 0, * then the type routines should allocate dynamic storage of the * appropriate size and return it. */ typedef bool_t (*xdrproc_t)(XDR *, const void *); /* * The XDR handle. * Contains operation which is being applied to the stream, * an operations vector for the particular implementation */ typedef struct { enum xdr_op x_op; /* operation; fast additional param */ struct xdr_ops { bool_t (*x_getlong)(); /* get a long from underlying stream */ bool_t (*x_putlong)(); /* put a long to underlying stream */ bool_t (*x_getbytes)(); /* get bytes from underlying stream */ bool_t (*x_putbytes)(); /* put bytes to underlying stream */ u_int (*x_getpostn)(); /* returns bytes off from beginning */ bool_t (*x_setpostn)(); /* lets you reposition the stream */ long * (*x_inline)(); /* buf quick ptr to buffered data */ void (*x_destroy)(); /* free privates of this xdr_stream */ } *x_ops; caddr_t x_public; /* users' data */ caddr_t x_private; /* pointer to private data */ caddr_t x_base; /* private used for position info */ int x_handy; /* extra private word */ } XDR; /* * The netbuf structure. This structure is defined in <xti.h> on SysV * systems, but NetBSD does not use XTI. * * Usually, buf will point to a struct sockaddr, and len and maxlen * will contain the length and maximum length of that socket address, * respectively. */ struct netbuf { unsigned int maxlen; unsigned int len; void *buf; }; /* * The format of the address and options arguments of the XTI t_bind call. * Only provided for compatibility, it should not be used other than * as an argument to svc_tli_create(). */ struct t_bind { struct netbuf addr; unsigned int qlen; }; .Ed .Ss Index to Routines The following table lists RPC routines and the manual reference pages on which they are described: l -column "authunix_create_default()" "rpc_clnt_create(3)" t Em "RPC Routine" Ta Em "Manual Reference Page"
p t Fn auth_destroy Ta Xr rpc_clnt_auth 3 t Fn authdes_create Ta Xr rpc_soc 3 t Fn authnone_create Ta Xr rpc_clnt_auth 3 t Fn authsys_create Ta Xr rpc_clnt_auth 3 t Fn authsys_create_default Ta Xr rpc_clnt_auth 3 t Fn authunix_create Ta Xr rpc_soc 3 t Fn authunix_create_default Ta Xr rpc_soc 3 t Fn callrpc Ta Xr rpc_soc 3 t Fn clnt_broadcast Ta Xr rpc_soc 3 t Fn clnt_call Ta Xr rpc_clnt_calls 3 t Fn clnt_control Ta Xr rpc_clnt_create 3 t Fn clnt_create Ta Xr rpc_clnt_create 3 t Fn clnt_destroy Ta Xr rpc_clnt_create 3 t Fn clnt_dg_create Ta Xr rpc_clnt_create 3 t Fn clnt_freeres Ta Xr rpc_clnt_calls 3 t Fn clnt_geterr Ta Xr rpc_clnt_calls 3 t Fn clnt_pcreateerror Ta Xr rpc_clnt_create 3 t Fn clnt_perrno Ta Xr rpc_clnt_calls 3 t Fn clnt_perror Ta Xr rpc_clnt_calls 3 t Fn clnt_raw_create Ta Xr rpc_clnt_create 3 t Fn clnt_spcreateerror Ta Xr rpc_clnt_create 3 t Fn clnt_sperrno Ta Xr rpc_clnt_calls 3 t Fn clnt_sperror Ta Xr rpc_clnt_calls 3 t Fn clnt_tli_create Ta Xr rpc_clnt_create 3 t Fn clnt_tp_create Ta Xr rpc_clnt_create 3 t Fn clnt_udpcreate Ta Xr rpc_soc 3 t Fn clnt_vc_create Ta Xr rpc_clnt_create 3 t Fn clntraw_create Ta Xr rpc_soc 3 t Fn clnttcp_create Ta Xr rpc_soc 3 t Fn clntudp_bufcreate Ta Xr rpc_soc 3 t Fn get_myaddress Ta Xr rpc_soc 3 t Fn pmap_getmaps Ta Xr rpc_soc 3 t Fn pmap_getport Ta Xr rpc_soc 3 t Fn pmap_rmtcall Ta Xr rpc_soc 3 t Fn pmap_set Ta Xr rpc_soc 3 t Fn pmap_unset Ta Xr rpc_soc 3 t Fn registerrpc Ta Xr rpc_soc 3 t Fn rpc_broadcast Ta Xr rpc_clnt_calls 3 t Fn rpc_broadcast_exp Ta Xr rpc_clnt_calls 3 t Fn rpc_call Ta Xr rpc_clnt_calls 3 t Fn rpc_reg Ta Xr rpc_svc_calls 3 t Fn svc_create Ta Xr rpc_svc_create 3 t Fn svc_destroy Ta Xr rpc_svc_create 3 t Fn svc_dg_create Ta Xr rpc_svc_create 3 t Fn svc_dg_enablecache Ta Xr rpc_svc_calls 3 t Fn svc_fd_create Ta Xr rpc_svc_create 3 t Fn svc_fds Ta Xr rpc_soc 3 t Fn svc_freeargs Ta Xr rpc_svc_reg 3 t Fn svc_getargs Ta Xr rpc_svc_reg 3 t Fn svc_getcaller Ta Xr rpc_soc 3 t Fn svc_getreq Ta Xr rpc_soc 3 t Fn svc_getreqset Ta Xr rpc_svc_calls 3 t Fn svc_getrpccaller Ta Xr rpc_svc_calls 3 t Fn svc_kerb_reg Ta Xr kerberos_rpc 3 t Fn svc_raw_create Ta Xr rpc_svc_create 3 t Fn svc_reg Ta Xr rpc_svc_calls 3 t Fn svc_register Ta Xr rpc_soc 3 t Fn svc_run Ta Xr rpc_svc_reg 3 t Fn svc_sendreply Ta Xr rpc_svc_reg 3 t Fn svc_tli_create Ta Xr rpc_svc_create 3 t Fn svc_tp_create Ta Xr rpc_svc_create 3 t Fn svc_unreg Ta Xr rpc_svc_calls 3 t Fn svc_unregister Ta Xr rpc_soc 3 t Fn svc_vc_create Ta Xr rpc_svc_create 3 t Fn svcerr_auth Ta Xr rpc_svc_err 3 t Fn svcerr_decode Ta Xr rpc_svc_err 3 t Fn svcerr_noproc Ta Xr rpc_svc_err 3 t Fn svcerr_noprog Ta Xr rpc_svc_err 3 t Fn svcerr_progvers Ta Xr rpc_svc_err 3 t Fn svcerr_systemerr Ta Xr rpc_svc_err 3 t Fn svcerr_weakauth Ta Xr rpc_svc_err 3 t Fn svcfd_create Ta Xr rpc_soc 3 t Fn svcraw_create Ta Xr rpc_soc 3 t Fn svctcp_create Ta Xr rpc_soc 3 t Fn svcudp_bufcreate Ta Xr rpc_soc 3 t Fn svcudp_create Ta Xr rpc_soc 3 t Fn xdr_accepted_reply Ta Xr rpc_xdr 3 t Fn xdr_authsys_parms Ta Xr rpc_xdr 3 t Fn xdr_authunix_parms Ta Xr rpc_soc 3 t Fn xdr_callhdr Ta Xr rpc_xdr 3 t Fn xdr_callmsg Ta Xr rpc_xdr 3 t Fn xdr_opaque_auth Ta Xr rpc_xdr 3 t Fn xdr_rejected_reply Ta Xr rpc_xdr 3 t Fn xdr_replymsg Ta Xr rpc_xdr 3 t Fn xprt_register Ta Xr rpc_svc_calls 3 t Fn xprt_unregister Ta Xr rpc_svc_calls 3 .El .Sh FILES
a /etc/netconfig .Sh SEE ALSO .Xr getnetconfig 3 , .Xr getnetpath 3 , .Xr rpc_clnt_auth 3 , .Xr rpc_clnt_calls 3 , .Xr rpc_clnt_create 3 , .Xr rpc_svc_calls 3 , .Xr rpc_svc_create 3 , .Xr rpc_svc_err 3 , .Xr rpc_svc_reg 3 , .Xr rpc_xdr 3 , .Xr rpcbind 3 , .Xr xdr 3 , .Xr netconfig 5