-
先写一个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
-
将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
-
将该库编译成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")
-
写代码和编译
net-snmp-config --compile-subagent Test Test.c
然后先运行sudo snmpd -c snmd.conf
./Test
但是我作这个测试没有通过。。。。。
-
写完应用程序后
将程序,Test.c,Test.h放到net-snmp-5.7.2.1/agent/mibgroup目录下
将STest-MIB.txt放到net-snmp-5.7.2.1/mibs
-
使用:
./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,测试可以通过。
-
configure在第一此编译的时候配置一下,后面直接make,make install就可以了。
-
编译完成后运行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
最新推荐文章于 2025-06-09 12:17:28 发布
