test suite reviews and discussions
 help / color / mirror / Atom feed
* [dts] [PATCH v1] test_plans/kernelpf_iavf: add test plan for kernel pf iavf
@ 2019-04-27 21:37 Xueqin Lin
  2019-05-13  7:28 ` Tu, Lijuan
  0 siblings, 1 reply; 2+ messages in thread
From: Xueqin Lin @ 2019-04-27 21:37 UTC (permalink / raw)
  To: dts; +Cc: Xueqin Lin

Signed-off-by: Xueqin Lin <xueqin.lin@intel.com>

---
 test_plans/index.rst                   |   1 +
 test_plans/kernelpf_iavf_test_plan.rst | 585 +++++++++++++++++++++++++++++++++
 2 files changed, 586 insertions(+)
 create mode 100644 test_plans/kernelpf_iavf_test_plan.rst

diff --git a/test_plans/index.rst b/test_plans/index.rst
index e6005da..f18e5f9 100644
--- a/test_plans/index.rst
+++ b/test_plans/index.rst
@@ -138,6 +138,7 @@ The following are the test plans for the DPDK DTS automated test system.
     vf_rss_test_plan
     vf_to_vf_nic_bridge_test_plan
     vf_vlan_test_plan
+    kernelpf_iavf_test_plan
     vhost_multi_queue_qemu_test_plan
     vhost_pmd_xstats_test_plan
     vhost_qemu_mtu_test_plan
diff --git a/test_plans/kernelpf_iavf_test_plan.rst b/test_plans/kernelpf_iavf_test_plan.rst
new file mode 100644
index 0000000..0ca45e6
--- /dev/null
+++ b/test_plans/kernelpf_iavf_test_plan.rst
@@ -0,0 +1,585 @@
+.. Copyright (c) <2010-2019>, Intel Corporation
+      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.
+
+
+==========================
+Kernel PF + IAVF test plan
+==========================
+
+Intel Adaptive Virtual Function(IAVF) is aimed to provide a common VF for VM
+which means just need one unified VF driver so you don't have to reload
+different VF driver when you upgrade the PF NIC.
+One of the advantages is you don't have to do any modification for code or
+hardware for an existing VM image running on the new NIC.
+
+Requirement
+===========
+This plan for IAVF only supports kernel PF scenario.
+
+Hardware
+========
+ICE driver NIC.
+
+Prerequisites
+=============
+Get the pci device id of DUT, for example::
+
+    ./usertools/dpdk-devbind.py -s
+
+    0000:18:00.0 'Device 1592' if=enp24s0f0 drv=ice unused=igb_uio
+    0000:18:00.1 'Device 1592' if=enp24s0f1 drv=ice unused=igb_uio
+
+Create 1 VF from 1 kernel PF::
+
+    echo 1 > /sys/bus/pci/devices/0000\:18\:00.0/sriov_numvfs
+
+Set VF mac as 00:01:23:45:67:89::
+
+    ip link set $PF_INTF vf 0 mac 00:01:23:45:67:89
+
+Test IAVF cases on host or in qemu
+
+Bind VF device to igb_uio or vfio-pci
+
+Start up VF port::
+
+    ./testpmd -c f -n 4 -- -i
+
+Test case: VF basic RX/TX
+=========================
+Set rxonly forward, start testpmd
+
+Send 100 random packets from tester, check packets can be received
+
+Set txonly forward, start testpmd
+
+Check tester could receive the packets from application generated
+
+
+Test case: VF MAC filter
+========================
+Disable promisc mode, add a new MAC to VF0 and then start testpmd::
+
+    testpmd> set promisc all off
+    testpmd> mac_addr add 0 00:11:22:33:44:55
+    testpmd> set fwd mac
+    testpmd> start
+
+Use scapy to send 100 random packets with current VF0's MAC, verify the
+packets can be received and forwarded by the VF
+
+Use scapy to send 100 random packets with new added VF0's MAC, verify the
+packets can be received and forwarded by the VF::
+
+    p=Ether(dst="00:11:22:33:44:55")/IP()/Raw(load='X'*30)
+
+Use scapy to send 100 random packets with a wrong MAC to VF0, verify the
+packets can't be received by the VF.
+
+Note::
+    Not set VF MAC from kernel PF for this case, if set, will print
+    "not permitted error" when add new MAC for VF.
+
+Test case: VF promisc
+=====================
+Enable kernel trust mode::
+
+    ip link set $PF_INTF vf 0 trust on
+
+Start VF testpmd, set mac forward and enable print output
+
+Use scapy to send random packets with current VF0's MAC, verify the
+packets can be received and forwarded by the VF.
+
+Use scapy to send random packets with a wrong MAC to VF0, verify the
+packets can be received and forwarded by the VF.
+
+Disable promisc mode::
+
+    testpmd> set promisc all off
+
+Use scapy to send random packets with current VF0's MAC, verify the
+packets can be received and forwarded by the VF.
+
+Use scapy to send random packets with a wrong MAC to VF0, verify the
+packets can't be received and forwarded by the VF.
+
+Enable promisc mode::
+
+    testpmd> set promisc all on
+
+Use scapy to send random packets with current VF0's MAC, verify the
+packets can be received and forwarded by the VF.
+
+Use scapy to send random packets with a wrong MAC to VF0, verify the
+packets can be received and forwarded by the VF.
+
+Disable kernel trust mode::
+
+    ip link set $PF_INTF vf 0 trust off
+
+Test case: VF multicast
+=======================
+Enable kernel trust mode::
+
+    ip link set $PF_INTF vf 0 trust on
+
+Start VF testpmd
+
+Disable promisc and multicast mode::
+
+    testpmd> set promisc all off
+    testpmd> set allmulti all off
+    testpmd> start
+
+Send packet with current VF0's MAC, and check VF can receive the packet.
+
+Send packet with multicast MAC 01:80:C2:00:00:08, and check VF can not
+receive the packet.
+
+Enable multicast mode::
+
+    testpmd> set allmulti all on
+
+Send packet with current VF0's MAC, and check VF can receive the packet.
+
+Send packet with multicast MAC 01:80:C2:00:00:08, and check VF can
+receive the packet.
+
+Disable kernel trust mode::
+
+    ip link set $PF_INTF vf 0 trust off
+
+Test case: VF broadcast
+=======================
+Disable VF promisc mode::
+
+    testpmd> set promisc all off
+    testpmd> start
+
+Send packet with broadcast address ff:ff:ff:ff:ff:ff, and check VF can
+receive the packet
+
+
+Test case: add port based vlan on VF
+====================================
+Add pvid on VF0 from PF device::
+
+    ip link set $PF_INTF vf 0 vlan 2
+
+Send packet with same vlan id and check VF can receive
+
+Send packet with wrong vlan id and check VF can't receive
+
+Check PF device shows correct pvid setting::
+
+    ip link show $PF_INTF
+    ...
+    vf 0 MAC 00:01:23:45:67:89, vlan 2, spoof checking on, link-state auto
+
+
+Test case: remove port based vlan on VF
+=======================================
+Remove added vlan from PF device::
+
+    ip link set $PF_INTF vf 0 vlan 0
+
+Start testpmd and send packet without vlan and check VF can receive
+
+Set packet with vlan id 0 and check VF can receive
+
+Set packet with random id 1-4095 and check VF can't receive
+
+Check PF device doesn't show pvid setting::
+
+    ip link show $PF_INTF
+
+Test case: VF tagged vlan RX
+============================
+
+Make sure port based vlan disabled on VF0
+
+Start testpmd with rxonly mode::
+
+     testpmd> set fwd rxonly
+     testpmd> set verbose 1
+     testpmd> start
+
+Send packet without vlan and check VF can receive
+
+Send packet with vlan 0 and check VF can receive
+
+Add vlan from VF driver::
+
+     testpmd> rx_vlan add 1 0
+
+Send packet with vlan 1 and check VF can receive
+
+Rerun above with random vlan and max vlan 4095, check VF can't receive
+
+Remove vlan on VF0::
+
+     testpmd> rx_vlan rm 1 0
+
+Send packet with vlan 0 and check VF can receive
+
+Send packet without vlan and check VF can receive
+
+Send packet with vlan 1 and check VF can't receive
+
+Test case: VF vlan insertion
+============================
+
+Disable VF vlan strip::
+
+    testpmd> vlan set strip off 0
+
+Set vlan id 20 for tx_vlan::
+
+    testpmd> port stop all
+    testpmd> tx_vlan set 0 20
+    testpmd> port start all
+    testpmd> set fwd mac
+    testpmd> start
+
+Send normal packet::
+
+    p=Ether(dst="00:01:23:45:67:89")/IP()/Raw(load='X'*30)
+
+Verify packet that out from VF contains the vlan tag 20
+
+
+Test case: VF vlan strip
+========================
+
+Enable VF vlan strip::
+
+    testpmd> vlan set strip on 0
+    testpmd> set fwd mac
+    testpmd> start
+
+Send packets with vlan tag::
+
+    p=Ether(dst="00:01:23:45:67:89")/Dot1Q(id=0x8100,vlan=20)/IP()/Raw(load='X'*30)
+
+Check that out from VF doesn't contain the vlan tag.
+
+Disable VF vlan strip::
+
+    testpmd> vlan set strip off 0
+
+Send packets with vlan tag::
+
+    Ether(dst="00:01:23:45:67:89")/Dot1Q(id=0x8100,vlan=20)/IP()/Raw(load='X'*30)
+
+Check that out from VF contains the vlan tag.
+
+
+Test case: VF without jumboframe
+================================
+
+Ensure tester's port supports sending jumboframe::
+
+    ifconfig 'tester interface' mtu 9000
+
+Launch testpmd for VF port without enabling jumboframe option::
+
+    ./testpmd -c f -n 4 -- -i
+
+    testpmd> set fwd mac
+    testpmd> start
+
+Check packet less than the standard maximum frame (1518) can be received.
+
+Check packet more than the standard maximum frame (1518) can not be received.
+
+Test case: VF with jumboframe
+=============================
+
+Ensure tester's port supports sending jumboframe::
+
+    ifconfig 'tester interface' mtu 9000
+
+Launch testpmd for VF port with jumboframe option::
+
+    ./testpmd -c f -n 4 -- -i --max-pkt-len=3000
+
+    testpmd> set fwd mac
+    testpmd> start
+
+Check that packet length larger than the standard maximum frame (1518) and
+lower or equal to the maximum frame length can be received.
+
+Check that packet length larger than the configured maximum packet can not
+be received.
+
+
+Test case: VF RSS
+=================
+
+Start command with multi-queues like below::
+
+   ./testpmd -c f -n 4 -- -i --txq=4 --rxq=4
+
+Config hash reta table::
+
+  testpmd> port config 0 rss reta (0,0)
+  testpmd> port config 0 rss reta (1,1)
+  testpmd> port config 0 rss reta (2,2)
+  testpmd> port config 0 rss reta (3,3)
+  ...
+  testpmd> port config 0 rss reta (60,0)
+  testpmd> port config 0 rss reta (61,1)
+  testpmd> port config 0 rss reta (62,2)
+  testpmd> port config 0 rss reta (63,3)
+
+Enable IP/TCP/UDP RSS::
+
+  testpmd> port config all rss (all|ip|tcp|udp|sctp|ether|port|vxlan|geneve|nvgre|none)
+
+Send different flow types' IP/TCP/UDP packets to VF port, check packets are
+received by different configured queues.
+
+
+Test case: VF HW checksum offload
+=================================
+
+Enable HW checksum, set csum forward::
+
+    testpmd> port stop all
+    testpmd> csum set ip hw 0
+    testpmd> csum set udp hw 0
+    testpmd> csum set tcp hw 0
+    testpmd> csum set sctp hw 0
+    testpmd> set fwd csum
+    testpmd> set verbose 1
+    testpmd> port start all
+    testpmd> start
+
+Send packets with incorrect checksum to vf port, verify that the packets
+can be received by VF port and checksum error reported,
+the packets forwarded by VF port have the correct checksum value::
+
+    p=Ether()/IP(chksum=0x1234)/UDP()/Raw(load='X'*20)
+    p=Ether()/IP()/TCP(chksum=0x1234)/Raw(load='X'*20)
+    p=Ether()/IP()/UDP(chksum=0x1234)/Raw(load='X'*20)
+
+
+Test case: VF SW checksum offload
+=================================
+
+Enable SW checksum, set csum forward::
+
+    testpmd> port stop all
+    testpmd> csum set ip sw 0
+    testpmd> csum set udp sw 0
+    testpmd> csum set tcp sw 0
+    testpmd> csum set sctp sw 0
+    testpmd> set fwd csum
+    testpmd> set verbose 1
+    testpmd> port start all
+    testpmd> start
+
+Send packets with incorrect checksum to vf port, verify that the packets
+can be received by VF port and checksum error reported, the packets
+forwarded by VF port have the correct checksum value::
+
+    p=Ether()/IP(chksum=0x1234)/UDP()/Raw(load='X'*20)
+    p=Ether()/IP()/TCP(chksum=0x1234)/Raw(load='X'*20)
+    p=Ether()/IP()/UDP(chksum=0x1234)/Raw(load='X'*20)
+
+
+Test case: VF TSO
+=================
+Turn off all hardware offloads on tester machine::
+
+   ethtool -K eth1 rx off tx off tso off gso off gro off lro off
+
+Change mtu for large packet::
+
+   ifconfig 'tester interface' mtu 9000
+
+Launch the ``testpmd`` with the following arguments, add "--max-pkt-len"
+for large packet::
+
+   ./testpmd -c f -n 4 -- -i --port-topology=chained --max-pkt-len=9000
+
+Set csum forward::
+
+    testpmd> set fwd csum
+    testpmd> set verbose 1
+
+Enable HW checksum::
+
+    testpmd> port stop all
+    testpmd> csum set ip hw 0
+    testpmd> csum set udp hw 0
+    testpmd> csum set tcp hw 0
+    testpmd> csum set sctp hw 0
+
+Set TSO turned on, set TSO size as 1460::
+
+    testpmd> tso set 1460 0
+    testpmd> port start all
+    testpmd> start
+
+Send few IP/TCP packets from tester machine to DUT. Check IP/TCP checksum
+correctness in captured packet and verify correctness of HW TSO offload
+for large packets. One large TCP packet (5214 bytes + headers) segmented
+to four fragments (1460 bytes+header, 1460 bytes+header, 1460 bytes+header
+and 834 bytes + headers), checksums are also ok::
+
+   p=Ether()/IP(chksum=0x1234)/TCP(flags=0x10,chksum=0x1234)/Raw(RandString(5214))
+
+Transmitted packet::
+
+   21:48:24.214136 00:00:00:00:00:00 > 3c:fd:fe:9d:69:68, ethertype IPv6
+   (0x86dd), length 5288: (hlim 64, next-header TCP (6) payload length: 5234)
+    ::1.ftp-data > ::1.http: Flags [.], cksum 0xac95 (correct), seq 0:5214,
+   ack 1, win 8192, length 5214: HTTP
+
+Captured packet::
+
+   21:48:24.214207 3c:fd:fe:9d:69:68 > 02:00:00:00:00:00, ethertype IPv6
+   (0x86dd), length 1534: (hlim 64, next-header TCP (6) payload length: 1480)
+   ::1.ftp-data > ::1.http: Flags [.], cksum 0xa641 (correct), seq 0:1460,
+   ack 1, win 8192, length 1460: HTTP
+   21:48:24.214212 3c:fd:fe:9d:69:68 > 02:00:00:00:00:00, ethertype IPv6
+   (0x86dd), length 1534: (hlim 64, next-header TCP (6) payload length: 1480)
+   ::1.ftp-data > ::1.http: Flags [.], cksum 0xae89 (correct), seq 1460:2920,
+   ack 1, win 8192, length 1460: HTTP
+   21:48:24.214213 3c:fd:fe:9d:69:68 > 02:00:00:00:00:00, ethertype IPv6
+   (0x86dd), length 1534: (hlim 64, next-header TCP (6) payload length: 1480)
+   ::1.ftp-data > ::1.http: Flags [.], cksum 0xfdb6 (correct), seq 2920:4380,
+   ack 1, win 8192, length 1460: HTTP
+   21:48:24.214215 3c:fd:fe:9d:69:68 > 02:00:00:00:00:00, ethertype IPv6
+   (0x86dd), length 908: (hlim 64, next-header TCP (6) payload length: 854)
+   ::1.ftp-data > ::1.http: Flags [.], cksum 0xe629 (correct), seq 4380:5214,
+   ack 1, win 8192, length 834: HTTP
+
+Set TSO turned off::
+
+    testpmd> tso set 0 0
+
+Send few IP/TCP packets from tester machine to DUT. Check IP/TCP checksum
+correctness in captured packet and verify correctness of HW TSO offload
+for large packets, but don't do packet segmentation.
+
+Test case: VF port stop/start
+=============================
+
+Stop VF port::
+
+    testpmd> port stop all
+
+Start VF port::
+
+    testpmd> port start all
+
+Repeat above stop and start port for 10 times
+
+Send packets from tester
+
+Check VF could receive packets
+
+
+Test case: VF statistics reset
+==============================
+
+Check VF port stats::
+
+    testpmd> show port stats all
+
+Clear VF port stats::
+
+    testpmd> clear port stats all
+
+Check VF port stats, RX-packets and TX-packets are 0
+
+Set mac forward, enable print out
+
+Send 100 packets from tester
+
+Check VF port stats, RX-packets and TX-packets are 100
+
+Clear VF port stats
+
+Check VF port stats, RX-packets and TX-packets are 0
+
+Test case: VF information
+=========================
+
+Start testpmd
+
+Show VF port information, check link, speed...information correctness::
+
+    testpmd> show port info all
+
+Set mac forward, enable print out
+
+Send 100 packets from tester
+
+Check VF port stats, RX-packets and TX-packets are 100
+
+
+Test case: VF RX interrupt
+==========================
+Build l3fwd-power
+
+Create one VF from kernel PF0, create on VF from kernel PF1::
+
+    echo 1 > /sys/bus/pci/devices/0000\:18\:00.0/sriov_numvfs
+    echo 1 > /sys/bus/pci/devices/0000\:18\:00.1/sriov_numvfs
+
+Bind VFs to vfio-pci::
+
+    ./usertools/dpdk-devbind.py -b vfio-pci 18:01.0 18:11.0
+
+Start l3fwd power with one queue per port::
+
+    ./examples/l3fwd-power/build/l3fwd-power -l 6,7 -n 4 -- \
+    -p 0x3 --config '(0,0,6),(1,0,7)'
+
+Send one packet to VF0 and VF1, check that thread on core6 and core7 waked up::
+
+    L3FWD_POWER: lcore 6 is waked up from rx interrupt on port 0 queue 0
+    L3FWD_POWER: lcore 7 is waked up from rx interrupt on port 0 queue 0
+
+Check the packet has been normally forwarded.
+
+After the packet forwarded, thread on core6 and core 7 will return to sleep::
+
+    L3FWD_POWER: lcore 6 sleeps until interrupt triggers
+    L3FWD_POWER: lcore 7 sleeps until interrupt triggers
+
+Send packet flows to VF0 and VF1, check that thread on core6 and core7 will
+keep up awake.
-- 
2.5.5


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

* Re: [dts] [PATCH v1] test_plans/kernelpf_iavf: add test plan for kernel pf iavf
  2019-04-27 21:37 [dts] [PATCH v1] test_plans/kernelpf_iavf: add test plan for kernel pf iavf Xueqin Lin
@ 2019-05-13  7:28 ` Tu, Lijuan
  0 siblings, 0 replies; 2+ messages in thread
From: Tu, Lijuan @ 2019-05-13  7:28 UTC (permalink / raw)
  To: Lin, Xueqin, dts; +Cc: Lin, Xueqin

Applied, thanks

> -----Original Message-----
> From: dts [mailto:dts-bounces@dpdk.org] On Behalf Of Xueqin Lin
> Sent: Sunday, April 28, 2019 5:37 AM
> To: dts@dpdk.org
> Cc: Lin, Xueqin <xueqin.lin@intel.com>
> Subject: [dts] [PATCH v1] test_plans/kernelpf_iavf: add test plan for kernel pf
> iavf
> 
> Signed-off-by: Xueqin Lin <xueqin.lin@intel.com>
> 
> ---
>  test_plans/index.rst                   |   1 +
>  test_plans/kernelpf_iavf_test_plan.rst | 585
> +++++++++++++++++++++++++++++++++
>  2 files changed, 586 insertions(+)
>  create mode 100644 test_plans/kernelpf_iavf_test_plan.rst
> 
> diff --git a/test_plans/index.rst b/test_plans/index.rst index
> e6005da..f18e5f9 100644
> --- a/test_plans/index.rst
> +++ b/test_plans/index.rst
> @@ -138,6 +138,7 @@ The following are the test plans for the DPDK DTS
> automated test system.
>      vf_rss_test_plan
>      vf_to_vf_nic_bridge_test_plan
>      vf_vlan_test_plan
> +    kernelpf_iavf_test_plan
>      vhost_multi_queue_qemu_test_plan
>      vhost_pmd_xstats_test_plan
>      vhost_qemu_mtu_test_plan
> diff --git a/test_plans/kernelpf_iavf_test_plan.rst
> b/test_plans/kernelpf_iavf_test_plan.rst
> new file mode 100644
> index 0000000..0ca45e6
> --- /dev/null
> +++ b/test_plans/kernelpf_iavf_test_plan.rst
> @@ -0,0 +1,585 @@
> +.. Copyright (c) <2010-2019>, Intel Corporation
> +      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.
> +
> +
> +==========================
> +Kernel PF + IAVF test plan
> +==========================
> +
> +Intel Adaptive Virtual Function(IAVF) is aimed to provide a common VF
> +for VM which means just need one unified VF driver so you don't have to
> +reload different VF driver when you upgrade the PF NIC.
> +One of the advantages is you don't have to do any modification for code
> +or hardware for an existing VM image running on the new NIC.
> +
> +Requirement
> +===========
> +This plan for IAVF only supports kernel PF scenario.
> +
> +Hardware
> +========
> +ICE driver NIC.
> +
> +Prerequisites
> +=============
> +Get the pci device id of DUT, for example::
> +
> +    ./usertools/dpdk-devbind.py -s
> +
> +    0000:18:00.0 'Device 1592' if=enp24s0f0 drv=ice unused=igb_uio
> +    0000:18:00.1 'Device 1592' if=enp24s0f1 drv=ice unused=igb_uio
> +
> +Create 1 VF from 1 kernel PF::
> +
> +    echo 1 > /sys/bus/pci/devices/0000\:18\:00.0/sriov_numvfs
> +
> +Set VF mac as 00:01:23:45:67:89::
> +
> +    ip link set $PF_INTF vf 0 mac 00:01:23:45:67:89
> +
> +Test IAVF cases on host or in qemu
> +
> +Bind VF device to igb_uio or vfio-pci
> +
> +Start up VF port::
> +
> +    ./testpmd -c f -n 4 -- -i
> +
> +Test case: VF basic RX/TX
> +=========================
> +Set rxonly forward, start testpmd
> +
> +Send 100 random packets from tester, check packets can be received
> +
> +Set txonly forward, start testpmd
> +
> +Check tester could receive the packets from application generated
> +
> +
> +Test case: VF MAC filter
> +========================
> +Disable promisc mode, add a new MAC to VF0 and then start testpmd::
> +
> +    testpmd> set promisc all off
> +    testpmd> mac_addr add 0 00:11:22:33:44:55
> +    testpmd> set fwd mac
> +    testpmd> start
> +
> +Use scapy to send 100 random packets with current VF0's MAC, verify the
> +packets can be received and forwarded by the VF
> +
> +Use scapy to send 100 random packets with new added VF0's MAC, verify
> +the packets can be received and forwarded by the VF::
> +
> +    p=Ether(dst="00:11:22:33:44:55")/IP()/Raw(load='X'*30)
> +
> +Use scapy to send 100 random packets with a wrong MAC to VF0, verify
> +the packets can't be received by the VF.
> +
> +Note::
> +    Not set VF MAC from kernel PF for this case, if set, will print
> +    "not permitted error" when add new MAC for VF.
> +
> +Test case: VF promisc
> +=====================
> +Enable kernel trust mode::
> +
> +    ip link set $PF_INTF vf 0 trust on
> +
> +Start VF testpmd, set mac forward and enable print output
> +
> +Use scapy to send random packets with current VF0's MAC, verify the
> +packets can be received and forwarded by the VF.
> +
> +Use scapy to send random packets with a wrong MAC to VF0, verify the
> +packets can be received and forwarded by the VF.
> +
> +Disable promisc mode::
> +
> +    testpmd> set promisc all off
> +
> +Use scapy to send random packets with current VF0's MAC, verify the
> +packets can be received and forwarded by the VF.
> +
> +Use scapy to send random packets with a wrong MAC to VF0, verify the
> +packets can't be received and forwarded by the VF.
> +
> +Enable promisc mode::
> +
> +    testpmd> set promisc all on
> +
> +Use scapy to send random packets with current VF0's MAC, verify the
> +packets can be received and forwarded by the VF.
> +
> +Use scapy to send random packets with a wrong MAC to VF0, verify the
> +packets can be received and forwarded by the VF.
> +
> +Disable kernel trust mode::
> +
> +    ip link set $PF_INTF vf 0 trust off
> +
> +Test case: VF multicast
> +=======================
> +Enable kernel trust mode::
> +
> +    ip link set $PF_INTF vf 0 trust on
> +
> +Start VF testpmd
> +
> +Disable promisc and multicast mode::
> +
> +    testpmd> set promisc all off
> +    testpmd> set allmulti all off
> +    testpmd> start
> +
> +Send packet with current VF0's MAC, and check VF can receive the packet.
> +
> +Send packet with multicast MAC 01:80:C2:00:00:08, and check VF can not
> +receive the packet.
> +
> +Enable multicast mode::
> +
> +    testpmd> set allmulti all on
> +
> +Send packet with current VF0's MAC, and check VF can receive the packet.
> +
> +Send packet with multicast MAC 01:80:C2:00:00:08, and check VF can
> +receive the packet.
> +
> +Disable kernel trust mode::
> +
> +    ip link set $PF_INTF vf 0 trust off
> +
> +Test case: VF broadcast
> +=======================
> +Disable VF promisc mode::
> +
> +    testpmd> set promisc all off
> +    testpmd> start
> +
> +Send packet with broadcast address ff:ff:ff:ff:ff:ff, and check VF can
> +receive the packet
> +
> +
> +Test case: add port based vlan on VF
> +====================================
> +Add pvid on VF0 from PF device::
> +
> +    ip link set $PF_INTF vf 0 vlan 2
> +
> +Send packet with same vlan id and check VF can receive
> +
> +Send packet with wrong vlan id and check VF can't receive
> +
> +Check PF device shows correct pvid setting::
> +
> +    ip link show $PF_INTF
> +    ...
> +    vf 0 MAC 00:01:23:45:67:89, vlan 2, spoof checking on, link-state
> + auto
> +
> +
> +Test case: remove port based vlan on VF
> +=======================================
> +Remove added vlan from PF device::
> +
> +    ip link set $PF_INTF vf 0 vlan 0
> +
> +Start testpmd and send packet without vlan and check VF can receive
> +
> +Set packet with vlan id 0 and check VF can receive
> +
> +Set packet with random id 1-4095 and check VF can't receive
> +
> +Check PF device doesn't show pvid setting::
> +
> +    ip link show $PF_INTF
> +
> +Test case: VF tagged vlan RX
> +============================
> +
> +Make sure port based vlan disabled on VF0
> +
> +Start testpmd with rxonly mode::
> +
> +     testpmd> set fwd rxonly
> +     testpmd> set verbose 1
> +     testpmd> start
> +
> +Send packet without vlan and check VF can receive
> +
> +Send packet with vlan 0 and check VF can receive
> +
> +Add vlan from VF driver::
> +
> +     testpmd> rx_vlan add 1 0
> +
> +Send packet with vlan 1 and check VF can receive
> +
> +Rerun above with random vlan and max vlan 4095, check VF can't receive
> +
> +Remove vlan on VF0::
> +
> +     testpmd> rx_vlan rm 1 0
> +
> +Send packet with vlan 0 and check VF can receive
> +
> +Send packet without vlan and check VF can receive
> +
> +Send packet with vlan 1 and check VF can't receive
> +
> +Test case: VF vlan insertion
> +============================
> +
> +Disable VF vlan strip::
> +
> +    testpmd> vlan set strip off 0
> +
> +Set vlan id 20 for tx_vlan::
> +
> +    testpmd> port stop all
> +    testpmd> tx_vlan set 0 20
> +    testpmd> port start all
> +    testpmd> set fwd mac
> +    testpmd> start
> +
> +Send normal packet::
> +
> +    p=Ether(dst="00:01:23:45:67:89")/IP()/Raw(load='X'*30)
> +
> +Verify packet that out from VF contains the vlan tag 20
> +
> +
> +Test case: VF vlan strip
> +========================
> +
> +Enable VF vlan strip::
> +
> +    testpmd> vlan set strip on 0
> +    testpmd> set fwd mac
> +    testpmd> start
> +
> +Send packets with vlan tag::
> +
> +
> + p=Ether(dst="00:01:23:45:67:89")/Dot1Q(id=0x8100,vlan=20)/IP()/Raw(loa
> + d='X'*30)
> +
> +Check that out from VF doesn't contain the vlan tag.
> +
> +Disable VF vlan strip::
> +
> +    testpmd> vlan set strip off 0
> +
> +Send packets with vlan tag::
> +
> +
> + Ether(dst="00:01:23:45:67:89")/Dot1Q(id=0x8100,vlan=20)/IP()/Raw(load=
> + 'X'*30)
> +
> +Check that out from VF contains the vlan tag.
> +
> +
> +Test case: VF without jumboframe
> +================================
> +
> +Ensure tester's port supports sending jumboframe::
> +
> +    ifconfig 'tester interface' mtu 9000
> +
> +Launch testpmd for VF port without enabling jumboframe option::
> +
> +    ./testpmd -c f -n 4 -- -i
> +
> +    testpmd> set fwd mac
> +    testpmd> start
> +
> +Check packet less than the standard maximum frame (1518) can be received.
> +
> +Check packet more than the standard maximum frame (1518) can not be
> received.
> +
> +Test case: VF with jumboframe
> +=============================
> +
> +Ensure tester's port supports sending jumboframe::
> +
> +    ifconfig 'tester interface' mtu 9000
> +
> +Launch testpmd for VF port with jumboframe option::
> +
> +    ./testpmd -c f -n 4 -- -i --max-pkt-len=3000
> +
> +    testpmd> set fwd mac
> +    testpmd> start
> +
> +Check that packet length larger than the standard maximum frame (1518)
> +and lower or equal to the maximum frame length can be received.
> +
> +Check that packet length larger than the configured maximum packet can
> +not be received.
> +
> +
> +Test case: VF RSS
> +=================
> +
> +Start command with multi-queues like below::
> +
> +   ./testpmd -c f -n 4 -- -i --txq=4 --rxq=4
> +
> +Config hash reta table::
> +
> +  testpmd> port config 0 rss reta (0,0)  testpmd> port config 0 rss
> + reta (1,1)  testpmd> port config 0 rss reta (2,2)  testpmd> port
> + config 0 rss reta (3,3)  ...
> +  testpmd> port config 0 rss reta (60,0)  testpmd> port config 0 rss
> + reta (61,1)  testpmd> port config 0 rss reta (62,2)  testpmd> port
> + config 0 rss reta (63,3)
> +
> +Enable IP/TCP/UDP RSS::
> +
> +  testpmd> port config all rss
> + (all|ip|tcp|udp|sctp|ether|port|vxlan|geneve|nvgre|none)
> +
> +Send different flow types' IP/TCP/UDP packets to VF port, check packets
> +are received by different configured queues.
> +
> +
> +Test case: VF HW checksum offload
> +=================================
> +
> +Enable HW checksum, set csum forward::
> +
> +    testpmd> port stop all
> +    testpmd> csum set ip hw 0
> +    testpmd> csum set udp hw 0
> +    testpmd> csum set tcp hw 0
> +    testpmd> csum set sctp hw 0
> +    testpmd> set fwd csum
> +    testpmd> set verbose 1
> +    testpmd> port start all
> +    testpmd> start
> +
> +Send packets with incorrect checksum to vf port, verify that the
> +packets can be received by VF port and checksum error reported, the
> +packets forwarded by VF port have the correct checksum value::
> +
> +    p=Ether()/IP(chksum=0x1234)/UDP()/Raw(load='X'*20)
> +    p=Ether()/IP()/TCP(chksum=0x1234)/Raw(load='X'*20)
> +    p=Ether()/IP()/UDP(chksum=0x1234)/Raw(load='X'*20)
> +
> +
> +Test case: VF SW checksum offload
> +=================================
> +
> +Enable SW checksum, set csum forward::
> +
> +    testpmd> port stop all
> +    testpmd> csum set ip sw 0
> +    testpmd> csum set udp sw 0
> +    testpmd> csum set tcp sw 0
> +    testpmd> csum set sctp sw 0
> +    testpmd> set fwd csum
> +    testpmd> set verbose 1
> +    testpmd> port start all
> +    testpmd> start
> +
> +Send packets with incorrect checksum to vf port, verify that the
> +packets can be received by VF port and checksum error reported, the
> +packets forwarded by VF port have the correct checksum value::
> +
> +    p=Ether()/IP(chksum=0x1234)/UDP()/Raw(load='X'*20)
> +    p=Ether()/IP()/TCP(chksum=0x1234)/Raw(load='X'*20)
> +    p=Ether()/IP()/UDP(chksum=0x1234)/Raw(load='X'*20)
> +
> +
> +Test case: VF TSO
> +=================
> +Turn off all hardware offloads on tester machine::
> +
> +   ethtool -K eth1 rx off tx off tso off gso off gro off lro off
> +
> +Change mtu for large packet::
> +
> +   ifconfig 'tester interface' mtu 9000
> +
> +Launch the ``testpmd`` with the following arguments, add "--max-pkt-len"
> +for large packet::
> +
> +   ./testpmd -c f -n 4 -- -i --port-topology=chained --max-pkt-len=9000
> +
> +Set csum forward::
> +
> +    testpmd> set fwd csum
> +    testpmd> set verbose 1
> +
> +Enable HW checksum::
> +
> +    testpmd> port stop all
> +    testpmd> csum set ip hw 0
> +    testpmd> csum set udp hw 0
> +    testpmd> csum set tcp hw 0
> +    testpmd> csum set sctp hw 0
> +
> +Set TSO turned on, set TSO size as 1460::
> +
> +    testpmd> tso set 1460 0
> +    testpmd> port start all
> +    testpmd> start
> +
> +Send few IP/TCP packets from tester machine to DUT. Check IP/TCP
> +checksum correctness in captured packet and verify correctness of HW
> +TSO offload for large packets. One large TCP packet (5214 bytes +
> +headers) segmented to four fragments (1460 bytes+header, 1460
> +bytes+header, 1460 bytes+header and 834 bytes + headers), checksums are
> also ok::
> +
> +
> +
> p=Ether()/IP(chksum=0x1234)/TCP(flags=0x10,chksum=0x1234)/Raw(RandStri
> + ng(5214))
> +
> +Transmitted packet::
> +
> +   21:48:24.214136 00:00:00:00:00:00 > 3c:fd:fe:9d:69:68, ethertype IPv6
> +   (0x86dd), length 5288: (hlim 64, next-header TCP (6) payload length: 5234)
> +    ::1.ftp-data > ::1.http: Flags [.], cksum 0xac95 (correct), seq 0:5214,
> +   ack 1, win 8192, length 5214: HTTP
> +
> +Captured packet::
> +
> +   21:48:24.214207 3c:fd:fe:9d:69:68 > 02:00:00:00:00:00, ethertype IPv6
> +   (0x86dd), length 1534: (hlim 64, next-header TCP (6) payload length: 1480)
> +   ::1.ftp-data > ::1.http: Flags [.], cksum 0xa641 (correct), seq 0:1460,
> +   ack 1, win 8192, length 1460: HTTP
> +   21:48:24.214212 3c:fd:fe:9d:69:68 > 02:00:00:00:00:00, ethertype IPv6
> +   (0x86dd), length 1534: (hlim 64, next-header TCP (6) payload length: 1480)
> +   ::1.ftp-data > ::1.http: Flags [.], cksum 0xae89 (correct), seq 1460:2920,
> +   ack 1, win 8192, length 1460: HTTP
> +   21:48:24.214213 3c:fd:fe:9d:69:68 > 02:00:00:00:00:00, ethertype IPv6
> +   (0x86dd), length 1534: (hlim 64, next-header TCP (6) payload length: 1480)
> +   ::1.ftp-data > ::1.http: Flags [.], cksum 0xfdb6 (correct), seq 2920:4380,
> +   ack 1, win 8192, length 1460: HTTP
> +   21:48:24.214215 3c:fd:fe:9d:69:68 > 02:00:00:00:00:00, ethertype IPv6
> +   (0x86dd), length 908: (hlim 64, next-header TCP (6) payload length: 854)
> +   ::1.ftp-data > ::1.http: Flags [.], cksum 0xe629 (correct), seq 4380:5214,
> +   ack 1, win 8192, length 834: HTTP
> +
> +Set TSO turned off::
> +
> +    testpmd> tso set 0 0
> +
> +Send few IP/TCP packets from tester machine to DUT. Check IP/TCP
> +checksum correctness in captured packet and verify correctness of HW
> +TSO offload for large packets, but don't do packet segmentation.
> +
> +Test case: VF port stop/start
> +=============================
> +
> +Stop VF port::
> +
> +    testpmd> port stop all
> +
> +Start VF port::
> +
> +    testpmd> port start all
> +
> +Repeat above stop and start port for 10 times
> +
> +Send packets from tester
> +
> +Check VF could receive packets
> +
> +
> +Test case: VF statistics reset
> +==============================
> +
> +Check VF port stats::
> +
> +    testpmd> show port stats all
> +
> +Clear VF port stats::
> +
> +    testpmd> clear port stats all
> +
> +Check VF port stats, RX-packets and TX-packets are 0
> +
> +Set mac forward, enable print out
> +
> +Send 100 packets from tester
> +
> +Check VF port stats, RX-packets and TX-packets are 100
> +
> +Clear VF port stats
> +
> +Check VF port stats, RX-packets and TX-packets are 0
> +
> +Test case: VF information
> +=========================
> +
> +Start testpmd
> +
> +Show VF port information, check link, speed...information correctness::
> +
> +    testpmd> show port info all
> +
> +Set mac forward, enable print out
> +
> +Send 100 packets from tester
> +
> +Check VF port stats, RX-packets and TX-packets are 100
> +
> +
> +Test case: VF RX interrupt
> +==========================
> +Build l3fwd-power
> +
> +Create one VF from kernel PF0, create on VF from kernel PF1::
> +
> +    echo 1 > /sys/bus/pci/devices/0000\:18\:00.0/sriov_numvfs
> +    echo 1 > /sys/bus/pci/devices/0000\:18\:00.1/sriov_numvfs
> +
> +Bind VFs to vfio-pci::
> +
> +    ./usertools/dpdk-devbind.py -b vfio-pci 18:01.0 18:11.0
> +
> +Start l3fwd power with one queue per port::
> +
> +    ./examples/l3fwd-power/build/l3fwd-power -l 6,7 -n 4 -- \
> +    -p 0x3 --config '(0,0,6),(1,0,7)'
> +
> +Send one packet to VF0 and VF1, check that thread on core6 and core7
> waked up::
> +
> +    L3FWD_POWER: lcore 6 is waked up from rx interrupt on port 0 queue 0
> +    L3FWD_POWER: lcore 7 is waked up from rx interrupt on port 0 queue
> + 0
> +
> +Check the packet has been normally forwarded.
> +
> +After the packet forwarded, thread on core6 and core 7 will return to sleep::
> +
> +    L3FWD_POWER: lcore 6 sleeps until interrupt triggers
> +    L3FWD_POWER: lcore 7 sleeps until interrupt triggers
> +
> +Send packet flows to VF0 and VF1, check that thread on core6 and core7
> +will keep up awake.
> --
> 2.5.5


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

end of thread, other threads:[~2019-05-13  7:28 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-04-27 21:37 [dts] [PATCH v1] test_plans/kernelpf_iavf: add test plan for kernel pf iavf Xueqin Lin
2019-05-13  7:28 ` Tu, Lijuan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).