[dpdk-users] DPDK application that sends rules to the NIC

george.dit at gmail.com george.dit at gmail.com
Mon Sep 18 14:26:08 CEST 2017


Dear all,

I am implementing my own DPDK application to program a Mellanox NIC (mlx5
driver) but I have some issues.
Specifically I compose a simple rule that matches only the Ethernet
header's type field using value 800 (Ethernet frames that encapsulate IPv4
packets).
Then I compose an action RTE_FLOW_ACTION_TYPE_QUEUE which redirects the
matched packets to queue index 0.

Using test-pmd, this rule is: "flow create 0 ingress pattern eth type is
800 / end actions queue index 0 / end" and I get a "Flow rule #0 created"
message.
In my application I compose the same rule using:

PATTERNS

struct rte_flow_item_eth flow_item_eth_type_ipv4 = {
        .dst = {
            .addr_bytes = { 0 }
        },
        .src = {
            .addr_bytes = { 0 }
        },
        .type = RTE_BE16(ETHER_TYPE_IPv4)                // from rte_ether.h
    };

    struct rte_flow_item_eth flow_item_eth_mask_type_ipv4 = {
        .dst = {
            .addr_bytes = { 0 }
        },
        .src = {
            .addr_bytes = { 0 }
        },
        .type = 0xFFFF
 // match only the 'type' filed
    };

struct rte_flow_item patterns[] = {
        {
            .type = RTE_FLOW_ITEM_TYPE_ETH,
            .spec = &flow_item_eth_type_ipv4,
            .last = NULL,
            .mask = &flow_item_eth_mask_type_ipv4,
        },
        {
            .type = RTE_FLOW_ITEM_TYPE_END,
            .spec = NULL,
            .last = NULL,
            .mask = NULL,
        }
    };

ACTIONS

struct rte_flow_action_queue queue_conf;
queue_conf.index = 0;

struct rte_flow_action actions[] =
    {
        {
            .type = RTE_FLOW_ACTION_TYPE_QUEUE,
            .conf = &queue_conf
        },
        {
            .type = RTE_FLOW_ACTION_TYPE_END,
            .conf = NULL
        }
    };

PROBLEM

When I pass this rule to rte_flow_validate(...) it is successfully
validated, but rte_flow_create() crashes although it get the very same
arguments.
If I replace my Mellanox NIC with an Intel 82599 (using DPDK's ixgbe
driver), then the validate function returns error: "Caught error type 9
(specific pattern item): Not supported by L2 tunnel filter".
The error reported by the Intel driver is weird because there is no
tunneling.

I guess some value assignments require strict format and are sensitive
(e.g., big/little endian) so I would really appreciate your help.

Thanks in advance and best regards,
Georgios



On Thu, Sep 14, 2017 at 4:37 AM, <george.dit at gmail.com> wrote:

> Hi Shahaf,
>
> Thanks for the information, I am looking into it :)
> I had some compilation issues when trying to port rte_flow from DPDK 17.02
> into an external application but these issues go away if I use 17.08.
>
> Best regards,
> Georgios
>
> On Thu, Sep 14, 2017 at 3:26 AM, Shahaf Shuler <shahafs at mellanox.com>
> wrote:
>
>> Hi Georgios,
>>
>> Wednesday, September 13, 2017 11:09 AM, Georgios Katsikas:
>> > Hi all,
>> >
>> > I would like to implement a DPDK application that dumps a set of rules
>> to a
>> > Mellanox ConnectX-5 NIC and starts a number of threads (each on a
>> > different
>> > core) that receive the classified packets according to the rules.
>> > The rules are of the form src IP X and dst IP Y --> Send to core Z.
>> >
>> > Is there such an application (or similar) in the source tree?
>>
>> You can use testpmd for that. Run in isolate mode and add rte_flow rules
>> to direct IP packets to the specific queue that you want.
>>
>> > Does the Mellanox
>> > NIC require any special treatment or is there a unified API to do this
>> job
>> > regardless of the NIC?
>>
>> There Is a unified API. look into rte_flow:
>> http://dpdk.org/doc/guides/prog_guide/rte_flow.html
>>
>> > Which DPDK version do you propose?
>>
>> The latest one - v17.08
>>
>> >
>> > Thanks,
>> > --
>> > Georgios Katsikas
>> > Industrial Ph.D. Student
>> > Network Intelligence Group
>> > Decision, Networks, and Analytics (DNA) Lab RISE SICS
>> > E-Mail:  georgios.katsikas at ri.se
>>
>
>
>
> --
> Georgios Katsikas
> Industrial Ph.D. Student
> Network Intelligence Group
> Decision, Networks, and Analytics (DNA) Lab
> RISE SICS
> E-Mail:  georgios.katsikas at ri.se
>



-- 
Georgios Katsikas
Industrial Ph.D. Student
Network Intelligence Group
Decision, Networks, and Analytics (DNA) Lab
RISE SICS
E-Mail:  georgios.katsikas at ri.se


More information about the users mailing list