HFC网络管理系统II类应答器设计与实现
2011-06-07平震宇
平震宇
(江苏信息职业技术学院,江苏 无锡 214101)
0 引言
随着双向HFC网络改造大规模地推进,加上政府在政策上的扶持,HFC网络管理被提到各有线电视运营商的日程中来。各大有线电视台在网络改造设备招标中,大部分都提出了网管方面的需求。HFC网管的国际标准陆续颁布,国标的制定工作也已经有了很大的进展,得到了大部分HFC设备厂商的认同与支持。2005年10月12日,《HFC网络设备管理系统规范》被批准为国家标准,2006年5月1日正式实施。在技术和政策方面因素的推动下,国内商用HFC网络管理系统的市场正在全面启动。
国标对网络管理应答设备作出了细致的定义,这是因为网络管理应答器的设计是整个网络管理系统的重点,关系到整个网络管理系统的有效性和兼容性。本文将论述《HFC网络设备管理系统规范》的II类应答器设计思想和总体结构以及MIB库模块扩展等关键技术问题。
1 II类应答器设计和实现
1.1 系统整体框架
完整的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设备。
1.2 HMS的MIB库
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树
1.3 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()函数来实现。
2 系统测试
系统采用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端口。
3 小结
本文论述了利用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.