test suite reviews and discussions
 help / color / Atom feed
* [dts] [PATCH V1 1/2] test_plans:add new test plan
@ 2020-07-31  8:19 Xu hailin
  2020-07-31  8:19 ` [dts] [PATCH V1 2/2] tests:add new suite Xu hailin
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Xu hailin @ 2020-07-31  8:19 UTC (permalink / raw)
  To: dts; +Cc: Xu,Hailin

From: "Xu,Hailin" <hailinx.xu@intel.com>

add cvl dcf new test plan:test_plans/cvl_dcf_date_path_test_plan.rst

Signed-off-by: Xu,Hailin <hailinx.xu@intel.com>
---
 test_plans/cvl_dcf_date_path_test_plan.rst | 203 +++++++++++++++++++++
 1 file changed, 203 insertions(+)
 create mode 100755 test_plans/cvl_dcf_date_path_test_plan.rst

diff --git a/test_plans/cvl_dcf_date_path_test_plan.rst b/test_plans/cvl_dcf_date_path_test_plan.rst
new file mode 100755
index 0000000..380090f
--- /dev/null
+++ b/test_plans/cvl_dcf_date_path_test_plan.rst
@@ -0,0 +1,203 @@
+
+Common steps for launching DCF
+==============================
+
+Generate 1 trust VF on 1 PF, and request 1 DCF on the trust VF.
+PF should grant DCF mode to it.
+
+Generate 4 VFs on PF ::
+
+    echo 4 > /sys/bus/pci/devices/0000:18:00.0/sriov_numvfs
+
+Set a VF as trust ::
+
+    ip link set enp24s0f0 vf 0 trust on
+    ip link set enp27s0f0 vf 0 mac D2:6B:4C:EB:1C:26
+
+Launch dpdk on the VF, request DCF mode ::
+
+    ./usertools/dpdk-devbind.py -b vfio-pci 18:01.0
+    ./x86_64-native-linuxapp-gcc/app/testpmd -l 6-10 -n 4 -w 18:01.0,cap=dcf --file-prefix=vf -- -i
+
+
+Test Case: Launch DCF and do macfwd
+===================================
+
+Execute **common steps** to prepare DCF test environment
+
+Set macfwd ::
+
+    set fwd mac
+    start
+
+Launch tcpdump to sniffer the packets from DCF ::
+
+    tcpdump -i enp24s0f1 -vvv -Q in
+
+Send packets from tester(scapy) to the VF by MAC address(D2:6B:4C:EB:1C:26) ::
+
+    p = Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IP(src="192.168.1.1",dst="192.168.1.3")/Raw('x'*64)
+    sendp(p, iface=intf, count=100)
+
+Expect tester can get packets which loopbacked by DCF.
+
+
+Test Case: Check default rss for L3
+===================================
+
+DCF data path support RSS packets by default. For L3 packets, input set is IP src/dst.
+For tunneling packets, input set is inner IP src/dst.
+
+Execute **common steps** to prepare DCF test environment
+
+Set rxonly forward mode ::
+
+    set fwd rxonly
+    set verbose 1
+    start
+    
+Send a series packets to check if DCF RSS is correct for IPv4 ::
+
+    intf="enp175s0f0" 
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IP(src="192.168.1.1", dst="192.168.1.2")/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IP(src="192.168.1.1", dst="192.168.1.3")/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IP(src="192.168.1.3", dst="192.168.1.2")/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IP(src="192.168.1.1", dst="192.168.1.2")/Raw('x'*64), iface=intf)
+
+Expected: p1 hash value is not equal to p2 or p3, and should be same to p4.
+
+Send a series packets to check if DCF RSS is correct for IPv6 ::
+
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IPv6(src="::22", dst="::11")/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IPv6(src="::22", dst="::12")/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IPv6(src="::21", dst="::11")/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IPv6(src="::22", dst="::11")/Raw('x'*64), iface=intf)
+
+Expected: p1 hash value is not equal to p2 or p3, and should be same to p4.
+
+Send a series packets to check if DCF RSS is correct for tunnelling packet (inner IPv4) ::
+
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IP(src="1.1.1.1", dst="2.2.2.2")/GRE()/IP(src="192.168.1.1", dst="192.168.1.2")/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IP(src="1.1.1.1", dst="2.2.2.2")/GRE()/IP(src="192.168.1.1", dst="192.168.1.3")/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IP(src="1.1.1.1", dst="2.2.2.2")/GRE()/IP(src="192.168.1.3", dst="192.168.1.2")/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="11:22:33:44:55:77")/IP(src="1.1.1.2", dst="2.2.2.1")/GRE()/IP(src="192.168.1.1", dst="192.168.1.2")/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="11:22:33:44:55:77")/IPv6(src="::11", dst="::22")/GRE()/IP(src="192.168.1.1", dst="192.168.1.2")/Raw('x'*64), iface=intf)
+
+
+Expected: p1 hash value is not equal to p2 or p3. p1 hash value is equal to p4 and p5.
+
+
+Send a series packets to check if DCF RSS is correct for tunnelling packet (inner IPv6) ::
+
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IP(src="1.1.1.1", dst="2.2.2.2")/GRE()/IPv6(src="::22", dst="::11")/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IP(src="1.1.1.1", dst="2.2.2.2")/GRE()/IPv6(src="::22", dst="::12")/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IP(src="1.1.1.1", dst="2.2.2.2")/GRE()/IPv6(src="::21", dst="::11")/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="11:22:33:44:55:77")/IP(src="1.1.1.2", dst="2.2.2.1")/GRE()/IPv6(src="::22", dst="::11")/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="11:22:33:44:55:77")/IPv6(src="::33", dst="::44")/GRE()/IPv6(src="::22", dst="::11")/Raw('x'*64), iface=intf)
+
+Expected: p1 hash value is not equal to p2 or p3. p1 hash value is equal to p4 and p5.
+
+
+Test Case: Check default rss for L4
+===================================
+
+DCF data path support RSS packets by default. For L3 packets, input set is IP src/dst.
+For tunneling packets, input set is inner IP src/dst.
+
+Execute **common steps** to prepare DCF test environment
+
+Set rxonly forward mode ::
+
+    set fwd rxonly
+    set verbose 1
+    start
+
+Send a series packets to check if DCF RSS is correct for IPv4 ::
+
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=1234, dport=5678)/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IP(src="192.168.1.1", dst="192.168.1.3")/UDP(sport=1234, dport=5678)/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IP(src="192.168.1.3", dst="192.168.1.2")/UDP(sport=1234, dport=5678)/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=1235, dport=5678)/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=1234, dport=5679)/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:22:33:44:55:77")/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=1234, dport=5678)/Raw('x'*64), iface=intf)
+
+Expected: p1 hash value is not equal to p2 or p3 or p4 or p5, and should be equal to p6.
+
+Send a series packets to check if DCF RSS is correct for IPv6 ::
+
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IPv6(src="::22", dst="::11")/UDP(sport=1234, dport=5678)/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IPv6(src="::22", dst="::12")/UDP(sport=1234, dport=5678)/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IPv6(src="::21", dst="::11")/UDP(sport=1234, dport=5678)/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IPv6(src="::22", dst="::11")/UDP(sport=1235, dport=5678)/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IPv6(src="::22", dst="::11")/UDP(sport=1234, dport=5679)/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="11:22:33:44:55:77")/IPv6(src="::22", dst="::11")/TCP(sport=1234, dport=5678)/Raw('x'*64), iface=intf)
+
+Expected: p1 hash value is not equal to p2 or p3 or p4 or p5, and should be equal to p6.
+
+Send a series packets to check if DCF RSS is correct for tunnelling packet (inner IPv4) ::
+
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IP(src="1.1.1.1", dst="2.2.2.2")/GRE()/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=1234, dport=5678)/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IP(src="1.1.1.1", dst="2.2.2.2")/GRE()/IP(src="192.168.1.1", dst="192.168.1.3")/UDP(sport=1234, dport=5678)/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IP(src="1.1.1.1", dst="2.2.2.2")/GRE()/IP(src="192.168.1.3", dst="192.168.1.2")/UDP(sport=1234, dport=5678)/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IP(src="1.1.1.1", dst="2.2.2.2")/GRE()/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=1235, dport=5678)/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IP(src="1.1.1.1", dst="2.2.2.2")/GRE()/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=1234, dport=5679)/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:22:33:44:55:77")/IP(src="1.1.1.2", dst="2.2.2.1")/GRE()/IP(src="192.168.1.1", dst="192.168.1.2")/UDP(sport=1234, dport=5678)/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:22:33:44:55:77")/IPv6(src="::11", dst="::22")/GRE()/IP(src="192.168.1.1", dst="192.168.1.2")/TCP(sport=1234, dport=5678)/Raw('x'*64), iface=intf)
+
+Expected: p1 hash value is not equal to p2 or p3 or p4 or p5, and should be equal to p6 and p7.
+
+
+Send a series packets to check if DCF RSS is correct for tunnelling packet (inner IPv6) ::
+
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IP(src="1.1.1.1", dst="2.2.2.2")/GRE()/IPv6(src="::22", dst="::11")/UDP(sport=1234, dport=5678)/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IP(src="1.1.1.1", dst="2.2.2.2")/GRE()/IPv6(src="::22", dst="::12")/UDP(sport=1234, dport=5678)/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IP(src="1.1.1.1", dst="2.2.2.2")/GRE()/IPv6(src="::21", dst="::11")/UDP(sport=1234, dport=5678)/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IP(src="1.1.1.1", dst="2.2.2.2")/GRE()/IPv6(src="::22", dst="::11")/UDP(sport=1235, dport=5678)/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:11:22:33:44:55")/IP(src="1.1.1.1", dst="2.2.2.2")/GRE()/IPv6(src="::22", dst="::11")/UDP(sport=1234, dport=5679)/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:22:33:44:55:77")/IP(src="1.1.1.2", dst="2.2.2.1")/GRE()/IPv6(src="::22", dst="::11")/UDP(sport=1234, dport=5678)/Raw('x'*64), iface=intf)
+    sendp(Ether(dst="D2:6B:4C:EB:1C:26", src="00:22:33:44:55:77")/IPv6(src="::33", dst="::44")/GRE()/IPv6(src="::22", dst="::11")/UDP(sport=1234, dport=5678)/Raw('x'*64), iface=intf)
+
+Expected: p1 hash value is not equal to p2 or p3 or p4 or p5, and should be equal to p6 and p7.
+
+
+Test Case: Create rule with to original VF action
+=================================================
+
+DCF data path support RSS packets by default. For L3 packets, input set is IP src/dst.
+For tunneling packets, input set is inner IP src/dst.
+
+Execute **common steps** to prepare DCF test environment
+
+Set rxonly forward mode ::
+
+    set fwd rxonly
+    set verbose 1
+    start
+
+Send a packet, check the DCF can't recieve the packet (Dest mac address is not DCF's mac) ::
+    
+    sendp([Ether(dst="68:05:ca:8d:ed:a8")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1518", dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/TCP(sport=25,dport=23)/("X"*480)], iface=intf, count=1)
+
+Create a rule to DCF ::
+
+    flow create 0 ingress pattern eth dst is 68:05:ca:8d:ed:a8 / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / tcp src is 25 dst is 23 / end actions vf original 1 / end
+
+Send the packet again, check DCF can recieve the packet ::
+
+    sendp([Ether(dst="68:05:ca:8d:ed:a8")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1518", dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/TCP(sport=25,dport=23)/("X"*480)], iface=intf, count=1)
+
+Destory the rule on DCF ::
+
+    flow destroy 0 rule 0
+
+Send the packet agiain, check DCF can't recieve the packet ::
+
+    sendp([Ether(dst="68:05:ca:8d:ed:a8")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1518", dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/TCP(sport=25,dport=23)/("X"*480)], iface=intf, count=1)
+
+
+Test Case: Measure performance of DCF interface
+===============================================
+
+The steps are same to iAVF performance test, a slight difference on 
+launching testpmd devarg. DCF need cap=dcf option.
+Expect the performance is same to iAVF
\ No newline at end of file
-- 
2.17.1


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [dts] [PATCH V1 2/2] tests:add new suite
  2020-07-31  8:19 [dts] [PATCH V1 1/2] test_plans:add new test plan Xu hailin
@ 2020-07-31  8:19 ` Xu hailin
  2020-07-31  8:19 ` [dts] [PATCH V1 0/2] test_plans: adds, tests: adds Xu hailin
  2020-08-06  1:27 ` [dts] [PATCH V1 1/2] test_plans:add new test plan Chen, Zhaoyan
  2 siblings, 0 replies; 7+ messages in thread
From: Xu hailin @ 2020-07-31  8:19 UTC (permalink / raw)
  To: dts; +Cc: Xu,Hailin

From: "Xu,Hailin" <hailinx.xu@intel.com>

add cvl dcf new test suite:tests/TestSuite_cvl_dcf_date_path.py

Signed-off-by: Xu,Hailin <hailinx.xu@intel.com>
---
 tests/TestSuite_cvl_dcf_date_path.py | 206 +++++++++++++++++++++++++++
 1 file changed, 206 insertions(+)
 create mode 100755 tests/TestSuite_cvl_dcf_date_path.py

diff --git a/tests/TestSuite_cvl_dcf_date_path.py b/tests/TestSuite_cvl_dcf_date_path.py
new file mode 100755
index 0000000..9efeab4
--- /dev/null
+++ b/tests/TestSuite_cvl_dcf_date_path.py
@@ -0,0 +1,206 @@
+# BSD LICENSE
+#
+# Copyright(c) 2010-2019 Intel Corporation. All rights reserved.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#   * Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+#   * Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in
+#     the documentation and/or other materials provided with the
+#     distribution.
+#   * Neither the name of Intel Corporation nor the names of its
+#     contributors may be used to endorse or promote products derived
+#     from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+import re
+import time
+from pmd_output import PmdOutput
+from test_case import TestCase
+from packet import Packet
+
+
+class DcfDatePathTest(TestCase):
+    vf_mac = "D2:6B:4C:EB:1C:26"
+    wrong_mac = "68:05:CA:8D:ED:A8"
+
+    def set_up_all(self):
+        self.dut_ports = self.dut.get_ports(self.nic)
+        self.used_dut_port = self.dut_ports[0]
+        self.verify(len(self.dut_ports) >= 1, "Insufficient ports")
+        self.vf_driver = self.get_suite_cfg()['vf_driver']
+        self.dut_intf0 = self.dut.ports_info[self.used_dut_port]['intf']
+        self.tester_intf0 = self.tester.get_interface(self.tester.get_local_port(0))
+        # Generate 1 trust VF on 1 PF, and request 1 DCF on the trust VF
+        self.dut.generate_sriov_vfs_by_port(self.used_dut_port, 4, self.kdriver)
+        self.sriov_vfs_port_0 = self.dut.ports_info[self.dut_ports[0]]['vfs_port']
+        self.used_vf_pci = self.sriov_vfs_port_0[0].pci
+        # config vf trust on and vf mac value
+        self.dut.send_expect('ip link set %s vf 0 trust on' % self.dut_intf0, '#')
+        self.dut.send_expect('ip link set {} vf 0 mac {}'.format(self.dut_intf0, self.vf_mac), '#')
+        self.sriov_vfs_port_0[0].bind_driver(self.vf_driver)
+        self.pmd_output = PmdOutput(self.dut)
+        self.pkt = Packet()
+
+    def set_up(self):
+        self.pmd_output.start_testpmd(cores="1S/4C/1T", param='', eal_param="-w %s,cap=dcf --file-prefix=vf" % self.used_vf_pci)
+
+    def send_packets(self, packets, tx_port, count=1):
+        self.pkt.update_pkt(packets)
+        self.pkt.send_pkt(crb=self.tester, tx_port=tx_port, count=count)
+
+    def send_pkts_getouput(self, pkts, tx_port, count=1, status=False):
+        # Get the DCF package information
+        p = re.compile('RSS hash=(\w+)')
+        self.send_packets(pkts, tx_port=tx_port, count=count)
+        time.sleep(0.5)
+        if status:
+            out = self.pmd_output.get_output()
+        else:
+            # Get the DCF package rss hash value
+            output = self.pmd_output.get_output()
+            out = p.findall(output)
+        return out
+
+    def test_dcf_macfwd(self):
+        """
+        Test Case: Launch DCF and do macfwd
+        """
+        self.pmd_output.execute_cmd("set fwd mac")
+        self.pmd_output.execute_cmd("start")
+        inst = self.tester.tcpdump_sniff_packets(self.tester_intf0)
+        pkts_cmd = 'Ether(dst="{}", src="00:11:22:33:44:55")/IP(src="192.168.1.1",dst="192.168.1.3")/Raw("x"*64)'.format(self.vf_mac)
+        self.send_packets(pkts_cmd, self.tester_intf0, count=100)
+        time.sleep(2)
+        p = self.tester.load_tcpdump_sniff_packets(inst)
+        self.verify(len(p) == 100, "send 100 packets received %d packets, not match" % len(p))
+
+    def test_default_rss_l3(self):
+        """
+        Test Case: Check default rss for L3
+        """
+        pkt_list1 = [
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IP(src="192.168.1.1",dst="192.168.1.2") / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IP(src="192.168.1.1",dst="192.168.1.3") / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IP(src="192.168.1.3",dst="192.168.1.2") / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IP(src="192.168.1.1",dst="192.168.1.2") / Raw("x" * 64)' % self.vf_mac]
+        pkt_list2 = [
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IPv6(src="::22", dst="::11") / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IPv6(src="::22", dst="::12") / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IPv6(src="::21", dst="::11") / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IPv6(src="::22", dst="::11") / Raw("x" * 64)' % self.vf_mac]
+        pkt_list3 = [
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IP(src="1.1.1.1", dst="2.2.2.2") / GRE() / IP(src="192.168.1.1", dst="192.168.1.2") / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IP(src="1.1.1.1", dst="2.2.2.2") / GRE() / IP(src="192.168.1.1", dst="192.168.1.3") / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IP(src="1.1.1.1", dst="2.2.2.2") / GRE() / IP(src="192.168.1.3", dst="192.168.1.2") / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="11:22:33:44:55:77") / IP(src="1.1.1.2", dst="2.2.2.1") / GRE() / IP(src="192.168.1.1", dst="192.168.1.2") / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="11:22:33:44:55:77") / IPv6(src="::11", dst="::22") / GRE() / IP(src="192.168.1.1", dst="192.168.1.2") / Raw("x" * 64)' % self.vf_mac]
+        pkt_list4 = [
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IP(src="1.1.1.1",dst="2.2.2.2") / GRE() / IPv6(src="::22",dst="::11") / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IP(src="1.1.1.1",dst="2.2.2.2") / GRE() / IPv6(src="::22",dst="::12") / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IP(src="1.1.1.1",dst="2.2.2.2") / GRE() / IPv6(src="::21",dst="::11") / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="11:22:33:44:55:77") / IP(src="1.1.1.2",dst="2.2.2.1") / GRE() / IPv6(src="::22",dst="::11") / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="11:22:33:44:55:77") / IPv6(src="::33", dst="::44") / GRE() / IPv6(src="::22", dst="::11") / Raw("x" * 64)' % self.vf_mac]
+
+        self.pmd_output.execute_cmd("set fwd rxonly")
+        self.pmd_output.execute_cmd("set verbose 1")
+        self.pmd_output.execute_cmd("start")
+        out1 = self.send_pkts_getouput(pkt_list1, self.tester_intf0)
+        self.verify(out1[0] == out1[3] and out1[0] != out1[1] != out1[2], "ipv4 rss hash value test failed")
+        out2 = self.send_pkts_getouput(pkt_list2, self.tester_intf0)
+        self.verify(out2[0] == out2[3] and out2[0] != out2[1] != out2[2], "ipv6 rss hash value test failed")
+        out3 = self.send_pkts_getouput(pkt_list3, self.tester_intf0)
+        self.verify(out3[0] == out3[3] == out3[4] and out3[0] != out3[1] != out3[2], "inner ipv4 rss hash value test failed")
+        out4 = self.send_pkts_getouput(pkt_list4, self.tester_intf0)
+        self.verify(out4[0] == out4[3] == out4[4] and out4[0] != out4[1] != out4[2], "inner ipv6 rss hash value test failed")
+
+    def test_default_rss_l4(self):
+        """
+        Test Case: Check default rss for L4
+        """
+        pkt_list1 = [
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IP(src="192.168.1.1",dst="192.168.1.2") / UDP(sport=1234,dport=5678) / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IP(src="192.168.1.1",dst="192.168.1.3") / UDP(sport=1234,dport=5678) / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IP(src="192.168.1.3",dst="192.168.1.2") / UDP(sport=1234,dport=5678) / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IP(src="192.168.1.1",dst="192.168.1.2") / UDP(sport=1235,dport=5678) / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IP(src="192.168.1.1",dst="192.168.1.2") / UDP(sport=1234,dport=5679) / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="00:22:33:44:55:77") / IP(src="192.168.1.1",dst="192.168.1.2") / TCP(sport=1234,dport=5678) / Raw("x" * 64)' % self.vf_mac]
+        pkt_list2 = [
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IPv6(src="::22", dst="::11") / UDP(sport=1234,dport=5678) / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IPv6(src="::22", dst="::12") / UDP(sport=1234,dport=5678) / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IPv6(src="::21", dst="::11") / UDP(sport=1234,dport=5678) / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IPv6(src="::22", dst="::11") / UDP(sport=1235,dport=5678) / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IPv6(src="::22", dst="::11") / UDP(sport=1234,dport=5679) / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="11:22:33:44:55:77") / IPv6(src="::22", dst="::11") / TCP(sport=1234,dport=5678) / Raw("x" * 64)' % self.vf_mac]
+        pkt_list3 = [
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IP(src="1.1.1.1", dst="2.2.2.2") / GRE() / IP(src="192.168.1.1", dst="192.168.1.2") / UDP(sport=22, dport=23) / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IP(src="1.1.1.1", dst="2.2.2.2") / GRE() / IP(src="192.168.1.1", dst="192.168.1.3") / UDP(sport=22, dport=23) / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IP(src="1.1.1.1", dst="2.2.2.2") / GRE() / IP(src="192.168.1.3", dst="192.168.1.2") / UDP(sport=22, dport=23) / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IP(src="1.1.1.1", dst="2.2.2.2") / GRE() / IP(src="192.168.1.1", dst="192.168.1.2") / UDP(sport=21, dport=23) / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IP(src="1.1.1.1", dst="2.2.2.2") / GRE() / IP(src="192.168.1.1", dst="192.168.1.2") / UDP(sport=22, dport=24) / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="00:22:33:44:55:77") / IP(src="1.1.1.2", dst="2.2.2.1") / GRE() / IP(src="192.168.1.1", dst="192.168.1.2") / UDP(sport=22, dport=23) / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="00:22:33:44:55:77") / IPv6(src="::11", dst="::22") / GRE() / IP(src="192.168.1.1", dst="192.168.1.2") / TCP(sport=22, dport=23) / Raw("x" * 64)' % self.vf_mac]
+        pkt_list4 = [
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IP(src="1.1.1.1",dst="2.2.2.2") / GRE() / IPv6(src="::22",dst="::11") / UDP(sport=1234, dport=5678) / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IP(src="1.1.1.1",dst="2.2.2.2") / GRE() / IPv6(src="::22",dst="::12") / UDP(sport=1234, dport=5678) / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IP(src="1.1.1.1",dst="2.2.2.2") / GRE() / IPv6(src="::21",dst="::11") / UDP(sport=1234, dport=5678) / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IP(src="1.1.1.1",dst="2.2.2.2") / GRE() / IPv6(src="::22",dst="::11") / UDP(sport=1235, dport=5678) / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="00:11:22:33:44:55") / IP(src="1.1.1.1",dst="2.2.2.2") / GRE() / IPv6(src="::22",dst="::11") / UDP(sport=1234, dport=5679) / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="00:22:33:44:55:77") / IP(src="1.1.1.2",dst="2.2.2.1") / GRE() / IPv6(src="::22",dst="::11") / UDP(sport=1234, dport=5678) / Raw("x" * 64)' % self.vf_mac,
+            'Ether(dst="%s", src="00:22:33:44:55:77") / IPv6(src="::33", dst="::44") / GRE() / IPv6(src="::22", dst="::11") / UDP(sport=1234, dport=5678) / Raw("x" * 64)' % self.vf_mac]
+
+        self.pmd_output.execute_cmd("set fwd rxonly")
+        self.pmd_output.execute_cmd("set verbose 1")
+        self.pmd_output.execute_cmd("start")
+        out1 = self.send_pkts_getouput(pkt_list1, self.tester_intf0)
+        self.verify(out1[0] == out1[5] and out1[0] != out1[1] != out1[2] != out1[3] != out1[4], "ipv4 rss hash value test failed")
+        out2 = self.send_pkts_getouput(pkt_list2, self.tester_intf0)
+        self.verify(out2[0] == out2[5] and out2[0] != out2[1] != out2[2] != out2[3] != out2[4], "ipv6 rss hash value test failed")
+        out3 = self.send_pkts_getouput(pkt_list3, self.tester_intf0)
+        self.verify(out3[0] == out3[6] and out3[0] != out3[1] != out3[2] != out3[3] != out3[4] != out3[5], "inner ipv4 rss hash value test failed")
+        out4 = self.send_pkts_getouput(pkt_list4, self.tester_intf0)
+        self.verify(out4[0] == out4[6] and out4[0] != out4[1] != out4[2] != out4[3] != out4[4] != out4[5], "inner ipv6 rss hash value test failed")
+
+    def test_create_rule_with_vf_action(self):
+        """
+        Test Case: Create rule with to original VF action
+        """
+        pkt = 'Ether(dst="%s")/IPv6(src="CDCD:910A:2222:5498:8475:1111:3900:1518", dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/TCP(sport=25,dport=23)/("X"*480)' % self.wrong_mac
+        rule = 'flow create 0 ingress pattern eth dst is %s / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / tcp src is 25 dst is 23 / end actions vf original 1 / end' % self.wrong_mac
+
+        self.pmd_output.execute_cmd("set fwd rxonly")
+        self.pmd_output.execute_cmd("set verbose 1")
+        self.pmd_output.execute_cmd("start")
+        out = self.send_pkts_getouput(pkt, self.tester_intf0, status=True)
+        self.verify(self.wrong_mac not in out, "The wrong mac packet was received")
+        self.pmd_output.execute_cmd(rule, "created")
+        out = self.send_pkts_getouput(pkt, self.tester_intf0, status=True)
+        self.verify(self.wrong_mac in out, "The wrong mac packet not received")
+        self.pmd_output.execute_cmd("flow destroy 0 rule 0", "destroyed")
+        out = self.send_pkts_getouput(pkt, self.tester_intf0, status=True)
+        self.verify(self.wrong_mac not in out, "The wrong mac packet was received")
+
+    def tear_down(self):
+        self.pmd_output.execute_cmd('quit', "#")
+
+    def tear_down_all(self):
+        self.dut.kill_all()
+        self.dut.destroy_sriov_vfs_by_port(self.used_dut_port)
+
-- 
2.17.1


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [dts] [PATCH V1 0/2] test_plans: adds, tests: adds
  2020-07-31  8:19 [dts] [PATCH V1 1/2] test_plans:add new test plan Xu hailin
  2020-07-31  8:19 ` [dts] [PATCH V1 2/2] tests:add new suite Xu hailin
@ 2020-07-31  8:19 ` Xu hailin
  2020-08-03  6:09   ` Xu, HailinX
  2020-08-12  8:00   ` Tu, Lijuan
  2020-08-06  1:27 ` [dts] [PATCH V1 1/2] test_plans:add new test plan Chen, Zhaoyan
  2 siblings, 2 replies; 7+ messages in thread
From: Xu hailin @ 2020-07-31  8:19 UTC (permalink / raw)
  To: dts; +Cc: Xu,Hailin

From: "Xu,Hailin" <hailinx.xu@intel.com>

add cvl dcf new suite

Xu,Hailin (2):
  test_plans/cvl_dcf_date_path:add new test plan
  tests/TestSuite_cvl_dcf_date_path:add new suite

 test_plans/cvl_dcf_date_path_test_plan.rst | 203 ++++++++++++++++++++
 tests/TestSuite_cvl_dcf_date_path.py       | 206 +++++++++++++++++++++
 2 files changed, 409 insertions(+)
 create mode 100755 test_plans/cvl_dcf_date_path_test_plan.rst
 create mode 100755 tests/TestSuite_cvl_dcf_date_path.py

-- 
2.17.1


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [dts] [PATCH V1 0/2] test_plans: adds, tests: adds
  2020-07-31  8:19 ` [dts] [PATCH V1 0/2] test_plans: adds, tests: adds Xu hailin
@ 2020-08-03  6:09   ` Xu, HailinX
  2020-08-06  1:27     ` Chen, Zhaoyan
  2020-08-12  8:00   ` Tu, Lijuan
  1 sibling, 1 reply; 7+ messages in thread
From: Xu, HailinX @ 2020-08-03  6:09 UTC (permalink / raw)
  To: dts

[-- Attachment #1: Type: text/plain, Size: 790 bytes --]

Tested-by:  Xu, HailinX <hailinx.xu@intel.com>

Regards,
Xu, Hailin


-----Original Message-----
From: Xu, HailinX 
Sent: Friday, July 31, 2020 4:19 PM
To: dts@dpdk.org
Cc: Xu, HailinX <hailinx.xu@intel.com>
Subject: [dts][PATCH V1 0/2] test_plans: adds, tests: adds

From: "Xu,Hailin" <hailinx.xu@intel.com>

add cvl dcf new suite

Xu,Hailin (2):
  test_plans/cvl_dcf_date_path:add new test plan
  tests/TestSuite_cvl_dcf_date_path:add new suite

 test_plans/cvl_dcf_date_path_test_plan.rst | 203 ++++++++++++++++++++
 tests/TestSuite_cvl_dcf_date_path.py       | 206 +++++++++++++++++++++
 2 files changed, 409 insertions(+)
 create mode 100755 test_plans/cvl_dcf_date_path_test_plan.rst
 create mode 100755 tests/TestSuite_cvl_dcf_date_path.py

-- 
2.17.1


[-- Attachment #2: DcfDatePathTest.log --]
[-- Type: application/octet-stream, Size: 67610 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [dts] [PATCH V1 1/2] test_plans:add new test plan
  2020-07-31  8:19 [dts] [PATCH V1 1/2] test_plans:add new test plan Xu hailin
  2020-07-31  8:19 ` [dts] [PATCH V1 2/2] tests:add new suite Xu hailin
  2020-07-31  8:19 ` [dts] [PATCH V1 0/2] test_plans: adds, tests: adds Xu hailin
@ 2020-08-06  1:27 ` Chen, Zhaoyan
  2 siblings, 0 replies; 7+ messages in thread
From: Chen, Zhaoyan @ 2020-08-06  1:27 UTC (permalink / raw)
  To: Xu, HailinX, dts; +Cc: Xu, HailinX, Chen, Zhaoyan

Acked-by: Zhaoyan Chen <zhaoyan.chen@intel.com>



Regards,
Zhaoyan Chen

> -----Original Message-----
> From: dts <dts-bounces@dpdk.org> On Behalf Of Xu hailin
> Sent: Friday, July 31, 2020 4:19 PM
> To: dts@dpdk.org
> Cc: Xu, HailinX <hailinx.xu@intel.com>
> Subject: [dts] [PATCH V1 1/2] test_plans:add new test plan
> 
> From: "Xu,Hailin" <hailinx.xu@intel.com>
> 
> add cvl dcf new test plan:test_plans/cvl_dcf_date_path_test_plan.rst
> 
> Signed-off-by: Xu,Hailin <hailinx.xu@intel.com>
> ---
>  test_plans/cvl_dcf_date_path_test_plan.rst | 203
> +++++++++++++++++++++
>  1 file changed, 203 insertions(+)
>  create mode 100755 test_plans/cvl_dcf_date_path_test_plan.rst
> 
> diff --git a/test_plans/cvl_dcf_date_path_test_plan.rst
> b/test_plans/cvl_dcf_date_path_test_plan.rst
> new file mode 100755
> index 0000000..380090f
> --- /dev/null
> +++ b/test_plans/cvl_dcf_date_path_test_plan.rst
> @@ -0,0 +1,203 @@
> +
> +Common steps for launching DCF
> +==============================
> +
> +Generate 1 trust VF on 1 PF, and request 1 DCF on the trust VF.
> +PF should grant DCF mode to it.
> +
> +Generate 4 VFs on PF ::
> +
> +    echo 4 > /sys/bus/pci/devices/0000:18:00.0/sriov_numvfs
> +
> +Set a VF as trust ::
> +
> +    ip link set enp24s0f0 vf 0 trust on
> +    ip link set enp27s0f0 vf 0 mac D2:6B:4C:EB:1C:26
> +
> +Launch dpdk on the VF, request DCF mode ::
> +
> +    ./usertools/dpdk-devbind.py -b vfio-pci 18:01.0
> +    ./x86_64-native-linuxapp-gcc/app/testpmd -l 6-10 -n 4 -w
> + 18:01.0,cap=dcf --file-prefix=vf -- -i
> +
> +
> +Test Case: Launch DCF and do macfwd
> +===================================
> +
> +Execute **common steps** to prepare DCF test environment
> +
> +Set macfwd ::
> +
> +    set fwd mac
> +    start
> +
> +Launch tcpdump to sniffer the packets from DCF ::
> +
> +    tcpdump -i enp24s0f1 -vvv -Q in
> +
> +Send packets from tester(scapy) to the VF by MAC
> address(D2:6B:4C:EB:1C:26) ::
> +
> +    p = Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:11:22:33:44:55")/IP(src="192.168.1.1",dst="192.168.1.3")/Raw('x'*6
> 4)
> +    sendp(p, iface=intf, count=100)
> +
> +Expect tester can get packets which loopbacked by DCF.
> +
> +
> +Test Case: Check default rss for L3
> +===================================
> +
> +DCF data path support RSS packets by default. For L3 packets, input set is
> IP src/dst.
> +For tunneling packets, input set is inner IP src/dst.
> +
> +Execute **common steps** to prepare DCF test environment
> +
> +Set rxonly forward mode ::
> +
> +    set fwd rxonly
> +    set verbose 1
> +    start
> +
> +Send a series packets to check if DCF RSS is correct for IPv4 ::
> +
> +    intf="enp175s0f0"
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:11:22:33:44:55")/IP(src="192.168.1.1",
> dst="192.168.1.2")/Raw('x'*64), iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:11:22:33:44:55")/IP(src="192.168.1.1",
> dst="192.168.1.3")/Raw('x'*64), iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:11:22:33:44:55")/IP(src="192.168.1.3",
> dst="192.168.1.2")/Raw('x'*64), iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> + src="00:11:22:33:44:55")/IP(src="192.168.1.1",
> + dst="192.168.1.2")/Raw('x'*64), iface=intf)
> +
> +Expected: p1 hash value is not equal to p2 or p3, and should be same to
> p4.
> +
> +Send a series packets to check if DCF RSS is correct for IPv6 ::
> +
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:11:22:33:44:55")/IPv6(src="::22", dst="::11")/Raw('x'*64), iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:11:22:33:44:55")/IPv6(src="::22", dst="::12")/Raw('x'*64), iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:11:22:33:44:55")/IPv6(src="::21", dst="::11")/Raw('x'*64), iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> + src="00:11:22:33:44:55")/IPv6(src="::22", dst="::11")/Raw('x'*64),
> + iface=intf)
> +
> +Expected: p1 hash value is not equal to p2 or p3, and should be same to
> p4.
> +
> +Send a series packets to check if DCF RSS is correct for tunnelling packet
> (inner IPv4) ::
> +
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:11:22:33:44:55")/IP(src="1.1.1.1",
> dst="2.2.2.2")/GRE()/IP(src="192.168.1.1", dst="192.168.1.2")/Raw('x'*64),
> iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:11:22:33:44:55")/IP(src="1.1.1.1",
> dst="2.2.2.2")/GRE()/IP(src="192.168.1.1", dst="192.168.1.3")/Raw('x'*64),
> iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:11:22:33:44:55")/IP(src="1.1.1.1",
> dst="2.2.2.2")/GRE()/IP(src="192.168.1.3", dst="192.168.1.2")/Raw('x'*64),
> iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="11:22:33:44:55:77")/IP(src="1.1.1.2",
> dst="2.2.2.1")/GRE()/IP(src="192.168.1.1", dst="192.168.1.2")/Raw('x'*64),
> iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> + src="11:22:33:44:55:77")/IPv6(src="::11",
> + dst="::22")/GRE()/IP(src="192.168.1.1",
> + dst="192.168.1.2")/Raw('x'*64), iface=intf)
> +
> +
> +Expected: p1 hash value is not equal to p2 or p3. p1 hash value is equal
> to p4 and p5.
> +
> +
> +Send a series packets to check if DCF RSS is correct for tunnelling packet
> (inner IPv6) ::
> +
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:11:22:33:44:55")/IP(src="1.1.1.1",
> dst="2.2.2.2")/GRE()/IPv6(src="::22", dst="::11")/Raw('x'*64), iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:11:22:33:44:55")/IP(src="1.1.1.1",
> dst="2.2.2.2")/GRE()/IPv6(src="::22", dst="::12")/Raw('x'*64), iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:11:22:33:44:55")/IP(src="1.1.1.1",
> dst="2.2.2.2")/GRE()/IPv6(src="::21", dst="::11")/Raw('x'*64), iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="11:22:33:44:55:77")/IP(src="1.1.1.2",
> dst="2.2.2.1")/GRE()/IPv6(src="::22", dst="::11")/Raw('x'*64), iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> + src="11:22:33:44:55:77")/IPv6(src="::33",
> + dst="::44")/GRE()/IPv6(src="::22", dst="::11")/Raw('x'*64),
> + iface=intf)
> +
> +Expected: p1 hash value is not equal to p2 or p3. p1 hash value is equal
> to p4 and p5.
> +
> +
> +Test Case: Check default rss for L4
> +===================================
> +
> +DCF data path support RSS packets by default. For L3 packets, input set is
> IP src/dst.
> +For tunneling packets, input set is inner IP src/dst.
> +
> +Execute **common steps** to prepare DCF test environment
> +
> +Set rxonly forward mode ::
> +
> +    set fwd rxonly
> +    set verbose 1
> +    start
> +
> +Send a series packets to check if DCF RSS is correct for IPv4 ::
> +
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:11:22:33:44:55")/IP(src="192.168.1.1",
> dst="192.168.1.2")/UDP(sport=1234, dport=5678)/Raw('x'*64), iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:11:22:33:44:55")/IP(src="192.168.1.1",
> dst="192.168.1.3")/UDP(sport=1234, dport=5678)/Raw('x'*64), iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:11:22:33:44:55")/IP(src="192.168.1.3",
> dst="192.168.1.2")/UDP(sport=1234, dport=5678)/Raw('x'*64), iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:11:22:33:44:55")/IP(src="192.168.1.1",
> dst="192.168.1.2")/UDP(sport=1235, dport=5678)/Raw('x'*64), iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:11:22:33:44:55")/IP(src="192.168.1.1",
> dst="192.168.1.2")/UDP(sport=1234, dport=5679)/Raw('x'*64), iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> + src="00:22:33:44:55:77")/IP(src="192.168.1.1",
> + dst="192.168.1.2")/TCP(sport=1234, dport=5678)/Raw('x'*64),
> + iface=intf)
> +
> +Expected: p1 hash value is not equal to p2 or p3 or p4 or p5, and should
> be equal to p6.
> +
> +Send a series packets to check if DCF RSS is correct for IPv6 ::
> +
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:11:22:33:44:55")/IPv6(src="::22", dst="::11")/UDP(sport=1234,
> dport=5678)/Raw('x'*64), iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:11:22:33:44:55")/IPv6(src="::22", dst="::12")/UDP(sport=1234,
> dport=5678)/Raw('x'*64), iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:11:22:33:44:55")/IPv6(src="::21", dst="::11")/UDP(sport=1234,
> dport=5678)/Raw('x'*64), iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:11:22:33:44:55")/IPv6(src="::22", dst="::11")/UDP(sport=1235,
> dport=5678)/Raw('x'*64), iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:11:22:33:44:55")/IPv6(src="::22", dst="::11")/UDP(sport=1234,
> dport=5679)/Raw('x'*64), iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> + src="11:22:33:44:55:77")/IPv6(src="::22", dst="::11")/TCP(sport=1234,
> + dport=5678)/Raw('x'*64), iface=intf)
> +
> +Expected: p1 hash value is not equal to p2 or p3 or p4 or p5, and should
> be equal to p6.
> +
> +Send a series packets to check if DCF RSS is correct for tunnelling packet
> (inner IPv4) ::
> +
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:11:22:33:44:55")/IP(src="1.1.1.1",
> dst="2.2.2.2")/GRE()/IP(src="192.168.1.1",
> dst="192.168.1.2")/UDP(sport=1234, dport=5678)/Raw('x'*64), iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:11:22:33:44:55")/IP(src="1.1.1.1",
> dst="2.2.2.2")/GRE()/IP(src="192.168.1.1",
> dst="192.168.1.3")/UDP(sport=1234, dport=5678)/Raw('x'*64), iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:11:22:33:44:55")/IP(src="1.1.1.1",
> dst="2.2.2.2")/GRE()/IP(src="192.168.1.3",
> dst="192.168.1.2")/UDP(sport=1234, dport=5678)/Raw('x'*64), iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:11:22:33:44:55")/IP(src="1.1.1.1",
> dst="2.2.2.2")/GRE()/IP(src="192.168.1.1",
> dst="192.168.1.2")/UDP(sport=1235, dport=5678)/Raw('x'*64), iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:11:22:33:44:55")/IP(src="1.1.1.1",
> dst="2.2.2.2")/GRE()/IP(src="192.168.1.1",
> dst="192.168.1.2")/UDP(sport=1234, dport=5679)/Raw('x'*64), iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:22:33:44:55:77")/IP(src="1.1.1.2",
> dst="2.2.2.1")/GRE()/IP(src="192.168.1.1",
> dst="192.168.1.2")/UDP(sport=1234, dport=5678)/Raw('x'*64), iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> + src="00:22:33:44:55:77")/IPv6(src="::11",
> + dst="::22")/GRE()/IP(src="192.168.1.1",
> + dst="192.168.1.2")/TCP(sport=1234, dport=5678)/Raw('x'*64),
> + iface=intf)
> +
> +Expected: p1 hash value is not equal to p2 or p3 or p4 or p5, and should
> be equal to p6 and p7.
> +
> +
> +Send a series packets to check if DCF RSS is correct for tunnelling packet
> (inner IPv6) ::
> +
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:11:22:33:44:55")/IP(src="1.1.1.1",
> dst="2.2.2.2")/GRE()/IPv6(src="::22", dst="::11")/UDP(sport=1234,
> dport=5678)/Raw('x'*64), iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:11:22:33:44:55")/IP(src="1.1.1.1",
> dst="2.2.2.2")/GRE()/IPv6(src="::22", dst="::12")/UDP(sport=1234,
> dport=5678)/Raw('x'*64), iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:11:22:33:44:55")/IP(src="1.1.1.1",
> dst="2.2.2.2")/GRE()/IPv6(src="::21", dst="::11")/UDP(sport=1234,
> dport=5678)/Raw('x'*64), iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:11:22:33:44:55")/IP(src="1.1.1.1",
> dst="2.2.2.2")/GRE()/IPv6(src="::22", dst="::11")/UDP(sport=1235,
> dport=5678)/Raw('x'*64), iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:11:22:33:44:55")/IP(src="1.1.1.1",
> dst="2.2.2.2")/GRE()/IPv6(src="::22", dst="::11")/UDP(sport=1234,
> dport=5679)/Raw('x'*64), iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> src="00:22:33:44:55:77")/IP(src="1.1.1.2",
> dst="2.2.2.1")/GRE()/IPv6(src="::22", dst="::11")/UDP(sport=1234,
> dport=5678)/Raw('x'*64), iface=intf)
> +    sendp(Ether(dst="D2:6B:4C:EB:1C:26",
> + src="00:22:33:44:55:77")/IPv6(src="::33",
> + dst="::44")/GRE()/IPv6(src="::22", dst="::11")/UDP(sport=1234,
> + dport=5678)/Raw('x'*64), iface=intf)
> +
> +Expected: p1 hash value is not equal to p2 or p3 or p4 or p5, and should
> be equal to p6 and p7.
> +
> +
> +Test Case: Create rule with to original VF action
> +=================================================
> +
> +DCF data path support RSS packets by default. For L3 packets, input set is
> IP src/dst.
> +For tunneling packets, input set is inner IP src/dst.
> +
> +Execute **common steps** to prepare DCF test environment
> +
> +Set rxonly forward mode ::
> +
> +    set fwd rxonly
> +    set verbose 1
> +    start
> +
> +Send a packet, check the DCF can't recieve the packet (Dest mac address
> is not DCF's mac) ::
> +
> +
> +
> sendp([Ether(dst="68:05:ca:8d:ed:a8")/IPv6(src="CDCD:910A:2222:5498:84
> + 75:1111:3900:1518",
> +
> dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/TCP(sport=25,dp
> ort
> + =23)/("X"*480)], iface=intf, count=1)
> +
> +Create a rule to DCF ::
> +
> +    flow create 0 ingress pattern eth dst is 68:05:ca:8d:ed:a8 / ipv6
> + dst is CDCD:910A:2222:5498:8475:1111:3900:2020 tc is 3 / tcp src is 25
> + dst is 23 / end actions vf original 1 / end
> +
> +Send the packet again, check DCF can recieve the packet ::
> +
> +
> +
> sendp([Ether(dst="68:05:ca:8d:ed:a8")/IPv6(src="CDCD:910A:2222:5498:84
> + 75:1111:3900:1518",
> +
> dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/TCP(sport=25,dp
> ort
> + =23)/("X"*480)], iface=intf, count=1)
> +
> +Destory the rule on DCF ::
> +
> +    flow destroy 0 rule 0
> +
> +Send the packet agiain, check DCF can't recieve the packet ::
> +
> +
> +
> sendp([Ether(dst="68:05:ca:8d:ed:a8")/IPv6(src="CDCD:910A:2222:5498:84
> + 75:1111:3900:1518",
> +
> dst="CDCD:910A:2222:5498:8475:1111:3900:2020",tc=3)/TCP(sport=25,dp
> ort
> + =23)/("X"*480)], iface=intf, count=1)
> +
> +
> +Test Case: Measure performance of DCF interface
> +===============================================
> +
> +The steps are same to iAVF performance test, a slight difference on
> +launching testpmd devarg. DCF need cap=dcf option.
> +Expect the performance is same to iAVF
> \ No newline at end of file
> --
> 2.17.1


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [dts] [PATCH V1 0/2] test_plans: adds, tests: adds
  2020-08-03  6:09   ` Xu, HailinX
@ 2020-08-06  1:27     ` Chen, Zhaoyan
  0 siblings, 0 replies; 7+ messages in thread
From: Chen, Zhaoyan @ 2020-08-06  1:27 UTC (permalink / raw)
  To: Xu, HailinX, dts; +Cc: Chen, Zhaoyan

Acked-by: Zhaoyan Chen <zhaoyan.chen@intel.com>



Regards,
Zhaoyan Chen

> -----Original Message-----
> From: dts <dts-bounces@dpdk.org> On Behalf Of Xu, HailinX
> Sent: Monday, August 3, 2020 2:10 PM
> To: dts@dpdk.org
> Subject: Re: [dts] [PATCH V1 0/2] test_plans: adds, tests: adds
> 
> Tested-by:  Xu, HailinX <hailinx.xu@intel.com>
> 
> Regards,
> Xu, Hailin
> 
> 
> -----Original Message-----
> From: Xu, HailinX
> Sent: Friday, July 31, 2020 4:19 PM
> To: dts@dpdk.org
> Cc: Xu, HailinX <hailinx.xu@intel.com>
> Subject: [dts][PATCH V1 0/2] test_plans: adds, tests: adds
> 
> From: "Xu,Hailin" <hailinx.xu@intel.com>
> 
> add cvl dcf new suite
> 
> Xu,Hailin (2):
>   test_plans/cvl_dcf_date_path:add new test plan
>   tests/TestSuite_cvl_dcf_date_path:add new suite
> 
>  test_plans/cvl_dcf_date_path_test_plan.rst | 203
> ++++++++++++++++++++
>  tests/TestSuite_cvl_dcf_date_path.py       | 206 +++++++++++++++++++++
>  2 files changed, 409 insertions(+)
>  create mode 100755 test_plans/cvl_dcf_date_path_test_plan.rst
>  create mode 100755 tests/TestSuite_cvl_dcf_date_path.py
> 
> --
> 2.17.1


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [dts] [PATCH V1 0/2] test_plans: adds, tests: adds
  2020-07-31  8:19 ` [dts] [PATCH V1 0/2] test_plans: adds, tests: adds Xu hailin
  2020-08-03  6:09   ` Xu, HailinX
@ 2020-08-12  8:00   ` Tu, Lijuan
  1 sibling, 0 replies; 7+ messages in thread
From: Tu, Lijuan @ 2020-08-12  8:00 UTC (permalink / raw)
  To: Xu, HailinX, dts; +Cc: Xu, HailinX

> add cvl dcf new suite
> 
> Xu,Hailin (2):
>   test_plans/cvl_dcf_date_path:add new test plan
>   tests/TestSuite_cvl_dcf_date_path:add new suite
> 
>  test_plans/cvl_dcf_date_path_test_plan.rst | 203 ++++++++++++++++++++
>  tests/TestSuite_cvl_dcf_date_path.py       | 206 +++++++++++++++++++++

Applied

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, back to index

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-31  8:19 [dts] [PATCH V1 1/2] test_plans:add new test plan Xu hailin
2020-07-31  8:19 ` [dts] [PATCH V1 2/2] tests:add new suite Xu hailin
2020-07-31  8:19 ` [dts] [PATCH V1 0/2] test_plans: adds, tests: adds Xu hailin
2020-08-03  6:09   ` Xu, HailinX
2020-08-06  1:27     ` Chen, Zhaoyan
2020-08-12  8:00   ` Tu, Lijuan
2020-08-06  1:27 ` [dts] [PATCH V1 1/2] test_plans:add new test plan Chen, Zhaoyan

test suite reviews and discussions

Archives are clonable:
	git clone --mirror http://inbox.dpdk.org/dts/0 dts/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 dts dts/ http://inbox.dpdk.org/dts \
		dts@dpdk.org
	public-inbox-index dts


Newsgroup available over NNTP:
	nntp://inbox.dpdk.org/inbox.dpdk.dts


AGPL code for this site: git clone https://public-inbox.org/ public-inbox