https://bugs.dpdk.org/show_bug.cgi?id=634
Bug ID: 634 Summary: i40e: rte_flow doesn't allow RSS action on IPV4 only Product: DPDK Version: 20.11 Hardware: x86 OS: Linux Status: UNCONFIRMED Severity: normal Priority: Normal Component: ethdev Assignee: dev@dpdk.org Reporter: frederic.coiff...@6cure.com Target Milestone: --- Hi, If I use IPV4+TCP, it works fine : ``` memset(pattern, 0, sizeof(pattern)); memset(action, 0, sizeof(action)); memset(&attr, 0, sizeof(struct rte_flow_attr)); attr.ingress = 1; action_rss = (struct rte_flow_action_rss){ .types = ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_L3_SRC_ONLY, .key_len = RSS_HASH_KEY_LENGTH, .queue_num = 0, .key = default_rss_hash_key, }; pattern[0].type = RTE_FLOW_ITEM_TYPE_ETH; pattern[1].type = RTE_FLOW_ITEM_TYPE_IPV4; pattern[2].type = RTE_FLOW_ITEM_TYPE_TCP; pattern[3].type = RTE_FLOW_ITEM_TYPE_END; action[0].type = RTE_FLOW_ACTION_TYPE_RSS; action[0].conf = &action_rss; action[1].type = RTE_FLOW_ACTION_TYPE_END; res = rte_flow_validate(port_id, &attr, pattern, action, error); if (res) { LOG_WARNING("rte_flow_validate() fails: %d %s", res, error->message); return NULL; } flow = rte_flow_create(port_id, &attr, pattern, action, error); if (!flow) { LOG_WARNING("rte_flow_create() fails: %d %s", res, error->message); return NULL; } LOG_DEBUG("rte_flow_create() success"); ``` But as my purpose is to compute on IPv4 source for all IPv4 packets, I would like : ``` memset(pattern, 0, sizeof(pattern)); memset(action, 0, sizeof(action)); memset(&attr, 0, sizeof(struct rte_flow_attr)); attr.ingress = 1; action_rss = (struct rte_flow_action_rss){ .types = ETH_RSS_IP | ETH_RSS_L3_SRC_ONLY, .key_len = RSS_HASH_KEY_LENGTH, .queue_num = 0, .key = default_rss_hash_key, }; pattern[0].type = RTE_FLOW_ITEM_TYPE_ETH; pattern[1].type = RTE_FLOW_ITEM_TYPE_IPV4; pattern[2].type = RTE_FLOW_ITEM_TYPE_END; action[0].type = RTE_FLOW_ACTION_TYPE_RSS; action[0].conf = &action_rss; action[1].type = RTE_FLOW_ACTION_TYPE_END; res = rte_flow_validate(port_id, &attr, pattern, action, error); if (res) { LOG_WARNING("rte_flow_validate() fails: %d %s", res, error->message); /// TODO exit(-1); /// TODO return NULL; } flow = rte_flow_create(port_id, &attr, pattern, action, error); if (!flow) { LOG_WARNING("rte_flow_create() fails: %d %s", res, error->message); } LOG_DEBUG("rte_flow_create() success\n"); ``` But in this case, I get "multi pctype is not supported" error. And this is true as I need `ETH_RSS_IPV4`, `ETH_RSS_FRAG_IPV4` and `ETH_RSS_NONFRAG_IPV4_OTHER`. So, is this a limitation of the current i40e driver ? Is there a different way to treat all IPv4 packets ? (and later, to treat IPv6 packets in the same way) Regards, Frédéric -- You are receiving this mail because: You are the assignee for the bug.