我正在尝试构建一个多RX队列的dpdk程序,使用RSS将传入的流量分割成一个端口上的RX队列。Mellanox ConnectX-5和DPDK版本19.11用于此目的.当我使用IP over以太网数据包作为输入时,它工作得很好。但是,当数据包在以太网上包含IP over MPLS时,RSS似乎无法工作。因此,属于不同流(具有不同的src和dst IP、端口)的所有数据包都被发送到同一个RX队列中。
我的疑问是
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,
},
} };发布于 2021-01-16 14:23:58
支持NIC的POP_MPLS和RSS on MPLS的需求可通过RTE_FLOW激活。但是mellanox mxl5 PMD只支持RTE_FLOW_ACTION_TYPE_OF_PUSH_VLAN & RTE_FLOW_ACTION_TYPE_OF_PUSH_VLAN。只有mxl5 PMD所支持的隧道数据包选项是MPLSoGRE, MPLSoUD。因此,不可能在MXL5 PMD上为DPDK19.11LTS在HW通过PMD实现POP MPLS。
对于任何PMD,RSS都是为outer/inner IP address和TCP/UDP/SCTP port numbers保留的。因此,我不得不将RSS for MPLS解释为I would like to distribute/ spread packets with different MPLS to various queues。这可以通过再次使用RTE_FLOW for RTE_FLOW_ITEM_TYPE_MPLS和action字段作为RTE_FLOW_ACTION_TYPE_QUEUE来实现。使用mask/range fields,可以将满足条件的模式设置为2 ^ 20 (MPLS id max value) / number of RX queues。因此,建议使用来自和RTE_FLOW_ACTION_TYPE_QUEUE的RTE_FLOW_ITEM_TYPE_MPLS。但是对于相同的.没有IP/端口RSS散列。
来测试您可以使用的相同
flow rules或注意:对于POP MPLS,我强烈建议使用PTYPES标识元数据,并使用RX-callabck修改数据包报头。
https://stackoverflow.com/questions/65747647
复制相似问题