luci-mod-network: migrate config to use "ports" option
authorRafał Miłecki <rafal@milecki.pl>
Thu, 20 May 2021 13:03:43 +0000 (15:03 +0200)
committerRafał Miłecki <rafal@milecki.pl>
Thu, 27 May 2021 10:19:08 +0000 (12:19 +0200)
LuCI supports only the newer method of specifying bridge ports using the
"ports" option. Offer users migration so they can configure their
network.

Example:

1. Before
config device
        option name 'br-lan'
        option type 'bridge'
        list ifname 'lan1'
        list ifname 'lan2'
        list ifname 'lan3'
        list ifname 'lan4'

2. After
config device
        option name 'br-lan'
        option type 'bridge'
        list ports 'lan1'
        list ports 'lan2'
        list ports 'lan3'
        list ports 'lan4'

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
(cherry picked from commit b8acde7f480a18343ee1f9624b790595065613ae)

modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js

index a3803de11cf15a3fe7deef2d9de8672e7b266005..9a1c9f22964cbb033779a7b4baa18c140f51987d 100644 (file)
@@ -304,6 +304,12 @@ return view.extend({
                });
        },
 
+       deviceWithIfnameSections: function() {
+               return uci.sections('network', 'device').filter(function(ns) {
+                       return ns.type == 'bridge' && !ns.ports && ns.ifname;
+               });
+       },
+
        handleMigration: function(ev) {
                var interfaces = this.interfaceWithIfnameSections();
                var tasks = [];
@@ -323,6 +329,13 @@ return view.extend({
                        }));
                });
 
+               this.deviceWithIfnameSections().forEach(function(ds) {
+                       tasks.push(uci.callSet('network', ds['.name'], {
+                               'ifname': '',
+                               'ports': L.toArray(ds.ifname)
+                       }));
+               });
+
                return Promise.all(tasks)
                        .then(L.bind(ui.changes.init, ui.changes))
                        .then(L.bind(ui.changes.apply, ui.changes));
@@ -331,7 +344,7 @@ return view.extend({
        renderMigration: function() {
                ui.showModal(_('Network bridge configuration migration'), [
                        E('p', _('The existing network configuration needs to be changed for LuCI to function properly.')),
-                       E('p', _('Upon pressing "Continue", bridges configuration will be moved from "interface" sections to "device" sections the network will be restarted to apply the updated configuration.')),
+                       E('p', _('Upon pressing "Continue", bridges configuration will be updated and the network will be restarted to apply the updated configuration.')),
                        E('div', { 'class': 'right' },
                                E('button', {
                                        'class': 'btn cbi-button-action important',
@@ -341,7 +354,8 @@ return view.extend({
        },
 
        render: function(data) {
-               if (this.interfaceWithIfnameSections().length)
+               if (this.interfaceWithIfnameSections().length ||
+                   this.deviceWithIfnameSections().length)
                        return this.renderMigration();
 
                var dslModemType = data[0],