順調に進んでいるようですね。テーブルを別のテーブルの子として定義するには、親のインデックスと子のインデックスでインデックスを作成します(たとえば、0.1.8.23.7.2.42
は2
親インデックス、42
は子インデックスです)。
たとえば、次のように親を定義できます。
parentTable OBJECT-TYPE
SYNTAX SEQUENCE OF parentEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Parent table"
::= { example 1 }
parentEntry OBJECT-TYPE
SYNTAX ParentEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Entry in Parent table"
INDEX { parentIndex }
::= { parentTable 1 }
ParentEntry ::= SEQUENCE {
parentIndex Unsigned32,
-- other columns in the table
}
-- define the columns in the parent table
次のように定義された子テーブルを使用します。
childTable OBJECT-TYPE
SYNTAX SEQUENCE OF childEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Child table"
::= { example 2 }
childEntry OBJECT-TYPE
SYNTAX ChildEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Entry in Child table"
INDEX { parentIndex,
childIndex }
::= { childTable 1 }
ChildEntry ::= SEQUENCE {
childIndex Unsigned32,
-- other columns in the table
}
-- define the columns in the child table
すでにMIBの他の場所で宣言されているため、ChildEntryシーケンスにparentIndexをリストする必要はないことに注意してください。
この方法はうまく機能し、SNMPウォークにも問題なく応答します。
必要な構造を正確に定義していると思われるMIBができたらsmilint
、Linuxマシンを使用しているか、cygwinがインストールされているか、オンラインで検証できるかを使用して検証できます。
アップデート
このパターンは、より深いネストにも機能します。
孫テーブルは次のように定義できます。
grandChildTable OBJECT-TYPE
SYNTAX SEQUENCE OF grandChildEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Grandchild table"
::= { example 3 }
grandChildEntry OBJECT-TYPE
SYNTAX GrandChildEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Entry in Grandchild table"
INDEX { parentIndex,
childIndex,
grandChildIndex }
::= { grandChildTable 1 }
grandChildEntry ::= SEQUENCE {
grandChildIndex Unsigned32,
-- other columns in the table
}
-- define the columns in the grandChild table
ネストの深さの唯一の制限は、最大OID長(127であると私は信じています)です。列のベースOID長とテーブルのインデックスの数は、最大OID長よりも小さくする必要があります。
注意すべきもう1つの項目は、各レベルに複数の兄弟が存在する可能性があることです。
2番目の子は次のように定義できます。
secondchildTable OBJECT-TYPE
SYNTAX SEQUENCE OF secondchildEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Second child table"
::= { example 4 }
secondchildEntry OBJECT-TYPE
SYNTAX SecondchildEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Entry in Second child table"
INDEX { parentIndex,
secondchildIndex }
::= { secondchildTable 1 }
SecondchildEntry ::= SEQUENCE {
secondchildIndex Unsigned32,
-- other columns in the table
}
-- define the columns in the second child table