SNMP_MIB功能开发步骤_liujun
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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节点类似。