ONC+ 開発ガイド

rpcbind の操作

rpcbind にアクセスするには、使用するトランスポートごとに割り当てられているアドレスを使用します。たとえば TCP/IP と UDP/IP の場合は、ポート番号 111 が割り当てられています。各トランスポートには、このようによく知られているアドレスがあります。この節では、rpcbind がサポートしている各手続きを説明します。

RPCBPROC_NULL

この手続きは何もしない手続きです。習慣的にどのプログラムでも、手続き 0 は引数も戻り値もない手続きとします。

RPCBPROC_SET

マシン上でプログラムが初めて使用可能になるときは、そのマシンで実行されている rpcbind に自分自身を登録します。プログラムは次を渡します。 プログラム番号 prog、バージョン番号 vers、ネットワーク ID netid、および、プログラムがサービス要求を待機する汎用アドレス uaddr

この手続きは、プログラムのマッピングに成功すれば TRUE、失敗すれば FALSE のブール値を返します。指定された (progversnetid) の組み合わせで既にマップされたものがあれば、新たなマップは行いません。

netiduaddr はどちらも NULL にはできません。また、netid には、呼び出しを行うマシン上のネットワーク ID が正しく指定されていなければなりません。

RPCBPROC_UNSET

プログラムが使用できなくなった場合は、同一マシン上の rpcbind で自分自身を登録解除する必要があります。

この手続きの引数と戻り値は、RPCBPROC_SET と同じです。(progversnetid) の組み合わせと uaddr のマッピングが削除されます。

netidNULL の場合は、(prog、vers、*) 組み合わせとそれに対応する汎用アドレスのマッピングがすべて削除されます。サービスの登録解除は、サービスの所有者かスーパーユーザーだけが実行できます。

RPCBPROC_GETADDR

プログラム番号 prog、バージョン番号 vers、ネットワークID netid を指定してこの手続きを呼び出すと、そのプログラムが呼び出し要求を待っている汎用アドレスが返されます。

引数の netid フィールドは無視され、要求が到着するトランスポートの netid から取り出します。

RPCBPROC_DUMP

この手続きは、rpcbind データベースの全エントリのリストを返します。

この手続きには引数がなく、戻り値は、プログラム、バージョン、ネットワーク ID、汎用アドレスのリストです。この手続きを呼び出すときは、データグラムトランスポートではなくストリームトランスポートを使用します。これは、大量のデータが返されるのを回避するためです。

RPCBPROC_CALLIT

この手続きを使用すると、汎用アドレスがわからなくても同一マシン上にあるリモートプロシージャを呼び出すことができます。 RPCBPROC_CALLIT は、rpcbind の汎用アドレス経由での任意のリモートプログラムへのブロードキャスト通信をサポートします。

パラメータ progversprocargs_ptr にはそれぞれプログラム番号、バージョン番号、手続き番号、リモートプロシージャへの引数を指定します

この手続きは正常終了の場合は応答しますが、異常終了の場合は一切応答しません。

この手続きからは、リモートプログラムの汎用アドレスと、リモートプロシージャからの戻り値が返されます。

RPCBPROC_GETTIME

この手続きは、自分のマシンのローカル時刻を、1970 年 1 月 1 日午前 0 時からの秒数で返します。

RPCBPROC_UADDR2TADDR

この手続きは、汎用アドレスをトランスポート (netbuf) アドレスに変換します。RPCBPROC_UADDR2TADDRuaddr2taddr() と同じ機能を持ちます。 マニュアルページ netdir(3NSL) を参照してください。名前 - アドレス変換のライブラリモジュールとリンクできないプロセスだけが、この手続きを使用します。

RPCBPROC_TADDR2UADDR

この手続きは、トランスポート (netbuf) アドレスを汎用アドレスに変換します。RPCBPROC_TADDR2UADDRtaddr2uaddr() と同じ機能を持ちます。マニュアルページ netdir(3NSL) を参照してください。名前 - アドレス変換のライブラリモジュールとリンクできないプロセスだけが、この手続きを使用します。

rpcbind のバージョン 4

rpcbind のバージョン 4 は、以前の手続きのほかに、次に示す手続きが追加されています。

RPCBPROC_BCAST

この手続きは、バージョン 3 の RPCBPROC_CALLIT 手続きと同じです。新たな名前を付けたのは、この手続きはブロードキャスト RPC だけに使用することを示すためです。これに対して、次のテキストで定義する RPCBPROC_INDIRECT は、間接 RPC 呼び出しだけに使用します。

RPCBPROC_GETVERSADDR

この手続きは、RPCBPROC_GETADDR に似ています。異なる点は、rpcb 構造体の r_vers フィールドで目的のバージョンを指定できることです。そのバージョンが登録されていない場合、アドレスは返されません。

RPCBPROC_INDIRECT

この手続きは、RPCBPROC_CALLIT に似ています。しかし、たとえば呼び出すプログラムがシステムに登録されていないなどのエラーが起こった場合、エラー情報を返す点が異なります。ブロードキャスト RPC でこの手続きを使用しないでください。 この手続きは間接 RPC 呼び出しのみで使用します。

RPCBPROC_GETADDRLIST

この手続きは、指定された rpcb エントリのアドレスリストを返します。クライアントはそのリストを使用して、サーバーと通信するための代替トランスポートを調べることができます。

RPCBPROC_GETSTAT

この手続きは、rpcbind サーバーの動作に関する統計情報を返します。統計情報には、サーバーが受信した要求の種類と回数が示されます。

RPCBPROC_SETRPCBPROC_UNSET 以外の手続きはすべて、rpcbind が実行されているマシンとは別のマシン上のクライアントから呼び出すことができます。rpcbind は、RPCPROC_SETRPCBPROC_UNSET の要求だけはループバックトランスポートからでないと受け入れません。