test suite reviews and discussions
 help / color / mirror / Atom feed
From: "Liu, Yong" <yong.liu@intel.com>
To: Gowrishankar <gowrishankar.m@linux.vnet.ibm.com>, dts <dts@dpdk.org>
Subject: Re: [dts] [PATCH 4/9] framework: enable connect X3 support
Date: Tue, 1 Mar 2016 13:17:10 +0000	[thread overview]
Message-ID: <86228AFD5BCD8E4EBFD2B90117B5E81E144FF148@SHSMSX103.ccr.corp.intel.com> (raw)
In-Reply-To: <1456481834-10027-5-git-send-email-gowrishankar.m@linux.vnet.ibm.com>

Hi Gowrishankar,

> -----Original Message-----
> From: dts [mailto:dts-bounces@dpdk.org] On Behalf Of Gowrishankar
> Sent: Friday, February 26, 2016 6:17 PM
> To: dts
> Subject: [dts] [PATCH 4/9] framework: enable connect X3 support
> 
> Connect X3 dual port adapter shares single pci device ID. This limits dts
> frame-
> work to use both the ports for the tests. With this patch, a new
> attribute also
> to refer second interface in such single pci port lookup is introduced.
> Added
> supporting APIs to derive this second interface and its MAC addresses
> whereever
> needed.
> 
> Signed-off-by: Gowrishankar <gowrishankar.m@linux.vnet.ibm.com>
> ---
>  framework/dut.py      |   25 +++++++++++++++++--------
>  framework/settings.py |    2 ++
>  framework/tester.py   |   26 ++++++++++++++++++++++++++
>  nics/net_device.py    |   27 +++++++++++++++++++++++++++
>  4 files changed, 72 insertions(+), 8 deletions(-)
> 
> diff --git a/framework/dut.py b/framework/dut.py
> index ff40fac..41605a3 100644
> --- a/framework/dut.py
> +++ b/framework/dut.py
> @@ -569,15 +569,12 @@ class Dut(Crb):
> 
>          for port_info in self.ports_info:
>              port = port_info['port']
> -            intf = port.get_interface_name()
> -            if "No such file" in intf:
> -                self.logger.info("DUT: [%s] %s" % (pci_bus,
> unknow_interface))
> -                continue
> +            intf = port_info['intf']

Here is to strip NIC kernel interface after bind it to kernel driver.
When in scan_port function, nic information may unavailable for kernel driver not bound.
So macaddress and interface should strip in rescan_port function.

>              out = self.send_expect("ip link show %s" % intf, "# ")
>              if "DOWN" in out:
>                  self.send_expect("ip link set %s up" % intf, "# ")
>                  time.sleep(5)
> -            macaddr = port.get_mac_addr()
> +            macaddr = port_info['mac']
>              out = self.send_expect("ip -family inet6 address show dev %s
> | awk '/inet6/ { print $2 }'"
>                                     % intf, "# ")
>              ipv6 = out.split('/')[0]
> @@ -585,8 +582,6 @@ class Dut(Crb):
>              if ":" not in ipv6:
>                  ipv6 = "Not connected"
> 
> -            port_info['mac'] = macaddr
> -            port_info['intf'] = intf
>              port_info['ipv6'] = ipv6
> 
>      def rescan_ports_uncached_freebsd(self):
> @@ -689,10 +684,24 @@ class Dut(Crb):
>              devfun_id = addr_array[2]
> 
>              port = GetNicObj(self, domain_id, bus_id, devfun_id)
> +            intf = port.get_interface_name()
> +            macaddr = port.get_mac_addr()
> +            numa = port.socket
> +            # store the port info to port mapping
> +            self.ports_info.append(
> +                {'port': port, 'pci': pci_bus, 'type': pci_id, 'numa':
> numa,
> +                 'intf': intf, 'mac': macaddr})
> +
> +            if not port.get_interface_peer():
> +                continue
> +
> +            intf = port.get_interface_peer()
> +            macaddr = port.get_peer_mac_addr()
>              numa = port.socket
>              # store the port info to port mapping
>              self.ports_info.append(
> -                {'port': port, 'pci': pci_bus, 'type': pci_id, 'numa':
> numa})
> +                {'port': port, 'pci': pci_bus, 'type': pci_id, 'numa':
> numa,
> +                 'intf': intf, 'mac': macaddr})
> 
>      def scan_ports_uncached_freebsd(self):
>          """
> diff --git a/framework/settings.py b/framework/settings.py
> index 068afce..f3e3b9a 100644
> --- a/framework/settings.py
> +++ b/framework/settings.py
> @@ -78,6 +78,7 @@ NICS = {
>      'fortpark':'8086:374c',
>      'fvl10g_vf':'8086:154c',
>      'atwood': '8086:15d5',
> +    'ConnectX3':'15b3:1003',
>      'ConnectX4':'15b3:1013',
>      'boulderrapid': '8086:15d0',
>  }
> @@ -114,6 +115,7 @@ DRIVERS = {
>      'fortpark':'i40e',
>      'fvl10g_vf':'i40evf',
>      'atwood': 'fm10k',
> +    'ConnectX3':'mlx4_core',
>      'ConnectX4':'mlx5_core',
>      'boulderrapid': 'fm10k',
>  }
> diff --git a/framework/tester.py b/framework/tester.py
> index 1d69355..87ee298 100644
> --- a/framework/tester.py
> +++ b/framework/tester.py
> @@ -207,6 +207,10 @@ class Tester(Crb):
>                  itf = port.get_interface_name()
>                  self.enable_ipv6(itf)
>                  self.send_expect("ifconfig %s up" % itf, "# ")
> +                if port.get_interface_peer():
> +                    itf = port.get_interface_peer()
> +                    self.enable_ipv6(itf)
> +                    self.send_expect("ifconfig %s up" % itf, "# ")
> 
>          except Exception as e:
>              self.logger.error("   !!! Restore ITF: " + e.message)
> @@ -220,6 +224,9 @@ class Tester(Crb):
>                  port = GetNicObj(self, addr_array[0], addr_array[1],
> addr_array[2])
>                  itf = port.get_interface_name()
>                  self.enable_promisc(itf)
> +                if port.get_interface_peer():
> +                    itf = port.get_interface_peer()
> +                    self.enable_promisc(itf)
>          except Exception as e:
>              pass
> 
> @@ -314,6 +321,25 @@ class Tester(Crb):
>                                      'mac': macaddr,
>                                      'ipv6': ipv6})
> 
> +            # return if port is not connect x3
> +            if not port.get_interface_peer():
> +                continue
> +
> +            intf = port.get_interface_peer()
> +
> +            self.logger.info("Tester: [%s %s] %s" % (pci_bus, pci_id,
> intf))
> +            macaddr = port.get_peer_mac_addr()
> +
> +            ipv6 = port.get_ipv6_addr()
> +
> +            # store the port info to port mapping
> +            self.ports_info.append({'port': port,
> +                                    'pci': pci_bus,
> +                                    'type': pci_id,
> +                                    'intf': intf,
> +                                    'mac': macaddr,
> +                                    'ipv6': ipv6})
> +
>      def send_ping6(self, localPort, ipv6, mac):
>          """
>          Send ping6 packet from local port with destination ipv6 address.
> diff --git a/nics/net_device.py b/nics/net_device.py
> index a9127cb..b0fee34 100644
> --- a/nics/net_device.py
> +++ b/nics/net_device.py
> @@ -150,9 +150,21 @@ class NetDevice(object):
>              self.intf_name = 'N/A'
>          else:
>              self.intf_name = out
> +            self.intf_peer = None
> +
> +        # not a complete fix for CX3.
> +        if len(out.split()) > 1 and self.default_driver == 'mlx4_core':
> +            self.intf_name = out.split()[0]
> +            self.intf_peer = out.split()[1]
> 
>          return self.intf_name
> 
> +    def get_interface_peer(self):
> +        """
> +        Get interface name of second port of this pci device.
> +        """
> +        return self.intf_peer
> +

In DTS, word "peer" has been designated for tester port which connected to dut port.
Suggest change another word for the second port.

>      def get_interface_name_linux(self, domain_id, bus_id, devfun_id,
> driver):
>          """
>          Get interface name of specified pci device on linux.
> @@ -242,6 +254,18 @@ class NetDevice(object):
>          else:
>              return out
> 
> +    @nic_has_driver
> +    def get_peer_mac_addr(self):
> +        """
> +        Get mac address of peer of specified pci device.
> +        """
> +        get_mac_addr = getattr(self, 'get_mac_addr_%s' %
> self.__get_os_type())
> +        out = get_mac_addr(self.get_interface_peer(), self.domain_id,
> self.bus_id, self.devfun_id, self.current_driver)
> +        if "No such file or directory" in out:
> +            return 'N/A'
> +        else:
> +            return out
> +
>      def get_mac_addr_linux(self, intf, domain_id, bus_id, devfun_id,
> driver):
>          """
>          Get mac address of specified pci device on linux.
> @@ -733,6 +757,9 @@ class NetDevice(object):
>          if driver == self.default_driver:
>              itf = self.get_interface_name()
>              self.__send_expect("ifconfig %s up" % itf, "# ")
> +            if self.get_interface_peer():
> +                itf = self.get_interface_peer()
> +                self.__send_expect("ifconfig %s up" % itf, "# ")
> 
>      def bind_driver_linux_pci_stub(self, domain_id, bus_id, devfun_id):
>          """
> --
> 1.7.10.4

  reply	other threads:[~2016-03-01 13:17 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-26 10:17 [dts] framework: hugepages, cpuinfo, connect x3 support and bug fixes Gowrishankar
2016-02-26 10:17 ` [dts] [PATCH 1/9] framework: check hugepage size and add pages Gowrishankar
2016-02-26 10:17 ` [dts] [PATCH 2/9] framework: platform independent cpu info parsing Gowrishankar
2016-02-29  2:13   ` Xu, HuilongX
2016-03-01  3:14     ` gowrishankar
2016-03-01 12:42       ` Liu, Yong
2016-03-09  5:50         ` Xu, HuilongX
2016-02-26 10:17 ` [dts] [PATCH 3/9] framework: include domain id in pci tuple Gowrishankar
2016-02-26 10:17 ` [dts] [PATCH 4/9] framework: enable connect X3 support Gowrishankar
2016-03-01 13:17   ` Liu, Yong [this message]
2016-03-03  7:57     ` gowrishankar
2016-03-04  1:07       ` Liu, Yong
2016-02-26 10:17 ` [dts] [PATCH 5/9] framework: fix numa number lookup for a dev Gowrishankar
2016-02-26 10:17 ` [dts] [PATCH 6/9] framework: fix get_core_list to return all lcores Gowrishankar
2016-02-26 10:17 ` [dts] [PATCH 7/9] tests: fix multiprocess test to set coremask through library Gowrishankar
2016-02-26 10:17 ` [dts] [PATCH 8/9] tests: fix coremask test to check expected EAL output Gowrishankar
2016-02-26 10:17 ` [dts] [PATCH 9/9] tests: fix blacklist test to discard extra pci domain id in verification string Gowrishankar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=86228AFD5BCD8E4EBFD2B90117B5E81E144FF148@SHSMSX103.ccr.corp.intel.com \
    --to=yong.liu@intel.com \
    --cc=dts@dpdk.org \
    --cc=gowrishankar.m@linux.vnet.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).