DPDK头文件格式介绍
必然生成项
#include "rte_flow.h"
struct hydra_flow_action {
enum hydra_action_type action_type;
void* action_data;
size_t action_data_size;
};
struct hydra_flow_item {
enum hydra_item_type item_type;
void* item_data;
size_t item_data_size;
};
- rte_flow头文件:用于支持
DPDK 枚举类型。 - hydra_flow_action:为
DPDK 流表下发提供action讯息。 - hydra_flow_item:为
DPDK 流表下发提供key(即item)讯息。
Group、Action、Item枚举
Group枚举示例代码如下所示。
enum hydra_group_type {
HYDRA_TABLE_INVALID = 0x0000,
HYDRA_TABLE_MY_CONTROL_MY_TABLE,
};
default action枚举的示例代码如下所示。
enum hydra_default_action_type {
DEFAULT_FLOW_ACTION_TYPE_UPCALL = 359,
DEFAULT_FLOW_ACTION_TYPE_CT = 357,
DEFAULT_FLOW_ACTION_TYPE_INNER_RSS = 364,
};
action枚举的示例代码如下所示。
enum hydra_action_type {
HYDRA_ACTION_INVALID = 0x1000,
HYDRA_ACTION_COUNT,
HYDRA_ACTION_CUSTOM_ACTION,
};
item枚举的示例代码如下所示。
enum hydra_item_type {
HYDRA_ITEM_INVALID = 0x2000,
HYDRA_ITEM_MY_CONTROL_MY_TABLE_HDR_IPV6,
HYDRA_ITEM_MY_CONTROL_MY_TABLE_IDX2_2BIT_2,
HYDRA_ITEM_MY_CONTROL_MY_TABLE_H,
HYDRA_ITEM_MY_CONTROL_MY_TABLE_HDR_IPV4,
HYDRA_ITEM_MY_CONTROL_MY_TABLE_IDX6_4BIT_8,
};
- HydraGroup枚举数量与table keyword数量一致,用于流表之间的跳转。
- HydraDefaultAction枚举数量当前为3个,用于支持非
DPDK action的内置action。取名规则为HYDRA_DEFAULT_ACTION_<ActionName>
- HydraAction枚举数量与非
DPDK 的action keyword数量一致,用于支撑非DPDK action。取名规则为HYDRA_ACTION_<ActionName>
- HydraItem枚举数量会和table的非
DPDK matchField数量一致,用于支撑非DPDK key。- 变量取名规则:HYDRA_ITEM_<ControlName>_<TableName>_<MatchFieldName>
- 常量取名规则:HYDRA_ITEM_<ControlName>_<TableName>_IDX<Index>_<BitWidth>BIT_<value>
表Key信息
int table_patterns_my_control_my_table [6] = {
HYDRA_ITEM_MY_CONTROL_MY_TABLE_HDR_IPV6,
HYDRA_ITEM_MY_CONTROL_MY_TABLE_IDX2_2BIT_2,
RTE_FLOW_ITEM_TYPE_TCP,
HYDRA_ITEM_MY_CONTROL_MY_TABLE_H,
HYDRA_ITEM_MY_CONTROL_MY_TABLE_HDR_IPV4,
HYDRA_ITEM_MY_CONTROL_MY_TABLE_IDX6_4BIT_8,
};
每个table都会有一个table_patterns前缀的int的数组,告知用户需要表项包含哪些matchField。非
表Action讯息
int table_actions_my_control_my_table [7] = {
HYDRA_ACTION_CT,
HYDRA_ACTION_COUNT,
RTE_FLOW_ACTION_TYPE_SET_IPV6_SRC,
RTE_FLOW_ACTION_TYPE_SET_IPV6_DST,
RTE_FLOW_ACTION_TYPE_SET_UDP_SRC,
RTE_FLOW_ACTION_TYPE_SET_UDP_DST,
HYDRA_ACTION_CUSTOMACTION,
};
每个table都会有一个table_actions前缀的int的数组,告知用户表项可使用哪些action。非
HydraStruct讯息
typedef struct {
int32_t a;
uint32_t b;
int32_t c;
uint32_t d;
} hydra_struct_str_t;
结构体的合法数值取值范围与用户在
DSL 数据面定义struct s { bit<10> a; // 合法取值范围为[0,1023] }DPDK 控制面的合法取值hydra_struct_s.a = 1023; // 合法取值范围为[0,1023]
DPDK 控制面的非法取值hydra_struct_s.a = 1024;
HydraAction讯息
每个action都会生成一个hydra_action_data前缀的数据结构。例如以下为相关的
action action_z(bit<8> data_a, bit<8> data_b) {}
其对应的生成结果如下所示。
typedef struct hydra_action_data_action_z {
uint8_t data_a: 8;
uint8_t data_b: 8;
} __attribute__((packed)) hydra_action_data_action_z;
父主题: HydraInfo