SNMP MIB 功能開發詳細步驟


1、      定義MIB庫文件: linux

可以使用adventnet 工具包下的mibedit工具來定義私有MIB庫文件。 數組

2、      在linux環境下安裝net-snmp 。安裝過程以下: 數據結構

一、  解壓源碼包:
tar –zxvf net-snmp-5.6.1.1.tar.gz
函數

二、  進入解壓後的文件目錄:
cd net-snmp-5.6.1.1
工具

三、  執行文件目錄下的configure可執行文件,若是想指定程序包的安裝路徑,那麼您首先創建相應的文件夾來存放安裝信息,您能夠寫成./configure –prefix=/您指定的路徑名。參數—prefix用來告訴系統安裝信息存放的路徑,若是您沒有指定路徑,直接執行./configure,那麼程序包都會安裝在系統默認的目錄下,一般爲:/usr/local下。例如:
./configure --prefix=/usr/local/snmp //
配置 指定安裝目錄,安裝過程會詢問您如下的信息:
注意:如下問題彷佛不怎麼重要,那好像僅僅是官方想了解使用本軟件方的信息,能夠直接回車而不用回答,系統會採用默認信息,其中日誌文件默認安裝在/var/log/snmpd.log.數據存貯目錄默認存放在/var/net-snmp下。
default version of-snmp-version(3): 3
(在這裏版本一般有三種形式:1,2c,3
Systemcontact information
(配置該設備的聯繫信息): heaven(也能夠是郵箱地址)
System location (
該系統設備的地理位置):BEIJING P.R China
Location to write logfile (
日誌文件位置): /var/log/snmpd.log
Location to Write persistent(
數據存儲目錄): /var/net-snmp ui

四、  #make
編譯源碼包文件,一般只須要執行make命令,系統會根據Makefile層層進行編譯,第一次編譯須要的時間比較長. 若是make 成功的話,那麼緊接着安裝程序了,這一步通常不會出現錯誤.

#make install
spa

五、  完成以上步驟後net-snmp的開發環境就搭建好了。若是不在PC上使用SNMP服務的話是不須要再進一步配置的。 指針

3、      生成MIB 源文件(C格式): 日誌

一、 首先須要介紹一下MIB庫和C源文件的轉換工具命令: orm

Net-snmp安裝包提供了mib2c工具, 用戶可以使用該工具將MIB庫文件轉換成C源碼格式。命令:MIBS=」+param1」  mib2c  param2    其中param1表明須要被轉換的MIB庫文件,param2表明但願轉換該MIB庫文件下的哪個節點相關數據。下面以AERODEV-MIB.txt中的portTrunk功能節點爲例來介紹整個轉換過程。

二、 將編輯好的MIB庫文件拷貝到linuxnet-snmp安裝目錄中的mibs目錄。在終端下cd 到該目錄,而後執行MIBS=」+AERODEV-MIB.txt」  mib2c  portTrunk命令便可生成portTrunk子樹下的非表節點處理源碼,再執行MIBS=」+AERODEV-MIB.txt」  mib2c  portTrkGroupTable便可生成portTrunk子樹下的表portTrkGroupTable對應的C源碼。對於非表節點按照提示輸入1便可生成該功能對應的源文件portTrunk.c portTrunk.h,對於表節點須要按照提示分別輸入 2,2,1,2

三、 將生成的源碼拷貝到咱們的開發源碼樹下的user/net-snmp/agent/mibgroups/switch/private 目錄下。

4、      修改相應的C源文件

一、 修改portTrunk.cportTrunk.h源文件以實現portTrkEnatrunkType兩個讀寫節點的功能:

1)   首先介紹一下非表節點C源碼中的數據定義和函數功能:oid portTrunk_variables_oidportTrunk子樹根節點的OID值。Struct variable4 portTrunk_variables[]結構體數組爲 portTrunk下的節點定義(包括非表節點和表節點的定義)。由於表節點咱們稍後將會採用另一種方式來處理,因此在此處咱們將表節點相應的幾個定義刪去。其中包括TRKGRPINDEXPORTTRUNKGROUPNUMBERPORTTRUNKGROUPENABLEPORTTRUNKGROUPMEMBER

Void init_portTrunk(void)函數爲初始化函數,會將相應節點的定義信息註冊到agentOID信息樹裏。

Unsigned char * var_portTrunk(struct variable *vp,oid *name,size_t *length, int exact, size_t *var_len, WriteMethod ** write_method); 函數爲模塊處理函數。Vp爲請求的結構體指針,name爲相應OID的指針,lengthOID長度,var_len爲參數長度,write_method爲節點寫函數指針。

該函數中switch(vp->magic)爲查詢須要操做的節點,對於PORTTRKENA這個讀寫節點來講,*write_method = write_portTrkEna爲操做函數指針賦值,VAR = VALUE 中的VAR爲接收返回值的變量,VALUE爲返回值,這兩個變量須要本身定義和處理。

Var_portTrkGroupTable 函數爲表portTrkGroupTable的處理函數,這裏直接刪去。

Int write_portTrkEna(…)爲節點portTrkEna 的寫操做處理函數。其中RESERVE2 狀態中,value接收到的值即爲agent收到的write request的修改值。ACTION狀態中須要填入對該節點修改的具體代碼,UNDO狀態中須要填入對該節點恢復的具體代碼。在ACTION狀態中進行操做的時候,須要注意保存該節點的當前值,便於UNDO進行恢復

Int write_trunkType(…)爲節點trunkType節點的寫處理函數。與portTrkEna節點相似。

 

2)   修改後的代碼可參照broadcom/uClinuxv12/user/net-snmp/agent/mibgroup/switch/private下的portTrunk.cportTrunk.h文件。其中使用的結構體和函數都可在broadcom/uClinuxv12/user/bcmcfg 下相應功能的源文件中找到。要使用user/bcmcfg下的函數和數據結構,須要將bcmcfg下的相應C文件生成的.o文件連接成.a庫並在net-snmp編譯參數中加入相應的頭文件引用和庫文件引用,目前這個步驟已經完成,具體可參照user/bcmcfg下的makefile文件。

3)   代碼修改完成後,須要修改user/net-snmp/agent/mibgroup/下的default_modules.h文件,如要加入上面新修改的功能,則須要在default_modules.h文件中添加config_require(switch/private/portTrunk);

4)   以上步驟均完成後可從新編譯源碼樹,編譯完成後的snmpd便可實現對新節點操做功能。

二、 修改portTrkGroupTable.cportTrkGroupTable.h文件以實現端口匯聚表的監控功能。

1)   數據結構和函數介紹:

Void init_portTrkGroupTable(void)爲模塊初始化函數,其中調用的initialize_table_portTrkGroupTable(void)爲表初始化函數。

表的數據初始化工做應該在這裏完成。

    struct portTrkGroupTable_entry 爲表的鏈表結構定義。其中包含了表索引定義和表內容及內容長度定義。相應的字符串數據的長度須要用戶本身調整。

Struct portTrkGroupTable_entry * portTrkGroupTable_head;定義了該表的鏈表。整個表的操做實際上就是針對該鏈表的。

Struct portTrkGroupTable_entry * portTrkGroupTable_createEntry(…)爲表的行建立函數。其中具體的傳入參數和數據處理須要用戶本身實現。

Void portTrkGroupTable_removeEntry(…)爲行刪除函數。在行數肯定的狀況下無需使用。

Int portTrkGroupTable_handler(…)函數未表的操做函數。表中數據的讀取須要在MODE_GET下實現。數據的修改須要在MODE_SET_ACTION下實現。另外MODE_SET_UNDO的處理方式同非表節點。

修改後的代碼可參照broadcom/uClinuxv12/user/net-snmp/agent/mibgroup/switch/private下的portTrkGroupTable.cportTrkGroupTable.h文件。

2)   源文件修改完成後,其餘的操做同portTrunk.c

5、      已開發的相關私有MIB功能源文件位置均在開發源碼樹中user/net-snmp/agent/mibgroups/switch/private目錄下

user/net-snmp/agent/mibgroups/switch/dealport/目錄下爲不一樣型號的交換機的OID定義。

6、      已開發的公有MIB功能源文件均在源碼樹user/net-snmp/agent/mibgroups/mibII目錄下。具體可參考user/net-snmp/agent/mibgroups/default_modules.h中相應的內容。

7、      RMON對應的MIB源文件均在user/net-snmp/agent/mibgroups/RMON 目錄下。

相關文章
相關標籤/搜索