1、 參照網上到處能下到的《net-snmp安裝配置手冊》編譯安裝net-snmp5.4.2,並參照《net-snmp安裝配置手冊》進行相應配置。
2、 根據ASN.1語法編寫MIB庫BAMBOO-MIB.txt。內容如下:
BAMBOO-MIB DEFINITIONS ::= BEGIN
IMPORTS
TimeTicks FROM SNMPv2-SMI
enterprises FROM SNMPv2-SMI
OBJECT-GROUP, NOTIFICATION-GROUP FROM SNMPv2-CONF
OBJECT-TYPE, Integer32, Gauge32, MODULE-IDENTITY NOTIFICATION-TYPE FROM SNMPv2-SMI
TEXTUAL-CONVENTION FROM SNMPv2-TC;
cdut OBJECT IDENTIFIER ::= { enterprises 8888 }
ce OBJECT IDENTIFIER ::= { cdut 8 }
FY0404 OBJECT IDENTIFIER ::= { ce 4 }
FY04040019 OBJECT IDENTIFIER ::= { FY0404 19 }
myVersion OBJECT-TYPE
SYNTAX OCTET STRING (SIZE (0..64))
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"sofware version"
::= { FY04040019 1 }
mySysResetNo OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"if mySysResetNo=1,restart system"
::= { FY04040019 2 }
END
3、 在/usr/local/net-snmp/share/snmp下創建snmp.conf,用於配置MIB庫。
在snmp.conf中添加如下內容來加載要添加的MIB庫: mib +BAMBOO-MIB
再次運行#snmpd –c snmpd.conf –c snmp.conf使配置文件生效。
查看MIB庫是否加載:
# snmptranslate -IR -Tp cdut
+--cdut(8888)
|
+--ce(8)
|
+--FY0404(4)
|
+--FY04040019(19)
|
+-- -R-- String myVersion(1)
| Size: 0..64
+-- -RW- Integer32 mySysResetNo(2)
4、 下面利用mib2c來生成.c和.h文件(因爲該MIB庫中的變量含有string類型,所以選用mib2c.scalar.conf作爲模版)
#mib2c –c mib2c.scalar.conf FY04040019
將生成FY04040019.c和FY04040019.h文件。
5、 修改FY04040019.c文件:
添加以下定義:
#define STRLENGTH 64
char myVersion[STRLENGTH] = "bamboo-1.00";
unsigned mySysResetNo = 0;
添加代碼(藍色部分爲添加的代碼):
int handle_myVersion(……)
{
……
case MODE_GET:
snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR,
(u_char *)myVersion, //++ by Bamboo
sizeof(myVersion) //++ by Bamboo
);
break;
}
int handle_mySysResetNo(……)
{
case MODE_GET:
snmp_set_var_typed_value(requests->requestvb, ASN_INTEGER,
(u_char *)&mySysResetNo, //++ by Bamboo
sizeof(mySysResetNo) //++ bu Bamboo
);
break;
case MODE_SET_RESERVE1:
/*
* or you could use netsnmp_check_vb_type_and_size instead
*/
ret = netsnmp_check_vb_type(requests->requestvb, ASN_INTEGER);
if (ret != SNMP_ERR_NOERROR) {
netsnmp_set_request_error(reqinfo, requests, ret);
}
break;
case MODE_SET_RESERVE2:
if (0) { //++by Bamboo
netsnmp_set_request_error(reqinfo, requests,
SNMP_ERR_RESOURCEUNAVAILABLE);
}
break;
case MODE_SET_FREE:
break;
case MODE_SET_ACTION:
mySysResetNo = *(requests->requestvb->val.integer); //++ by Bamboo
if (mySysResetNo > 1) { //++ by Bamboo
netsnmp_set_request_error(reqinfo, requests, 0/* some error */
);
}
break;
case MODE_SET_COMMIT:
if (0 ) { //++ by Bamboo
netsnmp_set_request_error(reqinfo, requests,
SNMP_ERR_COMMITFAILED);
}
break;
case MODE_SET_UNDO:
if (0) { //++ by Bamboo
/*
* try _really_really_ hard to never get to this point
*/
netsnmp_set_request_error(reqinfo, requests,
SNMP_ERR_UNDOFAILED);
}
break;
……
}
6、 下面準備重新編譯net-snmp-5.4.2:
將FY04040019.c和FY04040019.h文件拷貝到net-snmp-5.4.2/agent/mibgroup下。
然後重新配置configure文件:
(當前目錄爲net-snmp-5.4.2)
#./configure –with-mib-modules=”FY04040019” 其他略(其他配置參數參考《net-snmp安裝配置手冊》)
進行編譯和安裝(安裝目錄爲net-snmp)#make && make install
再次啓動snmp:#snmpd –c snmpd.conf –c snmp.conf
到此MIB庫的擴展以成功了,下面進行驗證。
7、 查看myVersion對象的實例(訪問實例一定要在對象後面加“.0”)
# snmpget -v2c -c public 192.168.16.3 1.3.6.1.4.1.8888.8.4.19.1.0
BAMBOO-MIB::myVersion.0 = Hex-STRING: 62 61 6D 62 6F 6F 2D 31 2E 30 30 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
OK, get成功
設置mySysResetNo的值
# snmpset -v2c -c public localhost 1.3.6.1.4.1.8888.8.4.19.2.0 i 1 //設置爲整形數1
BAMBOO-MIB::mySysResetNo.0 = INTEGER: 1
查看mySysResetNo的值
snmpget -v2c -c public localhost 1.3.6.1.4.1.8888.8.4.19.2.0
BAMBOO-MIB::mySysResetNo.0 = INTEGER: 1
目前存在有待解決的問題:
snmpget -v2c -c public 192.168.16.3 1.3.6.1.4.1.8888.8.4.19.2.0
BAMBOO-MIB::mySysResetNo.0 = INTEGER: 1 //用ip地址來get,是可以的
snmpset -v2c -c public 192.168.16.3 1.3.6.1.4.1.8888.8.4.19.2.0 i 1
Error in packet.
Reason: noAccess
Failed object: BAMBOO-MIB::mySysResetNo.0 //用ip地址來set就不行了