diff --git a/test_plans/kernelpf_vf_test_plan.rst b/test_plans/kernelpf_vf_test_plan.rst
new file mode 100644
index 00000000..7d4ecef4
--- /dev/null
+++ b/test_plans/kernelpf_vf_test_plan.rst
@@ -0,0 +1,1294 @@
+.. SPDX-License-Identifier: BSD-3-Clause
+   Copyright(c) 2023 Intel Corporation
+
+========================
+Kernel PF + VF test plan
+========================
+
+Intel Adaptive Virtual Function 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 VF only supports kernel PF scenario.
+
+Hardware
+========
+ICE/I40E driver NIC.
+
+Prerequisites
+=============
+1. 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
+
+2. Create 2 VF from 2 kernel PF::
+
+    echo 1 > /sys/bus/pci/devices/0000\:18\:00.0/sriov_numvfs
+    echo 1 > /sys/bus/pci/devices/0000\:18\:00.1/sriov_numvfs
+
+3. Set VF mac as 00:01:23:45:67:89::
+
+    ip link set $PF_INTF vf 0 mac 00:01:23:45:67:89
+
+4. Test IAVF cases on host or in qemu
+
+5. Bind VF device to vfio-pci::
+
+    usertools/dpdk-devbind.py --force --bind=vfio-pci 0000:18:01.0 0000:18:09.0
+
+launch testpmd::
+
+    ./<build_target>/app/dpdk-testpmd -c f -n 4 -- -i
+
+.. note::
+
+    1.the kernel driver has MAC and VLAN Anti-Spoofing feature for VFs, the default is enable.
+      disabled for vfs: ip link set <ethX> vf <vf id> spoofchk {off|on}
+
+    2.for vf-vlan-pruning in ethtool --set-priv-flag, enable function to receive specific vlan packet.
+
+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 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
+=======================
+
+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
+
+configure multicast address::
+
+    testpmd> mcast_addr add 0 01:80:C2:00:00:08
+
+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.
+
+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: VF unicast
+=====================
+Disable VF promisc and multicast mode::
+
+    testpmd> set promisc all off
+    testpmd> set allmulti all off
+    testpmd> start
+
+Send packet with unicast address, and check VF can receive the packet
+
+Test case: VF mac add filter
+============================
+Disable VF promisc and enable crc strip and add mac address::
+
+    testpmd> port stop all
+    testpmd> port config all crc-strip on
+    testpmd> port start all
+    testpmd> set promisc all off
+    testpmd> mac_addr add 0 00:11:22:33:44:55
+
+Use scapy to send 100 random packets with current VF0's MAC, verify the
+packets can be received by one VF and can be forwarded to another VF
+correctly.
+
+Use scapy to send 100 random packets with new added VF0's MAC, verify the
+packets can be received by one VF and can be forwarded to another VF correctly.
+
+remove the added mac address::
+
+      testpmd> mac_addr remove 0 00:11:22:33:44:55
+
+Use scapy to send 100 random packets to the deleted MAC to VF0, verify the
+packets can't be received by one VF and also can't be forwarded to another
+VF correctly
+
+Use scapy to send 100 random packets with a wrong MAC to VF0, verify the
+packets can't be received by one VF and also can't be forwarded to another
+VF correctly.
+
+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> vlan set filter on 0
+    testpmd> rx_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 filter on 0
+    testpmd> rx_vlan add 20 0
+    testpmd> vlan set strip on 0
+    testpmd> set fwd mac
+    testpmd> set verbose 1
+    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 vlan filter
+=========================
+
+Enable vlan filter::
+
+    testpmd> vlan set filter on 0
+    testpmd> rx_vlan add 20 0
+    testpmd> vlan set strip off 0
+    testpmd> set promisc all off
+    testpmd> set fwd mac
+    testpmd> set verbose 1
+    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 packets can be received and forwarded with vlan tag.
+
+Send packets with unmatched vlan tag::
+
+    p=Ether(dst="00:01:23:45:67:89")/Dot1Q(id=0x8100,vlan=30)/IP()/Raw(load='X'*30)
+
+Check packets can not be received and forwarded.
+
+Disable VF vlan filter::
+
+    testpmd> vlan set filter 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)
+
+if vf-vlan-pruning is on::
+
+    Check packets can be received and forwarded with vlan tag.
+
+if vf-vlan-pruning is off or not have this option::
+
+    Check packets can not be received and forwarded
+
+Test case: VF vlan promisc
+==========================
+
+Enable promisc and disable vlan filter::
+
+    testpmd> port stop all
+    testpmd> set promisc all on
+    testpmd> set verbose 1
+    testpmd> vlan set filter off 0
+    testpmd> vlan set strip off 0
+    testpmd> set fwd mac
+    testpmd> port start all
+    testpmd> start
+
+Send 10 random packets with vlan tag::
+
+    Ether(dst="00:01:23:45:67:89",type=0x8100)/Dot1Q(vlan=100,type=0x0800)/IP(src="196.222.232.1")/("X"*480)
+    ...
+
+if vf-vlan-pruning is on::
+
+    Check packets can be received and forwarded.
+
+if vf-vlan-pruning is off or not have this option::
+
+    Check packets can not be received and forwarded.
+
+Send 10 random packets without vlan tag::
+
+    Ether(dst="00:01:23:45:67:89")/IP(src="196.222.232.1")/("X"*480)
+    ...
+
+Check packets can be received and forwarded.
+
+Test case: VF add pvid base rx
+==============================
+
+Add pvid on VF0 from PF device::
+
+     ip link set $PF_INTF vf 0 vlan 2
+
+Check pf device show correct pvid setting::
+
+     ip link show ens259f0
+     ...
+     vf 0 MAC 00:00:00:00:00:00, vlan 1, spoof checking on, link-state auto
+
+
+Start testpmd
+
+Send packet with same vlan id and check VF can receive
+
+Send packet without vlan and check VF can't receive
+
+Send packet with wrong vlan id and check Vf can't receive
+
+Remove added vlan from PF device::
+
+     ip link set $PF_INTF vf 0 vlan 0
+
+Restart 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
+
+if vf-vlan-pruning is on::
+
+    Check packets can be received and forwarded.
+
+if vf-vlan-pruning is off or not have this option::
+
+    Check packets can not be received and forwarded
+
+
+send vlan=0 and not vlan pkt, also receive
+
+Test case: VF add pvid base tx
+==============================
+Add pvid on VF0 from PF device::
+
+     ip link set $PF_INTF vf 0 vlan 2
+
+Start testpmd with mac forward mode::
+
+     testpmd> set fwd mac
+     testpmd> start
+
+Send packet from tester port1 and check packet received by tester port0::
+
+     Check port1 received packet with configured vlan 2
+
+Test case: VF vlan rx combination
+=================================
+Start testpmd with rxonly mode and parameter "--enable-hw-vlan"::
+
+     testpmd> set fwd rxonly
+     testpmd> set verbose 1
+     testpmd> start
+
+.. note::
+
+     parameter "--enable-hw-vlan" not support nic: IXGBE_10G-82599_SFP.
+
+Send packet without vlan and check packet received
+
+Send packet with vlan 0 and check packet received
+
+Add vlan on VF0 from VF driver::
+
+     testpmd> rx_vlan add 1 0
+
+Send packet with vlan0/1 and check packet received
+
+Rerun with step5-6 with random vlan and max vlan 4095
+
+Remove vlan on VF0::
+
+     rx_vlan rm 1 0
+
+Send packet with vlan 0 and check packet received
+
+Send packet without vlan and check packet received
+
+Send packet with vlan 1
+
+if vf-vlan-pruning is on::
+
+    Check packets can be received and forwarded.
+
+if vf-vlan-pruning is off or not have this option::
+
+    Check packets can not be received and forwarded.
+
+Test case: VF RSS
+=================
+
+Start command with multi-queues like below::
+
+   ./<build_target>/app/dpdk-testpmd -c f -n 4 -- -i --txq=4 --rxq=4
+
+Show RSS RETA configuration::
+
+    testpmd> show port 0 rss reta 64 (0xffffffffffffffff)
+
+    RSS RETA configuration: hash index=0, queue=0
+    RSS RETA configuration: hash index=1, queue=1
+    RSS RETA configuration: hash index=2, queue=2
+    RSS RETA configuration: hash index=3, queue=3
+    ...
+    RSS RETA configuration: hash index=60, queue=0
+    RSS RETA configuration: hash index=61, queue=1
+    RSS RETA configuration: hash index=62, queue=2
+    RSS RETA configuration: hash index=63, queue=3
+
+Config hash reta table::
+
+    testpmd> port config 0 rss reta (0,3)
+    testpmd> port config 0 rss reta (1,2)
+    testpmd> port config 0 rss reta (2,1)
+    testpmd> port config 0 rss reta (3,0)
+
+Check RSS RETA configuration has changed::
+
+    testpmd> show port 0 rss reta 64 (0xffffffffffffffff)
+
+    RSS RETA configuration: hash index=0, queue=3
+    RSS RETA configuration: hash index=1, queue=2
+    RSS RETA configuration: hash index=2, queue=2
+    RSS RETA configuration: hash index=3, queue=1
+
+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 RSS hash key
+==========================
+
+Start command with multi-queues like below::
+
+   ./<build_target>/app/dpdk-testpmd -c f -n 4 -- -i --txq=4 --rxq=4
+
+Show port rss hash key::
+
+    testpmd> show port 0 rss-hash key
+
+Set rxonly fwd, enable print, start testpmd::
+
+    testpmd> set fwd rxonly
+    testpmd> set verbose 1
+    testpmd> start
+
+Send ipv4 packets, mark the RSS hash value::
+
+    p=Ether(dst="56:0A:EC:50:A4:28")/IP(src="1.2.3.4")/Raw(load='X'*30)
+
+Update ipv4 different hash key::
+
+    testpmd> port config 0 rss-hash-key ipv4 1b9d58a4b961d9cd1c56ad1621c3ad51632c16a5d16c21c3513d132c135d132c13ad1531c23a51d6ac49879c499d798a7d949c8a
+
+Show port rss hash key, check the key is same to configured key::
+
+    testpmd> show port 0 rss-hash key
+    RSS functions:
+     all ipv4 ipv6 ip
+    RSS key:
+    1B9D58A4B961D9CD1C56AD1621C3AD51632C16A5D16C21C3513D132C135D132C13AD1531C23A51D6AC49879C499D798A7D949C8A
+
+Send ipv4 packets, check RSS hash value is different::
+
+    p=Ether(dst="56:0A:EC:50:A4:28")/IP(src="1.2.3.4")/Raw(load='X'*30)
+
+Test case: test rxq txq number inconsistent
+===========================================
+
+Start the testpmd with rxq not equal to txq::
+
+    ./<build_target>/app/dpdk-testpmd -l 1-9 -n 2 -- -i --rxq=4 --txq=8
+
+.. note::
+     queue pairs in number of 1, 2, 4, 8, 16, 32, 64, etc.
+     For vf of ixgbe, the maximum number of rxq and txq supported is 4.
+
+Set rxonly fwd, enable print, start testpmd::
+
+    testpmd> set fwd rxonly
+    testpmd> set verbose 1
+    testpmd> start
+
+Send different hash types' packets with different keywords, then check rx port
+    could receive packets by different queues::
+
+      sendp([Ether(dst="00:01:23:45:67:89")/IP(src="192.168.0.4", dst=RandIP())], iface="eth3")
+
+Check the total Rx packets in all the RxQ should be equal to the total HW Rx packets::
+
+    testpmd> show fwd stats all
+    ------- Forward Stats for RX Port= 0/Queue= 0 -> TX Port= 0/Queue= 0 -------
+    RX-packets: 252            TX-packets: 0              TX-dropped: 0
+
+    ------- Forward Stats for RX Port= 0/Queue= 1 -> TX Port= 0/Queue= 1 -------
+    RX-packets: 257            TX-packets: 0              TX-dropped: 0
+
+    ------- Forward Stats for RX Port= 0/Queue= 2 -> TX Port= 0/Queue= 2 -------
+    RX-packets: 259            TX-packets: 0              TX-dropped: 0
+
+    ------- Forward Stats for RX Port= 0/Queue= 3 -> TX Port= 0/Queue= 3 -------
+    RX-packets: 256            TX-packets: 0              TX-dropped: 0
+
+    ---------------------- Forward statistics for port 0  ----------------------
+    RX-packets: 1024           RX-dropped: 0             RX-total: 1024
+    TX-packets: 0              TX-dropped: 0             TX-total: 0
+    ----------------------------------------------------------------------------
+
+    +++++++++++++++ Accumulated forward statistics for all ports+++++++++++++++
+    RX-packets: 1024           RX-dropped: 0             RX-total: 1024
+    TX-packets: 0              TX-dropped: 0             TX-total: 0
+    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+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 xstats check
+==========================
+
+Launch testpmd and enable rss::
+
+    ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c f -n 4 -- -i --rxq=4 --txq=4 --max-pkt-len=9000
+    testpmd> port config all rss all
+    testpmd> set fwd mac
+
+.. Note::
+
+   8259x family VF device jumbo frame size setting shared with PF device.
+   ifconfig PF_intf mtu 3000
+
+show the xstats before packet forwarding, all the value are 0.
+
+Start forward and send 100 packets with random src IP address,
+   then stop forward.
+
+Check stats and xstats::
+
+    testpmd> stop
+
+    testpmd> show port stats all
+
+    testpmd> show port xstats all
+
+verify rx_good_packets, RX-packets of port 0 and tx_good_packets, TX-packets of port 1 are both 100.
+rx_good_bytes, RX-bytes of port 0 and tx_good_bytes, TX-bytes of port 1 are the same.
+Intel® Ethernet 700 Series does not support hardware per queue stats,
+so rx_qx_packets and rx_qx_bytes are both 0.
+tx_qx_packets and tx_qx_bytes are both 0 too.
+
+Clear stats::
+
+      testpmd> clear port stats all
+
+Check stats and xstats, verify rx_good_packets, RX-packets of port 0 and tx_good_packets, TX-packets of port 1 are both 0.
+
+Repeat above 4 and 5 steps.
+
+Clear xstats::
+
+    testpmd> clear port xstats all
+
+Check stats and xstats, verify rx_good_packets, RX-packets of port 0 and tx_good_packets, TX-packets of port 1 are both 0.
+
+Test case: IAVF DUAL VLAN filtering
+===================================
+
+enable vlan filtering on port VF::
+
+    testpmd> set fwd mac
+    Set mac packet forwarding mode
+    testpmd> vlan set filter on 0
+
+check the vlan mode is set successfully::
+
+    testpmd> show port info 0
+
+    ********************* Infos for port 0  *********************
+    ......
+    VLAN offload:
+    strip off, filter on, extend off, qinq strip off
+
+tester send qinq pkt and single vlan pkt which outer vlan id is 1 to VF::
+
+    sendp([Ether(dst="00:11:22:33:44:11",type=0x8100)/Dot1Q(vlan=1,type=0x8100,prio=1)/Dot1Q(vlan=2,type=0x0800,prio=2)/IP(src="196.222.232.221")/("X"*480)], iface="ens786f0")
+    sendp([Ether(dst="00:11:22:33:44:11",type=0x8100)/Dot1Q(vlan=1,type=0x0800)/IP(src="196.222.232.221")/("X"*480)], iface="ens786f0")
+
+check the pkts can't be received in VF, but if the kernel cannot set ``vf-vlan-pruning`` or kdriver is ixgbe, check can receive 2 pkts in VF.
+
+add rx_vlan in VF::
+
+    testpmd> rx_vlan add 1 0
+
+repeat step 3, check the pkts can be received by VF and fwd to tester::
+
+    check the pkts can be received by PF and fwd to tester with inner and outer correct vlan ID and priority value.
+    testpmd> port 0/queue 0: received 1 packets
+    src=00:00:00:00:00:00 - dst=00:11:22:33:44:11 - type=0x8100 - length=522 - nb_segs=1 - hw ptype: L2_ETHER  - sw ptype: L2_ETHER_VLAN INNER_L2_ETHER_VLAN  - l2_len=18 - inner_l2_len=4 - Receive queue=0x0
+    ol_flags: PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN
+    port 0/queue 0: received 1 packets
+    src=00:00:00:00:00:00 - dst=00:11:22:33:44:11 - type=0x8100 - length=518 - nb_segs=1 - hw ptype: L2_ETHER  - sw ptype: L2_ETHER_VLAN  - l2_len=18 - Receive queue=0x0
+    ol_flags: PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN
+
+    tcpdump -i ens786f0 -nn -e -v
+
+    16:50:38.807158 00:00:00:00:00:00 > 00:11:22:33:44:11, ethertype 802.1Q (0x8100), length 522: vlan 1, p 1, ethertype 802.1Q, vlan 2, p 2, ethertype 0x0800,
+    16:50:38.807217 00:11:22:33:44:11 > 02:00:00:00:00:00, ethertype 802.1Q (0x8100), length 522: vlan 1, p 1, ethertype 802.1Q, vlan 2, p 2, ethertype 0x0800,
+
+    16:51:06.083084 00:00:00:00:00:00 > 00:11:22:33:44:11, ethertype 802.1Q (0x8100), length 518: vlan 1, p 0, ethertype 0x0800,
+    16:51:06.083127 00:11:22:33:44:11 > 02:00:00:00:00:00, ethertype 802.1Q (0x8100), length 518: vlan 1, p 0, ethertype 0x0800,
+
+tester send qinq pkt and single vlan pkt which outer vlan id is 11 to VF::
+
+    sendp([Ether(dst="00:11:22:33:44:11",type=0x8100)/Dot1Q(vlan=11,type=0x8100,prio=1)/Dot1Q(vlan=2,type=0x0800,prio=2)/IP(src="196.222.232.221")/("X"*480)], iface="ens786f0")
+    sendp([Ether(dst="00:11:22:33:44:11",type=0x8100)/Dot1Q(vlan=11,type=0x0800)/IP(src="196.222.232.221")/("X"*480)], iface="ens786f0")
+
+check the pkts can not be received by VF.
+
+remove rx_vlan in VF1::
+
+    testpmd> rx_vlan rm 1 0
+
+repeat step 3, check the pkts can not be received by VF, but if the kernel cannot set ``vf-vlan-pruning``, check can receive 2 pkts in VF.
+
+Test case: IAVF DUAL VLAN header stripping
+==========================================
+
+enable vlan filtering on port VF::
+
+    testpmd> vlan set filter on 0
+    testpmd> rx_vlan add 1 0
+
+check the vlan mode is set successfully::
+
+    testpmd> show port info 0
+
+    ********************* Infos for port 0  *********************
+    ......
+    VLAN offload:
+    strip off, filter on, extend off, qinq strip off
+
+enable vlan header stripping on VF::
+
+    testpmd> vlan set strip on 0
+
+check the vlan mode is set successfully::
+
+    testpmd> show port info 0
+
+    ********************* Infos for port 0  *********************
+    ......
+    VLAN offload:
+    strip on, filter on, extend off, qinq strip off
+
+tester send qinq pkt and single vlan pkt which outer vlan id is 1 to VF::
+
+    sendp([Ether(dst="00:11:22:33:44:11",type=0x8100)/Dot1Q(vlan=1,type=0x8100)/Dot1Q(vlan=2,type=0x0800)/IP(src="196.222.232.221")/("X"*480)], iface="ens786f0")
+    sendp([Ether(dst="00:11:22:33:44:11",type=0x8100)/Dot1Q(vlan=1,type=0x0800)/IP(src="196.222.232.221")/("X"*480)], iface="ens786f0")
+
+check the pkts can be received in VF and fwd to tester without outer vlan header::
+
+    testpmd> port 0/queue 10: received 1 packets
+    src=00:00:00:00:00:00 - dst=00:11:22:33:44:11 - type=0x8100 - length=518 - nb_segs=1 - RSS hash=0xc7b627aa - RSS queue=0xa - hw ptype: L2_ETHER L3_IPV4_EXT_UNKNOWN L4_NONFRAG  - sw ptype: L2_ETHER_VLAN L3_IPV4  - l2_len=18 - l3_len=20 - Tail/CRC: 0x58585858/0x00000000 - Receive queue=0xa
+    ol_flags: PKT_RX_RSS_HASH PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN
+
+    port 0/queue 10: received 1 packets
+    src=00:00:00:00:00:00 - dst=00:11:22:33:44:11 - type=0x0800 - length=514 - nb_segs=1 - RSS hash=0xc7b627aa - RSS queue=0xa - hw ptype: L2_ETHER L3_IPV4_EXT_UNKNOWN L4_NONFRAG  - sw ptype: L2_ETHER L3_IPV4  - l2_len=14 - l3_len=20 - Tail/CRC: 0x58585858/0x00000000 - Receive queue=0xa
+    ol_flags: PKT_RX_RSS_HASH PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN
+
+    10:12:38.034948 00:00:00:00:00:00 > 00:11:22:33:44:11, ethertype 802.1Q (0x8100), length 522: vlan 1, p 0, ethertype 802.1Q, vlan 2, p 0, ethertype IPv4, (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto Options (0), length 500)
+    196.222.232.221 > 127.0.0.1:  ip-proto-0 480
+    10:12:38.035025 00:11:22:33:44:11 > 02:00:00:00:00:00, ethertype 802.1Q (0x8100), length 518: vlan 2, p 0, ethertype IPv4, (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto Options (0), length 500)
+    196.222.232.221 > 127.0.0.1:  ip-proto-0 480
+
+    10:12:44.806825 00:00:00:00:00:00 > 00:11:22:33:44:11, ethertype 802.1Q (0x8100), length 518: vlan 1, p 0, ethertype IPv4, (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto Options (0), length 500)
+    196.222.232.221 > 127.0.0.1:  ip-proto-0 480
+    10:12:44.806865 00:11:22:33:44:11 > 02:00:00:00:00:00, ethertype IPv4 (0x0800), length 514: (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto Options (0), length 500)
+    196.222.232.221 > 127.0.0.1:  ip-proto-0 480
+
+disable vlan header stripping on VF1::
+
+    testpmd> vlan set strip off 0
+
+check the vlan mode is set successfully::
+
+    testpmd> show port info 0
+
+    ********************* Infos for port 0  *********************
+    ......
+    VLAN offload:
+    strip off, filter on, extend off, qinq strip off
+
+repeat step 5, check the pkts can be received in VF and fwd to tester with outer vlan header::
+
+    testpmd> port 0/queue 10: received 1 packets
+    src=00:00:00:00:00:00 - dst=00:11:22:33:44:11 - type=0x8100 - length=522 - nb_segs=1 - RSS hash=0xc7b627aa - RSS queue=0xa - hw ptype: L2_ETHER L3_IPV4_EXT_UNKNOWN L4_NONFRAG  - sw ptype: L2_ETHER_VLAN INNER_L2_ETHER_VLAN INNER_L3_IPV4  - l2_len=18 - inner_l2_len=4 - inner_l3_len=20 - Tail/CRC: 0x58585858/0x00000000 - Receive queue=0xa
+    ol_flags: PKT_RX_RSS_HASH PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN
+
+    port 0/queue 10: received 1 packets
+    src=00:00:00:00:00:00 - dst=00:11:22:33:44:11 - type=0x8100 - length=518 - nb_segs=1 - RSS hash=0xc7b627aa - RSS queue=0xa - hw ptype: L2_ETHER L3_IPV4_EXT_UNKNOWN L4_NONFRAG  - sw ptype: L2_ETHER_VLAN L3_IPV4  - l2_len=18 - l3_len=20 - Tail/CRC: 0x58585858/0x00000000 - Receive queue=0xa
+    ol_flags: PKT_RX_RSS_HASH PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN
+
+    09:49:08.295172 00:00:00:00:00:00 > 00:11:22:33:44:11, ethertype 802.1Q (0x8100), length 522: vlan 1, p 0, ethertype 802.1Q, vlan 2, p 0, ethertype IPv4, (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto Options (0), length 500)
+    196.222.232.221 > 127.0.0.1:  ip-proto-0 480
+    09:49:08.295239 00:11:22:33:44:11 > 02:00:00:00:00:00, ethertype 802.1Q (0x8100), length 522: vlan 1, p 0, ethertype 802.1Q, vlan 2, p 0, ethertype IPv4, (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto Options (0), length 500)
+    196.222.232.221 > 127.0.0.1:  ip-proto-0 480
+
+    09:49:41.043101 00:00:00:00:00:00 > 00:11:22:33:44:11, ethertype 802.1Q (0x8100), length 518: vlan 1, p 0, ethertype IPv4, (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto Options (0), length 500)
+    196.222.232.221 > 127.0.0.1:  ip-proto-0 480
+    09:49:41.043166 00:11:22:33:44:11 > 02:00:00:00:00:00, ethertype 802.1Q (0x8100), length 518: vlan 1, p 0, ethertype IPv4, (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto Options (0), length 500)
+    196.222.232.221 > 127.0.0.1:  ip-proto-0 480
+
+Test case: IAVF DUAL VLAN header insertion
+==========================================
+
+.. note::
+
+   according to dpdk commit d048a0aaae27809523969904c2f7b71fe3cc1bb6,
+   when the ice driver version newer than 1.8.9, avx512 tx path not support insert correct vlag tag(outer of QinQ)
+
+enable vlan filtering on port VF::
+
+    testpmd> vlan set filter on 0
+    testpmd> rx_vlan add 11 0
+
+set up test environment again::
+
+    echo 1 > /sys/bus/pci/devices/0000:18:00.0/sriov_numvfs
+    ip link set ens785f0 vf 0 mac 00:11:22:33:44:11
+    ip link set dev ens785f0 vf 0 spoofchk off
+    ./usertools/dpdk-devbind.py -b vfio-pci 0000:18:01.0
+    ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0xf -n 4 -a 0000:18:01.0 -- -i --rxq=16 --txq=16
+    testpmd> set fwd mac
+    testpmd> set verbose 1
+
+enable vlan header insertion on VF::
+
+    testpmd> port stop 0
+    Stopping ports...
+    Checking link statuses...
+    Done
+    testpmd> tx_vlan set 0 1
+    testpmd> port start 0
+
+tester send pkt to VF::
+
+    sendp([Ether(dst="00:11:22:33:44:11",type=0x0800)/IP(src="196.222.232.221")/("X"*480)], iface="ens786f0")
+    sendp([Ether(dst="00:11:22:33:44:11",type=0x8100)/Dot1Q(vlan=11,type=0x0800)/IP(src="196.222.232.221")/("X"*480)], iface="ens786f0")
+
+check the pkts with vlan header can be received in tester::
+
+    testpmd> port 0/queue 13: received 1 packets
+    src=00:00:00:00:00:00 - dst=00:11:22:33:44:11 - type=0x0800 - length=514 - nb_segs=1 - RSS hash=0xcaf4abfd - RSS queue=0xd - hw ptype: L2_ETHER L3_IPV4_EXT_UNKNOWN L4_NONFRAG  - sw ptype: L2_ETHER L3_IPV4  - l2_len=14 - l3_len=20 - Receive queue=0xd
+    ol_flags: PKT_RX_RSS_HASH PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN
+
+    port 0/queue 8: received 1 packets
+    src=00:00:00:00:00:00 - dst=00:11:22:33:44:11 - type=0x8100 - length=518 - nb_segs=1 - RSS hash=0x28099b78 - RSS queue=0x8 - hw ptype: L2_ETHER L3_IPV4_EXT_UNKNOWN L4_NONFRAG  - sw ptype: L2_ETHER_VLAN L3_IPV4  - l2_len=18 - l3_len=20 - Receive queue=0x8
+    ol_flags: PKT_RX_RSS_HASH PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN
+
+    10:32:55.566801 00:00:00:00:00:00 > 00:11:22:33:44:11, ethertype IPv4 (0x0800), length 514: (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto Options (0), length 500)
+    196.222.232.221 > 127.0.0.1:  ip-proto-0 480
+    10:32:55.566856 00:11:22:33:44:11 > 02:00:00:00:00:00, ethertype 802.1Q (0x8100), length 518: vlan 1, p 0, ethertype IPv4, (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto Options (0), length 500)
+    196.222.232.221 > 127.0.0.1:  ip-proto-0 480
+
+    06:29:32.281896 00:00:00:00:00:00 > 00:11:22:33:44:11, ethertype 802.1Q (0x8100), length 518: vlan 11, p 0, ethertype IPv4, (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto Options (0), length 500)
+    196.222.232.221 > 127.0.0.1:  ip-proto-0 480
+    06:29:32.281940 00:11:22:33:44:11 > 02:00:00:00:00:00, ethertype 802.1Q (0x8100), length 522: vlan 11, p 0, ethertype 802.1Q, vlan 1, p 0, ethertype IPv4, (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto Options (0), length 500)
+    196.222.232.221 > 127.0.0.1:  ip-proto-0 480
+
+disable vlan header insertion on VF1::
+
+    testpmd> port stop 0
+    Stopping ports...
+    Checking link statuses...
+    Done
+    testpmd> tx_vlan reset 0
+    testpmd> port start 0
+
+repeat step 4, check the pkts without vlan tag can be received in tester::
+
+    testpmd> port 0/queue 9: received 1 packets
+    src=00:00:00:00:00:00 - dst=00:11:22:33:44:11 - type=0x0800 - length=514 - nb_segs=1 - RSS hash=0xa63e8869 - RSS queue=0x9 - hw ptype: L2_ETHER L3_IPV4_EXT_UNKNOWN L4_NONFRAG  - sw ptype: L2_ETHER L3_IPV4  - l2_len=14 - l3_len=20 - Receive queue=0x9
+    ol_flags: PKT_RX_RSS_HASH PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN
+
+    port 0/queue 12: received 1 packets
+    src=00:00:00:00:00:00 - dst=00:11:22:33:44:11 - type=0x8100 - length=518 - nb_segs=1 - RSS hash=0x6f5533bc - RSS queue=0xc - hw ptype: L2_ETHER L3_IPV4_EXT_UNKNOWN L4_NONFRAG  - sw ptype: L2_ETHER_VLAN L3_IPV4  - l2_len=18 - l3_len=20 - Receive queue=0xc
+    ol_flags: PKT_RX_RSS_HASH PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN
+
+    10:34:40.070754 00:00:00:00:00:00 > 00:11:22:33:44:11, ethertype IPv4 (0x0800), length 514: (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto Options (0), length 500)
+    196.222.232.221 > 127.0.0.1:  ip-proto-0 480
+    10:34:40.070824 00:11:22:33:44:11 > 02:00:00:00:00:00, ethertype IPv4 (0x0800), length 514: (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto Options (0), length 500)
+    196.222.232.221 > 127.0.0.1:  ip-proto-0 480
+
+    06:36:57.641871 00:00:00:00:00:00 > 00:11:22:33:44:11, ethertype 802.1Q (0x8100), length 518: vlan 11, p 0, ethertype IPv4, (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto Options (0), length 500)
+    196.222.232.221 > 127.0.0.1:  ip-proto-0 480
+    06:36:57.641909 00:11:22:33:44:11 > 02:00:00:00:00:00, ethertype 802.1Q (0x8100), length 518: vlan 11, p 0, ethertype IPv4, (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto Options (0), length 500)
+    196.222.232.221 > 127.0.0.1:  ip-proto-0 480
+
+
+Test case: Enable/disable AVF CRC stripping
+===========================================
+
+start testpmd with "--disable-crc-strip"::
+
+    ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -l 20-23 -n 4 -a 0000:18:01.0 -- -i --rxq=16 --txq=16 --disable-crc-strip
+    testpmd> set fwd mac
+    testpmd> set verbose 1
+
+send pkts to VF::
+
+    sendp([Ether(dst="00:11:22:33:44:11",type=0x0800)/IP(src="196.222.232.221")/("X"*480)], iface="ens786f0")
+
+check VF1 receive this pkts with CRC::
+
+    testpmd> port 0/queue 0: received 1 packets
+    src=00:00:00:00:00:00 - dst=00:11:22:33:44:11 - type=0x0800 - length=514 - nb_segs=1 - RSS hash=0x890d9a70 - RSS queue=0x0 - hw ptype: L2_ETHER L3_IPV4_EXT_UNKNOWN L4_NONFRAG  - sw ptype: L2_ETHER L3_IPV4  - l2_len=14 - l3_len=20 - Receive queue=0x0
+    ol_flags: PKT_RX_RSS_HASH PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN
+
+    show port stats all
+
+    ######################## NIC statistics for port 0  ########################
+    RX-packets: 1          RX-missed: 0          RX-bytes:  518
+    RX-errors: 0
+    RX-nombuf:  0
+    TX-packets: 1          TX-errors: 0          TX-bytes:  514
+
+    Throughput (since last show)
+    Rx-pps:            0          Rx-bps:            0
+    Tx-pps:            0          Tx-bps:            0
+    ############################################################################
+    clear port stats all
+
+enable crc strip in testpmd::
+
+    testpmd> stop
+    testpmd> port stop 0
+    testpmd> port config 0 rx_offload keep_crc off
+    testpmd> port start 0
+    testpmd> start
+
+repeat step 2, check VF receive this pkts without CRC::
+
+    testpmd> port 0/queue 2: received 1 packets
+    src=00:00:00:00:00:00 - dst=00:11:22:33:44:11 - type=0x0800 - length=514 - nb_segs=1 - RSS hash=0xa94c21d2 - RSS queue=0x2 - hw ptype: L2_ETHER L3_IPV4_EXT_UNKNOWN L4_NONFRAG  - sw ptype: L2_ETHER L3_IPV4  - l2_len=14 - l3_len=20 - Receive queue=0x2
+    ol_flags: PKT_RX_RSS_HASH PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN
+
+    show port stats all
+
+    ######################## NIC statistics for port 0  ########################
+    RX-packets: 1          RX-missed: 0          RX-bytes:  514
+    RX-errors: 0
+    RX-nombuf:  0
+    TX-packets: 1          TX-errors: 0          TX-bytes:  514
+
+    Throughput (since last show)
+    Rx-pps:            0          Rx-bps:            0
+    Tx-pps:            0          Tx-bps:            0
+    ############################################################################
+    clear port stats all
+
+disable crc strip in testpmd::
+
+    testpmd> stop
+    testpmd> port stop 0
+    testpmd> port config 0 rx_offload keep_crc on
+    testpmd> port start 0
+    testpmd> start
+
+repeat step 2, check VF1 receive this pkts with CRC::
+
+    testpmd> port 0/queue 0: received 1 packets
+    src=00:00:00:00:00:00 - dst=00:11:22:33:44:11 - type=0x0800 - length=514 - nb_segs=1 - RSS hash=0x79c10190 - RSS queue=0x0 - hw ptype: L2_ETHER L3_IPV4_EXT_UNKNOWN L4_NONFRAG  - sw ptype: L2_ETHER L3_IPV4  - l2_len=14 - l3_len=20 - Receive queue=0x0
+    ol_flags: PKT_RX_RSS_HASH PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN
+
+    show port stats all
+
+    ######################## NIC statistics for port 0  ########################
+    RX-packets: 1          RX-missed: 0          RX-bytes:  518
+    RX-errors: 0
+    RX-nombuf:  0
+    TX-packets: 1          TX-errors: 0          TX-bytes:  514
+
+    Throughput (since last show)
+    Rx-pps:            0          Rx-bps:            0
+    Tx-pps:            0          Tx-bps:            0
+    ############################################################################
+    clear port stats all
+
+re-launch testpmd without "--disable-crc-strip"::
+
+    ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -l 20-23 -n 4 -a 0000:18:01.0 -- -i --rxq=16 --txq=16
+    testpmd> set fwd mac
+    testpmd> set verbose 1
+
+repeat step 2, check VF receive this pkts without CRC::
+
+    testpmd> port 0/queue 2: received 1 packets
+    src=00:00:00:00:00:00 - dst=00:11:22:33:44:11 - type=0x0800 - length=514 - nb_segs=1 - RSS hash=0x898ada82 - RSS queue=0x2 - hw ptype: L2_ETHER L3_IPV4_EXT_UNKNOWN L4_NONFRAG  - sw ptype: L2_ETHER L3_IPV4  - l2_len=14 - l3_len=20 - Receive queue=0x2
+    ol_flags: PKT_RX_RSS_HASH PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN
+
+    show port stats all
+
+    ######################## NIC statistics for port 0  ########################
+    RX-packets: 1          RX-missed: 0          RX-bytes:  514
+    RX-errors: 0
+    RX-nombuf:  0
+    TX-packets: 1          TX-errors: 0          TX-bytes:  514
+
+    Throughput (since last show)
+    Rx-pps:            0          Rx-bps:            0
+    Tx-pps:            0          Tx-bps:            0
+    ############################################################################
+
+
+Test case: IAVF CRC strip and Vlan strip co-exists
+==================================================
+
+start testpmd with crc strip enable, vlan strip disable::
+
+    ./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -l 20-23 -n 4 -a 0000:18:01.0 -- -i --rxq=16 --txq=16
+    testpmd> set fwd mac
+    testpmd> set verbose 1
+    testpmd> show port info 0
+    ********************* Infos for port 0  *********************
+    MAC address: 00:11:22:33:44:11
+    Device name: 0000:18:01.1
+    Driver name: net_iavf
+    ......
+    VLAN offload:
+      strip off, filter off, extend off, qinq strip off
+
+request disable vlan strip::
+
+    testpmd> vlan set strip off 0
+
+check the vlan strip still disable::
+
+    testpmd> show port info 0
+    ********************* Infos for port 0  *********************
+    MAC address: 00:11:22:33:44:11
+    Device name: 0000:18:01.1
+    Driver name: net_iavf
+    ......
+    VLAN offload:
+      strip off, filter off, extend off, qinq strip off
+
+set vlan filter on and add rx_vlan 1::
+
+    testpmd> vlan set filter on 0
+    testpmd> rx_vlan add 1 0
+    testpmd> start
+
+send qinq pkts to check vlan strip is off, crc strip is on::
+
+    sendp([Ether(dst="00:11:22:33:44:11",type=0x8100)/Dot1Q(vlan=1,type=0x8100)/Dot1Q(vlan=2,type=0x0800)/IP(src="196.222.232.221")/("X"*480)], iface="ens786f0")
+
+    testpmd> port 0/queue 6: received 1 packets
+    src=00:00:00:00:00:00 - dst=00:11:22:33:44:11 - type=0x8100 - length=522 - nb_segs=1 - RSS hash=0xf6521426 - RSS queue=0x6 - hw ptype: L2_ETHER L3_IPV4_EXT_UNKNOWN L4_NONFRAG  - sw ptype: L2_ETHER_VLAN INNER_L2_ETHER_VLAN INNER_L3_IPV4  - l2_len=18 - inner_l2_len=4 - inner_l3_len=20 - Tail/CRC: 0x58585858/0x00000000 - Receive queue=0x6
+    ol_flags: PKT_RX_RSS_HASH PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN
+
+    show port stats all
+
+    ######################## NIC statistics for port 0  ########################
+    RX-packets: 1          RX-missed: 0          RX-bytes:  522
+    RX-errors: 0
+    RX-nombuf:  0
+    TX-packets: 1          TX-errors: 0          TX-bytes:  522
+
+    Throughput (since last show)
+    Rx-pps:            0          Rx-bps:            0
+    Tx-pps:            0          Tx-bps:            0
+    ############################################################################
+
+    09:07:45.863251 00:00:00:00:00:00 > 00:11:22:33:44:11, ethertype 802.1Q (0x8100), length 522: vlan 1, p 0, ethertype 802.1Q, vlan 2, p 0, ethertype IPv4, (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto Options (0), length 500)
+    196.222.232.221 > 127.0.0.1:  ip-proto-0 480
+    09:07:45.863340 00:11:22:33:44:11 > 02:00:00:00:00:00, ethertype 802.1Q (0x8100), length 522: vlan 1, p 0, ethertype 802.1Q, vlan 2, p 0, ethertype IPv4, (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto Options (0), length 500)
+    196.222.232.221 > 127.0.0.1:  ip-proto-0 480
+
+request enable vlan strip::
+
+    testpmd> vlan set strip on 0
+
+check the vlan strip enable successfully::
+
+    testpmd> show port info 0
+    ********************* Infos for port 0  *********************
+    MAC address: 00:11:22:33:44:11
+    Device name: 0000:18:01.1
+    Driver name: net_iavf
+    ......
+    VLAN offload:
+      strip on, filter off, extend off, qinq strip off
+
+repeat step 5, send qinq pkts to check vlan strip is on(tx-4), crc strip is on::
+
+    testpmd> port 0/queue 6: received 1 packets
+    src=00:00:00:00:00:00 - dst=00:11:22:33:44:11 - type=0x8100 - length=518 - nb_segs=1 - RSS hash=0xf6521426 - RSS queue=0x6 - hw ptype: L2_ETHER L3_IPV4_EXT_UNKNOWN L4_NONFRAG  - sw ptype: L2_ETHER_VLAN L3_IPV4  - l2_len=18 - l3_len=20 - Tail/CRC: 0x58585858/0x00000000 - Receive queue=0x6
+    ol_flags: PKT_RX_RSS_HASH PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN
+
+    show port stats all
+
+    ######################## NIC statistics for port 0  ########################
+    RX-packets: 1          RX-missed: 0          RX-bytes:  522
+    RX-errors: 0
+    RX-nombuf:  0
+    TX-packets: 1          TX-errors: 0          TX-bytes:  518
+
+    Throughput (since last show)
+    Rx-pps:            0          Rx-bps:            0
+    Tx-pps:            0          Tx-bps:            0
+    ############################################################################
+
+    11:09:03.918907 00:00:00:00:00:00 > 00:11:22:33:44:11, ethertype 802.1Q (0x8100), length 522: vlan 1, p 0, ethertype 802.1Q, vlan 2, p 0, ethertype IPv4, (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto Options (0), length 500)
+    196.222.232.221 > 127.0.0.1:  ip-proto-0 480
+    11:09:03.918952 00:11:22:33:44:11 > 02:00:00:00:00:00, ethertype 802.1Q (0x8100), length 518: vlan 2, p 0, ethertype IPv4, (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto Options (0), length 500)
+    196.222.232.221 > 127.0.0.1:  ip-proto-0 480
+
+request disable vlan strip::
+
+    testpmd> vlan set strip off 0
+
+check the vlan strip disable successfully::
+
+     testpmd> show port info 0
+     ********************* Infos for port 0  *********************
+     MAC address: 00:11:22:33:44:11
+     Device name: 0000:18:01.1
+     Driver name: net_iavf
+     ......
+     VLAN offload:
+       strip off, filter on, extend off, qinq strip off
+
+request disable crc strip::
+
+     testpmd> stop
+     testpmd> port stop 0
+     testpmd> port config 0 rx_offload keep_crc on
+     testpmd> port start 0
+     testpmd> start
+
+repeat step 5, send qinq pkts to check vlan strip is off, crc strip is off(rx+4)::
+
+     testpmd> port 0/queue 7: received 1 packets
+     src=00:00:00:00:00:00 - dst=00:11:22:33:44:11 - type=0x8100 - length=522 - nb_segs=1 - RSS hash=0xbc8b1857 - RSS queue=0x7 - hw ptype: L2_ETHER L3_IPV4_EXT_UNKNOWN L4_NONFRAG  - sw ptype: L2_ETHER_VLAN INNER_L2_ETHER_VLAN INNER_L3_IPV4  - l2_len=18 - inner_l2_len=4 - inner_l3_len=20 - Tail/CRC: 0x58585858/0x6d870bf6 - Receive queue=0x7
+     ol_flags: PKT_RX_RSS_HASH PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN
+
+     show port stats all
+     ######################## NIC statistics for port 0  ########################
+     RX-packets: 1          RX-missed: 0          RX-bytes:  526
+     RX-errors: 0
+     RX-nombuf:  0
+     TX-packets: 1          TX-errors: 0          TX-bytes:  522
+
+     Throughput (since last show)
+     Rx-pps:            0          Rx-bps:            0
+     Tx-pps:            0          Tx-bps:            0
+     ############################################################################
+
+     10:23:57.350934 00:00:00:00:00:00 > 00:11:22:33:44:11, ethertype 802.1Q (0x8100), length 522: vlan 1, p 0, ethertype 802.1Q, vlan 2, p 0, ethertype IPv4, (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto Options (0), length 500)
+     196.222.232.221 > 127.0.0.1:  ip-proto-0 480
+     10:23:57.351008 00:11:22:33:44:11 > 02:00:00:00:00:00, ethertype 802.1Q (0x8100), length 522: vlan 1, p 0, ethertype 802.1Q, vlan 2, p 0, ethertype IPv4, (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto Options (0), length 500)
+     196.222.232.221 > 127.0.0.1:  ip-proto-0 480
+
+request enable vlan strip::
+
+     testpmd> vlan set strip on 0
+     iavf_execute_vf_cmd(): No response or return failure (-64) for cmd 54
+     iavf_config_vlan_strip_v2(): fail to execute command VIRTCHNL_OP_ENABLE_VLAN_STRIPPING_V2
+     rx_vlan_strip_set(port_pi=0, on=1) failed diag=-5
+
+repeat step 5, send qinq pkts to check the vlan strip can not enable::
+
+     testpmd> port 0/queue 7: received 1 packets
+     src=00:00:00:00:00:00 - dst=00:11:22:33:44:11 - type=0x8100 - length=518 - nb_segs=1 - RSS hash=0xbc8b1857 - RSS queue=0x7 - hw ptype: L2_ETHER L3_IPV4_EXT_UNKNOWN L4_NONFRAG  - sw ptype: L2_ETHER_VLAN L3_IPV4  - l2_len=18 - l3_len=20 - Tail/CRC: 0x58585858/0x6d870bf6 - Receive queue=0x7
+     ol_flags: PKT_RX_RSS_HASH PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN
+
+     show port stats all
+     ######################## NIC statistics for port 0  ########################
+     RX-packets: 1          RX-missed: 0          RX-bytes:  526
+     RX-errors: 0
+     RX-nombuf:  0
+     TX-packets: 1          TX-errors: 0          TX-bytes:  522
+
+     Throughput (since last show)
+     Rx-pps:            0          Rx-bps:            0
+     Tx-pps:            0          Tx-bps:            0
+     ############################################################################
+
+     10:26:08.346936 00:00:00:00:00:00 > 00:11:22:33:44:11, ethertype 802.1Q (0x8100), length 522: vlan 1, p 0, ethertype 802.1Q, vlan 2, p 0, ethertype IPv4, (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto Options (0), length 500)
+     196.222.232.221 > 127.0.0.1:  ip-proto-0 480
+     10:26:08.347006 00:11:22:33:44:11 > 02:00:00:00:00:00, ethertype 802.1Q (0x8100), length 522: vlan 1, p 0, ethertype 802.1Q, vlan 2, p 0, ethertype IPv4, (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto Options (0), length 500)
+     196.222.232.221 > 127.0.0.1:  ip-proto-0 480
+
+request disable vlan strip::
+
+     vlan set strip off 0
+
+check the vlan strip still disable::
+
+     testpmd> show port info 0
+     ********************* Infos for port 0  *********************
+     MAC address: 00:11:22:33:44:11
+     Device name: 0000:18:01.1
+     Driver name: net_iavf
+     ......
+     VLAN offload:
+       strip off, filter on, extend off, qinq strip off
+
+request enable crc strip::
+
+     testpmd> stop
+     testpmd> port stop 0
+     testpmd> port config 0 rx_offload keep_crc off
+     testpmd> port start 0
+     testpmd> start
+
+repeat step 5, send qinq pkts to check the crc strip enable successfully::
+
+     testpmd> port 0/queue 3: received 1 packets
+     src=00:00:00:00:00:00 - dst=00:11:22:33:44:11 - type=0x8100 - length=522 - nb_segs=1 - RSS hash=0x2b4ad203 - RSS queue=0x3 - hw ptype: L2_ETHER L3_IPV4_EXT_UNKNOWN L4_NONFRAG  - sw ptype: L2_ETHER_VLAN INNER_L2_ETHER_VLAN INNER_L3_IPV4  - l2_len=18 - inner_l2_len=4 - inner_l3_len=20 - Receive queue=0x3
+     ol_flags: PKT_RX_RSS_HASH PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD PKT_RX_OUTER_L4_CKSUM_UNKNOWN
+     port 0/queue 3: sent 1 packets
+     src=00:11:22:33:44:11 - dst=02:00:00:00:00:00 - type=0x8100 - length=522 - nb_segs=1 - hw ptype: L2_ETHER L3_IPV4_EXT_UNKNOWN L4_NONFRAG  - sw ptype: L2_ETHER_VLAN INNER_L2_ETHER_VLAN INNER_L3_IPV4  - l2_len=18 - inner_l2_len=4 - inner_l3_len=20 - Send queue=0x3
+     ol_flags: PKT_RX_L4_CKSUM_UNKNOWN PKT_RX_IP_CKSUM_UNKNOWN PKT_RX_OUTER_L4_CKSUM_UNKNOWN
+
+     show port stats all
+     ######################## NIC statistics for port 0  ########################
+     RX-packets: 1          RX-missed: 0          RX-bytes:  522
+     RX-errors: 0
+     RX-nombuf:  0
+     TX-packets: 1          TX-errors: 0          TX-bytes:  522
+
+     Throughput (since last show)
+     Rx-pps:            0          Rx-bps:            0
+     Tx-pps:            0          Tx-bps:            0
+     ############################################################################
+
+     10:29:19.995352 00:00:00:00:00:00 > 00:11:22:33:44:11, ethertype 802.1Q (0x8100), length 522: vlan 1, p 0, ethertype 802.1Q, vlan 2, p 0, ethertype IPv4, (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto Options (0), length 500)
+     196.222.232.221 > 127.0.0.1:  ip-proto-0 480
+     10:29:19.995424 00:11:22:33:44:11 > 02:00:00:00:00:00, ethertype 802.1Q (0x8100), length 522: vlan 1, p 0, ethertype 802.1Q, vlan 2, p 0, ethertype IPv4, (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto Options (0), length 500)
+     196.222.232.221 > 127.0.0.1:  ip-proto-0 480
+
+Test Case: vf queue start/stop
+==============================
+
+This case support VF (Intel® Ethernet 700 Series/Intel® Ethernet 800 Series)
+
+Launch testpmd::
+
+    x86_64-native-linuxapp-gcc/app/dpdk-testpmd  -l 1-2 -n 4 -a 0000:af:01.0 -- -i --portmask=0x1 --port-topology=loop
+
+Run "set verbose 1" to set verbose
+
+Run "set fwd mac" to set fwd type
+
+Run "start" to start fwd package
+
+Start a packet capture on the tester in the background::
+
+    tcpdump -i ens7  'ether[12:2] != 0x88cc'  -Q in -w /tmp/tester/sniff_ens7.pcap
+
+Start packet generator to transmit packets::
+
+    sendp([Ether(dst='3c:fd:fe:c1:0f:4c', src='00:00:20:00:00:00')/IP()/UDP()/Raw(load=b'XXXXXXXXXXXXXXXXXX')],iface="ens7",count=4,inter=0,verbose=False)
+
+Stop testpmd::
+
+  ---------------------- Forward statistics for port 0  ----------------------
+  RX-packets: 4              RX-dropped: 0             RX-total: 4
+  TX-packets: 0              TX-dropped: 0             TX-total: 0
+  ----------------------------------------------------------------------------
+
+  ---------------------- Forward statistics for port 1  ----------------------
+  RX-packets: 0              RX-dropped: 0             RX-total: 0
+  TX-packets: 4              TX-dropped: 0             TX-total: 4
+  ----------------------------------------------------------------------------
+
+
+Quit tcpdump and check tester port receive 4 packets
+
+Run "port 0 rxq 0 stop" to stop rxq 0 in port 0
+
+Start packet generator to transmit and check tester port not receive packets
+
+Run "port 0 rxq 0 start" to start rxq 0 in port 0
+
+Run "port 0 txq 0 stop" to stop txq 0 in port 0
+
+Start packet generator to transmit and check tester port not receive packets and in testpmd it not has "port 0/queue
+0: received 1 packets" print
+
+Stop testpmd::
+
+  ---------------------- Forward statistics for port 0  ----------------------
+  RX-packets: 4              RX-dropped: 0             RX-total: 4
+  TX-packets: 0              TX-dropped: 0             TX-total: 0
+  ----------------------------------------------------------------------------
+
+  ---------------------- Forward statistics for port 1  ----------------------
+  RX-packets: 0              RX-dropped: 0             RX-total: 0
+  TX-packets: 0              TX-dropped: 0             TX-total: 0
+  ----------------------------------------------------------------------------
+
+Run "port 0 txq 0 start" to start txq 0 in port 0
+
+Start packet generator to transmit and check tester port receive 4 packets and in testpmd it has "port 0/queue 0:
+received 1 packets" print
+
+Stop testpmd::
+
+  ---------------------- Forward statistics for port 0  ----------------------
+  RX-packets: 4              RX-dropped: 0             RX-total: 4
+  TX-packets: 0              TX-dropped: 0             TX-total: 0
+  ----------------------------------------------------------------------------
+
+  ---------------------- Forward statistics for port 1  ----------------------
+  RX-packets: 0              RX-dropped: 0             RX-total: 0
+  TX-packets: 4              TX-dropped: 0             TX-total: 4
+  ----------------------------------------------------------------------------
+
