平震宇
(江蘇信息職業技術學院,江蘇 無錫 214101)
隨著雙向HFC網絡改造大規模地推進,加上政府在政策上的扶持,HFC網絡管理被提到各有線電視運營商的日程中來。各大有線電視臺在網絡改造設備招標中,大部分都提出了網管方面的需求。HFC網管的國際標準陸續頒布,國標的制定工作也已經有了很大的進展,得到了大部分HFC設備廠商的認同與支持。2005年10月12日,《HFC網絡設備管理系統規范》被批準為國家標準,2006年5月1日正式實施。在技術和政策方面因素的推動下,國內商用HFC網絡管理系統的市場正在全面啟動。
國標對網絡管理應答設備作出了細致的定義,這是因為網絡管理應答器的設計是整個網絡管理系統的重點,關系到整個網絡管理系統的有效性和兼容性。本文將論述《HFC網絡設備管理系統規范》的II類應答器設計思想和總體結構以及MIB庫模塊擴展等關鍵技術問題。
完整的HFC網絡管理系統包括基于SNMP協議的HFC設備管理軟件、連接IP網絡與HFC網絡的前端控制器網關和安裝于被管理設備端的應答器。國標定義了I/II/III類應答器,I類應答器需要通過前端控制器(Headend Element,HE)來進行協議轉換,完成 SNMP/IP到SNMP/MAC/RF的轉換。基于IP接口的II/III類應答器是標準SNMP/IP接口,直接與SNMP管理站相聯。II類應答器的物理層符合IEEE802.314條規定的10BASE-T規范,在UDP/IP協議棧上實現SNMP V1.0協議,用于HFC網設備管理的SNMP代理。由于目前絕大部分采用非標準網管接口的前端機房設備,應答器與被管設備之間的接口(如光平臺/光站、放大器、供電器等)需要定制專門的協議轉換器,它與被管設備之間一般為自定義協議通過串口進行通信[1]。系統協議模型如圖1所示。

II類應答器主要功能有:
1)II類應答器需要支持SNMP V1.0協議規定的協議數據單元(PDU),負責接收、處理來自網管站的請求報文,然后從設備上其他協議模塊中取得管理變量的數值,形成響應報文,反送給SNMP管理站。在一些緊急情況下,如接口狀態發生改變、呼叫成功等情況,主動通知SNMP管理站(發送陷阱TRAP報文)。II類應答器接收SNMP管理站請求報文 SetRequest,Get Request和 Get Next Request,II類應答器以GetResponse消息報文響應請求。GetRequest取回一個或多個參數值,使用GetNextRequest請求表中的下一個參數值,通過GetRequest和GetNextRequest結合起來使用可以獲得一個表中的參數值。SetRequest對設備中的參數進行遠程配置(如設備的配置參數、設置報警門限等)。此外,通過端口162發送給管理站的Trap(告警)報文消息,告知管理站設備發生了一個特定事件(如端口失敗、掉電重起等),管理站可作出相應的處理。
2)II類應答器需要與HFC設備通信,按照各種設備的私有協議獲取設備參數以及按照SNMP管理要求設置設備參數。需要根據II類應答器與被管理設備之間通信的特性,設計串口通信協議,規定通信傳輸的方式、速率、等待超時時間、通信中斷判斷、通信幀結構等。
系統整體構架借助于net-snmp。net-snmp是開放源代碼的簡單網絡管理協議軟件,它從ucd-snmp更名過來,ucd-snmp源自Carnegie-Mellon大學的SNMP軟件包 CMU-snmp,由University of Califonia at Davis開發和維護,故命名為ucd-snmp。2000年11月,ucd-snmp轉由SourceForge管理,并更名為net-snmp。net-snmp支持 SNMP V1.0,SNMP V2.0c與 SNMP V3.0。net-snmp軟件包主要由以下內容組成:可擴展的SNMP代理程序(snmpd),SNMP代理和管理程序開發庫,用于請求或設置 SNMP代理變量的工具程序(snmpget,snmpset,snmptable,snmpwalk等),用于生成或處理SNMP陷阱(trap)的工具程序(snmptrapd 和 snmptrap)等。 II類應答器系統框架如圖2所示。

網管代理進程snmpd是net-snmp主代理程序,按照SNMP協議完成II類應答器與SNMP管理站之間的信息交互,從管理信息庫(Management Information Base,MIB)獲取或設置相應數據,以響應相應的請求或根據MIB的相應數據決定Trap的發送。當接收到管理站發送的GET命令,在MIB樹中查詢相應對象的值經過解析與組裝SNMP包,發送給SNMP管理站;如果是SET命令,則在MIB樹中對相應對象設值,修改數據共享區相應數值。當II類應答器檢查某被管對象滿足閾值條件時,發送Trap消息給SNMP管理站。snmpd包括了眾多標準MIB的實現,可以使用子代理對其進行擴展。
net-snmp提供了接口以便于擴展MIB,使用netsnmp擴展代理有兩種方式:(1)靜態鏈接形式,通過修改配置頭文件,在相應地方包含新引入的MIB模塊的.c和.h文件,然后重新編譯庫文件和代理程序;(2)共享鏈接庫形式,只須把新引入的MIB模塊的.c和.h文件編譯成動態庫,通過設置能夠讓代理程序載入。MIB擴展模塊將按照HMS的MIB增加相應的實現代碼。
數據共享區可以使用內存共享或者文件共享的方式,主要用于MIB擴展模塊獲取HFC設備數據以及提供配置數據信息。數據共享區是MIB擴展模塊與設備輪詢模塊之間數據交換的通道。
設備數據輪詢模塊與設備通信協議模塊共同完成被管理設備的數據采集與設置。輪詢進程主要完成與管理設備的模塊通信的功能,由于應答器需要管理不止一個設備,因此對于設備的通信過程主要通過輪詢的方式來訪問。將收集到的本地設備存放到數據共享區中。設備通信協議模塊為一個獨立的、可加載的模塊,將根據被管設備的種類加載相對應的模塊程序,從而使得應答器可以適應不同的HFC設備。
MIB定義代理進程中所有可被查詢和修改的參數,指明了網絡元素所維持的變量 (即能夠被管理站查詢和設置的信息),給出了一個網絡中所有可能的被管理對象的數據結構。MIB是一種樹型結構的數據庫,被監管的對象都處于葉子節點上。每個被監管對象都由一個唯一的對象標識符來識別。對象信息的存儲結構由MIB定義的簡單變量和表來構造,一般包含描述名(對象標識符)、數據類型、讀寫規則、功能描述、狀態。
系統采用的MIB可以根據項目要求采用按照國標定義的MIB或者按照SCTE HMS定義的MIB。HMS定義了眾多的MIB文本以實現對傳輸設備的管理,其中HMS Root-MIB和HMS Tree-MIB定義了其他眾多MIB在ISO的MIB樹中的位置,如圖3所示;commonIdent定義了與應答器相關的通用管理信息,包含應答器本身的相關信息、應答器MAC層的管理信息和應答器的射頻特性參數信息等;alarmsIdent定義了具有報警功能的模擬、離散參數報警信息的編碼格式;propertyIdent定義了對具有報警功能的模擬、離散參量的管理、維護的一組信息;此外,針對HFC網絡多種類型的傳輸設備,HMS分別定義了相對應的MIB,比如fnIdent定義了室外光節點設備的相關管理信息;psIdent定義了電源設備的相關管理信息[2-3]。MIB文本包含了被管理設備的所有的管理信息,為應答器的設計提供了有效的依據。

圖3 HMS的MIB樹
由于引入HFC設備(即MIB庫發生了變化),需要net-snmp原有的模塊上擴展代理以支持新的MIB庫。首先需要編寫MIB文件,定義節點名稱、位置、類型、訪問限制和簡單注釋等。對于II類應答器將使用HMS定義的MIB文件,將MIB文件放在net-snmp源文件目錄的mibs目錄下。擴展代理通常采用靜態連接方式,該方式是在編譯過程中把擴展的MIB模塊編譯進代理程序中。可以借助net-snmp軟件包中的mib2c工具生成大致的程序框架,MIB代理模塊的實現可以在mib2e生成的程序框架基礎上進行添加修改,也可以參照net-snmp提供的例子example.c和example.h,在其基礎上進行修改。使用參數(--with-mib-modules=scte)重新配置并編譯Agent程序,并且需要創建一個頭文件,列表單個的MIB模塊,如 config_require(scte/commonAdminGroup)。
筆者在由mib2c生成的*.h和*.c的基礎上進行修改,實現設備參數的訪問與控制功能的完整程序。MIB模塊一般都由變量和表組成,因此net-snmp把SMI中的對象分為scalar和table。scalar包含常用的整型、字符串、時間等數據類型。table是scalar的一種集合,有一個或多個列組成,類似于數據庫中的表。它必須具有索引項,用來按一定順序檢索表項。下面對實現擴展代理的主要模塊進行詳細分析,分析程序中如何實現單個變量 (以commonAdminGroup為例)以及table(以hePsUnitTable為例)的get和set功能,最后介紹Trap的實現方法。
1.3.1 簡單變量的實現方法
1)修改commonAdminGroup.h文件。commonAdmin-Group.h 聲明了初始化函數 init_commonAdminGroup()、get方法使用的函數 var_commonAdminGroup()、set方法使用的函數write_commonLogicalID()等函數。可以在此聲明一些預定義的全局變量,定義需要使用的結構等。
2)修改init模塊。init_commonAdminGroup模塊主要完成擴展代理的初始化功能。init_commonAdminGroup模塊用 commonAdminGroup_variables_oid[]={1,3,6,1,4,1,5591,1,3,1}定義了需要擴展的 MIB 在 MIB樹中的具體位置。然后以一個variable4結構的數組commonAdminGroup_variables[]定義了該節點下的葉子節點,對每個節點的描述是按照magic number、變量類型、讀寫權限、回調函數、變量長度和變量后綴的順序組成。初始化的最主要的功能是注冊需要擴展的MIB,用net-snmp提供的函數REGISTER_MIB(“commonAdmin-Group”,commonAdminGroup_variables,variable4,common-AdminGroup_variables_oid)來實現。按照commonAdmin-Group節點下面的變量設置初始數據。
3)get實現模塊。get功能是SNMP的基本功能,也是最常用的重要功能。commonAdminGroup.c文件中實現get功能的是commonAdminGroup.h中聲明的var_common-AdminGroup()函數,該函數結構非常清晰,是switch case結構,switch中的條件變量就是magic number,由一個指針對象vp控制;case對應的就是每個具體的magic number。需要對每個case做具體的添加和修改,返回用戶需要get的變量值。實例代碼如下:
unsigned char *var_commonAdminGroup(struct variable*vp,oid

4)set實現模塊。commonAdminGroup.c文件中實現set功能的是write_commonLogicalID()函數,與get函數不同的是,switch條件中的是action,即一種操作;case包括RESERVEl,RESERVE2,FREE,ACTION,UNDO 和 COMMIT幾個部分。前2個是保留的,FREE用于釋放資源,ACTION是set真正要實現的功能,但只保存在內存中,UNDO是取消上一次操作,COMMIT是提交,把ACTION所做的事情提交。實例代碼如下:

1.3.2 Table的實現方法
SNMP中把一些標量在邏輯上組織在一起,形成一個邏輯上的表結構:一些單個對象作為表中的列,所有的列組成表中的一行 (entry),若干個行就組成了一個表(table)。跟關系型的表一樣,SNMP中的表也需要有索引,不然無法唯一地標識行。索引的設計需要考慮到索引列能不能唯一地標識列,如果有歧義將會引起很多問題,是不被支持的。從實現方式和數據結構來看,表是一個結構體變量數組;從系統管理來看,就是數據庫中的表單。hePsUnitTable是機架電源信息表,如圖4所示。

圖4 hePsUnitTableMIB樹
每個電源信息將是一行記錄,每一行將包括輸入電流、輸入功率、型號、輸入電壓以及設備號組成,設備號是由entPhysicalTable定義的,作為檢索電源的索引。Table的實現比單個變量要復雜,但同樣可以借助mib2c-c mib2c.mfd.conf hePsUnitTable生成大致的程序框架。mib2c.mfd.conf提供了更加細致的代碼框架,通過多層交互,可以區分實時、半實時、永久型的數據,可以選擇數據的存儲方式,可以作為列或表之間的依賴關系,數據結構的自動綁定或手工編輯,以及其他復雜的選項。
1)修改結構體hePsUnitTable_rowreq_ctx。hePsUnit-Table_rowreq_ctx是最重要的一個結構,保存了hePsUnitTable中的所有數據或者指針。hePsUnitTable_mib_index 是 entPhysicalIndex(表的索引),hePsUnitTable_data是定義的電流、功率等數據。代碼如下:

2)初始化表中數據。hePsUnitTable_cache_load()函數初始化表中數據。需要從共享數據中把電源信息獲取并填入表中。代碼如下:


3)修改get,set實現模塊。操作步驟與簡單變量相似。
1.3.3 Trap的實現方法
為了更好地實現網絡的故障管理,在HMS MIB中定義相應的系統告警信息來實現告警的實時響應并進行故障診斷。對于Trap報文,即代理向管理進程發送預定義事件的異步通知,在SNMP V1.0和SNMP V2.0中不需要管理進程發送響應報文,因而代理無法知道管理進程如何響應它的Trap報文。管理進程可以通過兩種方法在UDP的162端口得到Trap報文:一種是中斷驅動報告方式,即實時發送警告報文;另一種是輪詢方式,即適時地詢問每個代理,有無異常情況需要報告。本文使用的流程是在SNMP進程啟動時,讀取設備告警信息,并通過trap發送給網管,然后定時地檢測設備告警的情況,如果設備告警情況有變,則再發送trap消息,通過send_v2trap()函數來實現。
系統采用ARM7TDMI內核的ARM處理器,操作系統采用PPClinux,硬件平臺配置為:CPU選用Philip公司的 LPC2200 芯片;SDRAM16Mbyte;2Mbyte NOR Flash+8 Mbyte NAND Flash;串口;以太網口。
基本測試環境包括兩個組成部分,即SNMP管理站所在的測試系統部分和II類應答器與B平臺,SNMP管理站使用測試軟件MIB-Browser。運行snmpd代理,在默認的161端口就可以通過對HMS MIB的訪問實現對設備的實時監控。用MIB Browser對insidePlantIdent組中的節點進行Get操作獲取變量的值,對比所取回的變量值與實際值相同。對MIB庫定義的可讀寫的參數進行Set操作,設置完成后用get取回的值與set設置的值一致。同時snmpd代理也具有trap監聽功能,可以接收系統發來的一些標準的trap信息如冷熱啟動等,設備發生故障時可以使用將trap信息發送至162端口。
本文論述了利用net-snmp軟件包實現可擴展SNMP代理的技術和方法實現HFC網絡管理系統中的II類應答器,其重點是編寫代理操作支持例程程序以及處理擴展部分,采用模塊化的結構,可根據需要擴展所支持的管理信息庫模塊,實現新的應用。將擴展的SNMP程序移植到開發板上后,測試和驗證了II類應答器的有效性。本系統符合國內標準《HFC網絡設備管理系統規范草案》,在濟南、重慶等地的HFC網絡管理系統中得到運用,系統運行穩定可靠。
[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.