王 濤,李宥謀,劉永斌,趙成青
(西安郵電大學 計算機學院,陜西 西安 710000)
隨著互聯網的飛速發展,網絡設備往往由許多相對獨立的可管理模塊組成,并要求實現靈活擴展,以滿足特定的應用[1]。由于這些可管理模塊可能包含其相應的標準或私有的MIB庫,故對于網絡管理,尤其是對代理的可擴展性提出了更高的要求。然而作為網絡管理協議業界標準的簡單網絡管理協議(simple network management protocol,SNMP),卻沒有提供能將眾多模塊納入統一的SNMP管理之下的解決方案[2]。網絡管理標準共有SNMP(v1/v2c/3)三個版本,應用最多的是v1和v2c版本。由于HFC(混合光纖同軸電纜網)接入網還沒有定義標準的節點,因此,要用SNMP對設備進行管理,必須要擴展原有的MIB。由于不同設備的操作系統有很大的區別,這就要求代理程序能夠方便地進行移植,不應帶有專有系統的痕跡[3]。
為了滿足這一需求,選擇一款合適的RTOS(嵌入式實時操作系統,embedded real-time operation system)具有十分重要的意義。當下比較流行的嵌入式操作系統有:美國WindRiver公司的VxWorks、Windows CE、μClinux、μC/OS-II,另外還有eCos等[4]。μC/OS-II是一款優秀的嵌入式實時操作系統,移植時十分的簡單,只需要對CPU中相關的三個文件進行修改即可,而且占用空間小、執行效率高,可以滿足文中的需求[5]。
SMI規范了被管對象的表示和命名方法,以及MIB中各類信息的數據類型。為了保證管理信息具有唯一識別性,可對被管對象命名和標識。標識由一個簡單的文本描述和一個整數組成,在消息傳遞中比名字更容易編碼,更節省空間[6]。因此,使用標識定義被管對象。對象標識采用樹形結構來管理信息目錄。
為了實現被管設備的網絡管理,每一個被管理元素被看作是一個對象,而MIB就是這些對象的結構化集合。MIB使用SMI和ASN.1來描述管理信息,管理信息建立在SMI定義的信息樹下(iso.org.dod.internet),每個管理信息都是管理信息樹的一個節點,擁有唯一的對象標識(object identifier,OID)。MIB庫定義了管理信息的OID、類型、取值、權限,管理者通過管理協議對MIB庫的信息進行存取和訪問,就可以實現基本的網絡管理,因此對MIB庫的訪問存取是實現網絡管理的關鍵[7]。
建立的私有MIB如圖1所示。

圖1 MIB庫的建立
由于樹中的每個節點都有唯一的一個雙親節點,因此,采用“雙親表示法”存儲MIB樹型結構。雙親表示法和二叉樹的雙親鏈表相類似,用一組連續的存儲空間(一維數組)存儲樹中的各個節點。數組中的一個元素采用樹中的一個節點,每個節點含兩個域,數據域存放節點本身信息,雙親域指示本節點的雙親節點在數組中的位置。
這種表示方法有利于更快速地查找父節點和根節點[8]。
SNMP以UDP協議為基礎,規定了管理者和Agent之間SNMP報文信息交互的一些語法、語義和交互基本規則。為了方便實現管理者與Agent之間信息的交互,SNMP提供了一套命令(get、set、bulkget、getnext、Trap)來實現對MIB信息的存取訪問。
針對ARM處理器常用的開發工具有ADS(ARM developer suite)、Keil μVision、ARM-Linux-GCC/GDB、Embedded VC等,其中GCC/GDB主要用于嵌入式Linux系統的開發,Embedded VC主要用于WinCE系統下的嵌入式開發[9]。
由于文中是基于嵌入式實時操作系統μC/OS-II,同時Keil μVision相比ADS在窗口界面上為軟件開發者提供了一個整潔、方便、高效的環境,新版本支持更多最新的ARM芯片,比如文中使用的LPC1768微處理器,所以綜合考慮選擇Keil μVision4作為軟件開發環境[10]。
第一步:在Keil中新建一個工程,并添加啟動代碼start.s。
第二步:通過http://micrium.com/下載μC/OS-II的工程文件,將下載的源碼包按要求分類加入到新建的工程中。
第三步:按需要對源代碼進行修改,由于修改的源代碼主要與系統內核有關,而μC/OS-II里Ports文件夾的文件os_cpu.h、os_cpu_a.asm、os_cpu_c.c都是與系統內核有關的,因此只要對這三個文件進行修改,就能把它移植到嵌入式處理器LPC1768上,如圖2所示。
代理模塊硬件由開發板和功能模塊組成,如圖3所示。

圖2 μC/OS-II的文件結構

圖3 代理硬件組成
硬件主電路如下:
(1)恩智浦LPC1700,支持可移植μC/os-II操作系統。
(2)有多外設擴展接口供用戶應用,如GPIO接口、CAN總線接口、SPI接口、以太網接口、USB接口、可供下載調試的JTAG接口等。
(3)開發板支持多種調試軟件、調試工具進行操作,如支持KEIL、IAR等仿真軟件;支持J-LINK、AK100等仿真工具[11]。
(4)儀器模塊:溫度傳感器模塊、二氧化碳模塊、示波器等。
代理軟件在總體結構上是按照硬件適配層、TCP/IP協議棧層、應用軟件層來劃分的,其中應用層又分為SNMP服務器模塊、掃描儀器模塊、Trap模塊等,硬件適配層包括串口接口驅動、II2C驅動等。各層次間的函數調用并不一定都是從上往下逐層展開的,例如應用層軟件有可能直接調用硬件適配層的函數[12]。軟件總體架構如圖4所示。
為了對開發軟件進行測試,搭建如下的測試系統:硬件包括一臺遠端控制計算機、一個路由器和一個LPC1768開發板,Windows操作系統,NMS管理軟件net-snmp-5.4.1-3.exe[13]。

圖4 軟件總體架構
在代理LPC1768開發板上運行SNMP代理,等待遠端管理主機上SNMP管理站的消息請求,測試過程為:首先通過get查看代理的信息,然后通過對代理上的第四個儀器上的四個節點的訪問,可以查看到儀器的四個屬性包括基本的儀器屬性,例如:儀器名稱、儀器型號等。文中代理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是高精度溫度傳感器采集溫度傳上來的十六進制數,是一個實時變化的數據,所以此時得到的數據只能代表此時的溫度。舉例如下,采集到的溫度是:SNMPv2-SMI::enterprise.1199.1.4.4.0=STRING:01 02,然后將傳上來的十六進制的01 02,通過傳感器資料轉換成十進制的溫度值:(0*163+1*162+0*161+2+160)/10=25.8,所以此時的空氣溫度是25.8度。
(1)采用keil編譯工具對SNMP_Agent代理源代碼進行編譯、調試、運行;
(2)采取不同的測試方法,完成對管理對象的操作。
在測試過程中,SNMP代理進程運行在LPC1768開發板上,其IP地址為:192.168.0.201。該方法使用標準的net-snmp軟件包,通過命令行方式完成系統測試。有關net-snmp安裝請參考相關資料,這里不再贅述[14]。對于系統中所有的管理對象的測試方法類似,在此以管理對象對代理1上的第四個儀器測試為例進行說明,其測試結果如圖5所示。

圖5 NMS測試結果(1)
從圖5可以看出,SNMP管理站對代理1的管理是成功的。首先查看的是代理的信息,可以查看出是第幾個代理和代理的型號;其次通過get查看代理1上儀器4的每一個節點,對每一個節點進行get就可以得到不同的屬性。可見SNMP管理站可以通過與代理之間的交互,直接獲得儀器的數據和屬性信息。對代理發送snmpbulkget命令,通過該命令就可以一次獲得儀器上的多個屬性,文中為了方便對儀器的操作,對snmpgetbulk進行了限制,使其一次獲得最多的儀器屬性為4個,就是在命令行輸入OID節點,就可以連續獲得其節點下面的四個連續節點的屬性。
從圖6可以看出,遠程管理主機對代理進行snmpgetnext、set管理是成功的,通過snmpgetnext命令可以得到下一個節點的值,也就是通過上一個節點可以查看下一個節點的值,而通過遠程管理主機向代理首先發送get命令查詢該管理節點當前的屬性,然后通過set命令修改該節點的屬性,最后再通過get命令查詢該節點的屬性是否修改成功。通過圖6可以看出,set成功修改了儀器原來的名稱,使儀器擁有了一個新的名稱。

圖6 NMS測試結果(2)
首先對μC/OS-II系統的優勢進行了簡單的介紹,對SNMP協議的SMI、MIB庫以及SNMP規程進行分析,然后建立私有MIB庫和μC/OS-II系統的移植,通過測試環境對所需軟硬件的要求,給出設計方案,最后使用標準的net-snmp管理軟件對代理開發板上的SNMP代理進行請求(get、bulkget、getnext、set),以檢測該代理是否可以實現遠程管理站與儀器之間的通信。結果表明,測試基本滿足了實現對儀器遠程控制的實時性要求,可能由于以太網的實際應用環境,會在網絡層及傳輸層產生延遲,會對儀器的實時控制產生影響。