aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--resources/libraries/python/DUTSetup.py31
-rw-r--r--resources/libraries/python/InterfaceUtil.py47
2 files changed, 27 insertions, 51 deletions
diff --git a/resources/libraries/python/DUTSetup.py b/resources/libraries/python/DUTSetup.py
index d08704bba1..5e07ee0e7a 100644
--- a/resources/libraries/python/DUTSetup.py
+++ b/resources/libraries/python/DUTSetup.py
@@ -385,24 +385,31 @@ class DUTSetup(object):
def get_pci_dev_driver(node, pci_addr):
"""Get current PCI device driver on node.
+ .. note::
+ # lspci -vmmks 0000:00:05.0
+ Slot: 00:05.0
+ Class: Ethernet controller
+ Vendor: Red Hat, Inc
+ Device: Virtio network device
+ SVendor: Red Hat, Inc
+ SDevice: Device 0001
+ PhySlot: 5
+ Driver: virtio-pci
+
:param node: DUT node.
:param pci_addr: PCI device address.
:type node: dict
:type pci_addr: str
:returns: Driver or None
:raises RuntimeError: If PCI rescan or lspci command execution failed.
+ :raises RuntimeError: If it is not possible to get the interface driver
+ information from the node.
"""
ssh = SSH()
ssh.connect(node)
for i in range(3):
- logger.trace('Try {0}: Get interface driver'.format(i))
- cmd = 'sh -c "echo 1 > /sys/bus/pci/rescan"'
- ret_code, _, _ = ssh.exec_command_sudo(cmd)
- if int(ret_code) != 0:
- raise RuntimeError("'{0}' failed on '{1}'"
- .format(cmd, node['host']))
-
+ logger.trace('Try number {0}: Get PCI device driver'.format(i))
cmd = 'lspci -vmmks {0}'.format(pci_addr)
ret_code, stdout, _ = ssh.exec_command(cmd)
if int(ret_code) != 0:
@@ -421,6 +428,16 @@ class DUTSetup(object):
return None
if name == 'Driver:':
return value
+
+ if i < 2:
+ logger.trace('Driver for PCI device {} not found, executing '
+ 'pci rescan and retrying'.format(pci_addr))
+ cmd = 'sh -c "echo 1 > /sys/bus/pci/rescan"'
+ ret_code, _, _ = ssh.exec_command_sudo(cmd)
+ if int(ret_code) != 0:
+ raise RuntimeError("'{0}' failed on '{1}'"
+ .format(cmd, node['host']))
+
return None
@staticmethod
diff --git a/resources/libraries/python/InterfaceUtil.py b/resources/libraries/python/InterfaceUtil.py
index 25540dc0db..5e3c4c4f99 100644
--- a/resources/libraries/python/InterfaceUtil.py
+++ b/resources/libraries/python/InterfaceUtil.py
@@ -19,6 +19,7 @@ from robot.api import logger
from resources.libraries.python.ssh import SSH
from resources.libraries.python.IPUtil import convert_ipv4_netmask_prefix
+from resources.libraries.python.DUTSetup import DUTSetup
from resources.libraries.python.ssh import exec_cmd_no_error
from resources.libraries.python.topology import NodeType, Topology
from resources.libraries.python.VatExecutor import VatExecutor, VatTerminal
@@ -353,51 +354,9 @@ class InterfaceUtil(object):
:type pci_addr: str
:returns: Interface driver or None if not found.
:rtype: str
- :raises RuntimeError: If it is not possible to get the interface driver
- information from the node.
-
- .. note::
- # lspci -vmmks 0000:00:05.0
- Slot: 00:05.0
- Class: Ethernet controller
- Vendor: Red Hat, Inc
- Device: Virtio network device
- SVendor: Red Hat, Inc
- SDevice: Device 0001
- PhySlot: 5
- Driver: virtio-pci
+ :raises RuntimeError: If PCI rescan or lspci command execution failed.
"""
- ssh = SSH()
- ssh.connect(node)
-
- for i in range(3):
- logger.trace('Try {}: Get interface driver'.format(i))
- cmd = 'sh -c "echo 1 > /sys/bus/pci/rescan"'
- (ret_code, _, _) = ssh.exec_command_sudo(cmd)
- if int(ret_code) != 0:
- raise RuntimeError("'{0}' failed on '{1}'"
- .format(cmd, node['host']))
-
- cmd = 'lspci -vmmks {0}'.format(pci_addr)
- (ret_code, stdout, _) = ssh.exec_command(cmd)
- if int(ret_code) != 0:
- raise RuntimeError("'{0}' failed on '{1}'"
- .format(cmd, node['host']))
-
- for line in stdout.splitlines():
- if len(line) == 0:
- continue
- try:
- (name, value) = line.split("\t", 1)
- except ValueError:
- if name != "Driver:":
- pass
- else:
- return None
- if name == 'Driver:':
- return value if value else None
- raise RuntimeError('Get interface driver for: {0}'
- .format(pci_addr))
+ return DUTSetup.get_pci_dev_driver(node, pci_addr)
@staticmethod
def tg_set_interfaces_udev_rules(node):