[dts] [PATCH v2 01/17] framwork/packet: sniff_packet specify running target support

Phil Yang phil.yang at arm.com
Fri Mar 30 12:40:53 CEST 2018


If tester in crb file was not the machine which running dts,
the sniff_packet process will not running on tester.

Create a ssh connection to the tester and run tcpdump to make sure
sniff_packet process running on the machine we expected.

Signed-off-by: Phil Yang <phil.yang at arm.com>
---
 framework/packet.py | 34 ++++++++++++++++++++++++++++------
 framework/tester.py | 34 ++++++++++++++++++++++++++++++++++
 2 files changed, 62 insertions(+), 6 deletions(-)

diff --git a/framework/packet.py b/framework/packet.py
index 976b82b..484e511 100755
--- a/framework/packet.py
+++ b/framework/packet.py
@@ -812,15 +812,30 @@ def get_filter_cmd(filters=[]):
         return ""
 
 
-def sniff_packets(intf, count=0, timeout=5, filters=[]):
+def sniff_packets(intf, count=0, timeout=5, filters=[], target=[]):
     """
     sniff all packets for certain port in certain seconds
     """
     param = ""
     direct_param = r"(\s+)\[ (\S+) in\|out\|inout \]"
-    tcpdump_help = subprocess.check_output("tcpdump -h; echo 0",
-                                           stderr=subprocess.STDOUT,
-                                           shell=True)
+
+    # target[] contain the remote machine info for ssh connection
+    # target[0]: username
+    # target[1]: ip address
+    # target[2]: pass word
+    if target:
+        tcpdump_help_pipe = subprocess.Popen(["ssh",
+                            "%s@%s" % (target[0], target[1]),
+                            "tcpdump -h"],
+                            stderr=subprocess.PIPE,
+                            stdout=subprocess.PIPE,
+                            shell=False)
+        tcpdump_help = "".join(tuple(tcpdump_help_pipe.communicate()))
+        tcpdump_help_pipe.wait()
+    else:
+        tcpdump_help = subprocess.check_output("tcpdump -h; echo 0",
+                                    stderr=subprocess.STDOUT, shell=True)
+
     for line in tcpdump_help.split('\n'):
         m = re.match(direct_param, line)
         if m:
@@ -850,9 +865,16 @@ def sniff_packets(intf, count=0, timeout=5, filters=[]):
     else:
         cmd = sniff_cmd % options
 
-    args = shlex.split(cmd)
+    if target:
+        pipe = subprocess.Popen(["ssh",
+                "%s@%s" % (target[0], target[1]),
+                cmd],
+                stdin=subprocess.PIPE,
+                shell=False)
+    else:
+        args = shlex.split(cmd)
+        pipe = subprocess.Popen(args)
 
-    pipe = subprocess.Popen(args)
     index = str(time.time())
     SNIFF_PIDS[index] = (pipe, intf, timeout)
     time.sleep(1)
diff --git a/framework/tester.py b/framework/tester.py
index a775f68..49749de 100755
--- a/framework/tester.py
+++ b/framework/tester.py
@@ -704,6 +704,40 @@ class Tester(Crb):
             self.proc.kill()
             self.proc = None
 
+    def tcpdump_sniff_packets(self, intf, count=0, timeout=5, filters=[]):
+        """
+        Wrapper for packet module sniff_packets
+        """
+        # load functions in packet module
+        module = __import__("packet")
+        sniff_f = getattr(module, "sniff_packets")
+
+        target=[]
+        target.append(self.get_username())
+        target.append(self.get_ip_address())
+        target.append(self.get_password())
+        return sniff_f(intf, count, timeout, filters, target)
+
+    def load_tcpdump_sniff_pcap(self, index=''):
+        """
+        Wrapper for packet module load_sniff_pcap
+        """
+        # load functions in packet module
+        module = __import__("packet")
+        load_pcap_f = getattr(module, "load_sniff_pcap")
+
+        return load_pcap_f(index)
+
+    def load_tcpdump_sniff_packets(self, index=''):
+        """
+        Wrapper for packet module load_sniff_packets
+        """
+        # load functions in packet module
+        module = __import__("packet")
+        load_f = getattr(module, "load_sniff_packets")
+
+        return load_f(index)
+
     def kill_all(self, killall=False):
         """
         Kill all scapy process or DPDK application on tester.
-- 
2.7.4



More information about the dts mailing list