SNMP中带多索引的RowPointer格式规范咨询
关于SNMP RowPointer多索引格式及设计逻辑的澄清
RFC 2579中RowPointer的定义
RFC 2579第2节对RowPointer的定义如下:
RowPointer ::= TEXTUAL-CONVENTION STATUS current DESCRIPTION "Represents a pointer to a conceptual row. The value is the name of the instance of the first accessible columnar object in the conceptual row. For example, ifIndex.3 would point to the 3rd row in the ifTable (note that if ifIndex were not-accessible, then ifDescr.3 would be used instead)." SYNTAX OBJECT IDENTIFIER
单索引RowPointer的格式
RFC给出的单索引示例格式为:
OID-to-table-entry.OID-of-index.value-of-index
比如ifIndex.3的完整OID是.1.3.6.1.2.1.2.2.1.1.3,其中.1.3.6.1.2.1.2.2.1.1是ifTable索引ifIndex的OID,.3是索引值。
多索引RowPointer的正确格式
针对多索引场景,正确的格式是你设想的第二种:
OID-to-table-entry.OID-of-index-1.value-of-index-1.value-of-index-2...
不需要重复追加后续索引的OID。
原因是:RowPointer的核心要求是指向行内第一个可访问列对象的实例OID,而SNMP多索引表中,列对象的实例OID本身就是「列OID + 所有索引值(按顺序)」的结构,因此直接取第一个可访问列的完整实例OID,就足以通过索引值定位到整行。
举个实际例子:假设存在双索引表exampleTable,第一个可访问列是exampleIndex1(OID为.1.3.6.1.4.1.XXX.1.1.1),第二个索引为exampleIndex2,某一行的索引值为5和10,那么该行的RowPointer就是:
.1.3.6.1.4.1.XXX.1.1.1.5.10
为何用特定对象OID指向整行
SNMP的概念行本身没有独立的OID,必须通过行内的对象实例来定位。RowPointer的设计逻辑就是:只要能定位到行内第一个可访问对象的实例,就能通过它的索引值推导出整行的所有对象——因为同一行的所有列对象都会共享相同的索引值组合。所以哪怕这个OID指向的是单个对象,其索引部分已经唯一标识了整行,完全符合RowPointer指向整行的需求。
内容的提问来源于stack exchange,提问作者WakkaTrout
相关产品推荐
相关产品推荐

