一种网络设备和网络报文转发方法与流程

文档序号:13141987阅读:200来源:国知局
一种网络设备和网络报文转发方法与流程

本发明涉及通信技术领域,特别涉及一种网络设备和网络报文转发方法。



背景技术:

通常,网络设备,例如路由器或防火墙,都是以通信soc(system-on-a-chip,片上系统)cpu(centralprocessingunit,中央处理器)为核心,通过i/o(输入/输出)数据总线外接不同的网络接口板。网络设备内部最常见的i/o数据总线是pci-e(peripheralcomponentinterconnectexpress,高速外设部件互连标准)总线。

这种基于pci-e总线的网络设备架构可以参考图1,其中包括soccpu、网络接口板和系统内存。该soccpu包括cpucore、pci-erc(rootcomplex,根复用器)和系统内存控制器,这三者通过soccpu的片内高速总线实现互联,系统内容控制器与系统内存相连。网络接口板包括pci-eendpoint(端点)、网络接口模块和物理网络接口。其中,pci-eendpoint通过pci-e总线与pci-erc相连。

现有技术中,网络接口板在从网络设备外部接收到网络报文时,需要通过pci-e总线不断地向pci-erc发送pci-ememory(内存)读事务,从系统内存中预取接收bd(bufferdescriptor,缓冲寄存器描述符),确定空闲的接收bd,并将网络报文封装在pci-ememory写事务中发送至pci-erc,以使pci-erc将网络报文发送至空闲的接收bd对应的接收buffer(缓冲寄存器)中。但是,在上述过程中,为了将网络报文发送至空闲的接收bd对应的接收buffer中,网络接口板需要通过pci-e总线发送大量的pci-ememory读事务预取接收bd,这就导致pci-e总线的利用率较低。

网络接口板在向网络设备外部发送网络报文时,需要通过pci-e总线不断地向pci-erc发送pci-ememory读事务,从系统内存中预取发送bd,确定非空闲的发送bd,并通过pci-e总线向pci-erc发送pci-ememory读事务,读取非空闲的发送bd对应的发送buffer中的网络报文,并将网络报文发送至网络设备外部。同样,在上述过程中,为了从非空闲的发送bd对应的发送buffer中读取网络报文,网络接口板需要通过pci-e总线发送大量的pci-ememory读事务预取发送bd,这也导致pci-e总线的利用率较低。



技术实现要素:

本发明实施例的目的在于提供了一种网络设备和网络报文转发方法,能够提高网络报文转发时pci-e总线的利用率。

为了达到上述目的,本发明公开了一种网络设备,包括:soccpu和网络接口板;

其中,所述soccpu包括:cpucore,通过soccpu片内高速总线与所述cpucore相连的第一逻辑装置,以及与所述第一逻辑装置连接的pci-erc;所述网络接口板包括:网络接口功能子模块、第二逻辑装置和pci-eendpoint,所述第二逻辑装置分别与所述网络接口功能子模块和所述pci-eendpoint连接;所述pci-erc通过pci-e总线与所述pci-eendpoint相连;

所述第二逻辑装置接收所述网络接口功能子模块发送的网络报文,以第一逻辑装置中的临时接收buffer的地址为目的地址,封装成pci-ememory写事务,并通过所述pci-eendpoint发送至所述pci-erc,所述pci-erc解析出网络报文,并发送至所述临时接收buffer,所述第一逻辑装置将所述临时接收buffer中的网络报文存储至目标接收buffer;

所述第一逻辑装置接收所述cpucore发送的网络报文,以第二逻辑装置中的临时发送buffer的地址为目的地址,封装成pci-ememory写事务,并通过所述pci-erc发送至所述pci-eendpoint,所述pci-eendpoint解析出网络报文,并发送至所述临时发送buffer,所述第二逻辑装置将所述临时发送buffer中的网络报文发送至所述网络接口功能子模块。

为了达到上述目的,本发明公开了一种网络报文转发方法,应用于上述网络设备,所述方法包括:

所述第二逻辑装置接收所述网络接口功能子模块发送的网络报文,以第一逻辑装置中的临时接收buffer的地址为目的地址,封装成pci-ememory写事务,并通过所述pci-eendpoint发送至所述pci-erc,所述pci-erc解析出网络报文,并发送至所述临时接收buffer,所述第一逻辑装置将所述临时接收buffer中的网络报文存储至目标接收buffer;

所述第一逻辑装置接收所述cpucore发送的网络报文,以第二逻辑装置中的临时发送buffer的地址为目的地址,封装成pci-ememory写事务,并通过所述pci-erc发送至所述pci-eendpoint,所述pci-eendpoint解析出网络报文,并发送至所述临时发送buffer,所述第二逻辑装置将所述临时发送buffer中的网络报文发送至所述网络接口功能子模块。

由上述技术方案可见,在本发明实施例中,网络设备的soccpu中包括cpucore、第一逻辑装置和pci-erc,网络接口板包括网络接口功能子模块、第二逻辑装置和pci-eendpoint,pci-erc通过pci-e总线与pci-eendpoint相连。网络设备从外部接收网络报文的过程包括:第二逻辑装置接收到网络报文后,以第一逻辑装置中的临时接收buffer的地址为目的地址,将网络报文封装成pci-e写事务并通过pci-eendpoint发送至pci-erc,pci-erc解析出网络报文,并将网络报文发送至临时接收buffer,第一逻辑装置将临时接收buffer中的网络报文存储至目标接收buffer。网络设备向外部发送网络报文的过程包括:第一逻辑装置接收到网络报文后,以第二逻辑装置中的临时发送buffer的地址为目的地址,将网络报文封装成pci-e写事务,并通过pci-erc发送至pci-eendpoint,pci-eendpoint解析出网络报文并发送至临时发送buffer,通过第二逻辑装置将网络报文发送至网络接口功能子模块。与现有技术相比,本发明实施例不需要通过pci-e总线发送预取接收bd和发送bd等额外的pci-e读写事务,因此能够提高网络报文转发时pci-e总线的利用率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为现有技术中基于pci-e总线的网络设备的一种结构示意图;

图2为本发明实施例提供的网络设备的一种结构示意图;

图3为本发明实施例提供的网络设备的另一种结构示意图;

图4为本发明实施例提供的网络设备中的第一逻辑装置的一种结构示意图;

图5为本发明实施例提供的网络设备中的第二逻辑装置的一种结构示意图;

图6为本发明实施例提供的网络报文转发方法的一种流程示意图;

图7为本发明实施例提供的网络报文转发方法的另一种流程示意图;

图8为本发明实施例提供的网络报文转发方法的又一种流程示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述。显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

图1为现有技术中基于pci-e总线的网络设备的一种结构示意图。下面结合图1,对现有技术中网络设备从外部接收网络报文的处理流程进行说明:

步骤1:网络接口模块通过pci-e总线发起pci-ememory读事务,从系统内存中预取接收bd(bufferdescriptor,缓冲寄存器描述符,包括接收buffer的状态和地址等,为存放接收的网络报文做准备)状态。

步骤2:pci-erc响应预取接收bd的pci-ememory读事务,从系统内存中获取接收bd,并通过pci-e总线传送给源网络接口板上的网络接口模块。

步骤3:源网络接口板上的网络接口模块从网络设备外部接收到网络报文,根据接收bd的状态,在接收bd的状态为空闲的情况下,发起pci-ememory写事务,该写事务的有效载荷为网络报文,目的地址为空闲的接收bd对应的接收buffer的地址。

步骤4:源网络接口板上的网络接口模块再发起pci-ememory写事务,更新接收bd状态为非空闲,同时更新接收数据长度。

步骤5:源网络接口板上的网络接口模块发送pci-e中断消息给pci-erc,通知cpucore,网络接口模块有中断产生。

步骤6:cpucore通过pci-erc发起pci-ememory读事务,读取源网络接口板的网络接口模块的中断状态寄存器,确认是网络报文接收中断。

步骤7:cpucore处理系统内存中接收buffer中的网络报文后,会更新对应的接收bd的状态,设置该接收bd的状态为空闲。

下面结合图1,对现有技术中网络设备向外部发送网络报文的处理流程进行说明:

步骤1:cpucore查询系统内存中的发送bd(包括发送buffer的状态和地址等信息,为存放即将发送的网络报文做准备)的状态,把网络报文存储至系统内存中空闲的发送bd对应的发送buffer中,并更新该发送bd的状态为非空闲。

步骤2:cpucore通过pci-erc发起pci-ememory写事务,写事务的目的地址是目的网络接口板的网络接口模块的发送门铃寄存器,通知目的网络接口板的网络接口模块有网络报文要发送。

步骤3:目的网络接口板的网络接口模块,通过pci-eendpoint向pci-erc发起pci-ememory读事务,从系统内存中读取发送bd。

步骤4:目的网络接口板的网络接口模块根据发送bd的状态,在发送bd的状态为非空闲的情况下,发起pci-ememory读事务,从系统内存中空闲的发送bd对应的发送buffer中读取网络报文,并通过物理网络接口发出。

步骤5:网络报文发送完成后,目的网络接口板的网络接口模块发起pci-ememory写事务,更新该发送bd的状态为空闲。

步骤6:目的网络接口板的网络接口模块,发送pci-e中断消息给pci-erc,通知cpucore,网络接口模块有中断产生。

步骤7:cpucore通过pci-erc发起pci-ememory读事务,读取目的网络接口板上的网络接口模块的中断状态寄存器,确认该中断是网络报文发送完成中断,cpucore就可以回收发送bd对应的发送buffer,为后面重新发起发送网络报文做准备。

从上述内容可见,现有技术中需要通过pci-e总线发送大量额外的pci-ememory事务,以确定空闲的接收bd和非空闲的发送bd。另外,通过pci-e总线发送的中断、更新bd状态、门铃操作等也属于额外的pci-e总线开销。

针对现有技术中网络报文的转发进行评估时发现,对于64bytes网络报文转发来说,有效网络报文传输不到pci-e总线利用率的20%,即每传输64bytes的有效网络报文,就需要额外承受300bytes左右的开销。一个8ge(8gbps)以太网线速的网络接口板,至少需要pci-e2.08x(40gbps,32根pci-e总线管脚)的pci-e物理链路。综上分析可知,现有技术中网络设备在转发网络报文时pci-e总线的利用率相对较低。

由上述分析可知,pci-e总线实现网络报文转发利用率较低的根本原因是,网络接口模块的接收bd、发送bd、接收buffer和发送buffer都保存在系统内存中,网络接口模块作为网络报文收发的主体,必须使用大量额外的pci-e读写事务去预取和刷新bd状态,同时接收中断、发送中断和发送门铃也都必须使用额外的pci-e读写事务。

对现有技术方案的常规改进是,把接收bd、发送bd、接收buffer和发送buffer都保存在网络接口模块中,但对于网络设备(例如路由器)来说,由于网络报文除了收发外,还需要cpucore参与网络报文内容的处理,cpucore处理保存在网络接口模块上的网络报文,会浪费更多的网络资源。所以,本发明提出一种创新设计思想,把网络接口模块的大部分功能(例如预取bd、刷新bd状态、接收中断、发送中断和发送门铃等通过pci-e总线进行的操作)提取出来,集成到soccpu中实现,这样就可以降低cpucore和网络接口板之间的pci-e读写事务的交互,提高pci-e总线利用率。

本发明实施例提供了一种网络设备和网络报文转发方法,能够提高网络报文转发时pci-e总线的利用率。

下面通过具体实施例,对本发明进行详细说明。

图2为本发明实施例提供的一种网络设备的结构示意图。该网络设备包括soccpu20和网络接口板21。

其中,soccpu20包括:cpucore201,通过soccpu片内高速总线与cpucore201相连的第一逻辑装置202,以及与第一逻辑装置202连接的pci-erc203;网络接口板21包括:网络接口功能子模块211、第二逻辑装置212和pci-eendpoint213,第二逻辑装置212分别与网络接口功能子模块211和pci-eendpoint211连接;pci-erc203通过pci-e总线与pci-eendpoint213相连。

可以理解的是,网络设备可以包括不止一个soccpu20,一般包括至少两个网络接口板21,一个soccpu20一般与至少两个网络接口板21相连。

具体的,第二逻辑装置212接收网络接口功能子模块211发送的网络报文,以第一逻辑装置202中的临时接收buffer的地址为目的地址,封装成pci-ememory写事务,并通过pci-eendpoint213发送至pci-erc203,pci-erc203解析出网络报文,并发送至所述临时接收buffer,第一逻辑装置202将所述临时接收buffer中的网络报文存储至目标接收buffer;

第一逻辑装置202接收cpucore201发送的网络报文,以第二逻辑装置212中的临时发送buffer的地址为目的地址,封装成pci-ememory写事务,并通过pci-erc203发送至pci-eendpoint211,pci-eendpoint213解析出网络报文,并发送至临时发送buffer,第二逻辑装置212将所述临时发送buffer中的网络报文发送至网络接口功能子模块211。

由上述内容可见,在本实施例中,网络设备从外部接收网络报文的过程包括:第二逻辑装置接收到网络报文后,以第一逻辑装置中的临时接收buffer的地址为目的地址,将网络报文封装成pci-e写事务并通过pci-eendpoint发送至pci-erc,pci-erc解析出网络报文,并将网络报文发送至临时接收buffer,第一逻辑装置将临时接收buffer中的网络报文存储至目标接收buffer。网络设备向外部发送网络报文的过程包括:第一逻辑装置接收到网络报文后,以第二逻辑装置中的临时发送buffer的地址为目的地址,将网络报文封装成pci-e写事务并通过pci-erc发送至pci-eendpoint,pci-eendpoint解析出网络报文并发送至临时发送buffer,通过第二逻辑装置将网络报文发送至网络接口功能子模块。与现有技术相比,本发明实施例不需要通过pci-e总线发送预取接收bd和发送bd等额外的pci-e读写事务,因此能够提高网络报文转发时pci-e总线的利用率。

可以理解的是,在实际应用中,本发明实施例中的网络设备的结构不限于图2所示内容,网络设备还可以包括如图3所示的其他内容。具体的,soccpu还可以包括系统内存控制器,系统内存控制器通过soccpu片内高速总线分别与cpucore、第一逻辑装置相连。网络设备还可以包括系统内存,系统内存与soccpu,具体的,系统内存与系统内存控制器相连。其中,cpucore和第一逻辑装置可以通过系统内存控制器访问系统内存。网络接口板还可以包括物理网络接口,图2中的网络接口功能子模块、第二逻辑装置和pci-eendpoint包含在网络接口模块中,其中,物理网络接口从网络设备外部接收网络报文,并将网络报文发送至网络接口功能子模块。

在本发明的另一实施例中,在图2所示的网络设备的基础上,在初始化时,cpucore201将临时接收buffer的地址作为有效载荷,将第二逻辑装置中的接收buffer配置寄存器地址作为目的地址,封装成pci-ememory写事务,将pci-ememory写事务通过第一逻辑装置202和pci-erc203发送至pci-eendpoint213,pci-eendpoint213解析出临时接收buffer的地址后,发送至第二逻辑装置212。这样,第二逻辑装置212在接收到网络报文时,就可以以临时接收buffer的地址为目的地址,将网络报文通过pci-ememory写事务发送至临时接收buffer。

同样的,在初始化时,cpucore201还要将第二逻辑装置212中的临时发送buffer的地址发送至第一逻辑装置202。这样,在第一逻辑装置202接收到网络报文时,就可以以临时发送buffer的地址为目的地址,将网络报文通过pci-ememory写事务发送至临时发送buffer。

其中,cpucore201保存了网络设备中所有pci-e空间的地址,包括临时接收buffer的地址和临时发送buffer的地址。

在本发明的另一实施例中,可以对图2所示实施例进行一些改进。具体的,第二逻辑装置212接收网络接口功能子模块211发送的网络报文,以第一逻辑装置中的临时接收buffer的地址为目的地址,封装成pci-ememory写事务,并通过pci-eendpoint213发送至pci-erc203,pci-erc203解析出网络报文,并发送至临时接收buffer,第一逻辑装置202将临时接收buffer中的网络报文存储至目标接收buffer,可以包括:

第二逻辑装置212接收网络接口功能子模块211发送的网络报文,以网络报文为有效载荷,以第一逻辑装置202中的临时接收buffer的地址为目的地址,封装成pci-ememory写事务,并通过pci-eendpoint213发送至pci-erc203。

pci-erc203接收pci-eendpoint213发送的pci-ememory写事务,解析出网络报文,将网络报文发送至临时接收buffer中。

第一逻辑装置202在临时接收buffer接收网络报文后,从第一逻辑装置202的接收bd链中确定空闲的目标接收bd,将临时接收buffer中的网络报文存储至目标接收bd对应的目标接收buffer中。

在第一逻辑装置202将临时接收buffer中的网络报文存储至目标接收buffer之后,第一逻辑装置202更新目标接收bd的状态为非空闲状态,并向cpucore201发送中断通知。

接收bd的状态为非空闲状态,即表明该接收bd对应的接收buffer中已经存储了网络报文。

cpucore201响应中断通知,处理目标接收buffer中的网络报文,处理完成后更新目标接收bd的状态为空闲状态。

接收bd的状态为空闲状态,即表明该接收bd对应的接收buffer中已经没有网络报文了。

在本实施例中,当网络设备包括系统内存时,目标接收buffer可以位于系统内存或第一逻辑装置中。具体的,当目标接收buffer位于第一逻辑装置中时,可以由第一逻辑装置中的ram(随机存取存储器)空间实现。当目标接收buffer位于系统内存中时,目标接收buffer不需要占用第一逻辑装置的存储空间,能够节省硬件成本。当目标接收buffer位于第一逻辑装置中,第一逻辑装置通常需要配置大块高速的ram空间,这样能够提高对网络报文的处理性能。

由上述内容可见,第一逻辑装置负责管理接收bd和发送bd,实现接收网络报文和发送网络报文时向cpucore发送中断通知的操作,以及接收和发送网络报文的dma(directmemoryaccess)操作。也就是说,pci-erc与pci-eendpoint之间通过pci-e总线发送的大部分pci-e写事务属于包含网络报文的有效的pci-e写事务,因此能够提高网络报文转发时pci-e总线的利用率。

在本发明的另一实施例中,还可以对图2所示实施例进行另一种改进。具体的,第一逻辑装置202接收cpucore201发送的网络报文,以第二逻辑装置中的临时发送buffer的地址为目的地址,封装成pci-ememory写事务,并通过pci-erc203发送至pci-eendpoint213,pci-eendpoint213解析出网络报文,并发送至临时发送buffer,第二逻辑装置212将临时发送buffer中的网络报文发送至网络接口功能子模块211,可以包括:

cpucore201获得第一逻辑装置发送bd链中空闲的目标发送bd,将网络报文存储至目标发送bd对应的目标发送buffer中,并更新目标发送bd的状态为非空闲状态。

第一逻辑装置202轮询发送bd链,当检测到目标发送bd的状态由空闲状态更新为非空闲状态时,从目标发送buffer中读取网络报文。

第一逻辑装置202以网络报文为有效载荷,以临时发送buffer的地址为目的地址,封装成pci-ememory写事务,将pci-ememory写事务发送至pci-erc203。

在将pci-ememory写事务通过pci-erc203发送至pci-eendpoint213之后,pci-erc203会向第一逻辑装置202发送中断通知,以使第一逻辑装置202响应中断通知;

当第一逻辑装置202接收到pci-erc203发送的中断通知后,第一逻辑装置202更新目标发送bd的状态为空闲状态,向cpucore201发送中断通知,cpucore201响应中断通知。

pci-eendpoint213接收pci-erc203发送的pci-ememory写事务,解析出网络报文,并发送至临时发送buffer中。

在检测到临时发送buffer中存储有网络报文时,第二逻辑装置212将临时发送buffer中的网络报文发送至网络接口功能子模块211。

在本实施例中,当网络设备包括系统内存时,目标发送buffer可以位于系统内存或第一逻辑装置202中。具体的,当目标发送buffer位于第一逻辑装置中时,可以由第一逻辑装置中的ram空间实现。当目标发送buffer位于系统内存中时,目标发送buffer不需要占用第一逻辑装置的存储空间,能够节省硬件成本。当目标发送buffer位于第一逻辑装置中,第一逻辑装置通常需要配置大块高速的ram空间,这样能够提高对网络报文的处理性能。

由上述内容可见,第二逻辑装置负责把从网络接口功能子模块接收到的网络报文封装成pci-e写事务,通过pci-eendpoint发送至pci-erc,还负责从pci-erc发送来的pci-e写事务中解析出网络报文,并将网络报文发送给网络接口功能子模块。也就是说,pci-erc与pci-eendpoint之间通过pci-e总线发送的大部分pci-e写事务属于包含网络报文的有效的pci-e写事务,因此能够提高网络报文转发时pci-e总线的利用率。

在本发明的另一实施例中,图2所示实施例中的第一逻辑装置202的内部结构还可以如图4所示,其中,第一逻辑装置202包括:接收bd链401、发送bd链402、临时接收buffer403、接收处理模块404、发送处理模块405、硬件限速器406和接收发送buffer407。

具体的,接收bd链401是由接收bd组成的链表。接收处理模块404和cpucore201都可以访问接收bd链401。接收处理模块404会一直轮询接收bd的状态。

发送bd链402是由发送bd组成的链表。cpucore201准备好待发送的网络报文后,查找发送bd链402,确定空闲的目标发送bd,把网络报文存储至目标发送bd对应的目标发送buffer中,并更新目标发送bd的状态为非空闲。

其中,接收bd链401和发送bd链402都可以存放在第一逻辑装置202的ram空间中,该ram空间对于cpucore201是可访问的。

临时接收buffer403,用于存储pci-erc203接收的网络报文。该临时接收buffer403位于网络设备内部pci-e空间中,可以由第一逻辑装置202的ram空间实现,与系统内存、临时接收buffer403以及临时发送buffer统一编址。pci-erc203接收pci-eendpoint213发送的pci-ememory写事务,其中,该写事务中的有效载荷为网络报文,目的地址为临时接收buffer403的地址。pci-erc203解析出网络报文,并将网络报文存储至临时接收buffer403中。接收buffer403接收到网络报文后变更自身状态为非空闲,以通知接收处理模块404处理网络报文。

接收处理模块404,用于轮询接收bd链401,确定处于空闲状态的目标接收bd,检测到临时接收buffer403中存储有网络报文后,将网络报文存储至目标接收bd对应的目标接收buffer中,更新目标接收bd的状态,并向cpucore201发送中断通知,以通知cpucore201处理目标接收buffer中的网络报文。

具体的,接收处理模块404一直在轮询临时接收buffer403的状态,当发现临时接收buffer403的状态从空闲变为非空闲时,即检测到临时接收buffer403中存储有网络报文。接收处理模块404可以根据空闲的目标接收bd的接收buffer指针,找到目标接收buffer的地址,并把临时接收buffer403中的报文存储至目标接收buffer中,更新目标接收bd的状态为非空闲,更新临时接收buffer403的状态为空闲。

发送处理模块405,用于轮询发送bd链402,确定处于非空闲状态的目标发送bd,从目标发送bd对应的目标发送buffer中获得网络报文,并封装成pci-ememory写事务,在硬件限速器406处于可发送状态时,通过pci-erc203发送pci-ememory写事务,更新目标发送bd的状态,并向cpucore201发送中断通知。通过pci-erc203发送pci-ememory写事务,即通过pci-erc203向pci-eendpoint213发送pci-ememory写事务。当硬件限速器406处于不可发送状态时,发送处理模块405继续轮询判断硬件限速器406的状态,直到其状态从不可发送变为可发送。在初始化时,cpucore201会将临时发送buffer的地址发送至发送处理模块405,这样,发送处理模块405获得网络报文后,以网络报文为有效载荷,以临时发送buffer的地址为目的地址,封装成pci-ememory写事务。

具体的,发送处理模块405以网络报文为有效载荷,以临时发送buffer的地址为目的地址,封装成pci-ememory写事务。

需要指出的是,本实施例中的接收处理模块404和发送处理模块405均为硬件实体,均可以由可编程逻辑器件实现。作为优先的,接收处理模块404和发送处理模块405均可以为现场可编程门阵列fpga。

硬件限速器406,用于确定发送处理模块405是否能够向pci-erc203发送pci-ememory写事务。

具体的,在初始化时,cpucore201将物理网络接口向网络设备外部发送网络报文时的目标发送速率设置到硬件限速器406中,硬件限速器406根据目标发送速率,计算物理网络接口是否已经完成上一次网络报文的发送,如果是,则将自身状态设置为可发送,否则,将自身状态设置为不可发送。这样,能够保证第一逻辑装置发送网络报文的速率与网络接口板向网络设备外部发送网络报文的速率相匹配,避免出现发送速率不匹配导致的网络接口板丢弃网络报文的问题。

接收发送buffer407,包括:接收bd对应的接收buffer和发送bd对应的发送buffer,用于将接收处理模块404发送的网络报文存储至接收buffer,将cpucore201发送的网络报文存储至发送buffer。其中,接收发送buffer407位于网络设备内部pci-e空间中,与系统内存、临时接收buffer403以及临时发送buffer统一编址。

具体的,当网络设备包括系统内存时,接收发送buffer407可以位于系统内存或第一逻辑装置中。具体的,当接收发送buffer位于第一逻辑装置中时,可以由第一逻辑装置中的ram空间实现。当接收发送buffer位于系统内存中时,接收发送buffer不需要占用第一逻辑装置的存储空间,能够节省硬件成本。当接收发送buffer位于第一逻辑装置中,第一逻辑装置通常需要配置大块高速的ram空间,这样能够提高对网络报文的处理性能。

在本发明的另一实施例中,图2所示实施例中的第二逻辑装置212的内部结构还可以如图5所示,其中,第二逻辑装置212包括:网络报文接收处理模块501、临时发送buffer502和网络报文发送处理模块503。

其中,网络报文接收处理模块501,用于接收网络接口功能子模块211发送的网络报文,并封装成pci-ememory写事务,通过pci-eendpoint213发送pci-ememory写事务,即通过pci-eendpoint213向pci-erc203发送pci-ememory写事务。

具体的,网络报文接收处理模块501以网络报文为有效载荷,以临时接收buffer的地址为目的地址,封装成pci-ememory写事务。在初始化时,cpucore201会通过pci-e总线把临时接收buffer的地址设置到网络报文接收处理模块501中。

临时发送buffer502,用于存储pci-eendpoint213发送的网络报文。该临时发送buffer502位于网络设备内部pci-e空间中,可以由第二逻辑装置212的ram空间实现,与系统内存、临时接收buffer403以及接收发送buffer统一编址。pci-eendpoint213接收pci-erc203发送的pci-ememory写事务后,由于该写事务的有效载荷为网络报文,目的地址为临时发送buffer502的地址,因此pci-eendpoint213将解析出的网络报文存储至临时发送buffer502中。临时发送buffer502存储网络报文后变更自身状态为非空闲,以便通知网络报文发送处理模块503发送网络报文。

网络报文发送处理模块503,用于在检测到临时发送buffer502中存储有网络报文时,将网络报文发送至网络接口功能子模块211。网络接口功能子模块211将网络报文发送至物理网络接口,以使物理网络接口将网络报文发送至网络设备外部。

具体的,网络报文发送处理模块503轮询临时发送buffer502的状态,当发现临时发送buffer502的状态由空闲变为非空闲时,即检测到临时发送buffer502中存储有网络报文。

需要指出的是,本实施例中的网络报文接收处理模块501和网络报文发送处理模块503均为硬件实体,均可以由可编程逻辑器件实现。作为优先的,网络报文接收处理模块501和网络报文发送处理模块503均可以为现场可编程门阵列fpga。

图6为本发明实施例提供的网络报文转发方法的一种流程示意图,应用于上述实施例中的网络设备,所述方法包括:

步骤s601:第二逻辑装置接收网络接口功能子模块发送的网络报文,以第一逻辑装置中的临时接收buffer的地址为目的地址,封装成pci-ememory写事务,并通过pci-eendpoint发送至pci-erc,pci-erc解析出网络报文,并发送至临时接收buffer,第一逻辑装置将临时接收buffer中的网络报文存储至目标接收buffer;

步骤s602:第一逻辑装置接收cpucore发送的网络报文,以第二逻辑装置中的临时发送buffer的地址为目的地址,封装成pci-ememory写事务,并通过pci-erc发送至pci-eendpoint,pci-eendpoint解析出网络报文,并发送至临时发送buffer,第二逻辑装置将临时发送buffer中的网络报文发送至网络接口功能子模块。

由上述内容可见,在本实施例中,网络设备从外部接收网络报文的过程包括:第二逻辑装置接收到网络报文后,以第一逻辑装置中的临时接收buffer的地址为目的地址,将网络报文封装成pci-e写事务并通过pci-eendpoint发送至pci-erc,pci-erc解析出网络报文,并将网络报文发送至临时接收buffer,第一逻辑装置将临时接收buffer中的网络报文存储至目标接收buffer。网络设备向外部发送网络报文的过程包括:第一逻辑装置接收到网络报文后,以第二逻辑装置中的临时发送buffer的地址为目的地址,将网络报文封装成pci-e写事务并通过pci-erc发送至pci-eendpoint,pci-eendpoint解析出网络报文并发送至临时发送buffer,通过第二逻辑装置将网络报文发送至网络接口功能子模块。与现有技术相比,本发明实施例不需要通过pci-e总线发送预取接收bd和发送bd等额外的pci-e读写事务,因此能够提高网络报文转发时pci-e总线的利用率。

在本发明的另一实施例中,为了使将网络报文封装成pci-ememory写事务的过程更加高效,在图6所示实施例的基础上,所示方法还可以包括:

在初始化时,cpucore将临时接收buffer的地址作为有效载荷,将第二逻辑装置中的接收buffer配置寄存器地址作为目的地址,封装成pci-ememory写事务,将pci-ememory写事务通过所述第一逻辑装置和pci-erc发送至pci-eendpoint,pci-eendpoint解析出临时接收buffer的地址后,发送至第二逻辑装置;

cpucore还要将第二逻辑装置中的临时发送buffer的地址发送至第一逻辑装置。

这样,第一逻辑装置在将网络报文封装成pci-ememory写事务时,目的地址直接采用接收的临时发送buffer的地址即可。同样的,第二逻辑装置在将网络报文封装成pci-ememory写事务时,目的地址直接采用接收的临时接收buffer的地址即可,从而在后续的网络报文转发过程中能够提高转发效率。

在本发明的另一实施例中,可以对图6所示实施例中的步骤s601加以改进。具体的,步骤s601可以按照图7所示流程示意图执行,具体包括:

步骤s701:第二逻辑装置接收网络接口功能子模块发送的网络报文,以网络报文为有效载荷,以第一逻辑装置中的临时接收buffer的地址为目的地址,封装成pci-ememory写事务,并通过pci-eendpoint发送至pci-erc。

步骤s702:pci-erc接收pci-eendpoint发送的pci-ememory写事务,解析出网络报文,将网络报文发送至所述临时接收buffer中。

步骤s703:第一逻辑装置在临时接收buffer接收网络报文后,从第一逻辑装置的接收bd链中确定空闲的目标接收bd,将临时接收buffer中的网络报文存储至目标接收bd对应的目标接收buffer中,更新目标接收bd的状态为非空闲状态,并向cpucore发送中断通知。

步骤s704:cpucore响应中断通知,处理目标接收buffer中的网络报文,处理完成后更新目标接收bd的状态为空闲状态。

在本发明的另一实施例中,可以对图6所示实施例中的步骤s602加以改进。具体的,步骤s602可以按照图8所示流程示意图执行,具体包括:

步骤s801:cpucore获得第一逻辑装置发送bd链中空闲的目标发送bd,将网络报文存储至目标发送bd对应的目标发送buffer中,并更新目标发送bd的状态为非空闲状态。

步骤s802:第一逻辑装置轮询发送bd链,当检测到目标发送bd的状态由空闲状态更新为非空闲状态时,从目标发送buffer中读取网络报文。

步骤s803:第一逻辑装置以网络报文为有效载荷,以临时发送buffer的地址为目的地址,封装成pci-ememory写事务,将pci-ememory写事务发送至pci-erc。

步骤s804:在将pci-ememory写事务通过pci-erc发送至pci-eendpoint之后,第一逻辑装置更新目标发送bd的状态为空闲状态,向cpucore发送中断通知,cpucore响应中断通知。

步骤s805:pci-eendpoint接收pci-erc发送的pci-ememory写事务,解析出网络报文,并发送至临时发送buffer中。

步骤s806:在检测到临时发送buffer中存储有网络报文时,第二逻辑装置将临时发送buffer中的网络报文发送至网络接口功能子模块。

由于上述方法实施例与网络设备实施例是相互对应的,与该网络设备具有相同的技术效果,因此方法实施例的技术效果此处不再赘述。

对于方法实施例而言,由于其基本相似于网络设备实施例,所以描述得比较简单,相关之处参见网络设备实施例的部分说明即可。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本领域普通技术人员可以理解,上述实施方式中的全部或部分步骤是能够通过程序指令相关的硬件来完成的,所述的程序可以存储于计算机可读取存储介质中。这里所称存储介质,是指rom/ram、磁碟、光盘等。

以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

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