From 58d53561bad01ae7829fdeee0c67f5dae4a9dc34 Mon Sep 17 00:00:00 2001 From: Martin Klozik Date: Fri, 5 Jan 2018 13:24:09 +0000 Subject: vswitch: Improve add_phy_port error messages In case that vSwitch can't add required number of physical ports, then error message should be printed. Previous implementation was not consistent. Thus error handling has been united across all vswitches and message explicitly states the cause of the failure. NOTE: A better solution would be a refactoring of all vSwitch classes to follow VPP port handling and to move port related structures and physical port check into parent vswitch class. JIRA: VSPERF-555 Change-Id: Id09a61432ea93e261f563254829348ac61f5dc8a Signed-off-by: Martin Klozik Reviewed-by: Jose Lausuch Reviewed-by: Al Morton Reviewed-by: Christian Trautman Reviewed-by: Sridhar Rao Reviewed-by: Trevor Cooper --- vswitches/ovs_dpdk_vhost.py | 5 ++++- vswitches/ovs_vanilla.py | 6 ++---- vswitches/vpp_dpdk_vhost.py | 3 ++- 3 files changed, 8 insertions(+), 6 deletions(-) (limited to 'vswitches') diff --git a/vswitches/ovs_dpdk_vhost.py b/vswitches/ovs_dpdk_vhost.py index 11b32c88..6deb0c25 100644 --- a/vswitches/ovs_dpdk_vhost.py +++ b/vswitches/ovs_dpdk_vhost.py @@ -114,12 +114,15 @@ class OvsDpdkVhost(IVSwitchOvs): Creates a port of type dpdk. The new port is named dpdk where n is an integer starting from 0. """ + _nics = S.getValue('NICS') bridge = self._bridges[switch_name] dpdk_count = self._get_port_count('type=dpdk') + if dpdk_count == len(_nics): + raise RuntimeError("Can't add phy port! There are only {} ports defined " + "by WHITELIST_NICS parameter!".format(len(_nics))) port_name = 'dpdk' + str(dpdk_count) # PCI info. Please note there must be no blank space, eg must be # like 'options:dpdk-devargs=0000:06:00.0' - _nics = S.getValue('NICS') nic_pci = 'options:dpdk-devargs=' + _nics[dpdk_count]['pci'] params = ['--', 'set', 'Interface', port_name, 'type=dpdk', nic_pci] # multi-queue enable diff --git a/vswitches/ovs_vanilla.py b/vswitches/ovs_vanilla.py index 942ddd41..83c52050 100644 --- a/vswitches/ovs_vanilla.py +++ b/vswitches/ovs_vanilla.py @@ -75,10 +75,8 @@ class OvsVanilla(IVSwitchOvs): See IVswitch for general description """ if self._current_id == len(self._ports): - self._logger.error("Can't add port! There are only " + - len(self._ports) + " ports " + - "defined in config!") - raise RuntimeError('Failed to add phy port') + raise RuntimeError("Can't add phy port! There are only {} ports defined " + "by WHITELIST_NICS parameter!".format(len(self._ports))) if not self._ports[self._current_id]: self._logger.error("Can't detect device name for NIC %s", self._current_id) raise ValueError("Invalid device name for %s" % self._current_id) diff --git a/vswitches/vpp_dpdk_vhost.py b/vswitches/vpp_dpdk_vhost.py index c62e28d4..58d6bf51 100644 --- a/vswitches/vpp_dpdk_vhost.py +++ b/vswitches/vpp_dpdk_vhost.py @@ -225,7 +225,8 @@ class VppDpdkVhost(IVSwitch, tasks.Process): vpp_nics = self._get_nic_info(key='Pci') # check if there are any NICs left if len(self._phy_ports) >= len(S.getValue('NICS')): - raise RuntimeError('All available NICs are already configured!') + raise RuntimeError("Can't add phy port! There are only {} ports defined " + "by WHITELIST_NICS parameter!".format(len(S.getValue('NICS')))) nic = S.getValue('NICS')[len(self._phy_ports)] if not nic['pci'] in vpp_nics: -- cgit 1.2.3-korg