APP下载

ST OS20平台上的SNMP代理端的开发

2011-08-10腾,陈

电视技术 2011年1期
关键词:机顶盒网络管理结点

周 腾,陈 建

(中山大学 信息科学与技术学院,广东 广州 510006)

责任编辑:任健男

1 开发背景

随着Internet的普及和有线数字电视的推广,越来越多的家庭正在享受着高科技带来的便利生活。有线数字机顶盒用户数量庞大,虽然家庭网络的拓扑结构比较简单,但用户一般不具备专业的操作技能,并且目前的机顶盒不支持对电视频道和互动应用进行实时监控,所以亟需开发基于现行平台的网络管理软件。

简单网络管理协议(SNMP)[1-3]是当下比较成熟的网络管理协议,从20世纪90年代初提出至今已经过近20年的发展,得到了众多网络产品提供商的支持。SNMP协议使用UDP进行通信,降低了连接建立和拆除的代价。

本文将着重讨论意法半导体有限公司(STMicro⁃electronics)的OS20/OS21平台上SNMP的实现。OS20/OS21是ST公司推出的基于ST芯片的开源的、免费的、轻量级的实时嵌入式操作系统,目前主要用于使用ST芯片的机顶盒中。

虽然现在有很多现成的成熟的SNMP Agent的开源软件,如net-snmp,但是ST芯片的处理能力不强,整个平台的资源相对紧缺,并且OS20操作系统移植但又不完全移植于Linux操作系统,所以必须从最底层开始,以最少的资源消耗方式开发SNMP的代理端。

2 SNMP的报文格式

SNMP有SNMPv1,SNMPv2和SNMPv3三个版本,本文使用SNMPv1进行代理端的开发,SNMPv2和SNMPv3的原理与SNMPv1类似。

SNMP使用基本编码规则(BER)对传输的内容进行编码[1]。BER的基本规则是通过将数据表示为标记(Tag)、长度(Length)及内容(Value),如图1所示。

图1 BER的组成

其中,标识的最高两位用表示ASN.1所定义的变量类别,有UNIVERSAL,APPLICATION,CONTEXT和PRIVATE四种;一位用于区分该变量是否为结构类型;接下来五位指出了类型的标志号,通用类型的标志号 有 INTEGER,OCTET STRING,NULL,OBJECT IDENTIFIER,SEQUENCE和SEQUENCE OF五种。

SNMP的报文是使用了BER编码的二进制数据流,有严格的层次结构,如图2所示。整个SNMP报文是一个经过BER编码的SEQUENCE类型,其中包含了三个部分:第一部分是一个经过BER编码的IN⁃TEGER,代表SNMP报文的版本号;第二个部分是经过BER编码的OCTET STRING代表该SNMP报文的团体名;第三个部分是通过BER编码SNMP的协议数据单元[2]。在SNMP的协议数据单元(PDU)中,第一个字段是经过BER编码的Request-id,接下来两个字段是关于错误标识的,第三个字段就是各个OID经过BER编码后的值。

图2 SNMP协议的报文格式

3 管理信息库定义

在SNMP中,使用管理信息库(MIB)对被管设备的各个参数或指标进行定义。MIB以ASN.1语言及一些SNMP定义的扩展宏进行定义,使用类似于Internet域名系统的树状结构对被管设备进行管理[3-6]。

依据机顶盒的管理需求,本文将机顶盒SNMP的管理信息库定义如图3所示。在DVBMib的结点下面定义了DVBSystemInfo结点用于获取机顶盒的基本信息,如制造商的名称、机顶盒的位置等。DVBDevice结点定义了机顶盒上的软硬件信息,如CPU、内存、闪存、操作系统内核及软件版本等。DVBWorkSta结点定义了机顶盒的工作状态,如CPU、内存、交换分区的使用情况,系统进程、电视节目、互动点播等的工作状态。在DVBErrInfo结点上定义了相关的错误信息,以便运营商对差错情况进行监控。

4 SNMP代理的实现

在上述工作的基础上,该协议的协议栈可以使用分层的结构实现。根据IEEE定义的SNMP的基本类型,可以用Type类作为所有类型的父类,由Type类派生出SNMP的简单的类型,如Null,Integer,OctetString和ObjectIdentifier等子类。另外,Structure类型也是由Type所派生,作为所有结构类型的父类,如Sequence,RequestPdu和ResponseP⁃du等子类。为了防止应用程序在构造这些类型的时候失败而异常退出,这些类的构造只能做最简单的事情,构建一个编码的内容为空的Type对像或通过复制已有的编码的内容构建一个Type对象。

该系统中使用SnmpMessage类作为请求报文类Request和响应报文类Response的基类。在SNMPMes⁃sage类中定义了SNMP的Version,Community,Request ID,Error Status,Error Index和 Variable Bindings等字段。SnmpMessage定义如图4所示。

在该系统中将一次接受SNMP的请求和相应请求定义为一个会话,使用Session类抽象该会话的交互过程。Session类的对象以一个SnmpSocket对象为参数创建,在Session类中实现了ReceiveRequest,ProcessRequest和SendResponse等方法,用于SNMP的交互过程。

图3 OS20/OS21机顶盒SNMP的MIB定义(截图)

图4 SnmpMessage定义

SnmpSocket类封装了一些系统相关的网络套接字的调用,包括了多路IO复用Select模型,还有网络数据的接收(Receive)和发送(Send)方法。

FunctionRegister类定义为一个单件,在应用程序启动之时完成唯一的静态对象的初始化,在该对象的初始化中完成获取系统相关信息的函数的注册。该类的构造函数,拷贝构造函数和赋值操作符必须声明为私有,以防止在使用中被非法篡改。FunctionRegister定义如图5所示。整个系统的类图如图6所示。

图5 FunctionRegister定义

图6 系统类图(截图)

5 结论

文本SNMP代理端的开发与实现,并以net-snmp的软件包为例,测试服务端和SNMP代理交互过程的实现。将上述的MIB库配置到SNMP的服务端之后,启动SNMP的守护进程,通过刷新system组的列表,在客户端上得到了如图7所示的请求数据包。

图7 数据报

第1个下划线段(3038),整个信息是个ASN.1的序列类型。根据编码规则,前两个字节分别指明了ASN.1的类型和长度。字节30即BER编码中的标识,代表接下来是一个SEQUENCE结构,第2个字节38即BER编码中的长度,代表接下来有56个字节(byte)的内容。第2个下划线段是(020101),02标识了后面的内容为一个INTEGER,01指出这个INTEGER的长度为一个字节,最后的01为该INTEGER的值,代表的是该请求的SNMP版本号(version)为1。第3个下滑线段(04067075626c 6963),是一个OCTET STRING,长度为 6,表示该 SNMP报文的 Community,值为“pub⁃lic”。接下来是SNMP数据包的第2个组件PDU,由(a22b)可知它是结构类型GetResponse-PDU的编码,2b是它的长度,即接下来内容的长度。第5个下划线段(020427 cb bc 79)是GetResponse-PDU的第一个组件(Request-ID)的数据编码,是个整数类型,长度为4,值为667663481。第6、第7个下划线段分别编码了PDU的第2个组件(error-status)和第 3个组件(er⁃ror-index),2个整数类型都被置为0,所以他们的TLV都为020100。第8个下划线段(301d),Tag字节为30表明该部件是一个结构类型。其长度为1d,十进制为29,是剩余的全部字节,说明了该组件是PDU的最后一个组件,变量绑定列表。变量绑定类表是由多个OID和value组成的键值对构成。第9个下划线段就是说明接下来是个<oid,value>的对象。第10段是OID的编码,它是OBJECT IDENTIFI⁃ER类型,长度为8,值为1.3.6.1.2.1.1.1.0。第11个段<oid,value>对象的 value部分的编码,是 OCTET STRING类型,长度为0f,值为“Wireless-Router”。经上面的分析,已经将一个完整的SNMP的GetResponse包的BER编码进行了剖析。为了更为直观地说明问题,用图8表示出GetResponse包的BER结构。

图8 SNMP数据包的编码结构

[1]武孟军,徐龑,任相臣.Visual C++开发基于SNMP的网络管理软件[M].北京:人民邮电出版社,2007:27-37.

[2]李江明.SNMP简单网络管理协议[M].北京:电子工业出版社,2007:41-60.

[3]BLACK U.Network management standards:SNMP,CMIP,TMN ,MIBs,and object libraries[M].New York:McGraw-Hill,1995.

[4]FEIT S M.SNMP:a guide to network management[M].New York :McGraw-Hill,1995.

[5]STALLINGS W.SNMP网络管理[M].胡成松,汪凯,译.北京:中国电力出版社,2001.

[6]郭军.网络管理[M].北京:北京邮电大学出版社,2003.

猜你喜欢

机顶盒网络管理结点
基于八数码问题的搜索算法的研究
机顶盒上别盖布
安全使用机顶盒注意五点
基于OpenStack虚拟化网络管理平台的设计与实现
电动汽车充电服务网络管理初探
Ladyzhenskaya流体力学方程组的确定模与确定结点个数估计
基于EOC通道的SHDSL网络管理技术
有线电视高清数字电视机顶盒测试系统的构建
What is Apple Watch All About?
基于Raspberry PI为结点的天气云测量网络实现