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 4DEB12C01 for ; Mon, 2 Apr 2018 05:46:38 +0200 (CEST) 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 758761596; Sun, 1 Apr 2018 20:46:37 -0700 (PDT) Received: from phil-VirtualBox.shanghai.arm.com (unknown [10.169.109.153]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id A98223F487; Sun, 1 Apr 2018 20:46:36 -0700 (PDT) From: Phil Yang To: dts@dpdk.org Cc: nd@arm.com, yong.liu@intel.com, phil.yang@arm.com Date: Mon, 2 Apr 2018 11:46:10 +0800 Message-Id: <1522640786-26646-1-git-send-email-phil.yang@arm.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1522406469-9251-1-git-send-email-phil.yang@arm.com> References: <1522406469-9251-1-git-send-email-phil.yang@arm.com> Subject: [dts] [PATCH v3 01/17] framwork/packet: sniff_packet specify running target support 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: Mon, 02 Apr 2018 03:46:38 -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 | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 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..10761a8 100755 --- a/framework/tester.py +++ b/framework/tester.py @@ -70,6 +70,7 @@ class Tester(Crb): self.bgCmds = [] self.bgItf = '' self.re_run_time = 0 + self.sniff_intf = '' def init_ext_gen(self): """ @@ -704,6 +705,43 @@ 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()) + self.sniff_intf = intf + 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") + self.session.copy_file_from("/tmp/sniff_%s.pcap" % self.sniff_intf, "/tmp/") + + 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") + self.session.copy_file_from("/tmp/sniff_%s.pcap" % self.sniff_intf, "/tmp/") + + return load_f(index) + def kill_all(self, killall=False): """ Kill all scapy process or DPDK application on tester. -- 2.7.4