diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/index.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/index.htm
index d22445b018..73e5516bf5 100644
--- a/modules/luci-mod-admin-full/luasrc/view/admin_status/index.htm
+++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/index.htm
@@ -6,6 +6,7 @@
<%
local fs = require "nixio.fs"
+ local ipc = require "luci.ip"
local util = require "luci.util"
local stat = require "luci.tools.status"
local ver = require "luci.version"
@@ -58,6 +59,8 @@
}
if wan then
+ local dev = wan:get_interface()
+ local link = dev and ipc.link(dev:name())
rv.wan = {
ipaddr = wan:ipaddr(),
gwaddr = wan:gwaddr(),
@@ -66,12 +69,19 @@
expires = wan:expires(),
uptime = wan:uptime(),
proto = wan:proto(),
+ i18n = wan:get_i18n(),
ifname = wan:ifname(),
- link = wan:adminlink()
+ link = wan:adminlink(),
+ mac = dev and dev:mac(),
+ type = dev and dev:type(),
+ name = dev and dev:get_i18n(),
+ ether = link and link.type == 1
}
end
if wan6 then
+ local dev = wan6:get_interface()
+ local link = dev and ipc.link(dev:name())
rv.wan6 = {
ip6addr = wan6:ip6addr(),
gw6addr = wan6:gw6addr(),
@@ -79,8 +89,13 @@
ip6prefix = wan6:ip6prefix(),
uptime = wan6:uptime(),
proto = wan6:proto(),
+ i18n = wan6:get_i18n(),
ifname = wan6:ifname(),
- link = wan6:adminlink()
+ link = wan6:adminlink(),
+ mac = dev and dev:mac(),
+ type = dev and dev:type(),
+ name = dev and dev:get_i18n(),
+ ether = link and link.type == 1
}
end
@@ -164,133 +179,95 @@
});
}
+ function labelList(items, offset) {
+ var rv = [ ];
+
+ for (var i = offset || 0; i < items.length; i += 2) {
+ var label = items[i],
+ value = items[i+1];
+
+ if (value === undefined || value === null)
+ continue;
+
+ if (label)
+ rv.push(E('strong', [label, ': ']));
+
+ rv.push(value, E('br'));
+ }
+
+ return rv;
+ }
+
+ function renderBox(title, active, childs) {
+ childs = childs || [];
+ childs.unshift(E('span', labelList(arguments, 3)));
+
+ return E('div', { class: 'ifacebox' }, [
+ E('div', { class: 'ifacebox-head center ' + (active ? 'active' : '') },
+ E('strong', title)),
+ E('div', { class: 'ifacebox-body' }, childs)
+ ]);
+ }
+
+ function renderBadge(icon, title) {
+ return E('span', { class: 'ifacebadge' }, [
+ E('img', { src: icon, title: title || '' }),
+ E('span', labelList(arguments, 2))
+ ]);
+ }
+
XHR.poll(5, '<%=REQUEST_URI%>', { status: 1 },
function(x, info)
{
if (!(npoll++ % 5))
updateHosts();
- var si = document.getElementById('wan4_i');
- var ss = document.getElementById('wan4_s');
- var ifc = info.wan;
+ var us = document.getElementById('upstream_status_table');
- if (ifc && ifc.ifname && ifc.proto != 'none')
- {
- var s = String.format(
- '<%:Type%>: %s
' +
- '<%:Address%>: %s
' +
- '<%:Netmask%>: %s
' +
- '<%:Gateway%>: %s
',
- ifc.proto,
- (ifc.ipaddr) ? ifc.ipaddr : '0.0.0.0',
- (ifc.netmask && ifc.netmask != ifc.ipaddr) ? ifc.netmask : '255.255.255.255',
- (ifc.gwaddr) ? ifc.gwaddr : '0.0.0.0'
- );
+ while (us.lastElementChild)
+ us.removeChild(us.lastElementChild);
- for (var i = 0; i < ifc.dns.length; i++)
- {
- s += String.format(
- '<%:DNS%> %d: %s
',
- i + 1, ifc.dns[i]
- );
- }
+ var ifc = info.wan || {};
- if (ifc.expires > -1)
- {
- s += String.format(
- '<%:Expires%>: %t
',
- ifc.expires
- );
- }
-
- if (ifc.uptime > 0)
- {
- s += String.format(
- '<%:Connected%>: %t
',
- ifc.uptime
- );
- }
-
- ss.innerHTML = String.format('%s', s);
- si.innerHTML = String.format(
- '
' +
- '
%s',
- ifc.link, ifc.ifname
- );
- }
- else
- {
- si.innerHTML = '![]()
?';
- ss.innerHTML = '<%:Not connected%>';
- }
+ us.appendChild(renderBox(
+ '<%:IPv4 Upstream%>',
+ (ifc.ifname && ifc.proto != 'none'),
+ [ renderBadge(
+ '<%=resource%>/icons/%s.png'.format((ifc && ifc.type) ? ifc.type : 'ethernet_disabled'), null,
+ '<%:Device%>', ifc ? (ifc.name || ifc.ifname || '-') : '-',
+ '<%:MAC-Address%>', (ifc && ifc.ether) ? ifc.mac : null) ],
+ '<%:Protocol%>', ifc.i18n || E('em', '<%:Not connected%>'),
+ '<%:Address%>', (ifc.ipaddr) ? ifc.ipaddr : '0.0.0.0',
+ '<%:Netmask%>', (ifc.netmask && ifc.netmask != ifc.ipaddr) ? ifc.netmask : '255.255.255.255',
+ '<%:Gateway%>', (ifc.gwaddr) ? ifc.gwaddr : '0.0.0.0',
+ '<%:DNS%> 1', (ifc.dns) ? ifc.dns[0] : null,
+ '<%:DNS%> 2', (ifc.dns) ? ifc.dns[1] : null,
+ '<%:DNS%> 3', (ifc.dns) ? ifc.dns[2] : null,
+ '<%:DNS%> 4', (ifc.dns) ? ifc.dns[3] : null,
+ '<%:DNS%> 5', (ifc.dns) ? ifc.dns[4] : null,
+ '<%:Expires%>', (ifc.expires > -1) ? '%t'.format(ifc.expires) : null,
+ '<%:Connected%>', (ifc.uptime > 0) ? '%t'.format(ifc.uptime) : null));
<% if has_ipv6 then %>
- var si6 = document.getElementById('wan6_i');
- var ss6 = document.getElementById('wan6_s');
- var ifc6 = info.wan6;
+ var ifc6 = info.wan6 || {};
- if (ifc6 && ifc6.ifname && ifc6.proto != 'none')
- {
- var s = String.format(
- '<%:Type%>: %s%s
',
- ifc6.proto, (ifc6.ip6prefix) ? '-pd' : ''
- );
-
- if (!ifc6.ip6prefix)
- {
- s += String.format(
- '<%:Address%>: %s
',
- (ifc6.ip6addr) ? ifc6.ip6addr : '::'
- );
- }
- else
- {
- s += String.format(
- '<%:Prefix Delegated%>: %s
',
- ifc6.ip6prefix
- );
- if (ifc6.ip6addr)
- {
- s += String.format(
- '<%:Address%>: %s
',
- ifc6.ip6addr
- );
- }
- }
-
- s += String.format(
- '<%:Gateway%>: %s
',
- (ifc6.gw6addr) ? ifc6.gw6addr : '::'
- );
-
- for (var i = 0; i < ifc6.dns.length; i++)
- {
- s += String.format(
- '<%:DNS%> %d: %s
',
- i + 1, ifc6.dns[i]
- );
- }
-
- if (ifc6.uptime > 0)
- {
- s += String.format(
- '<%:Connected%>: %t
',
- ifc6.uptime
- );
- }
-
- ss6.innerHTML = String.format('%s', s);
- si6.innerHTML = String.format(
- '
' +
- '
%s',
- ifc6.link, ifc6.ifname
- );
- }
- else
- {
- si6.innerHTML = '![]()
?';
- ss6.innerHTML = '<%:Not connected%>';
- }
+ us.appendChild(renderBox(
+ '<%:IPv6 Upstream%>',
+ (ifc6.ifname && ifc6.proto != 'none'),
+ [ renderBadge(
+ '<%=resource%>/icons/%s.png'.format(ifc6.type || 'ethernet_disabled'), null,
+ '<%:Device%>', ifc6 ? (ifc6.name || ifc6.ifname || '-') : '-',
+ '<%:MAC-Address%>', (ifc6 && ifc6.ether) ? ifc6.mac : null) ],
+ '<%:Protocol%>', ifc6.i18n ? (ifc6.i18n + (ifc6.proto === 'dhcp' && ifc6.ip6prefix ? '-PD' : '')) : E('em', '<%:Not connected%>'),
+ '<%:Prefix Delegated%>', ifc6.ip6prefix,
+ '<%:Address%>', (ifc6.ip6prefix) ? (ifc6.ip6addr || null) : (ifc6.ipaddr || '::'),
+ '<%:Gateway%>', (ifc6.gw6addr) ? ifc6.gw6addr : '::',
+ '<%:DNS%> 1', (ifc6.dns) ? ifc6.dns[0] : null,
+ '<%:DNS%> 2', (ifc6.dns) ? ifc6.dns[1] : null,
+ '<%:DNS%> 3', (ifc6.dns) ? ifc6.dns[2] : null,
+ '<%:DNS%> 4', (ifc6.dns) ? ifc6.dns[3] : null,
+ '<%:DNS%> 5', (ifc6.dns) ? ifc6.dns[4] : null,
+ '<%:Connected%>', (ifc6.uptime > 0) ? '%t'.format(ifc6.uptime) : null));
<% end %>
<% if has_dsl then %>
@@ -417,11 +394,11 @@
hint = host.name;
}
- ls6.appendChild(E('