diff --git a/kura/org.eclipse.kura.nm/src/main/java/org/eclipse/kura/nm/configuration/NMConfigurationServiceImpl.java b/kura/org.eclipse.kura.nm/src/main/java/org/eclipse/kura/nm/configuration/NMConfigurationServiceImpl.java index 97c305f6488..9b0b47a5a8a 100644 --- a/kura/org.eclipse.kura.nm/src/main/java/org/eclipse/kura/nm/configuration/NMConfigurationServiceImpl.java +++ b/kura/org.eclipse.kura.nm/src/main/java/org/eclipse/kura/nm/configuration/NMConfigurationServiceImpl.java @@ -508,6 +508,10 @@ private void writeDhcpServerConfiguration(Set interfaceNames) { try { dhcpServerConfigWriter.writeConfiguration(); this.dhcpServerMonitor.putDhcpServerInterfaceConfiguration(interfaceName, true); + this.dhcpServerMonitor.disable(interfaceName); // Side effect: we rely on the monitor bringing the + // server back up so that the configuration change + // takes effect + } catch (UnknownHostException | KuraException e) { logger.error("Failed to write DHCP Server configuration", e); this.dhcpServerMonitor.putDhcpServerInterfaceConfiguration(interfaceName, false); diff --git a/kura/org.eclipse.kura.nm/src/main/java/org/eclipse/kura/nm/configuration/monitor/DhcpServerMonitor.java b/kura/org.eclipse.kura.nm/src/main/java/org/eclipse/kura/nm/configuration/monitor/DhcpServerMonitor.java index a60a9fb72d2..949e30e442f 100644 --- a/kura/org.eclipse.kura.nm/src/main/java/org/eclipse/kura/nm/configuration/monitor/DhcpServerMonitor.java +++ b/kura/org.eclipse.kura.nm/src/main/java/org/eclipse/kura/nm/configuration/monitor/DhcpServerMonitor.java @@ -65,6 +65,16 @@ public void clear() { this.dhcpServerInterfaceConfiguration.clear(); } + public void disable(String interfaceName) { + try { + if (this.dhcpServerManager.isRunning(interfaceName)) { + stopDhcpServer(interfaceName); + } + } catch (KuraException e) { + logger.warn("Failed to stop DHCP server for the interface " + interfaceName, e); + } + } + private void monitor() { this.dhcpServerInterfaceConfiguration.entrySet().forEach(entry -> { String interfaceName = entry.getKey();