この節では、sac からポートモニタに送るメッセージ (sac メッセージ) と、ポートモニタから sac に送るメッセージ (ポートモニタメッセージ) について説明します。メッセージは、FIFO を通して C の構造体形式で送信されます。例 F-2 を参照してください。
sac から送られるメッセージの形式は、次の構造体 sacmsg で定義されています。
struct sacmsg { int sc_size; /* オプションデータ部分のサイズ */ char sc_type; /* メッセージのタイプ */ };
sac からポートモニタに送られるメッセージには 4 つのタイプがあります。メッセージがどのタイプなのかは、sacmsg 構造体の sc_type フィールドに次のどれかの値を設定して示します。
ステータス要求
有効設定メッセージ
無効設定メッセージ
ポートモニタの _pmtab ファイルを読み込むように指示するメッセージ
sc_size はメッセージのオプションデータ部分のサイズを示します。「メッセージクラス」 を参照してください。sc_size では、sc_size は常に 0 です。
ポートモニタは、sac からのメッセージには必ず応答しなければなりません。
ポートモニタから sac に送られるメッセージの形式は、次の構造体 pmmsg で定義されています。
struct pmmsg { char pm_type; /* メッセージのタイプ */ unchar pm_state; /* ポートモニタの現在の状態 */ char pm_maxclass; /* このポートモニタが解釈できる 最大メッセージクラス */ char pm_tag[PMTAGSIZE + 1]; /* ポートモニタのタグ */ int pm_size; /* オプションデータ部分のサイズ */ };
ポートモニタから sac に送られるメッセージには、2 つのタイプがあります。メッセージがどのタイプなのかは、pmmsg 構造体の pm_type フィールドに次のどちらかの値を設定して示します。
状態情報
否定応答
どちらのタイプのメッセージの場合も、pm_tag フィールドにはポートモニタのタグが、pm_state フィールドにはポートモニタの現在の状態が設定されます。pm_state フィールドに設定できる状態は次の 4 つです。
起動
有効
無効
停止
現在の状態は、sac からの最後のメッセージによる状態変更を反映しています。
通常の応答メッセージは状態メッセージです。否定応答メッセージを返すのは、sac から受信したメッセージが理解できなかったときだけです。
pm_size はメッセージのオプションデータ部分のサイズを示します。pm_maxclass はメッセージクラスを指定するのに使用します。この 2 つのフィールドは、「メッセージクラス」 の項で説明します。Solaris では常に pm_maxclass は 1、sc_size は 0 です。
ポートモニタから先にメッセージを送ることはありません。ポートモニタは、受信したメッセージに応答するだけです。