RPC(3) | FreeBSD Library Functions Manual | RPC(3) |
名称
rpc — リモートプロシージャコールのためのライブラリルーチンライブラリ
Standard C Library (libc, -lc)解説
これらのルーチンは、C 言語プログラムがネットワークの向こう側の他のマシンでプロシージャ呼び出しを行なえるようにします。最初に、クライアントは、リクエスト (要求) をサーバに送ります。リクエスト (要求) の受け取りにおいて、サーバは、要求されたサービスを実行するためにディスパッチルーチンを呼び出し、次に、応答を送り返します。すべての RPC ルーチンは、ヘッダ < rpc/rpc.h> を必要とします。 struct netconfig を必要とするルーチンは、また、 < netconfig.h> が含まれることを必要とします。
ネットタイプ (nettype)
ハイレベルな RPC インタフェースルーチンのいくつかは、引数の 1 つ (例えば、 clnt_create(), svc_create(), rpc_reg(), rpc_call()) として nettype 文字列を取ります。この文字列は、特別のアプリケーションで使用することができるトランスポートのクラスを定義します。nettype 引数は、次の 1 つです:
- netpath
- NETPATH 環境変数でそれらのトークン名によって示された転送を選びます。 NETPATH は、設定されていないか NULL です、そのデフォルトは、“visible”です。“netpath”は、デフォルトの nettype です。
- visible
- /etc/netconfig ファイルの中に visible フラグ (v) に設定した転送を選びます。
- circuit_v
- /etc/netconfig ファイルのエントリから接続指向の転送 (セマンティック (意味) “tpi_cots”または“tpi_cots_ord”) のみで選ばれたものを除いてこれは、“visible”と同じです。
- datagram_v
- /etc/netconfig コネクションレス型データグラム転送 (セマンティック (意味) “tpi_clts”) のみで選ばれたものを除いてこれは、“visible”と同じです。
- circuit_n
- 接続指向のデータグラム転送 (セマンティック (意味) “tpi_cots”または“tpi_cots_ord”) のみで選ばれたものを除いてこれは、“netpath”と同じです。
- datagram_n
- コネクションレス型データグラム転送 (セマンティック (意味) “tpi_clts”) のみで選ばれたものを除いてこれは、“netpath”と同じです。
- udp
- これは、インターネット UDP のバージョン 4 と 6 の両方について参照します
- tcp
- これは、インターネット TCP のバージョン 4 と 6 の両方について参照します
nettype が NULL であるなら、それは、“netpath”をデフォルトとします。転送は、 NETPATH 変数で左から右の順か、 /etc/netconfig ファイルで上から下の順に試みられます。
派生タイプ (derived types)
RPC インタフェースで使用される派生タイプは、次のように定義されます:
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;
データ構造体
RPC パッケージによって使用されるデータ構造体のいくつかは、以下に示されます。AUTH 構造体
/* * 認証インフォメーション。クライアントには、不透明です。 */ struct opaque_auth { enum_t oa_flavor; /* auth (認証) のフレイバ */ caddr_t oa_base; /* より多くの auth スタッフのアドレス */ u_int oa_length; /* MAX_AUTH_BYTES を超えない */ }; /* * auth ハンドル、クライアント側認証符号へのインタフェース。 */ typedef struct { struct opaque_auth ah_cred; struct opaque_auth ah_verf; struct auth_ops { void (*ah_nextverf)(); int (*ah_marshal)(); /* nextverf &シリアライズ */ int (*ah_validate)(); /* 検証を認証する */ int (*ah_refresh)(); /* 証明書をリフレッシュする */ void (*ah_destroy)(); /* この構造体を破壊する */ } *ah_ops; caddr_t ah_private; } AUTH;
CLIENT 構造体
/* * クライアント rpc ハンドル。 * 個々の実装によって作成。 * クライアントは、初期値設定 auth に責任があります。 */ typedef struct { AUTH *cl_auth; /* 認証 */ struct clnt_ops { enum clnt_stat (*cl_call)(); /* リモート手続きを呼び出す */ void (*cl_abort)(); /* 呼び出しを中断 */ void (*cl_geterr)(); /* 指定したエラーコードを取得 */ bool_t (*cl_freeres)(); /* 結果を解放する */ void (*cl_destroy)(); /* この構造体を破壊する */ bool_t (*cl_control)(); /* rcp の ioctl() */ } *cl_ops; caddr_t cl_private; /* プライベートスタッフ */ char *cl_netid; /* ネットワーク識別子 */ char *cl_tp; /* デバイス名 */ } CLIENT;
SVCXPRT 構造体
enum xprt_stat { XPRT_DIED, XPRT_MOREREQS, XPRT_IDLE }; /* * サーバ側転送ハンドル */ typedef struct { int xp_fd; /* サーバハンドルのためのファイル記述子 */ u_short xp_port; /* 廃止 */ const struct xp_ops { bool_t (*xp_recv)(); /* 着信要求を受信 */ enum xprt_stat (*xp_stat)(); /* 転送状態を取得 */ bool_t (*xp_getargs)(); /* 引数を取得 */ bool_t (*xp_reply)(); /* 応答送信 */ bool_t (*xp_freeargs)(); /* 引数のために割り付けたメモリを 解放 */ void (*xp_destroy)(); /* この構造体を破壊する */ } *xp_ops; int xp_addrlen; /* リモートアドレスの長さ. 廃止 */ struct sockaddr_in xp_raddr; /* 廃止 */ const struct xp_ops2 { bool_t (*xp_control)(); /* すべての関数で捕獲 */ } *xp_ops2; char *xp_tp; /* 転送プロバイダデバイス名 */ char *xp_netid; /* ネットワーク識別子 */ struct netbuf xp_ltaddr; /* ローカル転送アドレス */ struct netbuf xp_rtaddr; /* リモート転送アドレス */ struct opaque_auth xp_verf; /* raw 転送検証 */ caddr_t xp_p1; /* プライベート: svc ops によって使用 */ caddr_t xp_p2; /* プライベート: svc ops によって使用 */ caddr_t xp_p3; /* プライベート: svc lib によって使用 */ int xp_type /* 転送タイプ */ } SVCXPRT;
svc_reg 構造体
struct svc_req { rpcprog_t rq_prog; /* サービスプログラム番号 */ rpcvers_t rq_vers; /* サービスプロトコルバージョン */ rpcproc_t rq_proc; /* 望みの手続き */ struct opaque_auth rq_cred; /* 配線からの raw creds */ caddr_t rq_clntcred; /* リードオンリ cooked cred */ SVCXPRT *rq_xprt; /* 関連転送 */ };
XDR 構造体
/* * XDR 操作。 * XDR_ENCODE は、タイプをストリーム中にコード化させます。 * XDR_DECODE は、ストリームからタイプを抽出させます。 * XDR_FREE は、XDR_DECODE 要求で割り付けられた空間を解放するためにを使用す * ることができます。 */ enum xdr_op { XDR_ENCODE=0, XDR_DECODE=1, XDR_FREE=2 }; /* * これは、外部データのユニット毎のバイト数です。 */ #define BYTES_PER_XDR_UNIT (4) #define RNDUP(x) ((((x) + BYTES_PER_XDR_UNIT - 1) / BYTES_PER_XDR_UNIT) \ * BYTES_PER_XDR_UNIT) /* * xdrproc_t は、コード化されるか復号化される各データタイプに存在して * います。 * xdrproc_t への 2 番目の引数は、不透明なポインタへのポインタです。 * 一般的に、不透明なポインタは、復号化されるためのデータタイプの * 構造体を指します。 * これが 0 を指すなら、タイプルーチンは、適切なサイズの動的記憶域 * を割り付けて、それを返すべきです。 * bool_t (*xdrproc_t)(XDR *, caddr_t *); */ typedef bool_t (*xdrproc_t)(); /* * XDR ハンドル。 * ストリームに適用されている操作、特定の実装のための操作 * ベクトルを含む */ typedef struct { enum xdr_op x_op; /* 操作;早い追加パラメータ */ struct xdr_ops { bool_t (*x_getlong)(); /* 基本的なストリームから long を 取得 */ bool_t (*x_putlong)(); /* 基本的なストリームへ long を 出力 */ bool_t (*x_getbytes)(); /* 基本的なストリームから複数バイト を取得 */ bool_t (*x_putbytes)(); /* 基本的なストリームへ複数バイトを 出力 */ u_int (*x_getpostn)(); /* 始めからのバイトオフセットを返す */ bool_t (*x_setpostn)(); /* ストリームを再配置させる */ long * (*x_inline)(); /* バッファリングされたデータへの バッファの迅速なポインタ */ void (*x_destroy)(); /* この xdr_stream のプライベートを 解放 */ } *x_ops; caddr_t x_public; /* ユーザのデータ */ caddr_t x_private; /* プライベートデータへのポインタ */ caddr_t x_base; /* 位置情報のためにプライベートで使用 */ u_int x_handy; /* 特別のプライベート単語 */ } XDR; /* * netbuf 構造体。この構造体は、SysV システムで <xti.h>で定義されますが、 * NetBSD / FreeBSD は、XTI を使用しません。 * * 通常、buf は、struct sockaddr を指し、そして、len と maxlen は、 * それぞれそのソケットアドレスの長さと最大長を含みます。 * */ struct netbuf { unsigned int maxlen; unsigned int len; void *buf; }; /* * アドレスの形式と XTI t_bind 呼び出しのオプション引数。 * 互換性に提供しているだけであって、svc_tli_create() への引数を * 除いて、使用するべきではありません。 */ struct t_bind { struct netbuf addr; unsigned int qlen; };
ルーチンの索引
次のテーブルは、RPC ルーチンとそれらが説明されるマニュアル参照ページをリストしています:
- RPC ルーチン
-
マニュアル参照ページ
- auth_destroy()
- rpc_clnt_auth(3)
- authdes_create()
- rpc_soc(3)
- authnone_create()
- rpc_clnt_auth(3)
- authsys_create()
- rpc_clnt_auth(3)
- authsys_create_default()
- rpc_clnt_auth(3)
- authunix_create()
- rpc_soc(3)
- authunix_create_default()
- rpc_soc(3)
- callrpc()
- rpc_soc(3)
- clnt_broadcast()
- rpc_soc(3)
- clnt_call()
- rpc_clnt_calls(3)
- clnt_control()
- rpc_clnt_create(3)
- clnt_create()
- rpc_clnt_create(3)
- clnt_create_timed()
- rpc_clnt_create(3)
- clnt_create_vers()
- rpc_clnt_create(3)
- clnt_create_vers_timed()
- rpc_clnt_create(3)
- clnt_destroy()
- rpc_clnt_create(3)
- clnt_dg_create()
- rpc_clnt_create(3)
- clnt_freeres()
- rpc_clnt_calls(3)
- clnt_geterr()
- rpc_clnt_calls(3)
- clnt_pcreateerror()
- rpc_clnt_create(3)
- clnt_perrno()
- rpc_clnt_calls(3)
- clnt_perror()
- rpc_clnt_calls(3)
- clnt_raw_create()
- rpc_clnt_create(3)
- clnt_spcreateerror()
- rpc_clnt_create(3)
- clnt_sperrno()
- rpc_clnt_calls(3)
- clnt_sperror()
- rpc_clnt_calls(3)
- clnt_tli_create()
- rpc_clnt_create(3)
- clnt_tp_create()
- rpc_clnt_create(3)
- clnt_tp_create_timed()
- rpc_clnt_create(3)
- clnt_udpcreate()
- rpc_soc(3)
- clnt_vc_create()
- rpc_clnt_create(3)
- clntraw_create()
- rpc_soc(3)
- clnttcp_create()
- rpc_soc(3)
- clntudp_bufcreate()
- rpc_soc(3)
- get_myaddress()
- rpc_soc(3)
- pmap_getmaps()
- rpc_soc(3)
- pmap_getport()
- rpc_soc(3)
- pmap_rmtcall()
- rpc_soc(3)
- pmap_set()
- rpc_soc(3)
- pmap_unset()
- rpc_soc(3)
- registerrpc()
- rpc_soc(3)
- rpc_broadcast()
- rpc_clnt_calls(3)
- rpc_broadcast_exp()
- rpc_clnt_calls(3)
- rpc_call()
- rpc_clnt_calls(3)
- rpc_reg()
- rpc_svc_calls(3)
- svc_create()
- rpc_svc_create(3)
- svc_destroy()
- rpc_svc_create(3)
- svc_dg_create()
- rpc_svc_create(3)
- svc_dg_enablecache()
- rpc_svc_calls(3)
- svc_fd_create()
- rpc_svc_create(3)
- svc_fds()
- rpc_soc(3)
- svc_freeargs()
- rpc_svc_reg(3)
- svc_getargs()
- rpc_svc_reg(3)
- svc_getcaller()
- rpc_soc(3)
- svc_getreq()
- rpc_soc(3)
- svc_getreqset()
- rpc_svc_calls(3)
- svc_getrpccaller()
- rpc_svc_calls(3)
- svc_kerb_reg()
- kerberos_rpc(3)
- svc_raw_create()
- rpc_svc_create(3)
- svc_reg()
- rpc_svc_calls(3)
- svc_register()
- rpc_soc(3)
- svc_run()
- rpc_svc_reg(3)
- svc_sendreply()
- rpc_svc_reg(3)
- svc_tli_create()
- rpc_svc_create(3)
- svc_tp_create()
- rpc_svc_create(3)
- svc_unreg()
- rpc_svc_calls(3)
- svc_unregister()
- rpc_soc(3)
- svc_vc_create()
- rpc_svc_create(3)
- svcerr_auth()
- rpc_svc_err(3)
- svcerr_decode()
- rpc_svc_err(3)
- svcerr_noproc()
- rpc_svc_err(3)
- svcerr_noprog()
- rpc_svc_err(3)
- svcerr_progvers()
- rpc_svc_err(3)
- svcerr_systemerr()
- rpc_svc_err(3)
- svcerr_weakauth()
- rpc_svc_err(3)
- svcfd_create()
- rpc_soc(3)
- svcraw_create()
- rpc_soc(3)
- svctcp_create()
- rpc_soc(3)
- svcudp_bufcreate()
- rpc_soc(3)
- svcudp_create()
- rpc_soc(3)
- xdr_accepted_reply()
- rpc_xdr(3)
- xdr_authsys_parms()
- rpc_xdr(3)
- xdr_authunix_parms()
- rpc_soc(3)
- xdr_callhdr()
- rpc_xdr(3)
- xdr_callmsg()
- rpc_xdr(3)
- xdr_opaque_auth()
- rpc_xdr(3)
- xdr_rejected_reply()
- rpc_xdr(3)
- xdr_replymsg()
- rpc_xdr(3)
- xprt_register()
- rpc_svc_calls(3)
- xprt_unregister()
- rpc_svc_calls(3)
関連ファイル
- /etc/netconfig
関連項目
getnetconfig(3), getnetpath(3), rpcbind(3), rpc_clnt_auth(3), rpc_clnt_calls(3), rpc_clnt_create(3), rpc_svc_calls(3), rpc_svc_create(3), rpc_svc_err(3), rpc_svc_reg(3), rpc_xdr(3), xdr(3), netconfig(5)May 7, 1993 | FreeBSD |