EN JA
RPC(3)
RPC(3) FreeBSD Library Functions Manual RPC(3)

名称

rpcリモートプロシージャコールのためのライブラリルーチン

ライブラリ

Standard C Library (libc, -lc)

書式

#include < rpc/rpc.h>
#include < netconfig.h>

解説

これらのルーチンは、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 の両方について参照します

nettypeNULL であるなら、それは、“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
May 7, 1993 FreeBSD