snmpd agent创建自己的MIBS

  1. 先写一个STest-MIB.txt

    -- Test-MIB.my,建立一个MIB,名字为Test-MIB,然后导入了一些东西,后面会用到Test-MIB::Test
        Test-MIB DEFINITIONS ::= BEGIN

            IMPORTS
                OBJECT-GROUP, MODULE-COMPLIANCE, NOTIFICATION-GROUP
                    FROM SNMPv2-CONF
                enterprises, Integer32, Unsigned32, OBJECT-TYPE, MODULE-IDENTITY,
                NOTIFICATION-TYPE
                    FROM SNMPv2-SMI
                DisplayString
                    FROM SNMPv2-TC;
    -- October 09, 2002 at 14:50 GMT
            -- 1.3.6.1.4.1.100,MIB根节点,接枝到enterprises 100 上。

            Test MODULE-IDENTITY
                LAST-UPDATED "201412051450Z"        -- October 09, 2002 at 14:50 GMT
                ORGANIZATION
                    ""
                CONTACT-INFO
                    ""
                DESCRIPTION
                    "Video's Server MIB."
                ::= { enterprises 100 }
    --  Node definitions
    -- This part will include all details about the Test.
            -- 1.3.6.1.4.1.100.1

            Time OBJECT IDENTIFIER ::= { Test 1 }
            -- 1.3.6.1.4.1.100.1.1
            GetSetTime OBJECT-TYPE
                SYNTAX DisplayString (SIZE (0..100))
                MAX-ACCESS read-write
                STATUS current
                DESCRIPTION
                    "Example : 2014/12/05"
                ::= { Time 1 }
        END
    -- Test-MIB.my

  2. 将Test-MIB.txt拷贝到xxx/share/snmp/mibs/下面。使用snmptranslate -Ts -m ALL | grep Test,其实可以看到有我们的MIB。snmptranslate -Tp -IR Test-MIB::Test 查看我们的MIB和节点内容,也会提示一些语法错误。(-IR用-OS不知为什么错误)

    也可以使用net-snmp-config --snmpconfpath命令得到:
    /usr/local/etc/snmp:/usr/local/share/snmp:/usr/local/lib/snmp:/home/actiontec/.snmp:/var/net-snmp

    在这些目录下添加文件snmp.conf,加入mibs +/usr/local/share/snmp/mibs/STest-MIB.txt

  3. 将该库编译成c,h文件

    env MIBS="+/usr/local/share/snmp/mibs/STest-MIB.txt" mib2c Test

    这里必须为Test,和节点名字一样,  2) Net-SNMP style code,  1) If you're writing code for some generic scalars(by hand use: "mib2c -c mib2c.scalar.conf Test")


  4. 写代码和编译

    net-snmp-config --compile-subagent Test Test.c

    然后先运行sudo snmpd -c snmd.conf

    ./Test

    但是我作这个测试没有通过。。。。。

  5. 写完应用程序后

    将程序,Test.c,Test.h放到net-snmp-5.7.2.1/agent/mibgroup目录下

    STest-MIB.txt放到net-snmp-5.7.2.1/mibs


  6. 使用:

    ./configure --with-default-snmp-version="3"  --with-sys-contact="@@no.where"  --with-sys-location="Unknown" --with-logfile="/var/log/snmpd.log"  --with-persistent-directory="/var/net-snmp" --with-mib-modules="Test" --enable-mini-agent(最后一项是迷你版)

    make

    sudo make install(如果不用sudo 需要去掉perl功能,安装目录指定就可以了。)

    安装完成运行,sudo snmpd -c snmd.conf,测试可以通过。

  7. configure在第一此编译的时候配置一下,后面直接make,make install就可以了。

  8. 编译完成后运行snmpd,可以知道get,walk命令进入函数handle_AccessRxName()模式为MODE_GET(160)。而set命令正常将会有0>1>2>3(一共4次).if (0/* XXX if malloc, or whatever, failed: */)等内容需要我们自己添。我在MODE_SET_RESERVE2(1)。手动添加分配空间什么的,如果分配失败了,我们使用下面这个函数来报错:netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_RESOURCEUNAVAILABLE);

    如果MODE_SET_RESERVE2(1)这步进入了netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_RESOURCEUNAVAILABLE);,程序将跳入MODE_SET_FREE。0>1>4

你可能感兴趣的:(snmpd agent创建自己的MIBS)