自从我编写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)