XS-TCAM-104x320:基于FPGA的TCAM开源实现(二)
发布时间: 2018-03-15
在之前的公众号文(wén)章中我们為(wèi)大家介绍了湖(hú)南新(xīn)实设计的新(xīn)IP核:XS-TCAM-104x320的硬件设计及其具體(tǐ)实现,本篇文(wén)章则针对XS-TCAM-104x320 IP核的软件部分(fēn)API的使用(yòng)进行说明,如图1所示,软件的实现是通过在FAST 软件库中添加Libbv库来实现流表数据的各类操作(图内标红部分(fēn))。本期文(wén)章将着重為(wèi)大家介绍Libbv库的相关接口以及使用(yòng)方法。
图1 FAST实现结构图
一、软件代码说明
当前的XS-TCAM-104x320 IP 核共支持320条表项,每条表项基于五元组(源、目的IP地址,协议号,源、目的端口号)进行匹配,因此其软件部分(fēn)声明的数据结构定义如下:
用(yòng)户在调用(yòng)数据结构时,需遵守FAST-0.2.0规范,即key值与mask值需一一对应,以下是填充上述数据结构的示例代码:
在示例代码中,proto字段為(wèi)0,代表匹配ARP类型的报文(wén),所以上述示例代码的执行结果是:添加了两条流表,一条支持ICMP报文(wén)转发到2号端口,一条支持ARP报文(wén)转发到2号端口。
在填充完流表之后,用(yòng)户可(kě)通过调用(yòng)為(wèi)XS-TCAM-104x320定制的API接口将流表下发到硬件中,API接口如下所示:
用(yòng)户可(kě)在任何UA应用(yòng)中调用(yòng)上述接口,实现对XS-TCAM-104x320流表的操作。
二、示例代码运行结果
在该示例代码中,用(yòng)户可(kě)以通过参数控制4条流表的写入位置用(yòng)来测试当前流表项位于不同的地址时,硬件查表逻辑是否能(néng)正常执行。用(yòng)户可(kě)在r1()和r2()两个函数中自行定义4条规则的内容,然后在运行示例代码时使用(yòng)参数控制流表写入的位置,运行示例代码的命令如下所示:
其中参数“1”是指第一条流表将写入idx為(wèi)1的地址,参数“3”是指将第二条流表写入idx為(wèi)3的地址。请注意,两条规则的地址相差必须大于2,否则会前后相互覆盖,造成未知的错误。最后一个参数“64”是指在idx0-idx63之间(除了用(yòng)户指定的流表位置)写满随机内容的流表,用(yòng)于测试整个流表空间的查表能(néng)力。
在流表写入之后,用(yòng)户根据流表将IP地址為(wèi)1.2.3.4和1.2.3.5的主机分(fēn)别接入1、2号端口,即可(kě)相互正常通信,如图2所示:
图2 客户端ping命令执行截图
三、源码的下载
支持XS-TCAM-104x320的新(xīn)版本FAST软件开发环境现已上传至FAST社區(qū)官方网站,用(yòng)户可(kě)切换至“代码”选项卡,点击“FAST UA”选项,然后点击图3按钮即可(kě)下载新(xīn)版本的软件开发环境:
图3 软件下载网页
用(yòng)户下载后可(kě)在linux中输入命令解压文(wén)件:
解压完成之后,输入如下命令进行配置和编译:
上述命令执行完成后,用(yòng)户可(kě)在fast-0.2.0/tools/bv目录下找到上述的示例源码。
如对XS-TCAM-104x320 IP在软硬件代码下载或测试过程中有(yǒu)遇到任何问题,可(kě)以通过微信直接与我们联系,我们会尽快给与回复。