APP下载

基于SNMP的嵌入式终端状态管理系统的设计

2016-02-23李泰国王志龙李文新曹靓姝王世佳夏加高

计算机技术与发展 2016年8期
关键词:终端设备以太网报文

李泰国,王志龙,李文新,曹靓姝,王世佳,夏加高

(1.兰州空间技术物理研究所,甘肃 兰州 730000;2.兰州工业学院,甘肃 兰州 730000)

(b)Response-PDU

图4 SNMPv2 PDU结构

基于SNMP的嵌入式终端状态管理系统的设计

李泰国1,王志龙2,李文新1,曹靓姝1,王世佳1,夏加高1

(1.兰州空间技术物理研究所,甘肃 兰州 730000;2.兰州工业学院,甘肃 兰州 730000)

为支持航天器嵌入式网络终端在研制过程中调试、测试及排故的需要,研究了基于SNMP的嵌入式终端状态管理系统的实现方法。在介绍了SNMP协议的原理以及工作环境的基础上,详细分析基于KSZ8851以太网控制器的嵌入式终端软件设计;在上位机采用WinSNMP、套接字以及多线程技术实现对航天器网络终端状态的管理与测试。系统测试结果表明,该系统可以有效地对信息终端进行全面监测与管理,工作稳定可靠,维护和使用方便,操作方法简单,具有一定的应用价值。

嵌入式终端;SNMP协议;WinSNMP;套接字;多线程技术

0 引 言

在某航天器内部通信系统中,由于被管理的终端设备数量较多,如果对各终端不进行集中管理,信息不能共享,容易形成“信息孤岛”。终端状态管理系统设计采用集中管理模式完成网络终端的管理功能,应用层采用标准的SNMPv2协议对终端的状态进行定期查询,终端同时具备主动向管理处理器汇报状态。为支持航天器网络终端研制工作,需要研制基于SNMP的网络终端管理软件模拟航天器内部通信系统的管理处理器完成对网络终端真实设备的调试、测试及排故。采用SNMP协议的Get-Request(获取每个对象的值)、Response(响应取操作)、Trap(代理者向管理者报告事件信息),网络终端利用161端口侦听处理器发送的Get请求,网络终端利用162端口向处理器发送Response响应和Trap报告。

系统中上位机采用WinSNMP、原始套接字以及多线程技术;嵌入式终端采用DSP架构完成以太网的通讯并实现SNMP功能。管理系统通过局域网实现对航天器网络终端状态的管理与测试。为航天器整体通信系统的联试做好准备。

1 SNMP协议概述

SNMP(Simple Network Management Protocol,简单网络管理协议)[1-5]自20世纪80年代末期面世以来得到了快速发展,伴随着其管理功能的增强以及管理对象的扩大,网络管理技术逐步成为网络构建和维护中非常重要的要素之一[6]。SNMP是以TCP/IP协议为基础,工作在传输层,对于底层的传输是完全透明的。SNMP协议通常使用UDP协议进行信息传输。SNMP主要的功能是向代理发出管理操作指令,可以接收来自代理的陷阱信息及其他反馈信息。SNMP代理一般在被管理设备内部,将由管理者发送的命令转换为本设备特有的指令进行执行,并可返回本设备的相关信息。管理进程通过161端口发送GetRequest、GetNextRequest、SetRequest等消息,同时管理进程在端口162上侦听Trap消息。对于代理则是在161端口上侦听GetNextRequest、GetRequest、SetRequest命令,同时代理需要通过162端口发送Trap消息和通过161端口发送GetResponse消息。其工作环境如图1所示。

图1 SNMP工作环境

2 系统工作原理及设计

嵌入式终端管理系统主要包括数据采集嵌入式终端设备、通信网以及终端管理系统上位机部分。系统结构框图如图2所示。

图2 系统结构框图

嵌入式终端设备主要负责采集各终端设备中的终端状态信息并根据上位机发送的数据对嵌入式终端设备进行控制。通信网主要负责各嵌入式终端与上位机之间的信息传输。上位机主要是根据对收集的各终端状态信息进行分析判断,并根据实际情况对各终端设备进行控制。

嵌入式终端是航天器整体通信系统的末梢,具有向上位机发送入网请求、解析控制命令、采集并预处理数据、自动发送告警等功能。嵌入式终端设备的硬件主要包括TI公司的TMS320C6415处理器、Micrel公司的KSZ8851-16mll以太网控制器等模块。另外,还包括维持DSP系统正常工作的外围电路,如电源模块、SDRAM接口、FLASH接口、复位电路以及看门狗电路等。

3 嵌入式终端软件设计

嵌入式终端软件设计主要是在TMS320C6415处理器、KSZ8851-16mll以太网控制器上完成以太网协议栈的移植,并实现嵌入式终端设备的SNMP软件设计。

3.1 KSZ8851-16mll以太网控制器

KSZ8851-16mll是一种单端口嵌入式控制芯片,由美国Micrel公司研制。KSZ8851-16mll以太网控制器包括一个8/16 bit的普通主机处理器接口、一个快速以太网的MAC控制器以及在12 kB的接收缓存(RXQ)和6 kB的发送缓存(TXQ)之间共享18 kB内部缓冲存储器,并通过Wake-on-LAN技术有效地解决快速以太网的应用;支持Big-Endian(大端)和Little-Endian(小端)的处理器、多帧数据传输和接收、IPv4/IPv6校验和以及32 bit循环冗余码(CRC)的生成与校验。

KSZ8851-16mll集成MAC和PHY以太网控制器完全符合IEEE802.3/802.3u标准,专为高性能和高吞吐量应用,支持10BASE-T/100BASE-TX,支持IEEE802.3X全双工和半双工流控,支持IP报头(IPv4)/TCP/UDP/ICMP的校验,自动生成32 bit循环冗余码(CRC)校验等。

3.2 OpenTCP协议栈

OpenTCP协议栈是Micrel公司开发的基于KSZ8851-16mll以太网控制器的开源代码协议栈。OpenTCP针对KSZ8851-16mll进行了相应的优化,有效提高了协议栈的处理效率。

OpenTCP是TCP/IP和Internet应用层的精简协议,是一款高质量,面向嵌入式系统的,开源的,用于8/16位MCU的源码开放的TCP/IP协议栈。全部代码使用C语言编写,与通用的TCP/IP协议栈相比,其代码更为精简,不需要操作系统的支持,可以在各种MCU体系结构上实现,减少了对资源的消耗,满足了嵌入式应用的要求。

3.3 底层驱动程序设计

系统采用查询方式完成KSZ8851-16mll以太网控制器的数据操作。主要分为以下几个过程:

(1)初始化KSZ8851-16mll以太网控制器芯片,通过初始化函数int Ethernet_Init(void)完成发送/接收相关寄存器的设置,如对以太网控制器进行复位,对本机IP地址、MAC地址等信息进行设置。

(2)KSZ8851寄存器操作。

可以通过以下两个步骤访问KSZ8851寄存器:

①将CMD置高,将寄存器的偏移地址和字节使能号(BEn)写到共享数据总线上;

②将CMD置低,在共享数据总线上读或者写数据。

寄存器读操作:*((volatile FAR unsigned short *)(IO_BASE_KS8851+CMD_HIGH))=(UINT16)(addr|((BE1|BE0) <<(addr&0x02)));

*data=*((volatile FAR unsigned short *)(IO_BASE_KS8851+CMD_LOW));

寄存器写操作:*((volatile FAR unsigned short *)(IO_BASE_KS8851+CMD_HIGH))=(unsigned short)(addr|((BE1|BE0)<<(addr & 0x02)));

*((volatile FAR unsigned short *)(IO_BASE_KS8851+CMD_LOW))=(unsigned short)(data);

其中,IO_BASE_KS8851为网卡芯片基地址。当CMD_LOW=0(CMD=0),则表示当前为共享数据总线;当CMD_HIGH=8(CMD=1),表示当前为共享地址总线。

(3)KSZ8851以太网控制器数据接收与发送操作。

操作KSZ8851进行数据的接收与发送是通过一系列的宏函数实现的,如NETWORK_CHECK_IF_RECEIVED()、NETWORK_COMPLETE_SEND(c)、HW_READ_ONE_FRAME(data,len)、HW_WRITE_ONE_FRAME (data,len)等。

3.4 基于OpenTCP的UDP通信实现

系统进行UDP通讯调用的函数有process_udp_in、udp_demo_eventlistener、udp_demo_run、udp_demo_send、udp_send。通讯流程如图3所示。

3.5 嵌入式终端的SNMP软件设计

基于SNMP的嵌入终端设备采用Poll轮询方式和Trap告警方式来设计SNMP代理程序,用以实现代理端和上位机管理系统之间的通信。嵌入式终端上电启动后,SNMP监控程序自动运行,等待上位机发来的指令并采集终端设备的状态数据。嵌入式终端软件接收到上位机的指令,对指令进行解析。判断是SNMP的Set(采集)命令,还是Get(上报)命令,据此判断是采集终端设备的状态,还是将采集的状态数据上报给管理系统[7-8]。

图3 UDP通讯流程

4 终端管理系统上位机软件设计

管理系统中的上位机软件采用SNMP管理模型,设计思路如下:

(1)系统初始化。初始化SNMP环境,指定SNMP Community,初始化报文接收套接字,定义参数,申请各种资源。

(2)启动SNMP报文发送定时器以及SNMP报文接收线程。

(3)SNMP报文构造与轮询。管理工作站周期性主动访问所有的被管终端设备。轮询模块需要输入被管对象的IP/OID列表构造SNMP报文。使用SNMP GetRequest异步原语周期性发送SNMP访问消息。其中,异步原语指发出SNMP访问消息后无须等待继续执行,另有专门的线程负责接收SNMP应答消息。

(4)SNMP报文接收与解析。在接收线程中接收由被管终端设备发出的Trap及GetResponse消息。

(5)实时显示。对轮询和Trap接收数据中的重要信息进行实时显示,在有紧急情况时通知管理员,由管理员采取相应措施。

(6)日志写入。管理工作站由轮询和Trap从被管对象上收集到大量数据,加以整理,成为日志记录,按照指定的数据库视图存入日志数据库。

(7)内存管理。中止SNMP后,由WinSNMP应用程序负责释放所有在调用WinSNMP API函数过程中所分配的资源。

文中在Visual C++ 6.0的基础上,选用Microsoft WinSNMP工具包开发终端管理系统。其中,WinSNMP是由微软公司专门针对SNMP协议为用户开发的API(应用程序接口),其主要目的是提供一种解决方案,方便在Windows下开发基于SNMP的网络管理程序。它定义了过程调用、数据类型、数据结构及相关语法的开放式单一接口规范,SNMP开发者必须在此规范的基础上开发相应的程序。WinSNMP以函数的形式封装了SNMP协议的各部分(在VC++6.0开发环境中体现为wsnmp32.dll、wsnmp32.lib和winsnmp.h),且针对SNMP使用UDP的特点而设置了消息重传、超时机制等。

4.1 终端管理协议

嵌入式终端管理系统中采用集中管理模式,由上位机完成嵌入式终端的管理功能,应用层采用标准的SNMPv2协议对终端的状态进行定期查询,终端同时具备主动向上位机管理系统汇报状态的能力。

采用SNMP协议的Get-Request、Response、Trap,终端利用161端口侦听管理系统发送的Get请求,并利用162端口向管理系统发送Response响应和Trap报告。

系统中SNMP通信需要用到的信息结构主要包括:

(1)SNMPv2消息结构。

Message::=SEQUENCE{

Version INTEGER{version(1)} —SNMPv2的版本号为1

CommunityOCTET STRING —共同体名

Data ANY —SNMPv2 PDU

}

主要由版本号、共同体名、消息实体PDU组成。

(2)SNMPv2 PDU的结构如图4所示。

PDU类型Request-ID00Variable-bindings

(a)GetRequest-PDU,SNMPv2-Trap-PDU

(b)Response-PDU

图4 SNMPv2 PDU结构

(3)网络管理器采用SNMP协议中的MIB库对嵌入式终端进行管理[7-9],具体管理的主要内容如表1所示。

4.2 SNMP报文的构造与解析

终端管理软件和终端设备之间通过SNMP报文完成相关信息交换,只有符合SNMP协议规范的数据才能被管理软件和终端设备所识别[9-11]。因此,SNMP协议报文的构造是协议实现中最为关键的一环。SNMP报文构造首先通过API/GUI获得需向代理发出报文的各种数据,然后调用wsnmp32.dll所封装的API进行报文构造。其报文构造流程如图5所示。

表1 网络管理器管理嵌入式终端内容列表

图5 SNMP报文构造流程

上述是在发送SNMP报文时的报文构造方法,在接收到报文并对报文进行解析时,采用相反的过程。将接收线程中收到的SNMP报文作为参数传给报文解析函数,在报文解析函数中调用asn1lib.dll中已经封装好的API解析SNMP报文,得到各OID所对应的变量值。

4.3 SNMP报文的发送与接收

将SNMP协议报文封装完成后,就可以将SNMP报文以UDP数据包的形式发送到目的终端设备,以及等待接收终端设备回送的响应报文[12-14]。文中采用WinSNMP发送报文,其过程主要有以下四个部分:WinSNMP的初始化、PDUs的创建、发送信息以及资源的释放。

由于网络速度或者其他因素的影响,如果终端管理软件在短时间内连续向被管终端设备发送多条管理命令,在前一个发送报文操作未完成之前,则下一个发送请求无法接收,从而导致后面的请求报文丢失。文中采用发送定时器解决该问题,定时器定时长度为5 s,这样就可以控制发送报文的时间间隔。

通常,在接收报文时WinSNMP有两种方式的异步消息驱动。一种方法是创建一个消息处理函数,在这个函数里处理消息的接收、信息的提取与处理等事务,让WinSNMP在有响应消息到达时发送一个消息给系统。另一种方式是让系统自动调用一个函数。使用这两种方式接收终端设备发来的Response及Trap消息时需要启动SNMP Service及SNMP Trap Service。但是,文中没有采用这两种方式,而是通过开启一个接收线程监听161、162端口来接收终端设备发来的消息。在161端口收到的Response消息或162端口收到的Trap消息后,调用asn1lib.dll中封装的API进行SNMP报文的解析。将解析后的数据实时显示并存储。

4.4 SNMP报文的显示与存储

将解析后的数据采用树形控件的形式在用户界面上实时显示,方便用户实时监测终端设备是否正常运行。同时将解析后的重要数据保存到数据库中,主要包括终端设备IP、变量名称以及变量值等。该系统选用ACCESS数据库,其可处理的记录大于10万条,能满足一般的要求,并且操作方便、易于维护。

5 结束语

文中在详细介绍SNMP协议的原理以及工作机制的基础上,在下位机中以KSZ8851以太网控制器为核心实现嵌入式终端及软件设计,在上位机中提出了基于WinSNMP的嵌入式终端状态管理软件的设计实现方案。利用SNMP协议管理模型设计的上层管理及底层终端管理系统,可以对分散的终端设备进行集中管理并实现数据交互和处理。结果表明,该系统工作稳定可靠、维护和使用方便。使用已有的动态库缩短了研制周期,节省了研制成本。

[1] 王焕然,徐明伟.SNMP网络管理综述[J].小型微型计算机系统,2004,25(3):358-366.

[2] 孙 为.SNMP协议管理机制及其代理进程的实现[J].硅谷,2009(5):46-47.

[3] Mc Cloghrie K.Structure of management information version 2(SMlv2)[S].[s.l.]:[s.n.],1999.

[4] Case J.Protocol operations for version 2 of the simple network management protocol[S].[s.l.]:[s.n.],1996.

[5] Mathias H,David G.SNMP versions 1&2 simple network management protocol theory and practice[M].London:International Thomson Computer Press,1995.

[6] 吴黎兵,崔建群,吴产乐,等.SNMP管理者协议实现的关键技术[J].计算机工程,2004,30(21):85-86.

[7] 张大陆,高 方.基于SNMP的计算资源管理系统的设计[J].计算机工程,2004,30(20):98-100.

[8] Presuhn R.Management information base (MIB) for the simple network management protocol (SNMP)[S].[s.l.]:[s.n.],2002.

[9] 冯兴乐,姜云国,宋 凡,等.面向智能家居监控系统的SNMP协议设计[J].测控技术,2014,33(8):88-90.

[10] 杨妮妮,赵新慧,李文超,等.基于Web的SNMP网络管理[J].微计算机信息,2006,22(2-3):110-111.

[11] 李 莉,韩春燕,张 炜,等.基于SNMP的信息化小区网管系统的设计与实现[J].小型微型计算机系统,2002,23(2):207-209.

[12] 吴海峰,张月琳.基于SNMP的网络拓扑发现算法[J].大连理工大学学报,2005,45(z1):65-68.

[13] 李 琳,李 杰.基于SNMP的网络拓扑发现算法[J].计算机工程与设计,2008,29(6):1345-1347.

[14] 王志刚,王汝传,王绍棣,等.网络拓扑发现算法的研究[J].通信学报,2004,25(8):36-43.

Design of Embedded Terminal State Management System Based on SNMP

LI Tai-guo1,WANG Zhi-long2,LI Wen-xin1,CAO Jing-shu1,WANG Shi-jia1,XIA Jia-gao1

(1.Lanzhou Institute of Physics,Lanzhou 730000,China; 2.Lanzhou Institute of Technology,Lanzhou 730000,China)

With the purpose to support debugging,unit testing,system test and troubleshooting on a spacecraft embedded network terminal,the implementation of the embedded terminal state management system based on SNMP is researched.Based on the introduction of the principle and working environment of SNMP,the design of the embedded terminal software based on KSZ8851 Ethernet controller is analyzed in detail.In the host computer,WinSNMP,socket,and multi-thread technology is used to realize management and testing of spacecraft network terminal state.The test results show that the system can be effective for overall monitoring of information terminal,which is stable and reliable,and convenient for maintenance and operation,with simple method.It has a certain practical value.

embedded terminal;SNMP;WinSNMP;socket;multi-thread technology

2015-04-14

2015-09-15

时间:2016-07-29

国家自然科学基金资助项目(11161041)

李泰国(1985-),男,硕士研究生,工程师,研究方向为空间物理电子学。

http://www.cnki.net/kcms/detail/61.1450.TP.20160729.1833.010.html

TP302

A

1673-629X(2016)08-0138-05

10.3969/j.issn.1673-629X.2016.08.029

猜你喜欢

终端设备以太网报文
基于J1939 协议多包报文的时序研究及应用
低轨星座短报文通信中的扩频信号二维快捕优化与实现
浅析反驳类报文要点
三大因素驱动创新提速以太网快步迈入“灵活”时代
三大因素驱动创新提速 以太网快步迈入“灵活”时代
行车记录仪通信连接方法、行车记录仪及终端设备
谈实时以太网EtherCAT技术在变电站自动化中的应用
电力配网自动化中配电自动化终端设备的应用
电网终端设备信息安全研究
电网监视终端与自动化设备的运行维护技术