Hitachi

JP1 Version 12 JP1/Extensible SNMP Agent


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モジュールに関しては,次のファイルを参照してください。

拡張MIBオブジェクトには,非テーブル形式とテーブル形式があります。

非テーブル形式

MIBオブジェクトに対してその値がユニークに決まります。

テーブル形式

複数のMIBオブジェクト列とエントリー行から成り,MIBオブジェクト列に対してユニークなIDを付けることでエントリーを識別します。したがって,1つのMIBオブジェクトに対してエントリー数分のMIB値を持ちます。

次に,非テーブル形式とテーブル形式の拡張MIBオブジェクトを/etc/SnmpAgent.d/snmpd.extendファイルに作成する方法について説明します。

〈この項の構成〉

(1) 非テーブル形式の拡張MIBオブジェクト

使用できるマクロのテンプレートの形式を次に示します。下線部分のフィールドを記述する必要があります。

[図データ]

  1. モジュール名

    ユーザーが作成したMIBモジュール名を記述します。

  2. コメント

    コメントを追加するときは,そのコメントの前に2つのダッシュ(--)を記述します。

  3. 企業名

    Internet Assigned Numbers Authorityに登録したenterprise IDを記述します。

    オブジェクト識別子

    企業名に対応したオブジェクト識別子を記述します。例えば,日立のenterprise IDはhitachiであり,対応するオブジェクト識別子は{enterprises 116}です。

  4. ノード名

    作成したいMIBオブジェクトのノード名を記述します。ノード名は複数記述でき,他ノードの子になることもできます。

    オブジェクト識別子

    ノード名に対応した親ノードの名称と作成したいノードのオブジェクト識別子を記述します。

  5. オブジェクト

    オブジェクトのラベルを記述します。

  6. データ型

    オブジェクトに対応したデータ型を記述します。SNMPエージェントで使用するデータ型を次の表に示します。

    表2‒5 データ型

    データ型

    意味

    INTEGER※1

    0を含む正負の整数から成る簡易型。ラベルに0の値は使用できません。

    OCTET STRING

    0以上のオクテットを取る簡易型。各オクテットは8ビット列です。

    OBJECT IDENTIFIER

    オブジェクト名の公認された記述型。

    例:1.3.6.1.2.1.1.0

    NULL

    空の値。NULLはほとんど使用されません。

    NetworkAddress

    IPアドレスを表す型。

    Counter※2

    変化を計算し最大値になるまで増加して最大値で0に戻る非負整数を表す型。最大値になって0に戻ると再び増加を始めます。

    Counter64

    最大値が264-1であるCounter型。

    Gauge※2

    増加または減少しますが,最大値になっても0に戻らないで止まる非負整数を表す型。

    TimeTicks※2

    ある時点からの時間を1/100秒単位で計算する非負整数を表す型。

    Opaque

    任意の符号化を表す型。

    DisplayString

    NVT ASCII文字セットから取得できるテキスト情報を表す型。

    PhysAddress

    媒体アドレスを表す型。多くの媒体では2進表現になります。

    例:インターネットアドレスは6オクテットのストリング

    注※1

    最大値は231-1です。

    注※2

    最大値は232-1です。

  7. アクセス禁止レベル

    許可されるアクセスのレベルを記述します。記述できる値を次に示します。

    read-only

    GetRequestは許可されるがSetRequestは許可されない。

    read-write

    GetRequestとSetRequestの両方が許可される。

  8. 条件

    実装で要求される条件を記述します。mandatory,optional,obsolete,またはdeprecatedが記述できます。通常はmandatoryを記述します。

  9. コメント

    オブジェクトに関するコメントを記述します。各ラベルのあとにオブジェクトに関連する情報を記述します。

  10. read_command

    GetRequestまたはGetNextRequestを受け取ったときに,SNMPエージェントが実行するコマンドを記述します。このコマンドはREAD-COMMANDラベルに記述します。read_commandは完全パス名で記述してください。ACCESSの記述がread-onlyまたはread-writeのときに記述します。結果は標準出力または標準エラー出力に出力してください。

  11. コマンドの終了待ち時間〜〈1〜2桁の数字〉((1〜90))《3》

    SNMPエージェントがread_commandで記述したコマンドの終了を待つ時間を秒単位で記述します。この値はREAD-COMMAND-TIMEOUTラベルに記述します。コマンドが記述した時間までに終了しない場合,SNMPエージェントはコマンドを強制終了させ,マネージャーに次のようにエラー応答します。

    SNMPv1の場合:noSuchName

    SNMPv2cの場合:noSuchInstance

    この記述は省略できます。省略すると3秒が仮定されます。

  12. write_command

    SetRequestを受け取ったときに,SNMPエージェントが実行するコマンドを記述します。このコマンドはWRITE-COMMANDラベルで記述します。write_commandは完全パス名で記述してください。ACCESSの記述がread-writeのときに記述します。

  13. コマンドの終了待ち時間〜〈1〜2桁の数字〉((-1,1〜90))《3》

    SNMPエージェントがwrite_commandで記述したコマンドの終了を待つ時間を秒単位で記述します。この値はWRITE-COMMAND-TIMEOUTラベルに記述します。-1を記述すると,SNMPエージェントはwrite_commandで記述したコマンドの終了を待たないで応答します。コマンドが記述した時間までに終了しない場合,SNMPエージェントはコマンドを強制終了させ,マネージャーに次のようにエラー応答します。

    SNMPv1の場合:genErr

    SNMPv2cの場合:commitFailed

    この記述は省略できます。省略すると3秒が仮定されます。

    SNMPエージェントはコマンドを1つずつ処理し,応答を待ってから次のコマンドを処理します。なお,アクセス禁止レベルおよびファイルの読み込み・書き込み許可に関連はありません。

  14. 親ノード

    親になるノード名を記述します。このノード名はすでに定義されているノード名である必要があります。

    識別番号

    識別番号には,親ノードに付けたオブジェクトをユニークに識別する番号を記述します。

(2) テーブル形式の拡張MIBオブジェクト

SNMPテーブルはSYNTAX SEQUENCE OFとINDEXの条項を使用して定義します。使用できるマクロのテンプレートの形式を次に示します。下線部分のフィールドを記述する必要があります。この形式は,オブジェクト1とオブジェクト2から成るテーブル形式のMIBオブジェクトをモデルにしています。各フィールドの記述について説明がないものは,非テーブル形式の拡張MIBオブジェクトの定義と同じです。

[図データ]

  1. テーブル名

    MIBテーブルのラベルを記述します。

  2. エントリー・データ型

    MIBテーブルエントリーのデータ型を記述します。通常,MIBテーブルエントリーのラベルの先頭文字を大文字にした名称を用います。エントリー・データ型は,MIBテーブルの列要素を表しています。この例では,MIBテーブルの列要素としてオブジェクト1とオブジェクト2を記述しています。

  3. 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エージェントの起動」を参照してください。

  4. ファイルコマンドの実行間隔〜〈数字〉((0〜2147483647))《10》

    SNMPエージェントがGetRequestまたはGetNextRequestを受け取ったときに,file_commandを最後に実行してからの経過時間がファイルコマンドの実行間隔以内の場合には,コマンドを実行しません。この値は秒単位で,FILE-COMMAND-FREQUENCYラベルに記述します。SetRequestを受け取ったときは,file_commandが最後に実行されてからの時間をチェックしません。この記述はFILE-COMMANDラベルが記述されたときだけ有効です。また,この記述は省略できます。省略すると10秒が仮定されます。

  5. 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エージェントの起動」を参照してください。

  6. 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"が追加されています。

    表2‒7 pipe_out_nameに渡すデータ

    データ項目

    渡される値

    識別番号

    どの要求かを識別するための番号。extsubagtのオプション(-invokeid)が指定されたときだけ付けられます。形式は,xxxxxxxxxx.yyyyyyyy(xxxxxxxxxx:通算秒,yyyyyyyy:マイクロ秒)です。

    マネージャーのIPアドレス

    マネージャーのIPアドレス。インターネットのドット記法で表現されます。

    コミュニティ名

    リクエスト中のコミュニティ名。

    オブジェクト識別子

    リクエスト中のオブジェクト識別子。ドット記法で表現されます。

    オブジェクトのシンタクス

    リクエスト中のオブジェクトのシンタクス。次のどれかの値が渡されます。

    Integer,OctetString,ObjectIdentifier,Null,NetworkAddress,IpAddress,Counter,Counter64,Gauge,TimeTicks,Opaque,DisplayString,PhysAddress

    PDUタイプ

    リクエストの種類。次のどれかの値が渡されます。

    GetRequest,GetNextRequest,SetRequest,PostSetRequest

    PostSetRequestは,file_nameの読み出したあとに渡される値です。

    インスタンス名

    リクエスト中の接尾辞。

    Set値

    SetRequestの場合,SetRequest中のSet値が渡されます。

    extsubagtプロセスのオプションを,起動時またはsnmpstartコマンド実行時に,常に有効になるように設定できます。プロセスのオプションの設定については,「3.1 SNMPエージェントの起動」を参照してください。

  7. 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秒が仮定されます。

  8. APPEND-COMMUNITY-NAME:{true|false}

    trueを記述すると,SNMPエージェントがリクエスト(GetRequest,GetNextRequestまたはSetRequest)を受け取ったときに読み書きするファイルとして,FILE-NAMEラベルに記述したfile_nameに,リクエスト中に含まれるコミュニティ名を付けます。falseを記述したときは,file_nameにコミュニティ名を付けません。この記述はラベルごと省略できます。省略するとfalseが仮定されます。

  9. file_name

    SNMPエージェントがGetRequest,GetNextRequestまたはSetRequestを受け取ったときに,読み書きするファイルを記述します。このファイルはFILE-NAMEラベルに記述します。file_nameは完全パス名で記述してください。この記述は省略できません。

    SNMPエージェントは,file-commandを実行する前,またはpipe_out_nameにデータを書き込む前にファイルが存在しているかどうかをチェックします。ファイルが存在しない場合はエラーとなり,MIB値を取得できません。ファイルのチェックは,ファイルが存在しているかどうかだけをチェックしています。ファイルの内容はチェックしていません。

  10. エントリー名

    MIBテーブルのエントリーのラベルを記述します。このオブジェクトのシンタクスは,エントリー・データ型で定義されます。このオブジェクト定義のINDEXラベルには,MIBテーブル列の中でエントリー行をユニークに識別できるMIB値を持つMIBオブジェクトを記述します。この例では,オブジェクト1を記述しています。

  11. オブジェクト1

    以降は,MIBテーブルの列要素のMIBオブジェクト定義について記述します。

(3) 注意事項

/etc/SnmpAgent.d/snmpd.extendファイルは次に示す点でRFCとは異なるため,注意する必要があります。