'use strict';
'require form';
'require view';
'require uci';
'require ui';
return view.extend({
load: function() {
return Promise.all([
uci.load('mwan3')
]);
},
render: function () {
let m, s, o;
m = new form.Map('mwan3', _('MultiWAN Manager - Policies'),
_('Policies are profiles grouping one or more members controlling how Mwan3 distributes traffic.') + '
' +
_('Member interfaces with lower metrics are used first.') + '
' +
_('Member interfaces with the same metric will be load-balanced.') + '
' +
_('Load-balanced member interfaces distribute more traffic out those with higher weights.') + '
' +
_('Names may contain characters A-Z, a-z, 0-9, _ and no spaces.') + '
' +
_('Names must be 15 characters or less.') + '
' +
_('Policies may not share the same name as configured interfaces, members or rules'));
s = m.section(form.GridSection, 'policy');
s.addremove = true;
s.anonymous = false;
s.nodescriptions = true;
/* This name length error check can likely be removed when mwan3 migrates to nftables */
s.renderSectionAdd = function(extra_class) {
var el = form.GridSection.prototype.renderSectionAdd.apply(this, arguments),
nameEl = el.querySelector('.cbi-section-create-name');
ui.addValidator(nameEl, 'uciname', true, function(v) {
let sections = [
...uci.sections('mwan3', 'interface'),
...uci.sections('mwan3', 'member'),
...uci.sections('mwan3', 'policy'),
...uci.sections('mwan3', 'rule')
];
for (let j = 0; j < sections.length; j++) {
if (sections[j]['.name'] == v) {
return _('Policies may not share the same name as configured interfaces, members or rules');
}
}
if (v.length > 15) return _('Name length shall not exceed 15 characters');
return true;
}, 'blur', 'keyup');
return el;
};
o = s.option(form.DynamicList, 'use_member', _('Member used'));
var options = uci.sections('mwan3', 'member')
for (var i = 0; i < options.length; i++) {
var value = options[i]['.name'];
o.value(value);
}
o = s.option(form.ListValue, 'last_resort', _('Last resort'),
_('When all policy members are offline use this behavior for matched traffic'));
o.default = 'unreachable';
o.value('unreachable', _('unreachable (reject)'));
o.value('blackhole', _('blackhole (drop)'));
o.value('default', _('default (use main routing table)'));
return m.render();
}
})