首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MPLS数据包处理

MPLS数据包处理
EN

Stack Overflow用户
提问于 2021-01-16 08:09:51
回答 1查看 435关注 0票数 1

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

我的疑问是

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

我的端口配置是

代码语言:javascript
复制
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,
            },
    } };
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-16 14:23:58

支持NIC的POP_MPLSRSS 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 addressTCP/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散列。

来测试您可以使用的相同

  1. DPDK测试and并设置flow rules
  2. 利用来自RTE_FLOW的流动环节代码片段

注意:对于POP MPLS,我强烈建议使用PTYPES标识元数据,并使用RX-callabck修改数据包报头。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65747647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档