ri_intf 構造体の定義は以下の通りである。
// Request Inspector Interface
struct ri_intf {
const char const * name;
struct ri * (* initialize) (int sock, uint32_t addr, uint16_t port, char * optarg);
int (* run) (struct ri *);
int (* stop) (struct ri *);
int (* add_node) (struct ri *, uint32_t ipaddr);
int (* remove_node) (struct ri *, uint32_t ipaddr);
int (* finalize) (struct ri *);
const char const* (* usage) ();
};
メンバ変数の詳細については本章の各項で解説する。
RI の名称である。ここで設定した名前は dtsadmin コマンドなどで RI を指定する際に使用する。
RI の初期処理を行う。
struct ri * initialize (int sock, uint32_t addr, uint16_t port, char * ri_optarg)
sock
リクエストを受け付けるソケットディスクリプタ。RI の全スレッドが共有する。
addr
デフォルトの転送先ホストの IP アドレス。 RI 内で転送先ノードが1つも登録されていない状態でリクエストを受け付けた場合の転送先ホストとして使用する。
port
転送先ノードの待ち受けポート番号。
ri_optarg
RI 固有のパラメータ文字列。dtsadmin コマンド -A オプションのサブオプション -s の パラメータがそのまま渡される。
initialize では主に以下の処理を実行する。
引数処理
ノードリスト の初期化
RI 全スレッドを作成する。 スレッドの挙動に関しては、 メインスレッド処理概要 にて記述する。
RI 全スレッドの停止フラグを立てる。 フラグが立ったスレッドの挙動に関しては、 メインスレッド処理概要 にて記述する。
ノードリスト へノードを追加する。 詳しくは Dispatcher へ記述する。
ノードリスト からノードを削除する。 詳しくは Dispatcher へ記述する。
finalize では RI の終了処理として主に以下の処理を実行する。
dtsd コマンドの –help オプションなどで表示するための文字列を返す。 以下に例を示す。
const char usage_str[] = "[options]\n"
"\n"
"Options:\n"
" -c threads specifies the number of server threads (default: 1)\n"
" -d dispatcher specifies the dispatching algorithm (default: "
DEFAULT_DISPATCHER ")\n\n";