diff --git a/mfd_network_adapter/network_interface/feature/virtualization/linux.py b/mfd_network_adapter/network_interface/feature/virtualization/linux.py index e8f317f..2ff2205 100644 --- a/mfd_network_adapter/network_interface/feature/virtualization/linux.py +++ b/mfd_network_adapter/network_interface/feature/virtualization/linux.py @@ -31,21 +31,22 @@ class LinuxVirtualization(BaseFeatureVirtualization): def _raise_error_if_not_supported_type(self) -> None: """ - Raise error in case current interface is not PF/BTS. + Raise error in case current interface is not PF/BTS/VPORT. - :raises VirtualizationWrongInterfaceException: if method is called on non PF/BTS interface + :raises VirtualizationWrongInterfaceException: if method is called on non PF/BTS/VPORT interface """ current_type = self._interface().interface_type - if current_type not in (InterfaceType.PF, InterfaceType.BTS): + if current_type not in (InterfaceType.PF, InterfaceType.BTS, InterfaceType.VPORT): raise VirtualizationWrongInterfaceException( - f"Current interface type is {current_type} but should be InterfaceType.PF or InterfaceType.BTS" + f"Current interface type is {current_type} but should be " + f"InterfaceType.PF, InterfaceType.BTS or InterfaceType.VPORT" ) def _get_vfs_details(self) -> List[VFDetail]: """ - Get VF details of PF interface. + Get VF details of PF/BTS/VPORT interface. - :raises VirtualizationWrongInterfaceException: if method is called on non PF interface + :raises VirtualizationWrongInterfaceException: if method is called on non PF/BTS/VPORT interface :raises: VirtualizationFeatureException: in case of command failure (rc != 0) :return: List of VFDetail objects """ @@ -80,7 +81,7 @@ def _get_max_vfs_by_name(self) -> int: """ Get maximal number of VFs per interface based on name. - :raises VirtualizationWrongInterfaceException if method is called on non PF interface + :raises VirtualizationWrongInterfaceException if method is called on non PF/BTS/VPORT interface :raises: VirtualizationFeatureException in case of error :return: number of VFs """ @@ -94,7 +95,7 @@ def _get_max_vfs_by_pci_address(self) -> int: """ Get maximal number of VFs per interface based on PCI Address. - :raises VirtualizationWrongInterfaceException if method is called on non PF interface + :raises VirtualizationWrongInterfaceException if method is called on non PF/BTS/VPORT interface :raises: VirtualizationFeatureException in case of error :return: number of VFs """ @@ -108,7 +109,7 @@ def _get_current_vfs_by_name(self) -> int: """ Get number of current VFs per interface based on name. - :raises VirtualizationWrongInterfaceException if method is called on non PF interface + :raises VirtualizationWrongInterfaceException if method is called on non PF/BTS/VPORT interface :raises: VirtualizationFeatureException in case of error :return: number of VFs """ @@ -122,7 +123,7 @@ def _get_current_vfs_by_pci_address(self) -> int: """ Get number of current VFs per interface based on PCI Address. - :raises VirtualizationWrongInterfaceException if method is called on non PF interface + :raises VirtualizationWrongInterfaceException if method is called on non PF/BTS/VPORT interface :raises: VirtualizationFeatureException in case of error :return: number of VFs """ @@ -201,7 +202,7 @@ def set_max_tx_rate(self, vf_id: int, value: int) -> None: :param: vf_id: VF (virtual function) ID :param value: max_tx_rate value (Mbits) - :raises VirtualizationWrongInterfaceException if method is called on non PF interface + :raises VirtualizationWrongInterfaceException if method is called on non PF/BTS/VPORT interface :raises VirtualizationFeatureException if command execution fails """ self._raise_error_if_not_supported_type() @@ -216,7 +217,7 @@ def set_min_tx_rate(self, vf_id: int, value: int) -> None: :param vf_id: VF (virtual function) ID :param value: min_tx_rate value (Mbits) - :raises VirtualizationWrongInterfaceException if method is called on non PF interface + :raises VirtualizationWrongInterfaceException if method is called on non PF/BTS/VPORT interface :raises VirtualizationFeatureException if command execution fails """ self._raise_error_if_not_supported_type() @@ -230,7 +231,7 @@ def set_trust(self, vf_id: int, state: State) -> None: :param vf_id: Virtual Function ID :param state: State to be set: Enabled or Disabled (On/Off) - :raises VirtualizationWrongInterfaceException if method is called on non PF interface + :raises VirtualizationWrongInterfaceException if method is called on non PF/BTS/VPORT interface :raises: VirtualizationFeatureException in case of command error """ self._raise_error_if_not_supported_type() @@ -246,7 +247,7 @@ def set_spoofchk(self, vf_id: int, state: State) -> None: Turning off spoofchk allows the VF to change its MAC address. :param vf_id: Virtual Function ID :param state: State to be set: Enabled or Disabled (On/Off) - :raises VirtualizationWrongInterfaceException if method is called on non PF interface + :raises VirtualizationWrongInterfaceException if method is called on non PF/BTS/VPORT interface :raises: VirtualizationFeatureException in case of error """ self._raise_error_if_not_supported_type() @@ -260,7 +261,7 @@ def get_trust(self, vf_id: int) -> State: Get trust setting per VF. :param vf_id: Virtual Function ID - :raises VirtualizationWrongInterfaceException if method is called on non PF interface + :raises VirtualizationWrongInterfaceException if method is called on non PF/BTS/VPORT interface :return: State of trust setting """ for vf in self._get_vfs_details(): @@ -272,7 +273,7 @@ def get_spoofchk(self, vf_id: int) -> State: Get spoofhck setting per VF. :param vf_id: Virtual Function ID - :raises VirtualizationWrongInterfaceException if method is called on non PF interface + :raises VirtualizationWrongInterfaceException if method is called on non PF/BTS/VPORT interface :return: State of spoofhck setting """ for vf in self._get_vfs_details(): @@ -284,7 +285,7 @@ def get_mac_address(self, vf_id: int) -> MACAddress: Get mac_address per VF. :param vf_id: Virtual Function ID - :raises VirtualizationWrongInterfaceException: if method is called on non PF interface + :raises VirtualizationWrongInterfaceException: if method is called on non PF/BTS/VPORT interface :return: Mac Address of VF """ for vf in self._get_vfs_details(): @@ -296,7 +297,7 @@ def get_link_state(self, vf_id: int) -> LinkState: Get link-state per VF. :param vf_id: Virtual Function ID - :raises VirtualizationWrongInterfaceException: if method is called on non PF interface + :raises VirtualizationWrongInterfaceException: if method is called on non PF/BTS/VPORT interface :return: Link State setting of VF """ for vf in self._get_vfs_details(): @@ -310,7 +311,7 @@ def set_vlan_for_vf(self, vf_id: int, vlan_id: int, proto: VlanProto = None) -> :param vf_id: Virtual Function ID :param vlan_id: VLAN to set the VF to :param proto: Specify 802.1ad or 802.1Q type of VLAN - :raises VirtualizationWrongInterfaceException if method is called on non PF interface + :raises VirtualizationWrongInterfaceException if method is called on non PF/BTS/VPORT interface :raises: VirtualizationFeatureException in case of error """ self._raise_error_if_not_supported_type() @@ -324,7 +325,7 @@ def set_link_for_vf(self, vf_id: int, link_state: LinkState) -> None: :param vf_id: Virtual Function ID :param link_state: requested link state (one of auto, enabled, disabled) - :raises VirtualizationWrongInterfaceException if method is called on non PF interface + :raises VirtualizationWrongInterfaceException if method is called on non PF/BTS/VPORT interface :raises: VirtualizationFeatureException in case of error """ self._raise_error_if_not_supported_type() diff --git a/tests/unit/test_mfd_network_adapter/test_network_interface/test_feature/test_virtualization/test_virtualization_linux.py b/tests/unit/test_mfd_network_adapter/test_network_interface/test_feature/test_virtualization/test_virtualization_linux.py index 61f5d8d..4b8e269 100644 --- a/tests/unit/test_mfd_network_adapter/test_network_interface/test_feature/test_virtualization/test_virtualization_linux.py +++ b/tests/unit/test_mfd_network_adapter/test_network_interface/test_feature/test_virtualization/test_virtualization_linux.py @@ -160,6 +160,10 @@ def test__raise_error_if_not_pf_passes_bts(self, interface): interface._interface_info.interface_type = InterfaceType.BTS assert interface.virtualization._raise_error_if_not_supported_type() is None + def test__raise_error_if_not_pf_passes_vport(self, interface): + interface._interface_info.interface_type = InterfaceType.VPORT + assert interface.virtualization._raise_error_if_not_supported_type() is None + def test_set_link_for_vf_pass(self, interface, mocker): interface._interface_info.name = "foo" vf_id = 2