Fix regression on SRIOV timeout
Resolves: RHBZ#2212380 Signed-off-by: Gris Ge <fge@redhat.com>
This commit is contained in:
parent
09edb4c510
commit
cbf59f2e60
@ -1,67 +0,0 @@
|
||||
From 333e82445c048812e3e85fb9f3cb7558dc3f2aeb Mon Sep 17 00:00:00 2001
|
||||
From: Gris Ge <fge@redhat.com>
|
||||
Date: Tue, 25 Apr 2023 14:10:34 +0800
|
||||
Subject: [PATCH] ip: Fix error when DHCP with auto IP address on STP enabled
|
||||
bridge
|
||||
|
||||
When DHCP enabled with auto IP address on STP enabled bridge, nmstate
|
||||
will fail with verification error:
|
||||
|
||||
Verification failure: br0.interface.ipv4.address desire '[]',
|
||||
current 'null'
|
||||
|
||||
The root cause is STP suspended the DHCP action which cause current
|
||||
state shows null IP address. And nmstate incorrectly treat [] != null
|
||||
for IP address.
|
||||
|
||||
Fixed in `sanitize_current_for_verify()` to set empty array if None.
|
||||
|
||||
To reproduce this problem, we just enable DHCP with auto IP address
|
||||
where no DHCP server exists. Integration test case included.
|
||||
|
||||
Signed-off-by: Gris Ge <fge@redhat.com>
|
||||
---
|
||||
rust/src/lib/query_apply/ip.rs | 13 ++++++++++---
|
||||
1 file changed, 10 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/rust/src/lib/query_apply/ip.rs b/rust/src/lib/query_apply/ip.rs
|
||||
index b2d6ac49..a6df740b 100644
|
||||
--- a/rust/src/lib/query_apply/ip.rs
|
||||
+++ b/rust/src/lib/query_apply/ip.rs
|
||||
@@ -12,6 +12,11 @@ impl InterfaceIpv4 {
|
||||
if self.dhcp_custom_hostname.is_none() {
|
||||
self.dhcp_custom_hostname = Some(String::new());
|
||||
}
|
||||
+
|
||||
+ // No IP address means empty.
|
||||
+ if self.enabled && self.addresses.is_none() {
|
||||
+ self.addresses = Some(Vec::new());
|
||||
+ }
|
||||
}
|
||||
|
||||
// Sort addresses and dedup
|
||||
@@ -89,6 +94,11 @@ impl InterfaceIpv6 {
|
||||
if self.dhcp_custom_hostname.is_none() {
|
||||
self.dhcp_custom_hostname = Some(String::new());
|
||||
}
|
||||
+
|
||||
+ // No IP address means empty.
|
||||
+ if self.enabled && self.addresses.is_none() {
|
||||
+ self.addresses = Some(Vec::new());
|
||||
+ }
|
||||
}
|
||||
|
||||
// Sort addresses and dedup
|
||||
@@ -96,9 +106,6 @@ impl InterfaceIpv6 {
|
||||
if let Some(addrs) = self.addresses.as_mut() {
|
||||
addrs.sort_unstable();
|
||||
addrs.dedup();
|
||||
- if addrs.is_empty() {
|
||||
- self.addresses = None;
|
||||
- }
|
||||
}
|
||||
}
|
||||
pub(crate) fn update(&mut self, other: &Self) {
|
||||
--
|
||||
2.40.0
|
||||
|
@ -1,62 +0,0 @@
|
||||
From d8b4c29ab17a53bad6f189acf76bab78e29ee333 Mon Sep 17 00:00:00 2001
|
||||
From: Gris Ge <fge@redhat.com>
|
||||
Date: Sun, 23 Apr 2023 16:01:29 +0800
|
||||
Subject: [PATCH] cli: Do nothing for `persist-nic-names` when got
|
||||
`net.ifnames=0`
|
||||
|
||||
When `net.ifnames=0` is defined in kernel argument, systemd will disable
|
||||
the predicable network interface name which make no sense for nmstate to
|
||||
pin the interface names. Hence we do nothing in `persist-nic-names` in
|
||||
that case.
|
||||
|
||||
Manually tested in CentOS stream 9 VM.
|
||||
|
||||
Signed-off-by: Gris Ge <fge@redhat.com>
|
||||
---
|
||||
rust/src/cli/persist_nic.rs | 19 +++++++++++++++++++
|
||||
1 file changed, 19 insertions(+)
|
||||
|
||||
diff --git a/rust/src/cli/persist_nic.rs b/rust/src/cli/persist_nic.rs
|
||||
index 6b126d58..61b07dbb 100644
|
||||
--- a/rust/src/cli/persist_nic.rs
|
||||
+++ b/rust/src/cli/persist_nic.rs
|
||||
@@ -7,6 +7,8 @@
|
||||
//!
|
||||
//! The logic currently is:
|
||||
//!
|
||||
+//! - Do nothing if kernel argument contains `net.ifnames=0` which disabled the
|
||||
+//! predicable network interface name, hence not fit our use case here.
|
||||
//! - Iterate over all active NICs
|
||||
//! - Pin every ethernet interface to its MAC address (prefer permanent MAC
|
||||
//! address)
|
||||
@@ -70,6 +72,14 @@ pub(crate) fn run_persist_immediately(
|
||||
PersistAction::CleanUpDryRun => return clean_up(root, true),
|
||||
};
|
||||
|
||||
+ if is_prediable_ifname_disabled() {
|
||||
+ log::info!(
|
||||
+ "Systemd predicable network interface name is disabled \
|
||||
+ by kernel argument `net.ifnames=0`, will do nothing"
|
||||
+ );
|
||||
+ return Ok("".to_string());
|
||||
+ }
|
||||
+
|
||||
let stamp_path = Path::new(root)
|
||||
.join(SYSTEMD_NETWORK_LINK_FOLDER)
|
||||
.join(NMSTATE_PERSIST_STAMP);
|
||||
@@ -317,3 +327,12 @@ fn is_nmstate_generated_systemd_link_file(file_path: &PathBuf) -> bool {
|
||||
.map(|_| buff == PERSIST_GENERATED_BY.as_bytes())
|
||||
.unwrap_or_default()
|
||||
}
|
||||
+
|
||||
+const KERNEL_CMDLINE_FILE: &str = "/proc/cmdline";
|
||||
+
|
||||
+fn is_prediable_ifname_disabled() -> bool {
|
||||
+ std::fs::read(KERNEL_CMDLINE_FILE)
|
||||
+ .map(|v| String::from_utf8(v).unwrap_or_default())
|
||||
+ .map(|c| c.contains("net.ifnames=0"))
|
||||
+ .unwrap_or_default()
|
||||
+}
|
||||
--
|
||||
2.40.0
|
||||
|
1300
BZ_2212380_fix_sriov_timeout.patch
Normal file
1300
BZ_2212380_fix_sriov_timeout.patch
Normal file
File diff suppressed because it is too large
Load Diff
@ -4,7 +4,7 @@
|
||||
|
||||
Name: nmstate
|
||||
Version: 2.2.12
|
||||
Release: 1%{?dist}
|
||||
Release: 2%{?dist}
|
||||
Summary: Declarative network manager API
|
||||
License: LGPLv2+
|
||||
URL: https://github.com/%{srcname}/%{srcname}
|
||||
@ -12,6 +12,7 @@ Source0: https://github.com/nmstate/nmstate/releases/download/v%{version}
|
||||
Source1: https://github.com/nmstate/nmstate/releases/download/v%{version}/nmstate-%{version}.tar.gz.asc
|
||||
Source2: https://nmstate.io/nmstate.gpg
|
||||
Source3: https://github.com/nmstate/nmstate/releases/download/v%{version}/nmstate-vendor-%{version}.tar.xz
|
||||
Patch1: BZ_2212380_fix_sriov_timeout.patch
|
||||
BuildRequires: python3-devel
|
||||
BuildRequires: python3-setuptools
|
||||
BuildRequires: gnupg2
|
||||
@ -150,6 +151,9 @@ popd
|
||||
/sbin/ldconfig
|
||||
|
||||
%changelog
|
||||
* Wed Jun 07 2023 Gris Ge <fge@redhat.com> - 2.2.12-2
|
||||
- Fix regression on SRIOV timeout. RHBZ#2212380
|
||||
|
||||
* Thu Jun 01 2023 Fernando Fernandez Mancera <ferferna@redhat.com> - 2.2.12-1
|
||||
- Upgrade to 2.2.12
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user