Hi Mohan, You can use this flow: flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types ipv4-tcp l3-src-only l3-dst-only end queues end / end
BRs, Alvin Zhang From: Vishal Mohan <[email protected]> Sent: Sunday, May 30, 2021 10:23 PM To: Zhang, AlvinX <[email protected]>; Xing, Beilei <[email protected]>; [email protected] Subject: RE: DPDK 20.11 - i40e 2 tuple RSS configuration Hi Alvin and Beilei, I was able to implement 1 tuple for all the flows after not defining .queue and .queue_num in struct rte_flow_action_rss. Im still trying to do 2 tuple (src and dst) at the same level which seems not possible by the documentations. Any suggestions to address that ? Thank you for the inputs. Regards, Vishal Mohan From: Vishal Mohan Sent: 28 May 2021 02:18 PM To: Zhang, AlvinX <[email protected]<mailto:[email protected]>>; Xing, Beilei <[email protected]<mailto:[email protected]>>; [email protected]<mailto:[email protected]> Subject: RE: DPDK 20.11 - i40e 2 tuple RSS configuration Hi Alvin, Thanks for your effort in verifying. As mentioned below I was able to achieve the same behaviour as below but not when I do it manually using rte_flow apis. Can you please take a look at the code snippet in the trail mail to point me if I'm missing anything. Thanks & Regards, Vishal Mohan From: Zhang, AlvinX <[email protected]<mailto:[email protected]>> Sent: 28 May 2021 12:27 PM To: Xing, Beilei <[email protected]<mailto:[email protected]>>; Vishal Mohan <[email protected]<mailto:[email protected]>>; [email protected]<mailto:[email protected]> Subject: RE: DPDK 20.11 - i40e 2 tuple RSS configuration Hi Vishal Mohan We have tried based on commit b1d36cf828771e28eb0130b59dcf606c2a0bc94d(version: 20.11.0) 0000:81:00.0 'Ethernet Controller XXV710 for 25GbE SFP28 158b' drv=vfio-pci unused=i40e ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0xff -n 4 -a 0000:81:00.0 -- -i --rxq=64 --txq=64 --port-topology=loop flow create 0 ingress pattern eth / ipv4 / tcp / end actions rss types ipv4-tcp l3-src-only end queues end / end packet=[Ether()/IP(dst="192.168.1.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480) -->RSS hash = 0x6a12e180 packet=[Ether()/IP(dst="192.168.1.2", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480) -->RSS hash = 0x6a12e180 packet=[Ether()/IP(dst="192.168.1.2", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480) -->RSS hash = 0x6a12e180 packet=[Ether()/IP(dst="192.169.1.2", src="192.16.0.2")/TCP(sport=22,dport=23)/("X"*480) -->RSS hash = 0xead3c21e packet=[Ether()/IP(dst="192.169.1.2", src="192.16.0.2")/TCP(sport=22,dport=23)/("X"*480) -->RSS hash = 0xead3c21e packet=[Ether()/IP(dst="192.169.1.2", src="192.16.0.2")/TCP(sport=22,dport=230)/("X"*480) -->RSS hash = 0xead3c21e packet=[Ether()/IP(dst="192.169.1.2", src="192.16.0.2")/TCP(sport=202,dport=23)/("X"*480) -->RSS hash = 0xead3c21e Is this you expected? BRs, Alvin Zhang From: Xing, Beilei <[email protected]<mailto:[email protected]>> Sent: Friday, May 28, 2021 9:24 AM To: Vishal Mohan <[email protected]<mailto:[email protected]>>; [email protected]<mailto:[email protected]>; Zhang, AlvinX <[email protected]<mailto:[email protected]>> Subject: RE: DPDK 20.11 - i40e 2 tuple RSS configuration + Alvin. Could you please help on it? Thanks. BR, Beilei From: Vishal Mohan <[email protected]<mailto:[email protected]>> Sent: Thursday, May 27, 2021 5:45 PM To: Xing, Beilei <[email protected]<mailto:[email protected]>>; [email protected]<mailto:[email protected]> Subject: RE: DPDK 20.11 - i40e 2 tuple RSS configuration Hi Beilei, Thanks for the pointer. By using l3-src-only, I was able to run testpmd on 1 tuple mode. But no success when configured manually. Please find the snippet below of my rte_eth_conf and flow conf for your kind perusal: static struct rte_eth_conf port_conf_default = { .rxmode = { .mq_mode = ETH_MQ_RX_RSS, }, .rx_adv_conf = { .rss_conf = { .rss_key = NULL, .rss_key_len = 40, .rss_hf = ETH_RSS_NONFRAG_IPV4_UDP, }, } }; struct rte_flow_item pattern[] = { [0] = { .type = RTE_FLOW_ITEM_TYPE_ETH, }, [1] = { .type = RTE_FLOW_ITEM_TYPE_IPV4, }, [2] = { .type = RTE_FLOW_ITEM_TYPE_UDP, }, [3] = { .type = RTE_FLOW_ITEM_TYPE_END, } }; struct rte_flow_action_rss action_rss = { .types = ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_L3_SRC_ONLY, .queue_num = 10, .queue = queue_ids, }; struct rte_flow_action action[] = { [0] = { .type = RTE_FLOW_ACTION_TYPE_RSS, .conf = &action_rss }, [1] = { .type = RTE_FLOW_ACTION_TYPE_END, } }; struct rte_flow_attr attr = { .egress = 0, .ingress = 1 }; struct rte_flow_error err; retval = rte_flow_validate(portid, &attr, pattern, action, &err); printf("retval %d %d\n",retval,-ENOTSUP); if(!retval){ struct rte_flow *flow = rte_flow_create(portid, &attr, pattern, action, &err); } The above given flow validates and adds successfully but no effect on RSS hashing. Also I did not set .spec and .mask for patterns assuming ETH_RSS_L3_SRC_ONLY will take care of the fields looked into. Can you please point out if im missing anything here ? Thanks & Regards, Vishal Mohan -----Original Message----- From: Xing, Beilei <[email protected]<mailto:[email protected]>> Sent: 27 May 2021 01:42 PM To: Vishal Mohan <[email protected]<mailto:[email protected]>>; [email protected]<mailto:[email protected]> Subject: RE: DPDK 20.11 - i40e 2 tuple RSS configuration CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe. Hi, I remember there's no legacy API rte_eth_dev_filter_ctrl() supported in 20.11. Please refer to RSS Flow part in i40e.rst: Enable hash and set input set for ipv4-tcp. testpmd> flow create 0 ingress pattern eth / ipv4 / tcp / end \ actions rss types ipv4-tcp l3-src-only end queues end / end BR, Beilei > -----Original Message----- > From: users <mailto:[email protected]> On Behalf Of Vishal Mohan > Sent: Thursday, May 27, 2021 3:40 PM > To: mailto:[email protected] > Subject: [dpdk-users] DPDK 20.11 - i40e 2 tuple RSS configuration > > I'm trying to implement RSS with 2 tuple (src ip, dst ip) hashing with > X710 - quad port in DPDK 20.11 with no success. I was able to > implement the same in DPDK 17.11 with a combination of RSS flags > given below and > rte_eth_dev_filter_ctrl(): > > .rss_hf = (ETH_RSS_IPV4 | ETH_RSS_NONFRAG_IPV4_OTHER | > ETH_RSS_FRAG_IPV4 | ETH_RSS_NONFRAG_IPV4_UDP | > ETH_RSS_NONFRAG_IPV4_TCP) > > and selecting input fields as dst and src ip for every rss_hf flag > using rte_eth_dev_filter_ctrl(). > > In DPDK 20.11, I believe there is no explicit usage of using > rte_eth_dev_filter_ctrl() instead we can configure the hashing with > the generic rte_flow api. I did configure a flow validate and create > the same, but the hashing is not working as expected. Without flags > ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_NONFRAG_IPV4_TCP no hashing takes > place and with those flags included in .rss_hf, 5 tuple hashing takes > place. > > When using rte_flow api, any flags given in rte_flow_action_rss.types > has no effect on the final RSS hash result. Also the RSS hashing in > the given testpmd isn't working when it is configured in "ip" (2 tuple) mode. > > Any inputs for configuring RSS hashing for 2 tuple is much appreciated. > > > Thanks & Regards, > Vishal Mohan
