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 <jo@mein.io>
(cherry picked from commit 63034c3607
)
This commit is contained in:
parent
4d3de0e1bb
commit
13df80d429
1 changed files with 22 additions and 12 deletions
|
@ -1005,9 +1005,10 @@ Network = baseclass.extend(/** @lends LuCI.network.prototype */ {
|
||||||
*/
|
*/
|
||||||
deleteNetwork: function(name) {
|
deleteNetwork: function(name) {
|
||||||
var requireFirewall = Promise.resolve(L.require('firewall')).catch(function() {}),
|
var requireFirewall = Promise.resolve(L.require('firewall')).catch(function() {}),
|
||||||
|
loadDHCP = L.resolveDefault(uci.load('dhcp')),
|
||||||
network = this.instantiateNetwork(name);
|
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),
|
var uciInterface = uci.get('network', name),
|
||||||
firewall = res[0];
|
firewall = res[0];
|
||||||
|
|
||||||
|
@ -1020,19 +1021,23 @@ Network = baseclass.extend(/** @lends LuCI.network.prototype */ {
|
||||||
uci.remove('luci', s['.name']);
|
uci.remove('luci', s['.name']);
|
||||||
});
|
});
|
||||||
|
|
||||||
uci.sections('network', 'alias', function(s) {
|
uci.sections('network', null, function(s) {
|
||||||
|
switch (s['.type']) {
|
||||||
|
case 'alias':
|
||||||
|
case 'route':
|
||||||
|
case 'route6':
|
||||||
if (s.interface == name)
|
if (s.interface == name)
|
||||||
uci.remove('network', s['.name']);
|
uci.remove('network', s['.name']);
|
||||||
});
|
|
||||||
|
|
||||||
uci.sections('network', 'route', function(s) {
|
break;
|
||||||
if (s.interface == name)
|
|
||||||
uci.remove('network', s['.name']);
|
|
||||||
});
|
|
||||||
|
|
||||||
uci.sections('network', 'route6', function(s) {
|
case 'rule':
|
||||||
if (s.interface == name)
|
case 'rule6':
|
||||||
|
if (s.in == name || s.out == name)
|
||||||
uci.remove('network', s['.name']);
|
uci.remove('network', s['.name']);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
uci.sections('wireless', 'wifi-iface', function(s) {
|
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.unset('wireless', s['.name'], 'network');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
uci.sections('dhcp', 'dhcp', function(s) {
|
||||||
|
if (s.interface == name)
|
||||||
|
uci.remove('dhcp', s['.name']);
|
||||||
|
});
|
||||||
|
|
||||||
if (firewall)
|
if (firewall)
|
||||||
return firewall.deleteNetwork(name).then(function() { return true });
|
return firewall.deleteNetwork(name).then(function() { return true });
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue