通过ucd-snmp完成SNMP Agent的源码

网络 网络管理
在学习SNMP中,我们知道它的代理形式是非常重要的。所以我们今天就着重讲解一下用ucd-snmp来完成SNMP Agent的过程。

对于snmp少不了ucd-snmp的使用。所以我们一再介绍了相关的源码的内容。那么接下来我们主要介绍了一下相关协议的开源开发内容,并且讨论采用开放源码的ucd-snmp 4.2.1软件包开发自己的SNMP Agent,不涉及SNMP协议包的组包、解析等问题。本文从以下部分进行介绍:

一:ucd-snmp 4.2.1简介及SNMP Agent开发步骤

二:MIB库模块设计及代码转换

三:SNMP Agent功能扩展方式

四:uCLinux系统上SNMP Agent的实现

五:创建SNMP Agent配置文件snmpd.conf

一:ucd-snmp 4.2.1简介及SNMP Agent开发步骤

ucd-snmp 4.2.1开源软件包支持SNMPv1 (RFCs 1155-1157)、SNMPv2c(RFCs 1901-1908)、SNMPv3 (RFCs 2271-2275)三种SNMP协议版本,其由以下内容组成:

可扩展的SNMP Agent程序(snmpd);

SNMP Agent和管理程序开发库;

用于检索或设置SNMP Agent端变量的工具程序(snmpget, snmpset, snmptable, snmpwalk等);

用于生成或处理SNMP陷阱的工具程序(snmptrapd和snmptrap);

基于Tk/perl的MIB浏览器(tkmib)

SNMP Agent的开发一般采用以下步骤:

MIB库模块设计。

MIB库模块转换为C语言代码。

转换后的C语言代码添加到ucd-snmp源码包,实现SNMP Agent的功能扩展。#p#

二:MIB库模块设计及代码转换

在SNMPAgent开发中,首先要定义出MIB库模块,这样,SNMP管理端软件才能通过该MIB库模块实现对相应设备的管理。MIB库模块定义的语法,可以参照SNMP 协议中的SMI描述部分,本文使用MG-SOFT公司的“Visual MIBBuilder"可视化设计软件完成MIB库模块的定义。MIB库模块定义后,需要在代理程序中增加与所定义的MIB库模块相对应的源代码,这里就要使用MIB2C工具程序把MIB库模块文件转换成C源代码。

MIB2C是ucd-snmp 4.2.1软件包中的工具程序,该工具程序需要SNMPperl扩展模块支持。按以下步骤进行转换,首先将设计好的MIB库模块定义文件拷贝到ucd-snmp源代码的mibs目录(如/usr/local/share/snmp/mibs),然后运行MIB2C命令(假定MIB库模块为modulename)。

/usr/local/bin/mib2c modulename

此时,MIB2C会在当前目录下生成两个C源文件:modulename.h 和modulename.c,这两个文件是根据所设计的MIB库模块转换而成的,也是需要加入到ucd-snmp软件包实现SNMP Agent功能扩展的源代码。

#p#三:SNMP Agent功能扩展方式

SNMP Agent功能扩展即snmpd功能扩展,假定ucd-snmp源代码存放在/usr/local/src/目录下,下面是实现snmpd功能扩展的两种方式:

静态链接方式

先将生成的两个文件, modulename.h和modulename.c,拷贝到ucd-snmp源代码的/usr/local/src/ucd-snmp-4.2.1/agent/mibgroup目录,然后,在ucd-snmp 4.2.1目录下(/usr/local/src/ucd-snmp-4.2.1)执行以下命令生成snmpd。

# ./configure -with-mib-modules="modulename"
# make
# make install 

共享链接库方式

首先, 在任一目录(如/usr/local/temp)编译生成共享链接库。将两个源文件, modulename.h和modulename.c拷贝到此目录下,执行如下命令生成共享链接库:

gcc -g -I/usr/local/include -c -o modulename.o modulename.c 
gcc -g -fPIC -shared -o modulename.so modulename.o 

然后,通过以下任意一种方式动态加载共享链接库。

如果代理程序(snmpd)已运行,执行如下命令:

#snmpset localhost rwnode UCD-DLMOD-MIB::dlmodStatus.1 i create
#snmpset localhost rwnode UCD-DLMOD-MIB::dlmodName.1 s " modulename"
#snmpset localhost rwnode UCD-DLMOD-MIB::dlmodPath.1 s "/usr/local/temp/ modulename.so"
#snmpset localhost rwnode UCD-DLMOD-MIB::dlmodStatus.1 i load 

这样即可加载刚才生成的共享连接库,装载后,可以用工具程序检索或设置相应的变量。如果代理程序(snmpd)未运行,在snmpd.conf配置文件中增加一行:

dlmod modulename /usr/local/temp/modulename.so 

然后重新启动snmpd代理程序, 程序会自动装载共享库。

#p#四:uCLinux系统上SNMP Agent的实现

考虑到嵌入式设备应用程序自动启动的特点,一般采用静态链接方式开发SNMP Agent。由于uCLinux交叉编译环境的特殊性,在uCLinux系统上实现SNMP Agent需要按以下步骤。

增加新文件及修改Makefile文件:复制modulename.c和modulename.h到agent/mibgroup/目录下。

修改agent/Makefile文件: 
  增加"mibgroup/modulename.lo"到LMIBOBJS符号下。 
  增加"mibgroup/modulename.o"到MIBOBJS符号下。

修改agent/mibgroup/Makefile文件: 
  增加"modulename.o"到OBJS符号下。 
  增加"modulename.lo"到LOBJS符号下。 
  增加"modulename.c"到SRCS符号下。

修改agent/mibgroup/mib_module_includes.h文件: 
  增加 #include "mibgroup/modulename.h"一行。

修改agent/mibgroup/mib_module_inits.h文件: 
  增加“if (should_init("modulename")) init_ modulename ();"一行。 

#p#重新配置内核

要生成SNMP Agent程序snmpd,需要重新配置应用程序。切换到uClinux-dist目录,开始重新配置应用程序:

cd ../uClinux-dist 
make menuconfig 

进行如下选择:

Kernel/Library/Defaults Selection: 
(Linux-2.4.x) Kernel Version 
[X] Customize Vendor/User Settings (NEW) 

按Esc后保存。随后自动进入 uClinux v3.1.0 Configurationm,选中“Network Application---->"并进入下一级选项菜单,在这里可以配置arp、ifconfig、ping、route和snmpd等应用程序,选中ucd-snmpsnmpd一项。

[X] ucd-snmp snmpd 

保存后退出,然后在终端提示符下执行命令“make user_only"生成SNMP Agent程序snmpd。#p#

五:创建SNMP Agent配置文件snmpd.conf

snmpd启动时需要读取snmpd.conf配置文件,通过该配置文件,可以控制SNMP管理端对变量的读写属性,下面是该配置文件的一个示例:

syslocation Shanghai
syscontact localhost 
sysservices 72
com2sec public default public
com2sec private default private
group public v1 public
group private v1 private
group public v2c public
group private v2c private
group public usm public
group private usm private
view all included .1 80
view system included .1.3.6.1.2.1.1 fe
access public "" any noauth exact all none all
access private "" any noauth exact none all all
trapsink 200.162.162.27

 

责任编辑:佟健 来源: 比特网
相关推荐

2010-07-01 12:38:31

ucd-snmp

2010-07-01 13:58:50

UCD-SNMP

2010-07-01 14:53:09

SNMPMIBUCD-SNMP

2010-07-02 10:18:23

ucd-snmpMIB

2010-07-05 09:37:19

ucd-snmpsnmpd扩展

2010-07-09 14:26:10

SNMP Agent

2010-01-08 14:29:58

华为交换机snmp

2010-07-02 10:39:20

AdventNet S

2011-03-23 12:49:53

NagiosSNMP流量

2010-05-24 18:19:44

SNMP报文

2011-11-08 21:24:30

SNMP

2010-07-12 17:23:14

2010-07-12 16:53:50

启用2003 SNMP

2010-06-30 17:34:25

SNMP Trap

2011-03-31 13:40:36

SNMPMRTG安装

2010-06-30 10:31:34

SNMP MIB

2010-07-05 11:35:58

IPX协议SNMP

2010-07-05 16:42:39

AdventNet S

2010-06-29 14:17:22

SNMP协议

2010-06-29 16:53:08

点赞
收藏

51CTO技术栈公众号