diff --git a/core/src/net/host/binding.rs b/core/src/net/host/binding.rs index 975c95390..81c14615f 100644 --- a/core/src/net/host/binding.rs +++ b/core/src/net/host/binding.rs @@ -204,11 +204,7 @@ impl BindInfo { enabled: true, options, net: lan, - addresses: DerivedAddressInfo { - enabled: addresses.enabled, - disabled: addresses.disabled, - available: BTreeSet::new(), - }, + addresses, }) } pub fn disable(&mut self) { diff --git a/core/src/net/host/mod.rs b/core/src/net/host/mod.rs index aa23bdaca..bec7854de 100644 --- a/core/src/net/host/mod.rs +++ b/core/src/net/host/mod.rs @@ -92,15 +92,10 @@ impl Model { for (_, bind) in this.bindings.as_entries_mut()? { let net = bind.as_net().de()?; let opt = bind.as_options().de()?; + // Preserve existing plugin-provided addresses across recomputation - let plugin_addrs: BTreeSet = bind - .as_addresses() - .as_available() - .de()? - .into_iter() - .filter(|h| matches!(h.metadata, HostnameMetadata::Plugin { .. })) - .collect(); - let mut available = BTreeSet::new(); + let mut available = bind.as_addresses().as_available().de()?; + available.retain(|h| matches!(h.metadata, HostnameMetadata::Plugin { .. })); for (gid, g) in gateways { let Some(ip_info) = &g.ip_info else { continue; @@ -290,7 +285,6 @@ impl Model { }); } } - available.extend(plugin_addrs); bind.as_addresses_mut().as_available_mut().ser(&available)?; }