[dts] [PATCH V1] tests: judge tcpdump version when use flow direction params

Yao, BingX Y bingx.y.yao at intel.com
Tue Jun 11 08:34:08 CEST 2019


Tested-by: Yao, BingX Y <bingx.y.yao at intel.com>

-----Original Message-----
From: dts [mailto:dts-bounces at dpdk.org] On Behalf Of lihong
Sent: Tuesday, June 11, 2019 7:08 AM
To: dts at dpdk.org
Cc: Ma, LihongX <lihongx.ma at intel.com>
Subject: [dts] [PATCH V1] tests: judge tcpdump version when use flow direction params

The params of flow direction in tcpdump is varied by tcpdump version.
So add function to get the param base on the version.

Signed-off-by: lihong <lihongx.ma at intel.com>
---
 tests/TestSuite_flow_classify_softnic.py | 27 +++++++++++++++++++++++++--
 tests/TestSuite_ip_pipeline.py           | 27 +++++++++++++++++++++++++--
 2 files changed, 50 insertions(+), 4 deletions(-)

diff --git a/tests/TestSuite_flow_classify_softnic.py b/tests/TestSuite_flow_classify_softnic.py
index 9b339ca..88dcc7e 100644
--- a/tests/TestSuite_flow_classify_softnic.py
+++ b/tests/TestSuite_flow_classify_softnic.py
@@ -120,14 +120,35 @@ class TestFlowClassifySoftnic(TestCase):
         command = "sed -i \'/^table action/a" + cmd + "\' ./drivers/net/softnic/flow_classify_softnic/%s" % filename
         self.dut.send_expect(command, "# ", 20)
 
+    def get_flow_direction_param_of_tcpdump(self):
+        """
+        get flow dirction param depend on tcpdump version
+        """
+        param = ""
+        direct_param = r"(\s+)\[ (\S+) in\|out\|inout \]"
+        out = self.tester.send_expect('tcpdump -h', '# ')
+        for line in out.split('\n'):
+            m = re.match(direct_param, line)
+            if m:
+                opt = re.search("-Q", m.group(2));
+                if opt:
+                    param = "-Q" + " in"
+                else:
+                    opt = re.search("-P", m.group(2));
+                    if opt:
+                        param = "-P" + " in"
+        if len(param) == 0:
+            self.logger.info("tcpdump not support direction choice!!!")
+        return param
+
     def tcpdump_start_sniff(self, interface, filters=""):
         """
         Starts tcpdump in the background to sniff packets that received by interface.
         """
         command = 'rm -f /tmp/tcpdump_{0}.pcap'.format(interface)
         self.tester.send_expect(command, '#')
-        command = 'tcpdump -n -e -Q in -w /tmp/tcpdump_{0}.pcap -i {0} {1} 2>/tmp/tcpdump_{0}.out &'\
-                  .format(interface, filters)
+        command = 'tcpdump -n -e {0} -w /tmp/tcpdump_{1}.pcap -i {1} {2} 2>/tmp/tcpdump_{1}.out &'\
+                  .format(self.param_flow_dir, interface, filters)
         self.tester.send_expect(command, '# ')
 
     def tcpdump_stop_sniff(self):
@@ -373,6 +394,8 @@ class TestFlowClassifySoftnic(TestCase):
         self.tester_itf = self.tester.get_interface(localPort)
         self.copy_config_files_to_dut()
 
+        self.param_flow_dir = 
+ self.get_flow_direction_param_of_tcpdump()
+
     def set_up(self):
         """
         Run before each test case.
diff --git a/tests/TestSuite_ip_pipeline.py b/tests/TestSuite_ip_pipeline.py index 390c69d..f05b5cd 100644
--- a/tests/TestSuite_ip_pipeline.py
+++ b/tests/TestSuite_ip_pipeline.py
@@ -64,14 +64,35 @@ from scapy.sendrecv import sendp
 
 class TestIPPipeline(TestCase):
 
+    def get_flow_direction_param_of_tcpdump(self):
+        """
+        get flow dirction param depend on tcpdump version
+        """
+        param = ""
+        direct_param = r"(\s+)\[ (\S+) in\|out\|inout \]"
+        out = self.tester.send_expect('tcpdump -h', '# ')
+        for line in out.split('\n'):
+            m = re.match(direct_param, line)
+            if m:
+                opt = re.search("-Q", m.group(2));
+                if opt:
+                    param = "-Q" + " in"
+                else:
+                    opt = re.search("-P", m.group(2));
+                    if opt:
+                        param = "-P" + " in"
+        if len(param) == 0:
+            self.logger.info("tcpdump not support direction choice!!!")
+        return param
+
     def tcpdump_start_sniff(self, interface, filters=""):
         """
         Starts tcpdump in the background to sniff packets that received by interface.
         """
         command = 'rm -f /tmp/tcpdump_{0}.pcap'.format(interface)
         self.tester.send_expect(command, '#')
-        command = 'tcpdump -n -e -Q in -w /tmp/tcpdump_{0}.pcap -i {0} {1} 2>/tmp/tcpdump_{0}.out &'\
-                  .format(interface, filters)
+        command = 'tcpdump -n -e {0} -w /tmp/tcpdump_{1}.pcap -i {1} {2} 2>/tmp/tcpdump_{1}.out &'\
+                  .format(self.param_flow_dir, interface, filters)
         self.tester.send_expect(command, '# ')
 
     def tcpdump_stop_sniff(self):
@@ -202,6 +223,8 @@ class TestIPPipeline(TestCase):
         out = self.dut.build_dpdk_apps("./examples/ip_pipeline")
         self.verify("Error" not in out, "Compilation error")
 
+        self.param_flow_dir = 
+ self.get_flow_direction_param_of_tcpdump()
+
     def set_up(self):
         """
         Run before each test case.
--
2.7.4



More information about the dts mailing list