From: Jo-Philipp Wich Date: Fri, 22 Oct 2021 17:44:43 +0000 (+0200) Subject: luci-base: remove further related section types on deleting network X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=63034c36073bedf87db18d05d3fe8cca016c6490;p=project%2Fluci.git luci-base: remove further related section types on deleting network When removing a `config interface` section in `/etc/config/network`, drop related `rule` and `rule6` sections too, as well as related `dhcp` sections in `/etc/config/dhcp`. Ref: https://forum.openwrt.org/t/grooming-etc-config/109764/7 Signed-off-by: Jo-Philipp Wich --- diff --git a/modules/luci-base/htdocs/luci-static/resources/network.js b/modules/luci-base/htdocs/luci-static/resources/network.js index 17dd055e25..2a402bcd57 100644 --- a/modules/luci-base/htdocs/luci-static/resources/network.js +++ b/modules/luci-base/htdocs/luci-static/resources/network.js @@ -1005,9 +1005,10 @@ Network = baseclass.extend(/** @lends LuCI.network.prototype */ { */ deleteNetwork: function(name) { var requireFirewall = Promise.resolve(L.require('firewall')).catch(function() {}), + loadDHCP = L.resolveDefault(uci.load('dhcp')), network = this.instantiateNetwork(name); - return Promise.all([ requireFirewall, initNetworkState() ]).then(function(res) { + return Promise.all([ requireFirewall, loadDHCP, initNetworkState() ]).then(function(res) { var uciInterface = uci.get('network', name), firewall = res[0]; @@ -1020,19 +1021,23 @@ Network = baseclass.extend(/** @lends LuCI.network.prototype */ { uci.remove('luci', s['.name']); }); - uci.sections('network', 'alias', function(s) { - if (s.interface == name) - uci.remove('network', s['.name']); - }); + uci.sections('network', null, function(s) { + switch (s['.type']) { + case 'alias': + case 'route': + case 'route6': + if (s.interface == name) + uci.remove('network', s['.name']); - uci.sections('network', 'route', function(s) { - if (s.interface == name) - uci.remove('network', s['.name']); - }); + break; - uci.sections('network', 'route6', function(s) { - if (s.interface == name) - uci.remove('network', s['.name']); + case 'rule': + case 'rule6': + if (s.in == name || s.out == name) + uci.remove('network', s['.name']); + + break; + } }); uci.sections('wireless', 'wifi-iface', function(s) { @@ -1044,6 +1049,11 @@ Network = baseclass.extend(/** @lends LuCI.network.prototype */ { uci.unset('wireless', s['.name'], 'network'); }); + uci.sections('dhcp', 'dhcp', function(s) { + if (s.interface == name) + uci.remove('dhcp', s['.name']); + }); + if (firewall) return firewall.deleteNetwork(name).then(function() { return true });