uCLinux上UCD-SNMP Agent的實現

[轉載請註明出處,做者:張洪耿,patrick_zhg@hotmail.com] 

討論採用開放源碼的UCD-SNMP 4.2.1軟件包開發本身的SNMP Agent,不涉及SNMP協議包的組包、解析等問題。本文從如下部分進行介紹: 
一:UCD-SNMP 4.2.1簡介及SNMP Agent開發步驟 
二:MIB庫模塊設計及代碼轉換 
三:SNMP Agent功能擴展方式 
四:uCLinux系統上SNMP Agent的實現 
五:建立SNMP Agent配置文件snmpd.conf 

一:UCD-SNMP 4.2.1簡介及SNMP Agent開發步驟 
UCD-SNMP 4.2.1開源軟件包支持SNMPv1 (RFCs 1155-1157)、SNMPv2c(RFCs 1901-1908)、SNMPv3 (RFCs 2271-2275)三種SNMP協議版本,其由如下內容組成: 
  可擴展的SNMP Agent程序(snmpd); 
  SNMP Agent和管理程序開發庫; 
  用於檢索或設置SNMP Agent端變量的工具程序(snmpget, snmpset, snmptable, snmpwalk等); 
  用於生成或處理SNMP陷阱的工具程序(snmptrapd和snmptrap); 
  基於Tk/perl的MIB瀏覽器(tkmib) 

SNMP Agent的開發通常採用如下步驟: 
  MIB庫模塊設計。 
  MIB庫模塊轉換爲C語言代碼。 
  轉換後的C語言代碼添加到UCD-SNMP源碼包,實現SNMP Agent的功能擴展。 

二:MIB庫模塊設計及代碼轉換 
 在SNMPAgent開發中,首先要定義出MIB庫模塊,這樣,SNMP管理端軟件才能經過該MIB庫模塊實現對相應設備的管理。MIB庫模塊定義的語法,能夠參照SNMP 協議中的SMI描述部分,本文使用MG-SOFT公司的「Visual MIBBuilder」可視化設計軟件完成MIB庫模塊的定義。MIB庫模塊定義後,須要在代理程序中增長與所定義的MIB庫模塊相對應的源代碼,這裏就要使用MIB2C工具程序把MIB庫模塊文件轉換成C源代碼。 
 MIB2C是UCD-SNMP 4.2.1軟件包中的工具程序,該工具程序須要SNMPperl擴展模塊支持。按如下步驟進行轉換,首先將設計好的MIB庫模塊定義文件拷貝到UCD-SNMP源代碼的mibs目錄(如/usr/local/share/snmp/mibs),而後運行MIB2C命令(假定MIB庫模塊爲modulename)。 
/usr/local/bin/mib2c modulename 
     此時,MIB2C會在當前目錄下生成兩個C源文件:modulename.h 和modulename.c,這兩個文件是根據所設計的MIB庫模塊轉換而成的,也是須要加入到UCD-SNMP軟件包實現SNMP Agent功能擴展的源代碼。 

三:SNMP Agent功能擴展方式 
    SNMP Agent功能擴展即snmpd功能擴展,假定UCD-SNMP源代碼存放在/usr/local/src/目錄下,下面是實現snmpd功能擴展的兩種方式: 

靜態連接方式 
 先將生成的兩個文件, modulename.h和modulename.c,拷貝到UCD-SNMP源代碼的/usr/local/src/ucd-snmp-4.2.1/agent/mibgroup目錄,而後,在ucd-snmp 4.2.1目錄下(/usr/local/src/ucd-snmp-4.2.1)執行如下命令生成snmpd。 

# ./configure -with-mib-modules="modulename"  
# make  
# make install 

共享連接庫方式 
    首先, 在任一目錄(如/usr/local/temp)編譯生成共享連接庫。將兩個源文件, modulename.h和modulename.c拷貝到此目錄下,執行以下命令生成共享連接庫: 

gcc -g -I/usr/local/include -c -o modulename.o modulename.c 
gcc -g -fPIC -shared -o modulename.so modulename.o  

而後,經過如下任意一種方式動態加載共享連接庫。 

若是代理程序(snmpd)已運行,執行以下命令: 
   #snmpset localhost rwnode UCD-DLMOD-MIB::dlmodStatus.1 i create  
     #snmpset localhost rwnode UCD-DLMOD-MIB::dlmodName.1 s " modulename"  
     #snmpset localhost rwnode UCD-DLMOD-MIB::dlmodPath.1 s "/usr/local/temp/ modulename.so"  
    #snmpset localhost rwnode UCD-DLMOD-MIB::dlmodStatus.1 i load  
    這樣便可加載剛纔生成的共享鏈接庫,裝載後,能夠用工具程序檢索或設置相應的變量。  

若是代理程序(snmpd)未運行,在snmpd.conf配置文件中增長一行: 
   dlmod modulename /usr/local/temp/modulename.so 
     而後從新啓動snmpd代理程序, 程序會自動裝載共享庫。 

四:uCLinux系統上SNMP Agent的實現 
    考慮到嵌入式設備應用程序自動啓動的特色,通常採用靜態連接方式開發SNMP Agent。因爲uCLinux交叉編譯環境的特殊性,在uCLinux系統上實現SNMP Agent須要按如下步驟。 

增長新文件及修改Makefile文件:  
  複製modulename.c和modulename.h到agent/mibgroup/目錄下。 
修改agent/Makefile文件: 
  增長"mibgroup/modulename.lo"到LMIBOBJS符號下。 
  增長"mibgroup/modulename.o"到MIBOBJS符號下。 
修改agent/mibgroup/Makefile文件: 
  增長"modulename.o"到OBJS符號下。 
  增長"modulename.lo"到LOBJS符號下。 
  增長"modulename.c"到SRCS符號下。 
修改agent/mibgroup/mib_module_includes.h文件: 
  增長 #include "mibgroup/modulename.h"一行。 
修改agent/mibgroup/mib_module_inits.h文件: 
  增長「if (should_init("modulename")) init_ modulename ();」一行。 

從新配置內核 
   要生成SNMP Agent程序snmpd,須要從新配置應用程序。 
   切換到uClinux-dist目錄,開始從新配置應用程序: 
cd ../uClinux-dist 
make menuconfig 
     進行以下選擇: 
Kernel/Library/Defaults Selection: 
(Linux-2.4.x) Kernel Version 
[X] Customize Vendor/User Settings (NEW) 
按Esc後保存。隨後自動進入 uClinux v3.1.0 Configurationm,選中「Network Application---->」並進入下一級選項菜單,在這裏能夠配置arp、ifconfig、ping、route和snmpd等應用程序,選中ucd-snmpsnmpd一項。 
[X] ucd-snmp snmpd 
保存後退出,而後在終端提示符下執行命令「make user_only」生成SNMP Agent程序snmpd。 

五:建立SNMP Agent配置文件snmpd.conf 
     snmpd啓動時須要讀取snmpd.conf配置文件,經過該配置文件,能夠控制SNMP管理端對變量的讀寫屬性,下面是該配置文件的一個示例: 

syslocation Shanghai  
syscontact localhost 
sysservices 72  
com2sec public default public  
com2sec private default private  
group public v1 public  
group private v1 private  
group public v2c public  
group private v2c private  
group public usm public  
group private usm private  
view all included .1 80  
view system included .1.3.6.1.2.1.1 fe  
access public "" any noauth exact all none all  
access private "" any noauth exact none all all  
trapsink 200.162.162.27
相關文章
相關標籤/搜索