首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对象名称/描述符在SNMP MIB模块中必须是唯一的吗?

对象名称/描述符在SNMP MIB模块中必须是唯一的吗?
EN

Stack Overflow用户
提问于 2020-01-06 22:15:08
回答 1查看 485关注 0票数 1

我有一个供应商提供的MIB文件,其中在同一个MIB中的两个不同表中定义了相同的对象名称/描述符。不幸的是,我认为MIB是专有的,不能将其全部发布在这里。因此,我创建了一个类似的示例Foobar.mib文件,我在文章末尾包含了该文件。

我的问题是,这样的监管局是否合法或可被视为有效?

Net::SNMP可以打印它的树,如下所示:

代码语言:javascript
复制
+--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)

注现在,commonName是在fooTablebarTable下在同一个MIB中定义的(参见下面的示例Foobar.mib)。

这混淆了Net::SNMP,因为FooBarMib::commonName现在可以表示两个不同的OID。

在供应商的bug报告中包含一个RFC链接将是一件大事。

我发现RFC 1155 -基于TCP/IP的互连网管理信息的结构和标识说:

与internet标准MIB中的对象类型相对应的每个对象描述符都应该是唯一的但可打印的可打印字符串。这促进了人类在讨论MIB时使用的通用语言,并为用户界面的简单表映射提供了便利。

这是否只适用于“互联网标准的MIB”,因而不适用于供应商MIB?

我还找到了RFC 2578 -管理信息结构第2版(SMIv2),上面写着:

对于出现在信息模块中的所有描述符,描述符必须是唯一的和助记符,长度不得超过64个字符。

但是,用于SNMP v1代理的MIB也必须遵守RFC 2578吗?实现MIB的SNMP代理出于任何原因只支持SNMP v1。而RFC 2578的标题中有SMIv22让我有点担心。然而,MIB本身确实从SMIv2 FWIW导入。

我发现了两个互联网引用,它们说对象名称/描述符在MIB中必须是唯一的,但是没有源引用:

在"SNMP OID具有非唯一节点名“中的Andrew Komiagin在上面这样说:

MIB对象名称在整个MIB文件中必须是唯一的。

Dave on the Net::SNMP邮件列表说:

在给定的MIB模块中,所有对象名称都必须是唯一的。在该MIB中定义的对象和显式的IMPORTed对象。不能有两个名称相同的对象,它们都在同一个MIB中引用。

我很想为这两个等价的语句中的任何一个获得一个标准/ RFC引用。

样本Foobar.mib

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

代码语言:javascript
复制
-- 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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-13 18:34:53

不幸的是,企业可以随心所欲。如果他们想表现得很好,建议他们遵守规则。关于https://www.rfc-editor.org/rfc/rfc2578#section-3的详细信息

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59619704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档