文档详情

SNMP代理的设计与实现.docx

发布:2015-09-24约2.82千字共3页下载文档
文本预览下载声明
SNMP代理的设计与实现   1. SNMP代理模块工作流程   SNMP代理模块包括6个子模块,如图2所示。   SNMP代理是一个单任务,采用先进先出队列,一次处理一个PDU。代理从管理站接收PDU后,对其进行语法分析,将其转换成一个可用的内部数据结构,将MIB变量映射成本地变量,判断请求的MIB对象是否在代理的MIB树中,如果存在,调用对应的MIB变量处理例程来处理,命令执行完之后,再将内部数据格式转换回ASN.1格式创建响应PDU,调用Socket的sendto()函数将它发送给管理站。   (1)初始化   SNMP代理在启动时通过调用usrSnmpInit( )产生一个任务tSnmpd,进入任务的主要入口函数是snmpIoMain( )。在初始化工作结束后,snmpIoMain( )调用snmpdInitFinish( ),并由snmpdInitFinish( )向管理站发送trap,通知它代理已经开始工作,然后进入消息处理循环,如图3所示。   (2)消息处理循环   首先支持例程snmpIoBody( )在UDP端口161收听消息,收到消息后交给snmpdPktProcess()处理,snmpdPktProcess( )将消息传给snmpIoCommunityValidate( ),snmpIoCommunityValidate( )验证共同体名是否合法。共同体名的系统缺省设置为:对于具有共同体名pub或public的管理站只能执行get操作,而具有共同体名priv或private的管理站可以进行set操作。通过共同体名验证后,代理调用用户定义的MIB访问函数,并将其所提供的信息构成pdu,交给snmpIoWrite( )返回给管理站。   (3) 退出代理程序   当用户需要停止snmp代理,调用snmpdExit( ),由它调用 MIB 中止例程并且释放所有代理的资源,之后所有的SNMP 服务都不再被支持。   开发SNMP代理主要包括两方面的工作即MIB的转化和扩展MIB,以下将分别介绍。   2. MIB的转化   由于MIB都是用ASN.1编写的,需要将其转化成C/C++的数据结构,才能用程序实现。对MIB文文件的转化工作是费时而且易错的,所幸的是WindNet SNMPv1/v2软件包中提供的mibcomp可以将MIB编译成c代码,并将每一个MIB变量与其相应的读写例程联系在一起。具体操作过程如下。   (1)检查MIB中是否存在错误   这一步是对要转化的MIB(如example.mib)进行语法检查,标准MIB文件一般都定义得很规范,语法上很少出错,而对于自定义的MIB来说,这一步很重要,它可以帮助MIB编写者检查一些疏忽的语法错误。它使用的命令如下。 mibcomp -check example.mib   (2)创建MIB树   每个代理都有一棵自己支持的MIB树,如果管理站所要查询或设置的变量不在该MIB树内,代理向管理站返回noSuchName 的错误信息。   在创建MIB树的过程中,同时在MIB树中每个叶子结点中赋予get、set等操作的函数指针,使用如下命令生成c代码文件exampleTree.c。   mibcomp -o exampleTree.c -stub example.mib   使用如下命令生成头文件exampleLeaf.h,它是用来定义每个叶子值的。   mibcomp -o exampleLeaf.h -leaf example.mib   (3)生成例程函数的头文件及c代码文件   通过使用mibcomp的-skel和-stub两个参数可以分别生成例程函数相应的用作函数声明的头文件和例程函数的c代码文件。但是实际开发中发现生成c代码不能适用要求,需要自己重新编写。   使用如下命令生成头文件exampleHead.h。   mibcomp -o exampleHead.h - skel example.mib   使用如下命令生成c文件exampleC.c。   mibcomp -o exampleC.c - stub example.mib   (4)为管理站创建.rt文件   .rt文件是用来向管理站说明代理的MIB树,通过如下命令生成。   mibcomp -o exampleMib.rt -readtree. example.mib   至此,就基本上完成了MIB的转化工作。   3.扩展MIB的实现   Vxworks已经完成对MIB-II的实现,并支持扩展MIB的实现。对MIB的扩展实际上是为网络设备所支持的各MIB编写访问函数,同时根据自己的需要对MIB-II的相关组重新编写,具体过程如下。   首先,利用MIB编译器可以把用ASN.1语言描写
显示全部
相似文档