【问题标题】:DPDK flow filter get invalid action errorDPDK 流过滤器获取无效操作错误
【发布时间】:2021-06-24 20:32:53
【问题描述】:

我尝试更改示例:flow_classify 以使用队列操作。

变化只是:

//add:  
struct rte_flow_action_queue queue = { .index = 1 }; //enqueue to queue index: 1

//change count action to queue action. 
    //actions[0] = count_action;
    actions[0].type = RTE_FLOW_ACTION_TYPE_QUEUE;
    actions[0].conf = &queue;

更改后,验证规则时出现此错误:table entry validate failed ipv4_proto = 17, Invalid action。

感谢您的建议!

更多信息: DPDK版本:19.11.2,使用igb_uio绑定

网卡:驱动:ixgbe

版本:4.4.0-k-rh7.3

固件版本:0x80000922,

扩展ROM版本:总线信息:0000:01:00.1,支持统计:是,支持测试:是,支持eeprom-access:是,支持注册转储:是,支持私人-标志:没有

设备配置:

rx_rings: 2, tx_rings: 1, 
struct rte_eth_conf port_conf = port_conf_default;
struct rte_eth_dev_info dev_info;
retval = rte_eth_dev_info_get(port, &dev_info);
if (retval != 0)
    return retval;
if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MBUF_FAST_FREE)
    port_conf.txmode.offloads |= DEV_TX_OFFLOAD_MBUF_FAST_FREE;
retval = rte_eth_dev_configure(port, rx_rings, tx_rings, &port_conf);
if (retval != 0)
    return retval;
retval = rte_eth_dev_adjust_nb_rx_tx_desc(port, &nb_rxd, &nb_txd);

【问题讨论】:

  • DPDK rte_flow 受 DPDK 版本、网卡、固件的影响很大。因此,请使用所有详细信息更新问题。也请添加 dev_configure 的代码 sn-p,
  • 感谢您提供的信息,有几件事可以尝试 1) 更新固件 doc.dpdk.org/guides/rel_notes/release_19_11.html,2) 如果使用 TCP,则不应应用 Fortville 等 NIC 硬件 IP proto 字段| UDP|SCTp。因此,您可以尝试设置ipv4_spec.hdr.next_proto_id = 0; 或设置ipv4_spec.hdr.next_proto_id = 0;
  • 你能分享你的更新吗?
  • 建于 19.11.7。然后绑定新的 igb_uio.ko(但看起来与 11.9.2 相同)。还使用 19.11.7 构建代码,同样的错误:表条目验证失败 ipv4_proto = 17,无效操作。我设置:ipv4_spec.hdr.next_proto_id = 0,并用 19.11.7 编译,得到错误:EAL:错误 - 退出代码:1,原因:添加规则错误。在 add_classify_rule 函数中找到,切换 ipv4_proto,如果不是 TCP、UDP 或 STCP,则返回错误。试图通过 pattern_ipv4_5tuple[1] = ipv4_udp_item 删除 UDP,只留下 IP; pattern_ipv4_5tuple[2] = end_item;然后得到:table entry validate failed ipv4_proto = 17, Unsupported pattern
  • 如果你的网卡是Intel® 82599ES,固件应该是0x61bf0001,请使用doc.dpdk.org/guides/rel_notes/release_19_11.html来缩小正确的固件范围。感谢您尝试该建议,因为我了解原始流程 _Calssify 本身不适合您。我建议从简单的 rte_flow 示例开始,并确保您的 nic 能够处理相同的问题。如果您在测试时需要帮助(因为我没有 10Gbps ixgbe nic),请告诉我。

标签: dpdk


【解决方案1】:

[根据评论更新编辑] 特定操作失败的可能原因很可能是 NIC 的固件与 DPDK 特定要求不匹配。

根据DPDK 19.11 release notes,预期固件为0x61bf0001。由于与当前版本不匹配,建议使用推荐固件

注意:根据评论操作count 有效。

[EDIT-1] 基于实时调试,我们能够通过QUEUE redirect 操作使 RTE_FLOW 工作。使用 ixgbe 分析 DPDK 示例 flow_classify INTEL NIC 82599 不允许 IP_PROTO 字段作为规则的一部分。

因此带有 Action QUEUE 的 RTE_FLOW 可以在具有正确固件的 NIC 上工作

【讨论】:

  • 我做了网卡固件驱动升级:downloadcenter.intel.com/product/41282/…,升级到最新版本5.11.3。从 ethtool -i,固件版本为 0x80000922。我不明白如何获得 0x61bf0001。顺便问一下,和doc.dpdk.org/guides/linux_gsg/linux_drivers.html有关吗?我应该绑定哪个驱动程序?
  • 看起来您的固件升级已导致0x80000922。您是否尝试运行该应用程序?你没有绑定igb_uio来运行DPDK应用程序吗?
  • 我尝试绑定到 igb_uio 或 uio_pci_generic,然后运行应用程序。仍然是同样的问题:无效操作错误,调用时:rte_flow_classify_validate。顺便说一下 ethtool -i 获取固件版本是在绑定到 igb_uio 之前,绑定到 igb_uio 之后,ethtool -i 无法使用。但应用程序在绑定到 igb_uio 后运行。
  • 你的网卡是什么?请执行lshw -c net -businfo
  • 总线信息设备类说明===================================== ====================== pci@0000:01:00.0 enp1s0f0 网络 82599ES 10-Gigabit SFI/SFP+ 网络连接 pci@0000:01:00.1 enp1s0f1 网络 82599ES 10 千兆 SFI/SFP+ 网络连接 pci@0000:03:00.0 eno1 网络 I350 千兆网络连接 pci@0000:03:00.1 eno2 网络 I350 千兆网络连接
猜你喜欢
  • 1970-01-01
  • 2020-04-09
  • 1970-01-01
  • 2018-03-15
  • 2013-01-08
  • 2013-05-15
  • 1970-01-01
  • 1970-01-01
  • 2018-07-28
相关资源
最近更新 更多