以太报文接收方法及数据通信设备与流程

文档序号:12949132阅读:390来源:国知局
以太报文接收方法及数据通信设备与流程

本发明数据通信领域,具体而言,涉及一种以太报文接收方法及数据通信设备。



背景技术:

随着嵌入式linux在数据通信领域的广泛应用,linux网络的数据处理性能及稳定性也越来越受到关注。linux网络设备层和以太口驱动层是网络数据处理的必要环节,这部分处理流程的优劣会对整个系统性能及稳定性产生巨大影响,对网络设备层和以太口驱动层进行优化是非常重要的。现在的网络环境比较复杂,各种各样的报文非常多,网络设备层和以太口驱动如果不对进入设备的报文加以限制,会消耗大量的cpu资源,导致设备的运行受到影响。这样的情况在网络设备中是非常常见的。



技术实现要素:

为了克服现有技术中的上述不足,本发明所要解决的技术问题是提供一种以太报文接收方法及数据通信设备,其能够对网络设备层和以太口驱动层的报文处理流程进行优化,提升linux网络的数据处理性能及稳定性。

本发明提供一种以太报文接收方法,应用于数据通信设备,所述方法包括:

控制所述以太口驱动层将以太报文交由网络设备层处理;

通过所述网络设备层对接收的所述以太报文的协议字段进行检查,并将所述以太报文交给网络协议层中所述协议字段对应的协议进行处理;

当所述网络协议层无法处理所述以太网报文时,则则通过所述网络设备层向所述以太口驱动层返回阻塞状态信息;

在所述以太口驱动层接收到所述阻塞状态信息后,暂停内存中以太报文的接收,在预先配置的内核延迟工作队列中添加一延时任务;

通过所述以太口驱动层在所述延时任务中再次启动以太报文的接收。

可选地,在所述控制以太口驱动层将以太报文交由网络设备层处理的步骤之前,上述方法还可以包括:

控制以太网控制器将接收的以太报文存储到预先设定的内存中;

控制所述以太网控制器产生中断并通知处理器接收所述以太报文;

控制所述处理器在接收的中断为报文接收中断时,通知以太口驱动层进行报文接收。

可选地,上述控制以太口驱动层将以太报文交由网络设备层处理的步骤可以包括:

控制所述以太口驱动层对所述内存中的以太报文进行正确性检查;

在所述以太报文通过正确性检查后,将内存中的以太报文交由网络设备层进行处理。

可选地,上述控制以太网控制器将接收的以太报文存储到预先设定的内存中的步骤可以包括:

控制所述以太控制器接收以太报文;

通过直接内存方式将接收的以太报文存储到预先设定的内存中。

可选地,上述通过以太口驱动层在所述延时任务中再次启动以太报文的接收步骤可以包括:

在所述延时任务中设定的预设时间超时后再次启动以太报文的接收。

可选地,上述方法还可以包括:

对所述以太口驱动层进行初始化,在所述以太口驱动层中配置一用于处理阻塞状态信息的内核延迟工作队列。

本发明还提供一种数据通信设备,所述数据通信设备包括:

控制模块,用于控制所述以太口驱动层将以太报文交由网络设备层处理;

协议字段检查模块,用于通过所述网络设备层对接收的所述以太报文的协议字段进行检查,并将所述以太报文交给网络协议层中所述协议字段对应的协议进行处理;

返回模块,用于当所述网络协议层无法处理所述以太网报文时,则通过所述网络设备层向所述以太口驱动层返回阻塞状态信息;

延时任务添加模块,用于在所述以太口驱动层接收到所述阻塞状态信息后,暂停内存中以太报文的接收,在预先配置的内核延迟工作队列中添加一延时任务;

启动模块,用于通过所述以太口驱动层在所述延时任务中再次启动以太报文的接收。

可选地,在上述数据通信设备中:

上述控制模块,还用于控制以太网控制器将接收的以太报文存储到预先设定的内存中;

上述控制模块,还用于控制所述以太网控制器产生中断并通知处理器接收所述以太报文;及

上述控制模块,还用于控制所述处理器在接收的中断为报文接收中断时,通知以太口驱动层进行报文接收。

可选地,上述控制模块控制所述以太口驱动层将以太报文交由网络设备层处理的方式包括:

控制所述以太口驱动层对所述内存中的以太报文进行正确性检查;

在所述以太报文通过正确性检查后,将内存中的以太报文交由网络设备层进行处理。

可选地,上述控制模块控制以太网控制器将接收的以太报文存储到预先设定的内存中的方式包括:

控制所述以太控制器接收以太报文;

通过直接内存方式将接收的以太报文存储到预先设定的内存中。

可选地,启动模块通过所述以太口驱动层在所述延时任务中再次启动以太报文的接收的方式包括:

在所述延时任务中设定的预设时间超时后再次启动以太报文的接收。

可选地,所述数据通信设备还包括:初始化模块;

所述初始化模块,用于对所述以太口驱动层进行初始化,在所述以太口驱动层中配置一用于处理阻塞状态信息的内核延迟工作队列。

相对于现有技术而言,本发明具有以下有益效果:

本发明提供一种以太报文接收方法及数据通信设备。通过在网络协议层无法处理报文时向以太口驱动层返回阻塞状态信息,并在所述以太口驱动层接收到所述阻塞状态信息后暂停以太报文的接收,在添加的一延时任务中再次启动以太报文的接收。通过上述以太报文接收流程的处理,可以在网络设备层由于各种原因无法继续报文时,暂停以太口驱动层接收报文,减小不必要的cpu开销,提升系统的数据处理性能及稳定性。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1是本发明第一实施例提供的以太报文接收方法的一种步骤流程图。

图2是图1中步骤s140的子步骤流程图。

图3是本发明第一实施例提供的以太报文接收方法的另一种步骤流程图。

图4是本发明第二实施例提供的数据通信设备的一种功能模块图。

图5是本发明第二实施例提供的数据通信设备的另一种功能模块图。

图标:240-控制模块;250-协议字段检查模块;260-返回模块;270-延时任务添加模块;280-启动模块;290-初始化模块。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。

因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

第一实施例

请参照图1,图1是本发明较佳实施例提供的以太报文接收方法的一种步骤流程图。所述方法应用于数据通信设备,其中,所述数据通信设备包括,但不限于交换机、路由器等通信设备。所述数据通信设备包括以太网控制器及处理器,下面对以太报文接收方法的步骤做具体的描述。

步骤s140,控制以太口驱动层将以太报文交由网络设备层处理。

以太口驱动层和网络设备层是linux网络协议栈中的两层,其中还,所述以太口驱动层包括设备打开、停止、传输等操作。由于数据包的接收可以由中断产生,所述以太口驱动层中另一个主题内容就是中断处理函数,所述以太口驱动层负责读取硬件上接收的数据包并传送给上层协议。

所述网络设备层为千变万化的网络设备定义统一、抽象的数据结构net_device结构体,实现多种硬件在软件层次上的统一。net_device结构体在内核中指代一个网络设备,网络设备驱动程序只需通过填充net_device中的具体成员并注册net_device即可实现硬件操作函数与内核的挂接。使用统一的注册、注销及初始化等一系列函数。

在本实施例中,所述数据通信设备控制以太口驱动层将以太报文上交给网络设备层进行处理。

请参照图2,可选地,步骤s140包括子步骤s141及子步骤s142。

子步骤s141,控制所述以太口驱动层对内存中的以太报文进行正确性检查。

子步骤s142,在所述以太报文通过正确性检查后,将内存中的以太报文交由网络设备层进行处理。

所述以太口驱动层在完成以太报文的正确性检查后,将内存中的报文上交给网络设备进行处理,并将空闲的内存交给以太网控制器,以便于存储以太网控制器后续接收的以太报文。

步骤s150,通过所述网络设备层对接收的所述以太报文的协议字段进行检查,并将所述以太报文交给网络协议层中所述协议字段对应的协议进行处理。

在本实施例中,网络设备层对接收的所述以太报文进行解析,获得以太报文中协议字段对应的协议信息。网络设备层将以太报文交给网络协议层,网络协议层会根据协议信息获取对应的协议,并采用对应的协议对以太报文进行处理。网络协议层会将对以太报文的处理结果反馈给所述网络设备层。

其中,所述网络协议层也是linux网络协议栈中的一层,所述网络协议层给上层协议提供透明的数据包发送和接收接口。当要发送数据包时,arp协议或者ip协议,都将调用这一层中的dev_queue_xmit()函数发送该数据包。上层对数据包的接收时,通过netif_rx()接收。具体协议处理在上级网络协议处理。这其中需要一个很重要的结构体structsk_buff.

步骤s160,当所述网络协议层无法处理所述以太网报文时,则通过所述网络设备层向所述以太口驱动层返回阻塞状态信息。

在本实施例中,当网络协议层无法处理所述以太网报文时,所述网络协议层会反馈处理失败的结果给网络设备层,所述网络设备层会向所述以太口驱动层返回一个用于表征网络协议层无法处理所述以太网报文的阻塞状态信息。其中,所述阻塞状态信息用于表示报文处理进入阻塞状态。

步骤s170,在所述以太口驱动层接收到所述阻塞状态信息后,暂停内存中以太报文的接收,在预先配置的内核延迟工作队列中添加一延时任务。

在本实施例中,所述数据通信设备在所述以太口驱动层接收到所述阻塞状态信息后,会控制所述以太口驱动层暂停内存中以太报文的接收,并在预先配置的内核延迟工作队列中添加一延时任务。在这种情况下,以太口驱动层不会再向网络设备层上交待处理的以太报文,防止上交到网络设备层的报文无法得到处理而被直接丢弃,但以太口驱动层还在持续处理报文,造成浪费大量的cpu资源的情况发生。

步骤s180,通过所述以太口驱动层在所述延时任务中再次启动以太报文的接收。

在本实施例中,所述数据通信设备在所述延时任务中设定的预设时间超时后再次启动以太报文的接收。在预设时间超时后再次启动以太报文的接收可以减少上交到网络设备层的报文无法得到处理时,以太口驱动层还持续处理报文对cpu造成的无谓消耗,能够提升系统的数据处理性能及稳定性。

请参照图3,图3是本发明较佳实施例提供的以太报文接收方法的另一种步骤流程图。在本实施例中,在步骤s140之前,所述方法还可以包括步骤s110,步骤s120及步骤s130;

步骤s110,控制以太网控制器将接收的以太报文存储到预先设定的内存中。

所述数据通信设备控制以太网控制器接收以太报文;

以太网控制器将接收的以太报文存储到预先设定的内存(缓冲区)中,可选地,以太网控制器通过dma(directmemoryaccess,直接内存存取)将以太报文进行存储,其中,直接内存存取是外部设备不通过cpu而直接与系统内存交换数据的接口技术。

步骤s120,控制所述以太网控制器产生中断并通知处理器接收所述以太报文。

在本实施例中,在以太网控制器完成一以太报文的接收后,所述数据通信设备控制所述以太网控制器产生中断,并通知处理器对所述以太报文进行接收。

步骤s130,控制所述处理器在接收的中断为报文接收中断时,通知以太口驱动层进行报文接收。

在本实施例中,所述数据通信设备控制所述处理器在接收的中断为报文接收中断时,通知以太口驱动层进行报文的接收。

在本实施例中,所述方法还包括对所述以太口驱动层进行初始化的步骤。

所述初始化的步骤包括,在所述以太口驱动层中配置一用于处理阻塞状态信息的内核延迟工作队列(delayedwork)。

预先在所述以太口驱动层中设置用于处理阻塞状态信息的内核延迟工作队列,可以在网络设备层无法继续处理以太报文时,通过在内核延迟工作队列中添加一延时任务的方式,阻止以太口驱动层继续进行以太报文的接收。

第二实施例

请参照图4,图4为本发明较佳实施例提供的数据通信设备的功能模块框图,所述数据通信设备包括:控制模块240、协议字段检查模块250、返回模块260、延时任务添加模块270及启动模块280。

所述控制模块240,用于控制以太口驱动层将以太报文交由网络设备层处理。

在本实施例中,所述控制模块240控制以太口驱动层将以太报文上交给网络设备层进行处理。

可选地,所述控制模块240控制以太口驱动层将以太报文上交给网络设备层进行处理的方式包括:

控制所述以太口驱动层对所述内存中的以太报文进行正确性检查;

在所述以太报文通过正确性检查后,将内存中的以太报文交由网络设备层进行处理。

所述协议字段检查模块250,用于通过所述网络设备层对接收的所述以太报文的协议字段进行检查,并将所述以太报文交给网络协议层中所述协议字段对应的协议进行处理。

在本实施例中,所述协议字段检查模块250控制所述网络设备层对接收的所述以太报文进行解析,获得以太报文中协议字段对应的协议信息。所述协议字段检查模块250控制所述网络设备层将以太报文交给网络协议层,网络协议层会根据协议信息获取对应的协议,并采用对应的协议对以太报文进行处理。网络协议层会将对以太报文的处理结果反馈给所述网络设备层。

所述返回模块260,用于当所述网络协议层无法处理所述以太网报文时,则通过所述网络设备层向所述以太口驱动层返回阻塞状态信息。

在本实施例中,当网络协议层无法处理所述以太网报文时,所述网络协议层会反馈处理失败的结果给网络设备层,所述返回模块260控制所述网络设备层向所述以太口驱动层返回一个用于表征网络协议层无法处理所述以太网报文的阻塞状态信息。

所述延时任务添加模块270,用于在所述以太口驱动层接收到所述阻塞状态信息后,暂停内存中以太报文的接收,在预先配置的内核延迟工作队列中添加一延时任务。

在本实施例中,所述延时任务添加模块270在所述以太口驱动层接收到所述阻塞状态信息后,会先暂停内存中以太报文的接收,并在预先配置的内核延迟工作队列中添加一延时任务。在这种情况下,以太口驱动层不会再向网络设备层上交待处理的以太报文,防止上交到网络设备层的报文无法得到处理而被直接丢弃,但以太口驱动层还在持续处理报文,浪费大量的cpu资源。

所述启动模块280,用于通过所述以太口驱动层在所述延时任务中再次启动以太报文的接收。

在本实施例中,所述启动模块280在所述延时任务中设定的预设时间超时后再次启动以太报文的接收。在预设时间超时后再次启动以太报文的接收可以减少上交到网络设备层的报文无法得到处理时,以太口驱动层还持续处理报文对cpu造成的无谓消耗,能够提升linux网络的数据处理性能及稳定性。

在本实施例中,所述控制模块240在控制以太口驱动层将以太报文交由网络设备层处理之前。

所述控制模块240还用于控制以太网控制器将接收的以太报文存储到预先设定的内存中。

所述控制模块240用于控制以太网控制器接收以太报文;

以太网控制器将接收的以太报文存储到预先设定的内存(缓冲区)中,可选地,以太网控制器通过dma(directmemoryaccess,直接内存存取)将以太报文进行存储。

所述控制模块240用于控制所述以太网控制器产生中断并通知处理器接收所述以太报文。

所述控制模块240在以太网控制器完成一以太报文的接收后,控制所述以太网控制器产生中断,并通知处理器对所述以太报文进行接收。

所述控制模块240还用于,控制所述处理器在接收的中断为报文接收中断时,通知以太口驱动层进行报文接收。

所述控制模块240控制所述处理器在接收的中断为报文接收中断时,通知以太口驱动层进行报文的接收。

在本实施例中,所述数据通信设备还包括初始化模块290;

所述初始化模块290用于对所述以太口驱动层进行初始化,在所述以太口驱动层中配置一用于处理阻塞(block)状态信息的内核延迟工作队列(delayedwork)。

预先在所述以太口驱动层中设置用于处理阻塞状态信息的内核延迟工作队列,可以在网络设备层无法继续处理以太报文时,通过在内核延迟工作队列中添加一延时任务的方式,阻止以太口驱动层继续进行以太报文的接收。

综上所述,本发明实施例提供一种以太报文接收方法及装置。通过在网络协议层无法处理报文时向以太口驱动层返回阻塞状态信息,并在所述以太口驱动层接收到所述阻塞状态信息后暂停以太报文的接收,在添加的一延时任务中再次启动以太报文的接收。通过上述以太报文接收流程的处理,可以在网络设备层由于各种原因无法继续报文时,暂停以太口驱动层接收报文,减小不必要的cpu开销,提升系统的数据处理性能及稳定性。

另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1