'require fs';
'require view';
'require uci';
+'require ui';
return view.extend({
load: function() {
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 _('Interfaces may not share the same name as configured members, policies or rules.');
+ }
+ }
+ if (v.length > 15) return _('Name length shall not exceed 15 characters');
+ return true;
+ }, 'blur', 'keyup');
+ return el;
+ };
+
o = s.option(form.Flag, 'enabled', _('Enabled'));
o.default = false;
'require form';
'require view';
'require uci';
+'require ui';
return view.extend({
load: function() {
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 _('Members may not share the same name as configured interfaces, policies or rules.');
+ }
+ }
+ if (v.length > 15) return _('Name length shall not exceed 15 characters');
+ return true;
+ }, 'blur', 'keyup');
+ return el;
+ };
+
o = s.option(form.ListValue, 'interface', _('Interface'));
var options = uci.sections('mwan3', 'interface')
for (var i = 0; i < options.length; i++) {
'require form';
'require view';
'require uci';
+'require ui';
return view.extend({
load: function() {
var 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 are profiles grouping one or more members controlling how Mwan3 distributes traffic.') + '<br />' +
+ _('Member interfaces with lower metrics are used first.') + '<br />' +
+ _('Member interfaces with the same metric will be load-balanced.') + '<br />' +
+ _('Load-balanced member interfaces distribute more traffic out those with higher weights.') + '<br />' +
+ _('Names may contain characters A-Z, a-z, 0-9, _ and no spaces.') + '<br />' +
+ _('Names must be 15 characters or less.') + '<br />' +
_('Policies may not share the same name as configured interfaces, members or rules'));
s = m.section(form.GridSection, 'policy');
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++) {
'require fs';
'require view';
'require uci';
+'require ui';
return view.extend({
load: function() {
s.nodescriptions = true;
s.sortable = 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 _('Rules may not share the same name as configured interfaces, members or policies.');
+ }
+ }
+ if (v.length > 15) return _('Name length shall not exceed 15 characters');
+ return true;
+ }, 'blur', 'keyup');
+ return el;
+ };
+
o = s.option(form.ListValue, 'family', _('Internet Protocol'));
o.default = '';
o.value('', _('IPv4 and IPv6'));