DPDK的rte_flow_item和rte_flow_action

DPDK的rte_flow_itemrte_flow_action是一起组成流表的。

流表中的每个规则都包含了一个匹配规则和一个操作指令。匹配规则由一个或多个rte_flow_item对象组成,每个对象匹配数据包的一个协议头或相关字段。操作指令由一个或多个rte_flow_action对象组成,每个对象定义了对匹配到的数据包要采取的操作,例如将数据包转发至某个端口,丢弃数据包等。

在DPDK中,创建一个流表需要以下操作(示例代码):

首先初始化一个rte_eth_dev结构体并启动设备:

struct rte_eth_dev* dev = &rte_eth_devices[0];
rte_eth_dev_start(dev->data->port_id);

接着定义匹配规则rte_flow_item和操作指令rte_flow_action

// 定义需要匹配的IPv4地址、L4协议、TCP/UDP端口
struct rte_flow_item_ipv4 pattern_ipv4 = {...};
struct rte_flow_item_tcp pattern_tcp = {...};
struct rte_flow_action_port_id action_port = {...};
struct rte_flow_action_queue action_queue = {...};

然后创建rte_flow_itemrte_flow_action数组,将上述的匹配规则和操作指令加入到相应的数组中:

// 创建匹配规则数组
struct rte_flow_item pattern[] = {
    { .type = RTE_FLOW_ITEM_TYPE_ETH },  // 匹配以太网头
    { .type = RTE_FLOW_ITEM_TYPE_IPV4,...},  // 匹配IPv4头和地址
    { .type = RTE_FLOW_ITEM_TYPE_TCP,...},   // 匹配TCP头和端口号
    { .type = RTE_FLOW_ITEM_TYPE_END }, // 终止匹配规则数组
};

// 创建操作指令数组
struct rte_flow_action actions[] = {
    {.type = RTE_FLOW_ACTION_TYPE_PORT_ID, ...}, // 指定转发端口号
    {.type = RTE_FLOW_ACTION_TYPE_QUEUE, ...},   // 指定队列号
    {.type = RTE_FLOW_ACTION_TYPE_END},   // 终止操作指令数组
};

最后调用rte_flow_create函数创建流表:

struct rte_flow_error error;
struct rte_flow_attr attr = {
    .ingress = 1,
    .egress = 0,
    .priority = 0,
    .transfer = 0,
    .handle_asap = 0,
    .group = 0,
    .egress_mask = 0,
};

struct rte_flow* flow_handle = rte_flow_create(dev->data->port_id, &attr, pattern, actions, &error);

在上述示例代码中,我们创建了一个匹配以太网、IPv4、TCP头和端口号的规则数组和一个操作指令数组,然后调用rte_flow_create函数创建了一个流表。这个流表可以根据匹配规则rte_flow_item和操作指令rte_flow_action来对数据包进行转发或其他处理。

Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化  视频教程学习地址: https://ke.qq.com/course/5066203?flowToken=1043068
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值