Hi Georgios, On Mon, Sep 18, 2017 at 05:26:08AM -0700, [email protected] 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
