[dpdk-users] DPDK application that sends rules to the NIC
Nélio Laranjeiro
nelio.laranjeiro at 6wind.com
Mon Sep 18 15:20:56 CEST 2017
Hi Georgios,
On Mon, Sep 18, 2017 at 05:26:08AM -0700, george.dit at gmail.com wrote:
> 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.
Can you explain a little more what do you mean by "crash" ?
> 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
With so few informations it is not easy to help, from the code above I
don't see anything wrong. To help can you answer the following points:
- which version of DPDK are you using,
- which version of MLNX_OFED,
- Is it possible to share your snippet of code (just the pattern/action
allocation) ?
Regards,
--
Nélio Laranjeiro
6WIND
More information about the users
mailing list