ページのトップに戻る
Systemwalker Centric Manager/Systemwalker Event Agent Q&A集

7.10 Q:SNMPv2形式の拡張MIBファイルの基本的な文法

対象バージョンレベル

A

SNMPv2形式での拡張MIBの定義方法について説明します。

ここでは以下の形式で説明します。

構文(文法)
-- コメント(構文(文法)の説明)

以下の例にある拡張MIBファイルをSystemwalker Centric Manager上で、実際にコンパイルを行った場合、次のように登録されます。

V2-SAMPLE-MIB DEFINITIONS ::= BEGIN
-- V2-SAMPLE-MIBという名前の拡張MIBであることを表します。
-- この場合、ファイル名は、V2-SAMPLE-MIB.myとする必要があります。
-- 拡張MIBの定義は、
--     拡張MIB名 DEFINITIONS ::= BEGIN
--        ・・・
--        定義
--        ・・・
--     END
-- を1つの組として表します。
-- 仮に、1つのファイル中に複数の組が現れる場合、事前に複数のファイルに
-- 分割する必要があります。
-- たとえば、1つのファイル内に以下のような定義がある場合、
--        MIB1 DEFINTIONS ::= BEGIN
--            ・・・
--            定義
--            ・・・
--        END
--        MIB2 DEFINTIONS ::= BEGIN
--            ・・・
--            定義
--            ・・・
--        END
-- MIB1.myとMIB2.myの2つのファイルに分けます。
--     MIB1.my
--           MIB1 DEFINTIONS ::= BEGIN
--               ・・・
--               定義
--               ・・・
--           END
--     MIB2.my
--           MIB2 DEFINTIONS ::= BEGIN
--                ・・・
--                定義
--                ・・・
--           END

     IMPORTS
         MODULE-IDENTITY, OBJECT-TYPE, OBJECT-IDENTITY,
         NOTIFICATION-TYPE, Counter32, 
         Integer32, TimeTicks                   FROM SNMPv2-SMI

         TEXTUAL-CONVENTION                     FROM SNMPv2-TC

         MODULE-COMPLIANCE, OBJECT-GROUP,
         NOTIFICATION-GROUP                     FROM SNMPv2-CONF;

--   外部宣言された定義を使用することを宣言します。
--     IMPORTS
--           定義1, 定義2   FROM 定義1, 定義2が定義されている拡張MIB名
--           定義3          FROM 定義3が定義されている拡張MIB名
--           定義4, 定義5   FROM 定義4, 定義5が定義されている拡張MIB名;
--               ~~~                                                 ~~~
--      複数の定義はカンマで区切る。                  最後のみ、セミコロンで終了する。

sampleOwn MODULE-IDENTITY
     LAST-UPDATED "20031217Z"
     ORGANIZATION "Sample MIB"
     CONTACT-INFO
         "PFU2
         Phone: +999-999-999
         Fax:   +999-999-999
         Email: xxx@domain_name"
     DESCRIPTION
         "description1"

     REVISION "20031218Z"
     DESCRIPTION
         "revision1: xxx"
     REVISION "20031219Z"
     DESCRIPTION
         "revision2: yyy"
     ::= { enterprises 100 }
--   sampleOwnを定義しています。
--   SMI-V2形式の場合、最初の定義は、定義の先頭(IMPORT句の直後)に、
--   必ず、MODULE-IDENTITY句にて行う必要があります。
--   名前は、次のルールに従う必要があります。
--           小文字の英字で始まる、英数字文字列でなければなりません。
--           -を使ってはいけません。
--           ユニークな名前でなければなりません。
--   MODULE-IDENTITY句で定義を行う場合、以下の属性は必須となります。
--      ・ LAST-UPDATED
--      ・ ORGANIZATION
--      ・ CONTACT-INFO
--      ・ DESCRIPTION
--      ※ 属性の定義順を入れ替えることはできません。
--         必ず、この順番で定義してください。
--         また、各属性に記述する値はダブルクォーテーションで囲む必要があります。
--   また、任意で
--      ・ REVISION
--      ・ DESCRIPTION
--      ※ 属性の定義順を入れ替えることはできません。
--         必ず、この順番で定義してください。
--         また、各属性に記述する値はダブルクォーテーションで囲む必要があります。
--   を1組として更新履歴を付加することができます。
--
--   ::= { enterprises 100 }は、
--   sampleOwnの識別子は、enterprises.100であるということを表し、
--   enterprisesの下にsampleOwnが100という識別子で存在することを示します。
--   enterprisesの識別子は、1.3.6.1.4.1ですので、
--   sampleOwnは、1.3.6.1.4.1.100と書くことができます。
--
--   enterprisesは
--   iso(1)-org(3)-dod(6)-internet(1)-private(4)-enterprises(1)
--   という階層構造をとっていますので、
--   sampleOwnは
--   iso(1)-org(3)-dod(6)-internet(1)-private(4)-enterprises(1)-sampleOwn(100)
--   という階層構造になります。
--
--   MODULE-IDENTITY句のより詳細な説明は、RFC1442を参照してください。


     sampleChild1 OBJECT IDENTIFIER ::= { sampleOwn 10 }
--   sampleOwnの子として、sampleChild1を定義します。
--   sampleChild1の識別子は、sampleOwn.100であるとしています。
--   1.3.6.1.4.1.100.10と表すこともできます。
--
--   定義する名前は、次のルールに従う必要があります。
--           小文字の英字で始まる、英数字文字列でなければなりません。
--           -を使ってはいけません。
--           ユニークな名前でなければなりません。
--
--   OBJECT IDENTIFIER句のより詳細な説明は、RFC1155を参照してください。

SampleString ::= TEXTUAL-CONVENTION
     STATUS     current
     DESCRIPTION
         "this type is string for sample"
     SYNTAX     OCTET STRING (SIZE (0..127))
--   TEXTUAL-CONVENTION句により、独自の型を定義することができます。
--   ここでは、サイズ127のOCTET-STRING型と同じ意味を持つ、SampleString型を定義しています。
--   TEXTUAL-CONVENTION句で定義を行う場合、
--   以下の属性は必須となります。
--      ・ STATUS
--      ・ DESCRIPTION
--      ・ SYNTAX
--      ※ 属性の定義順を入れ替えることはできません。
--         必ず、この順番で定義してください。
--         各属性については、sampleObjectの説明にて、より詳細な説明が記載してあります。
--   TEXTUAL-CONVENTION句にて定義される名前は、次のルールに従う必要があります。
--           大文字の英字で始まる、英数字およびハイフン(-)で構成される文字列でなければなりません。
--           ユニークな名前でなければなりません。
--
--   TEXTUAL-CONVENTION句のより詳細な説明は、RFC1443を参照してください。


     SampleStatus ::= TEXTUAL-CONVENTION
     STATUS current
     DESCRIPTION
         "this type is enumlation for sample"
     SYNTAX INTEGER {
            status1(1),
            status2(2),
            status3(3),
            status4(4)
     }
--   ここでは、status1/status2/status3/status4のいずれかの整数をとる、
--   SampleStatus型を定義しています。


     sampleGrandChild1       OBJECT IDENTIFIER ::= { sampleChild1 1 }
     sampleGrandChild2       OBJECT IDENTIFIER ::= { sampleChild1 2 }
     sampleGrandChild3       OBJECT IDENTIFIER ::= { sampleChild1 10 }
--   ここでは、sampleChild1の1階層下に、sampleGrandChild1/sampleGrandChild2/sampleGrandChild3
--   を定義しています。


 sampleObject OBJECT-TYPE
     SYNTAX     Integer32
     MAX-ACCESS read-only
     STATUS     current
     DESCRIPTION
         "this is sample object."
     ::= { sampleGrandChild1 1 }
--   OBJECT-TYPE句により、オブジェクトを定義することができます。
--   ::= { sampleGrandChild1 1 }では、sampleGrandChild1の1階層下に
--   1という識別子で、sampleObjectを作成することを示します。
--   OBJECT-TYPE句により定義される名前は、次のルールに従う必要があります。
--         小文字の英字で始まる、英数字およびハイフン(-)で構成される文字列でなければなりません。
--         ユニークな名前でなければなりません。
--
--   OBJECT-TYPE句で定義を行う場合、以下の属性は必須となります。
--      ・ SYNTAX
--            オブジェクトのデータ構造を定義します。
--            ・SYNTAX Integer32
--                  -2147483648~2147483647の間の整数を取り扱うことを表します。
--                  SYNTAX Integer32(0..255)とした場合、とり得る値は、0~255として指定できます。
--            ・SYNTAX INTEGER
--                  基本的には、Integer32と同一ですが、列挙型を表す場合や、
--                  Integer32をより抑制して使いたい場合に用いられます。
--                  SYNTAX INTEGER(0..255)のように、サイズ指定を行う必要があり、
--                  サイズ指定を省略するとコンパイルエラーとなります。
--                  列挙型を表す場合、
--                  SYNTAX INTEGER {
--                      enum1(1),
--                      enum2(2),
--                      enum3(5)
--                  }
--                  とします。
--                  このとき、enum1(値は1), enum2(値は2), enum3(値は5)のいずれかを
--                  とる型になります。
--            ・SYNTAX OCTET STRING
--                  任意のバイナリデータ・テキストデータを取り扱うことを表します。
--                  SYNTAX     OCTET STRING (SIZE (0..127))とすることにより、
--                  長さを規定することができます。(この例ですと、0~127文字)
--            ・SYNTAX BITS
--                  サポート対象外であるため、使用することができず、コンパイルエラーとなります。
--                  INTEGER型で代用してください。( SYNTAX BITS -> SYNTAX INTEGER )
--            ・SYNTAX Counter32
--                  Counter32は値が上限を超えた場合にゼロに戻り、増加することのみを前提とした
--                  0~2^32-1(4294967295)の整数を取り扱うことを表します。
--                  この場合、MAX-ACCESSはread-onlyでなければなりません。
--                  SYNTAX Counter32(0..255)とした場合、とり得る値は、0~255として指定できます。
--            ・SYNTAX Gauge32
--                  負でない整数(それは増加するかもしれないし減少するかもしれない)であり、最大の値を
--                  超過しない0~2^32-1(4294967295)の整数を取り扱うことを表します。
--            ・SYNTAX Counter64
--                  サポート対象外であるため、使用することができず、コンパイルエラーとなります。
--                  Counter32型で代用してください。( SYNTAX Counter64 -> SYNTAX Counter32 )
--            ・SYNTAX UInteger32
--                  0~4294967295の間の整数を取り扱うことを表します。
--                  SYNTAX UInteger32(0..255)とした場合、とり得る値は、0~255として指定できます。
--            ・その他
--                  ここでは、基本的なもののみをピックアップして説明してありますので、
--                  上記以外の型を指定することができます。
--      ・ MAX-ACCESS
--            オブジェクトのアクセス権を定義します。
--            指定できる値は、
--                  ・not-accessible
--                  ・read-only
--                  ・read-write
--                  ・read-create

--            のいずれかになります。
--      ・ STATUS
--            オブジェクトの状態を定義します。
--            指定できる値は、
--                  ・current
--                  ・obsolete
--                  ・deprecated
--            のいずれかになります。
--      ・ DESCRIPTION
--            オブジェクトの定義を表します。
--            ダブルクォーテーションで囲まれた範囲に記述します。
--                 例) "xxxxxxxxxxxxxxxxxxxxxxxxxx
--                      yyyyyyyyyyyyyyyyyyyyyyyyyy"
--      ※ 属性の定義順を入れ替えることはできません。
--         必ず、この順番(SYNTAX,MAX-ACCESS,STATUS,DESCRIPTIONの順)で定義してください。
--
--   OBJECT-TYPE句のより詳細な説明は、RFC1442を参照してください。


 sampleTable OBJECT-TYPE
     SYNTAX     SEQUENCE OF SampleEntry
     MAX-ACCESS not-accessible
     STATUS     current
     DESCRIPTION
         ""
     ::= { sampleGrandChild2 1 }
--   sampleTableは、テーブル型のオブジェクトとして定義されます。
--   このテーブルを構成するメンバは、"SYNTAX  SEQUENCE OF"にて定義されます。
--   この場合ですと、SampleEntryが構成するメンバを表します。
--   SampleEntryは、下記にて、entryIndexとentrySourceを含むことが定義されています。
--   ::= { sampleGrandChild2 1 }は、sampleTableがsampleGrandChild2の1階層下に1という識別子で
--   存在することを示します。


 sampleStatusEntry OBJECT-TYPE
     SYNTAX     SampleEntry
     MAX-ACCESS not-accessible
     STATUS     current
     DESCRIPTION
         ""
     INDEX { entryIndex }
     ::= { sampleTable 1 }
--   sampleStatusEntryは、上で定義しましたsampleTable型のオブジェクトであり、かつ、
--   配列型のオブジェクトであることを表します。
--   (つまり、sampleTable配列型)
--   INDEX節により、この配列の各要素の識別情報を定義します。
--   ここでは、SampleEntryのメンバである、entryIndexが識別情報を表すことになります。
--   ::= { sampleTable 1 }は、sampleStatusEntryがsampleTableの1階層下に1という識別子で
--   存在することを示します。


 SampleEntry ::= SEQUENCE {
     entryIndex                Integer32,
     entrySource               OCTET STRING
 }
--   SEQUENCEにより、テーブルの構成を定義します。
--   文法は次のようになります。
--           <EntryType> ::= SEQUENCE { <type1>, ... , <typeN> }
--   ここでは、sampleTableの型を表すSampleEntryを定義しています。
--   SampleEntryは、entryIndexとentrySourceというメンバで構成されます。
--   SEQUENCEにて定義される名前は、次のルールに従う必要があります。
--           大文字の英字で始まる、英数字およびハイフン(-)で構成される文字列でなければなりません。
--           ユニークな名前でなければなりません。
--
--   より詳細な説明は、RFC1442を参照してください。


 entryIndex OBJECT-TYPE
     SYNTAX     Integer32 (1..65535)
     MAX-ACCESS read-only
     STATUS     current
     DESCRIPTION
         ""
     ::= { sampleStatusEntry 1 }
--   SampleEntryを構成するメンバであるentryIndexを定義します。
--   sampleStatusEntryの1階層下に1という識別子で存在することを示します。

 entrySource OBJECT-TYPE
     SYNTAX     OCTET STRING
     MAX-ACCESS read-create
     STATUS     current
     DESCRIPTION
         ""
     ::= { sampleStatusEntry 2 }
--   SampleEntryを構成するメンバであるentrySourceを定義します。
--   sampleStatusEntryの1階層下に2という識別子で存在することを示します。

END
-- このENDは、拡張MIBの定義の終わりを表します。

注意

この拡張MIBファイルはサンプルであり、実際にコンパイルを行うこと、および、運用環境で使用されることを想定したものではございません。

この拡張MIBファイルに対してコンパイルを行った場合、および、実運用で使用したことにより発生する問題については一切責任を負いかねますので予めご了承ください。

Systemwalker Centric Managerでは、Unsigned32をサポートしていません。Unsigned32を使用している場合はUInteger32/Counter32に置き換えてください。