dpdk- generic flow API-通用流API介绍

dpdk- generic flow API-通用流库

  • flow API介绍
  • Generic 介绍
  • 流规则
    • 属性
    • 模式条目 Pattern

flow API介绍

根据我的理解,通用流API的用途主要是进行过滤,比方说我想进行抓包,就可以利用该API对网卡捕捉到的所有包进行过滤,得到我想要的数据包。
——也就是说它可以根据特定的模式对捕捉到的包进行匹配
该API所引用的头文件为:

#include
// dpdk/lib/librte_ethdev/rte_flow.h

且所有的API前缀都有rte_flow。其官方文档解释功能如下:

此API提供了一种通用的方式来配置硬件以匹配特定的 Ingress 或 Egress 流量,根据用户的任何配置规则更改其操作及查询相关计数器。
• 可以对报文数据(如协议头部,载荷)及报文属性(如关联的物理端口,虚拟设备ID等)执行匹配。
• 可能的操作包括丢弃流量将流量转移到特定队列、虚拟/物理设备或端口,执行隧道解封、添加标记等操作。
它比涵盖其功能的传统过滤框架层次更高,以便明确的行为暴露对所有P轮询模式驱动程序来讲相同的单个操作接口。

Generic 介绍

传统的过滤框架Classification功能:网卡在收包时,将符合特定规则的包放入指定的队列。
其缺点有:

  1. DPDK为所有网卡抽象出统一的属性,但是某些属性只对一种网卡有意义;其次,随着DPDK支持的网卡越来越多,DPDK需要定义的filter类型要增加,网卡filter功能升级也需要DPDK作相应修改,这样很容易导致API/ABI的破坏;
  2. 从应用角度来看,现有的方案也有诸多不便,使得API比较难用,不够友好:那些可选或者可缺省的属性容易让用户产生疑惑;经常在某种filter类型中随意插入一些某个网卡特有的属性;设计复杂,也没有比较详细的说明文档。
    节选自Generic Flow API简介-CSDN
    由此,Generic Flow API 必不可少

流规则

流规则包含

  1. 不同的流规则优先级可以设置得不同,如果不设置则默认相同;
  2. 对于优先级不同的重叠规则,如果一个数据流均与它们匹配,则优先匹配优先级高的规则。(但是不保证重叠规则都能正确匹配,可能会出现错误)

流规则主要有:

  • 属性:流规则的属性,例如其方向(Ingress或Egress)和优先级。
  • 模式条目:匹配模式的一部分,匹配特定的数据包数据或流量属
    性。也可以描述模式本身属性,如反向匹配。
  • 匹配条目:查找的属性,组合任意的模式。
  • 动作:每当数据包被匹配时执行的操作(如丢弃流量/转移流量等)

属性

struct rte_flow_attr {
     
	uint32_t group; /**< Priority group. */
	/*流规则可以通过为其分配一个公共的组号来分组。
	 * 较低的值具有较高的优先级。组0具有最高优先级。*/
	uint32_t priority; /**< Rule priority level within group. */
	/*该流规则在组内的优先级*/
	uint32_t ingress:1; /**< Rule applies to ingress traffic. */
	uint32_t egress:1; /**< Rule applies to egress traffic. */
	/*流量方向的指定,必须至少指定一个方向*/
	uint32_t transfer:1;
	uint32_t reserved:29; /**< Reserved, must be zero. */
};

模式条目 Pattern

struct rte_flow_item {
     
	enum rte_flow_item_type type; /**< Item type. */
	/*匹配的类型*/
	const void *spec; /**< Pointer to item specification structure. */
	/*要匹配的数值(如IPv4地址)。*/
	const void *last; /**< Defines an inclusive range (spec to last). */
	/*规格中的相应字段的范围上限。*/
	const void *mask; /**< Bit-mask applied to spec and last. */
	/*应用于spec和last的位掩码(如匹配IPv4地址的前缀)*/
};

对于模式条目中的type,可以匹配的模式有两种:

  • 匹配协议头部及报文数据(ANY,RAW,ETH,VLAN,IPV4,IPV6,ICMP,UDP,TCP,SCTP,VXLAN,MPLS,GRE等等)。
  • 匹配元数据或影响模式处理(END,VOID,INVERT,PF,VF,PORT等等)。

你可能感兴趣的:(dpdk)