基于NET-SNMP和uclinux的SNMP代理服务开发

SNMP MIB 功能开发详细步骤

一、      定义MIB库文件:

可使用adventnet 工具包下的mibedit工具来定义私有MIB库文件。

二、      在linux环境下安装net-snmp 。安装过程如下:

1、  解压源码包:
tar –zxvf net-snmp-5.6.1.1.tar.gz

2、  进入解压后的文件目录:
cd net-snmp-5.6.1.1

3、  执行文件目录下的configure可执行文件,如果想指定程序包的安装路径,那么您首先建立相应的文件夹来存放安装信息,您可以写成./configure –prefix=/您指定的路径名。参数—prefix用来告诉系统安装信息存放的路径,如果您没有指定路径,直接执行./configure,那么程序包都会安装在系统默认的目录下,通常为:/usr/local下。例如:
./configure --prefix=/usr/local/snmp //配置 指定安装目录,安装过程会询问您以下的信息:
注意:以下问题似乎不怎么重要,那好像仅仅是官方想了解使用本软件方的信息,可以直接回车而不用回答,系统会采用默认信息,其中日志文件默认安装在/var/log/snmpd.log.数据存贮目录默认存放在/var/net-snmp下。
default version of-snmp-version(3): 3(在这里版本通常有三种形式:1,2c,3)
Systemcontact information(配置该设备的联系信息): heaven(也可以是邮箱地址)
System location (该系统设备的地理位置):BEIJING P.R China
Location to write logfile (日志文件位置): /var/log/snmpd.log
Location to Write persistent(数据存储目录): /var/net-snmp

4、  #make
编译源码包文件,通常只需要执行make命令,系统会根据Makefile层层进行编译,第一次编译需要的时间比较长. 如果make 成功的话,那么紧接着安装程序了,这一步一般不会出现错误.

#make install

5、  完成以上步骤后net-snmp的开发环境就搭建好了。如果不在PC上使用SNMP服务的话是不需要再进一步配置的。

三、      生成MIB 源文件(C格式):

1、 首先需要介绍一下MIB库和C源文件的转换工具命令:

Net-snmp安装包提供了mib2c工具, 用户可使用该工具将MIB库文件转换成C源码格式。命令:MIBS=”+param1”  mib2c  param2    其中param1代表需要被转换的MIB库文件,param2代表希望转换该MIB库文件下的哪一个节点相关数据。下面以AERODEV-MIB.txt中的portTrunk功能节点为例来介绍整个转换过程。

2、 将编辑好的MIB库文件拷贝到linux下net-snmp安装目录中的mibs目录。在终端下cd 到该目录,然后执行MIBS=”+AERODEV-MIB.txt”  mib2c  portTrunk命令即可生成portTrunk子树下的非表节点处理源码,再执行MIBS=”+AERODEV-MIB.txt”  mib2c  portTrkGroupTable即可生成portTrunk子树下的表portTrkGroupTable对应的C源码。对于非表节点按照提示输入1即可生成该功能对应的源文件portTrunk.c 和portTrunk.h,对于表节点需要按照提示分别输入 2,2,1,2。

3、 将生成的源码拷贝到我们的开发源码树下的user/net-snmp/agent/mibgroups/switch/private 目录下。

四、      修改相应的C源文件

1、 修改portTrunk.c和portTrunk.h源文件以实现portTrkEna和trunkType两个读写节点的功能:

1)   首先介绍一下非表节点C源码中的数据定义和函数功能:oid portTrunk_variables_oid为portTrunk子树根节点的OID值。Struct variable4 portTrunk_variables[]结构体数组为 portTrunk下的节点定义(包括非表节点和表节点的定义)。因为表节点我们稍后将会采用另外一种方式来处理,所以在此处我们将表节点相应的几个定义删去。其中包括TRKGRPINDEX、PORTTRUNKGROUPNUMBER、PORTTRUNKGROUPENABLE、PORTTRUNKGROUPMEMBER。

Void init_portTrunk(void)函数为初始化函数,会将相应节点的定义信息注册到agent的OID信息树里。

Unsigned char * var_portTrunk(struct variable *vp,oid *name,size_t *length, int exact, size_t *var_len, WriteMethod ** write_method); 函数为模块处理函数。Vp为请求的结构体指针,name为相应OID的指针,length为OID长度,var_len为参数长度,write_method为节点写函数指针。

该函数中switch(vp->magic)为查询需要操作的节点,对于PORTTRKENA这个读写节点来说,*write_method = write_portTrkEna为操作函数指针赋值,VAR = VALUE 中的VAR为接收返回值的变量,VALUE为返回值,这两个变量需要自己定义和处理。

Var_portTrkGroupTable 函数为表portTrkGroupTable的处理函数,这里直接删去。

Int write_portTrkEna(…)为节点portTrkEna 的写操作处理函数。其中RESERVE2 状态中,value接收到的值即为agent收到的write request的修改值。ACTION状态中需要填入对该节点修改的具体代码,UNDO状态中需要填入对该节点恢复的具体代码。在ACTION状态中进行操作的时候,需要注意保存该节点的当前值,便于UNDO进行恢复

Int write_trunkType(…)为节点trunkType节点的写处理函数。与portTrkEna节点类似。


2)   修改后的代码可参照broadcom/uClinuxv12/user/net-snmp/agent/mibgroup/switch/private下的portTrunk.c和portTrunk.h文件。其中使用的结构体和函数均可在broadcom/uClinuxv12/user/bcmcfg 下相应功能的源文件中找到。要使用user/bcmcfg下的函数和数据结构,需要将bcmcfg下的相应C文件生成的.o文件链接成.a库并在net-snmp编译参数中加入相应的头文件引用和库文件引用,目前这个步骤已经完成,具体可参照user/bcmcfg下的makefile文件。

3)   代码修改完成后,需要修改user/net-snmp/agent/mibgroup/下的default_modules.h文件,如要加入上面新修改的功能,则需要在default_modules.h文件中添加config_require(switch/private/portTrunk);

4)   以上步骤均完成后可重新编译源码树,编译完成后的snmpd即可实现对新节点操作功能。

2、 修改portTrkGroupTable.c和portTrkGroupTable.h文件以实现端口汇聚表的监控功能。

1)   数据结构和函数介绍:

Void init_portTrkGroupTable(void)为模块初始化函数,其中调用的initialize_table_portTrkGroupTable(void)为表初始化函数。

表的数据初始化工作应该在这里完成。

    struct portTrkGroupTable_entry 为表的链表结构定义。其中包含了表索引定义和表内容及内容长度定义。相应的字符串数据的长度需要用户自己调整。

Struct portTrkGroupTable_entry * portTrkGroupTable_head;定义了该表的链表。整个表的操作实际上就是针对该链表的。

Struct portTrkGroupTable_entry * portTrkGroupTable_createEntry(…)为表的行创建函数。其中具体的传入参数和数据处理需要用户自己实现。

Void portTrkGroupTable_removeEntry(…)为行删除函数。在行数确定的情况下无需使用。

Int portTrkGroupTable_handler(…)函数未表的操作函数。表中数据的读取需要在MODE_GET下实现。数据的修改需要在MODE_SET_ACTION下实现。另外MODE_SET_UNDO的处理方式同非表节点。

修改后的代码可参照broadcom/uClinuxv12/user/net-snmp/agent/mibgroup/switch/private下的portTrkGroupTable.c和portTrkGroupTable.h文件。

2)   源文件修改完成后,其他的操作同portTrunk.c。

五、      已开发的相关私有MIB功能源文件位置均在开发源码树中user/net-snmp/agent/mibgroups/switch/private目录下

user/net-snmp/agent/mibgroups/switch/dealport/目录下为不同型号的交换机的OID定义。

六、      已开发的公有MIB功能源文件均在源码树user/net-snmp/agent/mibgroups/mibII目录下。具体可参考user/net-snmp/agent/mibgroups/default_modules.h中相应的内容。

七、      RMON对应的MIB源文件均在user/net-snmp/agent/mibgroups/RMON 目录下。

转载于:https://my.oschina.net/u/244762/blog/144163

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
linux环境下的snmp测试脚本, Installing SNMPv2C Agent Conformance Test Package 2008/04/08 IPv6 Promotion Council Terminology =========== Tester Node (TN) A tester node for the conformance tests. Node Under Test (NUT) A testee node for the conformance tests. Network Under Test The network where the conformance tests are executed. Tester Interface The network interface of TN hooked up to the Network Under Test. Interface Under Test The network interface of NUT hooked up to the Network Under Test. Prerequisites ============= Prerequisites for TN: - The package supports FreeBSD 6.0-RELEASE or higher version. - The package can also coexist with FreeBSD version of KAME. Installing the package onto TN ============================== 0. Before Starting (A) You need to install following softwares. - Perl (Required version : 5.8.7 or higher) - Net-SNMP (Required version : 5.3.1 or higher) *** You can download it from the following URL: http://net-snmp.sourceforge.net/ - v6eval (Required version : 3.0.11 or higher) Please refer to 00README.v6eval in "v6eval" for more information. *** You can download it from the following URL: http://www.tahi.org/release/ - koi (Required version : 1.1.1 or higher) Please refer to README file in "koi" package for more information. *** You can download it from the following URL: http://www.tahi.org/release/ 1. Extracting ct package % tar zxvf ct-snmpv2c-ag-X.X.tar.gz 2. Copying ct package Copy ct directory to any directory you like. % cp -pR $ORGDIR/ct-snmpv2c-ag-X.X $SOMEWHERE/ct-snmpv2c-ag-X.X % chmod -R +w $SOMEWHERE/ct-snmpv2c-ag-X.X 4. Setup ct environment % (enable TN's ipv6 capibility) % cd $SOMEWHERE/ct-snmpv2c-ag-X.X % edit config.txt % make test [End of INSTALL]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值