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 Programmer’s Guide
Chapter 2:Basic OS
Chapter 5:Network
(5) WindNet SNMPv1/v2c全本
(6) Tornado User’s Guide全本
(7) GNU ToolKit
The GNU Binary Utilities:ar,ld,nm
GNU Make
(8) 编程中若遇到函数调用之类的问题,可参阅
VxWorks 5.3.1 Reference Manual
(9) 有关消息队列的介绍另可参考崔健同学的技术文挡。
(二) Agent简述
根据该接入设备的总体设计,网络管理分为用户侧和网络侧两级来进行。每一级的网络管理模块都基于 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的功能。
(三)程序及其编译过程的描述
    本人编写的程序分成两部分,分放在两个目录下(之所以这样做只是为了尽可能保留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.c
        Agent的ILMI数据包处理程序,它可能调用snmpMgrLib.c中的SNMP解码程序。
    anmaGlobals.c
        Agent范围内的全局变量的定义
    anmaIoLib.c
        Agent与其他软件模块的消息接口处理程序。
    anmaMain.c
        在嵌入VxWorks时,Agent软件的唯一入口函数在本文件中定义。
    anmInfoLib.c
        作为ATM Private MIB的信息源,为后者的Method Routines所调用。
    ilmiFsm.c
        ILMI 有限状态机的实现。
    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.h
Agent范围内类型和常量的定义,如与其他软件模块通信时所用消息队列的属性和消息的结构,等。
    anmaConfig.h
        设备配置文件,如设备是node还是user等等。
    anmadLib.h
        对anmadLib.c中定义的非局部函数的声明。
    anmaIoLib.h
        对anmaIoLib.c中定义的非局部函数的声明。
    anmInfoLib.h
        对anmInfoLib.c中定义的非局部函数的声明。
    anmPrivMib.h
        ATM 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.h
        ILMI MIBs的结构类型的定义,类似于$(WIND_BASE)/target/h/snmp/m2Lib.h。
    snmpMgr.h
实现SNMP Manager功能所需要的一些定义,以及snmpMgrLib.c中实现的函数的声明。
    一级子目录apps/
    snmpGet.c和可执行的snmpGet
    snmpNext.c和可执行的snmpNext
    snmpSet.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或-DV
XWORKS。
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.mib
        ILMI MIBs的控制文件。
    anmPrivMib.mib
        ATM网管自定义MIB的控制文件。
    snmpMib2.cmibhand.hmibleaf.h
mibcomp的生成文件,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的环境变量和mibcompcc68k的一些常用选项。它不是系统的缺省文件,所以需要手动执行。.cshrc才是系统的缺省配置文件,在用户登录时自动执行。