123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- 'use strict';
- 'require form';
- 'require network';
- 'require rpc';
- 'require tools.widgets as widgets';
- 'require view';
- var callHostHints = rpc.declare({
- object: 'luci-rpc',
- method: 'getHostHints',
- expect: { '': {} }
- });
- return view.extend({
- load: function() {
- return Promise.all([
- network.getNetworks(),
- callHostHints(),
- ]);
- },
- render: function (loaded_promises) {
- var m, s, o;
- const networks = loaded_promises[0];
- const hosts = loaded_promises[1];
- m = new form.Map('qos', _('Quality of Service'),
- _('With %s you can prioritize network traffic selected by addresses, ports or services.'.format('<abbr title=\"Quality of Service\">QoS</abbr>')));
- s = m.section(form.TypedSection, 'interface', _('Interfaces'));
- s.anonymous = false;
- s.addremove = true;
- o = s.option(form.Flag, 'enabled', _('Enable'));
- o = s.option(form.ListValue, 'classgroup', _('Classification group'));
- o.placeholder = 'Default';
- o.value('Default', _('default'));
- o.rmempty = true;
- o.depends({ enabled: '1' });
- o = s.option(form.Flag, 'overhead', _('Calculate overhead'));
- o.depends({ enabled: '1' });
- o = s.option(form.Flag, 'halfduplex', _('Half-duplex'));
- o.depends({ enabled: '1' });
- o = s.option(form.Value, 'download', _('Download speed (kbit/s)'));
- o.rmempty = true;
- o.placeholder = 1024;
- o.datatype = 'and(uinteger,min(1))';
- o.depends({ enabled: '1' });
- o = s.option(form.Value, 'upload', _('Upload speed (kbit/s)'));
- o.rmempty = true;
- o.placeholder = 128;
- o.datatype = 'and(uinteger,min(1))';
- o.depends({ enabled: '1' });
- s = m.section(form.TableSection, 'classify', _('Classification Rules'));
- s.anonymous = true;
- s.addremove = true;
- s.sortable = true;
- s.rowcolors = true;
- s.nodescriptions = true;
- o = s.option(form.ListValue, 'target', _('Target'));
- o.value('Priority', _('priority'));
- o.value('Express', _('express'));
- o.value('Normal', _('normal'));
- o.value('Low', _('low'));
- Object.values(L.uci.sections('qos', 'class')).forEach(function(val, index) {
- const n = val['.name'];
- if (!n.endsWith('_down'))
- o.value(n);
- });
- var ipaddrs = {};
- Object.keys(hosts).forEach(function(mac) {
- L.toArray(hosts[mac].ipaddrs || hosts[mac].ipv4).forEach(function(ip) {
- ipaddrs[ip] = mac;
- });
- L.toArray(hosts[mac].ip6addrs || hosts[mac].ipv6).forEach(function(ip) {
- ipaddrs[ip] = mac;
- });
- });
- o = s.option(form.Value, 'srchost', _('Source host'));
- o.rmempty = true;
- o.width = '15%';
- o.datatype = 'ipaddr';
- o.value('', _('all'));
- L.sortedKeys(ipaddrs, null, 'addr').forEach(function(ipv4) {
- o.value(ipv4, '%s (%s)'.format(ipv4, ipaddrs[ipv4]));
- });
- o = s.option(form.Value, 'dsthost', _('Destination host'));
- o.rmempty = true;
- o.width = '15%';
- o.datatype = 'ipaddr';
- o.value('', _('all'));
- L.sortedKeys(ipaddrs, null, 'addr').forEach(function(ipv4) {
- o.value(ipv4, '%s (%s)'.format(ipv4, ipaddrs[ipv4]));
- });
- o = s.option(form.Value, 'proto', _('Protocol'));
- o.rmempty = true;
- o.width = '15%';
- o.value('', _('all'));
- o.value('tcp');
- o.value('udp');
- o.value('icmp');
- o = s.option(form.Value, 'ports', _('Ports'));
- o.rmempty = true;
- o.width = '15%';
- o.value('', _('all'));
- o.validate = function(section, value) {
- if (!value) return true
- const valuesArray = value.split(',').map(v => v.trim());
- return valuesArray.every(v => Number.isInteger(Number(v)) && Number(v) > 0 && Number(v) < 65536);
- };
- o = s.option(form.Value, 'connbytes', _('Number of bytes'));
- o.datatype = 'uinteger';
- o.width = '5%';
- o = s.option(form.Value, 'comment', _('Comment'));
- o.rmempty = true;
- return m.render();
- }
- });
|