1

我正在尝试构建一个多 RX 队列 dpdk 程序,使用 RSS 将传入流量拆分为单个端口上的 RX 队列。Mellanox ConnectX-5 和 DPDK 版本 19.11 用于此目的。当我使用 IP over Ethernet 数据包作为输入时,它工作正常。但是,当数据包包含基于以太网的 MPLS 上的 IP 时,RSS 似乎不起作用。因此,所有属于MPLS 上的各种流(具有不同的 IP、端口)的数据包都被发送到同一个 RX 队列中srcdst

我的查询是

  1. DPDK 中是否有任何参数/技术将 MPLS 数据包分发到多个 RX 队列?
  2. 有没有办法在硬件中剥离 MPLS 标签(在 Eth 和 IP 之间),比如hw_vlan_strip

我的端口配置是

const struct rte_eth_conf default_port_conf = {
    .rxmode = {
            .hw_vlan_strip  = 0,    /* VLAN strip enabled. */
            .header_split   = 0,    /* Header Split disabled. */
            .hw_ip_checksum = 0,    /* IP checksum offload disabled. */
            .hw_strip_crc   = 0,    /* CRC stripping by hardware disabled. */
    },
    .rx_adv_conf = {
            .rss_conf = {
                    .rss_key = NULL,
                    .rss_key_len = 0,
                    .rss_hf = ETH_RSS_IP,
            },
    } };
4

1 回答 1

0

支持的 NIC PMD的要求POP_MPLSRSS on MPLS可以通过激活。RTE_FLOWmellanox mxl5 PMD只支持RTE_FLOW_ACTION_TYPE_OF_PUSH_VLAN & RTE_FLOW_ACTION_TYPE_OF_PUSH_VLAN. 只有隧道数据包支持的选项mxl5 PMDMPLSoGRE, MPLSoUD因此,在 DPDK 19.11 LTS 的 MXL5 PMD 上,无法通过 PMD 在硬件中使用 POP MPLS

对于任何 PMDRSSouter/inner IP addressTCP/UDP/SCTP port numbers. 因此我必须解释RSS for MPLSI would like to distribute/ spread packets with different MPLS to various queues。这可以通过再次使用RTE_FLOWforRTE_FLOW_ITEM_TYPE_MPLS和 action field as来实现RTE_FLOW_ACTION_TYPE_QUEUE。使用mask/range fields一个可以设置满足条件的模式为2 ^ 20 (MPLS id max value) / number of RX queues因此建议使用来自 RTE_FLOW 和 RTE_FLOW_ACTION_TYPE_QUEUE 的 RTE_FLOW_ITEM_TYPE_MPLS。但同样没有 IP/PORT RSS 散列。

测试你可以使用的相同

  1. DPDK testpmd 并设置flow rulesor
  2. 利用rte_flow 链接中的 RTE_FLOW 代码片段

注意:因为POP MPLS我强烈推荐用于PTYPES识别元数据并用于RX-callabck修改数据包头。

于 2021-01-16T14:23:58.423 回答