local wan = ntm:get_wannet()
local wan6 = ntm:get_wan6net()
- local conn_count = tonumber((
- luci.sys.exec("wc -l /proc/net/nf_conntrack") or
- luci.sys.exec("wc -l /proc/net/ip_conntrack") or
- ""):match("%d+")) or 0
+ local conn_count = tonumber(
+ fs.readfile("/proc/sys/net/netfilter/nf_conntrack_count") or "") or 0
- local conn_max = tonumber((
- luci.sys.exec("sysctl net.nf_conntrack_max") or
- luci.sys.exec("sysctl net.ipv4.netfilter.ip_conntrack_max") or
- ""):match("%d+")) or 4096
+ local conn_max = tonumber(luci.sys.exec(
+ "sysctl -n -e net.nf_conntrack_max net.ipv4.netfilter.ip_conntrack_max"
+ ):match("%d+")) or 4096
local rv = {
uptime = sysinfo.uptime or 0,
if wan6 then
rv.wan6 = {
- ip6addr = wan6:ip6addr(),
- gw6addr = wan6:gw6addr(),
- dns = wan6:dns6addrs(),
- uptime = wan6:uptime(),
- ifname = wan6:ifname(),
- link = wan6:adminlink()
+ ip6addr = wan6:ip6addr(),
+ gw6addr = wan6:gw6addr(),
+ dns = wan6:dns6addrs(),
+ ip6prefix = wan6:ip6prefix(),
+ uptime = wan6:uptime(),
+ proto = wan6:proto(),
+ ifname = wan6:ifname(),
+ link = wan6:adminlink()
}
end
return duid.substr(16).replace(/(..)(?=..)/g, '$1:').toUpperCase();
// DUID-LL / Ethernet
- if (duid.length === 24 && duid.substr(0, 8) === '00030001')
+ if (duid.length === 20 && duid.substr(0, 8) === '00030001')
return duid.substr(8).replace(/(..)(?=..)/g, '$1:').toUpperCase();
return null;
if (ifc6 && ifc6.ifname && ifc6.proto != 'none')
{
var s = String.format(
- '<strong><%:Address%>: </strong>%s<br />' +
+ '<strong><%:Type%>: </strong>%s%s<br />',
+ ifc6.proto, (ifc6.ip6prefix) ? '-pd' : ''
+ );
+
+ if (!ifc6.ip6prefix)
+ {
+ s += String.format(
+ '<strong><%:Address%>: </strong>%s<br />',
+ (ifc6.ip6addr) ? ifc6.ip6addr : '::'
+ );
+ }
+ else
+ {
+ s += String.format(
+ '<strong><%:Prefix Delegated%>: </strong>%s<br />',
+ ifc6.ip6prefix
+ );
+ if (ifc6.ip6addr)
+ {
+ s += String.format(
+ '<strong><%:Address%>: </strong>%s<br />',
+ ifc6.ip6addr
+ );
+ }
+ }
+
+ s += String.format(
'<strong><%:Gateway%>: </strong>%s<br />',
- (ifc6.ip6addr) ? ifc6.ip6addr : '::',
(ifc6.gw6addr) ? ifc6.gw6addr : '::'
);
var s = String.format(
'<strong><%:Status%>: </strong>%s<br />' +
'<strong><%:Line State%>: </strong>%s [0x%x]<br />' +
- '<strong><%:Line Speed%>: </strong>%s/s / %s/s<br />' +
- '<strong><%:Line Attenuation%>: </strong>%s dB / %s dB<br />' +
- '<strong><%:Noise Margin%>: </strong>%s dB / %s dB<br />',
+ '<strong><%:Line Mode%>: </strong>%s<br />' +
+ '<strong><%:Annex%>: </strong>%s<br />' +
+ '<strong><%:Profile%>: </strong>%s<br />' +
+ '<strong><%:Data Rate%>: </strong>%s/s / %s/s<br />' +
+ '<strong><%:Max. Attainable Data Rate (ATTNDR)%>: </strong>%s/s / %s/s<br />' +
+ '<strong><%:Latency%>: </strong>%s / %s<br />' +
+ '<strong><%:Line Attenuation (LATN)%>: </strong>%s dB / %s dB<br />' +
+ '<strong><%:Signal Attenuation (SATN)%>: </strong>%s dB / %s dB<br />' +
+ '<strong><%:Noise Margin (SNR)%>: </strong>%s dB / %s dB<br />' +
+ '<strong><%:Aggregate Transmit Power(ACTATP)%>: </strong>%s dB / %s dB<br />' +
+ '<strong><%:Forward Error Correction Seconds (FECS)%>: </strong>%s / %s<br />' +
+ '<strong><%:Errored seconds (ES)%>: </strong>%s / %s<br />' +
+ '<strong><%:Severely Errored Seconds (SES)%>: </strong>%s / %s<br />' +
+ '<strong><%:Loss of Signal Seconds (LOSS)%>: </strong>%s / %s<br />' +
+ '<strong><%:Unavailable Seconds (UAS)%>: </strong>%s / %s<br />' +
+ '<strong><%:Header Error Code Errors (HEC)%>: </strong>%s / %s<br />' +
+ '<strong><%:Non Pre-emtive CRC errors (CRC_P)%>: </strong>%s / %s<br />' +
+ '<strong><%:Pre-emtive CRC errors (CRCP_P)%>: </strong>%s / %s<br />' +
+ '<strong><%:Line Uptime%>: </strong>%s<br />' +
+ '<strong><%:ATU-C System Vendor ID%>: </strong>%s<br />' +
+ '<strong><%:Power Management Mode%>: </strong>%s<br />',
info.dsl.line_state, info.dsl.line_state_detail,
info.dsl.line_state_num,
+ info.dsl.line_mode_s,
+ info.dsl.annex_s,
+ info.dsl.profile_s,
info.dsl.data_rate_down_s, info.dsl.data_rate_up_s,
+ info.dsl.max_data_rate_down_s, info.dsl.max_data_rate_up_s,
+ info.dsl.latency_num_down, info.dsl.latency_num_up,
info.dsl.line_attenuation_down, info.dsl.line_attenuation_up,
- info.dsl.noise_margin_down, info.dsl.noise_margin_up
+ info.dsl.signal_attenuation_down, info.dsl.signal_attenuation_up,
+ info.dsl.noise_margin_down, info.dsl.noise_margin_up,
+ info.dsl.actatp_down, info.dsl.actatp_up,
+ info.dsl.errors_fec_near, info.dsl.errors_fec_far,
+ info.dsl.errors_es_near, info.dsl.errors_es_far,
+ info.dsl.errors_ses_near, info.dsl.errors_ses_far,
+ info.dsl.errors_loss_near, info.dsl.errors_loss_far,
+ info.dsl.errors_uas_near, info.dsl.errors_uas_far,
+ info.dsl.errors_hec_near, info.dsl.errors_hec_far,
+ info.dsl.errors_crc_p_near, info.dsl.errors_crc_p_far,
+ info.dsl.errors_crcp_p_near, info.dsl.errors_crcp_p_far,
+ info.dsl.line_uptime_s,
+ info.dsl.atuc_vendor_id,
+ info.dsl.power_mode_s
);
dsl_s.innerHTML = String.format('<small>%s</small>', s);
{
var timestr;
- if (info.leases[i].expires <= 0)
+ if (info.leases[i].expires === false)
+ timestr = '<em><%:unlimited%></em>';
+ else if (info.leases[i].expires <= 0)
timestr = '<em><%:expired%></em>';
else
timestr = String.format('%t', info.leases[i].expires);
{
var timestr;
- if (info.leases6[i].expires <= 0)
+ if (info.leases6[i].expires === false)
+ timestr = '<em><%:unlimited%></em>';
+ else if (info.leases6[i].expires <= 0)
timestr = '<em><%:expired%></em>';
else
timestr = String.format('%t', info.leases6[i].expires);
tr.className = 'cbi-section-table-row cbi-rowstyle-' + ((i % 2) + 1);
var host = hosts[duid2mac(info.leases6[i].duid)];
- if (host)
- tr.insertCell(-1).innerHTML = String.format(
- '<div style="max-width:200px;overflow:hidden;text-overflow:ellipsis">%s</div>',
- ((host.name && (host.ipv4 || host.ipv6))
- ? '%h (%s)'.format(host.name, host.ipv4 || host.ipv6)
- : '%h'.format(host.name || host.ipv4 || host.ipv6)).nobr()
- );
+ if (!info.leases6[i].hostname)
+ tr.insertCell(-1).innerHTML =
+ (host && (host.name || host.ipv4 || host.ipv6))
+ ? '<div style="max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap">? (%h)</div>'.format(host.name || host.ipv4 || host.ipv6)
+ : '?';
else
- tr.insertCell(-1).innerHTML = info.leases6[i].hostname ? info.leases6[i].hostname : '?';
+ tr.insertCell(-1).innerHTML =
+ (host && host.name && info.leases6[i].hostname != host.name)
+ ? '<div style="max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap">%h (%h)</div>'.format(info.leases6[i].hostname, host.name)
+ : info.leases6[i].hostname;
tr.insertCell(-1).innerHTML = info.leases6[i].ip6addr;
tr.insertCell(-1).innerHTML = info.leases6[i].duid;
'<strong><%:Bitrate%>:</strong> %s <%:Mbit/s%><br />',
icon, net.signal, net.noise,
net.quality,
- net.link, net.ssid,
+ net.link, net.ssid || '?',
net.mode,
net.channel, net.frequency,
net.bitrate || '?'
s += String.format(
'<strong><%:BSSID%>:</strong> %s<br />' +
'<strong><%:Encryption%>:</strong> %s',
- net.bssid,
+ net.bssid || '?',
net.encryption
);
}