SNMP_MIB功能开发步骤_liujun

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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节点类似。

相关文档
最新文档