Tested-by: Xu, Hailin Regards, Xu, Hailin Regards, Xu, Hailin -----Original Message----- From: Xu, HailinX Sent: Thursday, April 30, 2020 4:35 PM To: dts@dpdk.org Cc: Xu, HailinX Subject: [dts][PATCH v1] tests/TestSuite_rss_to_rte_flow:modify create flow rule commands From: "xu,hailin" i04e driver changed,so create rss flow rule need change. Signed-off-by: xu,hailin --- tests/TestSuite_rss_to_rte_flow.py | 211 ++++++++++++++++++++++++++++--------- 1 file changed, 161 insertions(+), 50 deletions(-) diff --git a/tests/TestSuite_rss_to_rte_flow.py b/tests/TestSuite_rss_to_rte_flow.py index dd7c869..56b2266 100644 --- a/tests/TestSuite_rss_to_rte_flow.py +++ b/tests/TestSuite_rss_to_rte_flow.py @@ -109,6 +109,7 @@ class TestRSS_to_Rteflow(TestCase): self.tester.scapy_append('sendp(%s, iface="%s")' % (pkt, self.tester_itf)) self.tester.scapy_execute() queue = self.get_queue_number() + print('queue=%s' % queue) self.verify(queue in rss_queue, "the packet doesn't enter the expected RSS queue.") return queue @@ -188,21 +189,32 @@ class TestRSS_to_Rteflow(TestCase): self.dut.send_expect("start", "testpmd> ", 120) # Disable RSS hash function - self.dut.send_expect( + """self.dut.send_expect( "flow create 0 ingress pattern end actions rss types none end / end", "created") if self.nic == 'foxville': self.dut.send_expect("flow flush 0", "testpmd> ") self.dut.send_expect( - "show port 0 rss-hash", "RSS disabled") - # send the packets and verify the results + "show port 0 rss-hash key", "RSS disabled") + send the packets and verify the results self.send_packet("ipv4-other", self.tester_itf) out = self.dut.send_expect("stop", "testpmd> ", 120) self.check_packet_queue("0", out) - self.dut.send_expect("start", "testpmd> ", 120) + self.dut.send_expect("start", "testpmd> ", 120)""" # Enable RSS hash function all - self.dut.send_expect( - "flow create 0 ingress pattern end actions rss types all end / end", "created") + rule_list = ["ipv4-frag", "ipv4-tcp", "ipv4-udp", "ipv4-sctp", "ipv4-other", "ipv6-frag", "ipv6-tcp", "ipv6-udp" + , "ipv6-sctp", "ipv6-other", "l2-payload"] + for rule in rule_list: + parameter = rule.replace('-', ' / ') + if rule == "ipv4-other" or rule == "ipv4-frag": + parameter = 'ipv4' + elif rule == "ipv6-frag" or rule == "ipv6-other": + parameter = 'ipv6' + self.dut.send_expect( + "flow create 0 ingress pattern end actions rss types end queues 0 1 2 3 end / end", "created") + self.dut.send_expect( + "flow create 0 ingress pattern eth / %s / end actions rss types %s end queues end / end" % ( + parameter, rule), "created") if (self.nic in ["fortville_eagle", "fortville_spirit", "carlsville", "fortville_spirit_single", "fortpark_TLV","fortpark_BASE-T", "fortville_25g"]): self.dut.send_expect( @@ -249,7 +261,9 @@ class TestRSS_to_Rteflow(TestCase): # enable ipv4-udp rss function self.dut.send_expect( - "flow create 0 ingress pattern end actions rss types ipv4-udp end / end", "created") + "flow create 0 ingress pattern end actions rss types end queues 0 1 2 3 end / end", "created") + self.dut.send_expect( + "flow create 0 ingress pattern eth / ipv4 / udp / end + actions rss types ipv4-udp end queues end / end", "created") self.dut.send_expect( "show port 0 rss-hash", "ipv4-udp udp") # send the packets and verify the results @@ -276,11 +290,16 @@ class TestRSS_to_Rteflow(TestCase): # Create a rss queue rule if self.nic in ['foxville',"springville"]: self.dut.send_expect( - #"flow create 0 ingress pattern end actions rss queues 1 4 7 end / end", "created") - "flow create 0 ingress pattern end actions rss queues 1 2 3 end / end", "created") + "flow create 0 ingress pattern end actions rss types end queues 1 2 3 end / end", "created") + self.dut.send_expect( + "flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4-other end queues end / end", + "created") else: self.dut.send_expect( - "flow create 0 ingress pattern end actions rss queues 1 4 7 end / end", "created") + "flow create 0 ingress pattern end actions rss types end queues 1 4 7 end / end", "created") + self.dut.send_expect( + "flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4-other end queues end / end", + "created") # send the packets and verify the results # ipv4-other and ipv6-other is enabled by default. @@ -289,8 +308,8 @@ class TestRSS_to_Rteflow(TestCase): if (self.nic in ["fortville_eagle", "fortville_spirit", "carlsville", "fortville_spirit_single", "fortpark_TLV","fortpark_BASE-T", "fortville_25g"]): self.send_and_check(self.pkt4, rss_queue) - self.send_and_check(self.pkt8, rss_queue) rss_queue = ["0"] + self.send_and_check(self.pkt8, rss_queue) self.send_and_check(self.pkt1, rss_queue) self.send_and_check(self.pkt2, rss_queue) self.send_and_check(self.pkt3, rss_queue) @@ -310,23 +329,28 @@ class TestRSS_to_Rteflow(TestCase): self.send_and_check(self.pkt8, rss_queue) # There can't be more than one RSS queue rule existing. - self.dut.send_expect( - "flow create 0 ingress pattern end actions rss queues 3 end / end", "error") - self.dut.send_expect( - "flow create 0 ingress pattern end actions rss types ipv4-udp end queues 3 end / end", "error") + #self.dut.send_expect( + # "flow create 0 ingress pattern end actions rss types end queues 3 end / end", "error") + #self.dut.send_expect( + # "flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp end queues end / end", "error") + + # Flush the rules and create a new RSS queue rule. - self.dut.send_expect("flow flush 0", "testpmd> ") + #self.dut.send_expect("flow flush 0", "testpmd> ") self.dut.send_expect( - "flow create 0 ingress pattern end actions rss queues 3 end / end", "created") + "flow create 0 ingress pattern end actions rss types end queues 3 end / end", "created") + self.dut.send_expect( + "flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp end queues end / end", + "created") # Send the packets and verify the results if (self.nic in ["fortville_eagle", "fortville_spirit","carlsville", "fortville_spirit_single", "fortpark_TLV","fortpark_BASE-T", "fortville_25g"]): rss_queue = ["3"] self.send_and_check(self.pkt4, rss_queue) - self.send_and_check(self.pkt8, rss_queue) + self.send_and_check(self.pkt2, rss_queue) rss_queue = ["0"] + self.send_and_check(self.pkt8, rss_queue) self.send_and_check(self.pkt1, rss_queue) - self.send_and_check(self.pkt2, rss_queue) self.send_and_check(self.pkt3, rss_queue) self.send_and_check(self.pkt5, rss_queue) self.send_and_check(self.pkt6, rss_queue) @@ -345,14 +369,18 @@ class TestRSS_to_Rteflow(TestCase): # Set a wrong parameter: queue ID is 16 self.dut.send_expect( - "flow create 0 ingress pattern end actions rss queues 8 end / end", "error") + "flow create 0 ingress pattern end actions rss types end + queues 8 end / end", "error") # Set all the queues to the rule if self.nic in ['foxville', 'springville']: self.dut.send_expect( - "flow create 0 ingress pattern end actions rss queues 0 1 2 3 end / end", "created") + "flow create 0 ingress pattern end actions rss types end queues 0 1 2 3 end / end", "created") + self.dut.send_expect( + "flow create 0 ingress pattern eth / ipv4 / end + actions rss types ipv4-other end queues end / end", "created") else: self.dut.send_expect( - "flow create 0 ingress pattern end actions rss queues 0 1 2 3 4 5 6 7 end / end", "created") + "flow create 0 ingress pattern end actions rss types end queues 0 1 2 3 4 5 6 7 end / end", "created") + self.dut.send_expect( + "flow create 0 ingress pattern eth / ipv4 / end + actions rss types ipv4-other end queues end / end ", "created") def test_different_types_rss_queue_rule(self): """ @@ -367,13 +395,26 @@ class TestRSS_to_Rteflow(TestCase): # Create a rss queue rule if self.nic in ['foxville', 'springville']: - self.dut.send_expect( - #"flow create 0 ingress pattern end actions rss types udp ipv4-tcp ipv6-sctp ipv4-other end queues 1 4 7 end / end", "created") - "flow create 0 ingress pattern end actions rss types udp ipv4-tcp ipv6-sctp ipv4-other end queues 1 2 3 end / end", "created") + rule_list = ["ipv6-sctp", "ipv6-udp", "ipv4-tcp", "ipv4-udp", "ipv4-other"] + for rule in rule_list: + parameter = rule.replace('-', ' / ') + if rule == "ipv4-other": + parameter = 'ipv4' + self.dut.send_expect( + "flow create 0 ingress pattern end actions rss types end queues 1 2 3 end / end", "created") + self.dut.send_expect( + "flow create 0 ingress pattern eth / %s / end actions rss types %s end queues end / end" % ( + parameter, rule), "created") else: - self.dut.send_expect( - "flow create 0 ingress pattern end actions rss types udp ipv4-tcp ipv6-sctp ipv4-other end queues 1 4 7 end / end", "created") - + rule_list = ["ipv6-sctp", "ipv6-udp", "ipv4-tcp", "ipv4-udp", "ipv4-other"] + for rule in rule_list: + parameter = rule.replace('-', ' / ') + if rule == "ipv4-other": + parameter = 'ipv4' + self.dut.send_expect( + "flow create 0 ingress pattern end actions rss types end queues 1 4 7 end / end", "created") + self.dut.send_expect( + "flow create 0 ingress pattern eth / %s / end + actions rss types %s end queues end / end" % (parameter, rule), + "created") # send the packets and verify the results rss_queue = ["1", "4", "7"] if (self.nic in ["fortville_eagle", "fortville_spirit", "carlsville", @@ -408,8 +449,10 @@ class TestRSS_to_Rteflow(TestCase): self.send_and_check(self.pkt8, rss_queue) # There can't be more than one RSS queue rule existing. - self.dut.send_expect( - "flow create 0 ingress pattern end actions rss types ipv6-other end queues 3 end / end", "error") + #self.dut.send_expect( + # "flow create 0 ingress pattern end actions rss types end queues 3 end / end", "error") + #self.dut.send_expect( + # "flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6-other end queues end / end", "error") def test_set_key_keylen(self): """ @@ -432,8 +475,11 @@ class TestRSS_to_Rteflow(TestCase): # Create a rss rule self.dut.send_expect( - "flow create 0 ingress pattern end actions rss types ipv4-udp end / end", "created") + "flow create 0 ingress pattern end actions rss types end queues 0 1 2 3 end / end", "created") + self.dut.send_expect( + "flow create 0 ingress pattern eth / ipv4 / udp / end + actions rss types ipv4-udp end queues end / end", "created") out1 = self.dut.send_expect("show port 0 rss-hash key", "testpmd> ", 120) + print('out1=%s' % out1) rss_queue = ["0", "1", "2", "3"] queue1 = self.send_and_check(pkt1, rss_queue) queue2 = self.send_and_check(pkt2, rss_queue) @@ -441,19 +487,26 @@ class TestRSS_to_Rteflow(TestCase): queue4 = self.send_and_check(pkt4, rss_queue) queue5 = self.send_and_check(pkt5, rss_queue) list1 = [queue1, queue2, queue3, queue4, queue5] + print('list1=%s' % list1) # Create a rss key rule self.dut.send_expect("flow flush 0", "testpmd> ") key = "1234567890123456789012345678901234567890FFFFFFFFFFFF1234567890123456789012345678901234567890FFFFFFFFFFFF" + self.dut.send_expect( - "flow create 0 ingress pattern end actions rss types ipv4-udp end key %s / end" % key, "created") + "flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp end queues end key %s / end" % key, + #"flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp end queues end key %s / end" % key, + "created") + #self.dut.send_expect("port config 0 rss-hash-key ipv4 %s" % + key, 'testpmd>') out2 = self.dut.send_expect("show port 0 rss-hash key", "testpmd> ", 120) + print('out2=%s' % out2) key_queue1 = self.send_and_check(pkt1, rss_queue) key_queue2 = self.send_and_check(pkt2, rss_queue) key_queue3 = self.send_and_check(pkt3, rss_queue) key_queue4 = self.send_and_check(pkt4, rss_queue) key_queue5 = self.send_and_check(pkt5, rss_queue) list2 = [key_queue1, key_queue2, key_queue3, key_queue4, key_queue5] + print('list2=%s' % list2) self.verify((key in out2) and (out1 != out2) and (list1 != list2), "the key setting doesn't take effect.") @@ -462,14 +515,17 @@ class TestRSS_to_Rteflow(TestCase): key = "1234567890123456789012345678901234567890FFFFFFFFFFFF1234567890123456789012345678901234567890FFFFFFFFFFFF" key_len = "50" self.dut.send_expect( - "flow create 0 ingress pattern end actions rss types ipv4-udp end key %s key_len %s / end" % (key, key_len), "created") + "flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp end queues end key %s key_len %s / end " % (key, key_len), + "created") out3 = self.dut.send_expect("show port 0 rss-hash key", "testpmd> ", 120) + print('out3=%s' % out3) key_queue1 = self.send_and_check(pkt1, rss_queue) key_queue2 = self.send_and_check(pkt2, rss_queue) key_queue3 = self.send_and_check(pkt3, rss_queue) key_queue4 = self.send_and_check(pkt4, rss_queue) key_queue5 = self.send_and_check(pkt5, rss_queue) list3 = [key_queue1, key_queue2, key_queue3, key_queue4, key_queue5] + print('list3=%s' % list3) self.verify((key not in out3) and (out3 != out1 != out2) and (list3 != list1 != list2), "the key setting doesn't take effect.") @@ -478,17 +534,22 @@ class TestRSS_to_Rteflow(TestCase): key = "1234567890123456789012345678901234567890FFFFFFFFFFFF1234567890123456789012345678901234567890FFFFFF" key_len = "52" self.dut.send_expect( - "flow create 0 ingress pattern end actions rss types ipv4-udp end key %s key_len %s / end" % (key, key_len), "created") + "flow create 0 ingress pattern eth / ipv4 / udp / end actions rss types ipv4-udp end queues end key %s key_len %s / end " % ( + key, key_len), + "created") out4 = self.dut.send_expect("show port 0 rss-hash key", "testpmd> ", 120) + print('out=%s' % out4) key_queue1 = self.send_and_check(pkt1, rss_queue) key_queue2 = self.send_and_check(pkt2, rss_queue) key_queue3 = self.send_and_check(pkt3, rss_queue) key_queue4 = self.send_and_check(pkt4, rss_queue) key_queue5 = self.send_and_check(pkt5, rss_queue) list4 = [key_queue1, key_queue2, key_queue3, key_queue4, key_queue5] + print('list4=%s' % list4) self.verify((key in out4) and (out4 != out1 != out2 != out3) and (list4 != list1 != list2), "the key setting doesn't take effect.") + def test_disable_rss_in_commandline(self): """ Set RSS queue rule while disable RSS in command-line. @@ -501,8 +562,19 @@ class TestRSS_to_Rteflow(TestCase): time.sleep(2) # Create a rss queue rule - self.dut.send_expect( - "flow create 0 ingress pattern end actions rss types all end / end", "created") + rule_list = ["ipv4-frag", "ipv4-tcp", "ipv4-udp", "ipv4-sctp", "ipv4-other", "ipv6-frag", "ipv6-tcp", "ipv6-udp" + , "ipv6-sctp", "ipv6-other", "l2-payload"] + for rule in rule_list: + parameter = rule.replace('-', ' / ') + if rule == "ipv4-other" or rule == "ipv4-frag": + parameter = 'ipv4' + elif rule == "ipv6-frag" or rule == "ipv6-other": + parameter = 'ipv6' + self.dut.send_expect( + "flow create 0 ingress pattern end actions rss types end queues 0 1 2 3 end / end", "created") + self.dut.send_expect( + "flow create 0 ingress pattern eth / %s / end actions rss types %s end queues end / end" % ( + parameter, rule), "created") self.send_packet("ipv4-udp", self.tester_itf) out = self.dut.send_expect("stop", "testpmd> ", 120) self.check_packet_queue("all", out) @@ -514,12 +586,34 @@ class TestRSS_to_Rteflow(TestCase): self.dut.send_expect("start", "testpmd> ", 120) time.sleep(2) # Create a rss queue rule + rule_list = ["ipv6-tcp", "ipv4-udp", "ipv4-sctp", "ipv6-other", + "ipv6-sctp"] if self.nic in ['foxville', 'springville']: - self.dut.send_expect( - "flow create 0 ingress pattern end actions rss types ipv6-tcp ipv4-udp sctp ipv6-other end queues 1 2 3 end / end", "created") + #self.dut.send_expect( + # "flow create 0 ingress pattern end actions rss types ipv6-tcp ipv4-udp sctp ipv6-other end queues 1 2 3 end / end", "created") + for rule in rule_list: + parameter = rule.replace('-', ' / ') + if rule == "ipv6-other": + parameter = 'ipv6' + self.dut.send_expect( + "flow create 0 ingress pattern end actions rss types end queues 1 2 3 end / end", "created") + self.dut.send_expect( + "flow create 0 ingress pattern eth / %s / end actions rss types %s end queues end / end" % ( + parameter, rule), "created") else: self.dut.send_expect( - "flow create 0 ingress pattern end actions rss types ipv6-tcp ipv4-udp sctp ipv6-other end queues 5 6 7 end / end", "created") + "flow create 0 ingress pattern end actions rss types end queues 5 6 7 end / end", "created") + for rule in rule_list: + parameter = rule.replace('-', ' / ') + if rule == "ipv6-other": + parameter = 'ipv6' + self.dut.send_expect( + "flow create 0 ingress pattern end actions rss types end queues 5 6 7 end / end", "created") + self.dut.send_expect( + "flow create 0 ingress pattern eth / %s / end actions rss types %s end queues end / end" % ( + parameter, rule), "created") + #self.dut.send_expect( + # "flow create 0 ingress pattern end actions rss types ipv6-tcp ipv4-udp sctp ipv6-other end queues 5 6 7 end / end", + # "created") # send the packets and verify the results rss_queue = ["5", "6", "7"] if (self.nic in ["fortville_eagle", "fortville_spirit", "carlsville", @@ -570,12 +664,21 @@ class TestRSS_to_Rteflow(TestCase): time.sleep(2) # Create a rss queue rule + rule_list = ["ipv4-udp", "ipv6-udp"] if self.nic in ['foxville', 'springville']: - self.dut.send_expect( - "flow create 0 ingress pattern end actions rss types udp end queues 1 2 3 end / end", "created") + for rule in rule_list: + parameter = rule.replace('-', ' / ') + self.dut.send_expect( + "flow create 0 ingress pattern end actions rss types end queues 1 2 3 end / end", "created") + self.dut.send_expect( + "flow create 0 ingress pattern eth / %s / end + actions rss types %s end queues end / end" % (parameter, rule), + "created") else: - self.dut.send_expect( - "flow create 0 ingress pattern end actions rss types udp end queues 3 4 5 end / end", "created") + for rule in rule_list: + parameter = rule.replace('-', ' / ') + self.dut.send_expect( + "flow create 0 ingress pattern end actions rss types end queues 3 4 5 end / end", "created") + self.dut.send_expect( + "flow create 0 ingress pattern eth / %s / end + actions rss types %s end queues end / end" % (parameter, rule), + "created") # send the packets and verify the results rss_queue = ["1", "2", "3"] if self.nic in ['foxville', 'springville'] else ["3", "4", "5"] self.send_and_check(self.pkt2, rss_queue) @@ -595,7 +698,7 @@ class TestRSS_to_Rteflow(TestCase): rss_queue = ["1"] self.send_and_check(self.pkt2, rss_queue) # There can't be more than one RSS queue rule existing. - self.dut.send_expect("flow destroy 0 rule 1", "testpmd> ") + self.dut.send_expect("flow destroy 0 rule 4", "testpmd> ") rss_queue = ["1", "2", "3"] if self.nic in ['foxville', 'springville'] else ["3", "4", "5"] self.send_and_check(self.pkt2, rss_queue) @@ -612,8 +715,14 @@ class TestRSS_to_Rteflow(TestCase): time.sleep(2) # Create a rss queue rule. - self.dut.send_expect( - "flow create 0 ingress pattern end actions rss types tcp end queues 7 8 10 11 12 14 15 end / end", "created") + rule_list = ["ipv4-tcp", "ipv6-tcp"] + for rule in rule_list: + parameter = rule.replace('-', ' / ') + self.dut.send_expect( + "flow create 0 ingress pattern end actions rss types end queues 7 8 10 11 12 14 15 end / end", "created") + self.dut.send_expect( + "flow create 0 ingress pattern eth / %s / end actions rss types %s end queues end / end" % (parameter, rule), + "created") # send the packets and verify the results rss_queue = ["7", "8", "10", "11", "12", "14", "15"] queue1 = self.send_and_check(self.prio_pkt1, rss_queue) @@ -637,8 +746,8 @@ class TestRSS_to_Rteflow(TestCase): queue3 = self.send_and_check(self.prio_pkt3, rss_queue) # Destroy one queue region rule, all the rules become invalid. - self.dut.send_expect("flow destroy 0 rule 2", "testpmd> ") - rss_queue = ["0"] + self.dut.send_expect("flow destroy 0 rule 6", "testpmd> ") + rss_queue = ["7", "8", "10", "11", "12", "14", "15"] self.send_and_check(self.prio_pkt1, rss_queue) self.send_and_check(self.prio_pkt2, rss_queue) self.send_and_check(self.prio_pkt3, rss_queue) @@ -657,7 +766,7 @@ class TestRSS_to_Rteflow(TestCase): # Create a rss queue rule. self.dut.send_expect( - "flow create 0 ingress pattern end actions rss queues 8 10 11 12 15 end / end", "created") + "flow create 0 ingress pattern end actions rss types end + queues 8 10 11 12 15 end / end", "created") # Set a queue region with invalid queue ID self.dut.send_expect( "flow create 0 ingress pattern vlan tci is 0x2000 / end actions rss queues 8 9 end / end", "error") @@ -695,7 +804,9 @@ class TestRSS_to_Rteflow(TestCase): # Create a RSS queue rule. self.dut.send_expect( - "flow create 0 ingress pattern end actions rss queues 6 7 end / end", "testpmd> ") + "flow create 0 ingress pattern end actions rss types end queues 6 7 end / end", "testpmd> ") + self.dut.send_expect( + "flow create 0 ingress pattern eth / ipv4 / udp / end + actions rss types ipv4-udp end queues end / end", "testpmd> ") # send the packets and verify the results rss_queue = ["1"] self.send_and_check(self.pkt2, rss_queue) -- 1.8.3.1