SNMP嵌套表定义在父表下一层



正如这篇文章和这篇笔记中所描述的,可以用以下结构对SNMP中的嵌套表进行建模:

parentTable ... ::= { parentNode 1 } -- using index x
childTable  ... ::= { parentNode 2 } -- using index x and y

那是父表和子表在同一节点下注册(即在同一级别),这是我想避免的(主要是因为它在这个节点上腰一个OID,这在我正在处理的应用程序中是有问题的)。

我的问题是:是否有可能做完全相同的,唯一的区别是我在parentNode的子节点注册子表?它看起来像这样:

subNode OBJECT IDENTIFIER ::= { parentNode 512 }
parentTable ... ::= { parentNode 1 } -- using index x
childTable  ... ::= { subNode 1 }    -- using index x and y
如果这种语法是有效的,它是否具有与第一个版本相同的属性(删除parentNode中的原始数据也会删除childNode中的相应原始数据)?

详细说明请参考链接https://sourceforge.net/p/net-snmp/mailman/message/24158139/

感谢chenyapu引用自优秀的书理解SNMP mib (第277页):

SNMP SMI不允许MIB写入器声明一个对象表是一个数组(ASN.1序列)。这种限制被称为"不"在SNMP社区中,"表中表"是一个常见的来源

试试!您的MIB编译器应该告诉您它是否有效。

如果你没有使用MIB编译器,你真的应该使用!将无效的MIB文件发布到世界上是非常糟糕的形式,因此您应该采取一切预防措施。(嗯,在这里发帖是个好的开始。)由于SNMP实际上不允许您破坏MIB的任何用户的向后兼容性,因此如果您的MIB已经分发给更广泛的受众,即使删除非法结构也会造成麻烦。

当涉及到"父"one_answers"子"表索引时,我觉得它听起来就像SNMP中通常所说的"增强表"。您必须使用AUGMENTS关键字定义childTable。如果这不是你想象中的情况,请告诉我。来自WebNMS API文档:

当一个表的行与另一个表的行之间存在一对一的依赖关系时,就会出现增广表。在这种情况下,一个表是基表,另一个是增表。当一个特定的MIB导入另一个MIB并共享同一个表时,可能会出现这种情况。一个典型的例子是IF-MIB引入了RFC 1213-MIB中定义的组接口,对RFC 1213-MIB中定义的ifTable进行了扩充。

我的直觉是你的构造是完全合法的。MIB树看起来是这样的,我已经见过很多次类似的树。我不认为索引是一个问题,他们应该真的不重要。

parentNode (1)
|
|-parentTable(1.1)
| |
| |-x(1.1.1)
| -secondColumn(1.1.2)
-subNode(1.512)
   |
   -childTable(1.512.1)
      |
      |-x(1.1.1)
      |-y(1.512.1.1)
      -someData(1.512.1.2)

至于表的语义,是的,增加表意味着当在parentTable中删除一行时,相应的数据应该从childTable中删除。您的MIB实现需要确保这种情况发生。

最新更新