1 <!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML
4.0//EN'
>
4 Copyright (C) 2006-2010 Jonathan Zarate
5 http://www.polarcloud.com/tomato/
7 For use with Tomato Firmware only.
8 No part of this file may be used without permission.
12 <meta http-equiv='content-type' content='text/html;charset=utf-
8'
>
13 <meta name='robots' content='noindex,nofollow'
>
14 <title>[<%
ident(); %>] <% translate(
"Status"); %
>: <% translate(
"Device List"); %
></title>
15 <link rel='stylesheet' type='text/css' href='tomato.css'
>
16 <link rel='stylesheet' type='text/css' href='color.css'
>
17 <script type='text/javascript' src='tomato.js'
></script>
21 <style type='text/css'
>
55 <script type='text/javascript' src='debug.js'
></script>
57 <script type='text/javascript' src='wireless.jsx?_http_id=<%
nv(http_id
); %>'
></script>
58 <script type='text/javascript'
>
60 ipp
= '<% lipp(); %>.';
61 //<% nvram('lan_ifname,wl_ifname,wl_mode,wl_radio'); %>
66 function find(mac
, ip
)
70 mac
= mac
.toUpperCase();
71 for (i
= list
.length
- 1; i
>= 0; --i
) {
73 if (((e
.mac
== mac
) && ((e
.ip
== ip
) || (e
.ip
== '') || (ip
== null))) ||
74 ((e
.mac
== '00:00:00:00:00:00') && (e
.ip
== ip
))) {
85 mac
= mac
.toUpperCase();
86 if ((e
= find(mac
, ip
)) != null) {
109 function _deleteLease(ip
)
111 form
.submitHidden('dhcpd.cgi', { remove
: ip
});
114 function deleteLease(a
, ip
)
117 if ((xob
= new XmlHttp()) == null) {
123 a
.innerHTML
= 'deleting...';
125 xob
.onCompleted = function(text
, xml
) {
129 xob
.onError = function() {
133 xob
.post('dhcpd.cgi', 'remove=' + ip
);
136 function addStatic(n
)
139 cookie
.set('addstatic', [e
.mac
, e
.ip
, e
.name
.split(',')[0]].join(','), 1);
140 location
.href
= 'basic-static.asp';
146 cookie
.set('addmac', [e
.mac
, e
.name
.split(',')[0]].join(','), 1);
147 location
.href
= 'basic-wfilter.asp';
151 var ref
= new TomatoRefresh('update.cgi', 'exec=devlist', 0, 'status_devices_refresh');
153 ref
.refresh = function(text
)
159 for (var uidx
= 0; uidx
< wl_ifaces
.length
; ++uidx
) {
160 E("noise"+uidx
).innerHTML
= wlnoise
[uidx
];
165 var dg
= new TomatoGrid();
167 dg
.sortCompare = function(a
, b
) {
168 var col
= this.sortColumn
;
169 var ra
= a
.getRowData();
170 var rb
= b
.getRowData();
175 r
= cmpIP(ra
.ip
, rb
.ip
);
178 r
= cmpInt(ra
.rssi
, rb
.rssi
);
181 r
= cmpInt(ra
.qual
, rb
.qual
);
184 r
= cmpText(a
.cells
[col
].innerHTML
, b
.cells
[col
].innerHTML
);
187 r
= cmpIP(ra
.ip
, rb
.ip
);
188 if (r
== 0) r
= cmpText(ra
.ifname
, rb
.ifname
);
190 return this.sortAscending
? r
: -r
;
193 dg
.populate = function()
200 for (i
= 0; i
< list
.length
; ++i
) {
210 for (i
= dhcpd_lease
.length
- 1; i
>= 0; --i
) {
213 e
.lease
= '<small><a href="javascript:deleteLease(\'L' + i
+ '\',\'' + a
[1] + '\')" title="<% translate("Delete Lease"); %>" id="L' + i
+ '">' + a
[3] + '</a></small>';
215 e
.ifname
= nvram
.lan_ifname
;
218 for (i
= wldev
.length
- 1; i
>= 0; --i
) {
220 if (a
[0].indexOf('wds') == 0) {
230 if ((a
[3] > 1000) || (a
[4] > 1000))
231 e
.txrx
= ((a
[3] > 1000) ? Math
.round(a
[3] / 1000) : '-') + ' / ' + ((a
[4] > 1000) ? Math
.round(a
[4] / 1000) : '-'); //+ '<br><small>Mbps</small>';
234 for (i
= arplist
.length
- 1; i
>= 0; --i
) {
237 if ((e
= get(a
[1], a
[0])) != null) {
238 if (e
.ifname
== '') e
.ifname
= a
[2];
242 for (i
= dhcpd_static
.length
- 1; i
>= 0; --i
) {
243 a
= dhcpd_static
[i
].split('<');
244 if (a
.length
< 3) continue;
246 if (a
[1].indexOf('.') == -1) a
[1] = (ipp
+ a
[1]);
249 for (j
= c
.length
- 1; j
>= 0; --j
) {
250 if ((e
= find(c
[j
], a
[1])) != null) break;
258 b
= e
.name
.toLowerCase();
259 c
= a
[2].toLowerCase();
260 if ((b
.indexOf(c
) == -1) && (c
.indexOf(b
) == -1)) {
261 if (e
.name
!= '') e
.name
+= ', ';
267 for (i
= list
.length
- 1; i
>= 0; --i
) {
271 if (e
.mac
.match(/^(..):(..):(..)/)) {
273 '<a href="http://standards.ieee.org/cgi-bin/ouisearch?' + RegExp
.$1 + '-' + RegExp
.$2 + '-' + RegExp
.$3 + '" target="_new" title="<% translate("OUI Search"); %>">[<% translate("oui"); %>]</a> ' +
274 '<a href="javascript:addStatic(' + i
+ ')" title="<% translate("Static Lease"); %>...">[<% translate("static"); %>]</a>';
277 b
+= ' <a href="javascript:addWF(' + i
+ ')" title="<% translate("Wireless Filter"); %>...">[<% translate("wfilter"); %>]</a>';
285 var ifidx
= wl_uidx(e
.unit
);
286 if ((e
.rssi
!== '') && (ifidx
>= 0) && (wlnoise
[ifidx
] < 0)) {
287 e
.qual
= MAX(e
.rssi
- wlnoise
[ifidx
], 0);
294 e
.ifname
, b
, (e
.ip
== '-') ? '' : e
.ip
, e
.name
,
295 (e
.rssi
!= 0) ? e
.rssi
+ ' <small>dBm</small>' : '',
296 (e
.qual
< 0) ? '' : '<small>' + e
.qual
+ '</small> <img src="bar' + MIN(MAX(Math
.floor(e
.qual
/ 10), 1), 6) + '.gif">',
297 e
.txrx
, e
.lease
], false);
301 dg
.setup = function()
303 this.init('dev-grid', 'sort');
304 this.headerSet(['<% translate("Interface"); %>', '<% translate("MAC Address"); %>', '<% translate("IP Address"); %>', '<% translate("Name"); %>', 'RSSI ', '<% translate("Quality"); %>', '<% translate("TX/RX Rate"); %> ', '<% translate("Lease"); %> ']);
317 ref
.initPage(3000, 3);
321 <body onload='init()'
>
322 <table id='container' cellspacing=
0>
323 <tr><td colspan=
2 id='header'
>
324 <div class='title'
>Tomato
</div>
325 <div class='version'
><%
translate("Version"); %> <% version(); %
></div>
327 <tr id='body'
><td id='navi'
><script type='text/javascript'
>navi()</script></td>
329 <div id='ident'
><%
ident(); %></div>
333 <div class='section-title'
><%
translate("Device List"); %></div>
334 <div class='section'
>
335 <table id='dev-grid' class='tomato-grid' cellspacing=
0></table>
337 <script type='text/javascript'
>
339 for (var uidx
= 0; uidx
< wl_ifaces
.length
; ++uidx
) {
340 var u
= wl_unit(uidx
);
341 if (nvram
['wl'+u
+'_radio'] == '1') {
343 if ((nvram
['wl'+u
+'_mode'] == 'ap') || (nvram
['wl'+u
+'_mode'] == 'wds'))
344 a
= ' <input type="button" value="<% translate("Measure"); %>" onclick="javascript:window.location=\'wlmnoise.cgi?_http_id=' + nvram
.http_id
+ '&_wl_unit=' + u
+'\'">';
345 f
.push( { title
: '<b><% translate("Noise Floor"); %> (' + wl_ifaces
[uidx
][0] + ') :</b>',
346 prefix
: '<span id="noise'+uidx
+'">',
347 custom
: wlnoise
[uidx
],
348 suffix
: '</span> <small>dBm</small>' + a
} );
351 createFieldTable('', f
);
359 <tr><td id='footer' colspan=
2><script type='text/javascript'
>genStdRefresh(1,0,'ref.toggle()');</script></td></tr>
361 <script type='text/javascript'
>earlyInit();</script>