luci-mod-network: migrate config to use "ports" option

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 b8acde7f48)
This commit is contained in:
Rafał Miłecki 2021-05-20 15:03:43 +02:00
parent 8303c2eac3
commit 482fc216ac

View 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) { handleMigration: function(ev) {
var interfaces = this.interfaceWithIfnameSections(); var interfaces = this.interfaceWithIfnameSections();
var tasks = []; 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) return Promise.all(tasks)
.then(L.bind(ui.changes.init, ui.changes)) .then(L.bind(ui.changes.init, ui.changes))
.then(L.bind(ui.changes.apply, ui.changes)); .then(L.bind(ui.changes.apply, ui.changes));
@ -331,7 +344,7 @@ return view.extend({
renderMigration: function() { renderMigration: function() {
ui.showModal(_('Network bridge configuration migration'), [ ui.showModal(_('Network bridge configuration migration'), [
E('p', _('The existing network configuration needs to be changed for LuCI to function properly.')), 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('div', { 'class': 'right' },
E('button', { E('button', {
'class': 'btn cbi-button-action important', 'class': 'btn cbi-button-action important',
@ -341,7 +354,8 @@ return view.extend({
}, },
render: function(data) { render: function(data) {
if (this.interfaceWithIfnameSections().length) if (this.interfaceWithIfnameSections().length ||
this.deviceWithIfnameSections().length)
return this.renderMigration(); return this.renderMigration();
var dslModemType = data[0], var dslModemType = data[0],