简单网管协议代理多变量分组查询方法

文档序号:7595663阅读:108来源:国知局
专利名称:简单网管协议代理多变量分组查询方法
技术领域
本发明涉及一种SNMP(简单网管协议-Simple NetworkManagement Protocol)代理多变量分组查询方法。
背景技术
基于简单网管协议SNMP的网络管理模式为管理者-代理(M-A)模式,其中管理者是指发布网络管理命令、接收命令响应的一段程序代码,提供网络管理界面;而代理(Agent)则是指具体执行网络管理命令相应动作的一段程序代码,向管理者返回动作执行结果。管理者采用SNMP协议提供的GetRequest、GetNextRequest等查询命令原语向代理发送网管命令。在这些命令原语中,一次可以绑定多个查询对象,绑定的这些查询对象被称为变量体。SNMP代理程序接收网管命令,根据其中绑定的查询对象,查找它所维护的管理信息库(Management Information Base-MIB),获取对应数据值,以命令响应方式上报给SNMP管理者。因此,SNMP代理的一个重要工作就是根据网管命令,查询MIB库,获取查询对象值。
SNMP代理处理网管命令,传统做法是在完成SNMP查询报文的解析工作后,按照变量体中变量顺序逐个查询对象的值。这种遍历查询方法简单,但是一个严重缺陷是查询速度慢,效率低。实际上,在一次SNMP管理站发起的查询操作中,变量体中往往有多个变量的查询方法一样,都是从同一个数据源获取相同行数据,比如多次访问同一张数据库表获取一条记录等等;或者变量体中有多个重复变量,重复变量的获取方法、值一样。显然,逐个查询这些对象值,就会重复执行相同动作,不仅效率低而且浪费系统资源。

发明内容
本发明的目的就是为了解决上述问题,提出一种高效、通用的简单网管协议代理多变量分组查询方法。
本发明的技术解决方案一种简单网管协议代理多变量分组查询方法,其特征在于它采用如下步骤a.根据管理信息库(MIB库)文件定义简单网管协议(SNMP)代理管理信息库(MIB库)数据结构,该数据结构包括对象的基本信息、对象的索引对象信息,定义获取每个对象实例的方法;b.解析简单网管协议(SNMP)报文,分析变量体,根据简单网管协议(SNMP)报文操作类型处理每个变量,设置变量状态和变量的工作状态;c.对变量体中未处理的变量进行分组,其分组方法是,根据每个变量的对象标识符(OID)查询管理信息库(MIB库),再分析变量的索引值、管理信息库(MIB库)中对象的索引对象类型、管理信息库(MIB库)中对象的获取值方法(Get方法),索引和获取值方法这两类信息分别相同的那些变量归为一组,记录组中变量在变量体中的编号,即完成分组;d.调用组中对象的获取值方法(Get方法),根据管理信息库(MIB库)中对象信息和变量索引值信息查询数据,查询成功绑定组中每个变量的值,标记组中变量为已处理状态;如果不成功根据简单网管协议(SNMP)报文操作类型处理组中每个变量,设置变量状态为已处理状态,并设置变量值为出错标志值;e.重复步骤c和步骤d直至所有变量工作状态为已处理状态。
本发明克服了传统技术中的SNMP代理多变量查询速度慢以及浪费资源的缺点,提出了一种高效、通用的多变量分组查询方法,对变量进行分组,每组变量的查询方法一致,每组变量个数≥1。本发明实现了高速度完成多变量查询,可减少重复的查询操作,减少了查询次数,节约了系统资源和查询时间,提高了查询效率。


图1是本发明方法的基本流程图。
图2是本发明查询命令原语(GetRequest)的处理流程图。
图3是本发明查询下一个命令原语(GetNextRequest)的处理流程图。
具体实施例方式
下面基本按照附图的顺序对本发明的技术方案的实施作进一步的详细描述如图1,本发明的SNMP代理多变量分组查询方法,包括以下步骤步骤一根据MIB库文件定义SNMP代理MIB库数据结构,数据结构包括对象的基本信息、对象的索引对象信息,定义获取每个对象实例的方法。
步骤二解析SNMP报文,分析变量体,根据SNMP报文操作类型处理每个变量,设置变量状态和变量的工作状态。
步骤三对变量体中未处理的变量进行分组,分组方法根据每个变量的OID查询MIB库,再分析变量的索引值、MIB库中对象的索引对象类型、MIB库中对象的获取值方法(Get方法),索引和获取值方法这两类信息分别相同的那些变量归为一组,记录组中变量在变量体中的编号,即完成分组。
步骤四调用组中对象的获取值方法(Get方法),根据MIB库中对象信息和变量索引值信息查询数据,查询成功绑定组中每个变量的值,标记组中变量为已处理状态;如果不成功根据SNMP报文操作类型处理组中每个变量,设置变量状态和工作状态。设置变量状态为已处理状态,并设置变量值为出错标志值。
步骤五重复步骤三和步骤四直至所有变量工作状态为已处理状态。
本发明方法用到的缩略语

本发明的分组查询方法具有高效性,它将多个变量按照一定规则分解为一个或多个变量组,减少了重复操作的次数,以快捷的速度完成数据查询。另外,本发明查询方法还具有通用性,它适合SNMP协议所支持的三类变量查询操作(GetRequest,GetNextRequest,GetBulkRequest)。
首先介绍本发明查询方法所用到的SNMP代理MIB库数据结构。变量分组规则所用到的两个结构信息说明如下。
1)MIB库节点结构名TreeNodeTable结构信息如下

2)MIB库索引信息结构名MIBTreeIdxTable
结构信息如下

配置MIB库节点内容和节点索引内容遵循以下原则1、管理信息库(MIB库)节点结构内容与简单网管协议(SNMP)管理站使用的管理信息库(MIB)文件保持一致。
2、声明并定义管理信息库(MIB库)节点结构中变量获取方法(Get方法),如果没有置为空(NULL)。
3、管理信息库(MIB库)节点对象的索引信息存储在节点索引表中,两者通过节点信息的索引信息表记录号(idxInfoSQ)和索引信息表的索引句柄序号(IdxHandleSq)进行关联。
图2是本发明(GetRequest)的处理流程。
具体步骤如下1、接收简单网管协议(SNMP)管理站发送的查询命令原语(GetRequest)报文,解析报文,分析变量体中变量信息,判断每个变量的对象标识符前缀是否合法、变量索引值是否正确,设置每个变量的状态,标记每个变量的工作状态为未处理状态。
2、依次选取变量体中每个未处理状态的变量,判断变量的状态,如果变量状态正确根据变量的对象标识符(OID)访问管理信息库(MIB库)节点结构表,如果对象标识符(OID)不可访问标记变量值域为无对应实例,标记变量已处理状态;如果变量状态错误,标记变量已处理状态。
3、重复步骤2,直至变量体末。
4、取变量体中第一个未处理状态的变量,根据变量的对象标识符(OID)查找管理信息库(MIB库)节点结构表,如果变量的获取值(Get)函数地址(即TreeNodeTable结构中GetFunction项,下同)不为空,记录变量序号,存储在一个变量序号列表中,记录Get函数地址。
5、查找变量体后续未处理状态的变量,判断该变量的获取值(Get)函数地址和索引值序列、索引类型列表是否和第一个未处理状态的变量相同,如果相同,记录变量序号,存储在同一个变量序号列表中。
6、重复步骤5,直到变量体末。
7、根据获取值(Get)函数地址和变量序号列表、变量索引值序列执行查询操作,依次绑定每个变量的值;如果查询错误,每个变量状态置为错误;如果查询不到数据,每个变量类别置为无对应实例。
8、标记变量序号列表中每个变量为已处理状态。
9、重复步骤4、5、6、7、8,直至变量体每个变量状态都为已处理状态。
10、多变量查询操作结束,简单网管协议(SNMP)代理格式化变量值,返回查询响应报文给简单网管协议(SNMP)管理站。
图3是本发明查询下一个命令原语(GetNextRequest)的处理流程。
具体步骤如下1、接收简单网管协议(SNMP)管理站发送的查询下一个命令原语(GetNextRequest)报文,解析报文,分析变量体中变量信息,判断每个变量的对象标识符前缀是否合法、变量索引值是否正确,设置每个变量的状态,标记每个变量的工作状态为未处理状态。
2、依次选取变量体中每个未处理状态的变量,判断变量的状态,如果变量状态错误,标记变量已处理状态。如果变量状态正确根据变量的对象标识符(OID)访问管理信息库(MIB库)节点结构表,如果变量不可访问,按字典顺序取管理信息库(MIB库)节点结构表下一个节点;如果变量不是叶子节点,按字典顺序取管理信息库(MIB库)节点结构表下一个节点;如果变量是没有索引却带有索引值的叶子节点,按字典顺序取管理信息库(MIB库)节点结构表下一个节点。若按字典顺序查找管理信息库(MIB库)节点结构表后续节点失败,标记变量值域为MIB库视图结尾(endofmibveiw),标记变量为已处理状态。
3、如果变量的索引项为空,根据变量的对象标识符(OID)访问管理信息库(MIB库)节点结构表,如果对应的节点有索引信息,则填充变量的索引类别和个数。
4、重复步骤2、3,直至变量体末。
5、取变量体中第一个未处理状态的变量,根据变量的对象标识符(OID)查找管理信息库(MIB库)节点结构表,如果变量的获取值(Get)函数地址不为空,记录变量序号,存储在一个变量序号列表中,记录Get函数地址。
6、查找变量体后续未处理状态的变量,判断该变量的获取值(Get)函数地址和索引值是否和第一个未处理状态的变量相同,如果相同,记录变量序号,存储在同一个变量序号列表中。
7、重复步骤6,直到变量体末。
8、根据获取值(Get)函数地址和变量序号列表、变量索引值执行查询操作,查询成功依次绑定每个变量的值;如果查询错误,每个变量状态置为错误,标记变量序号列表中每个变量为已处理状态;如果查询不到数据,对变量序号列表中每个变量按照字典顺序取管理信息库(MIB库)节点结构表下一个节点,若不存在字典顺序后续,标记变量值域为MIB库视图结尾(endofmibveiw),标记变量为已处理状态。
9、重复步骤5、6、7、8,直至变量体每个变量状态都为已处理状态。
10、变量查询操作结束,简单网管协议(SNMP)代理格式化变量值,返回查询响应报文给简单网管协议(SNMP)管理站。
权利要求
1.一种简单网管协议代理多变量分组查询方法,其特征在于它采用如下步骤a.根据管理信息库文件定义简单网管协议代理管理信息库数据结构,该数据结构包括对象的基本信息、对象的索引对象信息,定义获取每个对象实例的方法;b.解析简单网管协议报文,分析变量体,根据简单网管协议报文操作类型处理每个变量,设置变量状态和变量的工作状态;c.对变量体中未处理的变量进行分组,其分组方法是,根据每个变量的对象标识符查询管理信息库,再分析变量的索引值、管理信息库中对象的索引对象类型、管理信息库中对象的获取值方法,索引和获取值方法这两类信息分别相同的那些变量归为一组,记录组中变量在变量体中的编号,即完成分组;d.调用组中对象的获取值方法,根据管理信息库中对象信息和变量索引值信息查询数据,查询成功绑定组中每个变量的值,标记组中变量为已处理状态;如果不成功根据简单网管协议报文操作类型处理组中每个变量,设置变量状态为已处理状态,并设置变量值为出错标志值;e.重复步骤c和步骤d直至所有变量工作状态为已处理状态。
2.根据权利要求1所述的简单网管协议代理多变量分组查询方法,其特征在于配置管理信息库节点内容和节点索引内容遵循以下原则a.管理信息库节点结构内容与简单网管协议管理站使用的管理信息库文件保持一致;b.声明并定义管理信息库节点结构中变量获取方法,如果没有置为空;c.管理信息库节点对象的索引信息存储在节点索引表中,两者通过节点信息的索引信息表记录号和索引信息表的索引句柄序号进行关联。
3.根据权利要求1所述的简单网管协议代理多变量分组查询方法,其特征在于其具体步骤如下a.接收简单网管协议管理站发送的查询命令原语报文,解析报文,分析变量体中变量信息,判断每个变量的对象标识符前缀是否合法、变量索引值是否正确,设置每个变量的状态,标记每个变量的工作状态为未处理状态;b.依次选取变量体中每个未处理状态的变量,判断变量的状态,如果变量状态正确根据变量的对象标识符访问管理信息库节点结构表,如果对象标识符不可访问标记变量值域为无对应实例,标记变量已处理状态;如果变量状态错误,标记变量已处理状态;c.重复步骤b,直至处理完所有变量;d.取变量体中第一个未处理状态的变量,根据变量的对象标识符查找管理信息库节点结构表,如果变量的获取值函数地址不为空,记录变量序号,存储在一个变量序号列表中,记录获取值函数地址;e.查找变量体后续未处理状态的变量,判断该变量的获取值函数地址和索引值序列、索引类型列表是否和第一个未处理状态的变量相同,如果相同,记录变量序号,存储在同一个变量序号列表中;f.重复步骤e,直到变量体末;g.根据获取值函数地址和变量序号列表、变量索引值序列执行查询操作,依次绑定每个变量的值;如果查询错误,每个变量状态置为错误;如果查询不到数据,每个变量类别置为无对应实例;h.标记变量序号列表中每个变量为已处理状态;i.重复步骤d、e、f、g、h,直至变量体每个变量状态都为已处理状态;j.多变量查询操作结束,简单网管协议代理格式化变量值,返回查询响应报文给简单网管协议管理站。
4.根据权利要求3所述的简单网管协议代理多变量分组查询方法,其特征在于查询下一个命令原语的具体步骤如下a.接收简单网管协议管理站发送的查询下一个命令原语报文,解析报文,分析变量体中变量信息,判断每个变量的对象标识符前缀是否合法、变量索引值是否正确,设置每个变量的状态,标记每个变量的工作状态为未处理状态;b.依次选取变量体中每个未处理状态的变量,判断变量的状态,如果变量状态错误,标记变量已处理状态;如果变量状态正确根据变量的对象标识符访问管理信息库节点结构表,如果变量不可访问,按字典顺序取管理信息库节点结构表下一个节点;如果变量不是叶子节点,按字典顺序取管理信息库节点结构表下一个节点;如果变量是没有索引却带有索引值的叶子节点,按字典顺序取管理信息库节点结构表下一个节点;若按字典顺序查找管理信息库节点结构表后续节点失败,标记变量值域为管理信息库视图结尾,标记变量为已处理状态;c.如果变量的索引项为空,根据变量的对象标识符访问管理信息库节点结构表,如果对应的节点有索引信息,则填充变量的索引类别和个数;d.重复步骤b、c,直至变量体末;e.取变量体中第一个未处理状态的变量,根据变量的对象标识符查找管理信息库节点结构表,如果变量的获取值函数地址不为空,记录变量序号,存储在一个变量序号列表中,记录获取值函数地址;f.查找变量体后续未处理状态的变量,判断该变量的获取值函数地址和索引值是否和第一个未处理状态的变量相同,如果相同,记录变量序号,存储在同一个变量序号列表中;g.重复步骤f,直到变量体末;h.根据获取值函数地址和变量序号列表、变量索引值执行查询操作,查询成功依次绑定每个变量的值;如果查询错误,每个变量状态置为错误,标记变量序号列表中每个变量为已处理状态;如果查询不到数据,对变量序号列表中每个变量按照字典顺序取管理信息库节点结构表下一个节点,若不存在字典顺序后续,标记变量值域为管理信息库视图结尾,标记变量为已处理状态;i.重复步骤e、f、g、h,直至变量体每个变量状态都为已处理状态;j.变量查询操作结束,简单网管协议代理格式化变量值,返回查询响应报文给简单网管协议管理站。
全文摘要
本发明涉及一种简单网管协议SNMP代理多变量分组查询方法,它根据管理信息库文件定义简单网管协议代理管理信息库数据结构,解析简单网管协议报文,分析变量体,根据简单网管协议报文操作类型处理每个变量,设置变量状态和变量的工作状态,对变量体中未处理的变量进行分组,调用组中对象的获取值方法,根据管理信息库中对象信息和变量索引值信息查询数据,查询成功绑定组中每个变量的值,标记组中变量为已处理状态;如果不成功根据简单网管协议报文操作类型处理组中每个变量,设置变量状态和工作状态,重复前述步骤直至所有变量工作状态为已处理状态。本发明方法实现了高速度完成多变量查询,可大大提高查询效率。
文档编号H04L29/06GK1753402SQ20041006471
公开日2006年3月29日 申请日期2004年9月22日 优先权日2004年9月22日
发明者吕燕, 李玉鹏 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1