DPDK usage discussions
 help / color / mirror / Atom feed
From: Sid ali cherrati <scherrati1@gmail.com>
To: users@dpdk.org
Subject: Issue with RTE Flow and RSS with i40e on DPDK 24.11
Date: Tue, 6 May 2025 10:15:20 +0200	[thread overview]
Message-ID: <CALn3+CORrC4gcqG03di-1B=rp8jfNqro7S31KBTz3ZxcoPMQqA@mail.gmail.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 3273 bytes --]

Dear [Support Team / DPDK Developers / Intel Support],

I hope this message finds you well.

I'm currently developing a server application based on *DPDK 24.11*, using
an *Intel X710 NIC* with the *i40e driver*. In my application, I'm
leveraging *RTE Flow* to filter UDP packets based on specific IP addresses
and ports.

To direct matching traffic, I initially used the *QUEUE action*, but I
observed that only one CPU core reaches 100% utilization, while the others
remain idle. This indicates that *RSS is being bypassed*, resulting in a
processing bottleneck.

To address this, I tried replacing the *QUEUE action* with *RSS*, but I
encountered the following validation error:

*Validation Failure: RSS Queues not supported when pattern specified*

This raises a few questions:

   -

   Is this a known limitation of the i40e driver or the X710 hardware?
   -

   Are there specific pattern constraints that prevent RSS from being used
   in this context?
   -

   Is there a recommended approach to enable per-core packet distribution
   while still applying fine-grained filtering?

Below is a relevant snippet of the flow rule I'm using:

int flow_filtering(uint16_t port_id, uint32_t ip_addr, uint16_t udp_port) {
    struct rte_flow_error error;
    struct rte_flow_attr attr = {
        .ingress = 1,
        .priority = 0
    };
    struct rte_flow_item pattern[4];
    struct rte_flow_action action[2];
    struct rte_flow *flow;

    // Configuration Ethernet
    memset(pattern, 0, sizeof(pattern));
    pattern[0].type = RTE_FLOW_ITEM_TYPE_ETH;

    // Configuration IPv4
    struct rte_flow_item_ipv4 ipv4_spec = { .hdr.dst_addr = RTE_BE32(ip_addr) };
    struct rte_flow_item_ipv4 ipv4_mask = { .hdr.dst_addr =
RTE_BE32(0xFFFFFFFF) };
    pattern[1].type = RTE_FLOW_ITEM_TYPE_IPV4;
    pattern[1].spec = &ipv4_spec;
    pattern[1].mask = &ipv4_mask;

    // Configuration UDP
    struct rte_flow_item_udp udp_spec = { .hdr.dst_port = RTE_BE16(udp_port) };
    struct rte_flow_item_udp udp_mask = { .hdr.dst_port = RTE_BE16(0xFFFF) };
    pattern[2].type = RTE_FLOW_ITEM_TYPE_UDP;
    pattern[2].spec = &udp_spec;
    pattern[2].mask = &udp_mask;

    pattern[3].type = RTE_FLOW_ITEM_TYPE_END;

    // Configuration RSS
    uint16_t rss_queues[] = {0, 1, 2, 3, 4, 5};
        struct rte_flow_action_rss rss_conf = {
        .func = RTE_ETH_HASH_FUNCTION_DEFAULT,
        .types = RTE_ETH_RSS_NONFRAG_IPV4_UDP,
        .key_len = 0,
        .queue_num = 6,
        .queue = rss_queues
    };

    action[0].type = RTE_FLOW_ACTION_TYPE_RSS;
    action[0].conf = &rss_conf;
    action[1].type = RTE_FLOW_ACTION_TYPE_END;

    if (rte_flow_validate(port_id, &attr, pattern, action, &error) != 0) {
        printf("Validation failed: %s\n", error.message);
        return -1;
    }
        flow = rte_flow_create(port_id, &attr, pattern, action, &error);
    if (flow == NULL) {
        printf("Error creating flow rule: %s\n", error.message);
        return -1;
    }

    printf("Flow rule created for IP %u.%u.%u.%u and UDP port %u\n",
           (ip_addr >> 24) & 0xFF, (ip_addr >> 16) & 0xFF,
           (ip_addr >> 8) & 0xFF, ip_addr & 0xFF, udp_port);

    return 0;
}

Any guidance or clarification would be greatly appreciated.

Best regards,

Sid-Ali

[-- Attachment #2: Type: text/html, Size: 27022 bytes --]

                 reply	other threads:[~2025-05-06  8:15 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CALn3+CORrC4gcqG03di-1B=rp8jfNqro7S31KBTz3ZxcoPMQqA@mail.gmail.com' \
    --to=scherrati1@gmail.com \
    --cc=users@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).