CN113411380B - 基于fpga可编程会话表的处理方法、逻辑电路和设备 - Google Patents
基于fpga可编程会话表的处理方法、逻辑电路和设备 Download PDFInfo
- Publication number
- CN113411380B CN113411380B CN202110609968.4A CN202110609968A CN113411380B CN 113411380 B CN113411380 B CN 113411380B CN 202110609968 A CN202110609968 A CN 202110609968A CN 113411380 B CN113411380 B CN 113411380B
- Authority
- CN
- China
- Prior art keywords
- session table
- module
- session
- address
- read
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/14—Session management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明提供了一种基于FPGA可编程会话表的处理方法、逻辑电路和设备,该处理方法包括如下步骤:从输入信号的包头信息选择查找关键字,然后使用查找关键字进行会话表查找,计算会话表的HASH桶索引号,并使用HASH桶索引号读取DDR内存中的多个会话表项,接着使用查找关键字和读取的多个会话表项中的匹配关键字进行比较,如果相同则认为会话表匹配,根据匹配会话表中的操作数,执行修改包头信息、元数据信息、会话表操作数的动作,最后将修改后的包头信息、元数据信息送给后续的包转发模块,将修改后的会话表项回写到DDR内存中。采用本发明的技术方案,大大降低了FPGA会话管理的设计难度,显著缩短了研发周期。
Description
技术领域
本发明属于电子信息技术领域,尤其涉及一种基于FPGA(Field ProgrammableGate Array,现场可编程门阵列)可编程会话表的处理方法、逻辑电路和设备。
背景技术
在网络中,会话是两个通信设备之间的信息交换,会话在某个时间点建立,然后在稍后的某个时间点被结束。在TCP/IP协议中,一条会话由五元组(源IP地址、目的IP地址、源端口号、目的端口号、协议类型)唯一标识,基于五元组建立的查找表称为会话表。会话表在网络设备中有广泛的应用,例如在防火墙中建立会话表,可实现TCP的状态检测以及内网和外网IP地址的转换;在DPI(深度报文检测)设备中建立会话表,可实现上下行流量统计和TCP重传包统计;在四层负载均衡设备中建立会话表,利用会话表中的服务器外部和内部IP地址映射关系,可将同一条会话的所有数据包转发到被选中的同一个内部服务器,保证了内部服务器对同一条服务请求响应的完整性;在5G核心网的UPF网元中建立会话表,可实现基于会话的GTP隧道封装解封装、流量统计、计费信息发送以及路由转发等功能。
随着5G、物联网、云计算、AR与VR等技术的应用,全球网络流量面临爆发式增长,网络设备的接口带宽向着25G、40G,甚至100G演进,网络设备需要处理的会话新建速率达到了每秒百万条以上,并发会话数达到了千万甚至上亿条。对于传统的基于X86架构的纯软件网络设备,CPU无法将成千上万条会话表缓存到cache中,只能存储到DDR内存,而现在计算机的内存运行速度只有CPU速度的400分之一,软件收到的每个包都需要读取内存查询会话表,并且需要再次写内存更新会话表,这耗费了大量CPU运算资源,整个系统的性能也会随着会话表数量的增加而急剧下降。
采用NP(网络处理器)管理会话表,NP本质上还是CPU对指令代码的执行,因此和X86架构一样,需要先读取内存查询会话表,然后根据会话表内容执行动作,最后需要写内存更新会话表,CPU对指令的串行执行,以及对DDR内存的频繁读写,同样造成了会话表管理的性能瓶颈。
采用FPGA管理会话表,可以充分利用FPGA在并行处理能力方面的优势,将会话表查询、会话表动作执行、会话表更新做为流水线的不同处理阶段,实现并行处理,这大大提高了会话表处理的性能,很容易实现百万级新建,千万级并发的会话表管理。但采用FPGA管理会话表的难点在于设计难度较大,功能移植和升级困难,目前FPGA设计需要使用专用的硬件描述语言Verilog或VHDL,从电路级设计整个系统,存在开发门槛高、设计复杂、工作量大的困难,并且一旦基于FPGA的会话表管理功能设计、验证完成后,如果需要修改会话表功能或者改变DDR内存接口,则又要面对硬件电路的重新设计和验证,其开发周期远大于软件设计。在保证FPGA高性能管理会话表的同时,需要找到一种方法降低FPGA会话表管理设计和修改的难度,增强会话表管理功能的可移植性。
P4是一种协议无关的数据包处理编程高级语言,用于网络的数据平面编程。P4语言支持对报文解析器(Parser),匹配-动作表(Match-Action Table)和报文逆解析器(Deparser)这三个模块的完全可编程,同时也支持调用用户自定义的外部对象(Externobjects),利用P4语言的这个特性,考虑将会话表管理的固定功能做成一个外部对象,然后在P4程序中调用,将会话表管理的可编程功能定义为动作(Action),使用P4语言来描述该动作,这样就可以使用高级语言实现会话表管理功能的设计,达到降低设计难度,增强设计可移植性的目的。
发明内容
针对以上技术问题,本发明公开了一种基于FPGA可编程会话表的处理方法、逻辑电路和设备,解决了现有技术中FPGA会话表管理功能开发门槛高、设计复杂且功能固定问题。
对此,本发明采用的技术方案为:
一种基于FPGA可编程会话表的处理方法,其特征在于:输入信号包括包头信息和元数据信息;其中包头信息是解析器解析出的包头协议字段;元数据信息是数据包的输入端口号、输出端口号、包长、优先级、多播组号等包信息。
所述基于FPGA可编程会话表的处理方法包括如下步骤:
从输入信号的包头信息选择查找关键字,然后使用查找关键字进行会话表查找,计算会话表的HASH(哈希)桶索引号,并使用HASH桶索引号读取DDR内存中的多个会话表项,接着使用查找关键字和读取的多个会话表项中的匹配关键字进行比较,如果相同则认为会话表匹配,根据匹配会话表中的操作数,执行修改包头信息、元数据信息、会话表操作数的动作,最后将修改后的包头信息、元数据信息送给后续的包转发模块,将修改后的会话表项回写到DDR内存中。
采用此技术方案,实现了会话表查找、更新的固定功能和查找关键字构造、动作执行的可编程功能的分离,固定功能只需完成一次硬件电路设计,新产品或者已有产品的修改,只需要使用高级语言对查找关键字构造、会话表动作执行编程即可,大大降低了FPGA会话管理的设计难度,显著缩短了研发周期;而且可适配各种规格的DDR内存,提高了会话管理产品的可移植性。
作为本发明的进一步改进,所述会话表查找包括:
采用HASH算法,使用预设的CRC32多项式对查找关键字进行CRC运算,得到会话表HASH桶索引号bucket_index,一个HASH桶对应多个会话表项,这些会话表项在内存中连续存放;
将输入的HASH桶索引号bucket_index转换为DDR内存起始地址,并从DDR内存起始地址开始,连续发出HASH桶中所有会话表项的读命令;
保存输入的查找关键字,在DDR控制器返回会话表项内容后,逐个提取同一HASH桶中会话表项的匹配关键字,与输入的查找关键字lookup_key_cmp信号做比较,如果这两个关键字相等,并且会话表项的有效标志位为1,则判断为会话表匹配,匹配信号置为1,将匹配信号match、匹配会话表项的DDR内存起始地址sess_addr和匹配会话表项内容sess_entry输出;如果没有找到匹配的会话表项,则匹配信号置为0,将匹配信号match、编号最小的空闲会话表项的DDR内存起始地址sess_addr输出。
作为本发明的进一步改进,所述会话表项的内容包括有效标志位、匹配关键字和操作数,有效标志位表示会话表项有效,匹配关键字用于会话表查找时的关键字比较,操作数是执行会话表动作时用到的变量。
所述DDR内存起始地址由{HASH桶索引号,HASH桶会话表项编号,会话表项偏移地址}构成。
读命令时,通过HASH桶会话表项数量参数、会话表项数据位宽和DDR控制器接口数据位宽参数自动计算读DDR命令地址和数量。
采用先入先出的方式保存查找关键字,当同一HASH桶会话表项的读数据返回时,取一个保存的查找关键字,通过接口信号lookup_key_cmp输出进行比较。
作为本发明的进一步改进,使用FIFO保存包头信息、元数据信息,当输出匹配结果进行执行时,按照先入先出机制,取出一个包的包头信息headers和元数据信息metadata进行执行。
使用FIFO保存包头信息、元数据信息,所述查找关键字采用高级语言可编程的方式,其通过输入包头信息headers_in,将选定的包头信息headers_in中的包头协议字段连线到查找关键字信号,输出查找关键字信号lookup_key,产生会话表查找地址,并进行会话表关键字的比较。
所述查找关键字采用五元组:源IP地址、目的IP地址、源端口号、目的端口号、协议类型;其中源IP地址、目的IP地址为IPv4首部或者IPv6首部的源IP地址、目的IP地址,协议类型为IPv4首部的协议字段或者IPv6首部的下一个首部(Next Header)协议字段,对于TCP协议报文,选择TCP首部的源端口号、目的端口号作为五元组的源端口号、目的端口号,对于UDP协议报文,选择UDP首部的源端口号、目的端口号作为五元组的源端口号、目的端口号。
所述会话表查找的输入信号包括查找关键字信号lookup_key、DDR控制器返回的读数据信号read_data,输出信号包括送给DDR控制器的读命令信号read_command(包括读请求信号和读地址信号),用于动作执行的会话表匹配信号match、会话表起始地址信号sess_addr、会话表项内容sess_entry。
所述动作执行的内容包括按照包头信息、元数据信息构造新建会话的表项,对于会话表匹配的情况,按照动作描述代码对包头信息、元数据信息、会话表操作数进行逻辑运算、算术运算和赋值操作;执行完动作后,将修改的包头信息、元数据信息送给后续的包转发模块,由转发模块组装输出数据包,并转发到目的端口;将新建或修改的会话表项内容、会话表项的DDR内存起始地址输出,然后从会话表项的DDR内存起始地址开始,连续发出多个DDR内存地址的写命令,通过设置的DDR控制器接口数据位宽参数,自动计算出写DDR内存命令的数量。
本发明还公开了一种基于FPGA的可编程会话表的逻辑电路,其包括:
包信息存储模块,用于输入的包头信息、元数据信息的存储,当需要执行动作时,将包头信息、元数据信息从缓存取出,送给动作执行模块;
查找关键字构造模块,用于产生会话表查找关键字,并将查找关键字输出给会话表查找模块;
会话表查找模块,用于会话表的查找,并将匹配的会话表项输出给动作执行模块;
动作执行模块,用于会话表的动作执行,按照会话表查找模块送来的查找结果,修改并输出包头信息、元数据信息、会话表操作数;
写会话表模块,用于完成会话表项的写操作;
读写仲裁模块,用于会话表查找模块和写会话表模块的读写请求仲裁,并将读或写命令发送给DDR控制器。
输入会话表逻辑电路的信号包括包头信息headers_in和元数据信息metadata_in,包信息存储模块使用FIFO保存这两个信号,当会话表查找模块输出匹配结果给动作执行模块时,按照先入先出机制,从FIFO取出一个包的包头信息headers和元数据信息metadata,送给动作执行模块。
作为本发明的进一步改进,所述包信息存储模块使用FIFO保存包头信息、元数据信息,当会话表查找模块输出匹配结果给动作执行模块时,按照先入先出机制,从FIFO取出一个包的包头信息headers和元数据信息metadata,送给动作执行模块。
作为本发明的进一步改进,所述查找关键字构造模块为高级语言可编程模块,其通过输入包头信息headers_in,在P4程序中定义的查找关键字是确定的某几个包头协议字段,因此可以直接将P4程序中的查找关键字赋值语句转换为Verilog语言的赋值语句,具体到FPGA电路上,将选定的包头信息headers_in中的包头协议字段连线到查找关键字信号,这只会占用少量的FPGA连线资源,相对于整个FPGA逻辑资源来说,几乎可以忽略不计。查找关键字构造模块输出的查找关键字信号lookup_key送给会话表查找模块,用于会话表查找地址的产生以及会话表关键字的比较。
作为本发明的进一步改进,所述会话表的查找关键字采用五元组(源IP地址、目的IP地址、源端口号、目的端口号、协议类型);其中源IP地址、目的IP地址为IPv4首部或者IPv6首部的源IP地址、目的IP地址,协议类型为IPv4首部的协议字段或者IPv6首部的下一个首部(Next Header)协议字段,对于TCP协议报文,选择TCP首部的源端口号、目的端口号作为五元组的源端口号、目的端口号,对于UDP协议报文,选择UDP首部的源端口号、目的端口号作为五元组的源端口号、目的端口号。
作为本发明的进一步改进,所述会话表查找模块属于固定功能模块,其输入信号包括查找关键字信号lookup_key、DDR控制器返回的读数据信号read_data,输出信号包括送给DDR控制器的读命令信号read_command(包括读请求信号和读地址信号),送给动作执行模块的会话表匹配信号match、会话表起始地址信号sess_addr、会话表项内容sess_entry。
作为本发明的进一步改进,所述会话表查找模块包括:
HASH算法子模块,使用预设的CRC32多项式对查找关键字进行CRC运算,得到会话表HASH桶索引号bucket_index,一个HASH桶对应多个会话表项,这些会话表项在内存中连续存放;
读命令子模块,将输入的HASH桶索引号bucket_index转换为DDR内存起始地址,并向读写仲裁模块发起读请求信号,得到读写仲裁模块的应答信号后,从DDR内存起始地址开始,连续发出HASH桶中所有会话表项的读命令;
查找关键字FIFO子模块,保存输入会话表查找模块的查找关键字,在DDR控制器返回会话表项内容后,从查找关键字FIFO子模块取出查找关键字,送给查找关键字比较子模块;
查找关键字比较子模块,逐个提取同一HASH桶中会话表项的匹配关键字,与输入的查找关键字lookup_key_cmp信号做比较,如果这两个关键字相等,并且会话表项的有效标志位为1,则判断为会话表匹配,匹配信号置为1,将匹配信号match、匹配会话表项的DDR内存起始地址sess_addr和匹配会话表项内容sess_entry输出给动作执行模块;如果没有找到匹配的会话表项,则匹配信号置为0,将匹配信号match、编号最小的空闲会话表项的DDR内存起始地址sess_addr输出给动作执行模块。
作为本发明的进一步改进,所述会话表项的内容包括有效标志位、匹配关键字和操作数,有效标志位表示会话表项有效,匹配关键字用于会话表查找时的关键字比较,操作数是执行会话表动作时用到的变量;
所述DDR内存起始地址由{HASH桶索引号,HASH桶会话表项编号,会话表项偏移地址}构成;这里的DDR内存地址指的是送给DDR控制器的读、写命令地址。HASH桶会话表项编号从0开始,如配置的HASH桶会话表项数量参数为4,则HASH桶会话表项编号分别为0、1、2、3。会话表项偏移地址位宽的计算方法是,会话表项内容的数据位宽除以DDR控制器接口数据位宽参数,如能整除,则取商作为表项偏移地址数量,如不能整除,则取商加1作为表项偏移地址数量,然后取表项偏移地址数量的位宽作为表项偏移地址位宽。
作为本发明的进一步改进,读HASH桶中所有会话表项的读命令数量计算方法是,HASH桶会话表项数量参数乘以会话表项偏移地址数量,得到读命令数量,送给DDR控制器的读地址在会话表项DDR内存起始地址的基础上递增。
作为本发明的进一步改进,所述读命令子模块通过HASH桶会话表项数量参数、会话表项数据位宽和DDR控制器接口数据位宽参数自动计算读DDR命令地址和数量的方法,实现了会话表项大小和DDR控制器接口数据位宽的解耦,设计者只需要设置HASH桶会话表项数量参数,以及定义会话表内容,无需关心对接的DDR控制器接口数据位宽,读命令子模块就能够自动计算读命令地址和数量。
作为本发明的进一步改进,查找关键字FIFO子模块保存输入会话表查找模块的查找关键字,在DDR控制器返回会话表项内容后,从查找关键字FIFO子模块取出查找关键字,送给查找关键字比较子模块。
作为本发明的进一步改进,所述查找关键字FIFO子模块采用先入先出的方式保存查找关键字,当同一HASH桶会话表项的读数据返回时,取一个保存的查找关键字,通过接口信号lookup_key_cmp送给查找关键字比较子模块,这样保证了查找关键字和HASH桶会话表项数据的对应关系不会打乱。
作为本发明的进一步改进,所述查找关键字比较子模块逐个提取同一HASH桶中会话表项的匹配关键字,与输入的查找关键字lookup_key_cmp信号做比较,如果这两个关键字相等,并且会话表项的有效标志位为1,则判断为会话表匹配,匹配信号置为1,将匹配信号match、匹配会话表项的DDR内存起始地址sess_addr和匹配会话表项内容sess_entry输出给动作执行模块。如果没有找到匹配的会话表项,则匹配信号置为0,将匹配信号match、编号最小的空闲会话表项的DDR内存起始地址sess_addr输出给动作执行模块。
作为本发明的进一步改进,所述动作执行模块执行的动作包括对于会话表未匹配的情况,按照包头信息、元数据信息构造新建会话的表项。对于会话表匹配的情况,按照动作描述代码对包头信息、元数据信息、会话表操作数进行逻辑运算、算术运算和赋值操作。
进一步优选的,动作执行模块执行的动作可通过高级语言编程,P4语言的运算符号和Verilog语言的运算符号完全相同,例如都用“+”表示加法运算,用“&&”表示逻辑与运算,因此可以直接把P4程序中的运算代码转换为Verilog代码。利用这种将高级语言运算、赋值语句转换为硬件描述语言运算、赋值语句的方式,实现了会话表动作执行的高级语言可编程。由于无需预先放置大量的处理器来执行运算,将占用的FPGA逻辑资源降到最低,动作执行用到的信号直接通过FPGA的连线送给逻辑电路,不需要复杂的多路选择电路来选择信号,节省FPGA资源的同时,显著提高了动作执行模块的运行速度。
执行完动作后,将修改的包头信息、元数据信息送给后续的包转发模块,由转发模块组装输出数据包,并转发到目的端口;将新建或修改的会话表项内容、会话表项的DDR内存起始地址送给写会话表模块。
作为本发明的进一步改进,会话表项内容、会话表项的DDR内存起始地址输入写会话表模块后,由写会话表模块向读写仲裁模块发起写请求信号,得到读写仲裁模块的应答信号后,从会话表项的DDR内存起始地址开始,连续发出多个DDR内存地址的写命令。
作为本发明的进一步改进,写会话表模块是固定功能模块,通过设置的DDR控制器接口数据位宽参数,可以自动计算出写DDR表项命令的数量。计算方法是用会话表项数据位宽除以DDR接口数据位宽,如果能整除,则取商作为写DDR表项命令的数量,如果不能整除,则取商加1作为写DDR表项命令的数量。写DDR表项的地址在会话表项DDR内存起始地址的基础上递增。
作为本发明的进一步改进,通过会话表项数据位宽和DDR控制器接口数据位宽参数自动计算写DDR命令数量的方法,实现了会话表项大小和DDR接口数据位宽的解耦,设计者只需要定义会话表内容,无需关心对接的DDR控制器接口数据位宽,写会话表模块能够自动计算会话表写DDR内存的命令数量。
作为本发明的进一步改进,读写仲裁模块是固定功能模块,所述当会话表查找模块和写会话表模块同时发起请求时,读写仲裁模块轮询这两个模块的请求,当会话表查找模块和写会话表模块之间只有一个模块发起请求时,应答发起请求的那个模块。读写仲裁模块应答请求信号后,将被应答模块的读、写DDR内存命令直接送给DDR控制器。
本发明还公开了一种设备,其包括相连的处理器和存储器,所述处理器用于执行所述存储器中存储的计算机程序,以执行如上任一项所述的基于FPGA可编程会话表的处理方法。
本发明还公开了一种计算机可读存储介质,所述计算机可读存储介质包括计算机程序,当计算机程序在计算机上运行时,以执行如上任一项所述的基于FPGA可编程会话表的处理方法。
与现有技术相比,本发明的有益效果为:
第一,采用本发明的技术方案,将会话表逻辑电路固定功能和可编程功能分离,对于一个全新的会话表管理应用来说,固定功能逻辑电路无需修改,只需要用高级语言对查找关键字和会话表执行动作编程即可完成电路设计,这样大大降低了FPGA会话管理的设计难度,显著缩短了研发周期。
第二,采用本发明的技术方案,DDR接口数据位宽可以通过参数来设置,根据会话表项数据位宽,自动计算会话表查找、会话表回写的读写DDR命令数量,实现了会话表项大小和DDR接口数据位宽的解耦,可适配任意数据位宽的DDR,增强了会话表逻辑电路的可移植性。
附图说明
图1为本发明实施例一种基于FPGA的可编程会话表的逻辑电路的结构示意图。
图2为本发明实施例的会话表查找模块的结构示意图。
图3为本发明实施例的会话表存储结构示意图。
图4为本发明实施例的基于FPGA的可编程会话表的逻辑电路实例化的示意图。
图5为本发明实施例的基于FPGA的可编程会话表的逻辑电路的工作流程示意图。
具体实施方式
下面对本发明的较优的实施例作进一步的详细说明。
一种基于FPGA可编程会话表的处理方法,输入信号包括包头信息和元数据信息;所述基于FPGA可编程会话表的处理方法包括如下步骤:
从输入信号的包头信息选择查找关键字,然后使用查找关键字进行会话表查找,计算会话表的HASH桶索引号,并使用HASH桶索引号读取DDR内存中的多个会话表项,接着使用查找关键字和读取的多个会话表项中的匹配关键字进行比较,如果相同则认为会话表匹配,根据匹配会话表中的操作数,执行修改包头信息、元数据信息、会话表操作数的动作,最后将修改后的包头信息、元数据信息送给后续的包转发模块,将修改后的会话表项回写到DDR内存中。
一种基于FPGA的可编程会话表的逻辑电路,如图1所示,其包括:
包信息存储模块,用于输入的包头信息、元数据信息的存储,当需要执行动作时,将包头信息、元数据信息从缓存取出,送给动作执行模块。
查找关键字构造模块,用于产生会话表查找关键字,并将查找关键字输出给会话表查找模块。
会话表查找模块,用于会话表的查找,并将匹配的会话表项输出给动作执行模块。
动作执行模块,用于会话表的动作执行,也就是按照会话表查找模块送来的查找结果,修改并输出包头信息、元数据信息、会话表操作数。
写会话表模块,用于完成会话表项的写操作。
读写仲裁模块,用于会话表查找模块和写会话表模块的读写请求仲裁,并将读或写命令发送给DDR控制器。
其中,输入会话表逻辑电路的信号包括包头信息headers_in和元数据信息metadata_in,包信息存储模块使用FIFO保存这两个信号,当会话表查找模块输出匹配结果给动作执行模块时,按照先入先出机制,从FIFO取出一个包的包头信息headers和元数据信息metadata,送给动作执行模块。
查找关键字构造模块属于高级语言可编程模块,其输入信号是包头信息headers_in,在P4程序中定义的查找关键字是确定的某几个包头协议字段,因此可以直接将P4程序中的查找关键字赋值语句转换为Verilog语言的赋值语句,具体到FPGA电路上,就是将选定的包头信息headers_in中的包头协议字段连线到查找关键字信号,这只会占用少量的FPGA连线资源,相对于整个FPGA逻辑资源来说,几乎可以忽略不计。查找关键字构造模块输出的查找关键字信号lookup_key送给会话表查找模块,用于会话表查找地址的产生以及会话表关键字的比较。
一般采用五元组(源IP地址、目的IP地址、源端口号、目的端口号、协议类型)作为会话表的查找关键字,源IP地址、目的IP地址是指IPv4首部或者IPv6首部的源IP地址、目的IP地址,协议类型是指IPv4首部的协议字段或者IPv6首部的下一个首部(Next Header)协议字段,对于TCP协议报文,选择TCP首部的源端口号、目的端口号作为五元组的源端口号、目的端口号,对于UDP协议报文,选择UDP首部的源端口号、目的端口号作为五元组的源端口号、目的端口号。
利用这种将高级语言赋值语言转换为硬件描述语言赋值语句的方式,实现了会话查找关键字的高级语言可编程。由于只使用了连线资源,没有使用任何组合逻辑,因此将逻辑资源的使用量降到了最低,运行的速度也可以达到最快。
会话表查找模块属于固定功能模块,其输入信号包括查找关键字信号lookup_key,DDR控制器返回的读数据信号read_data,其输出信号包括送给DDR控制器的读命令信号read_command(包括读请求信号和读地址信号),送给动作执行模块的会话表匹配信号match、会话表起始地址信号sess_addr、会话表项内容sess_entry。如图2所示,会话表查找模可细分为HASH算法子模块、读命令子模块、查找关键字FIFO子模块和查找关键字比较子模块。各模块具体作用如下:
HASH算法子模块,使用预设的CRC32多项式对查找关键字进行CRC运算,得到会话表HASH桶索引号bucket_index,一个HASH桶对应多个会话表项,这些会话表项在内存中连续存放。会话表存储结构示意图如图3所示,整个内存中连续存放m个会话表HASH桶,每个HASH桶连续存放n个会话表项,其中n通过参数来配置,一般配置一个HASH桶中存放2、4、8个会话表项。对于新建的会话,就是在HASH桶中找到一个空闲的表项(表项有效标志位为零表示空闲),然后将新建的会话表项内容写入这个空闲表项,对于老化的会话,则在HASH桶中找到匹配的会话表项,并删除这个表项(将表项写为全零)。
读命令子模块,将输入的HASH桶索引号bucket_index转换为DDR内存起始地址,并向读写仲裁模块发起读请求信号,得到读写仲裁模块的应答信号后,从DDR内存起始地址开始,连续发出HASH桶中所有会话表项的读命令。
会话表项的内容包括有效标志位、匹配关键字和操作数,有效标志位表示会话表项有效,匹配关键字用于会话表查找时的关键字比较,操作数是执行会话表动作时用到的变量。
DDR内存起始地址由{HASH桶索引号,HASH桶会话表项编号,会话表项偏移地址}构成。这里的DDR内存地址指的是送给DDR控制器的读、写命令地址。HASH桶会话表项编号从0开始,如配置的HASH桶会话表项数量参数为4,则HASH桶会话表项编号分别为0、1、2、3。会话表项偏移地址位宽的计算方法是,会话表项内容的数据位宽除以DDR控制器接口数据位宽参数,如能整除,则取商作为表项偏移地址数量,如不能整除,则取商加1作为表项偏移地址数量,然后取表项偏移地址数量的位宽作为表项偏移地址位宽,例如会话表项内容的数据位宽为1390比特,DDR控制器接口数据位宽参数为256比特,1390除256,商为5,余数为110,计算得到的表项偏移地址数量是6,表项偏移地址范围是0~5,则需要位宽为3比特的信号来表示这个范围的偏移地址,那么表项偏移地址位宽就是3。
读HASH桶中所有会话表项的读命令数量计算方法是,HASH桶会话表项数量参数乘以会话表项偏移地址数量,例如HASH桶会话表项数量参数为4,会话表项偏移地址数量为6,则计算得到的读命令数量为24,送给DDR控制器的读地址在会话表项DDR内存起始地址的基础上递增。
通过HASH桶会话表项数量参数、会话表项数据位宽和DDR控制器接口数据位宽参数自动计算读DDR命令地址和数量的方法,实现了会话表项大小和DDR控制器接口数据位宽的解耦,设计者只需要设置HASH桶会话表项数量参数,以及定义会话表内容,无需关心对接的DDR控制器接口数据位宽,读命令子模块就能够自动计算读命令地址和数量。
查找关键字FIFO子模块,保存输入会话表查找模块的查找关键字,在DDR控制器返回会话表项内容后,从查找关键字FIFO子模块取出查找关键字,送给查找关键字比较子模块。
其中,查找关键字FIFO子模块采用先入先出的方式保存查找关键字,当同一HASH桶会话表项的读数据返回时,取一个保存的查找关键字,通过接口信号lookup_key_cmp送给查找关键字比较子模块,这样保证了查找关键字和HASH桶会话表项数据的对应关系不会打乱。
查找关键字比较子模块,逐个提取同一HASH桶中会话表项的匹配关键字,与输入的查找关键字lookup_key_cmp信号做比较,如果这两个关键字相等,并且会话表项的有效标志位为1,则判断为会话表匹配,匹配信号置为1,将匹配信号match、匹配会话表项的DDR内存起始地址sess_addr和匹配会话表项内容sess_entry输出给动作执行模块。如果没有找到匹配的会话表项,则匹配信号置为0,将匹配信号match、编号最小的空闲会话表项的DDR内存起始地址sess_addr输出给动作执行模块。
动作执行模块执行的动作包括:对于会话表未匹配的情况,按照包头信息、元数据信息构造新建会话的表项;对于会话表匹配的情况,则按照动作描述代码对包头信息、元数据信息、会话表操作数进行逻辑运算、算术运算和赋值操作。
动作执行模块执行的动作可通过高级语言编程,P4语言的运算符号和Verilog语言的运算符号完全相同,例如都用“+”表示加法运算,用“&&”表示逻辑与运算,因此可以直接把P4程序中的运算代码转换为Verilog代码。
利用这种将高级语言运算、赋值语句转换为硬件描述语言运算、赋值语句的方式,实现了会话表动作执行的高级语言可编程。由于无需预先放置大量的处理器来执行运算,将占用的FPGA逻辑资源降到最低,动作执行用到的信号直接通过FPGA的连线送给逻辑电路,不需要复杂的多路选择电路来选择信号,节省FPGA资源的同时,显著提高了动作执行模块的运行速度。
执行完动作后,将修改的包头信息、元数据信息送给后续的包转发模块,由转发模块组装输出数据包,并转发到目的端口。将新建或修改的会话表项内容、会话表项的DDR内存起始地址送给写会话表模块。
会话表项内容、会话表项的DDR内存起始地址输入写会话表模块后,由写会话表模块向读写仲裁模块发起写请求信号,得到读写仲裁模块的应答信号后,从会话表项的DDR内存起始地址开始,连续发出多个DDR内存地址的写命令。
写会话表模块是固定功能模块,通过设置的DDR控制器接口数据位宽参数,可以自动计算出写DDR表项命令的数量。计算方法是用会话表项数据位宽除以DDR接口数据位宽,如果能整除,则取商作为写DDR表项命令的数量,如果不能整除,则取商加1作为写DDR表项命令的数量。写DDR表项的地址在会话表项DDR内存起始地址的基础上递增。
通过会话表项数据位宽和DDR控制器接口数据位宽参数自动计算写DDR命令数量的方法,实现了会话表项大小和DDR接口数据位宽的解耦,设计者只需要定义会话表内容,无需关心对接的DDR控制器接口数据位宽,写会话表模块能够自动计算会话表写DDR内存的命令数量。
读写仲裁模块是固定功能模块,当会话表查找模块和写会话表模块同时发起请求时,读写仲裁模块轮询这两个模块的请求,也就是,如果上次应答了写会话表模块的请求,则这次应答会话表查找模块请求;反之,如果上次应答了会话表查找模块请求,则这次应答写会话表模块的请求。当会话表查找模块和写会话表模块之间只有一个模块发起请求时,应答发起请求的那个模块。
读写仲裁模块应答请求信号后,将被应答模块的读、写DDR内存命令直接送给DDR控制器。
如上所述,可编程会话表逻辑电路按照设计方法可分为两部分,第一部分是固定功能的逻辑电路,包括包信息存储模块、会话表查找模块、写会话表模块和读写仲裁模块,这部分逻辑电路已预先设计好,对于不同功能的会话表和不同接口数据位宽的DDR内存,这部分逻辑电路都是相同的,只需完成模块实例化、会话表内容定义和DDR接口数据位宽参数的设置。另一部分是高级语言(如P4语言)可编程逻辑电路,包括查找关键字构造模块和动作执行模块,这部分逻辑电路与具体的会话表管理功能相关,查找关键字和会话表执行的动作均通过高级语言(如P4语言)编程,并自动转换为硬件描述语言(如verilog语言),不同会话管理功能的应用,需要用高级语言编写不同的代码。
下文将以P4语言描述的一个会话表为例,详细说明基于FPGA的可编程会话表逻辑电路的实例化流程。
P4语言描述的一个典型的会话表如下所示:
const BUCKET_NUM = 1024*1024; //定义会话表HASH桶数量为1048576个
const SESS_NUM_IN_BUCKET = 4; //定义HASH桶会话表数量为4个
// 会话表匹配关键字定义
struct key_t {
bit<128> sip;
bit<128> dip;
bit<8> ip_protocol;
bit<16> sport;
bit<16> dport;
}
// 会话表操作数定义
struct oprand_t {
bit<128> new_sip;
bit<48> byte_cnt;
bit<48> packet_cnt;
}
// 会话表内容定义
struct sess_entry_t {
bit<1> table_valid;
key_t key;
oprand_t oprand;
}
// 定义外部对象sess_fixed,用于定义会话表管理的固定功能模块
extern sess_fixed (in Header_t headers, in Metadata_t metadata, inkey_t lookup_key, out bool match, out sess_entry);
// 查找关键字构造,以TCP协议为例
action key_construct () {
lookup_key.sip = headers.ipv6.srcAddr;
lookup_key.dip = headers.ipv6.dstAddr;
lookup_key.ip_protocol = headers.ipv6.next_header;
lookup_key.sport = headers.tcp.src_port;
lookup_key.dport = headers.tcp.dst_port;
}
// 动作执行
action action_exe() {
if (match) {
headers.ipv6.srcAddr = sess_entry.oprand.new_sip;
sess_entry.oprand.byte_cnt = sess_entry.oprand.byte_cnt +
metadata.packet_length;
sess_entry.oprand.packet_cnt = sess_entry.oprand.packet_cnt + 1;
} else {
headers.ipv6.srcAddr = metadata.new_sip;
sess_entry.table_valid = 1;
sess_entry.key = lookup_key;
sess_entry.oprand. new_sip = metadata.new_sip;
sess_entry.oprand.byte_cnt = metadata.packet_length;
sess_entry.oprand.packet_cnt = 1;
}
}
由上面的P4代码可见,P4语言描述的会话表包括以下语句:
第一部分是会话表容量和会话表内容定义,会话表容量通过两个常量定义,分别是HASH桶数量BUCKET_NUM和HASH桶会话表数量SESS_NUM_IN_BUCKET,这两个常量相乘的结果就是会话表的容量,会话表内容由三个信号构成,分别是表项有效信号table_valid、匹配关键字信号key和操作数oprand,其中匹配关键字由源IP地址、目的IP地址、协议号、四层源端口号、四层目的端口号这五元构成,操作数由新的源IP地址new_sip、包长统计计数byte_cnt、包数量统计计数packet_cnt三个信号构成。
第二部分是会话表管理固定功能定义,在P4程序里使用extern关键字定义外部对象sess_fixed,表示调用会话表管理的固定功能模块,包括包信息存储模块、会话表查找模块、写会话表模块和读写仲裁模块。
第三部分是会话表查找关键字构造,通过一个action语句块来定义,查找关键字的源IP地址信号sip来自IPv6包头的源IP地址srcAddr,目的IP地址信号dip来自IPv6包头的目的IP地址dstAddr,协议号信号ip_protocol来自IPv6包头的下一个包头next_header,四层源端口号信号来自TCP包头的源端口号src_port,四层目的端口号信号来自TCP包头的目的端口号dst_port。
第四部分是会话表动作执行,其中match信号表示会话表查找模块输出的匹配信号,当匹配信号match为1时(表示匹配了会话表),将会话表操作数new_sip赋值给IPv6包头的源IP地址,同时将当前包的字节长度累加到会话表包长统计计数byte_cnt中,会话表包数量统计计数packet_cnt也累加1;当匹配信号match为0时(表示未匹配会话表),将元数据信息中的new_sip赋值给IPv6包头的源IP地址,同时构造新建会话的表项,将会话表项有效信号table_valid设置为1,将之前构造的查找关键字lookup_key赋值给会话表项匹配关键字key,将元数据信息中的new_sip赋值给会话表项操作数new_sip,将当前包长赋值给会话表项操作数byte_cnt,会话表项操作数packet_cnt赋值为1。
如图4所示,本实施例实现的会话表逻辑电路实例化流程包括:
1)实例化查找关键字构造模块,构造并输出查找关键字信号。按照P4代码定义的查找关键字结构体key_t,定义相同数据结构的查找关键字信号lookup_key,将P4代码中的查找关键字构造语句转换为如下的verilog代码:
lookup_key.sip = headers_in.ipv6.srcAddr;
lookup_key.dip = headers_in.ipv6.dstAddr;
lookup_key.ip_protocol = headers_in.ipv6.next_header;
lookup_key.sport = headers_in.tcp.src_port;
lookup_key.dport = headers_in. tcp.dst_port;
2)实例化会话表查找模块,该模块已预先设计好,只需设置输入与输出信号的位宽参数。经计算,P4代码定义的查找关键字结构体key_t数据位宽为296比特,因此设置输入查找关键字信号数据位宽为296比特。
送给DDR控制器的读命令地址由HASH桶索引号、HASH桶会话表项编号、会话表项偏移地址三个信号构成,P4代码定义的HASH桶数量是1024*1024个,因此HASH桶索引号可用20比特数据位宽的信号表示;HASH桶会话表数量为4个,因此HASH桶会话表项编号可用2比特数据位宽的信号表示;会话表项内容包括1比特位宽的表项有效信号,296比特位宽的匹配关键字信号,224比特位宽的操作数信号,因此会话表项内容的数据位宽是521比特,这里设置DDR控制器接口数据位宽参数为256比特,521除256,商2,余数为9,计算得到的会话表项偏移地址数量是3,表项偏移地址范围是0~2,则需要位宽为2比特的信号来表示这个范围的偏移地址,那么表项偏移地址位宽就是2。HASH桶索引号、HASH桶会话表项编号、会话表项偏移地址这三个信号的位宽之和为24比特,因此设置读命令地址位宽参数为24。
按照上面计算,设置输出的会话表起始地址信号sess_addr位宽参数为24,会话表项内容信号sess_entry位宽参数为521。
3)实例化包信息存储模块,该模块已预先设计好,无需修改。
4)实例化动作执行模块,按照上面计算,设置输入的会话表起始地址信号sess_addr位宽参数为24,会话表项内容信号sess_entry位宽参数为521,设置输出的写DDR命令起始地址信号sess_addr_wr位宽参数为24,会话表项内容信号sess_entry_wr位宽参数为521。将P4代码中的动作执行语句转换为如下的verilog代码:
metadata_out = metadata;
headers_out = headers;
if (match) {
headers_out.ipv6.srcAddr = sess_entry.oprand.new_sip;
sess_entry_wr = sess_entry;
sess_entry_wr.oprand.byte_cnt = sess_entry.oprand.byte_cnt +
metadata.packet_length;
sess_entry_wr.oprand.packet_cnt = sess_entry.oprand.packet_cnt + 1;
} else {
headers_out.ipv6.srcAddr = metadata.new_sip;
sess_entry_wr.table_valid = 1;
sess_entry_wr. key = lookup_key;
sess_entry_wr.oprand. new_sip = metadata.new_sip;
sess_entry_wr.oprand.byte_cnt = metadata.packet_length;
sess_entry_wr.oprand.packet_cnt = 1;
}
5)实例化写会话表模块,设置输入的写DDR命令起始地址信号sess_addr_wr位宽参数为24,会话表项内容信号sess_entry_wr位宽参数为521。
6)实例化读写仲裁模块,设置读写命令的地址信号位宽参数为24。
7)将输入会话表逻辑电路的包头信息headers_in、元数据信息metadata_in连接到查找关键字构造模块和包信息存储模块;将查找关键字构造模块输出的查找关键字信号lookup_key连接到会话表查找模块;将DDR控制器输出的读数据信号read_data连接到会话表查找模块,将会话表查找模块输出的读命令信号read_command连接到读写仲裁模块,匹配信号match、会话表项的DDR内存起始地址sess_addr和匹配会话表项内容sess_entry连接到动作执行模块;将包信息存储模块输出的包头信息headers、元数据信息metadata连接到动作执行模块;将动作执行模块输出的包头信息headers_out、元数据信息metadata_out送给后续转发模块,会话表项内容sess_entry_wr、会话表项的DDR内存起始地址信号sess_addr_wr连接到写会话表模块;将写会话表模块输出的写DDR内存命令信号write_command连接到读写仲裁模块;将读写仲裁模块输出的DDR内存读写命令信号mem_command送给DDR控制器。完成上述模块连接后,就得到了一个P4语言定义的会话表逻辑电路。
如图5所示,本实施例的工作流程包括:
1)当输入的包信息有效时,查找关键字构造模块从包头信息提取查找关键字信号,并将该信号送给会话表查找模块。
2)会话表查找模块使用预设的CRC32多项式对查找关键字进行CRC运算,得到会话表HASH桶索引号,然后读取这个HASH桶对应的4个会话表项,使用查找关键字和会话表项中的匹配关键字做对比,两者相同,则认为会话表匹配,输出匹配信号为1、匹配的会话表项起始地址以及匹配的会话表项内容到动作执行模块;如果所有会话表项的匹配关键字和查找关键字都不相同,则认为会话表未匹配,输出匹配信号为0、HASH桶空闲的会话表项起始地址到动作执行模块。
3)当会话表查找模块输出一个包的会话表查找结果信号给动作执行模块时,从包信息存储模块读取一个包头信息和元数据信息,送给动作执行模块。
4)动作执行模块根据高级语言(例如P4语言)定义,对于匹配会话表项的包,修改IPv6包头的源IP地址,累加包的字节长度到会话表包长统计计数byte_cnt,会话表包数量统计计数packet_cnt也累加1;对于未匹配会话表项的包,将元数据信息中的new_sip赋值给IPv6包头的源IP地址,构造新建会话的表项,方法是:设置会话表项有效信号table_valid为1,将查找关键字lookup_key赋值给会话表项匹配关键字key,将当前包长赋值给会话表项操作数byte_cnt,会话表项操作数packet_cnt赋值为1。
5)将修改后的会话表项内容回写到DDR内存,输出修改后的包头信息、元数据信息到下级模块。
综上可见,上述实施例的技术方案采用会话表逻辑电路固定功能和可编程功能分离的设计方法,会话表查找与更新采用固定功能逻辑电路,只需完成一次电路设计,即可适用于任意的会话表管理应用;会话表查找关键字、动作执行采用高级语句编程设计,对于不同会话表管理应用,只需用高级语言来编程差异化的功能。且DDR接口数据位宽通过参数来设置,根据高级语言定义的会话表项数据位宽自动计算读写DDR命令数量,实现了会话表项大小和DDR接口数据位宽的解耦。
本发明的实施例还公开了一种设备,其包括相连的处理器和存储器,所述处理器用于执行所述存储器中存储的计算机程序,以执行如上所述的基于FPGA可编程会话表的处理方法。
本发明的实施例还公开了一种计算机可读存储介质,所述计算机可读存储介质包括计算机程序,当计算机程序在计算机上运行时,以执行如上所述的基于FPGA可编程会话表的处理方法。
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。
Claims (10)
1.一种基于FPGA可编程会话表的处理方法,其特征在于:
所述基于FPGA可编程会话表的处理方法包括如下步骤:
从输入信号的包头信息选择查找关键字,然后使用查找关键字进行会话表查找,计算会话表的HASH桶索引号,并使用HASH桶索引号读取DDR内存中的多个会话表项,接着使用查找关键字和读取的多个会话表项中的匹配关键字进行比较,如果相同则认为会话表匹配,根据匹配会话表中的操作数,执行修改包头信息、元数据信息、会话表操作数的动作,最后将修改后的包头信息、元数据信息送给后续的包转发模块,将修改后的会话表项回写到DDR内存中; 其中,所述查找关键字采用高级语言可编程的方式,通过输入包头信息headers_in,将选定的包头信息headers_in中的包头协议字段连线到查找关键字信号,输出查找关键字信号lookup_key,产生会话表查找地址,并进行会话表关键字的比较;
所述执行修改包头信息、元数据信息、会话表操作数的动作包括按照包头信息、元数据信息构造新建会话的表项,对于会话表匹配的情况,按照动作描述代码对包头信息、元数据信息、会话表操作数进行逻辑运算、算术运算和赋值操作。
2.根据权利要求1所述的基于FPGA可编程会话表的处理方法,其特征在于:
所述会话表查找包括:
采用HASH算法,使用预设的CRC32多项式对查找关键字进行CRC运算,得到会话表HASH桶索引号bucket_index,一个HASH桶对应多个会话表项,这些会话表项在内存中连续存放;
将输入的HASH桶索引号bucket_index转换为DDR内存起始地址,并从DDR内存起始地址开始,连续发出HASH桶中所有会话表项的读命令;
保存输入的查找关键字,在DDR控制器返回会话表项内容后,逐个提取同一HASH桶中会话表项的匹配关键字,与输入的查找关键字lookup_key_cmp信号做比较,如果这两个关键字相等,并且会话表项的有效标志位为1,则判断为会话表匹配,匹配信号置为1,将匹配信号match、匹配会话表项的DDR内存起始地址sess_addr和匹配会话表项内容sess_entry输出;如果没有找到匹配的会话表项,则匹配信号置为0,将匹配信号match、编号最小的空闲会话表项的DDR内存起始地址sess_addr输出。
3.根据权利要求2所述的基于FPGA可编程会话表的处理方法,其特征在于:所述会话表项的内容包括有效标志位、匹配关键字和操作数;
所述DDR内存起始地址由{HASH桶索引号,HASH桶会话表项编号,会话表项偏移地址}构成;
读命令时,通过HASH桶会话表项数量参数、会话表项数据位宽和DDR控制器接口数据位宽参数自动计算读DDR命令地址和数量;
采用先入先出的方式保存查找关键字,当同一HASH桶会话表项的读数据返回时,取一个保存的查找关键字,通过接口信号lookup_key_cmp输出进行比较。
4.根据权利要求3所述的基于FPGA可编程会话表的处理方法,其特征在于:
使用FIFO保存包头信息、元数据信息,当输出匹配结果进行执行时,按照先入先出机制,从FIFO取出一个包的包头信息headers和元数据信息metadata进行执行;
所述查找关键字采用五元组:源IP地址、目的IP地址、源端口号、目的端口号、协议类型;其中源IP地址、目的IP地址为IPv4首部或者IPv6首部的源IP地址、目的IP地址,协议类型为IPv4首部的协议字段或者IPv6首部的下一个首部协议字段,对于TCP协议报文,选择TCP首部的源端口号、目的端口号作为五元组的源端口号、目的端口号,对于UDP协议报文,选择UDP首部的源端口号、目的端口号作为五元组的源端口号、目的端口号;
所述会话表查找的输入信号包括查找关键字信号lookup_key、DDR控制器返回的读数据信号read_data,输出信号包括送给DDR控制器的读命令信号read_command,用于动作执行的会话表匹配信号match、会话表起始地址信号sess_addr、会话表项内容sess_entry;
执行完动作后,将修改的包头信息、元数据信息送给后续的包转发模块,由转发模块组装输出数据包,并转发到目的端口;将新建或修改的会话表项内容、会话表项的DDR内存起始地址输出,然后从会话表项的DDR内存起始地址开始,连续发出多个DDR内存地址的写命令,通过设置的DDR控制器接口数据位宽参数,自动计算出写DDR内存命令的数量。
5.一种基于FPGA的可编程会话表的逻辑电路,其特征在于,其包括:
包信息存储模块,用于输入的包头信息、元数据信息的存储,当需要执行动作时,将包头信息、元数据信息从缓存取出,送给动作执行模块;
查找关键字构造模块,用于产生会话表查找关键字,并将查找关键字输出给会话表查找模块;
会话表查找模块,用于会话表的查找,并将匹配的会话表项输出给动作执行模块;
动作执行模块,用于会话表的动作执行,按照会话表查找模块送来的查找结果,修改并输出包头信息、元数据信息、会话表操作数;
写会话表模块,用于完成会话表项的写操作;
读写仲裁模块,用于会话表查找模块和写会话表模块的读写请求仲裁,并将读或写命令发送给DDR控制器;
所述查找关键字构造模块为高级语言可编程模块,其通过输入包头信息headers_in,将选定的包头信息headers_in中的包头协议字段连线到查找关键字信号,输出查找关键字信号lookup_key送给会话表查找模块,用于会话表查找地址的产生以及会话表关键字的比较;
所述动作执行模块执行的动作包括对于会话表未匹配的情况,按照包头信息、元数据信息构造新建会话的表项;对于会话表匹配的情况,按照动作描述代码对包头信息、元数据信息、会话表操作数进行逻辑运算、算术运算和赋值操作。
6.根据权利要求5所述的一种基于FPGA的可编程会话表的逻辑电路,其特征在于:所述会话表查找模块包括:
HASH算法子模块,使用预设的CRC32多项式对查找关键字进行CRC运算,得到会话表HASH桶索引号bucket_index,一个HASH桶对应多个会话表项,这些会话表项在内存中连续存放;
读命令子模块,将输入的HASH桶索引号bucket_index转换为DDR内存起始地址,并向读写仲裁模块发起读请求信号,得到读写仲裁模块的应答信号后,从DDR内存起始地址开始,连续发出HASH桶中所有会话表项的读命令;
查找关键字FIFO子模块,保存输入会话表查找模块的查找关键字,在DDR控制器返回会话表项内容后,从查找关键字FIFO子模块取出查找关键字,送给查找关键字比较子模块;
查找关键字比较子模块,逐个提取同一HASH桶中会话表项的匹配关键字,与输入的查找关键字lookup_key_cmp信号做比较,如果这两个关键字相等,并且会话表项的有效标志位为1,则判断为会话表匹配,匹配信号置为1,将匹配信号match、匹配会话表项的DDR内存起始地址sess_addr和匹配会话表项内容sess_entry输出给动作执行模块;如果没有找到匹配的会话表项,则匹配信号置为0,将匹配信号match、编号最小的空闲会话表项的DDR内存起始地址sess_addr输出给动作执行模块。
7.根据权利要求6所述的一种基于FPGA的可编程会话表的逻辑电路,其特征在于:
所述会话表项的内容包括有效标志位、匹配关键字和操作数,其中,有效标志位表示会话表项有效,匹配关键字用于会话表查找时的关键字比较,操作数是执行会话表动作时用到的变量;
所述DDR内存起始地址由{HASH桶索引号,HASH桶会话表项编号,会话表项偏移地址}构成;
所述读命令子模块通过HASH桶会话表项数量参数、会话表项数据位宽和DDR控制器接口数据位宽参数自动计算读DDR命令地址和数量;
所述查找关键字FIFO子模块采用先入先出的方式保存查找关键字,当同一HASH桶会话表项的读数据返回时,取一个保存的查找关键字,通过接口信号lookup_key_cmp送给查找关键字比较子模块。
8.根据权利要求5所述的一种基于FPGA的可编程会话表的逻辑电路,其特征在于:
所述包信息存储模块使用FIFO保存包头信息、元数据信息,当会话表查找模块输出匹配结果给动作执行模块时,按照先入先出机制,从FIFO取出一个包的包头信息headers和元数据信息metadata,送给动作执行模块;
所述会话表的查找关键字采用五元组:源IP地址、目的IP地址、源端口号、目的端口号、协议类型;其中源IP地址、目的IP地址为IPv4首部或者IPv6首部的源IP地址、目的IP地址,协议类型为IPv4首部的协议字段或者IPv6首部的下一个首部协议字段,对于TCP协议报文,选择TCP首部的源端口号、目的端口号作为五元组的源端口号、目的端口号,对于UDP协议报文,选择UDP首部的源端口号、目的端口号作为五元组的源端口号、目的端口号;
所述会话表查找模块的输入信号包括查找关键字信号lookup_key、DDR控制器返回的读数据信号read_data,输出信号包括送给DDR控制器的读命令信号read_command,送给动作执行模块的会话表匹配信号match、会话表起始地址信号sess_addr、会话表项内容sess_entry;
所述动作执行模块执行完动作后,将修改的包头信息、元数据信息送给后续的包转发模块,由转发模块组装输出数据包,并转发到目的端口;将新建或修改的会话表项内容、会话表项的DDR内存起始地址送给写会话表模块;
所述写会话表模块获得输入信号后,向读写仲裁模块发起写请求信号,得到读写仲裁模块的应答信号后,从会话表项的DDR内存起始地址开始,连续发出多个DDR内存地址的写命令;所述写会话表模块通过设置的DDR控制器接口数据位宽参数,自动计算出写DDR表项命令的数量;
所述当会话表查找模块和写会话表模块同时发起请求时,读写仲裁模块轮询这两个模块的请求,当会话表查找模块和写会话表模块之间只有一个模块发起请求时,应答发起请求的那个模块;读写仲裁模块应答请求信号后,将被应答模块的读、写DDR内存命令直接送给DDR控制器。
9.一种设备,其包括相连的处理器和存储器,其特征在于:所述处理器用于执行所述存储器中存储的计算机程序,以执行如权利要求1~4中任一项所述的基于FPGA可编程会话表的处理方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质包括计算机程序,当计算机程序在计算机上运行时,以执行如权利要求1~4中任一项所述的基于FPGA可编程会话表的处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110609968.4A CN113411380B (zh) | 2021-06-01 | 2021-06-01 | 基于fpga可编程会话表的处理方法、逻辑电路和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110609968.4A CN113411380B (zh) | 2021-06-01 | 2021-06-01 | 基于fpga可编程会话表的处理方法、逻辑电路和设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113411380A CN113411380A (zh) | 2021-09-17 |
CN113411380B true CN113411380B (zh) | 2022-10-14 |
Family
ID=77675733
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110609968.4A Active CN113411380B (zh) | 2021-06-01 | 2021-06-01 | 基于fpga可编程会话表的处理方法、逻辑电路和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113411380B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114499889B (zh) * | 2022-02-24 | 2023-06-30 | 成都北中网芯科技有限公司 | 一种适合网络处理芯片存储超大规格会话的方法 |
CN114968872A (zh) * | 2022-05-11 | 2022-08-30 | 天津光电聚能专用通信设备有限公司 | 基于fpga和cpu协同工作的高速关键字过滤方法 |
CN117119073A (zh) * | 2023-07-26 | 2023-11-24 | 中国人民解放军战略支援部队信息工程大学 | 一种面向协议转换的软件定义报文处理方法及装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102025643A (zh) * | 2010-12-30 | 2011-04-20 | 华为技术有限公司 | 一种流表查找方法和装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20080083828A (ko) * | 2007-03-13 | 2008-09-19 | 삼성전자주식회사 | 상태기반 패킷필터링 장치 및 그 장치에서의 테이블 관리방법 |
US10268464B2 (en) * | 2017-07-07 | 2019-04-23 | Intel Corporation | Technologies for network application programming with field-programmable gate arrays |
CN109634966A (zh) * | 2018-12-17 | 2019-04-16 | 广州天懋信息系统股份有限公司 | 基于哈希算法的千万级网络会话表管理方法、系统、介质和设备 |
-
2021
- 2021-06-01 CN CN202110609968.4A patent/CN113411380B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102025643A (zh) * | 2010-12-30 | 2011-04-20 | 华为技术有限公司 | 一种流表查找方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN113411380A (zh) | 2021-09-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113411380B (zh) | 基于fpga可编程会话表的处理方法、逻辑电路和设备 | |
CN108809854B (zh) | 一种用于大流量网络处理的可重构芯片架构 | |
US9495479B2 (en) | Traversal with arc configuration information | |
US9787693B2 (en) | Graph caching | |
US8819217B2 (en) | Intelligent graph walking | |
US8176300B2 (en) | Method and apparatus for content based searching | |
CN108833299B (zh) | 一种基于可重构交换芯片架构的大规模网络数据处理方法 | |
EP2215565A1 (en) | Deterministic finite automata (dfa) graph compression | |
EP2215563A1 (en) | Method and apparatus for traversing a deterministic finite automata (dfa) graph compression | |
CN113824706B (zh) | 报文解析方法及网络设备 | |
CN102111331A (zh) | 一种基于hash表实现的带掩码五元组规则的匹配方法 | |
US7937495B2 (en) | System and method for modifying data transferred from a source to a destination | |
CN115917473A (zh) | 用分布式lpm实现的高度可扩展算法构建数据结构的系统 | |
CN113037634A (zh) | 基于fpga的匹配动作表的处理方法、逻辑电路和设备 | |
US7653070B2 (en) | Method and system for supporting efficient and cache-friendly TCP session lookup operations based on canonicalization tags | |
CN112866139A (zh) | 一种多规则流分类的实现方法、设备和存储介质 | |
CN116599892B (zh) | 一种服务器系统、路由方法、装置及电子设备和存储介质 | |
CN115996203B (zh) | 网络流量分域方法、装置、设备和存储介质 | |
CN114338529B (zh) | 五元组规则匹配方法及装置 | |
Hsu et al. | The design of a configurable and low-latency packet parsing system for communication networks | |
Geethakumari et al. | Streamzip: Compressed sliding-windows for stream aggregation | |
Chen et al. | A large capacity programmable packet forwarding device | |
CN116886605B (zh) | 一种流表卸载系统、方法、设备以及存储介质 | |
CN117714398B (zh) | 一种数据传输系统、方法、电子设备及存储介质 | |
JP2009123050A (ja) | 情報検索装置、及び情報検索装置へのエントリ情報の登録方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20211207 Address after: 518000 6520, building 7, block a, Bao'an Internet industry base, houye community, Xixiang street, Bao'an District, Shenzhen, Guangdong Province Applicant after: Shenzhen Xinyuan Network Technology Co.,Ltd. Address before: 912, central business building, 88 Fuhua 1st Road, Futian District, Shenzhen, Guangdong 518000 Applicant before: Li Yuanping |
|
GR01 | Patent grant | ||
GR01 | Patent grant |