FAST软件编程基础(1)Fast_packet数据结构
发布时间:2019-4-18
FAST的核心优点是支持软硬协同的分(fēn)组处理(lǐ)。在FAST架构中,用(yòng)户在Linux用(yòng)户空间编写的进程称為(wèi)UA(User Application)。在FAST硬件流水線(xiàn)确定后,用(yòng)户可(kě)通过UA编程实现对硬件流水線(xiàn)的控制,从硬件流水線(xiàn)接收分(fēn)组,或将分(fēn)组发往硬件流水線(xiàn)进行处理(lǐ)和转发。
一、Fast_packet数据结构
Fast_packet是UA编程必须使用(yòng)的核心数据结构,UA通过FAST编程API收发的分(fēn)组均使用(yòng)Fast_packet结构定义。fast_packet主要由用(yòng)户模块(UM)头标识,对齐标志(zhì)以及完整的以太网报文(wén)三部分(fēn)组成,如下所示。
Fast报文(wén)分(fēn)為(wèi)数据报文(wén)和控制报文(wén)两种类型。数据报文(wén)的data中存储完整以太网报文(wén),用(yòng)于UA和FAST流水線(xiàn)之间,以及UA之间分(fēn)组的交换;Fast控制报文(wén)用(yòng)于UA 和Fast流水線(xiàn)之间的控制通信,如UA对流水線(xiàn)中相应模块中寄存器、计数器和控制表的读写等操作。控制报文(wén)的data值為(wèi)空。
Flag字段為(wèi)2字节,主要有(yǒu)两个作用(yòng)。一是将14字节的以太网头补齐為(wèi)16字节,将IP分(fēn)组的头对齐到16字节边界,便于软硬件的处理(lǐ)。二是FAST内核软件使用(yòng)该标志(zhì)来标记FAST报文(wén)。用(yòng)户可(kě)以不初始化和使用(yòng)该字段。
二、um_metadata结构定义
FAST数据报文(wén)中的um_metadata结构负责在软硬件模块之间传递分(fēn)组的元数据信息,主要包含报文(wén)时间戳,序号,源目的MID,报文(wén)長(cháng)度,端口号等,详细定义如下:
UA编程时,需要对um_metadata结构體(tǐ)中的discard、pktdst、pktsrc、outport、dstmid、srcmid、inport、flowID、len等字段进行初始化。
discard表示报文(wén)是否丢弃,默认為(wèi)0,表示不丢弃,置1时表示丢弃,如执行ddos防御策略时,异常报文(wén)流要丢弃,此时discard必须设置為(wèi)1;
pktdst、pktsrc标识报文(wén)的输入输出方向,0表示输出到网络端口,1表示输出到CPU。如UA处理(lǐ)后的报文(wén)需要发送到网络中,则应该设置pktsrc為(wèi)1,pktdst為(wèi)0;
inport、outport标识报文(wén)从设备的物(wù)理(lǐ)端口输入输出,一般是结合流表规则一起使用(yòng);
dstmid、srcmid标识报文(wén)下次处理(lǐ)的目的模块编号和上次处理(lǐ)时的模块编号。如UA处理(lǐ)后的报文(wén)需要发送到网络中,则dstmid设置為(wèi)5;
flowID字段由FAST UM填充,标识着报文(wén)命中了哪一条流表;
len表示整个FAST报文(wén)長(cháng)度(包含UM头,对齐标志(zhì)和完整以太网报文(wén))。FAST平台报文(wén)缓存區(qū)最大為(wèi)2048,完整以太网报文(wén)的MTU不超过1518。
Pkttype字段表示报文(wén)类型,0為(wèi)数据报文(wén),1為(wèi)控制报文(wén)。
三、ctl_metadata结构定义
FAST平台控制报文(wén)对应的控制信息為(wèi)ctl_metadata,包含值、掩码、地址、源目的MID、类型、报文(wén)类型等,详细定义如下。
需要注意的是,用(yòng)户在UA编程时不需要自己构造Fast控制报文(wén),而是通过调用(yòng)FAST编程API提供的fast_ua_hw_rd()函数来实现对硬件流水線(xiàn)的管理(lǐ)。FAST 编程API的使用(yòng)说明将在后续文(wén)章中介绍。