16

私がASN.1を書いたのは久しぶりです。

私たちのデータモデルは、テーブル内のいくつかのテーブル定義で構成されています。これはSNMPでは機能しないため、定義をフラット化する必要があります。これを行う最も簡単な方法は、親テーブルと同じOIDで埋め込みテーブルにインデックスを付けることです。したがって

someTableEntry ::= SEQUENCE {
   someTableIndex
        Integer32,
   someTableDomain
        Integer32,
   someTableFooTable
        SEQUENCE OF SomeTableFooTable
} 

になります

    someTableEntry ::= SEQUENCE {
       someTableIndex
            Integer32,
       someTableDomain
            Integer32,
    } 

someTableFooTable ::= SEQUENCE {
    someTableIndex
       Integer32,
....
} 

良い点は、このアプリケーションではSET、GET、またはGET NEXTがまったく存在しないため、SNMPウォークが不要になることです(これには、ネットワーク管理の優雅さの必要性に取って代わる非常に良い理由がいくつかあります。すべての属性が報告されます。トラップ経由のみ。これは有効なSNMPMIB定義だと思いますが、フィードバックを取得したいと思います。

前もって感謝します。

4

1 に答える 1

24

順調に進んでいるようですね。テーブルを別のテーブルの子として定義するには、親のインデックスと子のインデックスでインデックスを作成します(たとえば、0.1.8.23.7.2.422親インデックス、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
于 2010-03-24T18:20:36.667 に答える