VIRL test: Replace IP probe for VXLAN test
[csit.git] / resources / libraries / python / InterfaceUtil.py
index f5f1ce3..2980afa 100644 (file)
@@ -212,6 +212,31 @@ class InterfaceUtil(object):
             return dict()
         return data
 
+    @staticmethod
+    def vpp_get_interface_mac(node, interface=None):
+        """Get MAC address for the given interface from actual interface dump.
+
+        :param node: VPP node to get interface data from.
+        :param interface: Numeric index or name string of a specific interface.
+        :type node: dict
+        :type interface: int or str
+        :return: MAC address.
+        :rtype: str
+        """
+
+        if_data = InterfaceUtil.vpp_get_interface_data(node, interface)
+        if if_data['sup_sw_if_index'] != if_data['sw_if_index']:
+            if_data = InterfaceUtil.vpp_get_interface_data(
+                node, if_data['sup_sw_if_index'])
+        mac_data = [str(hex(item))[2:] for item in if_data['l2_address'][:6]]
+        mac_data_nice = []
+        for item in mac_data:
+            if len(item) == 1:
+                item = '0' + item
+            mac_data_nice.append(item)
+        mac = ":".join(mac_data_nice)
+        return mac
+
     @staticmethod
     def vpp_get_interface_ip_addresses(node, interface, ip_version):
         """Get list of IP addresses from an interface on a VPP node.
@@ -440,9 +465,23 @@ class InterfaceUtil(object):
             if_pci = Topology.get_interface_pci_addr(node, if_key)
             ssh.connect(node)
             cmd = "cat /sys/bus/pci/devices/{}/numa_node".format(if_pci)
-            (ret, out, _) = ssh.exec_command(cmd)
-            if ret == 0:
-                Topology.set_interface_numa_node(node, if_key, int(out))
+            for _ in range(3):
+                (ret, out, _) = ssh.exec_command(cmd)
+                if ret == 0:
+                    try:
+                        numa_node = int(out)
+                        if numa_node < 0:
+                            raise ValueError
+                    except ValueError:
+                        logger.trace('Reading numa location failed for: {0}'\
+                            .format(if_pci))
+                    else:
+                        Topology.set_interface_numa_node(node, if_key,
+                                                         numa_node)
+                        break
+            else:
+                raise RuntimeError('Update numa node failed for: {0}'\
+                    .format(if_pci))
 
     @staticmethod
     def update_all_interface_data_on_all_nodes(nodes, skip_tg=False,