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