:type node: dict
:returns: PID
:rtype: int
- :raises RuntimeError if it is not possible to get the PID.
+ :raises RuntimeError: If it is not possible to get the PID.
"""
ssh = SSH()
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:
return None
if name == 'Driver:':
return value
- else:
- return None
+
+ 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
def kernel_module_verify(node, module, force_load=False):
- """Verify if kernel module is loaded on all DUTs. If parameter force
+ """Verify if kernel module is loaded on node. If parameter force
load is set to True, then try to load the modules.
- :param node: DUT node.
+ :param node: Node.
:param module: Module to verify.
:param force_load: If True then try to load module.
:type node: dict
:type module: str
:type force_load: bool
- :returns: nothing
:raises RuntimeError: If module is not loaded or failed to load.
"""
-
ssh = SSH()
ssh.connect(node)
raise RuntimeError('Kernel module {0} is not loaded on host '
'{1}'.format(module, node['host']))
+ @staticmethod
+ def kernel_module_verify_on_all_duts(nodes, module, force_load=False):
+ """Verify if kernel module is loaded on all DUTs. If parameter force
+ load is set to True, then try to load the modules.
+
+ :param node: DUT nodes.
+ :param module: Module to verify.
+ :param force_load: If True then try to load module.
+ :type node: dict
+ :type module: str
+ :type force_load: bool
+ """
+ for node in nodes.values():
+ if node['type'] == NodeType.DUT:
+ DUTSetup.kernel_module_verify(node, module, force_load)
+
+ @staticmethod
+ def verify_uio_driver_on_all_duts(nodes):
+ """Verify if uio driver kernel module is loaded on all DUTs. If module
+ is not present it will try to load it.
+
+ :param node: DUT nodes.
+ :type node: dict
+ """
+ for node in nodes.values():
+ if node['type'] == NodeType.DUT:
+ uio_driver = Topology.get_uio_driver(node)
+ DUTSetup.kernel_module_verify(node, uio_driver, force_load=True)
+
@staticmethod
def kernel_module_load(node, module):
"""Load kernel module on node.
:type vpp_pkg_dir: str
:type vpp_rpm_pkgs: list
:type vpp_deb_pkgs: list
- :raises: RuntimeError if failed to remove or install VPP
+ :raises RuntimeError: If failed to remove or install VPP.
"""
logger.debug("Installing VPP")
:param node: DUT node.
:type node: dict
- :raises: RuntimeError if failed to restart VPP, get VPP version or
- get VPP interfaces
+ :raises RuntimeError: If failed to restart VPP, get VPP version
+ or get VPP interfaces.
"""
logger.debug("Verify VPP on node {0}".format(node['host']))