[dts] [PATCH 06/26] framework: checking link with IPv4 ping

Angela Czubak aczubak at caviumnetworks.com
Thu Apr 6 19:51:12 CEST 2017


Some kernels may not use IPv6 and hence there is no point using ping6.
If lack of link by IPv6 is detected then IPv4 pings are sent
(previously ports where skipped if they had no IPv6 connectivity).
DPDK binding script uses "--force" argument, since interfaces are
detected as active.

Signed-off-by: Angela Czubak <aczubak at caviumnetworks.com>
---
 framework/dut.py          | 30 ++++++++++++++++++++----------
 framework/project_dpdk.py |  2 +-
 framework/tester.py       | 11 +++++++++++
 nics/net_device.py        |  8 ++++----
 4 files changed, 36 insertions(+), 15 deletions(-)

diff --git a/framework/dut.py b/framework/dut.py
index b5a21ce..cd899c8 100644
--- a/framework/dut.py
+++ b/framework/dut.py
@@ -382,7 +382,7 @@ class Dut(Crb):
             return
         op = self.send_command("ls")
         if "usertools" in op:
-            self.send_expect('usertools/dpdk-devbind.py %s' % binding_list, '# ')
+            self.send_expect('usertools/dpdk-devbind.py --force %s' % binding_list, '# ')
         else:
             op = self.send_command("ls tools")
             if "dpdk_nic_bind.py" in op:
@@ -602,7 +602,12 @@ class Dut(Crb):
             if ":" not in ipv6:
                 ipv6 = "Not connected"
 
+            out = self.send_expect("ip -family inet address show dev %s | awk '/inet/ { print $2 }'"
+                    % intf, "# ")
+            ipv4 = out.split('/')[0]
+
             port_info['ipv6'] = ipv6
+            port_info['ipv4'] = ipv4
 
     def rescan_ports_uncached_freebsd(self):
         unknow_interface = RED('Skipped: unknow_interface')
@@ -922,15 +927,20 @@ class Dut(Crb):
                 # skip ping those not connected port
                 ipv6 = self.get_ipv6_address(dutPort)
                 if ipv6 == "Not connected":
-                    continue
-
-                if getattr(self, 'send_ping6', None):
-                    out = self.send_ping6(
-                        dutPort, self.tester.ports_info[remotePort]['ipv6'],
-                        self.get_mac_address(dutPort))
-                else:
-                    out = self.tester.send_ping6(
-                        remotePort, ipv6, self.get_mac_address(dutPort))
+                    if self.tester.ports_info[remotePort].has_key('ipv4'):
+			out = self.tester.send_ping(
+				dutPort, self.tester.ports_info[remotePort]['ipv4'],
+				self.get_mac_address(dutPort))
+		    else:
+                    	continue
+		else:
+                    if getattr(self, 'send_ping6', None):
+                    	out = self.send_ping6(
+                        	dutPort, self.tester.ports_info[remotePort]['ipv6'],
+                        	self.get_mac_address(dutPort))
+                    else:
+                    	out = self.tester.send_ping6(
+				remotePort, ipv6, self.get_mac_address(dutPort))
 
                 if ('64 bytes from' in out):
                     self.logger.info("PORT MAP: [dut %d: tester %d]" % (dutPort, remotePort))
diff --git a/framework/project_dpdk.py b/framework/project_dpdk.py
index f3d3701..2a50e87 100644
--- a/framework/project_dpdk.py
+++ b/framework/project_dpdk.py
@@ -325,7 +325,7 @@ class DPDKdut(Dut):
 
         op = self.send_command("ls")
         if "usertools" in op:
-            self.send_expect('usertools/dpdk-devbind.py %s' % binding_list, '# ')
+            self.send_expect('usertools/dpdk-devbind.py --force %s' % binding_list, '# ')
         else:
             op = self.send_command("ls tools")
             if "dpdk_nic_bind.py" in op:
diff --git a/framework/tester.py b/framework/tester.py
index d793e91..5cf5e00 100644
--- a/framework/tester.py
+++ b/framework/tester.py
@@ -336,6 +336,7 @@ class Tester(Crb):
             macaddr = port.get_mac_addr()
 
             ipv6 = port.get_ipv6_addr()
+            ipv4 = port.get_ipv4_addr()
 
             # store the port info to port mapping
             self.ports_info.append({'port': port,
@@ -343,6 +344,7 @@ class Tester(Crb):
                                     'type': pci_id,
                                     'intf': intf,
                                     'mac': macaddr,
+				    'ipv4': ipv4,
                                     'ipv6': ipv6})
 
             # return if port is not connect x3
@@ -364,6 +366,15 @@ class Tester(Crb):
                                     'mac': macaddr,
                                     'ipv6': ipv6})
 
+    def send_ping(self, localPort, ipv4, mac):
+        """
+        Send ping6 packet from local port with destination ipv4 address.
+        """
+        if self.ports_info[localPort]['type'] == 'ixia':
+            return "Not implemented yet"
+        else:
+            return self.send_expect("ping -w 5 -c 5 -A -I %s %s" % (self.ports_info[localPort]['intf'], ipv4), "# ", 10)
+
     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 0af4ad5..4861145 100644
--- a/nics/net_device.py
+++ b/nics/net_device.py
@@ -343,21 +343,21 @@ class NetDevice(object):
         """
         get_ipv4_addr = getattr(
             self, 'get_ipv4_addr_%s' % self.__get_os_type())
-        return get_ipv4_addr(self.intf_name, self.currenct_driver)
+        return get_ipv4_addr(self.intf_name, self.current_driver)
 
     def get_ipv4_addr_linux(self, intf, driver):
         """
         Get ipv4 address of specified pci device on linux.
         """
         try:
-            get_ipv4_addr_linux = getattr(self, 'get_ipv4_linux_%s' % driver)
+            get_ipv4_addr_linux = getattr(self, 'get_ipv4_addr_linux_%s' % driver)
         except Exception as e:
             generic_driver = 'generic'
             get_ipv4_addr_linux = getattr(
-                self, 'get_ipv4_linux_%s' %
+                self, 'get_ipv4_addr_linux_%s' %
                 generic_driver)
 
-        return get_ipv4_addr_linux(intf, domain_id, bus_id, devfun_id, driver)
+        return get_ipv4_addr_linux(intf)
 
     def get_ipv4_addr_linux_generic(self, intf):
         """
-- 
2.7.4



More information about the dts mailing list