1 function selectedBand(uidx) {
2 if (bands[uidx].length > 1) {
3 var u = wl_fface(uidx);
4 var e = E('_f_wl'+u+'_nband');
5 return (e.value + '' == '' ? eval('nvram["wl'+u+'_nband"]') : e.value);
6 } else if (bands[uidx].length > 0) {
7 return bands[uidx][0][0] || '0';
13 function refreshNetModes(uidx) {
16 if (uidx >= wl_ifaces.length) return;
17 var u = wl_unit(uidx);
19 var m = [['mixed','Auto']];
20 if (selectedBand(uidx) == '1') {
21 m.push(['a-only','A Only']);
23 m.push(['n-only','N Only']);
27 m.push(['b-only','B Only']);
28 m.push(['g-only','G Only']);
30 m.push(['bg-mixed','B/G Mixed']);
31 m.push(['n-only','N Only']);
35 e = E('_wl'+u+'_net_mode');
37 val = (!nm_loaded[uidx] || (e.value + '' == '')) ? eval('nvram["wl'+u+'_net_mode"]') : e.value;
38 if (val == 'disabled') val = 'mixed';
39 for (i = 0; i < m.length; ++i)
40 buf += '<option value="' + m[i][0] + '"' + ((m[i][0] == val) ? ' selected' : '') + '>' + m[i][1] + '</option>';
42 e = E('__wl'+u+'_net_mode');
43 buf = '<select name="wl'+u+'_net_mode" onchange="verifyFields(this, 1)" id = "_wl'+u+'_net_mode">' + buf + '</select>';
44 elem.setInnerHTML(e, buf);
49 function refreshChannels(uidx) {
50 if (refresher[uidx] != null) return;
51 if (u >= wl_ifaces.length) return;
52 var u = wl_unit(uidx);
54 refresher[uidx] = new XmlHttp();
55 refresher[uidx].onCompleted = function(text, xml) {
63 max_channel[uidx] = 0;
64 for (i = 0; i < wl_channels.length; ++i) {
65 ghz[uidx].push([wl_channels[i][0] + '',
66 (wl_channels[i][0]) ? ((wl_channels[i][1]) ? wl_channels[i][0] + ' - ' + (wl_channels[i][1] / 1000.0).toFixed(3) + ' GHz' : wl_channels[i][0] + '') : 'Auto']);
67 max_channel[uidx] = wl_channels[i][0] * 1;
70 e = E('_wl'+u+'_channel');
72 val = (!ch_loaded[uidx] || (e.value + '' == '')) ? eval('nvram["wl'+u+'_channel"]') : e.value;
73 for (i = 0; i < ghz[uidx].length; ++i)
74 buf += '<option value="' + ghz[uidx][i][0] + '"' + ((ghz[uidx][i][0] == val) ? ' selected' : '') + '>' + ghz[uidx][i][1] + '</option>';
76 e = E('__wl'+u+'_channel');
77 buf = '<select name="wl'+u+'_channel" onchange="verifyFields(this, 1)" id = "_wl'+u+'_channel">' + buf + '</select>';
78 elem.setInnerHTML(e, buf);
81 refresher[uidx] = null;
82 verifyFields(null, 1);
86 refresher[uidx] = null;
91 e = E('_f_wl'+u+'_nctrlsb');
94 sb = (e.value + '' == '' ? eval('nvram["wl'+u+'_nctrlsb"]') : e.value);
97 // sb = ((e.value + '' == '') ? (nvram['wl'+u+'_nctrlsb']) : e.value);
99 e = E('_wl'+u+'_nbw_cap');
100 bw = (e.value + '' == '' ? eval('nvram["wl'+u+'_nbw_cap"]') : e.value) == '0' ? '20' : '40';
103 // bw = ((e.value + '' == '') ? (nvram['wl'+u+'_nbw_cap']) : e.value) == '0' ? '20' : '40';
105 refresher[uidx].onError = function(ex) { alert(ex); refresher[uidx] = null; reloadPage(); }
106 refresher[uidx].post('update.cgi', 'exec=wlchannels&arg0=' + u + '&arg1=' + (nphy ? '1' : '0') +
107 '&arg2=' + bw + '&arg3=' + selectedBand(uidx) + '&arg4=' + sb);
114 var unit = wscan.unit;
115 var uidx = wl_uidx(unit);
118 xob.onCompleted = function(text, xml) {
125 for (i = 0; i < wlscandata.length; ++i) {
126 var data = wlscandata[i];
130 if (!wscan.inuse[ch]) {
138 if (!wscan.seen[mac]) {
140 ++wscan.inuse[ch].count;
143 if (data[4] > wscan.inuse[ch].rssi) {
144 wscan.inuse[ch].rssi = data[4];
145 wscan.inuse[ch].ssid = data[1];
148 var e = E('_wl'+unit+'_channel');
149 for (i = 1; i < ghz[uidx].length; ++i) {
150 var s = ghz[uidx][i][1];
151 var u = wscan.inuse[ghz[uidx][i][0]];
152 if (u) s += ' (' + u.count + ' AP' + (u.count == 1 ? '' : 's') + ' / strongest: "' + escapeHTML(ellipsis(u.ssid, 15)) + '" ' + u.rssi + ' dBm)';
153 e.options[i].innerHTML = s;
155 e.style.width = '400px';
159 if (wscan.tries < 4) {
161 setTimeout(scan, 1000);
169 xob.onError = function(x) {
170 alert('error: ' + x);
176 xob.post('update.cgi', 'exec=wlscan&arg0='+unit);
179 function scanButton(u) {
192 function joinAddr(a) {
196 for (i = 0; i < a.length; ++i) {
198 if ((s != '00:00:00:00:00:00') && (s != '0.0.0.0')) r.push(s);
203 function random_x(max) {
204 var c = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
206 while (max-- > 0) s += c.substr(Math.floor(c.length * Math.random()), 1);
210 function random_psk(id) {
212 e.value = random_x(63);
213 verifyFields(null, 1);
216 function random_wep(u) {
217 E('_wl'+u+'_passphrase').value = random_x(16);
221 function v_wep(e, quiet) {
224 if (((s.length == 5) || (s.length == 13)) && (s.length == (e.maxLength >> 1))) {
228 s = s.toUpperCase().replace(/[^0-9A-F]/g, '');
229 if (s.length != e.maxLength) {
230 ferror.set(e, 'Invalid WEP key. Expecting ' + e.maxLength + ' hex or ' + (e.maxLength >> 1) + ' ASCII characters.', quiet);
240 // compatible w/ Linksys' and Netgear's (key 1) method for 128-bits
241 function generate_wep(u) {
242 function _wepgen(pass, i)
244 while (pass.length < 64) pass += pass;
245 return hex_md5(pass.substr(0, 64)).substr(i, (E('_wl'+u+'_wep_bit').value == 128) ? 26 : 10);
248 var e = E('_wl'+u+'_passphrase');
250 if (!v_length(e, false, 3)) return;
251 E('_wl'+u+'_key1').value = _wepgen(pass, 0);
253 E('_wl'+u+'_key2').value = _wepgen(pass, 2);
255 E('_wl'+u+'_key3').value = _wepgen(pass, 4);
257 E('_wl'+u+'_key4').value = _wepgen(pass, 6);
258 verifyFields(null, 1);