summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--modules/luci-base/htdocs/luci-static/resources/network.js79
1 files changed, 50 insertions, 29 deletions
diff --git a/modules/luci-base/htdocs/luci-static/resources/network.js b/modules/luci-base/htdocs/luci-static/resources/network.js
index 68abb939f..3c5530bde 100644
--- a/modules/luci-base/htdocs/luci-static/resources/network.js
+++ b/modules/luci-base/htdocs/luci-static/resources/network.js
@@ -978,47 +978,50 @@ Network = L.Class.extend(/** @lends LuCI.Network.prototype */ {
* `false` if the given network could not be found.
*/
deleteNetwork: function(name) {
- var requireFirewall = Promise.resolve(L.require('firewall')).catch(function() {});
+ var requireFirewall = Promise.resolve(L.require('firewall')).catch(function() {}),
+ network = this.instantiateNetwork(name);
return Promise.all([ requireFirewall, initNetworkState() ]).then(function() {
var uciInterface = uci.get('network', name);
if (uciInterface != null && uciInterface['.type'] == 'interface') {
- uci.remove('network', name);
+ return Promise.resolve(network ? network.deleteConfiguration() : null).then(function() {
+ uci.remove('network', name);
- uci.sections('luci', 'ifstate', function(s) {
- if (s.interface == name)
- uci.remove('luci', s['.name']);
- });
+ uci.sections('luci', 'ifstate', function(s) {
+ if (s.interface == name)
+ uci.remove('luci', s['.name']);
+ });
- uci.sections('network', 'alias', function(s) {
- if (s.interface == name)
- uci.remove('network', s['.name']);
- });
+ uci.sections('network', 'alias', function(s) {
+ if (s.interface == name)
+ uci.remove('network', s['.name']);
+ });
- uci.sections('network', 'route', function(s) {
- if (s.interface == name)
- uci.remove('network', s['.name']);
- });
+ uci.sections('network', 'route', function(s) {
+ if (s.interface == name)
+ uci.remove('network', s['.name']);
+ });
- uci.sections('network', 'route6', function(s) {
- if (s.interface == name)
- uci.remove('network', s['.name']);
- });
+ uci.sections('network', 'route6', function(s) {
+ if (s.interface == name)
+ uci.remove('network', s['.name']);
+ });
- uci.sections('wireless', 'wifi-iface', function(s) {
- var networks = L.toArray(s.network).filter(function(network) { return network != name });
+ uci.sections('wireless', 'wifi-iface', function(s) {
+ var networks = L.toArray(s.network).filter(function(network) { return network != name });
- if (networks.length > 0)
- uci.set('wireless', s['.name'], 'network', networks.join(' '));
- else
- uci.unset('wireless', s['.name'], 'network');
- });
+ if (networks.length > 0)
+ uci.set('wireless', s['.name'], 'network', networks.join(' '));
+ else
+ uci.unset('wireless', s['.name'], 'network');
+ });
- if (L.firewall)
- return L.firewall.deleteNetwork(name).then(function() { return true });
+ if (L.firewall)
+ return L.firewall.deleteNetwork(name).then(function() { return true });
- return true;
+ return true;
+ });
}
return false;
@@ -2638,7 +2641,25 @@ Protocol = L.Class.extend(/** @lends LuCI.Network.Protocol.prototype */ {
}
return false;
- }
+ },
+
+ /**
+ * Cleanup related configuration entries.
+ *
+ * This function will be invoked if an interface is about to be removed
+ * from the configuration and is responsible for performing any required
+ * cleanup tasks, such as unsetting uci entries in related configurations.
+ *
+ * It should be overwritten by protocol specific subclasses.
+ *
+ * @abstract
+ *
+ * @returns {*|Promise<*>}
+ * This function may return a promise which is awaited before the rest of
+ * the configuration is removed. Any non-promise return value and any
+ * resolved promise value is ignored.
+ */
+ deleteConfiguration: function() {}
});
/**