diff options
author | treyad <treyad@viosoft.com> | 2018-11-20 01:40:07 -0800 |
---|---|---|
committer | treyad <treyad@viosoft.com> | 2019-03-29 09:24:16 -0700 |
commit | 4459d4475e5d9d0c60145072741513f0ea39c39c (patch) | |
tree | 217975319c7489b7d0afbfd5fb6488091d3f7393 /yardstick/network_services/vnf_generic/vnf/vpp_helpers.py | |
parent | 3ca72d0d45f89732a0d64681a5e7a3ce100de815 (diff) |
Support bind driver for QAT HW cards
Load QAT driver
Initialize QAT VFs
JIRA: YARDSTICK-1504
Change-Id: I1f3768d5436bfaccac5f6226ba19131c4662a08d
Signed-off-by: treyad <treyad@viosoft.com>
Diffstat (limited to 'yardstick/network_services/vnf_generic/vnf/vpp_helpers.py')
-rw-r--r-- | yardstick/network_services/vnf_generic/vnf/vpp_helpers.py | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/yardstick/network_services/vnf_generic/vnf/vpp_helpers.py b/yardstick/network_services/vnf_generic/vnf/vpp_helpers.py index 4e67b3c65..fe8e7b2ba 100644 --- a/yardstick/network_services/vnf_generic/vnf/vpp_helpers.py +++ b/yardstick/network_services/vnf_generic/vnf/vpp_helpers.py @@ -195,6 +195,7 @@ class VppSetupEnvHelper(DpdkVnfSetupEnvHelper): CFG_CONFIG = "/etc/vpp/startup.conf" CFG_SCRIPT = "" PIPELINE_COMMAND = "" + QAT_DRIVER = "qat_dh895xcc" VNF_TYPE = "IPSEC" VAT_BIN_NAME = 'vpp_api_test' @@ -246,6 +247,63 @@ class VppSetupEnvHelper(DpdkVnfSetupEnvHelper): except (KeyError, ValueError): return None + def crypto_device_init(self, pci_addr, numvfs): + # QAT device must be re-bound to kernel driver before initialization. + self.dpdk_bind_helper.load_dpdk_driver(self.QAT_DRIVER) + + # Stop VPP to prevent deadlock. + self.kill_vnf() + + current_driver = self.get_pci_dev_driver(pci_addr.replace(':', r'\:')) + if current_driver is not None: + self.pci_driver_unbind(pci_addr) + + # Bind to kernel driver. + self.dpdk_bind_helper.bind(pci_addr, self.QAT_DRIVER.replace('qat_', '')) + + # Initialize QAT VFs. + if numvfs > 0: + self.set_sriov_numvfs(pci_addr, numvfs) + + def get_sriov_numvfs(self, pf_pci_addr): + command = 'cat /sys/bus/pci/devices/{pci}/sriov_numvfs'. \ + format(pci=pf_pci_addr.replace(':', r'\:')) + _, stdout, _ = self.ssh_helper.execute(command) + try: + return int(stdout) + except ValueError: + LOG.debug('Reading sriov_numvfs info failed') + return 0 + + def set_sriov_numvfs(self, pf_pci_addr, numvfs=0): + command = "sh -c 'echo {num} | tee /sys/bus/pci/devices/{pci}/sriov_numvfs'". \ + format(num=numvfs, pci=pf_pci_addr.replace(':', r'\:')) + self.ssh_helper.execute(command) + + def pci_driver_unbind(self, pci_addr): + command = "sh -c 'echo {pci} | tee /sys/bus/pci/devices/{pcie}/driver/unbind'". \ + format(pci=pci_addr, pcie=pci_addr.replace(':', r'\:')) + self.ssh_helper.execute(command) + + def get_pci_dev_driver(self, pci_addr): + cmd = 'lspci -vmmks {0}'.format(pci_addr) + ret_code, stdout, _ = self.ssh_helper.execute(cmd) + if int(ret_code): + raise RuntimeError("'{0}' failed".format(cmd)) + for line in stdout.splitlines(): + if not line: + continue + name = None + value = None + try: + name, value = line.split("\t", 1) + except ValueError: + if name == "Driver:": + return None + if name == 'Driver:': + return value + return None + def vpp_create_ipsec_tunnels(self, if1_ip_addr, if2_ip_addr, if_name, n_tunnels, n_connections, crypto_alg, crypto_key, integ_alg, integ_key, addrs_ip, |