[dts] [PATCH] tests: count the number of packet from vf to pf using printing information

Peng Yuan yuan.peng at intel.com
Fri Mar 2 08:50:42 CET 2018


modify the test_VEB_switching_inter_vfs_and_pf which belongs to
TestSuite_veb_switch.py. because pf's status doesn't count the packet from vf
which is rooted to itself.

Signed-off-by: Peng Yuan <yuan.peng at intel.com>

diff --git a/tests/TestSuite_veb_switch.py b/tests/TestSuite_veb_switch.py
index c1953e2..0dc570a 100644
--- a/tests/TestSuite_veb_switch.py
+++ b/tests/TestSuite_veb_switch.py
@@ -37,6 +37,7 @@ Test VEB Switch and floating VEB Features by Poll Mode Drivers.
 
 import re
 import time
+import utils
 
 from virt_dut import VirtDut
 from project_dpdk import DPDKdut
@@ -67,7 +68,7 @@ class TestVEBSwitching(TestCase):
             return [stats['TX-packets'], stats['TX-errors'], stats['TX-bytes']]
         else:
             return None
-    
+ 
     def veb_get_pmd_stats(self, dev, portid, rx_tx):
         stats = {}
         rx_pkts_prefix = "RX-packets:"
@@ -100,7 +101,6 @@ class TestVEBSwitching(TestCase):
         else:
             return None
 
-
     def veb_get_pmd_value(self, prefix, out):
         pattern = re.compile(prefix + "(\s+)([0-9]+)")
         m = pattern.search(out)
@@ -127,9 +127,8 @@ class TestVEBSwitching(TestCase):
             pkt.config_layer('ether', {'dst': vf_mac})
             pkt.send_pkt(tx_port=itf)
             time.sleep(.5)
-   
+ 
     # Test cases.
-    
     def set_up_all(self):
         """
         Prerequisite steps for each test suite.
@@ -141,14 +140,14 @@ class TestVEBSwitching(TestCase):
         self.verify(len(self.dut_ports) >= 1, "Insufficient ports")
         self.session_secondary = self.dut.new_session()
         self.session_third = self.dut.new_session()
-        
+
         self.pf_kdriver_flag = 0
         self.pf_ddriver_flag = 0
         self.vf0_mac = "00:11:22:33:44:11"
         self.vf1_mac = "00:11:22:33:44:12"
         self.vf2_mac = "00:11:22:33:44:13"
         self.vf3_mac = "00:11:22:33:44:14"
-        
+ 
         self.used_dut_port = self.dut_ports[0]
         localPort = self.tester.get_local_port(self.dut_ports[0])
         self.tester_itf = self.tester.get_interface(localPort)
@@ -209,9 +208,9 @@ class TestVEBSwitching(TestCase):
     def test_VEB_switching_inter_vfs(self):
         """
         Kernel PF, then create 2VFs. VFs running dpdk testpmd, send traffic to
-        VF1, and set the packet's DEST MAC to VF2, check if VF2 can receive 
+        VF1, and set the packet's DEST MAC to VF2, check if VF2 can receive
         the packets. Check Inter VF-VF MAC switch.
-    """
+        """
         self.setup_env(driver='default')
         self.dut.send_expect("./%s/app/testpmd -c 0xf -n 4 --socket-mem 1024,1024 -w %s --file-prefix=test1 -- -i --eth-peer=0,%s" % (self.target, self.sriov_vfs_port[0].pci, self.vf1_mac), "testpmd>", 120)
         self.dut.send_expect("set fwd txonly", "testpmd>")
@@ -224,18 +223,18 @@ class TestVEBSwitching(TestCase):
         self.dut.send_expect("start", "testpmd>", 5)
         time.sleep(2)
     
-        self.dut.send_expect("stop", "testpmd>", 5)    
+        self.dut.send_expect("stop", "testpmd>", 5)
         self.session_secondary.send_expect("stop", "testpmd>", 5)
 
         vf0_tx_stats = self.veb_get_pmd_stats("first", 0, "tx")
         vf1_rx_stats = self.veb_get_pmd_stats("second", 0, "rx")
         self.verify(vf0_tx_stats[0] != 0, "no packet was sent by VF0")
-        self.verify(vf0_tx_stats[0] * 0.5 < vf1_rx_stats[0], "VF1 failed to receive packets from VF0")    
+        self.verify(vf0_tx_stats[0] * 0.5 < vf1_rx_stats[0], "VF1 failed to receive packets from VF0")
 
     def test_VEB_switching_inter_vfs_mac_fwd(self):
         """
         Kernel PF, then create 2VFs. VFs running dpdk testpmd, send traffic to
-        VF1, and set the packet's DEST MAC to VF2, check if VF2 can receive 
+        VF1, and set the packet's DEST MAC to VF2, check if VF2 can receive
         the packets. Check Inter VF-VF MAC switch.
         """
         self.setup_env(driver='default')
@@ -262,7 +261,7 @@ class TestVEBSwitching(TestCase):
     
     def test_VEB_switching_inter_vfs_vlan(self):
         """
-        Kernel PF, then create 2VFs, assign VF1 with VLAN=1 in, VF2 with 
+        Kernel PF, then create 2VFs, assign VF1 with VLAN=1 in, VF2 with
         VLAN=2. VFs are running dpdk testpmd, send traffic to VF1 with VLAN=1,
         then let it forwards to VF2, it should not work since they are not in
         the same VLAN; set VF2 with VLAN=1, then send traffic to VF1 with
@@ -331,29 +330,47 @@ class TestVEBSwitching(TestCase):
         self.setup_env(driver=self.drivername)
         self.dut.send_expect("./%s/app/testpmd -c 0xf -n 4 --socket-mem 1024,1024 -w %s --file-prefix=test1 -- -i" % (self.target, self.pf_pci), "testpmd>", 120)
         self.dut.send_expect("set fwd rxonly", "testpmd>")
+        self.dut.send_expect("set verbose 1", "testpmd>")
         self.dut.send_expect("set promisc all off", "testpmd>")
         self.dut.send_expect("start", "testpmd>")
         time.sleep(2)
         self.session_secondary.send_expect("./%s/app/testpmd -c 0xf0 -n 4 --socket-mem 1024,1024 -w %s --file-prefix=test2 -- -i --eth-peer=0,%s" % (self.target, self.sriov_vfs_port[0].pci, self.pf_mac_address), "testpmd>", 120)
+        self.session_secondary.send_expect("mac_addr add 0 %s" % self.vf0_mac, "testpmd>")
         self.session_secondary.send_expect("set fwd txonly", "testpmd>")
         self.session_secondary.send_expect("set promisc all off", "testpmd>")
         self.session_secondary.send_expect("start", "testpmd>")
         time.sleep(2)
-
+        # print the packets which received by pf, this caused most packets missed.
+        out = self.dut.get_session_output(timeout=1)
         self.session_secondary.send_expect("stop", "testpmd>", 2)
         self.dut.send_expect("stop", "testpmd>", 2)
-
+        lines = out.split("\r\n")
+        cnt = 0
+        count_pkt = 0
+        # count the packet received by pf from vf.
+        for line in lines:
+            line = line.strip()
+            if len(line) != 0 and line.startswith(("src=",)):
+                for item in line.split(" "):
+                    item = item.strip()
+                    if(item == ("src=%s" % self.vf0_mac)):
+                        cnt = cnt + 1
+                    elif(item == "L4_UDP"):
+                        cnt = cnt + 1
+                if (cnt == 2):
+                    count_pkt = count_pkt + 1
+                cnt = 0
+        print utils.GREEN("The number of UDP packets received by pf is %d." % count_pkt)
         vf0_tx_stats = self.veb_get_pmd_stats("second", 0, "tx")
         pf_rx_stats = self.veb_get_pmd_stats("first", 0, "rx")
-        self.verify(vf0_tx_stats[0] != 0, "no packet was sent by VF0")
-        self.verify(pf_rx_stats[0] != 0, "no packet was received by PF")
-        self.verify(vf0_tx_stats[0]*0.5 < pf_rx_stats[0], "PF failed to receive most packets from VF0")
+        self.verify(vf0_tx_stats[0] > 0, "no packet was sent by VF0")
+        self.verify(count_pkt > 0, "no packet was received by PF")
         self.session_secondary.send_expect("quit", "# ")
-        time.sleep(2)       
+        time.sleep(2)
         self.dut.send_expect("quit", "# ")
         time.sleep(2)
  
-        #PF->VF
+        # PF->VF
         self.dut.send_expect("./%s/app/testpmd -c 0xf -n 4 --socket-mem 1024,1024 -w %s --file-prefix=test1 -- -i --eth-peer=0,%s" % (self.target, self.pf_pci, self.vf0_mac), "testpmd>", 120)
         self.dut.send_expect("set fwd txonly", "testpmd>")
         self.dut.send_expect("set promisc all off", "testpmd>")
@@ -366,15 +383,12 @@ class TestVEBSwitching(TestCase):
         time.sleep(2)
         self.dut.send_expect("start", "testpmd>")
         time.sleep(2)
-
         self.dut.send_expect("stop", "testpmd>", 2)
         self.session_secondary.send_expect("stop", "testpmd>", 2)
 
         vf0_rx_stats = self.veb_get_pmd_stats("second", 0, "rx")
-        pf_tx_stats = self.veb_get_pmd_stats("first", 0, "tx")
-        self.verify(pf_tx_stats[0] != 0, "no packet was sent by PF")
-        self.verify(vf0_rx_stats[0] != 0, "no packet was received by VF0")
-        self.verify(vf0_rx_stats[0] > pf_tx_stats[0]*0.5, "VF0 failed to receive most packets from PF")
+        print utils.GREEN("The number of UDP packets received by vf is %d." % vf0_rx_stats[0])
+        self.verify(vf0_rx_stats[0] > 0, "no packet was received by VF0")
         self.session_secondary.send_expect("quit", "# ")
         time.sleep(2)
         self.dut.send_expect("quit", "# ")
@@ -438,7 +452,7 @@ class TestVEBSwitching(TestCase):
         self.session_third.send_expect("set fwd rxonly", "testpmd>")
         self.session_third.send_expect("set promisc all off", "testpmd>")
         self.session_third.send_expect("start", "testpmd>")
-        self.session_secondary.send_expect("start", "testpmd>")        
+        self.session_secondary.send_expect("start", "testpmd>")
         time.sleep(2)
 
         self.session_secondary.send_expect("stop", "testpmd>", 5)
@@ -449,7 +463,6 @@ class TestVEBSwitching(TestCase):
         self.verify(vf0_tx_stats[0] != 0, "no packet was sent by VF0")
         self.verify(vf0_tx_stats[0] * 0.5 < vf1_rx_stats[0], "VF1 failed to receive packets from VF0")
 
-         
     def tear_down(self):
         """
         Run after each test case.
@@ -461,7 +474,6 @@ class TestVEBSwitching(TestCase):
 
         self.dut.kill_all()
     
-
     def tear_down_all(self):
         """
         Run after each test suite.
@@ -473,4 +485,3 @@ class TestVEBSwitching(TestCase):
         for port_id in self.dut_ports:
             port = self.dut.ports_info[port_id]['port']
             port.bind_driver(driver=self.drivername)
-
-- 
2.5.0



More information about the dts mailing list