From a23721e1c1642d682d0bc65fc370027d2e30f6b4 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Feb 24 2021 06:12:34 +0000 Subject: import nmstate-1.0.2-4.el8 --- diff --git a/SOURCES/BZ_1931355-SRIOV-wait-VF-mount-decrease.patch b/SOURCES/BZ_1931355-SRIOV-wait-VF-mount-decrease.patch new file mode 100644 index 0000000..f215f9f --- /dev/null +++ b/SOURCES/BZ_1931355-SRIOV-wait-VF-mount-decrease.patch @@ -0,0 +1,166 @@ +From 80c97b27707b036f0a54988ade4bda3ccb342b34 Mon Sep 17 00:00:00 2001 +From: Fernando Fernandez Mancera +Date: Mon, 22 Feb 2021 12:03:11 +0100 +Subject: [PATCH 1/2] SR-IOV: increase the verification timeout if SR-IOV is + present + +Certain drivers like i40e take a long time to modify the VFs in the +kernel. Nmstate is timing out on verification because of that. In order +to fix this, nmstate is incresing the verification time if SR-IOV is +present on the desired state. + +Signed-off-by: Fernando Fernandez Mancera +Signed-off-by: Gris Ge +--- + libnmstate/ifaces/ethernet.py | 6 ++++++ + libnmstate/netapplier.py | 18 +++++++++++++++++- + 2 files changed, 23 insertions(+), 1 deletion(-) + +diff --git a/libnmstate/ifaces/ethernet.py b/libnmstate/ifaces/ethernet.py +index 292b7bc..ca8501b 100644 +--- a/libnmstate/ifaces/ethernet.py ++++ b/libnmstate/ifaces/ethernet.py +@@ -65,6 +65,12 @@ class EthernetIface(BaseIface): + def is_peer(self): + return self._is_peer + ++ @property ++ def is_sriov(self): ++ return self.raw.get(Ethernet.CONFIG_SUBTREE, {}).get( ++ Ethernet.SRIOV_SUBTREE ++ ) ++ + def create_sriov_vf_ifaces(self): + return [ + EthernetIface( +diff --git a/libnmstate/netapplier.py b/libnmstate/netapplier.py +index cf208d1..3c5759b 100644 +--- a/libnmstate/netapplier.py ++++ b/libnmstate/netapplier.py +@@ -24,6 +24,7 @@ import time + + from libnmstate import validator + from libnmstate.error import NmstateVerificationError ++from libnmstate.schema import InterfaceType + + from .nmstate import create_checkpoints + from .nmstate import destroy_checkpoints +@@ -37,6 +38,7 @@ from .version import get_version + MAINLOOP_TIMEOUT = 35 + VERIFY_RETRY_INTERNAL = 1 + VERIFY_RETRY_TIMEOUT = 5 ++VERIFY_RETRY_TIMEOUT_INCREASE = 4 + + + def apply( +@@ -109,7 +111,13 @@ def _apply_ifaces_state(plugins, net_state, verify_change, save_to_disk): + plugin.apply_changes(net_state, save_to_disk) + verified = False + if verify_change: +- for _ in range(VERIFY_RETRY_TIMEOUT): ++ if _net_state_contains_sriov_interface(net_state): ++ # If SR-IOV is present, the verification timeout is being increased ++ # to avoid timeouts due to slow drivers like i40e. ++ verify_retry = VERIFY_RETRY_TIMEOUT * VERIFY_RETRY_TIMEOUT_INCREASE ++ else: ++ verify_retry = VERIFY_RETRY_TIMEOUT ++ for _ in range(verify_retry): + try: + _verify_change(plugins, net_state) + verified = True +@@ -120,6 +128,14 @@ def _apply_ifaces_state(plugins, net_state, verify_change, save_to_disk): + _verify_change(plugins, net_state) + + ++def _net_state_contains_sriov_interface(net_state): ++ for iface in net_state.ifaces.all_kernel_ifaces.values(): ++ if iface.type == InterfaceType.ETHERNET and iface.is_sriov: ++ return True ++ ++ return False ++ ++ + def _verify_change(plugins, net_state): + current_state = show_with_plugins(plugins) + net_state.verify(current_state) +-- +2.27.0 + + +From 439fe3a51a82060c5b62974c6c9fbdf403c4196b Mon Sep 17 00:00:00 2001 +From: Fernando Fernandez Mancera +Date: Mon, 22 Feb 2021 13:33:06 +0100 +Subject: [PATCH 2/2] SR-IOV: fail on verification if `total_vfs` does not + match vfs len + +Signed-off-by: Fernando Fernandez Mancera +Signed-off-by: Gris Ge +--- + libnmstate/ifaces/ethernet.py | 11 +++++++++++ + libnmstate/ifaces/ifaces.py | 14 ++++++++++++++ + 2 files changed, 25 insertions(+) + +diff --git a/libnmstate/ifaces/ethernet.py b/libnmstate/ifaces/ethernet.py +index ca8501b..55772ce 100644 +--- a/libnmstate/ifaces/ethernet.py ++++ b/libnmstate/ifaces/ethernet.py +@@ -61,6 +61,14 @@ class EthernetIface(BaseIface): + .get(Ethernet.SRIOV.TOTAL_VFS, 0) + ) + ++ @property ++ def sriov_vfs(self): ++ return ( ++ self.raw.get(Ethernet.CONFIG_SUBTREE, {}) ++ .get(Ethernet.SRIOV_SUBTREE, {}) ++ .get(Ethernet.SRIOV.VFS_SUBTREE, []) ++ ) ++ + @property + def is_peer(self): + return self._is_peer +@@ -108,6 +116,9 @@ class EthernetIface(BaseIface): + for i in range(self.sriov_total_vfs, old_sriov_total_vfs) + ] + ++ def check_total_vfs_matches_vf_list(self, total_vfs): ++ return total_vfs == len(self.sriov_vfs) ++ + + def _capitalize_sriov_vf_mac(state): + vfs = ( +diff --git a/libnmstate/ifaces/ifaces.py b/libnmstate/ifaces/ifaces.py +index 44c9e61..6c94a98 100644 +--- a/libnmstate/ifaces/ifaces.py ++++ b/libnmstate/ifaces/ifaces.py +@@ -238,6 +238,8 @@ class Ifaces: + if new_iface.name not in self._kernel_ifaces: + new_iface.mark_as_desired() + new_ifaces.append(new_iface) ++ else: ++ self._kernel_ifaces[new_iface.name].mark_as_desired() + for new_iface in new_ifaces: + self._kernel_ifaces[new_iface.name] = new_iface + +@@ -656,6 +658,18 @@ class Ifaces: + cur_iface.state_for_verify(), + ) + ) ++ elif ( ++ iface.type == InterfaceType.ETHERNET and iface.is_sriov ++ ): ++ if not cur_iface.check_total_vfs_matches_vf_list( ++ iface.sriov_total_vfs ++ ): ++ raise NmstateVerificationError( ++ "The NIC exceeded the waiting time for " ++ "verification and it is failing because " ++ "the `total_vfs` does not match the VF " ++ "list length." ++ ) + + def gen_dns_metadata(self, dns_state, route_state): + iface_metadata = dns_state.gen_metadata(self, route_state) +-- +2.27.0 + diff --git a/SOURCES/BZ_1931751-nmstate-fix-return-code.patch b/SOURCES/BZ_1931751-nmstate-fix-return-code.patch new file mode 100644 index 0000000..78b6774 --- /dev/null +++ b/SOURCES/BZ_1931751-nmstate-fix-return-code.patch @@ -0,0 +1,29 @@ +From b26ab850172a41557cad42cc011bd00d7c108c88 Mon Sep 17 00:00:00 2001 +From: Gris Ge +Date: Tue, 23 Feb 2021 13:52:19 +0800 +Subject: [PATCH] nmstatectl: Fix return code of set command + +The deprecated command `set` should still return the error like +old behaviour. + +Signed-off-by: Gris Ge +--- + nmstatectl/nmstatectl.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/nmstatectl/nmstatectl.py b/nmstatectl/nmstatectl.py +index df59942..c94d603 100644 +--- a/nmstatectl/nmstatectl.py ++++ b/nmstatectl/nmstatectl.py +@@ -323,7 +323,7 @@ def show(args): + + def set(args): + warnings.warn("Using 'set' is deprecated, use 'apply' instead.") +- apply(args) ++ return apply(args) + + + def apply(args): +-- +2.27.0 + diff --git a/SPECS/nmstate.spec b/SPECS/nmstate.spec index 3155799..3f992a5 100644 --- a/SPECS/nmstate.spec +++ b/SPECS/nmstate.spec @@ -4,13 +4,15 @@ Name: nmstate Version: 1.0.2 -Release: 1%{?dist} +Release: 4%{?dist} Summary: Declarative network manager API License: LGPLv2+ URL: https://github.com/%{srcname}/%{srcname} Source0: %{url}/releases/download/v%{version}/%{srcname}-%{version}.tar.gz Source1: %{url}/releases/download/v%{version}/%{srcname}-%{version}.tar.gz.asc Source2: https://www.nmstate.io/nmstate.gpg +Patch1: BZ_1931751-nmstate-fix-return-code.patch +Patch2: BZ_1931355-SRIOV-wait-VF-mount-decrease.patch BuildArch: noarch BuildRequires: python3-devel BuildRequires: python3-setuptools @@ -83,6 +85,15 @@ gpgv2 --keyring ./gpgkey-mantainers.gpg %{SOURCE1} %{SOURCE0} %{python3_sitelib}/%{libname}/plugins/__pycache__/nmstate_plugin_ovsdb* %changelog +* Tue Feb 23 2021 Gris Ge - 1.0.2-4 +- New patch for SRIOV decrease VF amount. RHBZ#1931355 + +* Tue Feb 23 2021 Gris Ge - 1.0.2-3 +- Fix actiation failure when decrease VF mount on i40e. RHBZ#1931355 + +* Tue Feb 23 2021 Gris Ge - 1.0.2-2 +- Fix nmstatectl return code of `set` command. RHBZ#1931751 + * Fri Feb 19 2021 Gris Ge - 1.0.2-1 - Upgrade to 1.0.2.