C Statistics API を使用して ipqos モジュールレベルで特定のイベントの発生を検出し、発生したイベントについての情報を返すことができます。イベントの発生は、次の 3 つの方法で検出できます。
poll(2) または select(3C) を使用してファイル記述子を調べる
ユーザープロセスにシグナルを直接送信するデバイスの機能を有効にする
関数 ba_get_next_event() を呼び出して次のイベントを検査する
イベントはバッファーに入るため、poll(2) または select(3C) を使用する場合は、非ブロックモードで ba_get_next_event() を繰り返し呼び出し、未処理のイベントが存在しないかを確認する必要があります。これは、次の poll(2) を正しく動作させるためです。
イベントの発生を (たとえば poll(2) を使用して) 検出した時点で、ba_get_next_event() 関数を呼び出してそのイベントについての情報を取り出します。
C Statistics API は、イベントを処理する次の関数を提供しています。
ba_set_event_mask() は、表 3-1 に挙げられたイベントのどれを報告するかを示すイベントマスクを設定します。
ba_enable_signal() は、シグナル機構を有効にして、ipqos モジュールがユーザープロセスにシグナルを直接送信できるようにします。
表 3-1 は、ユーザープロセスに報告されるイベントタイプを示しています。
表 3-1 イベントタイプ|
イベントタイプ |
説明 |
|---|---|
|
BA_EVENT_CONFIG_STARTING |
Solaris Bandwidth Manager のポリシーエージェントが新しい設定の読み取りを開始する時に生成される |
|
BA_EVENT_CONFIG_ENDING |
Solaris Bandwidth Manager のポリシーエージェントが新しい設定の読み取りを終了する時に生成される |
|
BA_EVENT_DAEMON_ENDING |
Solaris Bandwidth Manager のポリシーエージェントが終了する場合または強制的に終了させられる場合に生成される |
|
BA_EVENT_FLOW_ACCOUNTING |
フローがタイムアウトしたか、フローの TOS フィールドが変化した場合に生成される |
|
BA_EVENT_STATS_RESET |
クラスがリセットまたは削除された場合に生成される |
バッファーが保持できるイベント数を制限するには、/etc/default/ba_info ファイル内の環境変数 BA_EVENTBUFSIZE を編集します。この値を 0 に設定すると、イベントを無制限にバッファリングできます。ただしこの場合、すべてのイベントを取得しないと、カーネルメモリーが使い果たされることに注意してください。