title: DPDK: MPLS packet processing
body: <p>I am trying to build a multi-RX-queue dpdk program, using RSS to split the incoming traffic into RX queues on a single port. Mellanox ConnectX-5 and DPDK Version 19.11 is used for this purpose. It works fine when I use IP over Ethernet packets as input. However when the packet contains IP over MPLS over Ethernet, RSS does not seems to work. As a result, all packets belonging to various flows (with different <code>src</code> &amp; <code>dst</code> IPs, ports) over MPLS are all sent into the same RX queue.</p>
  <p>My queries are</p>
  <ol>
  <li>Is there any parameter/techniques in DPDK to distribute MPLS packets to multiple RX queues?</li>
  <li>Is there any way to strip off MPLS tags (between Eth and IP) in hardware, something like <code>hw_vlan_strip</code>?</li>
  </ol>
  <p>My Port configuration is</p>
  <pre class="lang-js prettyprint-override"><code>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,
              },
      } };
  </code></pre>