以太网中进行数据处理的方法

文档序号:7688109阅读:274来源:国知局

专利名称::以太网中进行数据处理的方法以太网中进行数据处理的方法
技术领域
:本发明涉及通信
技术领域
,尤其涉及一种以太网中进行数据处理的方法。
背景技术
:在通信领域,通信设备的监控单元用来对网络设备进行初始化设置,监控网络设备的运行状态。监控单元在工作过程中所处理的数据往往不是来自网口,而是通过光纤或其它电缆传输过来的具有特殊协议格式的数据,这样就要求使用一种方法来将从光纤传输过来的数据取出并发送给应用程序。传统的采用物理网口和专用网口芯片来实现的方案由于对传输介质、传输协议和所传输的数据格式有特殊要求,显然己满足不了这种需求。
发明内容本发明的发明目的是提供一种以太网中进行数据处理的方法,可以从传输介质取出数据进行处理,并提高网络处理的灵活性和兼容性。为达到上述发明目的,本发明提出以下的技术方案一种以太网中进行数据处理的方法,包括以下步骤A、CPU加载虚拟网络设备驱动程序并进行初始化;B、CPU从底层物理设备读取数据并缓存到缓冲区中;将所述数据和虚拟网络设备驱动接收函数一起发送到网络任务队列,所述网络任务队列调用驱动接收函数对数据进行处理并提交到协议栈;所述协议栈将数据发送到上层应用程序;C、所述上层应用程序将数据发送到协议栈,将所述数据从协议栈取出存入虚拟网络设备;所述虚拟网络设备将数据打包并发往底层物理设备;所述底层物理设备将数据进行发送。其中,所述步骤A包括以下步骤A1、CPU创建虚拟网络设备描述符,调用字符串解析函数和网络内存申请函数,注册设备驱动函数,对虚拟网络设备进行操作配置;其中,所述字符串解析函数用于对传入的字符串进行解析,所述网络内存池申请函数用于向物理内存申请内存,并设定最大传输单元的大小;A2、对变量、中断和回调函数进行初始化;A3、将所述虚拟网络设备驱动与IP协议栈进行挂接;A4、设置虚拟网络设备的初始化参数;其中,所述初始化参数包括IP地址、子网掩码、路由设置参数。其中,所述步骤B具体包括以下步骤B1、当检测到底层物理设备有数据到达时,触发CPU中断,将所述数据读出存入缓冲区;B2、向网络任务队列发送所述数据在缓冲区的首尾指针和虛拟网络设备驱动接收函数;B3、网络任务队列依次从队列中取出接收到的数据并调用虚拟网络设备驱动接收函数对数据进行处理并提交到协议桟;B4、所述协议栈将数据发送到上层应用程序。其中,所述步骤B3具体包括以下步骤B311、从网络内存池中申请一块空间,将所述首尾指针之间的MAC数据帧复制到申请到的所述空间;B312、对MAC数据帧的MAC地址进行判断,如果所述MAC数据帧是组播包,则将组播包内容保存到本地存储系统,将组播包计数器变量加一,并退出回调函数和驱动接收函数;B313、如果所述MAC数据帧是单播包或广播包,则退出回调函数,由驱动接收函数将所述MAC数据帧提交到协议栈,并将单播包或广播包计数器加一。其中,所述步骤B3具体包括以下步骤B321、从网络内存池中申请一块空间,并将头尾指针之间的HDLC数据帧复制到申请到的所述空间;B322、对HDLC数据帧类型进行判断,如果所述HDLC数据帧为请求测试包,则CPU将打包一个类型为请求回复包的HDLC数据帧,由FPGA发送到设备一并退出回调函数和驱动接收函数;如果所述HDLC数据帧为请求回复包,则将该HDLC数据帧丢弃并退出回调函数和驱动接收函数;如果所述HDLC数据帧为IP数据包,则回调函数退出;B323、对HDLC数据帧承载的IP数据包加上一个MAC帧头,将其提交到协议栈,同时将数据包接收计数变量加一。其中,所述步骤C具体包括以下步骤-C1、应用程序通过协议栈发送数据;C2、协议栈通过虚拟网络驱动发送函数将所述数据发送到虚拟网络设备;C3、虚拟网络设备驱动发送函数从协议栈取得获取数据并进行处理,打包成所需要的数据格式并发送到底层物理设备。其中,所述步骤C3具体包括以下步骤C31、将所述数据从协议栈取出放到缓冲区;C32、将取出的数据包偏移MAC帧头个长度,给IP数据包加上HDLC帧头,将源地址设置为源设备地址,目的地址设置为目的设备地址,将包类型设置为IP数据包类型;C33、将设置好的HDLC帧写到所述底层物理设备FPGA的FIFO中,由FPGA通过光口将数据进行发送。其中,所述步骤C3之后还包括步骤C4、所述虚拟网络设备判断数据包是否发送成功,如果是则接收成功计数器加一;否则接收失败计数器加一。优选地,所述步骤C之后还包括步骤-D、对虚拟网络设备的IP地址、子网掩码进行动态修改;对虚拟网络设备进行路由的添加和删除;卸载虚拟网络设备。其中,所述协议栈均采用VxWorks或Linux操作系统中的组件,所述协议栈为TCP/IP协议栈和IPX/SPX/NetBIOS协议栈。。从以上技术方案可以看出,本发明的技术方案采用计算机程序对以太网中的传输数据进行处理,可以在不使用网口芯片的情况下实现类似网卡的功能,很好的解决了底层物理设备同上层应用程序的网络通信问题,还可直接和底层物理设备相交互,接口易扩展,大大提高了网络处理的灵活性和兼容性。另外,本发明可和CPU共用物理内存,成本低,操作简单。图1是本发明中数据传输的基本流程图;图2是本发明方法初始化过程的流程图;图3是本发明方法接收数据过程的流程图;图4是本发明方法发送数据过程的流程图。具体实施方式下面结合具体实施例对本发明的技术方案进行详细描述。本发明提供一种通过虚拟以太网网络设备进行数据处理的方法,如图1所示,可通过虚拟网络设备将数据在设备间进行传输,主要包括加载虚拟网络设备驱动并进行初始化、通过虚拟网络设备接收数据、通过虚拟网络设备发送数据三个步骤(一)初始化过程、CPU加载虚拟网络设备驱动程序并进行初始化;(二)数据接收过程、CPU从底层物理设备读取数据并缓存到缓冲区中;将所述数据和虚拟网络设备驱动接收函数一起发送到网络任务队列,所述网络任务队列调用驱动接收函数对数据进行处理并提交到协议栈;所述协议栈将数据发送到上层应用程序;(三)数据发送过程、所述上层应用程序将数据发送到协议栈,将所述数据从协议栈取出存入虚拟网络设备;所述虚拟网络设备将数据打包并发往底层物理设备;所述底层物理设备将数据进行发送。在本发明较优的实施例中,本发明方法还包括对虚拟网络设备进行设置的过程对虚拟网络设备的IP地址、子网掩码进行动态修改;对虚拟网络设备进行路由的添加和删除;卸载虚拟网络设备。本发明通过基于VxWorks或Linux的虚拟网络设备,很好的解决了底层物理设备同上层应用程序的网络通信问题,且本发明的虚拟网络设备与底层物理设备之间的数据交互接口灵活,具有很好的扩展性和兼容性。(一)、如图2所示,CPU加载虚拟网络设备驱动并进行初始化的过程,包括以下步骤5101、CPU创建虚拟网络设备描述符,调用字符串解析函数和网络内存申请函数,注册设备驱动函数,对虚拟网络设备进行操作配置通过调用vxworks操作系统函数,来调用虚拟网络设备驱动的加载程序;加载程序创建一虛拟网络设备描述符,依次调用字符串解析函数和网络内存申请函数,将虚拟设备驱动函数注册到操作系统。其中,字符串解析函数用来解析传入的字符串,如网络设备在系统中的编号等;网络内存池申请函数用来以VxWorks特定的格式向CPU申请网络内存池、设定MTU等参数,具体申请内存的大小和MTU(最大传输单元)的大小根据具体需要来确定;注册设备驱动函数用来将虚拟网络设备的各驱动函数向操作系统注册;最后对虚拟网络设备驱动进行操作配置,如是否对广播或组播地址进行过滤等,驱动加载完成后返回这个网络设备的描述符。5102、对变量、中断和回调函数进行初始化所述初始化操作主要包括初始化全局变量,如数据包的统计变量等;中断初始化操作向系统注册中断并使能中断;回调函数注册主要完成对函数指针的赋值操作,这些函数指针用来对接收到的数据进行处理。5103、将所述虚拟网络设备驱动与IP协议栈进行挂接CPU通过操作系统函数将虚拟网络设备驱动同系统IP协议栈进行挂接。在进行所述挂接操作时,可以通过将虚拟网络设备驱动描述符的接口类型参数值设置为0或保留默认值来决定IP协议栈对所提交的数据是否进行MAC帧帧头的检验,若值为0则协议栈不会对驱动所提交的MAC帧进行MAC帧帧头检测,MAC地址可以为任意值;若使用默认值则会进行检测,MAC地址需根据需求进行设置。S104、设置虚拟网络设备的初始化参数;其中,所述初始化参数包括IP地址、子网掩码、路由设置等参数CPU通过操作系统函数来完成所述参数的设置。(二)、如图3所示,通过虚拟网络设备接收数据的过程包括如下步骤5201、当检测到底层物理设备有数据到达时,触发CPU中断,将所述数据读出存入缓冲区当物理设备有数据到来时触发CPU产生中断,中断处理函数从物理设备取出数据,这些数据中承载着网络数据包。5202、将所述数据在缓冲区的首尾指针和虚拟网络设备驱动接收函数一起发送到网络任务队列CPU将取出的数据连同虚拟网络设备接收函数一同发送到网络任务处理队列,由网络任务处理队列调用虚拟网络设备接收函数来对接收到的数据进行处理。使用网络任务处理队列可以对收到的数据进行缓冲,防止由于底层接收数据过快而网络驱动来不及处理的现象出现,同时也降低了底层物理设备和虚拟网络设备之间耦合性。5203、网络任务队列依次从队列中取出接收到的数据并调用虚拟网络设备驱动接收函数对数据进行处理并提交到协议栈:从已分配的网络内存池获取空间用来存放处理后的网络数据包;在虚拟网络设备接收函数中通过回调函数对接收到的数据进行处理,得到符合协议栈数据格式要求的数据包;将数据复制到上述申请的空间并提交到协议栈。在虚拟网络驱动的接收函数中,对接收数据的处理可以根据需要进行扩展。如果接收到的数据包格式已经是标准的网络数据包格式,则可以不进行处理,直接提交协议栈。5204、所述协议栈将数据发送到上层应用程序:操作完成后不需要对所申的内存空间进行释放,协议栈对该块内存的数据处理完后会进行内存释放操作。在对接收到的数据包进行处理时,可以使用全局的计数变量对接收到的数据包进行计数,计数策略可自行制定,一般可以根据处理结果来对接收到的数据包进行计数如果数据包处理成功则接收成功计数器加一;否则接收失败计数器加一。(三)、如图4所示,通过虚拟网络设备发送数据,包括如下步骤5301、应用程序通过协议栈发送数据应用层通过协议栈发送数据,当协议栈有数据需要发送时会自动调用注册到操作系统的虚拟网络设备驱动发送函数。5302、协议栈通过虚拟网络驱动发送函数将所述数据发送到虚拟网络设备。5303、虚拟网络设备驱动发送函数从协议栈获取数据并进行处理,打包成所需要的数据格式并发送到底层物理设备。如果底层物理设备所传输的数据格式为标准的网络协数据包格式,在驱动发送函数中可以不对从网络协议栈接收到的数据进行处理,直接发送到底层物理设备。根据发送结果,利用全局计数变量对所发送的数据包进行计数,计数策略可自行制定,一般可以根据发送结果来判断数据包是否发送成功,如果是则接收成功计数器加一;否则接收失败计数器加一。需要说明的是,在同一个嵌入式系统中可以同时存在两个或两个以上这种虚拟网络设备,当系统与多个底层物理设备相连时,可以加载多个虚拟网络设备。根据传输的数据包类型的不同,下面提供两种基于VxWorks操作系统的实施例对两台通信设备进行数据传输的具体过程进行详细描述。其中基于Linux操作系统的工作原理同样适用于本方案,只是实现的方法和操作的步骤略有不同,在此不再赘述。实施例一设备一与设备二之间传输的是MAC数据包,其中设备二使用虚拟网络设备驱动来完成数据的收发,其接收数据的详细流程可以是首先设备一向设备二通过光纤发送MAC数据包,MAC数据包格式为标准以太网MAC数据帧格式,MAC数据包类型包括单播包、广播包和组播包,由不同的MAC地址进行区分。设备二的底层物理设备FPGA从光口接收到MAC数据帧后触发中断,由中断服务程序从FPGA的FIFO中将MAC数据帧读出放入缓冲区,并记录MAC数据帧在缓冲区中的头尾指针。将虚拟网络设备驱动接收函数和上述头尾指针一起发到网络任务消息队列,由网络任务消息队列来调用驱动接收函数对存放在头尾指针之间的数据进行处理。在驱动接收函数中,首先从网络内存池中申请一块空间,并将头尾指针之间的MAC数据帧复制到申请到的空间中。然后通过回调函数对接收到的MAC数据进帧行处理。在回调函数中,首先对MAC数据帧的MAC地址进行判断,如果是组播包,则将组播包内容保存到本地存储系统,将组播包计数器变量加一并退出回调函数和驱动接收函数;如果是单播包或广播包则退出回调函数,由驱动接收函数提交到协议栈并将单播包或广播包计数器加一。上层应用程序通过socket程序从协议栈接收MAC帧所承载的数据。上层应用程序在对接收到的数据进行处理后通过socket向设备一发送回复数据。回复数据经协议栈调用已经注册到操作系统的虚拟网络设备驱动发送函数将数据发出。在发送数据的过程中首先将数据从协议栈取出放到缓冲区,所取出的数据格式已经由协议栈包装成标准MAC帧格式,所以这里直接将这些数据写到FPGA的FIFO中即可,由FPGA通过光口将数据发送到设备一。页实施例二设备一与设备二传输的是HDLC数据包,HDLC数据包的帧格式如表1所示<table>tableseeoriginaldocumentpage13</column></row><table>表1其中包类型包括0x00—数据帧,此类型的HDLC帧的包内容为IP数据包;0x01—请求测试帧,此类型的HDLC帧的包内容为0,长度为1个字节;0x02-请求回复测试帧,此类型的HDLC帧的包内容为0,长度为1个字节,用来作为0x01类型的数据帧的回复。本实施例中设备二使用虚拟网络设备驱动来完成数据的收发,其接收数据的详细流程如下首先设备一向设备二通过光纤发送HDLC数据包。设备二的底层物理设备FPGA从光口接收到HDLC数据帧后触发中断,由中断服务程序从FPGA的FIFO中将HDLC数据帧读出放入缓冲区,并记录HDLC数据帧在缓冲区中的头尾指针。将虚拟网络设备驱动接收函数和上述头尾指针一起发到网络任务消息队列,由网络任务消息队列来调用驱动接收函数对存放在头尾指针之间的数据进行处理。在驱动接收函数中,首先从网络内存池中申请一块空间,并将头尾指针之间的HDLC数据帧复制到申请到的空间中。然后通过回调函数对接收到的HDLC数据进帧行处理。在回调函数中,首先将HDLC数据帧中的源地址保存到addr,进而对HDLC数据帧类型进行判断如果包类型为0x01,则为请求测试包,CPU将打包一个类型为0x02的HDLC数据帧由FPGA发送到设备一并退出回调函数和驱动接收函数;如果包类型为0x02,则为请求回复包,说明CPU发送的包类型为0x01的请求包得到了回复,HDLC链路状况良好,直接将该HDLC数据帧丢弃并退出回调函数和驱动接收函数;如果包类型为OxOO,则HDLC帧承载的是IP数据包,回调函数退出,不做处理。由于提交协议栈的数据包格式必须为标准的MAC数据帧格式,所以在虚拟网络设备挂接到操作系统时,需要设置虚拟网络设备描述符的接口类型参数,使其值为0,这样协议栈就不会对提交的MAC数据帧进行MAC帧头的检测。所以我们对HDLC所承载的IP数据包随便加上一个MAC帧头即可将其提交到协议栈,由协议栈将数据发送到应用层。同时将数据包接收计数变量加一。上层应用程序通过socket程序从协议栈接收IP帧所承载的数据,并发送回复给设备一。回复数据经协议栈调用已经注册到操作系统的虚拟网络设备驱动发送函数将数据发出。在发送数据的过程中首先将数据从协议栈取出放到缓冲区,所取出的数据格式为标准MAC帧格式。将取出的数据包偏移MAC帧头个长度,给IP数据包加上HDLC帧头,源地址为设备二地址,目的地址为设备一地址,包类型为0x00。将打包好的HDLC帧写到FPGA的FIFO中,由FPGA通过光口将数据发送到设备一。由实例一和实例二可以看出,本发明所提及的虚拟网络设备和底层物理设备的接口灵活,易扩展,可以处理多种格式的数据,适合于光纤、E1等有线网络通讯的场合。同时不需要专门的网口芯片,节省了费用。以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。权利要求1.一种以太网中进行数据处理的方法,其特征在于,包括以下步骤A、CPU加载虚拟网络设备驱动程序并进行初始化;B、CPU从底层物理设备读取数据并缓存到缓冲区中;将所述数据和虚拟网络设备驱动接收函数一起发送到网络任务队列,所述网络任务队列调用驱动接收函数对数据进行处理并提交到协议栈;所述协议栈将数据发送到上层应用程序;C、所述上层应用程序将数据发送到协议栈,将所述数据从协议栈取出存入虚拟网络设备;所述虚拟网络设备将数据打包并发往底层物理设备;所述底层物理设备将数据进行发送。2、根据权利要求1所述的以太网中进行数据处理的方法,其特征在于,所述步骤A包括以下步骤A1、CPU创建虚拟网络设备描述符,调用字符串解析函数和网络内存申请函数,注册设备驱动函数,对虚拟网络设备进行操作配置;其中,所述字符串解析函数用于对传入的字符串进行解析,所述网络内存池申请函数用于向物理内存申请内存,并设定最大传输单元的大小;A2、对变量、中断和回调函数进行初始化;A3、将所述虚拟网络设备驱动与IP协议栈进行挂接;A4、设置虚拟网络设备的初始化参数;其中,所述初始化参数包括IP地址、子网掩码、路由设置参数。3、根据权利要求1所述的以太网中进行数据处理的方法,其特征在于,所述步骤B具体包括以下步骤B1、当检测到底层物理设备有数据到达时,触发CPU中断,将所述数据读出存入缓冲区;B2、向网络任务队列发送所述数据在缓冲区的首尾指针和虚拟网络设备驱动接收函数;B3、网络任务队列依次从队列中取出接收到的数据并调用虚拟网络设备驱动接收函数对数据进行处理并提交到协议栈;B4、所述协议栈将数据发送到上层应用程序。4、根据权利要求3所述的以太网中进行数据处理的方法,其特征在于,所述步骤B3具体包括以下步骤已311、从网络内存池中申请一块空间,将所述首尾指针之间的MAC数据帧复制到申请到的所述空间;B312、对MAC数据帧的MAC地址进行判断,如果所述MAC数据帧是组播包,则将组播包内容保存到本地存储系统,将组播包计数器变量加一,并退出回调函数和驱动接收函数;B313、如果所述MAC数据帧是单播包或广播包,则退出回调函数,由驱动接收函数将所述MAC数据帧提交到协议栈,并将单播包或广播包计数器加一。5、根据权利要求3所述的以太网中进行数据处理的方法,其特征在于,所述步骤B3具体包括以下步骤B321、从网络内存池中申请一块空间,并将头尾指针之间的HDLC数据帧复制到申请到的所述空间;B322、对HDLC数据帧类型进行判断,如果所述HDLC数据帧为请求测试包,则CPU将打包一个类型为请求回复包的HDLC数据帧,由FPGA发送到设备一并退出回调函数和驱动接收函数;如果所述HDLC数据帧为请求回复包,则将该HDLC数据帧丢弃并退出回调函数和驱动接收函数;如果所述HDLC数据帧为IP数据包,则回调函数退出;B323、对HDLC数据帧承载的IP数据包加上一个MAC帧头,将其提交到协议栈,同时将数据包接收计数变量加一。6、根据权利要求1所述的以太网中进行数据处理的方法,其特征在于,所述步骤C具体包括以下步骤C1、应用程序通过协议栈发送数据;C2、协议栈通过虚拟网络驱动发送函数将所述数据发送到虚拟网络设备;C3、虚拟网络设备驱动发送函数从协议栈取得获取数据并进行处理,打包成所需要的数据格式并发送到底层物理设备。7、根据权利要求6所述的以太网中进行数据处理的方法,其特征在于,所述步骤C3具体包括以下步骤C31、将所述数据从协议栈取出放到缓冲区;C32、将取出的数据包偏移MAC帧头个长度,给IP数据包加上HDLC帧头,将源地址设置为源设备地址,目的地址设置为目的设备地址,将包类型设置为IP数据包类型;C33、将设置好的HDLC帧写到所述底层物理设备FPGA的FIFO中,由FPGA通过光口将数据进行发送。8、根据权利要求7所述的以太网中进行数据处理的方法,其特征在于,所述步骤C3之后还包括步骤C4、所述虚拟网络设备判断数据包是否发送成功,如果是则接收成功计数器加一;否则接收失败计数器加一。9、根据权利要求18中任一项所述的以太网中进行数据处理的方法,其特征在于,所述步骤C之后还包括步骤D、对虚拟网络设备的IP地址、子网掩码进行动态修改;对虚拟网络设备进行路由的添加和删除;卸载虚拟网络设备。10、根据权利要求9所述的以太网中进行数据处理的方法,其特征在于所述协议栈均采用VxWorks或Linux操作系统中的组件,所述协议栈为TCP/IP协议栈和IPX/SPX/NetBIOS协议栈。全文摘要一种以太网中进行数据处理的方法,包括步骤A、CPU加载虚拟网络设备驱动程序并进行初始化;B、CPU从底层物理设备读取数据并缓存到缓冲区中;将该数据和虚拟网络设备驱动接收函数一起发送到网络任务队列,所述网络任务队列调用驱动接收函数对数据进行处理并提交到协议栈;该协议栈将数据发送到上层应用程序;C、所述上层应用程序将数据发送到协议栈,将所述数据从协议栈取出存入虚拟网络设备;所述虚拟网络设备将数据打包并发往底层物理设备;所述底层物理设备将数据进行发送。本发明在不使用网口芯片的情况下实现类似网卡的功能,解决了底层物理设备同上层应用程序的网络通信问题,提高了网络处理的灵活性和兼容性以及数据传输的效率。文档编号H04L12/26GK101247266SQ20081006613公开日2008年8月20日申请日期2008年3月21日优先权日2008年3月21日发明者鹿丙杰申请人:深圳国人通信有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1