Agent技术文档.doc_第1页
Agent技术文档.doc_第2页
Agent技术文档.doc_第3页
Agent技术文档.doc_第4页
Agent技术文档.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Agent技术文档(一) 背景知识在开发Agent软件之前,需熟悉以下内容:(1) SNMP协议,MIB,ASN.1 SNMP子集,BER编码规则;(2) UDP协议,无连接Socket编程;(3) ATM UNI,AAL5;(4) VxWorks的多任务机制和消息队列机制,及两者的编程;(5) WRS WindNet软件包的使用和扩展;(6) Tornado系列开发和调试工具。以上内容可参阅下述资料:(1) SNMP,MIB:RFC1155,RFC1157,RFC1122,RFC1213;(2) ASN.1,BER:X.680,X.690;(3) 有关ATM的书籍,ATM Forum ILMI 4.0;(4) VxWorks Programmers Guide:Chapter 2:Basic OSChapter 5:Network(5) WindNet SNMPv1/v2c全本(6) Tornado Users Guide全本(7) GNU ToolKit:The GNU Binary Utilities:ar,ld,nmGNU Make(8) 编程中若遇到函数调用之类的问题,可参阅VxWorks 5.3.1 Reference Manual(9) 有关消息队列的介绍另可参考崔健同学的技术文挡。(二) Agent简述根据该接入设备的总体设计,网络管理分为用户侧和网络侧两级来进行。Page: 1每一级的网络管理模块都基于 Client/Server 结构,Manager作为 Client ,以请求的形式向被管对象的Agent(以下简称Agent)发送命令; Agent作为 Server,根据接收到的请求完成相应的操作,并将结果以响应的形式发回给Manager。这两者之间的通信遵循简单网络管理协议(SNMP)。另外,根据 ATM Forum 制订的规范,用户侧和网络侧的Agent作为 ATM 接口管理实体(IME),两者之间也必须建立起实时对等的通信,每一方都必须实现Manager和Agent的双重功能,既可以以Manager的身份向对方发送请求,也可以以Agent的身份接收和处理对方的请求。两个对等IME之间的通信遵循 ATM Forum 的ILMI 规范(Integrated Local Management Interface Specification)。而 ILMI 也是基于 SNMP 协议之上的。综上所述,网络管理信息系统 SNMP Agent主要将实现以下功能:(1) 接收和处理来自对应Manager的请求(通过UDP端口);(2) 两级Agent之间的ILMI 消息传递(通过一个特定的VPI/VCI和AAL5层);(3) 为实现上述功能而必需的与交换、信令和业务模块之间的消息传递。图一、二显示了响应实体之间的关系及其协议栈。图一上述(3)的功能通过操作系统(采用了实时操作系统 VxWorks)提供的内部通信机制(如消息队列)来实现。而 SNMP Agent的实现则采用了 Wind River System 公司所提供的 WindNet 软件包。由于 WindNet 只实现了Agent的功能,为了建立起 ILMI 通信,还必须自己实现Manager的功能。Network-sideUser-sideNMSNMSAgentAgentVPI=0VCI=16图二(三)程序及其编译过程的描述本人编写的程序分成两部分,分放在两个目录下(之所以这样做只是为了尽可能保留WindNet的目录结构):$(ATMNET_BASE)/$(WIND_BASE)/target/src/snmpv1/(1) 程序结构下图列出了各主要程序之间的依赖关系。上层依赖下层,或者说,位于下层的程序被上层的程序所调用。图三下图是Agent各任务间的数据流图:图四(2)$(ATMNET_BASE)/下的程序描述除了MIB Method Routines(见“$(WIND_BASE)/target/src/snmpv1/下的程序描述”)以外,所有自己编写的C源程序均存放在本目录下,而头文件则放在一级子目录h/下。另外在一级子目录apps/下则存放了在SUN主机上可执行的Manager程序。下面逐一介绍。Makefile用来编译和更新网管Agent的程序。anmadLib.cAgent的ILMI数据包处理程序,它可能调用snmpMgrLib.c中的SNMP解码程序。anmaGlobals.cAgent范围内的全局变量的定义。anmaIoLib.cAgent与其他软件模块的消息接口处理程序。anmaMain.c在嵌入VxWorks时,Agent软件的唯一入口函数在本文件中定义。anmInfoLib.c作为ATM Private MIB的信息源,为后者的Method Routines所调用。ilmiFsm.cILMI 有限状态机的实现。ilmiInfoLib.c作为ILMI MIBs的信息源,为后者的Method Routines所调用。snmpMgrLib.c为实现Manager功能所编写的例程,主要提供SNMP BER编码和解码函数。其中在解码过程中,如果识别出是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.hATM Private MIB结构类型的定义,类似于$(WIND_BASE)/target/h/snmp/m2Lib.h。atms_api.h由交换模块实现的API的声明。这些API主要由网管Agent调用,以完成Manager请求的涉及到交换的操作。ilmiFsm.h有关ILMI FSM的类型和常量定义。ilmiInfoLib.h对ilmiInfoLib.c中定义的非局部函数的声明。ilmiMib.hILMI MIBs的结构类型的定义,类似于$(WIND_BASE)/target/h/snmp/m2Lib.h。snmpMgr.h实现SNMP Manager功能所需要的一些定义,以及snmpMgrLib.c中实现的函数的声明。一级子目录apps/:snmpGet.c和可执行的snmpGetsnmpNext.c和可执行的snmpNextsnmpSet.c和可执行的snmpSet供测试用的能独立运行于UNIX主机上的SNMP Manager程序及其源代码。注意,由于px主机上没有CC和Socket库,编译上述三个程序需在tmn2主机上进行:tmn2% cc l socket I ./h DUNIX o snmpGet snmpMgrLib.c snmpGet.c命令行中,snmpMgrLib.c可根据不同操作系统进行条件编译,所以务请选择-DUNIX或-DVXWORKS。(3)$(WIND_BASE)/target/src/snmpv1/下的程序描述凡注明“WindNet”的文件均是WindNet软件包提供的,否则就是本人创建和编写的。在本小节内提到的“Agent”指狭义的SNMP Agent,除此之外,“Agent”均指广义的网管Agent,即本人所做的工作在整个系统中所扮演的角色。一级子目录agent/:Makefile用来编译和更新WindNet。snmpIoLib.c(WindNet)SNMP Agent I/O, 包含了 snmpIoInit(),snmpIoClose(),snmpIoMain(),snmpIoBody(),snmpIoCommunityValidate()等函数,可根据实际情况修改,特别是snmpIoWrite()和snmpIoCommunityValidate(),一定要做相应的配置。这些函数的具体描述请参阅WindNet SNMPv1/v2c,P47)。snmpMib2.mib(WindNet)MIB2的控制文件,决定MIB Method Routines的函数名等。控制MIB主要用到三个关键字:FORCE-INCLUDE,DEFAULT,EXCLUDE,具体用法请参阅WindNet SNMPv1/v2c,P80:mibcomp Extensions。ilmiMib.mibILMI MIBs的控制文件。anmPrivMib.mibATM网管自定义MIB的控制文件。snmpMib2.c,mibhand.h,mibleaf.hmibcomp的生成文件,snmpMib2.c定义了MIB的内部存储格式,mibhand.h是对Method Routines的声明,mibleaf.h是对MIB常量的定义。二级子目录agent/anm_rtns:二级子目录agent/ilmi_rtns:二级子目录agent/snmp_rtns(WindNet):各个MIB的Method Routines,每个文件对应于一个Group。在写这些函数时,可先用mibcomp stub生成.c文件,再在此文件上做修改,这样可省却许多录入工作。一级子目录rfc_mibs/(WindNet):标准的RFC MIBs,如rfc1213.mib等。一级子目录anm_mibs/:ILMI MIBs,ATM Private MIB等与ATM相关的非RFC MIBs。(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% make CPU=MC68LC040 TOOL=gnu此举将编译本目录下Makefile中所列出的相关文件,make的结果是得到最新版本的wrs/wind/target/lib/libMC68LC040gnuvx.a(c) 配置和编译vxWorks:% launch& (如果是开机后第一次运行Tornado的调试工具,则执行 source wrs/startit&)选择target server:mv162tmn2;(如果该target server不存在,请先创建它,target server的配置如下:tgtsvr -A V n mv162 B wdbrpc f a.out具体的用法请参阅Tornado Users Guide:The Tornado Launcher,P105)在launch面板上选择WindCFG,在随后打开的配置窗口依次选择mv162lc,windNet,注意必须有以下两项内容:#INCLUDE_MIB2_ALL#INCLUDE_SNMPD在上面打开的配置窗口中依次点击Config按钮和Build按钮,开始编译vxWorks内核。(d) 重新启动目标机。(e) 编译其它Agent程序:在$(ATMNET_BASE)/目录下运行make,将最终的目标文件下载到目标机调试。(5)在开发阶段扩展MIB的一般步骤(a) 用ASN.1编写MIB。如果要实现已有MIB中被控制MIB EXCLUDE掉的Group,则将相应的EXCLUDE语句注释掉。(b) 写Method Routines。这可能会涉及到修改或创建以下三个文件:xxxMib.h,xxxInfoLib.h,xxxInfoLib.c,其中xxxMib.h是该MIB的类型和常量定义,xxxInfoLib.c为method routines提供支持,是后者的信息来源。(c) 在wrs/wind/target/src/snmpv1/agent/目录下的Makefile中OBJS一项增补相应的.o文件。(d) make。见前述“在开发阶段编译Agent的一般步骤”(a)(d)。(四)讲讲开发过程中遇到的一些令人头疼的问题 在开发过程中经常遇到一些小问题,它们一开始总是以令人迷惘的面貌出现,本人不才,往往花了很长时间,才得以摆脱这种山穷水尽的境地。今天把这些问题抖出来,或简或易,也许对大家有所帮助,为维护本人声誉,望家丑不要外扬。问题排名不分先后,想到哪,写到哪。(1) 问:我的Agent SNMP Daemon已经起来了。我在同一个目标机或者开发主机上运行Manager程序,能够Get/Set;但是有一台远端的计算机运行Manager程序,Agent的IP地址、UDP端口(161)、Community都没有给错,却总是超时。怎搞?答:如果Manager和Agent不在一个网段上的话,就必须在Agent所在目标机上配置路由表,具体做法如下:在WindSh中,键入:routeAdd 当然罗,也可以在程序中以函数的形式配置,routeAdd()的调用格式请参阅VxWorks 5.3.1 Reference Manual。(2) 问:我有两个程序,A.c和B.c,A.c引用了B.c中定义的变量或函数,B.c引用了A.c中定义的变量或函数。这样,无论我先下载哪个程序,都会出现这样的warning:xxx undefined,当程序执行到调用这个“undefined”的函数时,就会报:Illegal Instruction,如果是变量也会出错。如果我不想改程序,那该怎么办哪?答:步骤如下:(a)两个程序先分别编译(记住别链接喔,别忘了在ccxxx后面跟上-c);(b)静态链接,ldxxx r o C.o A.o B.o,-r 表示在下载时允许在次链接(Relocateable!);(c)下载C.o。(3) 问:我看WindNet天价提供的MIB2 Method Routines中,Scalar Groups都没有_next() Routine,俺可不可以也不写呀?答:可以啊,在控制MIB中用DEFAULT关键字声明,比如:systemOBJECT-TYPE-DEFAULTnext-function-asyncstd-next-async:=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论