摘 要:本文介紹了基于VxWorks操作系統(tǒng)下設(shè)備管理的基本流程,同時(shí)給出了設(shè)計(jì)代理的詳細(xì)過(guò)程。
關(guān)鍵字:實(shí)時(shí)操作系統(tǒng) 簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議 代理
1. 引言
簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議(SNMP)已經(jīng)成為目前網(wǎng)絡(luò)管理方面事實(shí)上的標(biāo)準(zhǔn)。同命名一樣,它的操作非常簡(jiǎn)單易行,所以引起了越來(lái)越多的商家的注意,在計(jì)算機(jī)、通信和自動(dòng)化等各個(gè)領(lǐng)域都發(fā)揮了很大的作用。同時(shí),VxWorks嵌入式操作系統(tǒng)又由于其出色的實(shí)時(shí)性和穩(wěn)定性受到業(yè)界的廣泛的好評(píng),所以如何實(shí)現(xiàn)在VxWorks系統(tǒng)上通過(guò)SNMP協(xié)議對(duì)設(shè)備進(jìn)行管理是我們面臨的一個(gè)很重要的課題。
2. SNMP及系統(tǒng)簡(jiǎn)介
VxWorks操作系統(tǒng)是美國(guó)WindRiver公司設(shè)計(jì)開(kāi)發(fā)的一種嵌入式實(shí)時(shí)操作系統(tǒng),具有以下特點(diǎn):
1.高效的代碼和良好的可裁剪性采用微內(nèi)核結(jié)構(gòu),內(nèi)核可裁減至幾十B 字節(jié),對(duì)于資源相對(duì)緊張的嵌入式系統(tǒng)具有非常好的適應(yīng)性。
2.豐富的接口資源和大量的第三方產(chǎn)品為VxWorks的廣泛應(yīng)用奠定了堅(jiān)實(shí)的基礎(chǔ)
3.良好的移植性,可以移植到不同的處理器平臺(tái),包括PPC、ARM和X86等不同的處理器。
4.良好的開(kāi)發(fā)環(huán)境,非常好的開(kāi)發(fā)環(huán)境Tornado并在不斷升級(jí)
WindNet SNMP代理將工業(yè)標(biāo)準(zhǔn)網(wǎng)絡(luò)管理引入實(shí)時(shí)嵌入系統(tǒng)中,實(shí)現(xiàn)了對(duì)嵌入式設(shè)備管理的接口。應(yīng)用上只需配置其初始化過(guò)程和應(yīng)用系統(tǒng)提供的部分接口就可以方便實(shí)現(xiàn)對(duì)嵌入式設(shè)備的管理,同時(shí)支持多種SNMP版本的支持,現(xiàn)在已經(jīng)可以支持SNMPv3最高版本。SNMP的工作過(guò)程可以如圖1所示:
 圖 1 SNMP 基本框架
3. 處理流程
3.1 初始化過(guò)程
Vxworks是通過(guò)調(diào)用usrSnmpInit( )函數(shù)來(lái)啟動(dòng)SNMP服務(wù)的,所以對(duì)于VxWorks微內(nèi)核,一定要包含usrSnmpInit( )函數(shù)。它然后創(chuàng)建任務(wù)名為tSnmpd的任務(wù),這個(gè)任務(wù)的函數(shù)入口點(diǎn)為snmpIoMain( )。在庫(kù)snmpIoLib.c中提供了該函數(shù)的部分源代碼,用戶(hù)可以加入自己的代碼,比如讀某些配置文件和私有的配置信息等。snmpIoMain( )然后調(diào)用snmpdInitFinish( )函數(shù)來(lái)完成整個(gè)代理的初始化過(guò)程。然后snmpInitFinish( )通過(guò)snmpIoTrapSend( )函數(shù)發(fā)送coldStart的trap,表示整個(gè)初始化過(guò)程完畢。這里需要注意的是所有其他的初始化和配置工作一定要在snmpInitFinish( )調(diào)用之前,然后系統(tǒng)回到snmpIoMain( )函數(shù)體,開(kāi)始和管理站之間的收發(fā)包過(guò)程。
3.2 數(shù)據(jù)包處理
數(shù)據(jù)包的處理過(guò)程是通過(guò)snmpIoBody( )的這個(gè)守護(hù)進(jìn)程開(kāi)始的,它的主要工作是監(jiān)視 UDP 161端口,如果管理站有請(qǐng)求發(fā)送過(guò)來(lái),它把請(qǐng)求發(fā)給snmpdPktProcess( )來(lái)處理,通過(guò)snmpIoCommunityValidate( )檢查共同體的名稱(chēng)是否正確。然后調(diào)用用戶(hù)自己的程序完成請(qǐng)求,對(duì)于SET操作,還要調(diào)用snmpIoWrite( )來(lái)完成整個(gè)操作。這里要注意的是用戶(hù)要提供自己的代碼完成請(qǐng)求,比如說(shuō)對(duì)某一個(gè)變量的讀取,一定要給出對(duì)應(yīng)的具體位置,這部分可以通過(guò)修改snmpdLib.c中的函數(shù)來(lái)完成。
對(duì)于trap的處理有單獨(dú)的一套流程,首先如果一件意外事件發(fā)生,比如冷啟動(dòng),調(diào)用snmpdTrapSend( )函數(shù)來(lái)處理。對(duì)于trap,可以通過(guò)用戶(hù)自定義的方式來(lái)實(shí)現(xiàn)系統(tǒng)需要的trap。一般來(lái)講,它通過(guò)snmpIoWrite( )函數(shù)把信息傳遞給管理站。
3.3 退出代理
如果用戶(hù)想中止代理,可以調(diào)用函數(shù)snmpdExit( )來(lái)完成,同時(shí)會(huì)釋放各種資源。
以上部分流程圖如圖2所示:
 圖 2 基本流程
4. 擴(kuò)展MIB模塊
對(duì)默認(rèn)的SNMP配置,代理已經(jīng)包含了包括MIB-II和其他的基本MIB庫(kù),但對(duì)于有些環(huán)境不需要部分庫(kù),同時(shí)需要加入基于本設(shè)備和本廠家的私有MIB,所以很有必要對(duì)MIB進(jìn)行擴(kuò)展和裁減,也利于對(duì)嵌入式設(shè)備的標(biāo)準(zhǔn)化管理。以下介紹整個(gè)過(guò)程。
1. 定義管理信息
這步主要用來(lái)定義SNMP需要管理的信息,其中部分信息已經(jīng)通過(guò)標(biāo)準(zhǔn)MIB實(shí)現(xiàn),實(shí)際只要加入就可以了。
2. 創(chuàng)建MIB定義
根據(jù)ASN.1標(biāo)準(zhǔn)語(yǔ)法創(chuàng)建MIB。
一般有以下形式:
DEFINITIONS ::= BEGIN
—— Title: EXAMPLE
IMPORTS
MODULE-IDENTITY,
OBJECT-TYPE
FROM SNMPv2-SMI
……
windDemo MODULE-IDENTITY
LAST-UPDATED "2004-9-26"
ORGANIZATION
CONTACT-INFO
Phone:……
Email:……
DESCRIPTION
"This is a example"
::= { demos 1 }
windObjects OBJECT IDENTIFIER ::= { windDemo 1 }
sysState OBJECT-TYPE
SYNTAX INTEGER
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"EXAMPLE"
::= { sysconfig 1 }
END
3. 檢查正確性,轉(zhuǎn)換成.h和.c文件
可以應(yīng)用mibcomp –check工具來(lái)檢驗(yàn)MIB文件的正確性,利于mibcomp –o生成相應(yīng)的.h和.c文件。
4. 編譯MIB文件
將MIB文件加入到已經(jīng)存MIB模塊中。通常有靜態(tài)和動(dòng)態(tài)兩種方式。
靜態(tài)類(lèi)似于通常的編譯文件的全過(guò)程。這里主要介紹動(dòng)態(tài)方式,因?yàn)檫@種方式可以實(shí)現(xiàn)在原始模塊照常工作的情況下加入或卸載新模塊。首先通過(guò)mibcomp –l命令將新的MIB文件編譯成模塊。然后用命令ld在shell下實(shí)現(xiàn)MIB的動(dòng)態(tài)加載。
5. 總結(jié)
VxWorks將SNMP應(yīng)用到整個(gè)系統(tǒng),實(shí)現(xiàn)了對(duì)嵌入式設(shè)備的標(biāo)準(zhǔn)化管理,利于對(duì)同不同的管理站進(jìn)行接口。SNMP不僅實(shí)現(xiàn)了對(duì)嵌入式設(shè)備的管理還提供了監(jiān)視整個(gè)系統(tǒng)正常運(yùn)行的基本功能,同時(shí)還可以通過(guò)對(duì)CPU的檢查實(shí)現(xiàn)發(fā)現(xiàn)軟件方面的漏洞。總之,將SNMP應(yīng)用到微內(nèi)核,會(huì)在嵌入式這個(gè)自動(dòng)化領(lǐng)域發(fā)揮出越來(lái)越大的作用。 |