From 4ba77f94ead34331b87a558c69a254a882ab335a Mon Sep 17 00:00:00 2001 From: Vaishnavi Bhat Date: Mon, 1 Apr 2024 23:43:50 +0530 Subject: [PATCH] EEH test for vnic interfaces Adding test to trigger EEH for vnic interfaces from vios. The test does the following: - change the active logport to the original logport - login to the vios and find the respective backing device - trigger EEH from vios - check for the failover on the OS side to conclude if the eeh was successful or not. Signed-off-by: Vaishnavi Bhat --- io/net/virt-net/network_virtualization.py | 67 ++++++++++++++++++ .../network_virtualization.py.data/README | 9 +++ .../eeh_tool_64 | Bin 0 -> 76497 bytes .../network_virtualization.yaml | 3 + 4 files changed, 79 insertions(+) create mode 100644 io/net/virt-net/network_virtualization.py.data/eeh_tool_64 diff --git a/io/net/virt-net/network_virtualization.py b/io/net/virt-net/network_virtualization.py index 418cd4b4d..aecedb342 100755 --- a/io/net/virt-net/network_virtualization.py +++ b/io/net/virt-net/network_virtualization.py @@ -35,6 +35,8 @@ from avocado.utils.network.hosts import LocalHost from avocado.utils.ssh import Session from avocado.utils import wait +from pexpect import pxssh +import re IS_POWER_NV = 'PowerNV' in open('/proc/cpuinfo', 'r').read() IS_KVM_GUEST = 'qemu' in open('/proc/cpuinfo', 'r').read() @@ -119,6 +121,9 @@ def setUp(self): self.mac_id = [mac.replace(':', '') for mac in self.mac_id] self.netmask = self.params.get('netmasks', default=None).split(' ') self.peer_ip = self.params.get('peer_ip', default=None).split(' ') + self.host_public_ip = self.params.get('host_public_ip', default=None) + self.host_user = self.params.get('user_name', default=None) + self.host_password = self.params.get('host_password', default=None) dmesg.clear_dmesg() self.session_hmc.cmd("uname -a") cmd = 'lssyscfg -m ' + self.server + \ @@ -594,6 +599,68 @@ def test_vnic_hmc_dlpar(self): count += 1 self.check_dmesg_error() + def test_vnic_eeh(self): + """ + Perform EEH on vnic interface from vios + """ + if self.backing_dev_count() == 1: + self.cancel("EEH cannot be tested as the interface has single backing device") + current_logport = self.get_active_device_logport(self.slot_num[0]) + if not self.original_logport == current_logport: + self.trigger_failover(self.original_logport) + else: + self.log.info("Unable to set the logport to original one") + time.sleep(5) + self.session = Session(self.vios_ip, user=self.vios_user, + password=self.vios_pwd) + self.session.cleanup_master() + if not wait.wait_for(self.session.connect, timeout=30): + self.fail("Failed connecting to VIOS") + cmd = "ioscli lsmap -all -vnic -cpid %s" % self.lpar_id + vnic_servers = self.session.cmd(cmd).stdout_text.splitlines() + device = self.find_device(self.mac_id[0]) + temp_idx = vnic_servers.index("Client device name:" + device) + vnic_backingdevice = vnic_servers[temp_idx - 3].split(":")[1] + vios = pxssh.pxssh() + try: + vios.login(self.vios_ip, self.vios_user, self.vios_pwd) + except Exception: + self.warn("Unable to login to vios") + time.sleep(2) + vios.sendline("oem_setup_env") + time.sleep(5) + eeh_tool_64 = self.params.get('eeh_tool', default='eeh_tool_64') + eeh_tool_64 = self.get_data(eeh_tool_64) + cmd = "scp %s@%s:%s ." % (self.host_user, self.host_public_ip, eeh_tool_64) + vios.sendline(cmd) + time.sleep(3) + vios.sendline(self.host_password) + time.sleep(5) + vios.sendline("kdb") + time.sleep(5) + vios.sendline("set scroll false") + time.sleep(5) + cmd = "mlxcent setacs %s" % vnic_backingdevice + vios.sendline(cmd) + time.sleep(2) + vios.sendline("mlxcent pollq 0") + vios.prompt() + mapstart = vios.before.decode("utf-8").split("\r\n ") + for i in mapstart: + if re.search("map_start", i): + map_start_value = i.split("=")[1] + vios.sendline("quit") + cmd = "./eeh_tool_64 %s 3 15 -w 64 -a %s -m 0xFFFFFFFFFFFFF000" % (vnic_backingdevice, map_start_value) + vios.sendline(cmd) + time.sleep(5) + active_logport = self.get_active_device_logport(self.slot_num[0]) + if current_logport == active_logport: + self.fail("EEH unsuccessful as there is no failover triggered on the OS") + device = self.find_device(self.mac_id[0]) + networkinterface = NetworkInterface(device, self.local) + if networkinterface.ping_check(self.peer_ip[0], count=5) is not None: + self.fail("Ping to peer failed. EEH has affected Network connectivity") + def backing_dev_count_w_slot_num(self, slot): """ Lists the count of backing devices diff --git a/io/net/virt-net/network_virtualization.py.data/README b/io/net/virt-net/network_virtualization.py.data/README index 5b0f82413..e7a2068d4 100644 --- a/io/net/virt-net/network_virtualization.py.data/README +++ b/io/net/virt-net/network_virtualization.py.data/README @@ -16,6 +16,9 @@ RHEL : Links : -> https://pypi.python.org/packages/source/p/pycrypto/pycrypto-2.6.1.tar.gz#md5=55a61a054aa66812daf5161a0d5d7eda +Install pexpect module +-> pip install pexpect + Explanation of the input parameters for single vnic: hmc_pwd ---> HMC password hmc_username ---> HMC user name @@ -38,6 +41,9 @@ peer_ip ---> Peer ip to which the added Network virtualized interface will ping count ---> The number of times the failover test has to be executed num_of_dlpar --> number of times ddlpar remove and add operation to be executed mac_id ---> MAC ID to be set for the vnic interface. This is needed for us to have control over interface name via interface file or udev rules, space separated if multiple +host_public_ip ---> Public IP of the host +host_password ---> Login password for the host machine +user_name ---> Host user name Explanation of the input parameters for multiple vnic: hmc_pwd ---> HMC password @@ -55,6 +61,9 @@ device_ip ---> space separated ip address netmasks ---> space separated netmask peer_ip ---> space separated peer ip mac_id ---> MAC ID to be set for the vnic interface. This is needed for us to have control over interface name via interface file or udev rules, space separated mac id +user_name ---> host user name +host_public_ip ---> public IP of the host, required to copy the eeh_tool to vios +host_password ---> Login password of the host, required to copy the eeh_tool to vios NOTE: all failover test will not execute when it will create multiple Network virtualized interface. and for now multiple Network virtualized interface with multiple backing device will not work. diff --git a/io/net/virt-net/network_virtualization.py.data/eeh_tool_64 b/io/net/virt-net/network_virtualization.py.data/eeh_tool_64 new file mode 100644 index 0000000000000000000000000000000000000000..3054788c06a8911ef3187b51af36bf1f0c6ca9df GIT binary patch literal 76497 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�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