平震宇
(江蘇信息職業(yè)技術(shù)學(xué)院,江蘇 無錫 214101)
隨著雙向HFC網(wǎng)絡(luò)改造大規(guī)模地推進(jìn),加上政府在政策上的扶持,HFC網(wǎng)絡(luò)管理被提到各有線電視運(yùn)營商的日程中來。各大有線電視臺(tái)在網(wǎng)絡(luò)改造設(shè)備招標(biāo)中,大部分都提出了網(wǎng)管方面的需求。HFC網(wǎng)管的國際標(biāo)準(zhǔn)陸續(xù)頒布,國標(biāo)的制定工作也已經(jīng)有了很大的進(jìn)展,得到了大部分HFC設(shè)備廠商的認(rèn)同與支持。2005年10月12日,《HFC網(wǎng)絡(luò)設(shè)備管理系統(tǒng)規(guī)范》被批準(zhǔn)為國家標(biāo)準(zhǔn),2006年5月1日正式實(shí)施。在技術(shù)和政策方面因素的推動(dòng)下,國內(nèi)商用HFC網(wǎng)絡(luò)管理系統(tǒng)的市場正在全面啟動(dòng)。
國標(biāo)對網(wǎng)絡(luò)管理應(yīng)答設(shè)備作出了細(xì)致的定義,這是因?yàn)榫W(wǎng)絡(luò)管理應(yīng)答器的設(shè)計(jì)是整個(gè)網(wǎng)絡(luò)管理系統(tǒng)的重點(diǎn),關(guān)系到整個(gè)網(wǎng)絡(luò)管理系統(tǒng)的有效性和兼容性。本文將論述《HFC網(wǎng)絡(luò)設(shè)備管理系統(tǒng)規(guī)范》的II類應(yīng)答器設(shè)計(jì)思想和總體結(jié)構(gòu)以及MIB庫模塊擴(kuò)展等關(guān)鍵技術(shù)問題。
完整的HFC網(wǎng)絡(luò)管理系統(tǒng)包括基于SNMP協(xié)議的HFC設(shè)備管理軟件、連接IP網(wǎng)絡(luò)與HFC網(wǎng)絡(luò)的前端控制器網(wǎng)關(guān)和安裝于被管理設(shè)備端的應(yīng)答器。國標(biāo)定義了I/II/III類應(yīng)答器,I類應(yīng)答器需要通過前端控制器(Headend Element,HE)來進(jìn)行協(xié)議轉(zhuǎn)換,完成 SNMP/IP到SNMP/MAC/RF的轉(zhuǎn)換?;贗P接口的II/III類應(yīng)答器是標(biāo)準(zhǔn)SNMP/IP接口,直接與SNMP管理站相聯(lián)。II類應(yīng)答器的物理層符合IEEE802.314條規(guī)定的10BASE-T規(guī)范,在UDP/IP協(xié)議棧上實(shí)現(xiàn)SNMP V1.0協(xié)議,用于HFC網(wǎng)設(shè)備管理的SNMP代理。由于目前絕大部分采用非標(biāo)準(zhǔn)網(wǎng)管接口的前端機(jī)房設(shè)備,應(yīng)答器與被管設(shè)備之間的接口(如光平臺(tái)/光站、放大器、供電器等)需要定制專門的協(xié)議轉(zhuǎn)換器,它與被管設(shè)備之間一般為自定義協(xié)議通過串口進(jìn)行通信[1]。系統(tǒng)協(xié)議模型如圖1所示。
II類應(yīng)答器主要功能有:
1)II類應(yīng)答器需要支持SNMP V1.0協(xié)議規(guī)定的協(xié)議數(shù)據(jù)單元(PDU),負(fù)責(zé)接收、處理來自網(wǎng)管站的請求報(bào)文,然后從設(shè)備上其他協(xié)議模塊中取得管理變量的數(shù)值,形成響應(yīng)報(bào)文,反送給SNMP管理站。在一些緊急情況下,如接口狀態(tài)發(fā)生改變、呼叫成功等情況,主動(dòng)通知SNMP管理站(發(fā)送陷阱TRAP報(bào)文)。II類應(yīng)答器接收SNMP管理站請求報(bào)文 SetRequest,Get Request和 Get Next Request,II類應(yīng)答器以GetResponse消息報(bào)文響應(yīng)請求。GetRequest取回一個(gè)或多個(gè)參數(shù)值,使用GetNextRequest請求表中的下一個(gè)參數(shù)值,通過GetRequest和GetNextRequest結(jié)合起來使用可以獲得一個(gè)表中的參數(shù)值。SetRequest對設(shè)備中的參數(shù)進(jìn)行遠(yuǎn)程配置(如設(shè)備的配置參數(shù)、設(shè)置報(bào)警門限等)。此外,通過端口162發(fā)送給管理站的Trap(告警)報(bào)文消息,告知管理站設(shè)備發(fā)生了一個(gè)特定事件(如端口失敗、掉電重起等),管理站可作出相應(yīng)的處理。
2)II類應(yīng)答器需要與HFC設(shè)備通信,按照各種設(shè)備的私有協(xié)議獲取設(shè)備參數(shù)以及按照SNMP管理要求設(shè)置設(shè)備參數(shù)。需要根據(jù)II類應(yīng)答器與被管理設(shè)備之間通信的特性,設(shè)計(jì)串口通信協(xié)議,規(guī)定通信傳輸?shù)姆绞?、速率、等待超時(shí)時(shí)間、通信中斷判斷、通信幀結(jié)構(gòu)等。
系統(tǒng)整體構(gòu)架借助于net-snmp。net-snmp是開放源代碼的簡單網(wǎng)絡(luò)管理協(xié)議軟件,它從ucd-snmp更名過來,ucd-snmp源自Carnegie-Mellon大學(xué)的SNMP軟件包 CMU-snmp,由University of Califonia at Davis開發(fā)和維護(hù),故命名為ucd-snmp。2000年11月,ucd-snmp轉(zhuǎn)由SourceForge管理,并更名為net-snmp。net-snmp支持 SNMP V1.0,SNMP V2.0c與 SNMP V3.0。net-snmp軟件包主要由以下內(nèi)容組成:可擴(kuò)展的SNMP代理程序(snmpd),SNMP代理和管理程序開發(fā)庫,用于請求或設(shè)置 SNMP代理變量的工具程序(snmpget,snmpset,snmptable,snmpwalk等),用于生成或處理SNMP陷阱(trap)的工具程序(snmptrapd 和 snmptrap)等。 II類應(yīng)答器系統(tǒng)框架如圖2所示。
網(wǎng)管代理進(jìn)程snmpd是net-snmp主代理程序,按照SNMP協(xié)議完成II類應(yīng)答器與SNMP管理站之間的信息交互,從管理信息庫(Management Information Base,MIB)獲取或設(shè)置相應(yīng)數(shù)據(jù),以響應(yīng)相應(yīng)的請求或根據(jù)MIB的相應(yīng)數(shù)據(jù)決定Trap的發(fā)送。當(dāng)接收到管理站發(fā)送的GET命令,在MIB樹中查詢相應(yīng)對象的值經(jīng)過解析與組裝SNMP包,發(fā)送給SNMP管理站;如果是SET命令,則在MIB樹中對相應(yīng)對象設(shè)值,修改數(shù)據(jù)共享區(qū)相應(yīng)數(shù)值。當(dāng)II類應(yīng)答器檢查某被管對象滿足閾值條件時(shí),發(fā)送Trap消息給SNMP管理站。snmpd包括了眾多標(biāo)準(zhǔn)MIB的實(shí)現(xiàn),可以使用子代理對其進(jìn)行擴(kuò)展。
net-snmp提供了接口以便于擴(kuò)展MIB,使用netsnmp擴(kuò)展代理有兩種方式:(1)靜態(tài)鏈接形式,通過修改配置頭文件,在相應(yīng)地方包含新引入的MIB模塊的.c和.h文件,然后重新編譯庫文件和代理程序;(2)共享鏈接庫形式,只須把新引入的MIB模塊的.c和.h文件編譯成動(dòng)態(tài)庫,通過設(shè)置能夠讓代理程序載入。MIB擴(kuò)展模塊將按照HMS的MIB增加相應(yīng)的實(shí)現(xiàn)代碼。
數(shù)據(jù)共享區(qū)可以使用內(nèi)存共享或者文件共享的方式,主要用于MIB擴(kuò)展模塊獲取HFC設(shè)備數(shù)據(jù)以及提供配置數(shù)據(jù)信息。數(shù)據(jù)共享區(qū)是MIB擴(kuò)展模塊與設(shè)備輪詢模塊之間數(shù)據(jù)交換的通道。
設(shè)備數(shù)據(jù)輪詢模塊與設(shè)備通信協(xié)議模塊共同完成被管理設(shè)備的數(shù)據(jù)采集與設(shè)置。輪詢進(jìn)程主要完成與管理設(shè)備的模塊通信的功能,由于應(yīng)答器需要管理不止一個(gè)設(shè)備,因此對于設(shè)備的通信過程主要通過輪詢的方式來訪問。將收集到的本地設(shè)備存放到數(shù)據(jù)共享區(qū)中。設(shè)備通信協(xié)議模塊為一個(gè)獨(dú)立的、可加載的模塊,將根據(jù)被管設(shè)備的種類加載相對應(yīng)的模塊程序,從而使得應(yīng)答器可以適應(yīng)不同的HFC設(shè)備。
MIB定義代理進(jìn)程中所有可被查詢和修改的參數(shù),指明了網(wǎng)絡(luò)元素所維持的變量 (即能夠被管理站查詢和設(shè)置的信息),給出了一個(gè)網(wǎng)絡(luò)中所有可能的被管理對象的數(shù)據(jù)結(jié)構(gòu)。MIB是一種樹型結(jié)構(gòu)的數(shù)據(jù)庫,被監(jiān)管的對象都處于葉子節(jié)點(diǎn)上。每個(gè)被監(jiān)管對象都由一個(gè)唯一的對象標(biāo)識符來識別。對象信息的存儲(chǔ)結(jié)構(gòu)由MIB定義的簡單變量和表來構(gòu)造,一般包含描述名(對象標(biāo)識符)、數(shù)據(jù)類型、讀寫規(guī)則、功能描述、狀態(tài)。
系統(tǒng)采用的MIB可以根據(jù)項(xiàng)目要求采用按照國標(biāo)定義的MIB或者按照SCTE HMS定義的MIB。HMS定義了眾多的MIB文本以實(shí)現(xiàn)對傳輸設(shè)備的管理,其中HMS Root-MIB和HMS Tree-MIB定義了其他眾多MIB在ISO的MIB樹中的位置,如圖3所示;commonIdent定義了與應(yīng)答器相關(guān)的通用管理信息,包含應(yīng)答器本身的相關(guān)信息、應(yīng)答器MAC層的管理信息和應(yīng)答器的射頻特性參數(shù)信息等;alarmsIdent定義了具有報(bào)警功能的模擬、離散參數(shù)報(bào)警信息的編碼格式;propertyIdent定義了對具有報(bào)警功能的模擬、離散參量的管理、維護(hù)的一組信息;此外,針對HFC網(wǎng)絡(luò)多種類型的傳輸設(shè)備,HMS分別定義了相對應(yīng)的MIB,比如fnIdent定義了室外光節(jié)點(diǎn)設(shè)備的相關(guān)管理信息;psIdent定義了電源設(shè)備的相關(guān)管理信息[2-3]。MIB文本包含了被管理設(shè)備的所有的管理信息,為應(yīng)答器的設(shè)計(jì)提供了有效的依據(jù)。
圖3 HMS的MIB樹
由于引入HFC設(shè)備(即MIB庫發(fā)生了變化),需要net-snmp原有的模塊上擴(kuò)展代理以支持新的MIB庫。首先需要編寫MIB文件,定義節(jié)點(diǎn)名稱、位置、類型、訪問限制和簡單注釋等。對于II類應(yīng)答器將使用HMS定義的MIB文件,將MIB文件放在net-snmp源文件目錄的mibs目錄下。擴(kuò)展代理通常采用靜態(tài)連接方式,該方式是在編譯過程中把擴(kuò)展的MIB模塊編譯進(jìn)代理程序中??梢越柚鷑et-snmp軟件包中的mib2c工具生成大致的程序框架,MIB代理模塊的實(shí)現(xiàn)可以在mib2e生成的程序框架基礎(chǔ)上進(jìn)行添加修改,也可以參照net-snmp提供的例子example.c和example.h,在其基礎(chǔ)上進(jìn)行修改。使用參數(shù)(--with-mib-modules=scte)重新配置并編譯Agent程序,并且需要?jiǎng)?chuàng)建一個(gè)頭文件,列表單個(gè)的MIB模塊,如 config_require(scte/commonAdminGroup)。
筆者在由mib2c生成的*.h和*.c的基礎(chǔ)上進(jìn)行修改,實(shí)現(xiàn)設(shè)備參數(shù)的訪問與控制功能的完整程序。MIB模塊一般都由變量和表組成,因此net-snmp把SMI中的對象分為scalar和table。scalar包含常用的整型、字符串、時(shí)間等數(shù)據(jù)類型。table是scalar的一種集合,有一個(gè)或多個(gè)列組成,類似于數(shù)據(jù)庫中的表。它必須具有索引項(xiàng),用來按一定順序檢索表項(xiàng)。下面對實(shí)現(xiàn)擴(kuò)展代理的主要模塊進(jìn)行詳細(xì)分析,分析程序中如何實(shí)現(xiàn)單個(gè)變量 (以commonAdminGroup為例)以及table(以hePsUnitTable為例)的get和set功能,最后介紹Trap的實(shí)現(xiàn)方法。
1.3.1 簡單變量的實(shí)現(xiàn)方法
1)修改commonAdminGroup.h文件。commonAdmin-Group.h 聲明了初始化函數(shù) init_commonAdminGroup()、get方法使用的函數(shù) var_commonAdminGroup()、set方法使用的函數(shù)write_commonLogicalID()等函數(shù)。可以在此聲明一些預(yù)定義的全局變量,定義需要使用的結(jié)構(gòu)等。
2)修改init模塊。init_commonAdminGroup模塊主要完成擴(kuò)展代理的初始化功能。init_commonAdminGroup模塊用 commonAdminGroup_variables_oid[]={1,3,6,1,4,1,5591,1,3,1}定義了需要擴(kuò)展的 MIB 在 MIB樹中的具體位置。然后以一個(gè)variable4結(jié)構(gòu)的數(shù)組commonAdminGroup_variables[]定義了該節(jié)點(diǎn)下的葉子節(jié)點(diǎn),對每個(gè)節(jié)點(diǎn)的描述是按照magic number、變量類型、讀寫權(quán)限、回調(diào)函數(shù)、變量長度和變量后綴的順序組成。初始化的最主要的功能是注冊需要擴(kuò)展的MIB,用net-snmp提供的函數(shù)REGISTER_MIB(“commonAdmin-Group”,commonAdminGroup_variables,variable4,common-AdminGroup_variables_oid)來實(shí)現(xiàn)。按照commonAdmin-Group節(jié)點(diǎn)下面的變量設(shè)置初始數(shù)據(jù)。
3)get實(shí)現(xiàn)模塊。get功能是SNMP的基本功能,也是最常用的重要功能。commonAdminGroup.c文件中實(shí)現(xiàn)get功能的是commonAdminGroup.h中聲明的var_common-AdminGroup()函數(shù),該函數(shù)結(jié)構(gòu)非常清晰,是switch case結(jié)構(gòu),switch中的條件變量就是magic number,由一個(gè)指針對象vp控制;case對應(yīng)的就是每個(gè)具體的magic number。需要對每個(gè)case做具體的添加和修改,返回用戶需要get的變量值。實(shí)例代碼如下:
unsigned char *var_commonAdminGroup(struct variable*vp,oid
4)set實(shí)現(xiàn)模塊。commonAdminGroup.c文件中實(shí)現(xiàn)set功能的是write_commonLogicalID()函數(shù),與get函數(shù)不同的是,switch條件中的是action,即一種操作;case包括RESERVEl,RESERVE2,F(xiàn)REE,ACTION,UNDO 和 COMMIT幾個(gè)部分。前2個(gè)是保留的,F(xiàn)REE用于釋放資源,ACTION是set真正要實(shí)現(xiàn)的功能,但只保存在內(nèi)存中,UNDO是取消上一次操作,COMMIT是提交,把ACTION所做的事情提交。實(shí)例代碼如下:
1.3.2 Table的實(shí)現(xiàn)方法
SNMP中把一些標(biāo)量在邏輯上組織在一起,形成一個(gè)邏輯上的表結(jié)構(gòu):一些單個(gè)對象作為表中的列,所有的列組成表中的一行 (entry),若干個(gè)行就組成了一個(gè)表(table)。跟關(guān)系型的表一樣,SNMP中的表也需要有索引,不然無法唯一地標(biāo)識行。索引的設(shè)計(jì)需要考慮到索引列能不能唯一地標(biāo)識列,如果有歧義將會(huì)引起很多問題,是不被支持的。從實(shí)現(xiàn)方式和數(shù)據(jù)結(jié)構(gòu)來看,表是一個(gè)結(jié)構(gòu)體變量數(shù)組;從系統(tǒng)管理來看,就是數(shù)據(jù)庫中的表單。hePsUnitTable是機(jī)架電源信息表,如圖4所示。
圖4 hePsUnitTableMIB樹
每個(gè)電源信息將是一行記錄,每一行將包括輸入電流、輸入功率、型號、輸入電壓以及設(shè)備號組成,設(shè)備號是由entPhysicalTable定義的,作為檢索電源的索引。Table的實(shí)現(xiàn)比單個(gè)變量要復(fù)雜,但同樣可以借助mib2c-c mib2c.mfd.conf hePsUnitTable生成大致的程序框架。mib2c.mfd.conf提供了更加細(xì)致的代碼框架,通過多層交互,可以區(qū)分實(shí)時(shí)、半實(shí)時(shí)、永久型的數(shù)據(jù),可以選擇數(shù)據(jù)的存儲(chǔ)方式,可以作為列或表之間的依賴關(guān)系,數(shù)據(jù)結(jié)構(gòu)的自動(dòng)綁定或手工編輯,以及其他復(fù)雜的選項(xiàng)。
1)修改結(jié)構(gòu)體hePsUnitTable_rowreq_ctx。hePsUnit-Table_rowreq_ctx是最重要的一個(gè)結(jié)構(gòu),保存了hePsUnitTable中的所有數(shù)據(jù)或者指針。hePsUnitTable_mib_index 是 entPhysicalIndex(表的索引),hePsUnitTable_data是定義的電流、功率等數(shù)據(jù)。代碼如下:
2)初始化表中數(shù)據(jù)。hePsUnitTable_cache_load()函數(shù)初始化表中數(shù)據(jù)。需要從共享數(shù)據(jù)中把電源信息獲取并填入表中。代碼如下:
3)修改get,set實(shí)現(xiàn)模塊。操作步驟與簡單變量相似。
1.3.3 Trap的實(shí)現(xiàn)方法
為了更好地實(shí)現(xiàn)網(wǎng)絡(luò)的故障管理,在HMS MIB中定義相應(yīng)的系統(tǒng)告警信息來實(shí)現(xiàn)告警的實(shí)時(shí)響應(yīng)并進(jìn)行故障診斷。對于Trap報(bào)文,即代理向管理進(jìn)程發(fā)送預(yù)定義事件的異步通知,在SNMP V1.0和SNMP V2.0中不需要管理進(jìn)程發(fā)送響應(yīng)報(bào)文,因而代理無法知道管理進(jìn)程如何響應(yīng)它的Trap報(bào)文。管理進(jìn)程可以通過兩種方法在UDP的162端口得到Trap報(bào)文:一種是中斷驅(qū)動(dòng)報(bào)告方式,即實(shí)時(shí)發(fā)送警告報(bào)文;另一種是輪詢方式,即適時(shí)地詢問每個(gè)代理,有無異常情況需要報(bào)告。本文使用的流程是在SNMP進(jìn)程啟動(dòng)時(shí),讀取設(shè)備告警信息,并通過trap發(fā)送給網(wǎng)管,然后定時(shí)地檢測設(shè)備告警的情況,如果設(shè)備告警情況有變,則再發(fā)送trap消息,通過send_v2trap()函數(shù)來實(shí)現(xiàn)。
系統(tǒng)采用ARM7TDMI內(nèi)核的ARM處理器,操作系統(tǒng)采用PPClinux,硬件平臺(tái)配置為:CPU選用Philip公司的 LPC2200 芯片;SDRAM16Mbyte;2Mbyte NOR Flash+8 Mbyte NAND Flash;串口;以太網(wǎng)口。
基本測試環(huán)境包括兩個(gè)組成部分,即SNMP管理站所在的測試系統(tǒng)部分和II類應(yīng)答器與B平臺(tái),SNMP管理站使用測試軟件MIB-Browser。運(yùn)行snmpd代理,在默認(rèn)的161端口就可以通過對HMS MIB的訪問實(shí)現(xiàn)對設(shè)備的實(shí)時(shí)監(jiān)控。用MIB Browser對insidePlantIdent組中的節(jié)點(diǎn)進(jìn)行Get操作獲取變量的值,對比所取回的變量值與實(shí)際值相同。對MIB庫定義的可讀寫的參數(shù)進(jìn)行Set操作,設(shè)置完成后用get取回的值與set設(shè)置的值一致。同時(shí)snmpd代理也具有trap監(jiān)聽功能,可以接收系統(tǒng)發(fā)來的一些標(biāo)準(zhǔn)的trap信息如冷熱啟動(dòng)等,設(shè)備發(fā)生故障時(shí)可以使用將trap信息發(fā)送至162端口。
本文論述了利用net-snmp軟件包實(shí)現(xiàn)可擴(kuò)展SNMP代理的技術(shù)和方法實(shí)現(xiàn)HFC網(wǎng)絡(luò)管理系統(tǒng)中的II類應(yīng)答器,其重點(diǎn)是編寫代理操作支持例程程序以及處理擴(kuò)展部分,采用模塊化的結(jié)構(gòu),可根據(jù)需要擴(kuò)展所支持的管理信息庫模塊,實(shí)現(xiàn)新的應(yīng)用。將擴(kuò)展的SNMP程序移植到開發(fā)板上后,測試和驗(yàn)證了II類應(yīng)答器的有效性。本系統(tǒng)符合國內(nèi)標(biāo)準(zhǔn)《HFC網(wǎng)絡(luò)設(shè)備管理系統(tǒng)規(guī)范草案》,在濟(jì)南、重慶等地的HFC網(wǎng)絡(luò)管理系統(tǒng)中得到運(yùn)用,系統(tǒng)運(yùn)行穩(wěn)定可靠。
[1]Tutorials[EB/OL].[2010-03-20].http://www.net-snmp.org/wiki/index.php/Tutorials.
[2]ANSI/SCTE 25-22002.Hybrid Fiber Coax Outside Plant Status Monitoring-Media Access Control(MAC)Layer Specification vl.0[S].2002.
[3]ANSI/SCTE 25-12002.Hybrid Fiber Coax Outside Plant Status Monitoring-Physical(PHY)Layer Specification vl.0[S].2002.