[dts] [PATCH v3 01/17] framwork/packet: sniff_packet specify running target support
Liu, Yong
yong.liu at intel.com
Wed Apr 4 05:28:16 CEST 2018
Phil,
Some comments are inline.
Thanks,
Marvin
> -----Original Message-----
> From: Phil Yang [mailto:phil.yang at arm.com]
> Sent: Monday, April 02, 2018 11:46 AM
> To: dts at dpdk.org
> Cc: nd at arm.com; Liu, Yong <yong.liu at intel.com>; phil.yang at arm.com
> Subject: [PATCH v3 01/17] framwork/packet: sniff_packet specify running
> target support
>
> 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 | 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
Indent not align here, and I think there's no need to save sniffer interface in this module.
> + 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/")
> +
Filename will be return after running load_pcap_f function, please use that name.
It can be multiple sniffer functions work in the same time.
> + 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
More information about the dts
mailing list