luci-mod-network: allow disabling interface->device option migration
authorJo-Philipp Wich <jo@mein.io>
Mon, 29 Mar 2021 18:08:48 +0000 (20:08 +0200)
committerRafał Miłecki <rafal@milecki.pl>
Thu, 27 May 2021 10:19:05 +0000 (12:19 +0200)
Introduce a `migrate` properties which selectively allows disabling the
`config interface` to `config device` migration logic for single options.

Use the new flag to disable migration of the "ipv6" option which has
different semantics in interface and device sections.

Ref: https://forum.openwrt.org/t/pppoe-disable-ipv6/92548
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit 935e9a3c3430db5fad1004926ddfa2e35a950be5)

modules/luci-mod-network/htdocs/luci-static/resources/tools/network.js

index 544cad2c75b9549783a60fca9028972d1cb374f1..3df72940aa29a201a08513f992476192e8d8410f 100644 (file)
@@ -131,7 +131,7 @@ function deviceCfgValue(section_id) {
        var ds = lookupDevSection(this.section, section_id, false);
 
        return (ds ? uci.get('network', ds, this.option) : null) ||
-               uci.get('network', section_id, this.option) ||
+               (this.migrate ? uci.get('network', section_id, this.option) : null) ||
                this.default;
 }
 
@@ -139,7 +139,9 @@ function deviceWrite(section_id, formvalue) {
        var ds = lookupDevSection(this.section, section_id, true);
 
        uci.set('network', ds, this.option, formvalue);
-       uci.unset('network', section_id, this.option);
+
+       if (this.migrate)
+               uci.unset('network', section_id, this.option);
 }
 
 function deviceRemove(section_id) {
@@ -162,7 +164,8 @@ function deviceRemove(section_id) {
                        uci.unset('network', ds, this.option);
        }
 
-       uci.unset('network', section_id, this.option);
+       if (this.migrate)
+               uci.unset('network', section_id, this.option);
 }
 
 function deviceRefresh(section_id) {
@@ -364,6 +367,7 @@ return baseclass.extend({
                var o = this.replaceOption(s, tabName, optionClass, optionName, optionTitle, optionDescription);
 
                if (s.sectiontype == 'interface' && optionName != 'type' && optionName != 'vlan_filtering') {
+                       o.migrate = true;
                        o.cfgvalue = deviceCfgValue;
                        o.write = deviceWrite;
                        o.remove = deviceRemove;
@@ -777,6 +781,7 @@ return baseclass.extend({
                o.depends(simpledep);
 
                o = this.addOption(s, gensection, form.Flag, 'ipv6', _('Enable IPv6'));
+               o.migrate = false;
                o.default = o.enabled;
                o.depends(simpledep);