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)
注意现在 commonName
在 fooTable
和 barTable
中都有定义
非常相同的 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
中的详细信息
我有一个 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)
注意现在 commonName
在 fooTable
和 barTable
中都有定义
非常相同的 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
中的详细信息