王 濤,李宥謀,劉永斌,趙成青
(西安郵電大學 計算機學院,陜西 西安 710000)
隨著互聯(lián)網(wǎng)的飛速發(fā)展,網(wǎng)絡設備往往由許多相對獨立的可管理模塊組成,并要求實現(xiàn)靈活擴展,以滿足特定的應用[1]。由于這些可管理模塊可能包含其相應的標準或私有的MIB庫,故對于網(wǎng)絡管理,尤其是對代理的可擴展性提出了更高的要求。然而作為網(wǎng)絡管理協(xié)議業(yè)界標準的簡單網(wǎng)絡管理協(xié)議(simple network management protocol,SNMP),卻沒有提供能將眾多模塊納入統(tǒng)一的SNMP管理之下的解決方案[2]。網(wǎng)絡管理標準共有SNMP(v1/v2c/3)三個版本,應用最多的是v1和v2c版本。由于HFC(混合光纖同軸電纜網(wǎng))接入網(wǎng)還沒有定義標準的節(jié)點,因此,要用SNMP對設備進行管理,必須要擴展原有的MIB。由于不同設備的操作系統(tǒng)有很大的區(qū)別,這就要求代理程序能夠方便地進行移植,不應帶有專有系統(tǒng)的痕跡[3]。
為了滿足這一需求,選擇一款合適的RTOS(嵌入式實時操作系統(tǒng),embedded real-time operation system)具有十分重要的意義。當下比較流行的嵌入式操作系統(tǒng)有:美國WindRiver公司的VxWorks、Windows CE、μClinux、μC/OS-II,另外還有eCos等[4]。μC/OS-II是一款優(yōu)秀的嵌入式實時操作系統(tǒng),移植時十分的簡單,只需要對CPU中相關(guān)的三個文件進行修改即可,而且占用空間小、執(zhí)行效率高,可以滿足文中的需求[5]。
SMI規(guī)范了被管對象的表示和命名方法,以及MIB中各類信息的數(shù)據(jù)類型。為了保證管理信息具有唯一識別性,可對被管對象命名和標識。標識由一個簡單的文本描述和一個整數(shù)組成,在消息傳遞中比名字更容易編碼,更節(jié)省空間[6]。因此,使用標識定義被管對象。對象標識采用樹形結(jié)構(gòu)來管理信息目錄。
為了實現(xiàn)被管設備的網(wǎng)絡管理,每一個被管理元素被看作是一個對象,而MIB就是這些對象的結(jié)構(gòu)化集合。MIB使用SMI和ASN.1來描述管理信息,管理信息建立在SMI定義的信息樹下(iso.org.dod.internet),每個管理信息都是管理信息樹的一個節(jié)點,擁有唯一的對象標識(object identifier,OID)。MIB庫定義了管理信息的OID、類型、取值、權(quán)限,管理者通過管理協(xié)議對MIB庫的信息進行存取和訪問,就可以實現(xiàn)基本的網(wǎng)絡管理,因此對MIB庫的訪問存取是實現(xiàn)網(wǎng)絡管理的關(guān)鍵[7]。
建立的私有MIB如圖1所示。
圖1 MIB庫的建立
由于樹中的每個節(jié)點都有唯一的一個雙親節(jié)點,因此,采用“雙親表示法”存儲MIB樹型結(jié)構(gòu)。雙親表示法和二叉樹的雙親鏈表相類似,用一組連續(xù)的存儲空間(一維數(shù)組)存儲樹中的各個節(jié)點。數(shù)組中的一個元素采用樹中的一個節(jié)點,每個節(jié)點含兩個域,數(shù)據(jù)域存放節(jié)點本身信息,雙親域指示本節(jié)點的雙親節(jié)點在數(shù)組中的位置。
這種表示方法有利于更快速地查找父節(jié)點和根節(jié)點[8]。
SNMP以UDP協(xié)議為基礎,規(guī)定了管理者和Agent之間SNMP報文信息交互的一些語法、語義和交互基本規(guī)則。為了方便實現(xiàn)管理者與Agent之間信息的交互,SNMP提供了一套命令(get、set、bulkget、getnext、Trap)來實現(xiàn)對MIB信息的存取訪問。
針對ARM處理器常用的開發(fā)工具有ADS(ARM developer suite)、Keil μVision、ARM-Linux-GCC/GDB、Embedded VC等,其中GCC/GDB主要用于嵌入式Linux系統(tǒng)的開發(fā),Embedded VC主要用于WinCE系統(tǒng)下的嵌入式開發(fā)[9]。
由于文中是基于嵌入式實時操作系統(tǒng)μC/OS-II,同時Keil μVision相比ADS在窗口界面上為軟件開發(fā)者提供了一個整潔、方便、高效的環(huán)境,新版本支持更多最新的ARM芯片,比如文中使用的LPC1768微處理器,所以綜合考慮選擇Keil μVision4作為軟件開發(fā)環(huán)境[10]。
第一步:在Keil中新建一個工程,并添加啟動代碼start.s。
第二步:通過http://micrium.com/下載μC/OS-II的工程文件,將下載的源碼包按要求分類加入到新建的工程中。
第三步:按需要對源代碼進行修改,由于修改的源代碼主要與系統(tǒng)內(nèi)核有關(guān),而μC/OS-II里Ports文件夾的文件os_cpu.h、os_cpu_a.asm、os_cpu_c.c都是與系統(tǒng)內(nèi)核有關(guān)的,因此只要對這三個文件進行修改,就能把它移植到嵌入式處理器LPC1768上,如圖2所示。
代理模塊硬件由開發(fā)板和功能模塊組成,如圖3所示。
圖2 μC/OS-II的文件結(jié)構(gòu)
圖3 代理硬件組成
硬件主電路如下:
(1)恩智浦LPC1700,支持可移植μC/os-II操作系統(tǒng)。
(2)有多外設擴展接口供用戶應用,如GPIO接口、CAN總線接口、SPI接口、以太網(wǎng)接口、USB接口、可供下載調(diào)試的JTAG接口等。
(3)開發(fā)板支持多種調(diào)試軟件、調(diào)試工具進行操作,如支持KEIL、IAR等仿真軟件;支持J-LINK、AK100等仿真工具[11]。
(4)儀器模塊:溫度傳感器模塊、二氧化碳模塊、示波器等。
代理軟件在總體結(jié)構(gòu)上是按照硬件適配層、TCP/IP協(xié)議棧層、應用軟件層來劃分的,其中應用層又分為SNMP服務器模塊、掃描儀器模塊、Trap模塊等,硬件適配層包括串口接口驅(qū)動、II2C驅(qū)動等。各層次間的函數(shù)調(diào)用并不一定都是從上往下逐層展開的,例如應用層軟件有可能直接調(diào)用硬件適配層的函數(shù)[12]。軟件總體架構(gòu)如圖4所示。
為了對開發(fā)軟件進行測試,搭建如下的測試系統(tǒng):硬件包括一臺遠端控制計算機、一個路由器和一個LPC1768開發(fā)板,Windows操作系統(tǒng),NMS管理軟件net-snmp-5.4.1-3.exe[13]。
圖4 軟件總體架構(gòu)
在代理LPC1768開發(fā)板上運行SNMP代理,等待遠端管理主機上SNMP管理站的消息請求,測試過程為:首先通過get查看代理的信息,然后通過對代理上的第四個儀器上的四個節(jié)點的訪問,可以查看到儀器的四個屬性包括基本的儀器屬性,例如:儀器名稱、儀器型號等。文中代理1上第四個儀器連接的是一個高精度的溫度傳感器,可以通過get命令實時地查看溫度的變化情況,可以實時地把溫度傳給SNMP的管理站,管理站就可以得到溫度的變化情況。這里以代理1的第四個儀器為例來進行測試。
Get命令格式為:snmpget -v 2c -c 團體名 代理的IP地址 對象OID
snmpget -v 2c -c public 192.168.0.201 1.3.6.1.4.1.1199.1.5.0
響應信息為:
SNMPv2-SMI::enterprise.1199.1.5.0=STRING:“Agent1_lpc1768”
Get命令格式為:snmpget -v 2c -c 團體名 代理的IP地址 對象OID
snmpget -v 2c -c public 192.168.0.201 1.3.6.1.4.1.1199.1.4.1.0
響應信息為:
SNMPv2-SMI::enterprise.1199.1.4.1.0=STRING: “IIC”
Get命令格式為:snmpget -v 2c -c 團體名 代理的IP地址 對象OID
snmpget -v 2c -c public 192.168.0.201 1.3.6.1.4.1.1199.1.4.2.0
響應信息為:
SNMPv2-SMI::enterprise.1199.1.4.2.0=STRING:“p_wendu”
Get命令格式為:snmpget -v 2c -c 團體名 代理的IP地址 對象OID
snmpget -v 2c -c public 192.168.0.201 1.3.6.1.4.1.1199.1.4.3.0
響應信息為:
SNMPv2-SMI::enterprise.1199.1.4.3.0=STRING: “GY-80”
Get命令格式為:snmpget -v 2c -c 團體名 代理的IP地址 對象OID
snmpget -v 2c -c public 192.168.0.201 1.3.6.1.4.1.1199.1.4.4.0
因為1.3.6.1.4.1.1199.1.4.4.0對應的OID是高精度溫度傳感器采集溫度傳上來的十六進制數(shù),是一個實時變化的數(shù)據(jù),所以此時得到的數(shù)據(jù)只能代表此時的溫度。舉例如下,采集到的溫度是:SNMPv2-SMI::enterprise.1199.1.4.4.0=STRING:01 02,然后將傳上來的十六進制的01 02,通過傳感器資料轉(zhuǎn)換成十進制的溫度值:(0*163+1*162+0*161+2+160)/10=25.8,所以此時的空氣溫度是25.8度。
(1)采用keil編譯工具對SNMP_Agent代理源代碼進行編譯、調(diào)試、運行;
(2)采取不同的測試方法,完成對管理對象的操作。
在測試過程中,SNMP代理進程運行在LPC1768開發(fā)板上,其IP地址為:192.168.0.201。該方法使用標準的net-snmp軟件包,通過命令行方式完成系統(tǒng)測試。有關(guān)net-snmp安裝請參考相關(guān)資料,這里不再贅述[14]。對于系統(tǒng)中所有的管理對象的測試方法類似,在此以管理對象對代理1上的第四個儀器測試為例進行說明,其測試結(jié)果如圖5所示。
圖5 NMS測試結(jié)果(1)
從圖5可以看出,SNMP管理站對代理1的管理是成功的。首先查看的是代理的信息,可以查看出是第幾個代理和代理的型號;其次通過get查看代理1上儀器4的每一個節(jié)點,對每一個節(jié)點進行g(shù)et就可以得到不同的屬性??梢奡NMP管理站可以通過與代理之間的交互,直接獲得儀器的數(shù)據(jù)和屬性信息。對代理發(fā)送snmpbulkget命令,通過該命令就可以一次獲得儀器上的多個屬性,文中為了方便對儀器的操作,對snmpgetbulk進行了限制,使其一次獲得最多的儀器屬性為4個,就是在命令行輸入OID節(jié)點,就可以連續(xù)獲得其節(jié)點下面的四個連續(xù)節(jié)點的屬性。
從圖6可以看出,遠程管理主機對代理進行snmpgetnext、set管理是成功的,通過snmpgetnext命令可以得到下一個節(jié)點的值,也就是通過上一個節(jié)點可以查看下一個節(jié)點的值,而通過遠程管理主機向代理首先發(fā)送get命令查詢該管理節(jié)點當前的屬性,然后通過set命令修改該節(jié)點的屬性,最后再通過get命令查詢該節(jié)點的屬性是否修改成功。通過圖6可以看出,set成功修改了儀器原來的名稱,使儀器擁有了一個新的名稱。
圖6 NMS測試結(jié)果(2)
首先對μC/OS-II系統(tǒng)的優(yōu)勢進行了簡單的介紹,對SNMP協(xié)議的SMI、MIB庫以及SNMP規(guī)程進行分析,然后建立私有MIB庫和μC/OS-II系統(tǒng)的移植,通過測試環(huán)境對所需軟硬件的要求,給出設計方案,最后使用標準的net-snmp管理軟件對代理開發(fā)板上的SNMP代理進行請求(get、bulkget、getnext、set),以檢測該代理是否可以實現(xiàn)遠程管理站與儀器之間的通信。結(jié)果表明,測試基本滿足了實現(xiàn)對儀器遠程控制的實時性要求,可能由于以太網(wǎng)的實際應用環(huán)境,會在網(wǎng)絡層及傳輸層產(chǎn)生延遲,會對儀器的實時控制產(chǎn)生影響。