摘要:本文介绍了SNMP的协议以及在设备中使用SNMP的必要性, 重点介绍了智能音频切换器中基于私有MIB的代理扩展和目标开发板的交叉编译, 在MG-SOFT MIB软件平台下实现MIB库的编译和基于SNMP表格的节点访问, 特别说明了在目标板上实现SNMP代理软件自启动运行所进行的文件配置。
关键词:SNMP; MIB; mib2c; FPGA;
Abstract:This paper introduces the SNMP protocol and the necessity of using SNMP in the device, introduces the cross compiler and target agent extended private MIB development board based on intelligent audio switcher, MIB compiler and library node based on SNMP table access in MG-SOFT MIB software platform, especially explained how to achieve self starting operation the configuration files of SNMP agent software on the target board.
Keyword:SNMP; MIB; mib2c; FPGA;
1、引言
随着广播电视事业的发展, 国内各广播电台陆续开始进行技术革新, 广播的播出节目的套数越来越多, 特别是总控机房的改建, 对广播电视安全可靠播出的要求也越来越高, 安全播出是广电行业的生命线, 这不仅要求值班人员要进一步强化安全播出意识, 更重要的是要提高我们的安全播出手段, 提高设备安全性、稳定性及可靠性, 避免停播事故, 而会议扩声系统和指控中心在一些重要场合对语音信号的链路传输也有很高的要求, 这些都需要做到多路备份, 在主路音频链路出现故障时可以快速实现通道切换。
在这个互联网高速发展的时代, 多媒体网络技术大量普及给音频切换器类产品融入了新元素, 通过接入网络可以实现对设备的实时监控和操作。随着一体化管控平台的日渐普及, 将设备纳入到平台体系下已经是大势所趋。简单网络管理协议SNMP (Simple Network Management Protocol) 是按照“若要管理某个对象, 就必然会给该对象添加一些软件或硬件, 但这种“‘添加’必须对原有对象的影响尽量小些”的基本原则来设计的, 其最重要的指导思想就是要尽可能简单[1], 按照这个思路, 一体化管控平台就可以通过SNMP代理对我们的设备实现访问、监控。
2、SNMP协议简介
SNMP简单网络管理协议是基于以太网, 提供网络管理服务的应用协议, 其产生的目的, 就是为了使松散的网络更加有效地运行[2]。它广泛应用于监测网络的状态、网络设备的运行情况、各种电脑设备以及一些辅助的外围设备的工作状态, 使得网络管理员通过对节点的查询和设置, 发现并定位故障, 进而采取相应措施维护网络。
SNMP的网络管理由三个部分组成, 即管理信息库MIB、管理信息结构SMI以及SNMP本身。其中SNMP是以MIB (管理信息结构) 为基础来描述被监管资源, 由此建立的数据集和称之为MIB库。它是一种树型结构存储被管网元信息的数据库, 反映了该MIB树上每个节点中被监管资源的状态, 被监管的对象都处于叶子节点上, 每个被监管对象都由一个唯一的对象标识符来识别。
管理信息结构 (SMI) 对管理信息的名称组织方式、信息描述方式, 以及传输编码机制进行了约定。SMI确定由ASN.1作为消息定义抽象语句, 采用基本编码原则 (BER) 提供传输语句, 采用对象标志符 (OID) 作为管理对象名称的命名方式。MIB和SMI体现了SNMP中管理对象信息的组织方式[2]。
2.1、基于私有MIB的代理扩展及交叉编译
智能音频切换器是进行多路专业音频切换的广电级设备, 为了在一体化管控平台中增强设备的可管理性, 实现平台化的切换控制和检测, 设备使用了SNMP代理与网管服务器进行对接。该设备具有10组2选1的音频信号切换模块, 拥有多种功能模式。为了将设备各个切换模块的通道状态、电平信息、告警信息、切换模式以及是否连接等状态通过SNMP代理上报到网管服务器, 需要按照SNMP管理要求定义自己的私有MIB, 将原有的标准MIB II进行扩展。其中私有的MIB一般定义在iso.org.dod.intemet.private.enterprise节点下。设备与网管服务器连接的系统如图1所示。
图1 设备与网管服务器连接的系统图
SNMP代理软件开发使用的环境为嵌入式Linux-2.6.32.2, 交叉编译链版本为arm-linuxgcc4.3.2, SNMP的版本为net-snmpv5.4.2.1, 硬件是以S3C2440为核心处理器的ARM网络模块[3]。
net-snmp把管理信息结构SMI (Structure of Management Information) 中的对象分为两大类:scalar和table。scalar变量包含我们常用的整型, 字符串, 时间等数据类型。table表就是scalar的一种集合, 由一个和多个列组成, 类似于数据库中的表, 它必须具有索引项, 用来按一定顺序检索表项。智能音频切换器的代理扩展主要是以table来实现, 以scalar为辅助。
ARM端与PC端的通信采用SNMP表格来实现, 这是因为SNMP Table是对象的有序集合, 设备中切换模块数据的组织用表格来表达更方便, 同时使用多个对象的组合才能完整描述切换模块的工作状态, 而且各个切换模块工作状态格式的信息有多条编写含有table结构的MIB文件, 使用MG-SOFT MIB Compiler检查好语法, 特别需要注意MIB中的table, entry的大小写, OBJECT-TYPE的变量名必须以小写开头。文件将设备的OID (Object I-dentifier对象标识符) 定义在experimental.8888.3.3节点下, 该节点下又定义了1个设备状态表格myCard Status Table, 表格由my Card Index, myCard Alarm, my Cardswitch Status, my Card Level Threshold, my Card Switch Delay和my Card Connect Status等11个条目构成, 其中my Card Index代表切换模块序号, my Card Alarm代表切换模块是否告警, my Cardswitch Status代表切换模块的切换状态, my Card Level Threshold代表切换模块的门限电平, my Card S-witch Delay代表切换模块的切换延时, my Card Connect Status代表切换模块连接状态等信息, 通过表格设备代理可以将10路切换模块的信息反馈到网管服务器。如表1所示。
表1 MIB文件的table结构
根据ASN.1语法编写MIB库文件, 其中表格类型是一个特殊类型的声明, 表格内声明的对象称为列对象, 表格对象可以看作是一些标量对象的集合。利用SEQUENCE和SEQUENCE OF定义表格和表格中的行, 通常来说, 表格对象的名字后面加有后缀Table, 行对象的名字后面加有后缀Entry[4]。如表2所示。
表2 MIB库文件的语法说明
其声明如下:
按照表格类型的声明格式, 智能音频切换器的MIB文件DAL3100-MIB.txt编辑如下 (由于整个表格内容较多, 这里仅列出几项) 。
在Fedora系统中把生成的DAL3100-MIB.txt放到usr/local/net-snmp/share/snmp/mibs/的文件夹里, 并将该mib添加到环境变量MIBS中, 查看MIB是否添加成功:
mib2c工具将MIB库转化为代理程序框架, 然后基于此框架进行进一步开发。利用mib2c提供的表格生成模版其目的一是可以降低对SNMP知识的要求, 二是分离请求中对数据的定位和响应中对数据的处理, 使得实现上集中在对数据的处理上。
生成的文件中只有my Card Status Table.c, myCard Status Table_access.c的内容需要修改。设备中所有切换模块的状态都通过ARM平台的地址/数据总线加片选信号从FPGA中提取, 网管代理模块会定时查询切换模块, 20ms没有状态数据回应认为该切换模块掉线, 上报table中的数据填充notconnected (2) 。
交叉编译net-snmp前确保arm-linux-gcc安装成功并已设置好环境变量。将net-snmp解压到工程目录下, 进入net-snmp源码目录下 (此处是net-snmp-5.4.2, 以下使用该目录代表源码目录) , 配置编译选项:
执行下列命令:
将开发的代理程序静态编译进net-snmp框架中, 按照功能需求编辑所需的所有.c和.h文件, 然后在/agent/mibgroup/下新建一个文件夹mini2440, 把所有要编译的模块的代码拷贝到里面, 在上级目录/mibgroup/下建立一个mini2440.h文件, 添加所要编译的模块的目录:
config_require (mini2440/my Card Status Table)
重新configure时, 用--with-mib-modules="mini2440", 就可以编译所有模块了。配置完成后进行交叉编译:make, 然后是使用make install进行安装, install之后在net-snmp/agent目录下会生成一系列的可执行文件。编译得到的snmpd比较大, 需要进行strip压缩处理, 使用arm-linux-strip命令来实现, 静态编译的snmpd大概有1.3M, strip后只有600K。
2.2、移植到目标开发板
将经过交叉编译后的snmpd文件上传到目标板的/usr/sbin目录下 (需要更改访问权限为755可执行) , 同时在/etc/init.c/r CS文件中添加snmp开机自启动服务:
snmpd-f-Le&
在运行net-snmp之前先要进行环境设置, 否则无法查询到结果。环境配置文件由snmpconf命令交互生成。运行snmpconf后, 提示有三个配置文件:snmpd.conf, snmptraps.conf, snmp.conf。其中snmpd.conf用来配置代理和管理端通信时的参数。拷贝net-snmp-5.4.2.1/EXAMPLE.conf为snmpd.conf, 修改后将文件下载到开发板的/usr/local/share/snmp/目录下下 (不存在的目录先要创建) 。
将组设置改为可读写如:group MyRWGroup v2cmynetwork (原配置为:group MyROGroup v2c mynetwork) , 方便测试使用。
至此, 我们就可以在arm板上运行snmp代理了, 当然这种安装还少了很多mib库, 在启动程序运行时会打印出来缺少的mib库文件。目标板上库文件存储的地址空间是:
/usr/local/share/snmp/mibs
最小启动只需三个文件:
SNMPv2-MIB.txt
SNMPv2-SMI.txt
SNMPv2-TM.txt
为了支持交叉编译后的snmpd程序运行还需要加入其它的库文件, 如下:
SNMP-COMMUNITY-MIB.txt
SNMP-USER-BASED-SM-MIB.txt
SNMP-VIEW-BASED-ACM-MIB.txt
使用MG-SOFT MIB Browers直接访问SNMP代理的节点数据, 如图2所示。
图2 MIB树状节点
如果通过“Table View”可以把设备中所有切换模块的状态显示出来, 则说明网管软件已经能够和智能切换器的SNMP代理进行正常通信, 设置刷新时间, 可以动态获取设备中各模块当前的工作状态。
3、设计结论
本文提出了一种嵌入式SNMP代理的实现方案, 通过基于私有MIB的代理扩展及交叉编译将代理程序移植到目标开发板上, 运行snmpd代理, 在默认的161端口就可以通过对私有MIB的访问实现对网元的实时监控。
基于SNMP代理开发的智能音频切换器以其稳定的工作状态、快速的通道切换和简单的监控管理已经应用于建军90周年沙场扩声系统、深圳市城市运营中心、全国党政专用电视会议高清系统和海南省政务数据管理运行中心等诸多项目中, 获得良好的口碑和经济效益。
参考文献
[1]谢希仁.计算机网络[M].北京:电子工业出版社, 2005.
[2]张春强.深入理解NET-SNMP[M].北京:机械工业出版社, 2015.
[3]S3C2440A 32-Bit CMOS Microcontroller User’s Manual[Z].Samsung Electronics, Revision 2, 2008.
[4]赵苍明, 穆煜.嵌入式Linux应用开发教程[M].北京:人民邮电出版社, 2009.