RWHOD(8)

名称
rwhod - システムステータスサーバ

書式
rwhod [-i] [-p] [-l] [-m [ttl]]

解説
rwhod は、 rwho(1) や ruptime(1) プログラムで使われるデータベースを管理するサーバです。 ネットワークにおいて ブロードキャスト もしくは マルチキャスト メッセージが使用できることが前提となります。

rwhod はステータス情報の生成と利用の両方を行います。 ただし、 -l (listen モード) オプションを指定した場合は例外で、利用のみ行います。 情報の生成では、定期的に システムに状態を問い合わせ、ステータスメッセージを構築してネットワークに ブロードキャストします。情報の利用では、他の rwhod サーバからの状態メッセージを受け取り、検査してから、 /var/rwho ディレクトリの下のファイルに記録します。

-i オプションは、安全ではないモードを有効にします。 このモードでは、 rwhod は入力パケットのソースポートを無視します。

-p オプションは、 rwhod にすべての POINTOPOINT インタフェースを無視させます。 要求時にダイヤルするインタフェースを常に活動状態にしたくない場合に有用です。

-l オプションを指定すると listen モードが有効になり、 rwhod は情報をブロードキャストしなくなります。 これにより、自分自身の情報をブロードキャストせずに他のマシンの rwhod 情報を監視することができます。

-m オプションは、インタフェースの "ifnet" 構造体に IFF_MULTICAST フラグが 設定されている全てのインタフェース (ループバックインタフェースは 除きます) 上で、 rwhod に (ブロードキャストの代わりに) IP マルチキャストを使わせます。マルチキャストによる報告は、 直接つながっているサブネットへの転送を防ぐために TTL(Time To Live) 1で送られます。

オプションの ttl 引数が -m フラグとともに与えられた時には、 rwhod は IP マルチキャストデータグラムを TTL が ttl として、 全てのインタフェースではなく 1 つのインタフェースに対して送ります。 ttl は 0 から 32 (または、MAX_MULTICAST_SCOPE) までの値です。 -m 1 は、 -m とは異なることに注意してください。 -m 1 は、1 つのインタフェースにだけ転送を行います。

-m フラグが、 ttl 引数無しで使われた場合、プログラムはマルチキャスト rwhod 報告を全ての マルチキャストが利用可能なインタフェースから受け取ります。 ttl 引数が与えられた場合は、マルチキャストレポートは 1 つのインタフェース からだけ受け取ります。その 1 つは、報告を行っているものです (これは、ホストルーティング表によって制御されます)。 -m オプションに関係なく、プログラムはブロードキャストもしくは ユニキャストによる報告を全てのインタフェースから受け取ります。 したがって、このプログラムは、マルチキャストを使っていない古い rwhod から報告を受け取りますが、マルチキャストが使われている場合には古い rwhod は このプログラムによって生成される報告を受け取れないことになります。

サーバは、``who'' サービスで指定されているポート番号でメッセージを 送受信します。 services(5) を参照して下さい。送受信するメッセージは以下のような形式です。

    struct  outmp {
    	char    out_line[8];            /* 端末 (tty) 名 */
    	char    out_name[8];            /* ユーザID */
    	long    out_time;               /* 時刻 */
    };
    struct  whod {
    	char    wd_vers;
    	char    wd_type;
    	char    wd_fill[2];
    	int     wd_sendtime;
    	int     wd_recvtime;
    	char    wd_hostname[32];
    	int     wd_loadav[3];
    	int     wd_boottime;
    	struct  whoent {
    		struct  outmp we_utmp;
    		int     we_idle;
    	} wd_we[1024 / sizeof (struct whoent)];
    };

すべてのフィールドは、送信に先立ってネットワークバイトオーダに変換されます。 ホスト負荷 (load average) は w(1) によって計算され、送信の 5, 10, 15 分前の負荷を 100 倍した 整数として表現されます。ホスト名は、 gethostname(3) システムコールで得られたものがドメイン名を省略して格納されます。 メッセージの最後の配列には、メッセージを送信したマシンにログインしている ユーザの情報が格納されています。この情報は、 utmp(5) の非アイドルの端末ラインのエントリと、その端末ラインから最後に文字を 受け取った時間を秒数で表した値が入っています。

rwhod サーバによって受信されるメッセージは、 rwhod サーバのポートから送信されたものでないか、 -i オプションが指定されていなければ捨てられます。さらにメッセージ のホストの名前が表示できない ASCII 文字を含んでいる場合も、メッセージは捨てられます。 rwhod が受け取った正しいメッセージは /var/rwho ディレクトリに whod.hostname というファイル名で格納されます。これらのファイルには、最新のメッセージ だけが、上で説明した形式で残っています。

ステータスメッセージはほぼ 3 分ごとに作成されます。 rwhod は、30 分ごとに /kernel に対して nlist(3) を実行します。これは、このファイルがその時点での実際のシステムイメージ であることを確認するためです。

関連項目
ruptime(1), rwho(1)

バグ
ネットワーク間でステータス情報を中継する方法が必要です。 ステータス情報は、ずっと送りつづけるのではなく、要求があったとき にだけ送るようにするべきでしょう。サーバが死んでいたり、ネットワークの 通信障害を、マシンがダウンしていると思い込んでしまう場合がよくあります。

歴史
rwhod コマンドは 4.2BSD で登場しました。