2011-12-18 95 views
5

我一直在试图了解如何创建一个MIB:在这里我做了什么至今:snmpset对象不可写。为什么?

我创建了一个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 

我再

  • 验证这个MIB对smilint,
  • 把它放在〜/ .snmp/MIB中/
  • 有rwcommunity字符串的所有主机,没有OID限制
  • 重新启动snmpd守护进程(在Debian)

到目前为止,一切良好。

我又试图看看守护进程知道这个新的企业,我所做的:

snmpwalk -v2c -m +ALL localhost .1.3.6.1.4.1.39106 

,输出: TEST-MIB ::测试=没有这样的在此代理对象可以在此OID

所以我想这个snmpd告诉我他在这棵树下找不到任何东西,因为还没有设置任何东西。

所以我尝试设置与snmpset此测试变量的shell:

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本地主机。 1.3.6.1.4.1.39106.2.1.0我111

和作为根,但没有成功

但是当我做了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 } 

它是一个错误吗?一个已知的问题?

+1

已经花了一个小时阅读栈溢出所有相关岗位(13页,yehaoo),我意识到,我可能必须使用mib2c将我的mib转换为c代码,然后用这个库重新编译netsmtpd。我需要编写任何C代码来做到这一点吗?我不是一个C-noob,我完全不了解与C有关的所有东西...... :( – Ant 2011-12-18 19:37:04

回答

3

听起来你正在尝试构建自己的SNMP代理。

通过您已经创建自己的MIB OID的东西的外观正确,但是在查询SNMP主机时没有任何响应新的OID。

对此有阅读:http://docs.oracle.com/cd/E13192_01/manager/mgr20/pguide/buildag.htm,看看它是否解决了您的问题q :)

+0

)如果我理解的很好,NET-SNMP不允许动态更新MIB树,我必须写一些C代码能够写入新的OID。 – Ant 2011-12-19 07:39:04

+1

我相信CPAN上有一大堆Perl模块,如果您在使用C语言编写代码时遇到困难,可以提供帮助!尝试http://search.cpan.org/~aelse/SNMP-Agent-0.05/lib/SNMP/Agent.pm – Encoder 2011-12-19 07:41:22

+0

我将与perl然后:) – Ant 2011-12-19 07:47:27

相关问题