Cosmetics admin-access page
[tomato.git] / release / src / router / www / status-overview.asp
blob2eb42a4827bdef45123d9509e272fc2dd147020b
1 <!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0//EN'>
2 <!--
3 Tomato GUI
4 Copyright (C) 2006-2010 Jonathan Zarate
5 http://www.polarcloud.com/tomato/
7 Tomato VLAN GUI
8 Copyright (C) 2011 Augusto Bott
9 http://code.google.com/p/tomato-sdhc-vlan/
11 For use with Tomato Firmware only.
12 No part of this file may be used without permission.
13 -->
14 <html>
15 <head>
16 <meta http-equiv='content-type' content='text/html;charset=utf-8'>
17 <meta name='robots' content='noindex,nofollow'>
18 <title>[<% ident(); %>] Status: Overview</title>
19 <link rel='stylesheet' type='text/css' href='tomato.css'>
20 <% css(); %>
21 <script type='text/javascript' src='tomato.js'></script>
22 <script type='text/javascript' src='interfaces.js'></script>
24 <!-- / / / -->
26 <style type='text/css'>
27 .controls {
28 width: 90px;
29 margin-top: 5px;
30 margin-bottom: 10px;
32 </style>
34 <script type='text/javascript' src='debug.js'></script>
36 <script type='text/javascript'>
38 // <% nvstat(); %>
39 // <% etherstates(); %>
40 // <% anonupdate(); %>
42 wmo = {'ap':'Access Point','sta':'Wireless Client','wet':'Wireless Ethernet Bridge','wds':'WDS'};
43 auth = {'disabled':'-','wep':'WEP','wpa_personal':'WPA Personal (PSK)','wpa_enterprise':'WPA Enterprise','wpa2_personal':'WPA2 Personal (PSK)','wpa2_enterprise':'WPA2 Enterprise','wpaX_personal':'WPA / WPA2 Personal','wpaX_enterprise':'WPA / WPA2 Enterprise','radius':'Radius'};
44 enc = {'tkip':'TKIP','aes':'AES','tkip+aes':'TKIP / AES'};
45 bgmo = {'disabled':'-','mixed':'Auto','b-only':'B Only','g-only':'G Only','bg-mixed':'B/G Mixed','lrs':'LRS','n-only':'N Only'};
46 </script>
48 <script type='text/javascript' src='wireless.jsx?_http_id=<% nv(http_id); %>'></script>
49 <script type='text/javascript' src='status-data.jsx?_http_id=<% nv(http_id); %>'></script>
51 <script type='text/javascript'>
52 show_dhcpc = ((nvram.wan_proto == 'dhcp') || (nvram.wan_proto == 'lte') || (((nvram.wan_proto == 'l2tp') || (nvram.wan_proto == 'pptp')) && (nvram.pptp_dhcp == '1')));
53 show_codi = ((nvram.wan_proto == 'pppoe') || (nvram.wan_proto == 'l2tp') || (nvram.wan_proto == 'pptp') || (nvram.wan_proto == 'ppp3g'));
55 show_radio = [];
56 for (var uidx = 0; uidx < wl_ifaces.length; ++uidx) {
57 /* REMOVE-BEGIN
58 // show_radio.push((nvram['wl'+wl_unit(uidx)+'_radio'] == '1'));
59 REMOVE-END */
60 if (wl_sunit(uidx)<0)
61 show_radio.push((nvram['wl'+wl_fface(uidx)+'_radio'] == '1'));
64 nphy = features('11n');
66 function dhcpc(what)
68 form.submitHidden('dhcpc.cgi', { exec: what, _redirect: 'status-overview.asp' });
71 function serv(service, sleep)
73 form.submitHidden('service.cgi', { _service: service, _redirect: 'status-overview.asp', _sleep: sleep });
76 function wan_connect()
78 serv('wan-restart', 5);
81 function wan_disconnect()
83 serv('wan-stop', 2);
86 function wlenable(uidx, n)
88 form.submitHidden('wlradio.cgi', { enable: '' + n, _nextpage: 'status-overview.asp', _nextwait: n ? 6 : 3, _wl_unit: wl_unit(uidx) });
91 var ref = new TomatoRefresh('status-data.jsx', '', 0, 'status_overview_refresh');
93 ref.refresh = function(text)
95 stats = {};
96 try {
97 eval(text);
99 catch (ex) {
100 stats = {};
102 show();
106 function c(id, htm)
108 E(id).cells[1].innerHTML = htm;
111 function ethstates()
113 port = etherstates.port0;
114 if (port == "disabled") { return 0; }
116 var state, state1, state2;
117 var code = '<div class="section-title">Ethernet Ports State</div>';
118 code += '<table class="fields"><tr><td class="title indent2"><center><b>WAN</b></center></td><td class="title indent2"><!-- empty space --></td><td class="title indent2"><center><b>LAN 1</b></center></td><td class="title indent2"><center><b>LAN 2</b></center></td><td class="title indent2"><center><b>LAN 3</b></center></td><td class="title indent2"><center><b>LAN 4</b></center></td><tr>';
120 if (port == "DOWN") {
121 state = '<img id="eth_off" src="eth_off.png"><br>';
122 state2 = port.replace("DOWN","Unplugged");
123 } else if ((port == "1000FD") || (port == "1000HD")) {
124 state = '<img id="eth_1000" src="eth_1000.gif"><br>';
125 state1 = port.replace("HD","M Half");
126 state2 = state1.replace("FD","M Full");
127 } else {
128 state = '<img id="eth_100" src="eth_100.gif"><br>';
129 state1 = port.replace("HD","M Half");
130 state2 = state1.replace("FD","M Full");
132 if (stats.lan_desc == '1') {
133 code += '<td class="title indent2"><center>' + state + state2 + '</center></td>';
134 } else {
135 code += '<td class="title indent2"><center>' + state + '</center></td>';
138 code += '<td class="title indent2"><!-- empty space --></td>';
140 port = etherstates.port1;
141 if (port == "DOWN") {
142 state = '<img id="eth_off" src="eth_off.png"><br>';
143 state2 = port.replace("DOWN","Unplugged");
144 } else if ((port == "1000FD") || (port == "1000HD")) {
145 state = '<img id="eth_1000" src="eth_1000.gif"><br>';
146 state1 = port.replace("HD","M Half");
147 state2 = state1.replace("FD","M Full");
148 } else {
149 state = '<img id="eth_100" src="eth_100.gif"><br>';
150 state1 = port.replace("HD","M Half");
151 state2 = state1.replace("FD","M Full");
153 if (stats.lan_desc == '1') {
154 code += '<td class="title indent2"><center>' + state + state2 + '</center></td>';
155 } else {
156 code += '<td class="title indent2"><center>' + state + '</center></td>';
159 port = etherstates.port2;
160 if (port == "DOWN") {
161 state = '<img id="eth_off" src="eth_off.png"><br>';
162 state2 = port.replace("DOWN","Unplugged");
163 } else if ((port == "1000FD") || (port == "1000HD")) {
164 state = '<img id="eth_1000" src="eth_1000.gif"><br>';
165 state1 = port.replace("HD","M Half");
166 state2 = state1.replace("FD","M Full");
167 } else {
168 state = '<img id="eth_100" src="eth_100.gif"><br>';
169 state1 = port.replace("HD","M Half");
170 state2 = state1.replace("FD","M Full");
172 if (stats.lan_desc == '1') {
173 code += '<td class="title indent2"><center>' + state + state2 + '</center></td>';
174 } else {
175 code += '<td class="title indent2"><center>' + state + '</center></td>';
178 port = etherstates.port3;
179 if (port == "DOWN") {
180 state = '<img id="eth_off" src="eth_off.png"><br>';
181 state2 = port.replace("DOWN","Unplugged");
182 } else if ((port == "1000FD") || (port == "1000HD")) {
183 state = '<img id="eth_1000" src="eth_1000.gif"><br>';
184 state1 = port.replace("HD","M Half");
185 state2 = state1.replace("FD","M Full");
186 } else {
187 state = '<img id="eth_100" src="eth_100.gif"><br>';
188 state1 = port.replace("HD","M Half");
189 state2 = state1.replace("FD","M Full");
191 if (stats.lan_desc == '1') {
192 code += '<td class="title indent2"><center>' + state + state2 + '</center></td>';
193 } else {
194 code += '<td class="title indent2"><center>' + state + '</center></td>';
197 port = etherstates.port4;
198 if (port == "DOWN") {
199 state = '<img id="eth_off" src="eth_off.png"><br>';
200 state2 = port.replace("DOWN","Unplugged");
201 } else if ((port == "1000FD") || (port == "1000HD")) {
202 state = '<img id="eth_1000" src="eth_1000.gif"><br>';
203 state1 = port.replace("HD","M Half");
204 state2 = state1.replace("FD","M Full");
205 } else {
206 state = '<img id="eth_100" src="eth_100.gif"><br>';
207 state1 = port.replace("HD","M Half");
208 state2 = state1.replace("FD","M Full");
210 if (stats.lan_desc == '1') {
211 code += '<td class="title indent2"><center>' + state + state2 + '</center></td>';
212 } else {
213 code += '<td class="title indent2"><center>' + state + '</center></td>';
216 code += '<td class="content"> </td></tr>';
217 code += '<tr><td class="title indent1" colspan="7" align="right">&raquo; <a href="basic-network.asp">Configure</a></td></tr></table></div>';
218 E("ports").innerHTML = code;
221 function anon_update()
223 update = anonupdate.update;
224 if (update == "no") { return 0; }
226 var code = '<div class="section-title"><center>!! Attention !!</center></div>';
227 code += '<div class="fields"><center>Tomato by Shibby ' + update + ' is now available. <a target="_blank" href="http://tomato.groov.pl/">Click here to read more</a>.</center></div>';
228 code += '<br></div>';
229 E("nversion").innerHTML = code;
232 function show()
234 c('cpu', stats.cpuload);
235 c('uptime', stats.uptime);
236 c('time', stats.time);
237 c('wanip', stats.wanip);
238 c('wanprebuf',stats.wanprebuf); //Victek
239 c('wannetmask', stats.wannetmask);
240 c('wangateway', stats.wangateway);
241 c('dns', stats.dns);
242 c('memory', stats.memory);
243 c('swap', stats.swap);
244 elem.display('swap', stats.swap != '');
246 /* IPV6-BEGIN */
247 c('ip6_wan', stats.ip6_wan);
248 elem.display('ip6_wan', stats.ip6_wan != '');
249 c('ip6_lan', stats.ip6_lan);
250 elem.display('ip6_lan', stats.ip6_lan != '');
251 c('ip6_lan_ll', stats.ip6_lan_ll);
252 elem.display('ip6_lan_ll', stats.ip6_lan_ll != '');
253 /* IPV6-END */
255 c('wanstatus', stats.wanstatus);
256 c('wanuptime', stats.wanuptime);
257 if (show_dhcpc) c('wanlease', stats.wanlease);
258 if (show_codi) {
259 E('b_connect').disabled = stats.wanup;
260 E('b_disconnect').disabled = !stats.wanup;
263 for (var uidx = 0; uidx < wl_ifaces.length; ++uidx) {
264 if (wl_sunit(uidx)<0) {
265 c('radio'+uidx, wlstats[uidx].radio ? 'Enabled' : '<b>Disabled</b>');
266 c('rate'+uidx, wlstats[uidx].rate);
267 if (show_radio[uidx]) {
268 E('b_wl'+uidx+'_enable').disabled = wlstats[uidx].radio;
269 E('b_wl'+uidx+'_disable').disabled = !wlstats[uidx].radio;
271 c('channel'+uidx, stats.channel[uidx]);
272 if (nphy) {
273 c('nbw'+uidx, wlstats[uidx].nbw);
275 c('interference'+uidx, stats.interference[uidx]);
276 elem.display('interference'+uidx, stats.interference[uidx] != '');
278 if (wlstats[uidx].client) {
279 c('rssi'+uidx, wlstats[uidx].rssi || '');
280 c('noise'+uidx, wlstats[uidx].noise || '');
281 c('qual'+uidx, stats.qual[uidx] || '');
284 c('ifstatus'+uidx, wlstats[uidx].ifstatus || '');
288 function earlyInit()
290 if ((stats.anon_enable == '-1') || (stats.anon_answer == '0'))
291 E('att1').style.display = '';
293 elem.display('b_dhcpc', show_dhcpc);
294 elem.display('b_connect', 'b_disconnect', show_codi);
295 if (nvram.wan_proto == 'disabled')
296 elem.display('wan-title', 'sesdiv_wan', 0);
297 for (var uidx = 0; uidx < wl_ifaces.length; ++uidx) {
298 if (wl_sunit(uidx)<0)
299 elem.display('b_wl'+uidx+'_enable', 'b_wl'+uidx+'_disable', show_radio[uidx]);
302 ethstates();
304 anon_update()
306 show();
309 function init()
311 var c;
312 if (((c = cookie.get('status_overview_system_vis')) != null) && (c != '1')) toggleVisibility("system");
313 if (((c = cookie.get('status_overview_wan_vis')) != null) && (c != '1')) toggleVisibility("wan");
314 if (((c = cookie.get('status_overview_lan_vis')) != null) && (c != '1')) toggleVisibility("lan");
315 for (var uidx = 0; uidx < wl_ifaces.length; ++uidx) {
316 u = wl_unit(uidx);
317 if (((c = cookie.get('status_overview_wl_'+u+'_vis')) != null) && (c != '1')) toggleVisibility("wl_"+u);
319 ref.initPage(3000, 3);
322 function toggleVisibility(whichone) {
323 if (E('sesdiv_' + whichone).style.display == '') {
324 E('sesdiv_' + whichone).style.display = 'none';
325 E('sesdiv_' + whichone + '_showhide').innerHTML = '(show)';
326 cookie.set('status_overview_' + whichone + '_vis', 0);
327 } else {
328 E('sesdiv_' + whichone).style.display='';
329 E('sesdiv_' + whichone + '_showhide').innerHTML = '(hide)';
330 cookie.set('status_overview_' + whichone + '_vis', 1);
334 </script>
336 </head>
337 <body onload='init()'>
338 <form>
339 <table id='container' cellspacing=0>
340 <tr><td colspan=2 id='header'>
341 <div class='title'>Tomato</div>
342 <div class='version'>Version <% version(); %></div>
343 </td></tr>
344 <tr id='body'><td id='navi'><script type='text/javascript'>navi()</script></td>
345 <td id='content'>
346 <div id='ident'><% ident(); %></div>
348 <!-- / / / -->
349 <div class='section' id='nversion'>
350 </div>
352 <div style='display:none' id='att1'>
353 <div class='section-title'><center>!! Attention !!</center></div>
354 <div class='fields'><center>You did not configure <b>TomatoAnon project</b> setting.
355 <br>Please go to <a href='admin-tomatoanon.asp'>TomatoAnon configuration page</a> and make a choice.</center></div>
356 <br>
357 </div>
359 <div class='section-title'>System <small><i><a href='javascript:toggleVisibility("system");'><span id='sesdiv_system_showhide'>(hide)</span></a></i></small></div>
360 <div class='section' id='sesdiv_system'>
361 <script type='text/javascript'>
362 var a = nvstat.free / nvstat.size * 100.0;
363 createFieldTable('', [
364 { title: 'Name', text: nvram.router_name },
365 { title: 'Model', text: nvram.t_model_name },
366 { title: 'Chipset', text: stats.systemtype },
367 { title: 'CPU Freq', text: stats.cpumhz },
368 { title: 'Flash Size', text: stats.flashsize },
369 null,
370 { title: 'Time', rid: 'time', text: stats.time },
371 { title: 'Uptime', rid: 'uptime', text: stats.uptime },
372 { title: 'CPU Load <small>(1 / 5 / 15 mins)</small>', rid: 'cpu', text: stats.cpuload },
373 { title: 'Total / Free Memory', rid: 'memory', text: stats.memory },
374 { title: 'Total / Free Swap', rid: 'swap', text: stats.swap, hidden: (stats.swap == '') },
375 { title: 'Total / Free NVRAM', text: scaleSize(nvstat.size) + ' / ' + scaleSize(nvstat.free) + ' <small>(' + (a).toFixed(2) + '%)</small>' }
377 </script>
378 </div>
380 <div class='section' id='ports'>
381 </div>
383 <div class='section-title' id='wan-title'>WAN <small><i><a href='javascript:toggleVisibility("wan");'><span id='sesdiv_wan_showhide'>(hide)</span></a></i></small></div>
384 <div class='section' id='sesdiv_wan'>
385 <script type='text/javascript'>
386 createFieldTable('', [
387 { title: 'MAC Address', text: nvram.wan_hwaddr },
388 { title: 'Connection Type', text: { 'dhcp':'DHCP', 'static':'Static IP', 'pppoe':'PPPoE', 'pptp':'PPTP', 'l2tp':'L2TP', 'ppp3g':'3G Modem', 'lte':'4G/LTE' }[nvram.wan_proto] || '-' },
389 { title: 'IP Address', rid: 'wanip', text: stats.wanip },
390 { title: 'Previous WAN IP', rid: 'wanprebuf', text: stats.wanprebuf, hidden: ((nvram.wan_proto != 'pppoe') && (nvram.wan_proto != 'pptp') && (nvram.wan_proto != 'l2tp') && (nvram.wan_proto != 'ppp3g')) }, //Victek
391 { title: 'Subnet Mask', rid: 'wannetmask', text: stats.wannetmask },
392 { title: 'Gateway', rid: 'wangateway', text: stats.wangateway },
393 /* IPV6-BEGIN */
394 { title: 'IPv6 Address', rid: 'ip6_wan', text: stats.ip6_wan, hidden: (stats.ip6_wan == '') },
395 /* IPV6-END */
396 { title: 'DNS', rid: 'dns', text: stats.dns },
397 { title: 'MTU', text: nvram.wan_run_mtu },
398 null,
399 { title: 'Status', rid: 'wanstatus', text: stats.wanstatus },
400 { title: 'Connection Uptime', rid: 'wanuptime', text: stats.wanuptime },
401 { title: 'Remaining Lease Time', rid: 'wanlease', text: stats.wanlease, ignore: !show_dhcpc }
403 </script>
404 <span id='b_dhcpc' style='display:none'>
405 <input type='button' class='controls' onclick='dhcpc("renew")' value='Renew'>
406 <input type='button' class='controls' onclick='dhcpc("release")' value='Release'> &nbsp;
407 </span>
408 <input type='button' class='controls' onclick='wan_connect()' value='Connect' id='b_connect' style='display:none'>
409 <input type='button' class='controls' onclick='wan_disconnect()' value='Disconnect' id='b_disconnect' style='display:none'>
410 </div>
413 <div class='section-title'>LAN <small><i><a href='javascript:toggleVisibility("lan");'><span id='sesdiv_lan_showhide'>(hide)</span></a></i></small></div>
414 <div class='section' id='sesdiv_lan'>
415 <script type='text/javascript'>
417 function h_countbitsfromleft(num) {
418 if (num == 255 ){
419 return(8);
421 var i = 0;
422 var bitpat=0xff00;
423 while (i < 8){
424 if (num == (bitpat & 0xff)){
425 return(i);
427 bitpat=bitpat >> 1;
428 i++;
430 return(Number.NaN);
433 function numberOfBitsOnNetMask(netmask) {
434 var total = 0;
435 var t = netmask.split('.');
436 for (var i = 0; i<= 3 ; i++) {
437 total += h_countbitsfromleft(t[i]);
439 return total;
442 var s='';
443 var t='';
444 for (var i = 0 ; i <= MAX_BRIDGE_ID ; i++) {
445 var j = (i == 0) ? '' : i.toString();
446 if (nvram['lan' + j + '_ifname'].length > 0) {
447 if (nvram['lan' + j + '_proto'] == 'dhcp') {
448 if ((!fixIP(nvram.dhcpd_startip)) || (!fixIP(nvram.dhcpd_endip))) {
449 var x = nvram['lan' + j + '_ipaddr'].split('.').splice(0, 3).join('.') + '.';
450 nvram['dhcpd' + j + '_startip'] = x + nvram['dhcp' + j + '_start'];
451 nvram['dhcpd' + j + '_endip'] = x + ((nvram['dhcp' + j + '_start'] * 1) + (nvram['dhcp' + j + '_num'] * 1) - 1);
453 s += ((s.length>0)&&(s.charAt(s.length-1) != ' ')) ? '<br>' : '';
454 s += '<b>br' + i + '</b> (LAN' + j + ') - ' + nvram['dhcpd' + j + '_startip'] + ' - ' + nvram['dhcpd' + j + '_endip'];
455 } else {
456 s += ((s.length>0)&&(s.charAt(s.length-1) != ' ')) ? '<br>' : '';
457 s += '<b>br' + i + '</b> (LAN' + j + ') - Disabled';
459 t += ((t.length>0)&&(t.charAt(t.length-1) != ' ')) ? '<br>' : '';
460 t += '<b>br' + i + '</b> (LAN' + j + ') - ' + nvram['lan' + j + '_ipaddr'] + '/' + numberOfBitsOnNetMask(nvram['lan' + j + '_netmask']);
465 createFieldTable('', [
466 { title: 'Router MAC Address', text: nvram.et0macaddr },
467 { title: 'Router IP Addresses', text: t },
468 { title: 'Gateway', text: nvram.lan_gateway, ignore: nvram.wan_proto != 'disabled' },
469 /* IPV6-BEGIN */
470 { title: 'Router IPv6 Address', rid: 'ip6_lan', text: stats.ip6_lan, hidden: (stats.ip6_lan == '') },
471 { title: 'IPv6 Link-local Address', rid: 'ip6_lan_ll', text: stats.ip6_lan_ll, hidden: (stats.ip6_lan_ll == '') },
472 /* IPV6-END */
473 { title: 'DNS', rid: 'dns', text: stats.dns, ignore: nvram.wan_proto != 'disabled' },
474 { title: 'DHCP', text: s }
477 </script>
478 </div>
480 <script type='text/javascript'>
481 for (var uidx = 0; uidx < wl_ifaces.length; ++uidx) {
482 /* REMOVE-BEGIN
483 // u = wl_unit(uidx);
484 REMOVE-END */
485 u = wl_fface(uidx);
486 W('<div class=\'section-title\' id=\'wl'+u+'-title\'>Wireless');
487 if (wl_ifaces.length > 0)
488 W(' (' + wl_display_ifname(uidx) + ')');
489 W(' <small><i><a href=\'javascript:toggleVisibility("wl_' + u + '");\'><span id=\'sesdiv_wl_' +u + '_showhide\'>(hide)</span></a></i></small>');
490 W('</div>');
491 W('<div class=\'section\' id=\'sesdiv_wl_'+u+'\'>');
492 sec = auth[nvram['wl'+u+'_security_mode']] + '';
493 if (sec.indexOf('WPA') != -1) sec += ' + ' + enc[nvram['wl'+u+'_crypto']];
495 wmode = wmo[nvram['wl'+u+'_mode']] + '';
496 if ((nvram['wl'+u+'_mode'] == 'ap') && (nvram['wl'+u+'_wds_enable'] * 1)) wmode += ' + WDS';
498 createFieldTable('', [
499 { title: 'MAC Address', text: nvram['wl'+u+'_hwaddr'] },
500 { title: 'Wireless Mode', text: wmode },
501 { title: 'Wireless Network Mode', text: bgmo[nvram['wl'+u+'_net_mode']], ignore: (wl_sunit(uidx)>=0) },
502 { title: 'Interface Status', rid: 'ifstatus'+uidx, text: wlstats[uidx].ifstatus },
503 { title: 'Radio', rid: 'radio'+uidx, text: (wlstats[uidx].radio == 0) ? '<b>Disabled</b>' : 'Enabled', ignore: (wl_sunit(uidx)>=0) },
504 /* REMOVE-BEGIN */
505 // { title: 'SSID', text: (nvram['wl'+u+'_ssid'] + ' <small><i>' + ((nvram['wl'+u+'_mode'] != 'ap') ? '' : ((nvram['wl'+u+'_closed'] == 0) ? '(Broadcast Enabled)' : '(Broadcast Disabled)')) + '</i></small>') },
506 /* REMOVE-END */
507 { title: 'SSID', text: nvram['wl'+u+'_ssid'] },
508 { title: 'Broadcast', text: (nvram['wl'+u+'_closed'] == 0) ? 'Enabled' : '<b>Disabled</b>', ignore: (nvram['wl'+u+'_mode'] != 'ap') },
509 { title: 'Security', text: sec },
510 { title: 'Channel', rid: 'channel'+uidx, text: stats.channel[uidx], ignore: (wl_sunit(uidx)>=0) },
511 { title: 'Channel Width', rid: 'nbw'+uidx, text: wlstats[uidx].nbw, ignore: ((!nphy) || (wl_sunit(uidx)>=0)) },
512 { title: 'Interference Level', rid: 'interference'+uidx, text: stats.interference[uidx], hidden: ((stats.interference[uidx] == '') || (wl_sunit(uidx)>=0)) },
513 { title: 'Rate', rid: 'rate'+uidx, text: wlstats[uidx].rate, ignore: (wl_sunit(uidx)>=0) },
514 { title: 'RSSI', rid: 'rssi'+uidx, text: wlstats[uidx].rssi || '', ignore: ((!wlstats[uidx].client) || (wl_sunit(uidx)>=0)) },
515 { title: 'Noise', rid: 'noise'+uidx, text: wlstats[uidx].noise || '', ignore: ((!wlstats[uidx].client) || (wl_sunit(uidx)>=0)) },
516 { title: 'Signal Quality', rid: 'qual'+uidx, text: stats.qual[uidx] || '', ignore: ((!wlstats[uidx].client) || (wl_sunit(uidx)>=0)) }
519 W('<input type=\'button\' class=\'controls\' onclick=\'wlenable('+uidx+', 1)\' id=\'b_wl'+uidx+'_enable\' value=\'Enable\' style=\'display:none\'>');
520 W('<input type=\'button\' class=\'controls\' onclick=\'wlenable('+uidx+', 0)\' id=\'b_wl'+uidx+'_disable\' value=\'Disable\' style=\'display:none\'>');
521 W('</div>');
523 </script>
526 <!-- / / / -->
528 </td></tr>
529 <tr><td id='footer' colspan=2>
530 <script type='text/javascript'>genStdRefresh(1,0,'ref.toggle()');</script>
531 </td></tr>
532 </table>
533 </form>
534 <script type='text/javascript'>earlyInit()</script>
535 </body>
536 </html>