object names/descriptors 在 SNMP MIB 模块中必须是唯一的吗?

Must object names/descriptors be unique within an SNMP MIB module?

我有一个 vendor-provided MIB 文件,其中在同一 MIB 的两个不同表中定义了相同的 object name/descriptor。不幸的是,我认为 MIB 是专有的,不能 post 完整地显示在这里。所以我创建了一个类似的示例 Foobar.mib 文件,我在 post.

的末尾包含了该文件

我的问题是:这样的 MIB 是否可以合法或被视为有效?

Net::SNMP 可以打印它的树,它看起来像这样:

+--foobar(12345678)
   |
   +--foo(1)
   |  |
   |  +--fooTable(1)
   |     |
   |     +--fooEntry(1)
   |        |  Index: fooIndex
   |        |
   |        +-- -R-- INTEGER   fooIndex(1)
   |        +-- -R-- String    commonName(2)
   |
   +--bar(2)
      |
      +--barTable(1)
         |
         +--barEntry(1)
            |  Index: barIndex
            |
            +-- -R-- INTEGER   barIndex(1)
            +-- -R-- String    commonName(2)

注意现在 commonNamefooTablebarTable 中都有定义 非常相同的 MIB(见下面我的示例 Foobar.mib)。

这让 Net::SNMP 感到困惑,因为 FooBarMib::commonName 现在可以表示两个不同的 OID。

在供应商的错误报告中将 link 包含到 RFC 中会很棒。

我发现 RFC 1155 - Structure and identification of management information for TCP/IP-based internets 说:

Each OBJECT DESCRIPTOR corresponding to an object type in the internet-standard MIB shall be a unique, but mnemonic, printable string. This promotes a common language for humans to use when discussing the MIB and also facilitates simple table mappings for user interfaces.

这是否仅适用于“internet-standard MIB”,因此不适用于供应商 MIB?

我还发现 RFC 2578 - Structure of Management Information Version 2 (SMIv2) 上面写着:

For all descriptors appearing in an information module, the descriptor shall be unique and mnemonic, and shall not exceed 64 characters in length.

但是 SNMP v1 代理的 MIB 是否也必须遵守 RFC 2578? SNMP 代理 无论出于何种原因,实施 MIB 仅支持 SNMP v1。和RFC 2578 在标题中有 SMIv2,其中 2 让我有点担心。但是 MIB 本身确实从 SMIv2 FWIW 导入。

我发现了两个 Internet 参考资料,它们说 object 名称/描述符在 MIB 中必须是唯一的,但没有源参考:

Andrew Komiagin in "SNMP OID with non-unique node names" 在这里 SO 说:

MIB Object names must be unique within entire MIB file.

Dave Shield on the Net::SNMP mailing list说:

Within a given MIB module, all object names must be unique. Both the objects defined within that MIB, and objects explicitly IMPORTed. You can't have two objects with the same name, both referenced in the same MIB.

我很想为这两个等效语句中的任何一个获取标准/RFC 参考。

样本Foobar.mib

这将 commonName 定义为 ::={ fooEntry 2 } 并进一步定义为 ::={ barEntry 2 }

-- I've changed the MIB module name.
FooBarMib DEFINITIONS ::= BEGIN

IMPORTS sysName, sysLocation FROM SNMPv2-MIB;
IMPORTS enterprises, OBJECT-TYPE FROM SNMPv2-SMI;

-- I've provided a fake name and enterprise ID here

foobar OBJECT IDENTIFIER::= {enterprises 12345678}

foo OBJECT IDENTIFIER::={ foobar 1 }

fooTable OBJECT-TYPE
        SYNTAX SEQUENCE OF FooEntry
        MAX-ACCESS not-accessible
        STATUS current
::={ foo 1 }

fooEntry OBJECT-TYPE
        SYNTAX FooEntry
        MAX-ACCESS not-accessible
        STATUS current
        INDEX { fooIndex }
::={ fooTable 1 }

FooEntry ::= SEQUENCE{
        fooIndex INTEGER,
        commonName OCTET STRING,
        -- other leaves omitted
}

fooIndex OBJECT-TYPE
        SYNTAX INTEGER
        MAX-ACCESS read-only
        STATUS current
::={ fooEntry 1 }

commonName OBJECT-TYPE
        SYNTAX OCTET STRING
        MAX-ACCESS read-only
        STATUS current
        DESCRIPTION
        "Label for the commonEntry"
::={ fooEntry 2 }

bar OBJECT IDENTIFIER::={ foobar 2 }

barTable OBJECT-TYPE
        SYNTAX SEQUENCE OF BarEntry
        MAX-ACCESS not-accessible
        STATUS current
::={ bar 1 }

barEntry OBJECT-TYPE
        SYNTAX BarEntry
        MAX-ACCESS not-accessible
        STATUS current
        INDEX { barIndex }
::={ barTable 1 }

BarEntry ::= SEQUENCE{
        barIndex INTEGER,
        commonName OCTET STRING,
        -- other leaves omitted
}

barIndex OBJECT-TYPE
        SYNTAX INTEGER
        MAX-ACCESS read-only
        STATUS current
::={ barEntry 1 }

commonName OBJECT-TYPE
        SYNTAX OCTET STRING
        MAX-ACCESS read-only
        STATUS current
        DESCRIPTION
        "Label for the commonEntry"
::={ barEntry 2 }

END

不幸的是,企业可以为所欲为。如果他们想玩得开心,建议他们遵守规则。 https://www.rfc-editor.org/rfc/rfc2578#section-3

中的详细信息