APP下载

基于uc/os-II嵌入式实时操作系统的SNMP

2015-05-11谢红刚刘倩丽

湖北工业大学学报 2015年1期
关键词:管理站网络管理报文

谢红刚, 敖 蕾, 李 丽, 刘倩丽

(湖北工业大学电气与电子工程学院, 湖北 武汉 430068)



基于uc/os-II嵌入式实时操作系统的SNMP

谢红刚, 敖 蕾, 李 丽, 刘倩丽

(湖北工业大学电气与电子工程学院, 湖北 武汉 430068)

在嵌入式操作系统上开发高质量的SNMP已经成为网络通信的发展趋势,由于uc/os-II操作系统的简单实用,研究基于uc/os-II嵌入式实时操作系统下SNMP的管理系统,并结合实际设计项目对管理系统的实现原理和实现过程进行了分析。

SNMP; 嵌入式; uc/os-II操作系统

由于Linux操作系统的功能强大,稳定可靠以及有强大的网络功能等特点,深受人们欢迎,基于Linux的嵌入式SNMP的研究也层出不穷[1-3]。由于Linux操作系统代码量多,占用内存空间大的特点,在小型设备上使用不合适,于是针对一些小型设备网络管理,提出了基于uc/os-II嵌入式实时操作系统的SNMP。本文提出的基于uc/os-II嵌入式实时操作系统下的SNMP基于TCP/IP协议工作,而TCP/IP以太网所显示的优势,使其能够满足数据采集和控制对实时性、抗干扰性、可靠性的严格要求。

1 SNMP协议和uc/os-II的简介

简单网络管理协议(SNMP)是由Internet体系结构委员会(IAB)提出来的,以简单、易用获得了很多公司的支持,得到了广泛的应用,而且还应用到了无线网络,成为了事实上的工业标准。

SNMP协议又称之为代理和管理者之间的通信协议,两者之间的共同点是都运行TCP/IP协议。管理者可对管理设备提出效能、配置和状态等信息的询问,透过要求与回复(request/replay)的简单机制来撷取代理者身上的信息,而两者之间的信息主要是通过PDU协议数据单元来传送[4]。

uc/os-II是一种简单的操作系统[5],具有简单易学、注释清晰、范例丰富、可移植性高的特点。它最主要的优点是系统内核实用性强、可靠性高,从最老版本的ucos,以及后来的uc/os,到最新版本的uc/os—II,该实时内核已经经历了近10年的历程。而且其内核是完全免费的,用户不需要支付任何费用,有利于降低系统的开发成本。

uc/os是一个非常小巧的实时操作系统;整个代码分为内核层以及移植层,这样使得它的移植很方便;采用抢占式调度策略,保证任务的实时性;能够管理多达56个任务;提供了邮箱、消息队列、信号量、内存管理、时间管理等系统服务。

2 基于uc/os-II嵌入式实时操作系统的SNMP的实现

2.1 uc/os-II的移植

在嵌入式操作系统上实现SNMP,首先就要进行移植。uc/os-II的主要代码都是由标准的C语言写成的,所以移植方便。本项目是基于IAREWRAM开发环境下的移植,由于uc/os-II是源码公开的操作系统,且其结构化设计便于分离出与处理器相关的部分。uc/os-II在设计时就充分考虑了在不同处理器上的移植问题。uc/os-II是用C语言和汇编语言来编写的,其中大部分代码都是用C语言编写的,只有极少部分与处理器密切相关的代码是用汇编语言编写的,所以对于移植,只需要修改3个文件:OS_CPU.H 、OS__CPU_C.C和OS_CPU_A.ASM[6],就能把它移植到需要的嵌入式处理器上。uc/os-II的体系结构见图1。

图1 uC/OS-II体系结构

2.2 SNMP的实现结构

管理站负责网管命令发出、数据存储及数据分析;代理端实现设备与管理站的SNMP通信。管理站与代理端通过MIB进行接口统一,管理站向代理申请MIB中定义的数据,代理识别后,将管理设备提供的相关状态或参数等数据转换成MIB定义的格式,应答给管理站完成一次管理操作[7]。

SNMP提供管理站和代理端,SNMP的网络管理体系结构见图2。

图2 SNMP网络管理体系结构

2.3 嵌入式SNMP代理的实现

2.3.1 ucos-II TCP/IP协议栈 SOCKET接口函数是TCP/IP的API,SOCKET API函数编写UDP或者TCP通信的任务,SOCKET建立函数、绑定函数,UDP(TCP)包接收函数、发送函数,SOCKET关闭函数。在完成UDP任务时,其中socket()创建套接字,当套接字被创建后,它的端口号和IP地址都是空的,因此应用进程要调用bind()函数将本地IP和端口与套接字相连,recvfrom()函数用于完成数据的接收,sendto()函数用于发送数据,closesocket()函数删除套接字。在完成TCP任务时,服务器在调用bind()函数后,还必须调用accept listen()把套接字设置为被动方式,以便随时接受客户的服务请求[8]。

2.3.2 SNMP代理的工作流程 嵌入式代理为设备与远程网管中心之间提供基于用户数据报协议(User Datagram Protocol,UDP)之上的标准SNMP协议接口,主要任务是完成远端命令和消息接收发送(Get/Set)、协议的解析和封装、MIB库解析映射、板机事件上报等功能。嵌入式代理软件模块包括MIB库、初始化、主协议处理和Trap等三大模块。

图3 软件控制流程图

2.3.3 初始化MIB SNMP中atTable是描述地址转换表的表,下面是MIB-II中atEntry结构的部分定义。

atEntry OBJECT-TYPE

SYNTAX AtEntry

ACCESS not-accessible

STATUS deprecated

DESCRIPTION

“Each entry contains one NetworkAddress to ‘physical′ address equivalence.”

INDEX {atIfIndex,

atNetAddress}

::={atTable 1}

2.3.4 实现代理功能的框架程序

1)首先初始化MIB:init_mib

2)创建SNMP任务:task_snmp,创建任务后需要将任务初始化,初始化程序如下:

OSTaskCreate(Task_SNMP, (void *)0, &GstkSNMP[TASK_SNMP_STK_SIZE-1], TASK_SNMP_PRIO);

SNMP任务函数:task_snmp,程序如下:

void Task_SNMP(void *pdata)

{SOCKETs;

s=*socket(0, SOCK_DGRAM, UDP_PROTOCOL);

clientaddr.sin_port=161;

iii=bind( (SOCKET * )&s, (struct sockaddr*)&clientaddr,sizeof(clientaddr));

while (1)

{rec_coute=recvfrom(s,snmp_rec_buffer,1460, 0, (struct sockaddr*)&servaddr, &iii);

if(rec_coute>0){

templenth=snmp_rcve(snmp_rec_buffer,rec_coute);

if(templenth!=0){

sendto(s,snmp_send_buffer,templenth,0,(struct sockaddr*)&servaddr,sizeof(servaddr)); }}}};

建立socket通道,接受通道数据,并对数据进行解析。

SOCKET *socket( uint16 af, uint16 type, uint16 protocol)

{

uint8 i,j,k;

static uint16 port=1025;

if(protocol==TCP_PROTOCOL)

{…}

else if(protocol==UDP_PROTOCOL)

{ …}}

建立socket通道以后,响应管理端发起的连接,然后绑定端口,检查IP地址。

通过accept()函数建立连接,连接成功后通过recvfrom()完成数据的接收,接收到的数据通过sendto()完成数据的发送,数据成功发送出去后,closesocket()删除套接字,这样通过socket口的数据接收与发送完成。

3)接收数据报文

uint16 recvfrom( SOCKET s, uint8 *buf, uint16 len, int flags, struct sockaddr *from, uint16 *fromlen ) 用于接收管理站发送过来的报文,通过SOCKET端口接收。

4)分析数据报文

首先是SNMP头分析,如果接收到的数据合格,就进行下一步的分析,其次是版本号的分析;共用体的分析,分析共用体的权限;操作类型的分析(包括种类:get,get_next,set)以及长度和数据段的分析。其流程见图4。

5)处理数据报文

数据的处理过程就是数据封装的过程,即将分析后的数据封装在snmp_send_buffer中,其中数据拷贝并填充发送到数据缓冲的程序如下:

uint8 COPY_SEGMENT(tlvStructType * val,uint8 copydata)

{

uint8 seglen;

memcpy(&response.buffer[response.index],&snmprequest.buffer[val->start],seglen );

response.index += seglen;

return seglen;}

其中response.buffer=snmp_send_buffer; snmp_send_buffer为全局变量,将封装好的信息传到udp.c,进行下一步分析。

图4 数据报文分析流程图

6)生成应答报文

SNMP作为UDP的数据部分再经过UDP封装后生成新的应答报文,其程序如下:

uint8 Udp_Process(Rec_Ptr * Udp_Rec)

{

static uint8 UDP_REC_BUFF_NUM=0;

uint8i,j;

memcpy (&(UdpRecBuff[UDP_REC_BUFF_NUM]), (*Udp_Rec).RecDataPtr, (*Udp_Rec).length);…}

7)返回分析结果

将封装好的数据报文经过Socket发送给管理端。

该snmp代理代码加载在基于TI终端上,通过SNMP管理软件实现对该终端的网络信息的管理。使用Wireshark1.10.6网络封包分析软件获取的代理端与管理站之间通信的SNMP数据包如图5所示。

图5 管理站界面图

3 结论

随着网络技术的飞速发展,网络管理工作也变得越来越复杂,简单网络管理协议便应运而生,它简化了复杂的网络管理工作,更方便了对远程设备的控制。嵌入式操作系统也被广泛应用,本文提出基于COS-II操作系统的SNMP,通过IAR Embedded Workbench 开发工具编程、调试,实现了SNMP在COS-II操作系统下的网络管理,适用于一些简单的、小型设备的网络管理。

[1] 徐晶晶.基于嵌入式SNMP网管代理系统的设计与实现[D].武汉:武汉理工大学,2008:34-36.

[2] 刘桂源. 基于ARM的LINUX嵌入式SNMP代理的分析与实现[D].南昌:华东交通大学,2010:21-25.

[3] 高翊宇,马林华,南秦博.基于Linux操作下的TCP/IP网络通信研究与应用[J].现代电子技术,2006,(18):74-75.

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

[6] 任 哲,樊生文.嵌入式操作系统基础uc/os-II和Linux(第二版)[M].北京:北京航空航天大学出版社,2011:222-224.

[7] 车一龙.基于SNMP的无线网管系统MIB设计与实现[D].西安:西安电子科技大学,2012:9-14.

[8] 龚 康.面向生产设备管理的嵌入式SNMP代理研究与实现[D].重庆:重庆大学,2012:7-10.

[责任编校: 张岩芳]

The SNMP Management System based on the Embedded Real-time Operating System uc/os-II

XIE Honggang, AO Lei, LI Li, LIU Qianli

(SchoolofElectrical&ElectronicEngin.,HubeiUniv.ofTech.,Wuhan430068,China)

With the development of network, it has become a trend of network communication to develop high quality SNMP on embedded operating system. Due to the simplicity and practicability of the operating system uc/os-II, based on the embedded real-time operating system uc/os-II, the SNMP management system were studied in this paper. And the implementation principle and implementation process of management system were also analyzed combined with the actual design project.

SNMP; the embedded; operating system uc/os-II

2014-08-21

湖北省自然科学基金(2014CFB585)

谢红刚(1973-), 男, 湖北鄂州人,工学博士,湖北工业大学教授,研究方向为通讯

1003-4684(2015)01-0025-04

TN915.07

A

猜你喜欢

管理站网络管理报文
基于J1939 协议多包报文的时序研究及应用
数控机床DNC网络管理平台在智能制造中的应用
CTCS-2级报文数据管理需求分析和实现
宿迁市救助管理站:小团队如何撬动大社会
大连市救助管理站:多个“第一”背后的秘密
浅析反驳类报文要点
基于OpenStack虚拟化网络管理平台的设计与实现
电动汽车充电服务网络管理初探
基于EOC通道的SHDSL网络管理技术
托起救助之责 谱写青春赞歌——记河南省安阳市救助管理站站长许帅