可扩展SNMP代理在WiMAX 网管模块中的应用

来源:岁月联盟 作者:蒋晓萍 时间:2010-08-30
摘要 本文介绍有关可扩展SNMP代理入手,提出了可扩展SNMP代理在WiMAX中的应用方案,并描述了具体的实现方法。关键词  SNMP;主代理;子代理;WiMAX. 

1 引言

WiMAX(World Interoperability for Microwave Access,全球微波接入互操作性)是一项基于IEEE 802.16标准的宽带无线接入城域网(Broadband Wireless Access Metropolitan Area Network,BWAMAN)技术。作为一项新兴的无线通信技术,它能提供面向互联网的高速连接,具有强大的技术优势:传输距离远、接入速度高、无“最后一公里”瓶颈限制、提供广泛的多媒体通信服务等。WiMAX具有广阔的应用前景。

2 可扩展SNMP代理

SNMP(Simple Network Management Protocol,简单管理协议)是一种基于TCP/IP的互联网网管协议,它能对互联网络中的不同种类的设备进行监控和管理,对网络中存在的问题进行定位。SNMP由于其简洁高效的特点,目前被广泛用于机网络管理,也是网络设备开发必须遵循的网络管理协议。早期的代理进程是一种编译好的静态代码集,在其运行时无法动态的增加或删除MIB实例。可扩展SNMP代理的引入,拓宽了基于SNMP网络管理系统对网络设备、重要部件及应用的控制能力,灵活可靠的扩展性,可以随时以模块化的方式将一个新加入的设备或部件纳入被管理的范围。可扩展代理有一个主代理(master agent)和多个子代理(subagent)组成。主代理以代理的身份和网管站通信,发送和接收SNMP协议信息,但是基本访问不到管理信息。子代理不能访问主代理处理的SNMP信息,但是可以访问管理信息。主代理和网络管理站通过SNMP通信,与每个子代理是通过AgentX协议通信。主代理负责接收与响应网络管理站的命令,并对命令进行解析,如果网络管理站所请求的MIB变量在自己本地的MIB中,那么主代理的行为与一个标准SNMP代理完全相同,就本地处理之后响应到网络管理站。如果网络管理站所请求的MIB变量不在自己的本地MIB中,它会找出管理此MIB变量的子代理,并向这个子代理发送请求,子代理收到请求之后,取得这个MIB变量的值并将其返回给主代理,主代理再将此MIB变量的值响应到网络管理站。

3 WiMAX中的可扩展SNMP代理

    在WiMAX中,对操作维护控制器和WiMAX接入网控制器的接口的软件管理、事件管理、硬件管理等管理是基于SNMP协议的,其中的SNMP模块如图1所示。
     
  图 1  SNMP 实现模型 每个模块的主要作用为:SNMP主代理:它处理来自操作维护控制器的请求,如果这个请求是在WiMAX接入网控制器的扩展MIB中,它将把消息传递给SNMP子代理。在WiMAX中,免费软件包netsnmp的snmpd充当SNMP的主代理,它支持许多标准的MIB库,作为独立的进程运行,这里开发所用的标准接口都由netsnmp提供。SNMP子代理:它实现WiMAX接入网控制器的扩展MIB,主要处理操作维护模块部分的关于软件管理、事件管理、硬件管理等管理的请求。这里SNMP子代理有两方面作用:⑴ 监听来自SNMP主代理的请求,如果发现有来自主代理的请求,它将调用相关的操作维护模块接口来处理这个请求。在实际系统中,MIB 库由操作维护模块维护,也即子代理不需要本地维护MIB库,只需通过调用与操作维护模块之间的接口来完成对MIB数据的操作。当主代理接收到请求的MIB 变量在WiMAX接入网控制器扩展MIB中时,主代理将请求转到子代理 。子代理通过与操作维护模块主进程通信来得知是对WiMAX接入网控制器MIB对象进行取或设置操作。然后子代理调用操作维护模块提供的接口来get/set/get-next对象,然后将结果返还给主代理。这些操作在子代理线程中实现。⑵ 监听来自操作维护模块主进程的信息,如果接收到信息,它将信息打包成SNMP的TRAP数据包,然后发送到SNMP主代理。这个操作在陷阱处理线程中实现。

四 设计与实现

在操作维护模块进程中SNMP 子代理有两个线程组成:子代理线程和陷阱处理线程。⑴ 子代理线程 由于在MIB库中有标量和表两种不同的定义,所以有分别对标量和表的处理。由于两者处理过程相似,这里我们以对表的处理为例。                ① 当次代理发现有get/set/get-next请求信息,就读入这个消息并解析,得到这个请求的列的对象标识和索引 ② 我们会定义一张objAttr表,它是存放所有标量和表的对象类型和设置位属性的全局变量,它的数据结构包含:列的对象标识、列的对象标识的长度、MIB中定义的列对象的类型、只读或可读写标识。由步骤1得到的列的对象标识查找objAttr表,得到列对象的类型和设置标识。③ 根据请求信息中的模式,确定是GET、SET或GETNEXT 模式。④ 如果是SET模式,首先它会检查由步骤2得到的设置标识是只读还是可读写,来确定这一列能否被设置。如果该列是可读写的,则通过对象标识查找表regGetAndSetApi,得到操作维护模块提供的应用编程接口(这里我们会得到set操作的接口),并调用该接口来设置所请求的变量,并返回成功。如果该对象变量不能被设置,子代理则拒绝请求并返回,但不需要通知操作维护模块;如果对象标识所对应的接口没有找到,则返回并打印错误信息。这里表regGetAndSetApi是全局变量。当注册时,对象标识所对应的操作维护模块提供的应用编程接口就被保存在表中,它的数据结构包含:列的对象标识、列的对象标识的长度、GET或SET模式、  要返回的操作维护模块的接口。图2展示了WiMAX中主代理和子代理间的通信机制,图中我们以SET操作为例。图2 SNMP主代理与子代理的通信机制(SET)图2中,操作维护控制器相当于管理站,它向SNMP发送SET请求,要求设置表notRunningSW中的descriptionFileName项,主代理发现请求的MIB变量不在自己的本地MIB中,于是向子代理发送请求,子代理收到请求后,进行步骤4的操作,最后把设置结果或出错消息返回给主代理,主代理再将其响应到网络管理站,完成SET操作。⑤ 如果是GET模式,用对象标识查找regGetAndSetApi 表,得到操作维护模块的应用编程接口(这里我们会得到get操作的接口),然后调用这个接口得到消息中所请求的变量,并把值返回给主代理,主代理再将此MIB变量的值响应到网络管理站。如果这个对象标识对应的接口没有找到,则返回并且打印错误信息。⑥ 如果是GETNEXT模式,首先它会查表tableType得到表的类型。表的类型有SORTED和UNSORTED两种情况。如果表的索引的类型是整型(integer),表类型就是SORTED,其他情况表类型就是UNSORTED。表tableType就是用来存放表的这种属性的一个全局变量。a  如果表类型是SORTED,则通过查表regGetNextIndexApi(该表存放的是相应的操作维护模块提供的得到当前索引的下一个索引的接口),并调用相应接口取到下一个索引。如果接口没有找到,则返回并打印错误信息。b   如果表类型是UNSORTED,它会首先查找表regGetFirstIndexApi(这里存放的是的找到表第一个索引的接口),并调用接口来得到这张表的第一个索引,我们会创建一张索引表来本地存储这个索引。然后它搜索表regGetNextIndexApi,并不断调用接口来查找下一个索引,使得所有的索引被遍历到,并且把它们在本地的索引表中按字典序排好。最后查找这张已排好序的索引表来找到当前索引的下一个索引。如果在这些过程中,接口没有找到,则返回并打印出错信息。这里需要说明的是,在(1)中,由于索引是整形的,操作维护模块会事先把索引按字典序排好,所以我们通过调用接口就可以直接找到下一个索引。⑦ 等到下一个索引得到后,首先判断这个新索引是否是表的第一个索引。如果不是,则之后取值的过程就同GET模式,操作完成。如果这个新索引是表的第一个索引,有两种情况:a  正常情况:如果这个新的列的标识不大于这个表的最大列标识,说明这个对象在该表中,则之后的取值过程就同GET模式。b  非正常情况:如果这个列的标识大于这个表的最大列标识,说明所得到的对象变量已不在这个表中了,它将跳出对表的处理。值得注意的是,在这里我们就不需要再专门定义子代理和操作维护模块进程之间的get-next的操作了。当要得到表中的下一个实体的时候,我们首先由步骤6得到当前索引的下一个索引(这是按字典序的),然后按步骤7调用GET模式的接口就可以得到所要求的变量了。最后子代理将这个MIB变量的值返回给主代理,主代理再将此MIB变量响应到网络管理站。⑵ 陷阱处理线程陷阱处理线程是一个独立的线程,它处理来自操作维护模块的消息。处理过程如下,图3是子代理向主代理发送trap消息的流程。① 首先trap会发送子代理初始化信息;② 然后它以阻塞方式从消息队列中接收消息,在这里如果没有收到任何消息则不会占用CPU;③ 当陷阱处理线程从消息队列中收到消息,它读取消息内容然后打包成SNMP TRAP 数据包;④ 调用接口将数据包发送出去。如果收到的是错误消息类型或者无法解析消息内容,那么将丢弃这条消息。在图3中,操作维护模块主进程发送内部消息到消息队列,子代理按上述步骤从队列中读取消息,再打包发送,把“software download progress 20%”这条信息告知主代理,然后主代理再把消息发送到网络管理站,完成整个trap消息的发送。图3   TRAP 消息发送模型

5 结束语

由以上分析可以看出,利用SNMP来开发网管系统非常方便可行,在引入子代理以后,结构非常清晰,节省了系统的开销,使得我们能更加有效,快速地开发出具有自主知识产权的网管产品。

(References)

[1] M.Daniele, R.Wijnen, M.Ellison, D.Francisco.  Agent Extensibility (AgentX) Protocol Version 1.RFC 2741,January 2000:p5-10.[2]J.Case, M.Fedor ,M.Schoffstall, J.Davin.  A Simple NetWork Management Protocol (SNMP). RFC 1157,May 1990.[3] D.Harrington, R.Presuhn, B.Wijnen. An Architecture for Describing Simple Network Management Protocol(SNMP) Management Frameworks. RFC 3411,December 2002:p4-8.[4]William Stallings. SNMPv3:A Security Enhancement For SNMP. IEEE Communications Surveys,Fourth Quarter 1998.Vol.1 No.1.

图片内容