From: "Liu, Yong" <yong.liu@intel.com>
To: gowrishankar <gowrishankar.m@linux.vnet.ibm.com>
Cc: dts <dts@dpdk.org>
Subject: Re: [dts] [PATCH 4/9] framework: enable connect X3 support
Date: Fri, 4 Mar 2016 01:07:51 +0000 [thread overview]
Message-ID: <86228AFD5BCD8E4EBFD2B90117B5E81E1450172E@SHSMSX103.ccr.corp.intel.com> (raw)
In-Reply-To: <56D7EE85.5040407@linux.vnet.ibm.com>
Thanks, Gowrishankar. There's no more comments from me.
> -----Original Message-----
> From: gowrishankar [mailto:gowrishankar.m@linux.vnet.ibm.com]
> Sent: Thursday, March 03, 2016 3:58 PM
> To: Liu, Yong
> Cc: dts
> Subject: Re: [dts] [PATCH 4/9] framework: enable connect X3 support
>
> On Tuesday 01 March 2016 06:47 PM, Liu, Yong wrote:
> > 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.
>
> Sure, I will add this check.
>
> >> 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.
>
> I got it. I would rather call it "interface 2" to avoid confusion.
>
> get_interface2_name(), get_intf2_mac_addr() and self.intf2_name are more
> correct I hope.
>
> Thank you for the review. If there are no other changes, I can send
> version 2 of patches with above correction.
>
> Regards,
> Gowrishankar
>
> >
> >> 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
> >
> >
next prev parent reply other threads:[~2016-03-04 1:08 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
2016-03-03 7:57 ` gowrishankar
2016-03-04 1:07 ` Liu, Yong [this message]
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=86228AFD5BCD8E4EBFD2B90117B5E81E1450172E@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).