2.10.2 拡張MIB定義ファイルの作成
システムにルートユーザーとしてログインして,拡張MIB定義ファイル(/etc/SnmpAgent.d/snmpd.extend)に拡張MIBオブジェクトを定義します。
/etc/SnmpAgent.d/snmpd.extendファイルは,ユーザーが定義したオブジェクトから成るMIBモジュールで,SNMPエージェント上のMIBを拡張します。
/etc/SnmpAgent.d/snmpd.extendファイルは,RFC1212:Concise MIB Definitionsに定義されたマクロのテンプレートを使用して作成します。したがって,/etc/SnmpAgent.d/snmpd.extendファイルを作成するときは,RFC1212に記述されたAbstract Syntax Notation One(ASN.1)フォーマットに従ってください。なお,インターネット標準MIB-II,HP企業固有MIBおよび日立企業固有MIBのMIBモジュールに関しては,次のファイルを参照してください。
-
/var/opt/OV/share/snmp_mibs/eagent/rfc1213-MIB-II
-
/var/opt/OV/share/snmp_mibs/eagent/hp-unix
-
/var/opt/OV/share/snmp_mibs/eagent/hitachi-cometAgt
-
/var/opt/OV/share/snmp_mibs/eagent/hitachi-cometAgt-aix
-
/var/opt/OV/share/snmp_mibs/eagent/hitachi-cometAgt-linux
-
/var/opt/OV/share/snmp_mibs/eagent/hitachi-cometAgt-solaris
拡張MIBオブジェクトには,非テーブル形式とテーブル形式があります。
- 非テーブル形式
-
MIBオブジェクトに対してその値がユニークに決まります。
- テーブル形式
-
複数のMIBオブジェクト列とエントリー行から成り,MIBオブジェクト列に対してユニークなIDを付けることでエントリーを識別します。したがって,1つのMIBオブジェクトに対してエントリー数分のMIB値を持ちます。
次に,非テーブル形式とテーブル形式の拡張MIBオブジェクトを/etc/SnmpAgent.d/snmpd.extendファイルに作成する方法について説明します。
(1) 非テーブル形式の拡張MIBオブジェクト
使用できるマクロのテンプレートの形式を次に示します。下線部分のフィールドを記述する必要があります。
-
モジュール名
ユーザーが作成したMIBモジュール名を記述します。
-
コメント
コメントを追加するときは,そのコメントの前に2つのダッシュ(--)を記述します。
-
企業名
Internet Assigned Numbers Authorityに登録したenterprise IDを記述します。
- オブジェクト識別子
-
企業名に対応したオブジェクト識別子を記述します。例えば,日立のenterprise IDはhitachiであり,対応するオブジェクト識別子は{enterprises 116}です。
-
ノード名
作成したいMIBオブジェクトのノード名を記述します。ノード名は複数記述でき,他ノードの子になることもできます。
- オブジェクト識別子
-
ノード名に対応した親ノードの名称と作成したいノードのオブジェクト識別子を記述します。
-
オブジェクト
オブジェクトのラベルを記述します。
-
データ型
オブジェクトに対応したデータ型を記述します。SNMPエージェントで使用するデータ型を次の表に示します。
-
アクセス禁止レベル
許可されるアクセスのレベルを記述します。記述できる値を次に示します。
- read-only
-
GetRequestは許可されるがSetRequestは許可されない。
- read-write
-
GetRequestとSetRequestの両方が許可される。
-
条件
実装で要求される条件を記述します。mandatory,optional,obsolete,またはdeprecatedが記述できます。通常はmandatoryを記述します。
-
コメント
オブジェクトに関するコメントを記述します。各ラベルのあとにオブジェクトに関連する情報を記述します。
-
read_command
GetRequestまたはGetNextRequestを受け取ったときに,SNMPエージェントが実行するコマンドを記述します。このコマンドはREAD-COMMANDラベルに記述します。read_commandは完全パス名で記述してください。ACCESSの記述がread-onlyまたはread-writeのときに記述します。結果は標準出力または標準エラー出力に出力してください。
-
コマンドの終了待ち時間〜〈1〜2桁の数字〉((1〜90))《3》
SNMPエージェントがread_commandで記述したコマンドの終了を待つ時間を秒単位で記述します。この値はREAD-COMMAND-TIMEOUTラベルに記述します。コマンドが記述した時間までに終了しない場合,SNMPエージェントはコマンドを強制終了させ,マネージャーに次のようにエラー応答します。
SNMPv1の場合:noSuchName
SNMPv2cの場合:noSuchInstance
この記述は省略できます。省略すると3秒が仮定されます。
-
write_command
SetRequestを受け取ったときに,SNMPエージェントが実行するコマンドを記述します。このコマンドはWRITE-COMMANDラベルで記述します。write_commandは完全パス名で記述してください。ACCESSの記述がread-writeのときに記述します。
-
コマンドの終了待ち時間〜〈1〜2桁の数字〉((-1,1〜90))《3》
SNMPエージェントがwrite_commandで記述したコマンドの終了を待つ時間を秒単位で記述します。この値はWRITE-COMMAND-TIMEOUTラベルに記述します。-1を記述すると,SNMPエージェントはwrite_commandで記述したコマンドの終了を待たないで応答します。コマンドが記述した時間までに終了しない場合,SNMPエージェントはコマンドを強制終了させ,マネージャーに次のようにエラー応答します。
SNMPv1の場合:genErr
SNMPv2cの場合:commitFailed
この記述は省略できます。省略すると3秒が仮定されます。
SNMPエージェントはコマンドを1つずつ処理し,応答を待ってから次のコマンドを処理します。なお,アクセス禁止レベルおよびファイルの読み込み・書き込み許可に関連はありません。
-
親ノード
親になるノード名を記述します。このノード名はすでに定義されているノード名である必要があります。
- 識別番号
-
識別番号には,親ノードに付けたオブジェクトをユニークに識別する番号を記述します。
(2) テーブル形式の拡張MIBオブジェクト
SNMPテーブルはSYNTAX SEQUENCE OFとINDEXの条項を使用して定義します。使用できるマクロのテンプレートの形式を次に示します。下線部分のフィールドを記述する必要があります。この形式は,オブジェクト1とオブジェクト2から成るテーブル形式のMIBオブジェクトをモデルにしています。各フィールドの記述について説明がないものは,非テーブル形式の拡張MIBオブジェクトの定義と同じです。
-
テーブル名
MIBテーブルのラベルを記述します。
-
エントリー・データ型
MIBテーブルエントリーのデータ型を記述します。通常,MIBテーブルエントリーのラベルの先頭文字を大文字にした名称を用います。エントリー・データ型は,MIBテーブルの列要素を表しています。この例では,MIBテーブルの列要素としてオブジェクト1とオブジェクト2を記述しています。
-
file_command
SNMPエージェントがGetRequest,GetNextRequest,またはSetRequestを受け取ったときに,FILE-NAMEラベルに記述したfile_nameを読む前に実行するコマンドを記述します。SetRequestを受け取ったときは,file_nameの読み出しの前後で実行されます。このコマンドはFILE-COMMANDラベルに記述します。file_commandは完全パス名で記述してください。
コマンドの応答が返ってくるまでの監視時間を,extsubagtのオプション(-fcmdguard)に90秒以内で設定できます。省略すると,10秒が仮定されます。監視時間内に,応答が返ってこない場合,SNMPエージェントはこのコマンドをkillし,次のように動作します。
- SNMPv1の場合
-
マネージャーにgenErrをエラー応答
- SNMPv2cの場合
-
get_requestのとき:マネージャーにnoSuchNameをエラー応答※
get_next_requestのとき:マネージャーにEndOfMibViewをエラー応答※
set_requestのとき:マネージャーにgenErrをエラー応答
注※ VarBindの値。ステータスは正常。
extsubagtプロセスのオプションを,起動時,またはsnmpstartコマンド実行時に,常に有効になるように設定できます。extsubagtプロセスのオプションの設定については,「3.1 SNMPエージェントの起動」を参照してください。
-
ファイルコマンドの実行間隔〜〈数字〉((0〜2147483647))《10》
SNMPエージェントがGetRequestまたはGetNextRequestを受け取ったときに,file_commandを最後に実行してからの経過時間がファイルコマンドの実行間隔以内の場合には,コマンドを実行しません。この値は秒単位で,FILE-COMMAND-FREQUENCYラベルに記述します。SetRequestを受け取ったときは,file_commandが最後に実行されてからの時間をチェックしません。この記述はFILE-COMMANDラベルが記述されたときだけ有効です。また,この記述は省略できます。省略すると10秒が仮定されます。
-
pipe_in_name
PIPE-OUT-NAMEラベルに記述したファイルにデータを書き込んだあとに,UNIXプロセスがSNMPエージェントに処理の完了を通知するためのファイルを記述します。このファイルはPIPE-IN-NAMEラベルに記述します。pipe_in_nameは完全パス名で記述してください。
pipe_out_nameにデータを書き込んでから処理結果が書き込まれるまでの監視時間を,extsubagtのオプション(-pipeguard)に90秒以内で設定できます。省略すると,20秒が仮定されます。
また,監視時間の長さによっては,処理結果が書き込まれる前に,次の要求が書き込まれる場合があります。このような場合でも,要求と応答を一致させるために,pipe_in_nameに書き込むデータの先頭に識別番号を付けることができます。識別番号も,extsubagtコマンドのオプション(-invokeid)で指定します。
pipe_in_nameに渡すデータを次の表に示します。
表2‒6 pipe_in_nameに渡すデータ データ項目
渡される値
識別番号
どの要求に対する処理結果かを識別する番号です。extsubagtのオプション(-invokeid)が指定されたときだけ,付けられます。形式は,xxxxxxxxxx.yyyyyyyy(xxxxxxxxxx:通算秒,yyyyyyyy:マイクロ秒)です。
結果コード
0
SNMPエージェントは,pipe_in_nameの内容が0以外(4バイトの数値)のとき,または監視時間内にpipe_in_nameに処理結果が書き込まれないときは,次のように動作します。
- SNMPv1の場合
-
マネージャーにgenErrをエラー応答
- SNMPv2cの場合
-
get_requestのとき:マネージャーにnoSuchNameをエラー応答※
get_next_requestのとき:マネージャーにEndOfMibViewをエラー応答※
set_requestのとき:マネージャーにgenErrをエラー応答
注※ VarBindの値。ステータスは正常。
extsubagtプロセスのオプションを,起動時またはsnmpstartコマンド実行時に,常に有効になるように設定できます。extsubagtプロセスのオプションの設定については,「3.1 SNMPエージェントの起動」を参照してください。
-
pipe_out_name
SNMPエージェントがGetRequest,GetNextRequestまたはSetRequestを受け取ったときに,FILE-NAMEラベルに記述したfile_nameを読む前に,任意のUNIXプロセスにデータを渡すために書き込むファイルを記述します。SetRequestを受け取ったときは,file_nameの読み出しの前後で実行されます。このファイルはPIPE-OUT-NAMEラベルに記述します。pipe_out_nameは完全パス名で記述してください。この記述は省略できます。ただし,PIPE-OUT-NAMEラベルはPIPE-IN-NAMEラベルと対で記述します。また,pipe_in_nameと同様に,pipe_out_nameに書き込むデータの先頭に,識別番号を付けることができます。識別番号はextsubagtプロセスのオプション(-invokeid)で指定します。
pipe_out_nameに渡すデータを次の表に示します。データとデータは,1個の空白で区切られています。データの形式は文字列です。データの終端には"\0"が追加されています。
extsubagtプロセスのオプションを,起動時またはsnmpstartコマンド実行時に,常に有効になるように設定できます。プロセスのオプションの設定については,「3.1 SNMPエージェントの起動」を参照してください。
-
PIPE書き込み間隔〜〈数字〉((0〜2147483647))《10》
SNMPエージェントがGetRequestまたはGetNextRequestを受け取ったときに,pipe_out_nameに最後にデータを書き込んでからの経過時間がPIPE書き込み間隔以内であれば,pipe_out_nameにデータを書き込みません。この値は,秒単位でPIPE-FREQUENCYラベルに記述します。
SetRequestを受け取ったときは,pipe_out_nameに最後に書き込んでからの時間をチェックしません。この記述は,PIPE-IN-NAMEラベルとPIPE-OUT-NAMEラベルの両方が記述されたときにだけ有効です。省略すると10秒が仮定されます。
-
APPEND-COMMUNITY-NAME:{true|false}
trueを記述すると,SNMPエージェントがリクエスト(GetRequest,GetNextRequestまたはSetRequest)を受け取ったときに読み書きするファイルとして,FILE-NAMEラベルに記述したfile_nameに,リクエスト中に含まれるコミュニティ名を付けます。falseを記述したときは,file_nameにコミュニティ名を付けません。この記述はラベルごと省略できます。省略するとfalseが仮定されます。
-
file_name
SNMPエージェントがGetRequest,GetNextRequestまたはSetRequestを受け取ったときに,読み書きするファイルを記述します。このファイルはFILE-NAMEラベルに記述します。file_nameは完全パス名で記述してください。この記述は省略できません。
SNMPエージェントは,file-commandを実行する前,またはpipe_out_nameにデータを書き込む前にファイルが存在しているかどうかをチェックします。ファイルが存在しない場合はエラーとなり,MIB値を取得できません。ファイルのチェックは,ファイルが存在しているかどうかだけをチェックしています。ファイルの内容はチェックしていません。
-
エントリー名
MIBテーブルのエントリーのラベルを記述します。このオブジェクトのシンタクスは,エントリー・データ型で定義されます。このオブジェクト定義のINDEXラベルには,MIBテーブル列の中でエントリー行をユニークに識別できるMIB値を持つMIBオブジェクトを記述します。この例では,オブジェクト1を記述しています。
-
オブジェクト1
以降は,MIBテーブルの列要素のMIBオブジェクト定義について記述します。
(3) 注意事項
/etc/SnmpAgent.d/snmpd.extendファイルは次に示す点でRFCとは異なるため,注意する必要があります。
-
/etc/SnmpAgent.d/snmpd.extendファイルでは,importsとexportsの条項は不要なため,記述しても無視されます。
-
DESCRIPTIONフィールドは必ず記述してください。このフィールドで実行したいコマンドなどを定義してください。コマンドの説明をDESCRIPTIONフィールドに追加しておけば,マネージャーの要求に対して実行しているコマンドの内容を確認できます。
-
DESCRIPTIONフィールド中の各ラベルを2個以上重複して記述すると,2個目以降は1個目のラベルの値として解釈されます。
-
DESCRIPTIONフィールド中の各ラベルは,定義マクロのテンプレートの形式で示した順序で記述してください。誤った順序で記述すると,定義文解析エラーになります。
-
拡張MIBオブジェクト定義機能を使用してテーブル形式の拡張MIBオブジェクトを定義する場合,テーブルの列数は255列以下で定義してください。
-
オブジェクト名およびエントリー名は59文字以下で定義してください。