您好,欢迎访问三七文档
1Agent技术文档(一)背景知识在开发Agent软件之前,需熟悉以下内容:(1)SNMP协议,MIB,ASN.1SNMP子集,BER编码规则;(2)UDP协议,无连接Socket编程;(3)ATMUNI,AAL5;(4)VxWorks的多任务机制和消息队列机制,及两者的编程;(5)WRSWindNet软件包的使用和扩展;(6)Tornado系列开发和调试工具。以上内容可参阅下述资料:(1)SNMP,MIB:RFC1155,RFC1157,RFC1122,RFC1213;(2)ASN.1,BER:X.680,X.690;(3)有关ATM的书籍,ATMForumILMI4.0;(4)VxWorksProgrammer’sGuide:Chapter2:BasicOSChapter5:Network(5)WindNetSNMPv1/v2c全本(6)TornadoUser’sGuide全本(7)GNUToolKit:TheGNUBinaryUtilities:ar,ld,nmGNUMake(8)编程中若遇到函数调用之类的问题,可参阅VxWorks5.3.1ReferenceManual(9)有关消息队列的介绍另可参考崔健同学的技术文挡。(二)Agent简述根据该接入设备的总体设计,网络管理分为用户侧和网络侧两级来进行。每一级的网络管理模块都基于Client/Server结构,Manager作为Client,以请求的形式向被管对象的Agent(以下简称Agent)发送命令;Agent作为Server,根据接收到的请求完成相应的操作,并将结果以响应的形式发回给Manager。这两者之间的通信遵循简单网络管理协议(SNMP)。另外,根据ATMForum制订的规范,用户侧和网络侧的Agent作为ATM接口管理实体(IME),两者之间也必须建立起实时对等的通信,每一方都必须实现Manager和Agent的双重功能,既可以以Manager的身份向对方发送请求,也可以以Agent的身份接收和处理对方的请求。两个对等IME之间的通信遵循ATMForum的ILMI规范(IntegratedLocalManagementInterfaceSpecification)。而ILMI也是基于SNMP协议之上的。综上所述,网络管理信息系统SNMPAgent主要将实现以下功能:2(1)接收和处理来自对应Manager的请求(通过UDP端口);(2)两级Agent之间的ILMI消息传递(通过一个特定的VPI/VCI和AAL5层);(3)为实现上述功能而必需的与交换、信令和业务模块之间的消息传递。图一、二显示了响应实体之间的关系及其协议栈。上述(3)的功能通过操作系统(采用了实时操作系统VxWorks)提供的内部通信机制(如消息队列)来实现。而SNMPAgent的实现则采用了WindRiverSystem公司所提供的WindNet软件包。由于WindNet只实现了Agent的功能,为了建立起ILMI通信,还必须自己实现Manager的功能。(三)程序及其编译过程的描述本人编写的程序分成两部分,分放在两个目录下(之所以这样做只是为了尽可能保留WindNet的目录结构):TrafficControlSwitchProcessorSignallingSNMPAgentMIBNMS(Net-side)SNMP业务板ServiceBoardsSNMPAgentMIBInterfaceNMS(User-side)SNMPUser-sideNetwork-sideILMIATMCellBus图一ILMISNMPSNMPTCP/IPAAL5NetworkInterfaceATMPhysicalLayerILMISNMPSNMPAAL5TCP/IPATMNetworkInterfacePhysicalLayerSNMPTCP/IPNetworkInterfacePhysicalLayerSNMPTCP/IPNetworkInterfacePhysicalLayerNetwork-sideUser-sideNMSNMSAgentAgentVPI=0VCI=16图二3$(ATMNET_BASE)/$(WIND_BASE)/target/src/snmpv1/(1)程序结构下图列出了各主要程序之间的依赖关系。上层依赖下层,或者说,位于下层的程序被上层的程序所调用。下图是Agent各任务间的数据流图:(2)$(ATMNET_BASE)/下的程序描述除了MIBMethodRoutines(见“$(WIND_BASE)/target/src/snmpv1/下的程序描述”)以外,所有自己编写的C源程序均存放在本目录下,而头文件则放在一级子目录h/下。另外在一级子目录apps/下则存放了在SUN主机上可执行的Manager程序。下面逐一介绍。snmpIoLibsnmpdLibMIBMethodRoutinesilmiInfoLib,anmInfoLib,etc.atms_apiOSanmaIoLibanmadLibsnmpMgrLibsnmpdLibilmiFsm图三MessageQueueEventQueueILMIFSMMessengerSNMPRequestProcessorTRAPHandlerUDPPort161SNMPRequestsInter-moduleManagementMessagesFSMEventsSNMPRequestsSNMPResponsesSNMPTRAPsSNMPResponsesSNMPRequestsUDPPortAAL5AAL5图四4Makefile用来编译和更新网管Agent的程序。anmadLib.cAgent的ILMI数据包处理程序,它可能调用snmpMgrLib.c中的SNMP解码程序。anmaGlobals.cAgent范围内的全局变量的定义。anmaIoLib.cAgent与其他软件模块的消息接口处理程序。anmaMain.c在嵌入VxWorks时,Agent软件的唯一入口函数在本文件中定义。anmInfoLib.c作为ATMPrivateMIB的信息源,为后者的MethodRoutines所调用。ilmiFsm.cILMI有限状态机的实现。ilmiInfoLib.c作为ILMIMIBs的信息源,为后者的MethodRoutines所调用。snmpMgrLib.c为实现Manager功能所编写的例程,主要提供SNMPBER编码和解码函数。其中在解码过程中,如果识别出是Get,Get-next或Set的PDU,说明是对端Manager发过来的数据包,则递交给WindNet的snmpdPktProcess()处理;对于Get-response和Trap的PDU,说明是本地Manager发出请求后得到的响应,则继续全权处理。请同时参阅anmadLib.c。一级子目录h/:anmaAll.hAgent范围内类型和常量的定义,如与其他软件模块通信时所用消息队列的属性和消息的结构,等。anmaConfig.h设备配置文件,如设备是node还是user等等。anmadLib.h对anmadLib.c中定义的非局部函数的声明。anmaIoLib.h对anmaIoLib.c中定义的非局部函数的声明。anmInfoLib.h对anmInfoLib.c中定义的非局部函数的声明。anmPrivMib.hATMPrivateMIB结构类型的定义,类似于$(WIND_BASE)/target/h/snmp/m2Lib.h。atms_api.h由交换模块实现的API的声明。这些API主要由网管Agent调用,以完成Manager请求的涉及到交换的操作。ilmiFsm.h有关ILMIFSM的类型和常量定义。ilmiInfoLib.h对ilmiInfoLib.c中定义的非局部函数的声明。5ilmiMib.hILMIMIBs的结构类型的定义,类似于$(WIND_BASE)/target/h/snmp/m2Lib.h。snmpMgr.h实现SNMPManager功能所需要的一些定义,以及snmpMgrLib.c中实现的函数的声明。一级子目录apps/:snmpGet.c和可执行的snmpGetsnmpNext.c和可执行的snmpNextsnmpSet.c和可执行的snmpSet供测试用的能独立运行于UNIX主机上的SNMPManager程序及其源代码。注意,由于px主机上没有CC和Socket库,编译上述三个程序需在tmn2主机上进行:tmn2%cc–lsocket–I../h–DUNIX–osnmpGetsnmpMgrLib.csnmpGet.c命令行中,snmpMgrLib.c可根据不同操作系统进行条件编译,所以务请选择-DUNIX或-DVXWORKS。(3)$(WIND_BASE)/target/src/snmpv1/下的程序描述凡注明“WindNet”的文件均是WindNet软件包提供的,否则就是本人创建和编写的。在本小节内提到的“Agent”指狭义的SNMPAgent,除此之外,“Agent”均指广义的网管Agent,即本人所做的工作在整个系统中所扮演的角色。一级子目录agent/:Makefile用来编译和更新WindNet。snmpIoLib.c(WindNet)SNMPAgentI/O,包含了snmpIoInit(),,snmpIoClose(),snmpIoMain(),snmpIoBody(),snmpIoCommunityValidate()等函数,可根据实际情况修改,特别是snmpIoWrite()和snmpIoCommunityValidate(),一定要做相应的配置。这些函数的具体描述请参阅WindNetSNMPv1/v2c,P47)。snmpMib2.mib(WindNet)MIB2的控制文件,决定MIBMethodRoutines的函数名等。控制MIB主要用到三个关键字:FORCE-INCLUDE,DEFAULT,EXCLUDE,具体用法请参阅WindNetSNMPv1/v2c,P80:mibcompExtensions。ilmiMib.mibILMIMIBs的控制文件。anmPrivMib.mibATM网管自定义MIB的控制文件。snmpMib2.c,mibhand.h,mibleaf.hmibcomp的生成文件,snmpMib2.c定义了MIB的内部存储格式,mibhand.h是对MethodRoutines的声明,mibleaf.h是对MIB常量的定义。二级子目录agent/anm_rtns:二级子目录agent/ilmi_rtns:6二级子目录agent/snmp_rtns(WindNet):各个MIB的MethodRoutines,每个文件对应于一个Group。在写这些函数时,可先用mibcomp–stub生成.c文件,再在此文件上做修改,这样可省却许多录入工作。一级子目录rfc_mibs/(WindNet):标准的RFCMIBs,如rfc1213.mib等。一级子目录anm_mibs/:ILMIMIBs,ATMPrivateMIB等与ATM相关的非RFCMIBs。(4)在开发阶段编译Agent的一般步骤环境:主机为tmn2,WindNet源程序也在tmn2上;当前用户为wrs,这是专为调试而建立的用户;目标机为mv162,其CPU为MC68LC040。(a)设置环境变量:%source~wrs/.cshrcsnmp.cshrcsnmp是本人建立的一个配置文件,定义了有关SNMP的环境变量和mibcomp、cc68k的一些常用选项。它不是系统的缺省文件,所以需要手动执行。.cshrc才是系统的缺省配置文件,在用户登录时自动执行。(b)编译WindNet:%cd~wrs/wind/target/src/snmpv1/agent%makeCPU=MC68LC040TOOL=gnu此举将编译本目录下Makefile中所列出的相关文件
本文标题:Agent技术文档
链接地址:https://www.777doc.com/doc-2896560 .html