DPDK usage discussions
 help / color / mirror / Atom feed
* Question about rte_flow_validate and DPDK igb driver
@ 2022-07-29 10:59 Pavel Vazharov
  2022-07-29 12:08 ` Pavel Vazharov
  0 siblings, 1 reply; 2+ messages in thread
From: Pavel Vazharov @ 2022-07-29 10:59 UTC (permalink / raw)
  To: users

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

Hi there,

I'm trying to distribute among the Rx queues flows of TCP packets based on
their destination IPv4 address and source TCP port. I'm using the rte_flow
DPDK API for this purpose. I'm using DPDK 20.11.0. The setup is successful
when the application is started on a server with i40e driver but fails when
the application is started on a server using igb driver.
In the failure case the validation function returns EINVAL and the error
message is "only two tuple are supported by this filter".
I checked the source code of this DPDK driver in
drivers/net/e1000/igb_flow.c and I saw the following related code there,
starting at line 449:

        if (filter->src_ip_mask || filter->dst_ip_mask ||

            filter->src_port_mask) {

            memset(filter, 0, sizeof(struct rte_eth_ntuple_filter));

            rte_flow_error_set(error, EINVAL,

                RTE_FLOW_ERROR_TYPE_ITEM,

                NULL, "only two tuple are "

                "supported by this filter");

            return -rte_errno;

        }

The condition looks odd to me because it seems to ensure that only
filtering by destination port is supported while the error message hints
for something else. Why would filtering only by the destination port be
allowed!?
I've provided dst_ip_mask = 0xFFFFFFFF and src_port_mask 0xFFFF because I
just want to match exact ips and ports and in my understanding this should
classify, in my understanding, as filtering by "two tuple" - destination ip
and source port.

So, my questions are:
1. Am I missing something about this condition and thus it's the way it
should be?
2. If the question is not appropriate for this user group where should I
post it - dev@dpdk.org?

Thanks,
Pavel.

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

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: Question about rte_flow_validate and DPDK igb driver
  2022-07-29 10:59 Question about rte_flow_validate and DPDK igb driver Pavel Vazharov
@ 2022-07-29 12:08 ` Pavel Vazharov
  0 siblings, 0 replies; 2+ messages in thread
From: Pavel Vazharov @ 2022-07-29 12:08 UTC (permalink / raw)
  To: users

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

I should have checked the driver code more thoroughly before asking
questions here.
From drivers/net/e1000/igb_ethdev.c (ntuple_filter_to_2tuple) seems that
only filtering by the dst_port and the proto is supported by this driver.
And so the check from the previous question is perfectly correct.

    switch (filter->dst_port_mask) {

    case UINT16_MAX:

        filter_info->dst_port_mask = 0;

        filter_info->dst_port = filter->dst_port;

        break;

    case 0:

        filter_info->dst_port_mask = 1;

        break;

    default:

        PMD_DRV_LOG(ERR, "invalid dst_port mask.");

        return -EINVAL;

    }



    switch (filter->proto_mask) {

    case UINT8_MAX:

        filter_info->proto_mask = 0;

        filter_info->proto = filter->proto;

        break;

    case 0:

        filter_info->proto_mask = 1;

        break;

    default:

        PMD_DRV_LOG(ERR, "invalid protocol mask.");

        return -EINVAL;

    }

On Fri, Jul 29, 2022 at 1:59 PM Pavel Vazharov <freakpv@gmail.com> wrote:

> Hi there,
>
> I'm trying to distribute among the Rx queues flows of TCP packets based on
> their destination IPv4 address and source TCP port. I'm using the rte_flow
> DPDK API for this purpose. I'm using DPDK 20.11.0. The setup is successful
> when the application is started on a server with i40e driver but fails when
> the application is started on a server using igb driver.
> In the failure case the validation function returns EINVAL and the error
> message is "only two tuple are supported by this filter".
> I checked the source code of this DPDK driver in
> drivers/net/e1000/igb_flow.c and I saw the following related code there,
> starting at line 449:
>
>         if (filter->src_ip_mask || filter->dst_ip_mask ||
>
>             filter->src_port_mask) {
>
>             memset(filter, 0, sizeof(struct rte_eth_ntuple_filter));
>
>             rte_flow_error_set(error, EINVAL,
>
>                 RTE_FLOW_ERROR_TYPE_ITEM,
>
>                 NULL, "only two tuple are "
>
>                 "supported by this filter");
>
>             return -rte_errno;
>
>         }
>
> The condition looks odd to me because it seems to ensure that only
> filtering by destination port is supported while the error message hints
> for something else. Why would filtering only by the destination port be
> allowed!?
> I've provided dst_ip_mask = 0xFFFFFFFF and src_port_mask 0xFFFF because I
> just want to match exact ips and ports and in my understanding this should
> classify, in my understanding, as filtering by "two tuple" - destination ip
> and source port.
>
> So, my questions are:
> 1. Am I missing something about this condition and thus it's the way it
> should be?
> 2. If the question is not appropriate for this user group where should I
> post it - dev@dpdk.org?
>
> Thanks,
> Pavel.
>

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

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-07-29 12:09 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-29 10:59 Question about rte_flow_validate and DPDK igb driver Pavel Vazharov
2022-07-29 12:08 ` Pavel Vazharov

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).