趙旨忠 賈玉潔
(1 中國電子科技集團第五十四研究所河北石家莊050081)
(2 鄭州鐵路局河南鄭州450052)
(3 華東交通大學(xué)電氣與電子工程學(xué)院江西南昌330013)
隨著計算機網(wǎng)絡(luò)飛速發(fā)展,網(wǎng)絡(luò)的規(guī)模和數(shù)量龐大,網(wǎng)內(nèi)設(shè)備種類繁多。而網(wǎng)絡(luò)中的設(shè)備來自各個不同的廠家,如何管理這些設(shè)備就變得十分重要。文章內(nèi)容就是介紹管理這些設(shè)備的標(biāo)準(zhǔn)網(wǎng)絡(luò)管理協(xié)議。SNMP 協(xié)議基于client- server query- response 管理模式,管理進程和代理進程之間的通信可以有2 種方式。①管理進程向代理進程發(fā)出請求,詢問一個具體的參數(shù)值;②代理進程主動向管理進程報告有某些重要的事件發(fā)生當(dāng)然,管理進程除了可以向代理進程詢問某些參數(shù)值以外,它還可以按要求改變代理進程的參數(shù)值。
vxW orks 操作系統(tǒng)包括了進程管理、存儲管理、設(shè)備管理、文件系統(tǒng)管理、網(wǎng)絡(luò)協(xié)議、及系統(tǒng)應(yīng)用等幾個部分。vx-W orks 只占用了很小的存儲空間,并高度裁減,保證了系統(tǒng)能以較高的效率運行,體系的結(jié)構(gòu)框圖如圖1 所示。由圖可知,vxW orks 體系共有3 層,最底層是硬件系統(tǒng)(Hardware),包括網(wǎng)控制器,定時器,串口,SCSI 接口等。最高層是獨立于硬件的軟件,包括文件系統(tǒng),I/O 系統(tǒng),TCP/IP 協(xié)議棧,vxW orks 應(yīng)用序等。中間層是與硬件相關(guān)的軟件,包括W indernel,BSP(板級支持包),以及各種驅(qū)動等,它是連接硬件與高端軟件的橋梁。
圖1 vxW orks 結(jié)構(gòu)圖
基于TCP/IP 的網(wǎng)絡(luò)管理包含以下部分。管理信息庫包含所有代理進程的所有可被查詢和修改的參數(shù)。RFC1213[M cC loghrie and Rose 1991] 定義了第2 版的M IB,叫做M IB- II;關(guān)于M IB 的一套公用的結(jié)構(gòu)和表示符號,叫做管理信息結(jié)構(gòu)(Structure of Management Information,SM I),這個在RFC1155[Rose and M cC loghrie 1990]中定義。
管理進程和代理進程之間的通信協(xié)議,叫做簡單網(wǎng)絡(luò)管理協(xié)議。在RFC1157[Case et al.1990]定義。SNMP 包括數(shù)據(jù)報交換的格式等。盡管可以在運輸層采用各種各樣的協(xié)議,但是在SNMP 中,用得最多的協(xié)議還是UDP。網(wǎng)絡(luò)層用的較普遍是IP,基本的管理模式如圖2 所示。
圖2 SNMP 管理模型
上面提到的RFC 所定義的SNMP 叫做SNMPv1,或者就叫做SNMP。到1993年為止,又有一些新的關(guān)于SNM P 的RFC 發(fā)表。在這些RFC 中定義的SNMP 叫做第2 版SNMP(SNMP v2),關(guān)于管理進程和代理進程之間的交互信息,SNMP 定義了5 種報文:①get- request 操作:從代理進程處提取一個或多個參數(shù)值;②get- next- request 操作:從代理進程處提取一個或多個參數(shù)的下一個參數(shù)值;③set- request 操作:設(shè)置代理進程的一個或多個參數(shù)值;④get- response 操作:返回的一個或多個參數(shù)值,這個操作是由代理進程發(fā)出的,它是前面3 中操作的響應(yīng)操作;⑤trap 操作:代理進程主動發(fā)出的報文,通知管理進程有某些事情發(fā)生。前面的3個操作是由管理進程向代理進程發(fā)出的,后面2個是代理進程發(fā)給管理進程的,如圖3 所示。
圖3 SNMP 操作圖
代理軟件所用的SNMP 協(xié)議是Epilogue 協(xié)議棧中Envoy(SNMP 協(xié)議),因為要在vxW orks 操作平臺進行應(yīng)用開發(fā),必須把vxW orks 的W indNet 協(xié)議棧中的SNMP 協(xié)議卸載掉,避免產(chǎn)生沖突。管理者通過SNMP 協(xié)議和代理交互信息,Envoy把收到PDU 時解碼后的得到具體數(shù)據(jù)和操作類型,然后根據(jù)O ID 在M IB 庫找到對應(yīng)的管理對象,調(diào)用系統(tǒng)內(nèi)部的函數(shù)對系統(tǒng)內(nèi)部邏輯對象進行查詢和設(shè)置,系統(tǒng)把內(nèi)部事件通過SNMP 的trap 操作主動發(fā)送給管理者。代理的應(yīng)用程序負(fù)責(zé)協(xié)議數(shù)據(jù)和系統(tǒng)內(nèi)部數(shù)據(jù)的轉(zhuǎn)換。整個代理軟件結(jié)構(gòu)如圖3所示。
圖3 代理軟件結(jié)構(gòu)圖
到宿主開發(fā)機(w indow s)上,注意軟件包的版本和開發(fā)平臺對應(yīng)關(guān)系。按照以下命令來安裝軟件包(E 為光驅(qū)的盤符):
在源碼目錄里提供了幾種對不同處理器的配置文件如:vxppc.cfg vxpentium.cfg 等,選取對應(yīng)你平臺配置文件,在此文件上做修改。比如:
根據(jù)SNMP 協(xié)議,管理端和代理端都要實現(xiàn)統(tǒng)一的M IB庫。M IB 文件中定義了SNMP 協(xié)議訪問對象信息。M IB 中每個對象都有名字,語法和編碼3 種屬性。語法確定用ASN.1 語法實現(xiàn)對象信息的編碼,編碼方式選用是BER 編碼。SM I 經(jīng)過發(fā)展有SM Iv1 和SM Iv2 2個版本,目前大部分,特別是私有M IB,更多地使用SM Iv2 來定義。M IB 文件是用ASN.1 語法來描述的,所以在制編寫M IB 文件時,需要學(xué)習(xí)ASN.1 語法。這對開發(fā)者提高了難度,而且編寫過程相當(dāng)繁瑣且容易出錯。所以根據(jù)實際用途,本文設(shè)計開發(fā)基于MG- SOFT 可視化的M IB 文件編輯器(Visual M ib Builder)。M IB 文件可視化編輯器完全支持SM I v2 規(guī)范,采用可視化界面引導(dǎo)用戶編寫M IB文件,減少用戶在編寫過程中出錯的可能,提高開發(fā)效率。
編寫完M IB 文件后,通過編譯工具m ibcompR.exe 把M IB 文件生成對應(yīng)的C 程序代碼。通過配置編譯用的腳本文件生成以下代碼文件(m ib.c、m ibleaf.h、numbers.txt、skel.h、stub.c、trap.c、trap.h)。trap.c 是針對SNMP 理軟件產(chǎn)生trap 操作生成基本程序框架,用戶編寫每個管理對象應(yīng)用代碼,然后把應(yīng)用代碼嵌入到生成的基本程序中。Stub.c 文件針對GET、GET- NEXT、SET 三種操作生成的基本程序框架,在stub.c 為每個管理對象留有用戶應(yīng)用代碼接口,用戶只需把編寫的代碼嵌入到對應(yīng)位置來支持GET、GET- NEXT、SET 操作。因為生成的基本程序包括了管理對象的字符串描述和相應(yīng)數(shù)據(jù)結(jié)構(gòu)名字,所以很容易查找對應(yīng)每個管理對象生成代碼在基本程序位置。下面以一個簡單的實例來說明:
M IB 文件的內(nèi)容:
修改生成的C 代碼:
按照生成對象描述的數(shù)據(jù)結(jié)構(gòu)名字STRUCT_sys,生成數(shù)據(jù)結(jié)構(gòu):
在生成的sys_get、sys_next 函數(shù)中需要實現(xiàn)返回對象實例地址的代碼:sys_lookup 函數(shù)。
STRUCT_sys*data=sys_lookup();
在生成的sys_set 函數(shù)中存放對象實例的值的變量wan IpAddr。
在生成wanIpChange_trap 函數(shù)中需要實現(xiàn)為上報對象實例Awan IpAddr 賦值。
SNMP_Bind_IP_Address (trap_pkt,2, len_wan IpAddr,ID_wan IpAddr,Awan IpAddr);
sys_get、sys_g_next 函數(shù)對應(yīng)GET 操作,需要用戶實現(xiàn)sys_lookup 函數(shù)來返回被管理對象實例地址;sys_set 函數(shù)對應(yīng)SET 操作,需要定義自己的變量wan IpAddr 來存放協(xié)議棧返回的管理對象實例值;wan IpAddrtrap 函數(shù)對應(yīng)Trap 操作,用戶需要調(diào)用SNMP_Create_Request2 函數(shù)來給trap_pkt 分配地址,同 步 給 Awan IpAddr 變 量 實 例 賦 值 , 調(diào) 用SNMP_Encode_Packet 對PDU 編碼,通過SOCKET 發(fā)送給管理者。
應(yīng)用程序通過調(diào)用Add_Node_From_Root 系統(tǒng)函數(shù)把管理對象加到協(xié)議M IB 樹上;調(diào)用usrSnmpd Init 函數(shù)給代理配置IP 地址和啟動SNMP 協(xié)議。代理程序啟動后,在vxW orks的shell 下可以看到SNMP 協(xié)議的2個任務(wù)“tSnm pTm r”,“tSnmpd”。
介紹基于SNMP 協(xié)議網(wǎng)管代理軟件管理模型和操作方式,在此基礎(chǔ)上結(jié)合Epilogue Technology 公司的Envoy 協(xié)議包詳細(xì)地描述了在嵌入式操作系統(tǒng)VxW orks 上網(wǎng)管代理軟件開發(fā)過程。
[1]許慧民編.基于vxW orks 的嵌入式系統(tǒng)及實驗[M].北京:北京郵電大學(xué)出版社,2006.
[2]孔祥營,伯桂枝編.嵌入式實時操作vxW orks 及其開發(fā)環(huán)境Tornado[M].北京:中國電力出版社,2001.
[3][美]斯大林編著健蓮科技譯.SNMP 網(wǎng)絡(luò)管理[M].北京:中國電力出版社,2001.
[4][美]Mark A.M iller,P.E.著,晏明峰等譯.用SNMP 管理互聯(lián)網(wǎng)(第三版)[M].北京:中國水利水電出版社,2001.
[5]RFCll57,A Simple Network Management Protocol(SNMP)[S].1990.
[6]RFCl901,Introduction to Community·based SNMPv2[S].1996.