Hi SidAli, if that is the only rule you are creating then I don't think it is enough. Please have a look at this snippet I made few years back. https://gist.github.com/lukashino/8fe387caabe2750d396bc97f2d66066a There you first initialize the number of queues and then in the follow-up rules the patterns you want to apply RSS to. Cheers, Lukas On 3/25/25 17:42, Sid ali cherrati wrote: > Dear DPDK Team, > > I hope this message finds you well. I am reaching out to seek your > expertise regarding an issue I am encountering while configuring *DPDK > flow rules with RSS* on an *Intel X710 NIC* (using the |i40e| driver). > Despite multiple attempts, I have been unable to resolve the error and > would greatly appreciate your guidance. > > *Objective* : > Redirect UDP traffic (specific destination IP/port) to *multiple RX > queues* using |rte_flow| with RSS. > > *Error : * > Validation failed: RSS Queues not supported when pattern specified . > > *Hardware/Software*: > > * > > NIC: Intel X710 > > * Driver: |i40e| > * > > DPDK Version: 23.11 > > *Code Snippet:* > intflow_filtering(uint16_tport_id, uint32_tip_addr, uint16_tudp_port) { > structrte_flow_errorerror; > structrte_flow_attrattr={ .ingress=1, .priority=0}; > structrte_flow_itempattern[4]; > structrte_flow_actionaction[2]; > structrte_flow*flow; > // Ethernet > memset(pattern, 0, sizeof(pattern)); > pattern[0].type=RTE_FLOW_ITEM_TYPE_ETH; > // IPv4 > structrte_flow_item_ipv4ipv4_spec={ .hdr.dst_addr=RTE_BE32(ip_addr) }; > structrte_flow_item_ipv4ipv4_mask={ .hdr.dst_addr=RTE_BE32(0xFFFFFFFF) }; > pattern[1].type=RTE_FLOW_ITEM_TYPE_IPV4; > pattern[1].spec=&ipv4_spec; > pattern[1].mask=&ipv4_mask; > // UDP > structrte_flow_item_udpudp_spec={ .hdr.dst_port=RTE_BE16(udp_port) }; > structrte_flow_item_udpudp_mask={ .hdr.dst_port=RTE_BE16(0xFFFF) }; > pattern[2].type=RTE_FLOW_ITEM_TYPE_UDP; > pattern[2].spec=&udp_spec; > pattern[2].mask=&udp_mask; > pattern[3].type=RTE_FLOW_ITEM_TYPE_END; > // action > action[0].type=RTE_FLOW_ACTION_TYPE_RSS; > // struct rte_flow_action_queue queue_action = { .index = RX_ID }; > // action[0].conf = &queue_action; > // Configuration RSS > uint16_tqueues[]={1, 2, 3}; > structrte_flow_action_rssrss_conf={ > .func=RTE_ETH_HASH_FUNCTION_DEFAULT, > .types= > RTE_ETH_RSS_IPV4| > RTE_ETH_RSS_UDP, > .key_len=0, > .queue_num=3, > .queue=queues, > }; > action[0].type=RTE_FLOW_ACTION_TYPE_RSS; > action[0].conf=&rss_conf; > action[1].type=RTE_FLOW_ACTION_TYPE_END; > if(rte_flow_validate(port_id, &attr, pattern, action, &error) !=0) { > printf("Validation Failure: %s\n", error.message); > return-1; > } > // Flow rule creation > flow=rte_flow_create(port_id, &attr, pattern, action, &error); > if(flow==NULL) { > printf("Error creating flow rule : %s\n", error.message); > return-1; > } > printf("Flow rule created for IP %u.%u.%u.%uand UDP port %u\n", > (ip_addr>>24) &0xFF, (ip_addr>>16) &0xFF, > (ip_addr>>8) &0xFF, ip_addr&0xFF, udp_port); > return0; > } > > I would be grateful for any insights, code examples, or documentation > references to resolve this issue. Please let me know if additional > details are required. > > Thank you in advance for your time and support. > > Best regards, > > SidAli > >