SNMP:ASN.1 MIB定义.引用表中的表

Dou*_*oug 13 snmp asn.1

自从我编写ASN.1以来已经有一段时间了.

我们的数据模型由表中的几个表定义组成.这在SNMP中不可行,因此我们需要展平定义.最简单的方法是使嵌入式表由与父表相同的OID索引.从而

someTableEntry ::= SEQUENCE {
   someTableIndex
        Integer32,
   someTableDomain
        Integer32,
   someTableFooTable
        SEQUENCE OF SomeTableFooTable
} 
Run Code Online (Sandbox Code Playgroud)

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

someTableFooTable ::= SEQUENCE {
    someTableIndex
       Integer32,
....
} 
Run Code Online (Sandbox Code Playgroud)

好处是在我们的应用程序中不会有任何类型的SET,GET或GET NEXT因此不需要SNMP walk(有一些非常好的理由可以取代网络管理优雅的需要.所有属性都将被报告仅通过陷阱.我认为这是一个有效的SNMP MIB定义,但希望得到一些反馈.

提前致谢.

los*_*ebo 20

听起来你走在正确的轨道上.为了将表定义为另一个表的子项,您只需通过父索引加上子索引(例如,父索引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
Run Code Online (Sandbox Code Playgroud)

将子表定义为:

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
Run Code Online (Sandbox Code Playgroud)

请注意,没有必要在ChildEntry序列中列出parentIndex,因为它已经在MIB中的其他地方声明.

这种方法运行良好,甚至可以毫无问题地响应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
Run Code Online (Sandbox Code Playgroud)

嵌套深度的唯一限制是最大OID长度(我认为,这是127):列的基本OID长度加上表的索引数必须小于最大OID长度.

另外需要注意的一点是,每个级别都可以有多个兄弟姐妹.

第二个孩子可以定义为:

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
Run Code Online (Sandbox Code Playgroud)

  • @TheJuice:是的,这个原则适用于深度最大OID长度的儿童餐桌(我认为是127).正如您猜测的那样,每个额外的级别都会有另一个索引.我将编辑我的答案以包含一个示例.我不知道有任何更好的方法来管理更深层次的层次结构. (3认同)