Fix error when DHCP on with auto address on STP enabled bridge
Signed-off-by: Gris Ge <fge@redhat.com>
This commit is contained in:
parent
8aef716a1a
commit
e8c90904f8
67
0003-Fix-error-when-DHCP-with-auto-IP-address-on-STP-e.patch
Normal file
67
0003-Fix-error-when-DHCP-with-auto-IP-address-on-STP-e.patch
Normal file
@ -0,0 +1,67 @@
|
||||
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
|
||||
|
@ -15,6 +15,8 @@ Source2: https://nmstate.io/nmstate.gpg
|
||||
# but list Requires manually
|
||||
Patch1: 0001-Workaround-for-Fedora-rust-packaging.patch
|
||||
Patch2: 0002-fix_nix_deps.patch
|
||||
# https://github.com/coreos/fedora-coreos-tracker/issues/1480
|
||||
Patch3: 0003-Fix-error-when-DHCP-with-auto-IP-address-on-STP-e.patch
|
||||
BuildRequires: patchelf
|
||||
BuildRequires: python3-devel
|
||||
BuildRequires: python3-setuptools
|
||||
|
Loading…
Reference in New Issue
Block a user