mirror of
https://github.com/Ysurac/openmptcprouter-feeds.git
synced 2025-03-09 15:40:03 +00:00
Update luci-mod-network from OpenWRT
This commit is contained in:
parent
c12e49844e
commit
ad7ecd87e2
6 changed files with 1375 additions and 398 deletions
|
@ -198,7 +198,7 @@ var cbiFlagTristate = form.ListValue.extend({
|
|||
this.vallist[0] = sysdef ? _('automatic (enabled)') : _('automatic (disabled)');
|
||||
}
|
||||
|
||||
return this.super('renderWidget', [section_id, option_index, cfgvalue]);
|
||||
return this.super('renderWidget', [section_id, option_index, cfgvalue ? cfgvalue + '!' : null]);
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -364,6 +364,64 @@ var cbiTagValue = form.Value.extend({
|
|||
});
|
||||
|
||||
return baseclass.extend({
|
||||
|
||||
protocols: [ // name, proto number, description
|
||||
{ n: 'hopopt', i: 0, d: 'HOPOPT' },
|
||||
{ n: 'icmp', i: 1, d: 'ICMP' },
|
||||
{ n: 'igmp', i: 2, d: 'IGMP' },
|
||||
{ n: 'ggp', i: 3, d: 'GGP' },
|
||||
{ n: 'ipencap', i: 4, d: 'IP-ENCAP' },
|
||||
{ n: 'st', i: 5, d: 'ST' },
|
||||
{ n: 'tcp', i: 6, d: 'TCP' },
|
||||
{ n: 'egp', i: 8, d: 'EGP' },
|
||||
{ n: 'igp', i: 9, d: 'IGP' },
|
||||
{ n: 'pup', i: 12, d: 'PUP' },
|
||||
{ n: 'udp', i: 17, d: 'UDP' },
|
||||
{ n: 'hmp', i: 20, d: 'HMP' },
|
||||
{ n: 'xns-idp', i: 22, d: 'XNS-IDP' },
|
||||
{ n: 'rdp', i: 27, d: 'RDP' },
|
||||
{ n: 'iso-tp4', i: 29, d: 'ISO-TP4' },
|
||||
{ n: 'dccp', i: 33, d: 'DCCP' },
|
||||
{ n: 'xtp', i: 36, d: 'XTP' },
|
||||
{ n: 'ddp', i: 37, d: 'DDP' },
|
||||
{ n: 'idpr-cmtp', i: 38, d: 'IDPR-CMTP' },
|
||||
{ n: 'ipv6', i: 41, d: 'IPv6' },
|
||||
{ n: 'ipv6-route', i: 43, d: 'IPv6-Route' },
|
||||
{ n: 'ipv6-frag', i: 44, d: 'IPv6-Frag' },
|
||||
{ n: 'idrp', i: 45, d: 'IDRP' },
|
||||
{ n: 'rsvp', i: 46, d: 'RSVP' },
|
||||
{ n: 'gre', i: 47, d: 'GRE' },
|
||||
{ n: 'esp', i: 50, d: 'IPSEC-ESP' },
|
||||
{ n: 'ah', i: 51, d: 'IPSEC-AH' },
|
||||
{ n: 'skip', i: 57, d: 'SKIP' },
|
||||
{ n: 'icmpv6', i: 58, d: 'IPv6-ICMP' },
|
||||
{ n: 'ipv6-nonxt', i: 59, d: 'IPv6-NoNxt' },
|
||||
{ n: 'ipv6-opts', i: 60, d: 'IPv6-Opts' },
|
||||
{ n: 'rspf', i: 73, d: 'CPHB' },
|
||||
{ n: 'vmtp', i: 81, d: 'VMTP' },
|
||||
{ n: 'eigrp', i: 88, d: 'EIGRP' },
|
||||
{ n: 'ospf', i: 89, d: 'OSPFIGP' },
|
||||
{ n: 'ax.25', i: 93, d: 'AX.25' },
|
||||
{ n: 'ipip', i: 94, d: 'IPIP' },
|
||||
{ n: 'etherip', i: 97, d: 'ETHERIP' },
|
||||
{ n: 'encap', i: 98, d: 'ENCAP' },
|
||||
{ n: 'pim', i: 103, d: 'PIM' },
|
||||
{ n: 'ipcomp', i: 108, d: 'IPCOMP' },
|
||||
{ n: 'vrrp', i: 112, d: 'VRRP' },
|
||||
{ n: 'l2tp', i: 115, d: 'L2TP' },
|
||||
{ n: 'isis', i: 124, d: 'ISIS' },
|
||||
{ n: 'sctp', i: 132, d: 'SCTP' },
|
||||
{ n: 'fc', i: 133, d: 'FC' },
|
||||
{ n: 'mobility-header', i: 135, d: 'Mobility-Header' },
|
||||
{ n: 'udplite', i: 136, d: 'UDPLite' },
|
||||
{ n: 'mpls-in-ip', i: 137, d: 'MPLS-in-IP' },
|
||||
{ n: 'manet', i: 138, d: 'MANET' },
|
||||
{ n: 'hip', i: 139, d: 'HIP' },
|
||||
{ n: 'shim6', i: 140, d: 'Shim6' },
|
||||
{ n: 'wesp', i: 141, d: 'WESP' },
|
||||
{ n: 'rohc', i: 142, d: 'ROHC' },
|
||||
],
|
||||
|
||||
replaceOption: function(s, tabName, optionClass, optionName, optionTitle, optionDescription) {
|
||||
var o = s.getOption(optionName);
|
||||
|
||||
|
@ -392,16 +450,21 @@ return baseclass.extend({
|
|||
s.tab('brport', _('Bridge port specific options'));
|
||||
s.tab('bridgevlan', _('Bridge VLAN filtering'));
|
||||
|
||||
o = this.replaceOption(s, 'devgeneral', form.ListValue, 'type', _('Device type'));
|
||||
o = this.replaceOption(s, 'devgeneral', form.ListValue, 'type', _('Device type'),
|
||||
!L.hasSystemFeature('bonding') && isNew ? '<a href="' + L.url("admin", "system", "package-manager", "?query=kmod-bonding") + '">'+
|
||||
_('For bonding, install %s').format('<code>kmod-bonding</code>') + '</a>' : null);
|
||||
o.readonly = !isNew;
|
||||
o.value('', _('Network device'));
|
||||
if (L.hasSystemFeature('bonding')) {
|
||||
o.value('bonding', _('Bonding/Aggregation device'));
|
||||
}
|
||||
o.value('bridge', _('Bridge device'));
|
||||
o.value('8021q', _('VLAN (802.1q)'));
|
||||
o.value('8021ad', _('VLAN (802.1ad)'));
|
||||
o.value('macvlan', _('MAC VLAN'));
|
||||
o.value('veth', _('Virtual Ethernet'));
|
||||
o.validate = function(section_id, value) {
|
||||
if (value == 'bridge' || value == 'veth')
|
||||
if (value == 'bonding' || value == 'bridge' || value == 'veth')
|
||||
updatePlaceholders(this.section.getOption('name_complex'), section_id);
|
||||
|
||||
return true;
|
||||
|
@ -519,7 +582,397 @@ return baseclass.extend({
|
|||
o.depends('type', '8021q');
|
||||
o.depends('type', '8021ad');
|
||||
|
||||
o = this.replaceOption(s, 'devgeneral', widgets.DeviceSelect, 'ifname_multi', _('Bridge ports'));
|
||||
o = this.replaceOption(s, 'devgeneral', widgets.DeviceSelect, 'ifname_multi-bond', _('Aggregation ports'));
|
||||
o.size = 10;
|
||||
o.rmempty = true;
|
||||
o.multiple = true;
|
||||
o.noaliases = true;
|
||||
o.nobridges = true;
|
||||
o.ucioption = 'ports';
|
||||
o.default = L.toArray(dev ? dev.getPorts() : null).filter(function(p) { return p.getType() != 'wifi' }).map(function(p) { return p.getName() });
|
||||
o.filter = function(section_id, device_name) {
|
||||
var bridge_name = uci.get('network', section_id, 'name'),
|
||||
choice_dev = network.instantiateDevice(device_name),
|
||||
parent_dev = choice_dev.getParent();
|
||||
|
||||
/* only show wifi networks which are already present in "option ifname" */
|
||||
if (choice_dev.getType() == 'wifi') {
|
||||
var ifnames = L.toArray(uci.get('network', section_id, 'ports'));
|
||||
|
||||
for (var i = 0; i < ifnames.length; i++)
|
||||
if (ifnames[i] == device_name)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return (!parent_dev || parent_dev.getName() != bridge_name);
|
||||
};
|
||||
o.description = _('Specifies the wired ports to attach to this bonding.')
|
||||
o.onchange = function(ev, section_id, values) {
|
||||
ss.updatePorts(values);
|
||||
|
||||
return ss.parse().then(function() {
|
||||
ss.redraw();
|
||||
});
|
||||
};
|
||||
o.depends('type', 'bonding');
|
||||
|
||||
o = this.replaceOption(s, 'devgeneral', form.ListValue, 'policy', _('Bonding Policy'));
|
||||
o.default = 'active-backup';
|
||||
o.value('active-backup', _('Active backup'));
|
||||
o.value('balance-rr', _('Round robin'));
|
||||
o.value('balance-xor', _('Transmit hash - balance-xor'));
|
||||
o.value('broadcast', _('Broadcast'));
|
||||
o.value('802.3ad', _('LACP - 802.3ad'));
|
||||
o.value('balance-tlb', _('Adaptive transmit load balancing'));
|
||||
o.value('balance-alb', _('Adaptive load balancing'));
|
||||
o.cfgvalue = function(/* ... */) {
|
||||
var val = form.ListValue.prototype.cfgvalue.apply(this, arguments);
|
||||
|
||||
switch (val || '') {
|
||||
case 'active-backup':
|
||||
case '0':
|
||||
return 'active-backup';
|
||||
|
||||
case 'balance-rr':
|
||||
case '1':
|
||||
return 'balance-rr';
|
||||
|
||||
case 'balance-xor':
|
||||
case '2':
|
||||
return 'balance-xor';
|
||||
|
||||
case 'broadcast':
|
||||
case '3':
|
||||
return 'broadcast';
|
||||
|
||||
case '802.3ad':
|
||||
case '4':
|
||||
return '802.3ad';
|
||||
|
||||
case 'balance-tlb':
|
||||
case '5':
|
||||
return 'balance-tlb';
|
||||
|
||||
case 'balance-alb':
|
||||
case '6':
|
||||
return 'balance-alb';
|
||||
|
||||
default:
|
||||
return 'active-backup';
|
||||
}
|
||||
};
|
||||
o.depends('type', 'bonding');
|
||||
|
||||
o = this.replaceOption(s, 'devgeneral', form.Flag, 'all_ports_active', _('All ports active'), _('Allow receiving on inactive ports'));
|
||||
o.default = o.disabled;
|
||||
o.depends('type', 'bonding');
|
||||
|
||||
o = this.replaceOption(s, 'devgeneral', widgets.DeviceSelect, '_net_device_primary', _('Primary Device'));
|
||||
o.ucioption = 'primary';
|
||||
o.rmempty = true;
|
||||
o.noaliases = true;
|
||||
o.nobridges = true;
|
||||
o.optional = false;
|
||||
o.depends({'type': 'bonding', 'policy': 'active-backup'});
|
||||
|
||||
o = this.replaceOption(s, 'devadvanced', form.ListValue, 'xmit_hash_policy', _('Slave selection hash policy'));
|
||||
o.default = '';
|
||||
o.value('', '');
|
||||
o.value('layer2', _('Layer 2'));
|
||||
o.value('layer2+3', _('Layer 2+3'));
|
||||
o.value('layer3+4', _('Layer 3+4'));
|
||||
o.value('encap2+3', _('Encap 2+3'));
|
||||
o.value('encap3+4', _('Encap 3+4'));
|
||||
o.cfgvalue = function(/* ... */) {
|
||||
var val = form.ListValue.prototype.cfgvalue.apply(this, arguments);
|
||||
|
||||
switch (val || '') {
|
||||
case 'layer2':
|
||||
case '0':
|
||||
return 'layer2';
|
||||
|
||||
case 'layer2+3':
|
||||
case '1':
|
||||
return 'layer2+3';
|
||||
|
||||
case 'layer3+4':
|
||||
case '2':
|
||||
return 'layer3+4';
|
||||
|
||||
case 'encap2+3':
|
||||
case '4':
|
||||
return 'encap2+3';
|
||||
|
||||
case 'encap3+4':
|
||||
case '5':
|
||||
return 'encap3+4';
|
||||
|
||||
default:
|
||||
return '';
|
||||
}
|
||||
};
|
||||
o.depends({'type': 'bonding', 'policy': 'balance-xor'});
|
||||
o.depends({'type': 'bonding', 'policy': '802.3ad'});
|
||||
o.depends({'type': 'bonding', 'policy': 'balance-tlb'});
|
||||
|
||||
o = this.replaceOption(s, 'devadvanced', form.Value, 'ad_actor_system', _('MAC address for LACPDUs'));
|
||||
o.description = _('This specifies the mac-address for the actor in protocol packet exchanges (LACPDUs). The value cannot be NULL or multicast.');
|
||||
o.datatype = 'macaddr';
|
||||
o.depends({'type': 'bonding', 'policy': '802.3ad'});
|
||||
|
||||
o = this.replaceOption(s, 'devadvanced', form.Value, 'ad_actor_sys_prio', _('Priority'));
|
||||
o.description = _('This specifies the AD system priority');
|
||||
o.placeholder = '65535';
|
||||
o.datatype = 'range(1, 65535)';
|
||||
o.depends({'type': 'bonding', 'policy': '802.3ad'});
|
||||
|
||||
o = this.replaceOption(s, 'devadvanced', form.ListValue, 'ad_select', _('802.3ad aggregation logic'));
|
||||
o.default = '';
|
||||
o.value('', '');
|
||||
o.value('stable', _('Stable'));
|
||||
o.value('bandwidth', _('Bandwidth'));
|
||||
o.value('count', _('Count'));
|
||||
o.cfgvalue = function(/* ... */) {
|
||||
var val = form.ListValue.prototype.cfgvalue.apply(this, arguments);
|
||||
|
||||
switch (val || '') {
|
||||
case 'stable':
|
||||
case '0':
|
||||
return 'stable';
|
||||
|
||||
case 'bandwidth':
|
||||
case '1':
|
||||
return 'bandwidth';
|
||||
|
||||
case 'count':
|
||||
case '2':
|
||||
return 'count';
|
||||
|
||||
default:
|
||||
return '';
|
||||
}
|
||||
};
|
||||
o.depends({'type': 'bonding', 'policy': '802.3ad'});
|
||||
|
||||
o = this.replaceOption(s, 'devadvanced', form.ListValue, 'lacp_rate', _('802.3ad LACPDU packet rate'));
|
||||
o.default = '';
|
||||
o.value('', '');
|
||||
o.value('slow', _('Slow (every 30 seconds)'));
|
||||
o.value('fast', _('Fast (every second)'));
|
||||
o.cfgvalue = function(/* ... */) {
|
||||
var val = form.ListValue.prototype.cfgvalue.apply(this, arguments);
|
||||
|
||||
switch (val || '') {
|
||||
case 'slow':
|
||||
case '0':
|
||||
return 'slow';
|
||||
|
||||
case 'fast':
|
||||
case '1':
|
||||
return 'fast';
|
||||
|
||||
default:
|
||||
return '';
|
||||
}
|
||||
};
|
||||
o.depends({'type': 'bonding', 'policy': '802.3ad'});
|
||||
|
||||
o = this.replaceOption(s, 'devadvanced', form.Value, 'min_links', _('Min Links'), _('Minimum number of active links'));
|
||||
o.placeholder = '1';
|
||||
o.datatype = 'uinteger';
|
||||
o.depends({'type': 'bonding', 'policy': '802.3ad'});
|
||||
|
||||
o = this.replaceOption(s, 'devadvanced', form.Value, 'packets_per_slave', _('Packets per slave'));
|
||||
o.description = _('Number of packets to transmit through a slave before moving to the next one. Slave is chosen at random when 0.');
|
||||
o.placeholder = '1';
|
||||
o.datatype = 'range(1, 65535)';
|
||||
o.depends({'type': 'bonding', 'policy': 'balance-rr'});
|
||||
|
||||
o = this.replaceOption(s, 'devadvanced', form.Value, 'lp_interval', _('Learning packets Interval'));
|
||||
o.description = _('Number of seconds between sent learning packets');
|
||||
o.placeholder = '1';
|
||||
o.datatype = 'uinteger';
|
||||
o.depends({'type': 'bonding', 'policy': 'balance-tlb'});
|
||||
o.depends({'type': 'bonding', 'policy': 'balance-alb'});
|
||||
|
||||
o = this.replaceOption(s, 'devgeneral', form.Flag, 'dynamic_lb', _('Dynamic load balance'), _('distribute traffic according to port load'));
|
||||
o.default = o.disabled;
|
||||
o.depends({'type': 'bonding', 'policy': 'balance-tlb'});
|
||||
|
||||
o = this.replaceOption(s, 'devadvanced', form.Value, 'resend_igmp', _('IGMP reports'));
|
||||
o.description = _('Specifies the number of IGMP membership reports to be issued after a failover event');
|
||||
o.placeholder = '1';
|
||||
o.datatype = 'range(0, 255)';
|
||||
o.depends('type', 'bonding');
|
||||
|
||||
o = this.replaceOption(s, 'devadvanced', form.Value, 'num_peer_notif', _('Peer notifications'));
|
||||
o.description = _('Specify the number of peer notifications to be issued after a failover event.');
|
||||
o.placeholder = '1';
|
||||
o.datatype = 'range(0, 255)';
|
||||
o.depends('type', 'bonding');
|
||||
|
||||
o = this.replaceOption(s, 'devadvanced', form.ListValue, 'primary_reselect', _('Primary port reselection policy'));
|
||||
o.default = '';
|
||||
o.value('', '');
|
||||
o.value('always', _('Always'));
|
||||
o.value('better', _('Better'));
|
||||
o.value('failure', _('Failure'));
|
||||
o.cfgvalue = function(/* ... */) {
|
||||
var val = form.ListValue.prototype.cfgvalue.apply(this, arguments);
|
||||
|
||||
switch (val || '') {
|
||||
case 'always':
|
||||
case '0':
|
||||
return 'always';
|
||||
|
||||
case 'better':
|
||||
case '1':
|
||||
return 'better';
|
||||
|
||||
case 'failure':
|
||||
case '2':
|
||||
return 'failure';
|
||||
|
||||
default:
|
||||
return 'always';
|
||||
}
|
||||
};
|
||||
o.depends('type', 'bonding');
|
||||
|
||||
o = this.replaceOption(s, 'devadvanced', form.ListValue, 'failover_mac', _('MAC address selection policy'));
|
||||
o.default = '';
|
||||
o.value('none', _('none'));
|
||||
o.value('active', _('Active'));
|
||||
o.value('follow', _('Follow'));
|
||||
o.cfgvalue = function(/* ... */) {
|
||||
var val = form.ListValue.prototype.cfgvalue.apply(this, arguments);
|
||||
|
||||
switch (val || '') {
|
||||
case 'none':
|
||||
case '0':
|
||||
return 'none';
|
||||
|
||||
case 'active':
|
||||
case '1':
|
||||
return 'active';
|
||||
|
||||
case 'follow':
|
||||
case '2':
|
||||
return 'follow';
|
||||
|
||||
default:
|
||||
return 'none';
|
||||
}
|
||||
};
|
||||
o.depends('type', 'bonding');
|
||||
|
||||
o = this.replaceOption(s, 'devadvanced', form.ListValue, 'monitor_mode', _('Link monitoring mode'),
|
||||
!L.hasSystemFeature('mii_tool') ? '<a href="' + L.url("admin", "system", "package-manager", "?query=mii-tool") + '">'+
|
||||
_('Install %s').format('<code>mii-tool</code>') + '</a>' : null);
|
||||
o.default = '';
|
||||
o.value('arp', _('ARP link monitoring'));
|
||||
o.value('mii', _('MII link monitoring'));
|
||||
o.cfgvalue = function(/* ... */) {
|
||||
var val = form.ListValue.prototype.cfgvalue.apply(this, arguments);
|
||||
|
||||
switch (val || '') {
|
||||
case 'arp':
|
||||
case '1':
|
||||
return 'arp';
|
||||
|
||||
case 'mii':
|
||||
case '2':
|
||||
return 'mii';
|
||||
|
||||
default:
|
||||
return 'mii';
|
||||
}
|
||||
};
|
||||
o.depends('type', 'bonding');
|
||||
|
||||
o = this.replaceOption(s, 'devadvanced', form.Value, 'monitor_interval', _('Monitor Interval'));
|
||||
o.description = _('Specifies the link monitoring frequency in milliseconds');
|
||||
o.placeholder = '100';
|
||||
o.datatype = 'uinteger';
|
||||
o.depends('type', 'bonding');
|
||||
|
||||
o = this.replaceOption(s, 'devadvanced', form.DynamicList, 'arp_target', _('ARP monitor target IP address'));
|
||||
o.datatype = 'ipaddr';
|
||||
o.depends({'type': 'bonding', 'monitor_mode': 'arp'});
|
||||
|
||||
o = this.replaceOption(s, 'devgeneral', form.Flag, 'arp_all_targets', _('All ARP Targets'), _('All ARP targets must be reachable to consider the link valid'));
|
||||
o.default = o.disabled;
|
||||
o.depends({'type': 'bonding', 'monitor_mode': 'arp'});
|
||||
|
||||
o = this.replaceOption(s, 'devadvanced', form.ListValue, 'arp_validate', _('ARP validation policy'));
|
||||
o.default = '';
|
||||
o.value('none', _('None'));
|
||||
o.value('active', _('Active'));
|
||||
o.value('backup', _('Backup'));
|
||||
o.value('all', _('All'));
|
||||
o.value('filter', _('Filter'));
|
||||
o.value('filter_active', _('Filter active'));
|
||||
o.value('filter_backup', _('Filter backup'));
|
||||
o.cfgvalue = function(/* ... */) {
|
||||
var val = form.ListValue.prototype.cfgvalue.apply(this, arguments);
|
||||
|
||||
switch (val || '') {
|
||||
case 'none':
|
||||
case '0':
|
||||
return 'none';
|
||||
|
||||
case 'active':
|
||||
case '1':
|
||||
return 'active';
|
||||
|
||||
case 'backup':
|
||||
case '2':
|
||||
return 'backup';
|
||||
|
||||
case 'all':
|
||||
case '3':
|
||||
return 'all';
|
||||
|
||||
case 'filter':
|
||||
case '4':
|
||||
return 'filter';
|
||||
|
||||
case 'filter_active':
|
||||
case '5':
|
||||
return 'filter_active';
|
||||
|
||||
case 'filter_backup':
|
||||
case '6':
|
||||
return 'filter_backup';
|
||||
|
||||
default:
|
||||
return 'none';
|
||||
}
|
||||
};
|
||||
o.depends({'type': 'bonding', 'policy': 'balance-rr' , 'monitor_mode': 'arp'});
|
||||
o.depends({'type': 'bonding', 'policy': 'active-backup' , 'monitor_mode': 'arp'});
|
||||
o.depends({'type': 'bonding', 'policy': 'balance-xor' , 'monitor_mode': 'arp'});
|
||||
o.depends({'type': 'bonding', 'policy': 'broadcast' , 'monitor_mode': 'arp'});
|
||||
|
||||
o = this.replaceOption(s, 'devadvanced', form.Flag, 'use_carrier', _('Use Carrier'), _('Use carrier status instead of MII result'));
|
||||
o.default = o.disabled;
|
||||
o.depends({'type': 'bonding', 'monitor_mode': 'mii'});
|
||||
|
||||
o = this.replaceOption(s, 'devadvanced', form.Value, 'updelay', _('Monitor link-up delay'));
|
||||
o.description = _('Delay before enabling port after MII link up event (msec)');
|
||||
o.placeholder = '0';
|
||||
o.datatype = 'uinteger';
|
||||
o.depends({'type': 'bonding', 'monitor_mode': 'mii'});
|
||||
|
||||
o = this.replaceOption(s, 'devadvanced', form.Value, 'downdelay', _('Monitor link-down delay'));
|
||||
o.description = _('Delay before enabling port after MII link down event (msec)');
|
||||
o.placeholder = '0';
|
||||
o.datatype = 'uinteger';
|
||||
o.depends({'type': 'bonding', 'monitor_mode': 'mii'});
|
||||
|
||||
o = this.replaceOption(s, 'devgeneral', widgets.DeviceSelect, 'ifname_multi-bridge', _('Bridge ports'));
|
||||
o.size = 10;
|
||||
o.rmempty = true;
|
||||
o.multiple = true;
|
||||
|
@ -673,9 +1126,6 @@ return baseclass.extend({
|
|||
o.placeholder = dev ? dev._devstate('qlen') : '';
|
||||
o.datatype = 'uinteger';
|
||||
|
||||
o = this.replaceOption(s, 'devadvanced', form.Flag, 'promisc', _('Enable promiscuous mode'));
|
||||
o.default = o.disabled;
|
||||
|
||||
o = this.replaceOption(s, 'devadvanced', form.Flag, 'autoneg', _('Autonegociation'));
|
||||
o.default = o.enabled;
|
||||
|
||||
|
@ -708,6 +1158,9 @@ return baseclass.extend({
|
|||
o.value('full', _('full'));
|
||||
o.depends('autoneg', '0');
|
||||
|
||||
o = this.replaceOption(s, 'devadvanced', cbiFlagTristate, 'promisc', _('Enable promiscuous mode'));
|
||||
o.sysfs_default = (dev && dev.dev && dev.dev.flags) ? dev.dev.flags.promisc : null;
|
||||
|
||||
o = this.replaceOption(s, 'devadvanced', form.ListValue, 'rpfilter', _('Reverse path filter'));
|
||||
o.default = '';
|
||||
o.value('', _('disabled'));
|
||||
|
@ -736,7 +1189,7 @@ return baseclass.extend({
|
|||
o = this.replaceOption(s, 'devadvanced', cbiFlagTristate, 'sendredirects', _('Send ICMP redirects'));
|
||||
o.sysfs = '/proc/sys/net/ipv4/conf/%s/send_redirects'.format(devname || 'default');
|
||||
|
||||
o = this.replaceOption(s, 'devadvanced', cbiFlagTristate, 'arp_accept ', _('Honor gratuitous ARP'), _('When enabled, new ARP table entries are added from received gratuitous APR requests or replies, otherwise only preexisting table entries are updated, but no new hosts are learned.'));
|
||||
o = this.replaceOption(s, 'devadvanced', cbiFlagTristate, 'arp_accept', _('Honor gratuitous ARP'), _('When enabled, new ARP table entries are added from received gratuitous ARP requests or replies, otherwise only preexisting table entries are updated, but no new hosts are learned.'));
|
||||
o.sysfs = '/proc/sys/net/ipv4/conf/%s/arp_accept'.format(devname || 'default');
|
||||
|
||||
o = this.replaceOption(s, 'devadvanced', cbiFlagTristate, 'drop_gratuitous_arp', _('Drop gratuitous ARP'), _('Drop all gratuitous ARP frames, for example if there’s a known good ARP proxy on the network and such frames need not be used or in the case of 802.11, must not be used to prevent attacks.'));
|
||||
|
@ -760,8 +1213,6 @@ return baseclass.extend({
|
|||
|
||||
o = this.replaceOption(s, 'devgeneral', cbiFlagTristate, 'ipv6', _('Enable IPv6'));
|
||||
o.sysfs = '!/proc/sys/net/ipv6/conf/%s/disable_ipv6'.format(devname || 'default');
|
||||
o.migrate = false;
|
||||
//o.default = o.enabled;
|
||||
|
||||
o = this.replaceOption(s, 'devadvanced', cbiFlagTristate, 'ip6segmentrouting', _('Enable IPv6 segment routing'));
|
||||
o.sysfs = '/proc/sys/net/ipv6/conf/%s/seg6_enabled'.format(devname || 'default');
|
||||
|
@ -798,7 +1249,6 @@ return baseclass.extend({
|
|||
o.depends('multicast', /1/);
|
||||
|
||||
if (isBridgePort(dev)) {
|
||||
o = this.replaceOption(s, 'brport', form.Flag, 'learning', _('Enable MAC address learning'));
|
||||
o = this.replaceOption(s, 'brport', cbiFlagTristate, 'learning', _('Enable MAC address learning'));
|
||||
o.sysfs = '/sys/class/net/%s/brport/learning'.format(devname || 'default');
|
||||
|
||||
|
@ -958,6 +1408,15 @@ return baseclass.extend({
|
|||
}, this));
|
||||
};
|
||||
|
||||
ss.handleRemove = function(section_id) {
|
||||
this.map.data.remove('network', section_id);
|
||||
s.map.addedVLANs = (s.map.addedVLANs || []).filter(function(sid) {
|
||||
return sid != section_id;
|
||||
});
|
||||
|
||||
return this.redraw();
|
||||
};
|
||||
|
||||
o = ss.option(form.Value, 'vlan', _('VLAN ID'));
|
||||
o.datatype = 'range(1, 4094)';
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue