From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id 11FCA2B91 for ; Sat, 1 Apr 2017 10:08:19 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=intel.com; i=@intel.com; q=dns/txt; s=intel; t=1491034101; x=1522570101; h=from:to:cc:subject:date:message-id; bh=jlbq8TUON2qkCFJXHdsoliMFsDnERszVjW3ZJt8r+Y4=; b=nG5qji/vuz4BAb6dvfR5r+wTqwuXX81i5CX7pkavYx9J+oGWEwh+6+RJ c7pSANmLuwqQls6kGMZrhbuw5ovrFw==; Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 01 Apr 2017 01:08:19 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.36,256,1486454400"; d="scan'208";a="83021285" Received: from unknown (HELO localhost.localdomain.sh.intel.com) ([10.239.129.248]) by fmsmga005.fm.intel.com with ESMTP; 01 Apr 2017 01:08:18 -0700 From: Peng Yuan To: dts@dpdk.org Cc: Peng Yuan Date: Sat, 1 Apr 2017 16:47:49 -0400 Message-Id: <1491079669-111865-1-git-send-email-yuan.peng@intel.com> X-Mailer: git-send-email 2.5.0 Subject: [dts] [PATCH v2] test_plans: add vf/pf reset X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 01 Apr 2017 08:08:22 -0000 Signed-off-by: Peng Yuan diff --git a/test_plans/vf_pf_reset_test_plan.rst b/test_plans/vf_pf_reset_test_plan.rst new file mode 100644 index 0000000..fd117ae --- /dev/null +++ b/test_plans/vf_pf_reset_test_plan.rst @@ -0,0 +1,633 @@ +.. Copyright (c) <2015>, 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. + +Prerequisites +------------- + +1. Hardware: + + Fortville 4*10G NIC (driver: i40e) + tester: ens3f0 + dut: ens5f0(pf0), ens5f1(pf1) + ens3f0 connect with ens5f0 by cable + the status of ens5f1 is linked + +2. added command:: + + testpmd> port reset (port_id|all) + "Reset all ports or port_id" + + +Test Case 1: vf reset -- create two vfs on one pf +================================================= + +1. got the pci device id of DUT, for example:: + + ./dpdk_nic_bind.py --st + + 0000:81:00.0 'Ethernet Controller X710 for 10GbE SFP+' if=ens5f0 drv=i40e + 0000:81:00.1 'Ethernet Controller X710 for 10GbE SFP+' if=ens5f1 drv=i40e + +2. create 2 VFs from 1 PF,and set the VF MAC address at PF0:: + + echo 2 > /sys/bus/pci/devices/0000\:81\:00.0/sriov_numvfs + ./dpdk_nic_bind.py --st + + 0000:81:00.0 'Ethernet Controller X710 for 10GbE SFP+' if=ens5f0 drv=i40e + 0000:81:02.0 'XL710/X710 Virtual Function' unused= + 0000:81:02.1 'XL710/X710 Virtual Function' unused= + ip link set ens5f0 vf 0 mac 00:11:22:33:44:11 + ip link set ens5f0 vf 1 mac 00:11:22:33:44:12 + +3. Bind the VFs to dpdk driver:: + + ./tools/dpdk-devbind.py -b vfio-pci 82:02.0 82:02.1 + +4. Set the VLAN id of VF1 and VF2:: + + ip link set ens5f0 vf 0 vlan 1 + ip link set ens5f0 vf 1 vlan 1 + +5. run testpmd:: + + ./x86_64-native-linuxapp-gcc/app/testpmd -c 0x0f -n 4 -- -i \ + --portmask=0x3 --txqflags=0 --crc-strip + testpmd> set fwd mac + testpmd> start + testpmd> set allmulti all on + testpmd> set promisc all off + testpmd> show port info all + + Promiscuous mode: disabled + Allmulticast mode: enabled + +the status are not different from the default value. + +6. get mac address of one VF and use it as dest mac, using scapy to +send 1000 random packets from tester, verify the packets can be received +by one VF and can be forward to another VF correctly:: + + scapy + >>>sendp([Ether(dst="00:11:22:33:44:11")/Dot1Q(vlan=1)/IP()/Raw('x'*40)], \ + iface="ens3f0",count=1000) + +7. reset pf:: + + ifconfig ens5f0 promisc + +or:: + + ifconfig ens5f0 -promisc + +8. vf receive a pf reset message:: + + Event type: RESET interrupt on port 0 + Event type: RESET interrupt on port 1 + +if don't reset the vf, send the same 1000 packets with scapy from tester, +the vf cannot receive any packets, including vlan=0 and vlan=1 + +9. reset the vfs, run the command:: + + testpmd> stop + testpmd> port reset 0 + testpmd> port reset 1 + testpmd> start + +or just run the command "port reset all" +send the same 1000 packets with scapy from tester, verify the packets can be +received by one VF and can be forward to another VF correctly, +check the port info:: + + testpmd> show port info all + + ********************* Infos for port 0 ********************* + MAC address: 00:11:22:33:44:11 + Promiscuous mode: disabled + Allmulticast mode: enabled + + ********************* Infos for port 1 ********************* + MAC address: 00:11:22:33:44:12 + Promiscuous mode: disabled + Allmulticast mode: enabled + +the info status is consistent to the status before reset. + +Test Case 2: vf reset -- create two vfs on one pf, run testpmd seperatly +======================================================================== + +1. excute step1-step3 of test case 1 + +2. start testpmd on two vf ports:: + + ./x86_64-native-linuxapp-gcc/app/testpmd -c 0xf -n 4 \ + --socket-mem 1024,1024 -w 81:02.0 --file-prefix=test1 \ + -- -i --crc-strip --eth-peer=0,00:11:22:33:44:12 \ + + ./x86_64-native-linuxapp-gcc/app/testpmd -c 0xf0 -n 4 \ + --socket-mem 1024,1024 -w 81:02.1 --file-prefix=test2 \ + -- -i --crc-strip + +3. set fwd mode on vf0:: + + testpmd> set fwd mac + testpmd> start + +4. set rxonly mode on vf1:: + + testpmd> set fwd rxonly + testpmd> start + +5. send packets with scapy from tester:: + + sendp([Ether(dst="00:11:22:33:44:11")/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + +vf0 can forward the packets to vf1. + +6. reset pf, don't reset vf0 and vf1, send the packets, + vf0 and vf1 cannot receive any packets. + +7. reset vf0 and vf1, send the packets, + vf0 can forward the packet to vf1. + + +Test Case 3: vf reset -- create one vf on each pf +================================================= + +1. create vf0 from pf0, create vf1 from pf1:: + + echo 1 > /sys/bus/pci/devices/0000\:81\:00.0/sriov_numvfs + echo 1 > /sys/bus/pci/devices/0000\:81\:00.1/sriov_numvfs + ip link set ens5f0 vf 0 mac 00:11:22:33:44:11 + ip link set ens5f1 vf 0 mac 00:11:22:33:44:12 + +2. bind the two vfs to vfio-pci:: + + ./usertools/dpdk-devbind.py -b vfio-pci 81:02.0 81:06.0 + +3. start one testpmd on two vf ports:: + + ./x86_64-native-linuxapp-gcc/app/testpmd -c 0x0f -n 4 -- -i \ + --portmask=0x3 --txqflags=0 --crc-strip + +4. start forwarding:: + + testpmd> set fwd mac + testpmd> start + +5. send packets with scapy from tester:: + + sendp([Ether(dst="00:11:22:33:44:11")/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + +vfs can fwd the packets normally. + +6. reset pf0 and pf1, don't reset vf0 and vf1, send the packets, + vfs cannot receive any packets. + +7. reset vf0 and vf1, send the packets, + vfs can fwd the packets normally. + + +Test Case 4: vlan rx restore -- vf reset all ports +================================================== + +1. excute the step1-step3 of test case 1, then start the testpmd:: + + ./x86_64-native-linuxapp-gcc/app/testpmd -c 0x0f -n 4 -- -i \ + --portmask=0x3 --txqflags=0 --crc-strip + testpmd> set fwd mac + +2. add vlan on both ports:: + + testpmd> rx_vlan add 1 0 + testpmd> rx_vlan add 1 1 + testpmd> start + +send packets with scapy from tester:: + + sendp([Ether(dst="00:11:22:33:44:11")/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + sendp([Ether(dst="00:11:22:33:44:12")/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + sendp([Ether(dst="00:11:22:33:44:11")/Dot1Q(vlan=1)/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + sendp([Ether(dst="00:11:22:33:44:12")/Dot1Q(vlan=1)/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + +vfs can receive the packets and forward it. +send packets with scapy from tester:: + + sendp([Ether(dst="00:11:22:33:44:11")/Dot1Q(vlan=2)/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + +vf0 cannot receive any packets. + +3. reset pf, don't reset vf, send the packets in step2 from tester, +the vfs cannot receive any packets. + +4. reset both vfs:: + + testpmd> stop + testpmd> port reset all + testpmd> start + +send the packets in step2 from tester +vfs can receive the packets and forward it. +send packets with scapy from tester:: + + sendp([Ether(dst="00:11:22:33:44:11")/Dot1Q(vlan=2)/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + +vf0 cannot receive any packets. + + +test Case 5: vlan rx restore -- vf reset one port +================================================= + +1. excute the step1-step3 of test case 1, then start the testpmd:: + + ./x86_64-native-linuxapp-gcc/app/testpmd -c 0x0f -n 4 -- -i \ + --portmask=0x3 --txqflags=0 --crc-strip + testpmd> set fwd mac + +2. add vlan on both ports:: + + testpmd> rx_vlan add 1 0 + testpmd> rx_vlan add 1 1 + testpmd> start + +send packets with scapy from tester:: + + sendp([Ether(dst="00:11:22:33:44:11")/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + sendp([Ether(dst="00:11:22:33:44:12")/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + sendp([Ether(dst="00:11:22:33:44:11")/Dot1Q(vlan=1)/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + sendp([Ether(dst="00:11:22:33:44:12")/Dot1Q(vlan=1)/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + +vfs can receive the packets and forward it. + +3. pf reset, then reset vf0, send packets from tester:: + + testpmd> stop + testpmd> port reset 0 + testpmd> start + sendp([Ether(dst="00:11:22:33:44:11")/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + sendp([Ether(dst="00:11:22:33:44:11")/Dot1Q(vlan=1)/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + +vf0 can receive the packets, but vf1 can't transmit the packets. +send packets from tester:: + + sendp([Ether(dst="00:11:22:33:44:12")/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + sendp([Ether(dst="00:11:22:33:44:12")/Dot1Q(vlan=1)/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + +vf1 cannot receive the packets. + +4. reset vf1:: + + testpmd> stop + testpmd> port reset 1 + testpmd> start + sendp([Ether(dst="00:11:22:33:44:11")/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + sendp([Ether(dst="00:11:22:33:44:11")/Dot1Q(vlan=1)/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + sendp([Ether(dst="00:11:22:33:44:12")/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + sendp([Ether(dst="00:11:22:33:44:12")/Dot1Q(vlan=1)/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + +vfs can receive and forward the packets. + + +Test Case 6: vlan rx restore -- create one vf on each pf +======================================================== + +1. excute the step1-step3 of test case 3 + +2. add vlan on both ports:: + + testpmd> rx_vlan add 1 0 + testpmd> rx_vlan add 1 1 + +3. set forward and start:: + + testpmd> set fwd mac + testpmd> start + +4. send packets with scapy from tester:: + + sendp([Ether(dst="00:11:22:33:44:11")/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + sendp([Ether(dst="00:11:22:33:44:11")/Dot1Q(vlan=1)/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + +vfs can forward the packets normally. +send packets with scapy from tester:: + + sendp([Ether(dst="00:11:22:33:44:11")/Dot1Q(vlan=2)/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + +vf0 cannot receive any packets. +remove vlan 0 on vf1:: + + testpmd> rx_vlan rm 0 1 + sendp([Ether(dst="00:11:22:33:44:11")/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + +vf0 can receive the packets, but vf1 can't transmit the packets. + +5. reset pf, don't reset vf, send packets from tester:: + + sendp([Ether(dst="00:11:22:33:44:11")/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + sendp([Ether(dst="00:11:22:33:44:11")/Dot1Q(vlan=1)/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + +the vfs cannot receive any packets. + +4. reset both vfs, send packets from tester:: + + testpmd> stop + testpmd> port reset all + testpmd> start + sendp([Ether(dst="00:11:22:33:44:11")/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + +vf0 can receive the packets, but vf1 can't transmit the packets. +send packets from tester:: + + sendp([Ether(dst="00:11:22:33:44:11")/Dot1Q(vlan=1)/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + +vfs can forward the packets normally. + + +Test Case 7: vlan tx restore +============================ + +1. excute the step1-step3 of test case 1 + +2. run testpmd:: + + ./x86_64-native-linuxapp-gcc/app/testpmd -c 0x0f -n 4 -- -i \ + --portmask=0x3 --txqflags=0 --crc-strip + +2. Add tx vlan offload on VF1 port, take care the first param is port, +start forwarding:: + + testpmd> set fwd mac + testpmd> vlan set filter on 0 + testpmd> set promisc all off + testpmd> vlan set strip off 0 + testpmd> set nbport 2 + testpmd> tx_vlan set 1 51 + testpmd> start + +3. send packets with scapy from tester:: + + sendp([Ether(dst="00:11:22:33:44:11")/IP()/Raw('x'*18)], \ + iface="ens3f0",count=1) + +4. listening the port ens3f0:: + + tcpdump -i ens3f0 -n -e -x -v + +check the packet recevied, the packet is configured with vlan 51 + +5. reset the pf, then reset the two vfs, +send the same packet with no vlan tag, +check packets received by tester, the packet is configured with vlan 51. + + +test Case 8: MAC address restore +================================ + +1. create vf0 from pf0, create vf1 from pf1:: + + echo 1 > /sys/bus/pci/devices/0000\:81\:00.0/sriov_numvfs + echo 1 > /sys/bus/pci/devices/0000\:81\:00.1/sriov_numvfs + +2. bind the two vfs to vfio-pci:: + + ./usertools/dpdk-devbind.py -b vfio-pci 81:02.0 81:06.0 + +3. start testpmd on two vf ports:: + + ./x86_64-native-linuxapp-gcc/app/testpmd -c 0x0f -n 4 \ + -- -i --portmask=0x3 --txqflags=0 --crc-strip + +4. add MAC address to the vf0 ports:: + + testpmd> mac_addr add 0 00:11:22:33:44:11 + testpmd> mac_addr add 0 00:11:22:33:44:12 + +5. start forwarding:: + + testpmd> set fwd mac + testpmd> start + +6. send packets with scapy from tester:: + + sendp([Ether(dst="00:11:22:33:44:11")/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + sendp([Ether(dst="00:11:22:33:44:12")/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + +vfs can forward both of the two type packets. + +7. reset pf0 and pf1, don't reset vf0 and vf1, send the two packets, + vf0 and vf1 cannot receive any packets. + +8. reset vf0 and vf1, send the two packets, + vfs can forward both of the two type packets. + + +test Case 9: vf reset (two vfs passed through to one VM) +======================================================== + +1. create 2 VFs from 1 PF,and set the VF MAC address at PF0:: + + echo 2 > /sys/bus/pci/devices/0000\:81\:00.0/sriov_numvfs + ./dpdk_nic_bind.py --st + + 0000:81:00.0 'Ethernet Controller X710 for 10GbE SFP+' if=ens5f0 drv=i40e + 0000:81:02.0 'XL710/X710 Virtual Function' unused= + 0000:81:02.1 'XL710/X710 Virtual Function' unused= + +2. detach VFs from the host, bind them to pci-stub driver:: + + modprobe pci-stub + ./tools/dpdk_nic_bind.py --bind=pci_stub 81:02.0 81:02.1 + +or using the following way:: + + virsh nodedev-detach pci_0000_81_02_0; + virsh nodedev-detach pci_0000_81_02_1; + + ./dpdk_nic_bind.py --st + + 0000:81:00.0 'Ethernet Controller X710 for 10GbE SFP+' if=ens5f0 drv=i40e + 0000:81:02.0 'XL710/X710 Virtual Function' if= drv=pci-stub unused= + 0000:81:02.1 'XL710/X710 Virtual Function' if= drv=pci-stub unused= + +it can be seen that VFs 81:02.0 & 81:02.1 's drv is pci-stub. + +3. passthrough VFs 81:02.0 & 81:02.1 to vm0, and start vm0:: + + /usr/bin/qemu-system-x86_64 -name vm0 -enable-kvm \ + -cpu host -smp 4 -m 2048 -drive file=/home/image/sriov-fc20-1.img -vnc :1 \ + -device pci-assign,host=81:02.0,id=pt_0 \ + -device pci-assign,host=81:02.1,id=pt_1 + +4. login vm0, got VFs pci device id in vm0, assume they are 00:05.0 & 00:05.1, +bind them to igb_uio driver,and then start testpmd:: + + ./tools/dpdk_nic_bind.py --bind=igb_uio 00:05.0 00:05.1 + ./x86_64-native-linuxapp-gcc/app/testpmd -c 0x0f -n 4 \ + -w 00:05.0 -w 00:05.1 -- -i --portmask=0x3 --txqflags=0 + +5. add MAC address to the vf0 ports, set it in mac forward mode:: + + testpmd> mac_addr add 0 00:11:22:33:44:11 + testpmd> mac_addr add 0 00:11:22:33:44:12 + testpmd> set fwd mac + testpmd> start + +6. send packets with scapy from tester:: + + sendp([Ether(dst="00:11:22:33:44:11")/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + sendp([Ether(dst="00:11:22:33:44:12")/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + +vfs can forward both of the two type packets. + +7. reset pf0 and pf1, don't reset vf0 and vf1, send the two packets, + vf0 and vf1 cannot receive any packets. + +8. reset vf0 and vf1, send the two packets, + vfs can forward both of the two type packets. + + +test Case 10: vf reset (two vfs passed through to two VM) +========================================================= + +1. create 2 VFs from 1 PF,and set the VF MAC address at PF:: + + echo 2 > /sys/bus/pci/devices/0000\:81\:00.0/sriov_numvfs + ./dpdk_nic_bind.py --st + + 0000:81:00.0 'Ethernet Controller X710 for 10GbE SFP+' if=ens5f0 drv=i40e + 0000:81:02.0 'XL710/X710 Virtual Function' unused= + 0000:81:02.1 'XL710/X710 Virtual Function' unused= + +2. detach VFs from the host, bind them to pci-stub driver:: + + modprobe pci-stub + +using `lspci -nn|grep -i ethernet` got VF device id, for example "8086 154c":: + + echo "8086 154c" > /sys/bus/pci/drivers/pci-stub/new_id + echo "0000:82:02.0" > /sys/bus/pci/drivers/i40evf/unbind + echo "0000:82:02.0" > /sys/bus/pci/drivers/pci-stub/bind + + echo "8086 154c" > /sys/bus/pci/drivers/pci-stub/new_id + echo "0000:82:02.1" > /sys/bus/pci/drivers/i40evf/unbind + echo "0000:82:02.1" > /sys/bus/pci/drivers/pci-stub/bind + +3. pass through VF0 81:02.0 to vm0, VF1 81:02.1 to vm1:: + + taskset -c 20-21 qemu-system-x86_64 \ + -enable-kvm -m 2048 -smp cores=2,sockets=1 -cpu host -name dpdk1-vm0 \ + -device pci-assign,host=0000:81:02.0 \ + -drive file=/home/img/vm1/f22.img \ + -netdev tap,id=ipvm0,ifname=tap1,script=/etc/qemu-ifup \ + -device rtl8139,netdev=ipvm0,id=net1,mac=00:11:22:33:44:11 \ + -vnc :1 -daemonize + + taskset -c 18-19 qemu-system-x86_64 \ + -enable-kvm -m 2048 -smp cores=2,sockets=1 -cpu host -name dpdk1-vm1 \ + -device pci-assign,host=0000:81:02.1 \ + -drive file=/home/img/vm1/f22.img \ + -netdev tap,id=ipvm1,ifname=tap2,script=/etc/qemu-ifup \ + -device rtl8139,netdev=ipvm1,id=net2,mac=00:11:22:33:44:12 \ + -vnc :2 -daemonize + +4. login vm0, got VF0 pci device id in vm0, assume it's 00:05.0, +bind the port to igb_uio, then start testpmd on vf0 port:: + + ./tools/dpdk_nic_bind.py --bind=igb_uio 00:05.0 + ./x86_64-native-linuxapp-gcc/app/testpmd -c 0xf -n 4 \ + -- -i --crc-strip --eth-peer=0,vf1port_macaddr \ + +login vm1, got VF1 pci device id in vm1, assume it's 00:06.0, +bind the port to igb_uio, then start testpmd on vf1 port:: + + ./tools/dpdk_nic_bind.py --bind=igb_uio 00:06.0 + ./x86_64-native-linuxapp-gcc/app/testpmd -c 0xf0 -n 4 \ + -- -i --crc-strip + +5. add vlan on vf0 in vm0, and set fwd mode:: + + testpmd> rx_vlan add 1 0 + testpmd> set fwd mac + testpmd> start + +add vlan on vf1 in vm1, set rxonly mode:: + + testpmd> rx_vlan add 1 0 + testpmd> set fwd rxonly + testpmd> start + +6. send packets with scapy from tester:: + + sendp([Ether(dst="00:11:22:33:44:11")/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + sendp([Ether(dst="00:11:22:33:44:11")/Dot1Q(vlan=1)/IP()/Raw('x'*1000)], \ + iface="ens3f0",count=1000) + +vf0 can forward the packets to vf1. + +7. reset pf, don't reset vf0 and vf1, send the two packets, + vf0 and vf1 cannot receive any packets. + +8. reset vf0 and vf1, send the two packets, + vf0 can forward both of the two type packets to VF1. -- 2.5.0