From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from foss.arm.com (foss.arm.com [217.140.101.70]) by dpdk.org (Postfix) with ESMTP id 258CA1B03C for ; Fri, 23 Mar 2018 09:04:32 +0100 (CET) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 42F651435; Fri, 23 Mar 2018 01:04:31 -0700 (PDT) Received: from phil-VirtualBox.shanghai.arm.com (unknown [10.169.108.169]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 4CD423F25D; Fri, 23 Mar 2018 01:04:30 -0700 (PDT) From: Phil Yang To: dts@dpdk.org Cc: nd@arm.com, phil.yang@arm.com, yong.liu@intel.com, herbert.guan@arm.com Date: Fri, 23 Mar 2018 16:03:50 +0800 Message-Id: <1521792246-4950-1-git-send-email-phil.yang@arm.com> X-Mailer: git-send-email 2.7.4 Subject: [dts] [PATCH 01/17] framwork/packet: Add sniff_packet specify running 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: Fri, 23 Mar 2018 08:04:32 -0000 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 --- 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