X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=modules%2Fadmin-full%2Fluasrc%2Fview%2Fadmin_status%2Findex.htm;h=cfeb91ac7ae342699b6efb20f9ecd55dbefb3c24;hp=f6432ef6f922c4720005409d3e8c419e18854555;hb=2aad24cec13cbc4765cbbc5502832184713b823f;hpb=fc84bd87ecbc0e077dc4e624b3139c7e3adb8b0f diff --git a/modules/admin-full/luasrc/view/admin_status/index.htm b/modules/admin-full/luasrc/view/admin_status/index.htm index f6432ef6f..cfeb91ac7 100644 --- a/modules/admin-full/luasrc/view/admin_status/index.htm +++ b/modules/admin-full/luasrc/view/admin_status/index.htm @@ -9,8 +9,6 @@ You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 -$Id$ - -%> <% @@ -21,24 +19,17 @@ $Id$ local has_dhcp = luci.fs.access("/etc/config/dhcp") local has_wifi = luci.fs.stat("/etc/config/wireless") has_wifi = has_wifi and has_wifi.size > 0 + local _, _, memtotal, memcached, membuffers, memfree, _, swaptotal, swapcached, swapfree = luci.sys.sysinfo() + local has_swap + if swaptotal > 0 then + has_swap = 1 + end + local has_dsl = luci.fs.stat("/etc/init.d/dsl_control") if luci.http.formvalue("status") == "1" then local ntm = require "luci.model.network".init() - local dr4 = luci.sys.net.defaultroute() - local dr6 = luci.sys.net.defaultroute6() - local wan, wan6 - - if dr4 and dr4.device then - wan = ntm:get_interface(dr4.device) - wan = wan and wan:get_network() - end - - if dr6 and dr6.device then - wan6 = ntm:get_interface(dr6.device) - wan6 = wan6 and wan6:get_network() - end - - local _, _, memtotal, memcached, membuffers, memfree = luci.sys.sysinfo() + local wan = ntm:get_wannet() + local wan6 = ntm:get_wan6net() local conn_count = tonumber(( luci.sys.exec("wc -l /proc/net/nf_conntrack") or @@ -58,9 +49,13 @@ $Id$ memcached = memcached, membuffers = membuffers, memfree = memfree, + swaptotal = swaptotal, + swapcached = swapcached, + swapfree = swapfree, connmax = conn_max, conncount = conn_count, leases = luci.tools.status.dhcp_leases(), + leases6 = luci.tools.status.dhcp6_leases(), wifinets = luci.tools.status.wifi_networks() } @@ -89,6 +84,12 @@ $Id$ } end + if has_dsl then + local dsl_stat = luci.sys.exec("/etc/init.d/dsl_control lucistat") + local dsl_func = loadstring(dsl_stat) + rv.dsl = dsl_func() + end + luci.http.prepare_content("application/json") luci.http.write_json(rv) @@ -119,350 +120,438 @@ $Id$ ); } - var iwxhr = new XHR(); var wifidevs = <%=luci.http.write_json(netdevs)%>; var arptable = <%=luci.http.write_json(arpcache)%>; - var update_status = function() { - iwxhr.get('<%=REQUEST_URI%>', { status: 1 }, - function(x, info) + XHR.poll(5, '<%=REQUEST_URI%>', { status: 1 }, + function(x, info) + { + var si = document.getElementById('wan4_i'); + var ss = document.getElementById('wan4_s'); + var ifc = info.wan; + + if (ifc && ifc.ifname && ifc.proto != 'none') { - var si = document.getElementById('wan4_i'); - var ss = document.getElementById('wan4_s'); - var ifc = info.wan; + 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' + ); + + for (var i = 0; i < ifc.dns.length; i++) + { + s += String.format( + '<%:DNS%> %d: %s
', + i + 1, ifc.dns[i] + ); + } - if (ifc && ifc.ifname && ifc.proto != 'none') + if (ifc.expires > -1) { - 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.ipaddr) ? ifc.netmask : '255.255.255.255', - (ifc.gwaddr) ? ifc.gwaddr : '0.0.0.0' + s += String.format( + '<%:Expires%>: %t
', + ifc.expires ); + } - for (var i = 0; i < ifc.dns.length; i++) - { - s += String.format( - '<%:DNS%> %d: %s
', - i + 1, ifc.dns[i] - ); - } + if (ifc.uptime > 0) + { + s += String.format( + '<%:Connected%>: %t
', + ifc.uptime + ); + } - if (ifc.expires > -1) - { - s += String.format( - '<%:Expires%>: %t
', - ifc.expires - ); - } + ss.innerHTML = String.format('%s', s); + si.innerHTML = String.format( + '' + + '
%s', + ifc.link, ifc.ifname + ); + } + else + { + si.innerHTML = '
?'; + ss.innerHTML = '<%:Not connected%>'; + } - if (ifc.uptime > 0) - { - s += String.format( - '<%:Connected%>: %t
', - ifc.uptime - ); - } + <% if has_ipv6 then %> + var si6 = document.getElementById('wan6_i'); + var ss6 = document.getElementById('wan6_s'); + var ifc6 = info.wan6; - ss.innerHTML = String.format('%s', s); - si.innerHTML = String.format( - '' + - '
%s', - ifc.link, ifc.ifname + if (ifc6 && ifc6.ifname && ifc6.proto != 'none') + { + var s = String.format( + '<%:Address%>: %s
' + + '<%:Gateway%>: %s
', + (ifc6.ip6addr) ? ifc6.ip6addr : '::', + (ifc6.gw6addr) ? ifc6.gw6addr : '::' + ); + + for (var i = 0; i < ifc6.dns.length; i++) + { + s += String.format( + '<%:DNS%> %d: %s
', + i + 1, ifc6.dns[i] ); } - else + + if (ifc6.uptime > 0) { - si.innerHTML = '
?'; - ss.innerHTML = 'Not connected'; + s += String.format( + '<%:Connected%>: %t
', + ifc6.uptime + ); } - <% if has_ipv6 then %> - var si6 = document.getElementById('wan6_i'); - var ss6 = document.getElementById('wan6_s'); - var ifc6 = info.wan6; + ss6.innerHTML = String.format('%s', s); + si6.innerHTML = String.format( + '' + + '
%s', + ifc6.link, ifc6.ifname + ); + } + else + { + si6.innerHTML = '
?'; + ss6.innerHTML = '<%:Not connected%>'; + } + <% end %> + + <% if has_dsl then %> + var dsl_i = document.getElementById('dsl_i'); + var dsl_s = document.getElementById('dsl_s'); + + var s = String.format( + '<%:Status%>: %s
' + + '<%:Line State%>: %s [0x%x]
' + + '<%:Line Speed%>: %s/s / %s/s
' + + '<%:Line Attenuation%>: %s dB / %s dB
' + + '<%:Noise Margin%>: %s dB / %s dB
', + info.dsl.line_state, info.dsl.line_state_detail, + info.dsl.line_state_num, + info.dsl.data_rate_down_s, info.dsl.data_rate_up_s, + info.dsl.line_attenuation_down, info.dsl.line_attenuation_up, + info.dsl.noise_margin_down, info.dsl.noise_margin_up + ); + + dsl_s.innerHTML = String.format('%s', s); + dsl_i.innerHTML = String.format( + '' + + '
ADSL' + ); + <% end %> + + <% if has_dhcp then %> + var ls = document.getElementById('lease_status_table'); + if (ls) + { + /* clear all rows */ + while( ls.rows.length > 1 ) + ls.rows[0].parentNode.deleteRow(1); - if (ifc6 && ifc6.ifname && ifc6.proto != 'none') + for( var i = 0; i < info.leases.length; i++ ) { - var s = String.format( - '<%:Address%>: %s
' + - '<%:Gateway%>: %s
', - (ifc6.ip6addr) ? ifc6.ip6addr : '::', - (ifc6.gw6addr) ? ifc6.gw6addr : '::' - ); + var timestr; - for (var i = 0; i < ifc6.dns.length; i++) - { - s += String.format( - '<%:DNS%> %d: %s
', - i + 1, ifc6.dns[i] - ); - } + if (info.leases[i].expires <= 0) + timestr = '<%:expired%>'; + else + timestr = String.format('%t', info.leases[i].expires); - if (ifc6.uptime > 0) - { - s += String.format( - '<%:Connected%>: %t
', - ifc6.uptime - ); - } + var tr = ls.rows[0].parentNode.insertRow(-1); + tr.className = 'cbi-section-table-row cbi-rowstyle-' + ((i % 2) + 1); - ss6.innerHTML = String.format('%s', s); - si6.innerHTML = String.format( - '' + - '
%s', - ifc6.link, ifc6.ifname - ); - } - else - { - si6.innerHTML = '
?'; - ss6.innerHTML = 'Not connected'; + tr.insertCell(-1).innerHTML = info.leases[i].hostname ? info.leases[i].hostname : '?'; + tr.insertCell(-1).innerHTML = info.leases[i].ipaddr; + tr.insertCell(-1).innerHTML = info.leases[i].macaddr; + tr.insertCell(-1).innerHTML = timestr; } - <% end %> - <% if has_dhcp then %> - var ls = document.getElementById('lease_status_table'); - if (ls) + if( ls.rows.length == 1 ) { - /* clear all rows */ - while( ls.rows.length > 1 ) - ls.rows[0].parentNode.deleteRow(1); + var tr = ls.rows[0].parentNode.insertRow(-1); + tr.className = 'cbi-section-table-row'; - for( var i = 0; i < info.leases.length; i++ ) - { - var timestr; + var td = tr.insertCell(-1); + td.colSpan = 4; + td.innerHTML = '
<%:There are no active leases.%>
'; + } + } - if (info.leases[i].expires <= 0) - timestr = '<%:expired%>'; - else - timestr = String.format('%t', info.leases[i].expires); + var ls6 = document.getElementById('lease6_status_table'); + if (ls6 && info.leases6) + { + ls6.parentNode.style.display = 'block'; - var tr = ls.rows[0].parentNode.insertRow(-1); - tr.className = 'cbi-section-table-row cbi-rowstyle-' + ((i % 2) + 1); + /* clear all rows */ + while( ls6.rows.length > 1 ) + ls6.rows[0].parentNode.deleteRow(1); - tr.insertCell(-1).innerHTML = info.leases[i].hostname ? info.leases[i].hostname : '?'; - tr.insertCell(-1).innerHTML = info.leases[i].ipaddr; - tr.insertCell(-1).innerHTML = info.leases[i].macaddr; - tr.insertCell(-1).innerHTML = timestr; - } + for( var i = 0; i < info.leases6.length; i++ ) + { + var timestr; - if( ls.rows.length == 1 ) - { - var tr = ls.rows[0].parentNode.insertRow(-1); - tr.className = 'cbi-section-table-row'; + if (info.leases6[i].expires <= 0) + timestr = '<%:expired%>'; + else + timestr = String.format('%t', info.leases6[i].expires); - var td = tr.insertCell(-1); - td.colSpan = 4; - td.innerHTML = '
<%:There are no active leases.%>
'; - } - } - <% end %> + var tr = ls6.rows[0].parentNode.insertRow(-1); + tr.className = 'cbi-section-table-row cbi-rowstyle-' + ((i % 2) + 1); - <% if has_wifi then %> - var assoclist = [ ]; + tr.insertCell(-1).innerHTML = info.leases6[i].hostname ? info.leases6[i].hostname : '?'; + tr.insertCell(-1).innerHTML = info.leases6[i].ip6addr; + tr.insertCell(-1).innerHTML = info.leases6[i].duid; + tr.insertCell(-1).innerHTML = timestr; + } - var ws = document.getElementById('wifi_status_table'); - if (ws) + if( ls6.rows.length == 1 ) { - var wsbody = ws.rows[0].parentNode; - while (ws.rows.length > 0) - wsbody.deleteRow(0); - - for (var didx = 0; didx < info.wifinets.length; didx++) - { - var dev = info.wifinets[didx]; + var tr = ls6.rows[0].parentNode.insertRow(-1); + tr.className = 'cbi-section-table-row'; - var tr = wsbody.insertRow(-1); - var td; - - td = tr.insertCell(-1); - td.width = "33%"; - td.innerHTML = dev.name; - td.style.verticalAlign = "top"; + var td = tr.insertCell(-1); + td.colSpan = 4; + td.innerHTML = '
<%:There are no active leases.%>
'; + } + } + <% end %> - td = tr.insertCell(-1); + <% if has_wifi then %> + var assoclist = [ ]; - var s = ''; + var ws = document.getElementById('wifi_status_table'); + if (ws) + { + var wsbody = ws.rows[0].parentNode; + while (ws.rows.length > 0) + wsbody.deleteRow(0); - for (var nidx = 0; nidx < dev.networks.length; nidx++) - { - var net = dev.networks[nidx]; - var is_assoc = (net.bssid != '00:00:00:00:00:00' && net.channel); - - var icon; - if (!is_assoc) - icon = "<%=resource%>/icons/signal-none.png"; - else if (net.quality == 0) - icon = "<%=resource%>/icons/signal-0.png"; - else if (net.quality < 25) - icon = "<%=resource%>/icons/signal-0-25.png"; - else if (net.quality < 50) - icon = "<%=resource%>/icons/signal-25-50.png"; - else if (net.quality < 75) - icon = "<%=resource%>/icons/signal-50-75.png"; - else - icon = "<%=resource%>/icons/signal-75-100.png"; + for (var didx = 0; didx < info.wifinets.length; didx++) + { + var dev = info.wifinets[didx]; - s += String.format( - '
' + - '' + - '
%d%%' + - '
' + - '<%:SSID%>: %h
' + - '<%:Mode%>: %s
' + - '<%:Channel%>: %d (%.2f GHz)
' + - '<%:Bitrate%>: %s Mb/s
', - icon, net.signal, net.noise, - net.quality, - net.link, net.ssid, - net.mode, - net.channel, net.frequency, - net.bitrate || '?' - ); + var tr = wsbody.insertRow(-1); + var td; - if (is_assoc) - { - s += String.format( - '<%:BSSID%>: %s
' + - '<%:Encryption%>: %s', - net.bssid, - net.encryption - ); - } - else - { - s += '<%:Wireless is disabled or not associated%>'; - } - - s += '
'; - - for (var bssid in net.assoclist) - { - assoclist.push({ - bssid: bssid, - signal: net.assoclist[bssid].signal, - noise: net.assoclist[bssid].noise, - link: net.link, - name: net.name - }); - } - } + td = tr.insertCell(-1); + td.width = "33%"; + td.innerHTML = dev.name; + td.style.verticalAlign = "top"; - if (!s) - s = '<%:No information available%>'; + td = tr.insertCell(-1); - td.innerHTML = s; - } - } + var s = ''; - var ac = document.getElementById('wifi_assoc_table'); - if (ac) - { - /* clear all rows */ - while( ac.rows.length > 1 ) - ac.rows[0].parentNode.deleteRow(1); - - assoclist.sort(function(a, b) { - return (a.name == b.name) - ? (a.bssid < b.bssid) - : (a.name > b.name ) - ; - }); - - for( var i = 0; i < assoclist.length; i++ ) + for (var nidx = 0; nidx < dev.networks.length; nidx++) { - var tr = ac.rows[0].parentNode.insertRow(-1); - tr.className = 'cbi-section-table-row cbi-rowstyle-' + (1 + (i % 2)); + var net = dev.networks[nidx]; + var is_assoc = (net.bssid != '00:00:00:00:00:00' && net.channel); var icon; - var q = (-1 * (assoclist[i].noise - assoclist[i].signal)) / 5; - if (q < 1) + if (!is_assoc) + icon = "<%=resource%>/icons/signal-none.png"; + else if (net.quality == 0) icon = "<%=resource%>/icons/signal-0.png"; - else if (q < 2) + else if (net.quality < 25) icon = "<%=resource%>/icons/signal-0-25.png"; - else if (q < 3) + else if (net.quality < 50) icon = "<%=resource%>/icons/signal-25-50.png"; - else if (q < 4) + else if (net.quality < 75) icon = "<%=resource%>/icons/signal-50-75.png"; else icon = "<%=resource%>/icons/signal-75-100.png"; - tr.insertCell(-1).innerHTML = String.format( - '', - icon, assoclist[i].signal, assoclist[i].noise + s += String.format( + '
' + + '' + + '
%d%%' + + '
' + + '<%:SSID%>: %h
' + + '<%:Mode%>: %s
' + + '<%:Channel%>: %d (%.3f <%:GHz%>)
' + + '<%:Bitrate%>: %s <%:Mbit/s%>
', + icon, net.signal, net.noise, + net.quality, + net.link, net.ssid, + net.mode, + net.channel, net.frequency, + net.bitrate || '?' ); - tr.insertCell(-1).innerHTML = assoclist[i].bssid; + if (is_assoc) + { + s += String.format( + '<%:BSSID%>: %s
' + + '<%:Encryption%>: %s', + net.bssid, + net.encryption + ); + } + else + { + s += '<%:Wireless is disabled or not associated%>'; + } - tr.insertCell(-1).innerHTML = String.format( - '%h', - assoclist[i].link, - assoclist[i].name - ); + s += '
'; - tr.insertCell(-1).innerHTML = String.format('%d dBm', assoclist[i].signal); - tr.insertCell(-1).innerHTML = String.format('%d dBm', assoclist[i].noise); + for (var bssid in net.assoclist) + { + assoclist.push({ + bssid: bssid, + signal: net.assoclist[bssid].signal, + noise: net.assoclist[bssid].noise, + rx_rate: net.assoclist[bssid].rx_rate, + rx_mcs: net.assoclist[bssid].rx_mcs, + rx_40mhz: net.assoclist[bssid].rx_40mhz, + tx_rate: net.assoclist[bssid].tx_rate, + tx_mcs: net.assoclist[bssid].tx_mcs, + tx_40mhz: net.assoclist[bssid].tx_40mhz, + link: net.link, + name: net.name + }); + } } - if (ac.rows.length == 0) - { - var tr = ac.rows[0].parentNode.insertRow(-1); - tr.className = 'cbi-section-table-row'; + if (!s) + s = '<%:No information available%>'; - var td = tr.insertCell(-1); - td.colSpan = 5; - td.innerHTML = '
<%:No information available%>'; - } + td.innerHTML = s; } - <% end %> - - var e; - - if (e = document.getElementById('localtime')) - e.innerHTML = info.localtime; + } - if (e = document.getElementById('uptime')) - e.innerHTML = String.format('%t', info.uptime); + var ac = document.getElementById('wifi_assoc_table'); + if (ac) + { + /* clear all rows */ + while( ac.rows.length > 1 ) + ac.rows[0].parentNode.deleteRow(1); + + assoclist.sort(function(a, b) { + return (a.name == b.name) + ? (a.bssid < b.bssid) + : (a.name > b.name ) + ; + }); + + for( var i = 0; i < assoclist.length; i++ ) + { + var tr = ac.rows[0].parentNode.insertRow(-1); + tr.className = 'cbi-section-table-row cbi-rowstyle-' + (1 + (i % 2)); + + var icon; + var q = (-1 * (assoclist[i].noise - assoclist[i].signal)) / 5; + if (q < 1) + icon = "<%=resource%>/icons/signal-0.png"; + else if (q < 2) + icon = "<%=resource%>/icons/signal-0-25.png"; + else if (q < 3) + icon = "<%=resource%>/icons/signal-25-50.png"; + else if (q < 4) + icon = "<%=resource%>/icons/signal-50-75.png"; + else + icon = "<%=resource%>/icons/signal-75-100.png"; + + tr.insertCell(-1).innerHTML = String.format( + '', + icon, assoclist[i].signal, assoclist[i].noise + ); - if (e = document.getElementById('loadavg')) - e.innerHTML = String.format('%.02f, %.02f, %.02f', - info.loadavg[0], info.loadavg[1], info.loadavg[2]); + tr.insertCell(-1).innerHTML = assoclist[i].bssid; - if (e = document.getElementById('memtotal')) - e.innerHTML = progressbar( - (info.memfree + info.membuffers + info.memcached) + " kB", - info.memtotal + " kB" + tr.insertCell(-1).innerHTML = String.format( + '%s', + assoclist[i].link, + '%h'.format(assoclist[i].name).nobr() ); - if (e = document.getElementById('memfree')) - e.innerHTML = progressbar( - info.memfree + " kB", info.memtotal + " kB" - ); + tr.insertCell(-1).innerHTML = String.format('%d <%:dBm%>', assoclist[i].signal).nobr(); + tr.insertCell(-1).innerHTML = String.format('%d <%:dBm%>', assoclist[i].noise).nobr(); - if (e = document.getElementById('memcache')) - e.innerHTML = progressbar( - info.memcached + " kB", info.memtotal + " kB" - ); + tr.insertCell(-1).innerHTML = (assoclist[i].rx_mcs > -1) + ? String.format('%.1f <%:Mbit/s%>, MCS %d, %d<%:MHz%>', assoclist[i].rx_rate / 1000, assoclist[i].rx_mcs, assoclist[i].rx_40mhz ? 40 : 20).nobr() + : String.format('%.1f <%:Mbit/s%>', assoclist[i].rx_rate / 1000).nobr() + ; - if (e = document.getElementById('membuff')) - e.innerHTML = progressbar( - info.membuffers + " kB", info.memtotal + " kB" - ); + tr.insertCell(-1).innerHTML = (assoclist[i].tx_mcs > -1) + ? String.format('%.1f <%:Mbit/s%>, MCS %d, %d<%:MHz%>', assoclist[i].tx_rate / 1000, assoclist[i].tx_mcs, assoclist[i].tx_40mhz ? 40 : 20).nobr() + : String.format('%.1f <%:Mbit/s%>', assoclist[i].tx_rate / 1000).nobr() + ; + } - if (e = document.getElementById('conns')) - e.innerHTML = progressbar(info.conncount, info.connmax); + if (ac.rows.length == 1) + { + var tr = ac.rows[0].parentNode.insertRow(-1); + tr.className = 'cbi-section-table-row'; - window.setTimeout(update_status, 5000); + var td = tr.insertCell(-1); + td.colSpan = 7; + td.innerHTML = '
<%:No information available%>'; + } } - ) - }; + <% end %> + + var e; + + if (e = document.getElementById('localtime')) + e.innerHTML = info.localtime; - update_status(); + if (e = document.getElementById('uptime')) + e.innerHTML = String.format('%t', info.uptime); + + if (e = document.getElementById('loadavg')) + e.innerHTML = String.format('%.02f, %.02f, %.02f', + info.loadavg[0], info.loadavg[1], info.loadavg[2]); + + if (e = document.getElementById('memtotal')) + e.innerHTML = progressbar( + (info.memfree + info.membuffers + info.memcached) + " <%:kB%>", + info.memtotal + " <%:kB%>" + ); + + if (e = document.getElementById('memfree')) + e.innerHTML = progressbar( + info.memfree + " <%:kB%>", info.memtotal + " <%:kB%>" + ); + + if (e = document.getElementById('memcache')) + e.innerHTML = progressbar( + info.memcached + " <%:kB%>", info.memtotal + " <%:kB%>" + ); + + if (e = document.getElementById('membuff')) + e.innerHTML = progressbar( + info.membuffers + " <%:kB%>", info.memtotal + " <%:kB%>" + ); + + if (e = document.getElementById('swapcache')) + e.innerHTML = progressbar( + info.swapcached + " <%:kB%>", info.swaptotal + " <%:kB%>" + ); + + if (e = document.getElementById('swaptotal')) + e.innerHTML = progressbar( + (info.swapfree + info.swapcached) + " <%:kB%>", + info.swaptotal + " <%:kB%>" + ); + + if (e = document.getElementById('swapfree')) + e.innerHTML = progressbar( + info.swapfree + " <%:kB%>", info.swaptotal + " <%:kB%>" + ); + + if (e = document.getElementById('conns')) + e.innerHTML = progressbar(info.conncount, info.connmax); + + } + ); //]]>

<%:Status%>

@@ -471,11 +560,11 @@ $Id$ <%:System%> - - + + @@ -495,6 +584,18 @@ $Id$
<%:Router Name%><%=luci.sys.hostname() or "?"%>
<%:Router Model%><%=pcdata(model or "?")%>
<%:Hostname%><%=luci.sys.hostname() or "?"%>
<%:Model%><%=pcdata(model or "?")%>
<%:Firmware Version%> <%=pcdata(luci.version.distname)%> <%=pcdata(luci.version.distversion)%> / - <%=pcdata(luci.version.luciname)%> <%=pcdata(luci.version.luciversion)%> + <%=pcdata(luci.version.luciname)%> (<%=pcdata(luci.version.luciversion)%>)
<%:Kernel Version%><%=luci.sys.exec("uname -r")%>
<%:Local Time%>-
+<% if has_swap then %> +
+ <%:Swap%> + + + + + +
<%:Total Available%>-
<%:Free%>-
<%:Cached%>-
+
+<% end %> +
<%:Network%> @@ -513,7 +614,7 @@ $Id$ <% end %> - <%:Active IP Connections%>- + <%:Active Connections%>-
@@ -533,6 +634,36 @@ $Id$ + + +<% end %> + +<% if has_dsl then %> +
+ <%:ADSL%> + + +
<%:ADSL Status%> + + + +

?
<%:Collecting data...%>
+
+
<% end %> <% if has_wifi then %> @@ -550,13 +681,15 @@ $Id$ - + + + - +
 <%:BSSID%><%:MAC-Address%> <%:Network%> <%:Signal%> <%:Noise%><%:RX Rate%><%:TX Rate%>

<%:Collecting data...%>

<%:Collecting data...%>