summaryrefslogtreecommitdiffhomepage
path: root/modules
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2020-03-03 21:12:44 +0100
committerJo-Philipp Wich <jo@mein.io>2020-03-03 21:22:44 +0100
commita22aba2fed7b95f241b70c215e23e5699a3ff9d9 (patch)
treebf6260278f81c2fcfbdae996b97374f5b7b805cb /modules
parentca558f4f93451de7afb2a85c017051cb807b3329 (diff)
luci-base: network.js: add Protocol.deleteConfiguration() callback
Add a new Protocol.deleteConfiguration() callback function which can be overridden by protocol handler to perform additional cleanup tasks, such as unsetting related uci entries which are not part of the interface configuration itself. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Diffstat (limited to 'modules')
-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() {}
});
/**