[dts] [PATCH 01/17] framwork/packet: Add sniff_packet specify running

Liu, Yong yong.liu at intel.com
Wed Mar 28 04:41:17 CEST 2018


Hi Phil,
In previous design, DTS will be run on tester for simple design and stability. 
In our site, I can't see the benefit of change the design. Could you please explain why you change it?
Anyway we can change the design, but I think it will need some kind of diagnosis about the impact. 
There may be some other staff depend on the assumption that DTS is on the tester machine.

Just for this patch. In load function, DTS machine should transmit tester's pcap file first and then analyze packets.

Regards,
Marvin 

> -----Original Message-----
> From: Phil Yang [mailto:phil.yang at arm.com]
> Sent: Friday, March 23, 2018 4:04 PM
> To: dts at dpdk.org
> Cc: nd at arm.com; phil.yang at arm.com; Liu, Yong <yong.liu at intel.com>;
> herbert.guan at arm.com
> Subject: [PATCH 01/17] framwork/packet: Add sniff_packet specify running
> 
> 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