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