《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 面向设备监控的LwIP协议栈扩展设计
面向设备监控的LwIP协议栈扩展设计
来源:电子技术应用2013年第6期
孙棣华1,2,陆 旭1,2,廖孝勇1,2,郑林江2,3,余楚中1
1.重庆大学 自动化学院,重庆400044; 2.重庆大学 信息物理社会可信服务计算教育部重点实验室,重庆400044; 3.重庆大学 计算机学院,重庆400044
摘要: 针对远程设备监控中数据传输速度慢、传输距离有限、无法监控设备网络状态等问题,提出一种基于改进轻型IP协议栈(LwIP)的设备监控方案。在嵌入式ARM硬件平台和μC/OS-Ⅱ软件平台基础上,采用LwIP协议栈实现了监控终端网络通信功能。通过扩展LwIP中因特网信报控制协议(ICMP)模块中的报文应答机制,完成了对ICMP数据报文的监听和处理,以达到对远端设备的实时监控。实验结果证明了设计方案的可行性和实用性。
中图分类号: TP274+.2
文献标识码: A
文章编号: 0258-7998(2013)06-0010-04
Expansion design of LwIP in device monitoring
Sun Dihua1,2,Lu Xu1,2,Liao Xiaoyong1,2,Zheng Linjiang2,3,Yu Chuzhong1
1.College of Automation,Chongqing University,Chongqing 400044,China; 2.Key Laboratory of Dependable Service Computing in Cyber Physical Society of Ministry of Education, Chongqing University,Chongqing 400044,China; 3.College of Computer Science,Chongqing University,Chongqing 400044,China
Abstract: Aiming at problems of slow speed of data transmission, restricted transmission distance and difficulty to get monitoring device network state in remote device monitoring, this paper designs a new device monitoring scheme which is based on improved LwIP. This scheme realizes the function of the network by transplanting LwIP on ARM platform and μC/OS-Ⅱ system. In order to achieve the purpose of real-time monitoring on remote device, it completes monitoring and treatment of the ICMP message by improving ICMP support in LwIP. The experimental results prove the feasibility and practicability of the scheme.
Key words : LwIP;device monitoring;STM32F207;ICMP

    设备监控系统可获得设备的工作环境参数和设备运行状况,对确保设备安全正常运行、充分发挥设备效能、提高企业经济效益有极其重要的作用[1]。目前已有许多企业构建了设备监控系统,但大部分是通过RS232、RS485和CAN总线等协议进行通信,不仅在数据传输距离和传输速度上有很大限制,而且无法直接接入互联网,无法满足信息化条件下对企业生产作业管理的要求[2]。本文将结合嵌入式技术和网络技术,设计一种远程设备监控方案,保证设备工作状态的准确采集和快速传递,同时辅助工作人员实现对现场设备的及时维护与管理。

    瑞士计算机科学院的Adam Dunkels等开发了一套用于嵌入式系统的TCP/IP协议栈-LwIP,这是一种既可以移植到操作系统上,又可以独立运行的轻型嵌入式TCP/IP协议栈,其主要特点是在保持TCP协议主要功能的基础上减少了对RAM的占用[2-3]。LwIP作为一种嵌入式网络协议栈,具有相对齐全的功能,并提供一套非常完善的内存管理方法,适合在32位的低端嵌入式系统中使用。
    在综合考虑设计成本和稳定性等多方面因素后,本文在32位ARM处理器 STM32F207和嵌入式实时操作系统μC/OS-II组成的软硬件平台上移植和改进LwIP协议栈,从而实现了对远端设备的监控与管理。
1 系统硬件平台
    设备监控系统主要包括以太网通信和本地数据采集两大模块。采用STM32F207系列作为开发板核心处理器,硬件功能模块主要包括网络功能模块、串口设备驱动模块、A/D模块、看门狗定时器功能模块、Flash数据读写模块等,通过各模块之间的互相辅助与合作,保证监控终端的稳定可靠工作,实现配电状态检测、网络状态检测以及环境温湿度数据采集等功能,并通过以太网向上位机传递现场设备信息[4]。硬件电路结构框图如图1所示。

3 LwIP协议的移植与改进
3.1 LwIP协议进程模式

    LwIP的设计与实现采用分层模式,每层协议都解决网络通信的一部分问题并作为独立的模块来实现,提供一些与其他协议的接口函数。各层之间通过共享内存的方式实现通信,从而减少了内存拷贝开销,提高其性能[5]。LwIP所支持的协议主要包括IP、ICMP、UDP和TCP等协议,这些模块能够完成网络通信的主要功能。除此之外,还设计了一些辅助模块,主要包括内存管理子系统、操作系统模拟层、网络API函数等[6]。
3.2 LwIP协议的移植
    (1)与CPU或编译器相关的文件移植
    修改/include/arch目录下cc.h文件中有关数据长度、字的高低位顺序等的宏定义。同时,使用_packed关键字声明结构体struct,以便LwIP读取pbuf结构体中不同长度的数据[2]。
    (2)与操作系统相关的部分
    LwIP中使用信号量通信,所以在 sys_arch.h、sys_arch.c中应实现信号量结构体sys_sem_t和相关的信号量处理函数,包括sys_sem_new()、sys_ sem _free()、sys_sem_signal()、sys_arch_sem_wait()等,完成信号量的建立、释放、发送和等待接收功能。同时,LwIP使用消息队列来缓冲、传递数据报文, 因此需要实现消息队列结构体sys_mbox_t以及相应的操作函数(包括sys_mbox_new()、sys_mbox_free()、sys_mbox_post()等),从而实现消息队列的创建、释放、发送和获取等功能。
    LwIP与外界网络连接的线程都有独立的等待超时时间,也就要求在移植过程中用户要实现sys_arch_
timeouts()函数, 返回当前该线程所对应的timeout队列指针。另外,LwIP 中网络数据的处理需要新建任务来完成操作, 有必要实现sys_thread_new()函数来保证数据处理任务在操作系统中能够被建立。
    (3)相关库函数的实现
    LwIP协议栈中用到了8个外部函数,主要完成16 bit数据的高低字节交换、32 bit数据的大小头对调、返回字符串长度、字符串比较、内存数据块拷贝、指定长度的数据块清零等功能,与系统或编译器有关,需要用户实现。
    (4)网络设备驱动程序
    在LwIP中可以有多个网络接口,每个网络接口都对应了一个struct netif结构,这个netif包含了相应网络接口的属性、收发函数。在网络设备驱动程序中主要是实现4个网络接口函数:网卡初始化、网卡接收数据、网卡发送数据以及网卡中断处理函数。
3.3 LwIP问题分析
    LwIP中对ICMP协议的数据处理比较简单,基本流程如图3所示。底层物理接口将接收ICMP包并向上传送至网络层,经由IP模块中的ip_input()函数移交到ICMP层处理,在ICMP协议中调用icmp_input()函数解析出IP包头、ICMP包头及数据内容。一些ICMP信息被传递到更高协议层并被传输层的一些特殊函数处理,其中函数icmp_dest_unreach()用来通过传输层的UDP协议发送目标无法到达消息[7]。通常情况下,使用ICMP ECHO信息来探测LwIP协议移植情况,主要在函数icmp_input()中完成对ICMP ECHO信息的响应,包括地址信息验证、目的与源地址进行交换、修改ICMP数据类型、求取校验和,然后通过IP层协议中的ip_output()将应答信息回传。

    但是在设备监控中,要求LwIP能够识别ICMP_ER类型的回送报文。因此,需要对LwIP中的ICMP模块进行补充,以满足嵌入式终端对局域网中设备网络状态的监控。另外,为了模拟类似Linux系统中ping功能系统调用,需要开发相应的功能接口函数来组成所需IP数据包,并通过IP层的报文发送函数ip_output()或者原始套接字将数据包发送到目的主机,以达到监控网络状态的目的。
3.4 LwIP改进方法
    根据以上所述问题,本文所采取的改进方法主要包括合成ICMP报文、建立套接字并发送报文到目的地址、添加ICMP协议支持这三个基本步骤。
    (1)ping指令简介
    因特网包探索器ping(packet internet groper),是用来检查网络是否通畅或者网络连接速度的命令。ping发送一个ICMP包,发送请求消息给目的主机并报告是否收到所希望的ICMP应答。ping本质上属于IP协议层,并且根据用户输入不同的指令参数返回网络状态信息。
    (2)合成ICMP_ER报文
    LwIP本身具有一套较为完善的内存管理机制,利用pbuf结构实现数据传递,这与BSD中的Mbuf 很相似。pbuf主要用于保存用户应用程序与LwIP之间互相传递的用户数据。利用LwIP提供的内存分配函数pbuf_alloc(),在RAM中分配一块空间存储IP数据包,数据大小为sizeof(struct icmp_echo_hdr),然后填充icmp_echo_hdr类型对象iecho。基本过程如下:
    q=pbuf_alloc(PBUF_IP,sizeof(struct IcmpHeader),
PBUF_RAM);
    iecho=q->payload;
    iecho->type=ICMP_ECHO;
    iecho->code=0;
    iecho->seqno=htons(1);
    iecho->id=htons(13);
    iecho->chksum=0;  //由硬件求取校验和
    (3)通过RAW套接字发送请求
    RAW SOCKET可以接收本机网卡上的所有数据帧或者数据包,这对于监听网络的流量和分析是很有作用的。所以选择利用LwIP提供的API套接字函数操作建立RAW SOCKET,并调用lwip_sendto()函数将数据通过RAW SOCKET发送到目的IP。基本过程如下:
    sockfd=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP);
    lwip_sendto(sockfd,q->payload, sizeof(q->payload), 0,
(struct sockaddr *) & dest_addr,sizeof(dest_addr));
    (4)修改ICMP协议文件
    为了实现对ICMP_ER消息的监听和处理,需要对/src/core/ipv4目录下的icmp.c文件做补充修改。在主要的报文处理函数icmp_input()中,添加ICMP_ER消息中断响应方法,由于IP包头已经被剥离,所以需要在switch(type){}框架中添加case ICMP_ER:单元,主要处理是计算响应时间和消息存活时间,并提取icmp_seq、对方IP地址等相关信息,主要实现方法如下:
    case ICMP_ER:
    timeofrecv = OSTimeGet();
    iechr = (struct IcmpHeader *)p->payload;
    timeofsend = iechr->timestamp;
    timeofrecv = (timeofrecv - timeofsend) * 1000 /
OS_TICKS_PER_SEC;
    printf("%d byte from %s: icmp_seq=%u ttl=%d rtt=
%u ms \n\r",ntohs(iphdr->_len),ip_ntoa(&(iphdr->src)),
ntohs(iecho->seqno),IPH_TTL(iphdr),timeofrecv);
4 实验分析
4.1 LwIP移植情况测试

    移植情况测试是通过设备监控终端与PC之间的网络ping指令实现的。监控终端IP地址为:172.20.36.93,主机IP地址为:172.20.36.72。从图4中可以看出,终端响应时间为1 ms,可以满足数据快速收发的要求,数据存活时间为ttl=255 ms,丢包率为0,说明LwIP协议已经移植成功。

4.2 改进后设备监控功能测试
    在地址为172.20.36.72的主机上使用IP Sinffer软件侦听网络中传递上来的ICMP报文,如图5所示。分析图5可知,主机接收到了多条由终端发送上来的ICMP报文,数据包具体内容显示在右侧边框中,IP数据包的内容是ICMP_ER类型的ICMP报文;ID号0x0D与终端中所设置的报文ID相等,即iecho->id=htons(13);序号为1与终端中所设置的报文序号相等,即iecho->seqno=htons(1)。由此说明终端中所合成的ICMP_ER类型的IP报文已经成功发送到了目的地址,并且目的主机立刻返回了ICMP请求。

 

 

    对实验环境的具体要求:通过监控终端监测IP尾数为204和128的设备网络状态,同时监测设备电源配电状况并回显配电状态参数。分析图6可知,局域网内被监控设备网络连接正常,能快速响应网络检测数据包,丢包率为0,说明对LwIP的协议栈优化后,能够发送网络状态检测数据,并获得对方主机响应。另外,监控终端与主机网络连接正常,可以将设备状态参数通过网络及时上传到控制中心。

    本文在分析设备远程监控实际需求的基础上,以32位微处理器STM32F207系列的处理器为核心,完成了LwIP嵌入式TCP/IP协议栈的移植与改进,设计并实现了一个基于改进LwIP的设备监控方案。该方案已经在实验室环境下完成了样机的研制并验证了其功能。实践表明,改进后的LwIP弥补了原有协议栈对ICMP协议功能支持上的不足,满足了用户需要,相信在未来的设备监控等领域必将有着广阔的应用前景。
参考文献
[1] 孙彩云,李世中,李丽丽,等.基于ZigBee技术的设备监控系统设计[J].水电能源科学,2010,11(28):125-127.
[2] 张亚魁.基于LwIP的嵌入式WEB服务器的研究与实现[D].合肥:合肥工业大学,2009:14-19.
[3] 杨晔.实时操作系统的μC/OS-Ⅱ下TCP/IP协议栈的实现[J].单片机与嵌入式系统应用,2003(7):80-83.
[4] 王晖,周巧娣,章雪挺,等.基于LwIP的海洋数据采集与传输系统[J].电子技术应用,2012,38(8):26-29.
[5] Duan Zhiyu,Zhao Zhaowang.A study of the Ethernet  throughput performance of the embedded system[J].Astronomical Research and Technology,2007,4(3):266-275.
[6] DUNKELS A.Design and implementation of the LwIP TCP/IP stack[EB/OL].(2001-2-1)[2004-2-1].http://www.ece.ualberta.ca/~cmpe401/fall2004/labs/docs/lwip.pdf.
[7] 徐鑫,曹奇英.基于LwIP协议栈的UDP协议分析与优化[J].计算机应用与软件,2011,28(3):246-249.

此内容为AET网站原创,未经授权禁止转载。