摘 要:本文介绍了基于VxWorks操作系统下设备管理的基本流程,同时给出了设计代理的详细过程。
关键字:实时操作系统 简单网络管理协议 代理
1. 引言
简单网络管理协议(SNMP)已经成为目前网络管理方面事实上的标准。同命名一样,它的操作非常简单易行,所以引起了越来越多的商家的注意,在计算机、通信和自动化等各个领域都发挥了很大的作用。同时,VxWorks嵌入式操作系统又由于其出色的实时性和稳定性受到业界的广泛的好评,所以如何实现在VxWorks系统上通过SNMP协议对设备进行管理是我们面临的一个很重要的课题。
2. SNMP及系统简介
VxWorks操作系统是美国WindRiver公司设计开发的一种嵌入式实时操作系统,具有以下特点:
1.高效的代码和良好的可裁剪性采用微内核结构,内核可裁减至几十B 字节,对于资源相对紧张的嵌入式系统具有非常好的适应性。
2.丰富的接口资源和大量的第三方产品为VxWorks的广泛应用奠定了坚实的基础
3.良好的移植性,可以移植到不同的处理器平台,包括PPC、ARM和X86等不同的处理器。
4.良好的开发环境,非常好的开发环境Tornado并在不断升级
WindNet SNMP代理将工业标准网络管理引入实时嵌入系统中,实现了对嵌入式设备管理的接口。应用上只需配置其初始化过程和应用系统提供的部分接口就可以方便实现对嵌入式设备的管理,同时支持多种SNMP版本的支持,现在已经可以支持SNMPv3最高版本。SNMP的工作过程可以如图1所示:
图 1 SNMP 基本框架
3. 处理流程
3.1 初始化过程
Vxworks是通过调用usrSnmpInit( )函数来启动SNMP服务的,所以对于VxWorks微内核,一定要包含usrSnmpInit( )函数。它然后创建任务名为tSnmpd的任务,这个任务的函数入口点为snmpIoMain( )。在库snmpIoLib.c中提供了该函数的部分源代码,用户可以加入自己的代码,比如读某些配置文件和私有的配置信息等。snmpIoMain( )然后调用snmpdInitFinish( )函数来完成整个代理的初始化过程。然后snmpInitFinish( )通过snmpIoTrapSend( )函数发送coldStart的trap,表示整个初始化过程完毕。这里需要注意的是所有其他的初始化和配置工作一定要在snmpInitFinish( )调用之前,然后系统回到snmpIoMain( )函数体,开始和管理站之间的收发包过程。
3.2 数据包处理
数据包的处理过程是通过snmpIoBody( )的这个守护进程开始的,它的主要工作是监视 UDP 161端口,如果管理站有请求发送过来,它把请求发给snmpdPktProcess( )来处理,通过snmpIoCommunityValidate( )检查共同体的名称是否正确。然后调用用户自己的程序完成请求,对于SET操作,还要调用snmpIoWrite( )来完成整个操作。这里要注意的是用户要提供自己的代码完成请求,比如说对某一个变量的读取,一定要给出对应的具体位置,这部分可以通过修改snmpdLib.c中的函数来完成。
对于trap的处理有单独的一套流程,首先如果一件意外事件发生,比如冷启动,调用snmpdTrapSend( )函数来处理。对于trap,可以通过用户自定义的方式来实现系统需要的trap。一般来讲,它通过snmpIoWrite( )函数把信息传递给管理站。
3.3 退出代理
如果用户想中止代理,可以调用函数snmpdExit( )来完成,同时会释放各种资源。
以上部分流程图如图2所示:
图 2 基本流程
4. 扩展MIB模块
对默认的SNMP配置,代理已经包含了包括MIB-II和其他的基本MIB库,但对于有些环境不需要部分库,同时需要加入基于本设备和本厂家的私有MIB,所以很有必要对MIB进行扩展和裁减,也利于对嵌入式设备的标准化管理。以下介绍整个过程。
1. 定义管理信息
这步主要用来定义SNMP需要管理的信息,其中部分信息已经通过标准MIB实现,实际只要加入就可以了。
2. 创建MIB定义
根据ASN.1标准语法创建MIB。
一般有以下形式:
DEFINITIONS ::= BEGIN
—— Title: EXAMPLE
IMPORTS
MODULE-IDENTITY,
OBJECT-TYPE
FROM SNMPv2-SMI
……
windDemo MODULE-IDENTITY
LAST-UpdateD "2004-9-26"
ORGANIZATION
CONTACT-INFO
Phone:……
Email:……
DESCRIPTION
"This is a example"
::= { demos 1 }
windObjects OBJECT IDENTIFIER ::= { windDemo 1 }
sysState OBJECT-TYPE
SYNTAX INTEGER
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"EXAMPLE"
::= { sysconfig 1 }
END
3. 检查正确性,转换成.h和.c文件
可以应用mibcomp –check工具来检验MIB文件的正确性,利于mibcomp –o生成相应的.h和.c文件。
4. 编译MIB文件
将MIB文件加入到已经存MIB模块中。通常有静态和动态两种方式。
静态类似于通常的编译文件的全过程。这里主要介绍动态方式,因为这种方式可以实现在原始模块照常工作的情况下加入或卸载新模块。首先通过mibcomp –l命令将新的MIB文件编译成模块。然后用命令ld在shell下实现MIB的动态加载。
5. 总结
VxWorks将SNMP应用到整个系统,实现了对嵌入式设备的标准化管理,利于对同不同的管理站进行接口。SNMP不仅实现了对嵌入式设备的管理还提供了监视整个系统正常运行的基本功能,同时还可以通过对CPU的检查实现发现软件方面的漏洞。总之,将SNMP应用到微内核,会在嵌入式这个自动化领域发挥出越来越大的作用。
参考文献:
(1)Tornado user’s guide . WindRiver Corporation
(2) ”网络管理协议及应用开发” 岑贤道 安常青 清华大学出版社 1998年7月第一版
(3) 用SNMP管理互联网络(第三版)[美]Mark A Miller, P.E.著 中国水利水电出版社 2001年3月第一版