luci-mod-network: add bridge interface migration

LuCI now supports the updated UCI syntax for bridges that requires:
1. device section for L2
2. interface section for L3

Check for legacy syntax usage and offser user a migration to allow
changing network config.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
(cherry picked from commit bca76a7673)
This commit is contained in:
Rafał Miłecki 2021-05-18 20:09:58 +02:00
parent 660156e166
commit 5356e3fa25

View file

@ -298,7 +298,52 @@ return view.extend({
]); ]);
}, },
interfaceWithIfnameSections: function() {
return uci.sections('network', 'interface').filter(function(ns) {
return ns.type == 'bridge' && !ns.ports && ns.ifname;
});
},
handleMigration: function(ev) {
var interfaces = this.interfaceWithIfnameSections();
var tasks = [];
interfaces.forEach(function(ns) {
var device_name = 'br-' + ns['.name'];
tasks.push(uci.callAdd('network', 'device', null, {
'name': device_name,
'type': 'bridge',
'ports': L.toArray(ns.ifname)
}));
tasks.push(uci.callSet('network', ns['.name'], {
'type': '',
'ifname': device_name
}));
});
return Promise.all(tasks)
.then(L.bind(ui.changes.init, ui.changes))
.then(L.bind(ui.changes.apply, ui.changes));
},
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('div', { 'class': 'right' },
E('button', {
'class': 'btn cbi-button-action important',
'click': ui.createHandlerFn(this, 'handleMigration')
}, _('Continue')))
]);
},
render: function(data) { render: function(data) {
if (this.interfaceWithIfnameSections().length)
return this.renderMigration();
var dslModemType = data[0], var dslModemType = data[0],
netDevs = data[1], netDevs = data[1],
m, s, o; m, s, o;