【发布时间】:2011-12-18 18:14:21
【问题描述】:
我一直在尝试了解如何创建 MIB:这是我到目前为止所做的:
我创建了一个 MIB,并尝试将值分配给新的 OID => 失败
这里是 MIB:
TEST-MIB DEFINITIONS ::= BEGIN
IMPORTS
MODULE-COMPLIANCE, OBJECT-GROUP FROM SNMPv2-CONF
OBJECT-TYPE, Integer32,MODULE-IDENTITY FROM SNMPv2-SMI;
test MODULE-IDENTITY
LAST-UPDATED "201112190200Z"
ORGANIZATION "blah"
CONTACT-INFO
"please"
DESCRIPTION
"I am stuck"
REVISION "201112190200Z"
DESCRIPTION
"initial Draft"
::= { iso org(3) dod(6) internet(1) private(4) enterprises(1) 39106 }
testResearch OBJECT IDENTIFIER ::= { test 2 }
testVar OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"just for testing"
::= { testResearch 1}
-- conformance information
testMIBConformance OBJECT IDENTIFIER ::= { test 999 }
testMIBCompliances OBJECT IDENTIFIER ::= { testMIBConformance 1 }
testMIBGroups OBJECT IDENTIFIER ::= { testMIBConformance 2 }
-- compliance statements
testMIBCompliance MODULE-COMPLIANCE
STATUS current
DESCRIPTION
"blah."
MODULE -- this module
MANDATORY-GROUPS { testGroup }
::= { testMIBCompliances 1 }
-- units of conformance
testGroup OBJECT-GROUP
OBJECTS { testVar }
STATUS current
DESCRIPTION
"The draft"
::= { testMIBGroups 1 }
END
然后
- 针对 smilint 验证了此 MIB,
- 放入~/.snmp/mibs/
- 拥有所有主机的 rwcommunity 字符串,没有 OID 限制
- 重新启动 snmpd 守护程序(在 Debian 上)
到目前为止,一切都很好。
然后我试着看看守护进程是否知道这个新企业,我知道了:
snmpwalk -v2c -m +ALL localhost .1.3.6.1.4.1.39106
输出: TEST-MIB::test= 在此 OID 的此代理上没有可用的此类对象
所以我猜那个 snmpd 告诉我他在这棵树下找不到任何东西,因为还没有设置任何东西。
所以我尝试在 shell 上使用 snmpset 设置这个测试变量:
snmpset -v2c -m +ALL localhost .1.3.6.1.4.1.39106.2.1 i 111
输出:
Error in packet.
Reason: notWritable (That object does not support modification)
Failed object: TEST-MIB::testVar
我也尝试过: snmpset -v2c -m +ALL localhost .1.3.6.1.4.1.39106.2.1.0 i 111
以root身份,但没有成功
但是当我执行 snmptranslate 时,我可以看到 MIB 被正确解析:
snmptranslate -Td 1.3.6.1.4.1.39106.2.1
TEST-MIB::testVar
testVar OBJECT-TYPE
-- FROM TEST-MIB
SYNTAX Integer32
MAX-ACCESS read-write
STATUS current
DESCRIPTION "just for testing"
::= { iso(1) org(3) dod(6) internet(1) private(4) enterprises(1) test(39106) testResearch(2) 1 }
这是一个错误吗?已知问题?
【问题讨论】:
-
花了一个小时阅读所有关于堆栈溢出的相关帖子(13 页,yehaoo),我意识到我可能必须使用 mib2c 将我的 mib 转换为 c 代码,然后重新编译 netsmtpd有了这个库。我需要编写任何 C 代码来做到这一点吗?我不是 C 菜鸟,我对 C 的一切一无所知.... :(