一种跨平台跨方法的SNMP扩展MIB实现方法.pdf

上传人:g**** 文档编号:969922 上传时间:2018-03-22 格式:PDF 页数:13 大小:571.63KB
返回 下载 相关 举报
摘要
申请专利号:

CN200910058011.4

申请日:

2009.01.04

公开号:

CN101572624A

公开日:

2009.11.04

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效|||公开

IPC分类号:

H04L12/24; G06F9/44

主分类号:

H04L12/24

申请人:

四川川大智胜软件股份有限公司

发明人:

胡 术

地址:

610045四川省成都市武侯科技园武科东一路7号

优先权:

专利代理机构:

成都信博专利代理有限责任公司

代理人:

潘育敏

PDF下载: PDF下载
内容摘要

一种跨平台跨方法的SNMP扩展MIB实现方法属计算机网络管理范畴。在SNMP主代理和SNMP子代理之间建立了一个中间层,该中间层接口设置两级框架,第一级框架是专门用于扩展代理开发的框架,第二级框架是扩展代理框架EAgentX++,含若干不同的扩展代理开发技术的API编程接口,两级框架一起被封装在AgentFrame内。对外提供简单接口进行使用,开发者仅需要以类似填空的方式提供必须由开发者完成的代码,开发者在开发过程中体会不到平台和方法的差异,可快速实现扩展。本接口可在有新的SNMP扩展技术出现时,同样使用上面的技术加入到封装中,而保持接口不变,不断适应新形式的需要和要求。

权利要求书

1、  一种跨平台跨方法的SNMP扩展MIB实现方法,其特征在于:在SNMP主代理和SNMP子代理之间建立一个开发扩展MIB的中间层,该中间层接口设置两级框架,第一级框架是专门用于扩展代理开发的框架,包括跨平台串口、网络收发接口以及字节流快速处理库、扩展代理程序所需的许多外围功能模块,这些模块被封装在代理开发框架AgentFrame内;第二级框架是扩展代理框架EAgentX++,含若干不同的扩展代理开发技术的API编程接口,包括一个初始化处理接口、一个运行与事件处理接口、一个可以对MIB文件中描述的节点信息即OID配置回调函数的机制,该框架与第一级框架一起被封装在AgentFrame内;在EAgentX++开发设计中,跳过每种扩展代理的RFC文档,根据EAgentX++的公用接口设计具体到不同平台和不同扩展协议的细节封装,实现该接口不变但可以不断添加新的扩展MIB方法的C++编程接口;在接口中完成了传统扩展代理的基本步骤:(a)MIB的初始化、(b)与主代理建立连接、(c)MIB的注册、(d)等待请求、(e)接收请求、(f)对请求的处理、(g)结果送出;对基本步骤中的(a)(b)(c)作为框架的初始化部分做初始化处理;步骤中(e)和(g)完全由扩展代理的API函数提供,(d)由select机制或由扩展代理的API函数触发,步骤(e)、(g)、(d)都被封装进运行和事件处理接口中;步骤(f)则完全由本方法的使用者按照配置的回调函数机制来自行实现和完成。

2、
  如权利要求1所述的SNMP扩展MIB实现方法,其特征在于:所述在第二级框架中有一个初始化处理接口,是在初始化接口里完成各平台各方法的初始化处理,传入两个参数,第一个参数pInitFunc为MIB节点OID信息初始化的函数,作为一个函数指针传入,完成MIB树的构建;第二个参数为配置文件,包括MIB文件的名称,实现子树的根节点OID,共同体名,以及个别平台和方法需要使用的def文件名,在pInitFunc指向的函数中,将MIB文件中各节点OID的信息及回调处理加入类型为SETree的列表中,在InitEAgentx函数中,在完成读取配置文件并完成每种不同平台及方法扩展代理特定的初始化处理后,调用pInitFunc指向的回调函数,得到需要处理MIB的所有节点信息,然后调用不同平台及扩展方法的特定MIB注册函数,完成初始化。

3、
  如权利要求1所述的SNMP扩展MIB实现方法,其特征在于:所述在第二级框架中的运行与事件处理接口和对OID配置的回调函数进行调用是由名为_Run的驱动函数来提供,当初始化完成后,_Run驱动函数完成:各种扩展代理把与主代理网络联接的Fd送入select函数或类似方法中形成异步接收的等待提交状态,在收到主代理的请求时Fd被置位,之后将获取该请求的类型及ODI信息,其获取该请求的类型是Set或Get或Get Next中的一种,这时调用在初始化时注册的对应的ODI的EsetFunc或EgetFunc回调函数,最后调用不同平台和方法的特定函数完成向主代理的提交工作。

说明书

一种跨平台跨方法的SNMP扩展MIB实现方法
技术领域
本发明属计算机网络管理技术范畴,特别是一种跨平台跨方法的SNMP扩展MIB实现方法。
背景技术
SNMP(Simple Network Manage Protocol即简单网络管理)技术是网络管理的事实标准,也是网管软件开发中必须掌握的技术。SNMP技术可以从命令的收发分为两个方面:管理站和代理端。管理站开发比较常用也比较简单,代理端一般情况下由操作系统或网络产品里的嵌入式系统提供。
在实际应用中常常会有设备或软件甚至一个较大的应用系统不提供基于SNMP但提供基于其他方式的监控硬件接口和协议,对于使用第三方网管软件的系统来讲,将不能监视该设备。为了解决这类问题,几乎所有提供SNMP服务的UNIX操作系统都提供了扩展MIB的API接口,方便开发者为这些设备和软件提供基于SNMP的MIB(Management Information Base即管理信息库)信息,这些被扩展实现的MIB信息称作扩展MIB,实现扩展MIB的软件通常为进程或动态库,被称为扩展代理,扩展代理一方面和被监控的硬件或软件系统通过私有的、非标准协议通讯,一方面使用标准的SNMP协议对外提供扩展的MIB信息。扩展MIB技术历史悠久,方法和协议众多,差异很大,任何一个接口在学习上具有相当难度。
在SNMP开发中,代理的开发一般分为两类:1.类似Agent++这样为特殊应用生成特定MIB信息;2.使用每个平台自带SNMP主代理提供的扩展机制,即使用扩展代理开发技术,使用扩展代理技术实现委托代理有如下优点:
1、一般的,实现扩展代理的函数接口和数据接口是每个支持SNMP的操作系统都会提供;
2、扩展代理的函数接口和数据接口是每个提供SNMP代理服务的进程都实现的;
3、扩展代理生成的MIB子树是对系统标准MIB树的扩充,符合MIB树本身的扩充规范;
4、扩展代理是基于操作系统级的SNMP代理服务的扩展,扩展的部分是作为该操作系统SNMP实现的一部分提供给管理站的;
5、扩展代理和系统原有SNMP代理类似父子的关系,扩展代理一般也称为子代理,这也反映了子代理和主代理之间的通信关系;
6、扩展代理支持Trap机制。
作为最为复杂的SNMP基础技术之一,使用扩展代理接口开发委托代理有如下需要面对的技术难点:
1、扩展代理技术历史悠久,种类繁多,从早期的SMUX,DPI到现在流行的EAgent;
2、同一种扩展代理技术表现不同,如SMUX协议在AIX上和LINUX下表现不同;
3、不同操作系统平台下提供的扩展代理的机制不同,差异巨大;
4、同一操作系统的可能提供多种代理扩展方法,差异巨大;
5、不同操作系统存在的扩展机制一样但扩展编程接口不同;
6、以上5点差异所引发的编程上的极大不同。
发明内容
本发明的目的是提供一种跨平台跨方法的SNMP扩展MIB实现方法,解决在为硬件和软件系统提供基于UNIX平台下的SNMP接口时,扩展代理技术在多种UNIX平台下学习难度大、时间长,不支持团队开发的缺点,快速实施扩展。
本发明的目的是这样达到的:
一种跨平台跨方法的SNMP扩展MIB实现方法,其特征在于:在SNMP主代理和SNMP子代理之间建立一个开发扩展MIB的中间层。该中间层接口设置两级框架,第一级框架是专门用于扩展代理开发的框架,包括跨平台串口、网络收发接口以及字节流快速处理库、扩展代理程序所需的许多外围功能模块,这些模块被封装在代理开发框架AgentFrame内;第二级框架是扩展代理框架EAgentX++,含若干不同的扩展代理开发技术的API编程接口,包括一个初始化处理接口、一个运行与事件处理接口、一个可以对MIB文件中描述的节点信息即OID配置回调函数的机制,该框架与第一级框架一起被封装在AgentFrame内。在EAgentX++开发设计中,跳过每种扩展代理的RFC文档,根据EAgentX++的公用接口设计具体到不同平台和不同扩展协议的细节封装,实现该接口不变但可以不断添加新的扩展MIB方法的C++编程接口。在接口中完成了传统扩展代理的基本步骤:(a)MIB的初始化、(b)与主代理建立连接、(c)MIB的注册、(d)等待请求、(e)接收请求、(f)对请求的处理、(g)结果送出;对基本步骤中的(a)(b)(c)作为框架的初始化部分做初始化处理;步骤中(e)和(g)完全由扩展代理的API函数提供,(d)由select机制或由扩展代理的API函数触发,步骤(e)、(g)、(d)都被封装进运行和事件处理接口中;步骤(f)则完全由本方法的使用者按照配置的回调函数机制来自行实现和完成。
所述在第二级框架中有一个初始化处理接口,是在初始化接口里完成各平台各方法的初始化处理,传入两个参数,第一个参数pInitFunc为MIB节点OID信息初始化的函数,作为一个函数指针传入,完成MIB树的构建。第二个参数为配置文件,包括MIB文件的名称,实现子树的根节点OID,共同体名,以及个别平台和方法需要使用的def文件名,在pInitFunc指向的函数中,将MIB文件中各节点OID的信息及回调处理加入类型为SETree的列表中,在InitEAgentx函数中,在完成读取配置文件并完成每种不同平台及方法扩展代理特定的初始化处理后,调用pInitFunc指向的回调函数,得到需要处理MIB的所有节点信息,然后调用不同平台及扩展方法的特定MIB注册函数,完成初始化。
所述在第二级框架中的运行与事件处理接口和对OID配置的回调函数进行调用是由名为_Run的驱动函数来提供,当初始化完成后,_Run驱动函数完成:各种扩展代理把与主代理网络联接的Fd送入select函数或类似方法中形成异步接收的等待提交状态,在收到主代理的请求时Fd被置位,之后将获取该请求的类型及ODI信息,其获取该请求的类型是Set或Get或Get Next中的一种,这时调用在初始化时注册的对应的ODI的EsetFunc或EgetFunc回调函数,最后调用不同平台和方法的特定函数完成向主代理的提交工作。
本发明的积极效果是:在SNMP主代理和SNMP子代理之间建立了一个中间层,跨平台跨方法地实现了SNMP扩展MIB的快速开发。本方法提供的接口进行了专家级的封装,采用了两级框架结构,对外提供简单接口以满足一般开发人员的快速开发需要。开发者使用该方法可以:1.快速地开发实现与硬件设备的监控通信工作;2.在对SNMP知识仅作了解的情况下配置MIB节点的处理,然后调用两个该方法提供的函数即可完成需要大量学习才能完成的工作;3.为不支持SNMP的硬件设备提供标准化的SNMP监控接口,方便使用第三方监控软件对硬件实施监控。该接口由于具有一般性,对未来的UNIX系统的扩展MIB技术也提供支持。当有新的SNMP扩展技术出现时,由于接口提供的都是扩展代理必须提供的共性接口,所以同样可以使用上面的技术加入到封装中,而保持接口不变,不断适应新形式的需要和要求。
附图说明
图1是AgentFrame代理开发框架结构图;
图2是EAgentX++结构图;
图3初始化实现示意图;
图4_Run函数实现示意图。
具体实施方式
本发明采用了两级框架,一级框架主要解决编写UNIX平台下select多路复用,代理异步接收外部数据等编程问题,二级框架主要解决代理信息的MIB化的问题,这两个框架最终实现了跨平台跨方法的SNMP扩展问题。
以上两级框架是为方便开发而专门设计的用于扩展代理开发的框架,框架中的类互相协作,为扩展代理提供可复用的架构。开发者使用这个框架可以更好地关注具体的应用本身。目标是通过在框架中加入不多的代码来开发出稳定、高效的扩展代理软件。
基于框架的开发使得开发人员对单个任务的开发工作量非常小,较小的工作量可以保证较少的错误发生,所以非常适合团队实施快速开发;由于大部分开发工作是类似的,所以可以在扩展代理的开发工作可以确认几个典型的例子作为模板,开发人员以此作为参照实施编码,可以实现编码的规范化,这进一步保证了开发质量。
在提供监控接口的硬件中,以串口形式和网络形式作为通信手段提供监控信息的居多,在这个框架中提供跨平台串口类以及网络收发接口,同时针对串口数据的字节流特性还专门有一个名为streamproc的字节流快速处理库。
如图1所示,AgentFrame封装了开发一个扩展代理程序所需的许多外围功能,如进程的精灵化(Daemon)、多路复用(multiplex)、日志接口(Log)、字节流处理(StreamProc)、线程池(Thread_pool)、串口库(serial)、定时器(Timer)、网络(NetWork)等,这些功能一般是开发人员在与硬件设备实施监控通讯中经常会独自开发并且容易隐藏错误的,通过编写这些服务,保证了大部分代码的可靠,框架的使用者只要编写必要的代码即可完成开发工作。例如,如果要为一个使用串口接入的设备开发监控的委托代理,通过配置、使用串口库和字节流快速处理库以及事件分路器就可以在非常短的时间内完成数据的收发功能的编码工作。
二级框架针对扩展代理6个开发难点而设置。该接口的结构如图2所示。
图中的结构体现了接口和实现分离的设计思想,其中E1、E2、E3….En为不同的扩展代理开发技术的API编程接口,通过对它们的逐一面向对象的封装,然后通过复杂的抽象,使用外观和工厂模式,对外提供统一的编程接口。该接口设计上针对基于扩展SNMP技术的一般性进行设计,对调用者屏蔽技术本身的具体差异。当未来有新的SNMP扩展技术出现时,由于接口提供的都是扩展代理必须提供的共性接口,所以同样可以使用上面的技术加入到EAgentX++的封装中,而保持接口不变。
EAgentX++的重要思想是:跳过每种扩展代理的RFC文档,如描述SMUX的RFC1227,描述DPI的RFC1228,描述AgentX的RFC2741;通过研读这些技术在各平台提供的API接口和编程实例,然后根据EAgentX++的公用接口设计进行具体到不同平台和不同协议的细节封装,最终实现一个接口不变而实现上可以不断添加的C++编程接口;目前国内国际还没有这样做的先例,同样也没有这样一个能够容纳众多扩展协议的接口类。
扩展代理方法的实现,建立在各种不同的UNIX平台的SNMP扩展代理实现实例的基础上。在对Smux协议(SNMP Multiplexing Protocol即SNMP多路协议rfc1227)、SNMP-DPI(Simple Network Management Protocol DistributedProgram Interface即SNMP分布编程接口)、eSNMP(Extensible Simple NetworkManagement Protocol即可扩展网络管理协议)、AgentX(Agent eXtensibility即可扩展网络管理协议RFC 2741)等多个UNIX系统上实现的SNMP扩展MIB方法分析以后,可以发现不同代理扩展的接口和实现方法都不相同,并且所遵循的SNMP协议的版本也有所不同,同一协议在不同平台的实现方法也有可能不同。但其基本步骤相差不大,通过研究这些不同平台和不同方法扩展MIB的实现方法,得到跨平台跨方法的扩展接口需要实现的功能,这些功能在未来的SNMP扩展方法中也会被遵循:
1.初始化;
2.提供一个可以对MIB中的节点即OID(Object ID对象ID)配置回调函数的机制;
3.为所有请求提供一个可以连续运行不断进行SNMP事件处理的机制。
参见图3、图4。
初始化是一个重要的过程,首先建立初始化接口。本方法中的初始化接口完成初始化和提供一个可以对MIB中的节点即OID配置回调函数的机制的功能,其初始化定义如下:
void InitEAgentx(EInitFunc pInitFunc,const char*pszIniFile);在初始化接口里主要完成各平台各方法的初始化处理,第一个参数pInitFunc为由使用者提供的MIB节点OID信息初始化的函数;初始化中需要的MIB文件的名称,实现子树的根节点OID,共同体名等,包括个别平台需要使用的def文件名等这些信息都在配置文件中描述,配置文件的名字作为第二个参数传入。
配置文件按如下例子书写:
[mib]
treeName=eagentx
treeOid=1.3.6.1.4.1.17099
community=public
[subTree]
num=2
Name_1=extTree
Oid_1=3
Name_2=mainTree
Oid_2=0
[smux]
path=eagentx.defs
entry=eagentx
access=write
其中[mib]中包含了扩展代理实现的子树OID,生成这棵树的子代理进程的名字,共同体名。[subTree]为子树的配置信息,[smux]中为为SMUX协议实现需要使用的defs文件的路径,读写属性;
在完成各平台各方法的基本初始化信息以后,进行MIB信息的注册,对MIB信息的初始化需要由使用者自己完成,第一个初始化函数pInitFunc是作为一个函数指针传入的,主要完成MIB树的构建,pInitFunc的类型定义为EInitFunc其定义如下:
typedef void(*EInitFunc)(SETree &);完成对OID处理的准备。
该接口配套使用如下数据结构:
    struct ETreeNode
{
    string oid;
    ESetFunc pSetFunc;
    EGetFunc pGetFunc;
    AccessEnum access;
    TypeEnum type;
};
这是一个MIB节点的结构,在这个结构里,oid为oid字符串,pSetFunc和pGetFunc分别为Set和Get处理的回调函数,这是需要使用者自己编写完成的,其中EsetFunc和pGetFunc的结构定义如下:
typedef ErrorEnum(*ESetFunc)(EVarBindUnit*unit,int index);
typedef ErrorEnum(*EGetFunc)(EVarBindUnit*unit,int index);
一棵要实现的MIB树的信息存放在一个列表里,定义如下:
map<int,ETreeNode>SETree;
在pInitFunc指向的函数中,使用者完成将MIB文件中各节点OID的信息及回调处理加入SETree的工作。
在InitEAgentx函数中,在完成读取配置文件并完成每种不同平台及方法扩展代理特定的初始化处理后,调用pInitFunc指向的回调函数,得到需要处理MIB的所有节点信息,然后调用不同平台及扩展方法的特定MIB注册函数,完成初始化。
初始化函数内部实现为实现对不同平台不同方法的扩展方法的调用,在内部使用条件编译的方法加以区分,同时配以使用设计模式中的工厂模式提供统一对外接口。
_Run为本方法中负责运行与事件处理的函数。对大多数扩展MIB技术来讲,当初始化完成后,各种扩展代理一般将会把与主代理网络联接的Fd(文件描述符)送入select函数或类似方法中形成异步接收的状态注册提交状态,在收到主代理的请求时Fd被置位,之后将获取该请求的类型(Set/Get/Get Next)及ODI信息,这时调用在初始化时注册的对应的ODI对应的EsetFunc或EgetFunc回调函数,当回调函数执行完以后再调用特定方法与平台的数据提交函数,即完成上文中(g)的步骤,完成整个请求函数。
运行与事件处理函数内部实现对不同平台不同方法的扩展方法的调用,在内部使用条件编译的方法加以区分,同时配以使用设计模式中的工厂模式提供统一对外接口。
需要注意的是:某些平台实现中select函数调用前,不同的扩展MIB实现时有独特的处理,这些通过分析系统提供的例程较难得到,必须阅读源码,如Linux平台下snmp_select_info函数的处理。某些平台实现中使用了脚本生成代码的方式,在对这些平台的扩展方法进行研究时,光看这些生成的代码是不够的,需要进一步研究才能获得实现本方法的全部API,如Linux平台下需要研读一个名为SNMPtherm的一个温度计控制开源代码。
本发明已在申请人参与的某型空管系统和记录设备中内部使用,为系统中多个硬件设备、所有的软件都提供了基于SNMP的扩展MIB接口,同时也提供了整个系统的扩展信息,其中系统级信息中MIB节点超过1000个,涉及说明书中提及的所有平台,效果十分明显,操作十分方便。

一种跨平台跨方法的SNMP扩展MIB实现方法.pdf_第1页
第1页 / 共13页
一种跨平台跨方法的SNMP扩展MIB实现方法.pdf_第2页
第2页 / 共13页
一种跨平台跨方法的SNMP扩展MIB实现方法.pdf_第3页
第3页 / 共13页
点击查看更多>>
资源描述

《一种跨平台跨方法的SNMP扩展MIB实现方法.pdf》由会员分享,可在线阅读,更多相关《一种跨平台跨方法的SNMP扩展MIB实现方法.pdf(13页珍藏版)》请在专利查询网上搜索。

一种跨平台跨方法的SNMP扩展MIB实现方法属计算机网络管理范畴。在SNMP主代理和SNMP子代理之间建立了一个中间层,该中间层接口设置两级框架,第一级框架是专门用于扩展代理开发的框架,第二级框架是扩展代理框架EAgentX+,含若干不同的扩展代理开发技术的API编程接口,两级框架一起被封装在AgentFrame内。对外提供简单接口进行使用,开发者仅需要以类似填空的方式提供必须由开发者完成的代码,。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 电学 > 电通信技术


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1