1 <!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML
4.0//EN'
>
4 Copyright (C) 2006-2009 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(); %>] Basic: Network
</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'
>
24 vertical-align: middle
;
28 <script type='text/javascript' src='debug.js'
></script>
30 <script type='text/javascript' src='md5.js'
></script>
31 <script type='text/javascript'
>
32 // <% nvram("dhcp_lease,dhcp_num,dhcp_start,dhcpd_startip,dhcpd_endip,l2tp_server_ip,lan_gateway,lan_ipaddr,lan_netmask,lan_proto,mtu_enable,ppp_demand,ppp_idletime,ppp_passwd,ppp_redialperiod,ppp_service,ppp_username,pptp_server_ip,security_mode2,wan_dns,wan_gateway,wan_ipaddr,wan_mtu,wan_netmask,wan_proto,wan_wins,wds_enable,wl_channel,wl_closed,wl_crypto,wl_key,wl_key1,wl_key2,wl_key3,wl_key4,wl_lazywds,wl_mode,wl_net_mode,wl_passphrase,wl_radio,wl_radius_ipaddr,wl_radius_port,wl_ssid,wl_wds,wl_wep_bit,wl_wpa_gtk_rekey,wl_wpa_psk,wl_radius_key,wds_save,wl_auth,wl0_hwaddr,wan_islan"); %>
35 ghz
= [['1', '1 - 2.412 GHz'],['2', '2 - 2.417 GHz'],['3', '3 - 2.422 GHz'],['4', '4 - 2.427 GHz'],['5', '5 - 2.432 GHz'],['6', '6 - 2.437 GHz'],['7', '7 - 2.442 GHz'],['8', '8 - 2.447 GHz'],['9', '9 - 2.452 GHz'],['10', '10 - 2.457 GHz'],['11', '11 - 2.462 GHz'],['12', '12 - 2.467 GHz'],['13', '13 - 2.472 GHz'],['14', '14 - 2.484 GHz']]
37 if ((!fixIP(nvram
.dhcpd_startip
)) || (!fixIP(nvram
.dhcpd_endip
))) {
38 var x
= nvram
.lan_ipaddr
.split('.').splice(0, 3).join('.') + '.';
39 nvram
.dhcpd_startip
= x
+ nvram
.dhcp_start
;
40 nvram
.dhcpd_endip
= x
+ ((nvram
.dhcp_start
* 1) + (nvram
.dhcp_num
* 1) - 1);
47 if (x
) e
.value
= 'Scan ' + (wscan
.tries
+ 1);
48 else e
.value
= 'Scan';
49 E('spin').style
.visibility
= x
? 'visible' : 'hidden';
57 xob
.onCompleted = function(text
, xml
) {
64 for (i
= 0; i
< wlscandata
.length
; ++i
) {
65 var data
= wlscandata
[i
];
69 if (!wscan
.inuse
[ch
]) {
77 if (!wscan
.seen
[mac
]) {
79 ++wscan
.inuse
[ch
].count
;
82 if (data
[4] > wscan
.inuse
[ch
].rssi
) {
83 wscan
.inuse
[ch
].rssi
= data
[4];
84 wscan
.inuse
[ch
].ssid
= data
[1];
87 var e
= E('_wl_channel');
88 for (i
= 0; i
< 14; ++i
) {
90 var u
= wscan
.inuse
[i
+ 1];
91 if (u
) s
+= ' (' + u
.count
+ ' AP' + (u
.count
== 1 ? '' : 's') + ' / strongest: "' + ellipsis(u
.ssid
, 15) + '" ' + u
.rssi
+ ' dBm)';
92 e
.options
[i
].innerHTML
= s
;
94 e
.style
.width
= '400px';
98 if (wscan
.tries
< 4) {
100 setTimeout(scan
, 1000);
108 xob
.onError = function(x
) {
109 alert('error: ' + x
);
115 xob
.post('update.cgi', 'exec=wlscan');
118 function scanButton()
131 function joinAddr(a
) {
135 for (i
= 0; i
< a
.length
; ++i
) {
137 if ((s
!= '00:00:00:00:00:00') && (s
!= '0.0.0.0')) r
.push(s
);
142 function random_x(max
)
144 var c
= '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
146 while (max
-- > 0) s
+= c
.substr(Math
.floor(c
.length
* Math
.random()), 1);
150 function random_psk(id
)
153 e
.value
= random_x(63);
154 verifyFields(null, 1);
157 function random_wep()
159 E('_wl_passphrase').value
= random_x(16);
163 function v_wep(e
, quiet
)
167 if (((s
.length
== 5) || (s
.length
== 13)) && (s
.length
== (e
.maxLength
>> 1))) {
171 s
= s
.toUpperCase().replace(/[^0-9A-F]/g, '');
172 if (s
.length
!= e
.maxLength
) {
173 ferror
.set(e
, 'Invalid WEP key. Expecting ' + e
.maxLength
+ ' hex or ' + (e
.maxLength
>> 1) + ' ASCII characters.', quiet
);
183 // compatible w/ Linksys' and Netgear's (key 1) method for 128-bits
184 function generate_wep()
186 function _wepgen(pass
, i
)
188 while (pass
.length
< 64) pass
+= pass
;
189 return hex_md5(pass
.substr(0, 64)).substr(i
, (E('_wl_wep_bit').value
== 128) ? 26 : 10);
192 var e
= E('_wl_passphrase');
194 if (!v_length(e
, false, 3)) return;
195 E('_wl_key1').value
= _wepgen(pass
, 0);
197 E('_wl_key2').value
= _wepgen(pass
, 2);
199 E('_wl_key3').value
= _wepgen(pass
, 4);
201 E('_wl_key4').value
= _wepgen(pass
, 6);
202 verifyFields(null, 1);
205 function verifyFields(focused
, quiet
)
212 // --- visibility ---
226 _ppp_redialperiod
: 1,
256 _wl_wpa_gtk_rekey
: 1,
258 _wl_radius_ipaddr
: 1,
273 var wan
= E('_wan_proto').value
;
274 var wmode
= E('_f_wmode').value
;
276 if (wmode
== 'wet') {
279 vis
._f_dhcpd_enable
= 0;
283 if ((wan
== 'disabled') || (wmode
== 'sta') || (wmode
== 'wet')) {
284 vis
._f_wan_islan
= 1;
289 vis
._ppp_username
= 0;
290 vis
._ppp_service
= 0;
291 vis
._l2tp_server_ip
= 0;
293 vis
._wan_netmask
= 0;
294 vis
._wan_gateway
= 0;
295 vis
._pptp_server_ip
= 0;
301 vis
._l2tp_server_ip
= 0;
303 vis
._ppp_service
= 0;
304 vis
._ppp_username
= 0;
305 vis
._pptp_server_ip
= 0;
306 vis
._wan_gateway
= 0;
308 vis
._wan_netmask
= 0;
310 vis
._lan_gateway
= 0;
313 vis
._l2tp_server_ip
= 0;
314 vis
._pptp_server_ip
= 0;
315 vis
._wan_gateway
= 0;
317 vis
._wan_netmask
= 0;
319 vis
._lan_gateway
= 0;
322 vis
._l2tp_server_ip
= 0;
324 vis
._ppp_service
= 0;
325 vis
._ppp_username
= 0;
326 vis
._pptp_server_ip
= 0;
328 vis
._lan_gateway
= 0;
331 vis
._l2tp_server_ip
= 0;
332 vis
._ppp_service
= 0;
333 vis
._wan_gateway
= 0;
335 vis
._lan_gateway
= 0;
338 vis
._ppp_service
= 0;
339 vis
._pptp_server_ip
= 0;
340 vis
._wan_gateway
= 0;
342 vis
._wan_netmask
= 0;
344 vis
._lan_gateway
= 0;
348 vis
._ppp_idletime
= (E('_ppp_demand').value
== 1) && vis
._ppp_demand
349 vis
._ppp_redialperiod
= !vis
._ppp_idletime
&& vis
._ppp_demand
;
351 if (vis
._mtu_enable
) {
352 if (E('_mtu_enable').value
== 0) {
355 switch (E('_wan_proto').value
) {
370 if (!E('_f_dhcpd_enable').checked
) vis
._dhcp_lease
= 0;
372 if (!E('_f_wl_radio').checked
) {
373 vis
._f_wl_lazywds
= 2;
376 vis
._security_mode2
= 2;
380 vis
._wl_net_mode
= 2;
382 vis
._wl_radius_key
= 2;
383 vis
._wl_wpa_gtk_rekey
= 2;
384 vis
._wl_radius_ipaddr
= 2;
397 vis
._f_wl_lazywds
= 0;
402 var sm2
= E('_security_mode2').value
;
408 vis
._wl_radius_key
= 0;
409 vis
._wl_radius_ipaddr
= 0;
410 vis
._wl_wpa_gtk_rekey
= 0;
415 vis
._wl_radius_key
= 0;
416 vis
._wl_radius_ipaddr
= 0;
417 vis
._wl_wpa_gtk_rekey
= 0;
425 if (sm2
.indexOf('personal') != -1) {
426 vis
._wl_radius_key
= 0;
427 vis
._wl_radius_ipaddr
= 0;
435 if ((E('_f_wl_lazywds').value
== 1) && (vis
._f_wds_0
== 1)) {
441 vis
._ppp_passwd
= vis
._ppp_username
;
442 vis
._dhcpd_startip
= vis
._dhcpd_endip
= vis
._wan_wins
= vis
._dhcp_lease
;
443 vis
._f_scan
= vis
._wl_channel
;
444 vis
._f_psk_random1
= vis
._wl_wpa_psk
;
445 vis
._f_psk_random2
= vis
._wl_radius_key
;
446 vis
._wl_radius_port
= vis
._wl_radius_ipaddr
;
447 vis
._wl_key1
= vis
._wl_key2
= vis
._wl_key3
= vis
._wl_key4
= vis
._f_wep_gen
= vis
._f_wep_random
= vis
._wl_passphrase
= vis
._wl_wep_bit
;
449 for (i
= 1; i
< 10; ++i
) {
450 vis
['_f_wds_' + i
] = vis
._f_wds_0
;
455 b
.disabled
= (c
!= 1);
456 PR(b
).style
.display
= c
? '' : 'none';
462 if (wmode
== 'sta') {
463 if ((wan
== 'disabled') && (E('_f_wl_radio').checked
)) {
464 ferror
.set('_wan_proto', 'Wireless Client mode requires a valid WAN setting (usually DHCP).', quiet
);
468 ferror
.clear('_wan_proto');
470 if ((vis
._f_wmode
== 1) && (wmode
!= 'ap') && (sm2
.substr(0, 4) == 'wpa2')) {
471 ferror
.set('_security_mode2', 'WPA2 is supported only in AP mode.', quiet
);
474 ferror
.clear('_security_mode2');
476 a
= E('_wl_wpa_psk');
478 if (vis
._wl_wpa_psk
== 1) {
479 if ((a
.value
.length
< 8) || ((a
.value
.length
== 64) && (a
.value
.search(/[^0-9A-Fa-f]/) != -1))) {
480 ferror
.set('_wl_wpa_psk', 'Invalid pre-shared key. Please enter at least 8 characters or 64 hexadecimal digits.', quiet
);
486 a
= ['_l2tp_server_ip','_pptp_server_ip', '_wan_gateway','_wan_ipaddr','_lan_ipaddr', '_wl_radius_ipaddr', '_dhcpd_startip', '_dhcpd_endip'];
487 for (i
= a
.length
- 1; i
>= 0; --i
)
488 if ((vis
[a
[i
]]) && (!v_ip(a
[i
], quiet
))) ok
= 0;
490 // IP address, blank -> 0.0.0.0
491 a
= ['_f_dns_1', '_f_dns_2', '_f_dns_3','_wan_wins','_lan_gateway'];
492 for (i
= a
.length
- 1; i
>= 0; --i
)
493 if ((vis
[a
[i
]]) && (!v_dns(a
[i
], quiet
))) ok
= 0;
496 a
= ['_wan_netmask','_lan_netmask'];
497 for (i
= a
.length
- 1; i
>= 0; --i
)
498 if ((vis
[a
[i
]]) && (!v_netmask(a
[i
], quiet
))) ok
= 0;
501 a
= [['_ppp_idletime', 3, 1440],['_ppp_redialperiod', 1, 86400],['_f_wan_mtu', 576, 1500],
502 ['_dhcp_lease', 1, 10080],['_wl_wpa_gtk_rekey', 60, 7200], ['_wl_radius_port', 1, 65535]];
503 for (i
= a
.length
- 1; i
>= 0; --i
) {
505 if ((vis
[v
[0]]) && (!v_range(v
[0], quiet
, v
[1], v
[2]))) ok
= 0;
509 a
= [['_wl_ssid', 1], ['_wl_radius_key', 1]];
510 for (i
= a
.length
- 1; i
>= 0; --i
) {
512 if ((vis
[v
[0]]) && (!v_length(v
[0], quiet
, v
[1], E(v
[0]).maxlength
))) ok
= 0;
516 a
= (E('_wl_wep_bit').value
== 128) ? 26 : 10;
517 for (i
= 1; i
<= 4; ++i
) {
518 b
= E('_wl_key' + i
);
520 if ((b
.value
.length
> 0) || (E('_f_wepidx_' + i
).checked
)) {
521 if (!v_wep(b
, quiet
)) ok
= 0;
523 else ferror
.clear(b
);
527 ferror
.clear('_f_wds_0');
528 if (vis
._f_wds_0
== 1) {
530 for (i
= 0; i
< 10; ++i
) {
531 a
= E('_f_wds_' + i
);
532 if (!v_macz(a
, quiet
)) ok
= 0;
533 else if (!isMAC0(a
.value
)) b
= 1;
536 ferror
.set('_f_wds_0', 'WDS MAC address required.', quiet
);
541 a
= E('_dhcpd_startip');
542 b
= E('_dhcpd_endip');
544 if ((!a
._error_msg
) && (!b
._error_msg
)) {
545 c
= aton(E('_lan_netmask').value
);
546 d
= aton(E('_lan_ipaddr').value
) & c
;
547 e
= 'Invalid IP address or subnet mask';
548 if ((aton(a
.value
) & c
) != d
) {
549 ferror
.set(a
, e
, quiet
);
552 if ((aton(b
.value
) & c
) != d
) {
553 ferror
.set(b
, e
, quiet
);
558 if ((!a
._error_msg
) && (!b
._error_msg
)) {
559 if (aton(a
.value
) > aton(b
.value
)) {
565 elem
.setInnerHTML('dhcp_count', '(' + ((aton(b
.value
) - aton(a
.value
)) + 1) + ')');
573 verifyFields(null, 1);
581 if (!verifyFields(null, false)) return;
584 var wmode
= fom
.f_wmode
.value
;
585 var sm2
= fom
.security_mode2
.value
;
586 var wradio
= fom
.f_wl_radio
.checked
;
588 fom
.lan_proto
.value
= fom
.f_dhcpd_enable
.checked
? 'dhcp' : 'static';
590 fom
.wan_mtu
.value
= fom
.f_wan_mtu
.value
;
591 fom
.wan_mtu
.disabled
= fom
.f_wan_mtu
.disabled
;
593 if (wmode
== 'apwds') fom
.wl_mode
.value
= 'ap';
594 else fom
.wl_mode
.value
= wmode
;
596 if (wmode
== 'wet') {
597 fom
.wan_proto
.value
= 'disabled';
598 fom
.wan_proto
.disabled
= 0;
599 fom
.lan_proto
.value
= 'static';
602 fom
.wan_islan
.value
= fom
.f_wan_islan
.checked
? 1 : 0;
605 for (i
= 0; i
< 10; ++i
) a
.push(E('_f_wds_' + i
).value
);
606 fom
.wl_wds
.value
= joinAddr(a
);
608 fom
.wds_save
.value
= nvram
.wds_save
;
609 if (wmode
.indexOf('wds') != -1) {
610 fom
.wds_enable
.value
= 1;
611 fom
.wl_lazywds
.value
= fom
.f_wl_lazywds
.value
;
612 if (fom
.wl_lazywds
.value
== 1) fom
.wl_wds
.value
= '';
613 else fom
.wds_save
.value
= fom
.wl_wds
.value
;
616 fom
.wds_enable
.value
= 0;
617 fom
.wl_wds
.value
= '';
618 fom
.wl_lazywds
.value
= 0;
621 fom
.wan_dns
.value
= joinAddr([fom
.f_dns_1
.value
, fom
.f_dns_2
.value
, fom
.f_dns_3
.value
])
623 fom
.wl_radio
.value
= fom
.f_wl_radio
.checked
? 1 : 0;
624 fom
.wl_radio
.disabled
= fom
.f_wl_radio
.disabled
;
626 fom
.wl_auth
.value
= nvram
.wl_auth
;
632 fom
.security_mode
.value
= sm2
;
633 fom
.wl_akm
.value
= '';
637 if (sm2
.indexOf('personal') != -1) {
638 if (sm2
.indexOf('wpa2_') == -1) c
.push('psk');
639 if (sm2
.indexOf('wpa_') == -1) c
.push('psk2');
642 if (sm2
.indexOf('wpa2_') == -1) c
.push('wpa');
643 if (sm2
.indexOf('wpa_') == -1) c
.push('wpa2');
646 fom
.security_mode
.value
= c
;
647 fom
.wl_akm
.value
= c
;
650 fom
.wl_auth_mode
.value
= (sm2
== 'radius') ? 'radius' : 'none';
651 fom
.wl_wep
.value
= ((sm2
== 'radius') || (sm2
== 'wep')) ? 'enabled': 'disabled';
652 fom
.wl_auth_mode
.disabled
= fom
.wl_wep
.disabled
= fom
.security_mode
.disabled
= fom
.wl_akm
.disabled
= fom
.security_mode2
.disabled
;
654 if (sm2
.indexOf('wpa') != -1) fom
.wl_auth
.value
= 0;
656 fom
.wl_gmode
.value
= (fom
.wl_net_mode
.value
== 'b-only') ? 0 : (fom
.wl_net_mode
.value
== 'g-only') ? 2 : 1;
657 fom
.wl_gmode
.disabled
= fom
.wl_net_mode
.disabled
;
659 fom
.wl_closed
.value
= fom
.f_bcast
.checked
? 0 : 1;
660 fom
.wl_closed
.disabled
= fom
.f_bcast
.disabled
;
662 a
= fields
.radio
.selected(fom
.f_wepidx
);
663 if (a
) fom
.wl_key
.value
= a
.value
;
664 fom
.wl_key
.disabled
= fom
.wl_key1
.disabled
;
666 fom
.wl_mode
.disabled
= fom
.wl_wds
.disabled
= fom
.wds_enable
.disabled
= !fom
.f_wl_radio
.checked
;
668 if (nvram
.lan_ipaddr
!= fom
.lan_ipaddr
.value
) {
669 fom
._moveip
.value
= 1;
680 <form id='_fom' method='post' action='tomato.cgi'
>
681 <table id='container' cellspacing=
0>
682 <tr><td colspan=
2 id='header'
>
683 <div class='title'
>Tomato
</div>
684 <div class='version'
>Version <%
version(); %></div>
686 <tr id='body'
><td id='navi'
><script type='text/javascript'
>navi()</script></td>
688 <div id='ident'
><%
ident(); %></div>
692 <input type='hidden' name='_nextpage' value='basic-network.asp'
>
693 <input type='hidden' name='_nextwait' value='
10'
>
694 <input type='hidden' name='_service' value='*'
>
695 <input type='hidden' name='_moveip' value='
0'
>
697 <input type='hidden' name='wan_mtu'
>
698 <input type='hidden' name='wan_islan'
>
699 <input type='hidden' name='wl_mode'
>
700 <input type='hidden' name='wds_enable'
>
701 <input type='hidden' name='wl_wds'
>
702 <input type='hidden' name='wds_save'
>
703 <input type='hidden' name='lan_proto'
>
704 <input type='hidden' name='wan_dns'
>
705 <input type='hidden' name='wl_radio'
>
706 <input type='hidden' name='wl_closed'
>
707 <input type='hidden' name='wl_key'
>
708 <input type='hidden' name='wl_gmode'
>
709 <input type='hidden' name='security_mode'
>
710 <input type='hidden' name='wl_akm'
>
711 <input type='hidden' name='wl_auth'
>
712 <input type='hidden' name='wl_auth_mode'
>
713 <input type='hidden' name='wl_wep'
>
714 <input type='hidden' name='wl_lazywds'
>
717 <div class='section-title'
>WAN / Internet
</div>
718 <div class='section'
>
719 <script type='text/javascript'
>
720 createFieldTable('', [
721 { title
: 'Type', name
: 'wan_proto', type
: 'select', options
: [['dhcp','DHCP'],['pppoe','PPPoE'],['static','Static'],['pptp','PPTP'],['l2tp','L2TP'],['disabled','Disabled']],
722 value
: nvram
.wan_proto
},
723 { title
: 'Username', name
: 'ppp_username', type
: 'text', maxlen
: 50, size
: 54, value
: nvram
.ppp_username
},
724 { title
: 'Password', name
: 'ppp_passwd', type
: 'password', maxlen
: 50, size
: 54, peekaboo
: 1, value
: nvram
.ppp_passwd
},
725 { title
: 'Service Name', name
: 'ppp_service', type
: 'text', maxlen
: 50, size
: 54, value
: nvram
.ppp_service
},
726 { title
: 'L2TP Server', name
: 'l2tp_server_ip', type
: 'text', maxlen
: 15, size
: 17, value
: nvram
.l2tp_server_ip
},
727 { title
: 'IP Address', name
: 'wan_ipaddr', type
: 'text', maxlen
: 15, size
: 17, value
: nvram
.wan_ipaddr
},
728 { title
: 'Subnet Mask', name
: 'wan_netmask', type
: 'text', maxlen
: 15, size
: 17, value
: nvram
.wan_netmask
},
729 { title
: 'Gateway', name
: 'wan_gateway', type
: 'text', maxlen
: 15, size
: 17, value
: nvram
.wan_gateway
},
730 { title
: 'Gateway', name
: 'pptp_server_ip', type
: 'text', maxlen
: 15, size
: 17, value
: nvram
.pptp_server_ip
},
731 { title
: 'Connect Mode', name
: 'ppp_demand', type
: 'select', options
: [['1', 'Connect On Demand'],['0', 'Keep Alive']],
732 value
: nvram
.ppp_demand
},
733 { title
: 'Max Idle Time', indent
: 2, name
: 'ppp_idletime', type
: 'text', maxlen
: 5, size
: 7, suffix
: ' <i>(minutes)</i>',
734 value
: nvram
.ppp_idletime
},
735 { title
: 'Check Interval', indent
: 2, name
: 'ppp_redialperiod', type
: 'text', maxlen
: 5, size
: 7, suffix
: ' <i>(seconds)</i>',
736 value
: nvram
.ppp_redialperiod
},
737 { title
: 'MTU', multi
: [
738 { name
: 'mtu_enable', type
: 'select', options
: [['0', 'Default'],['1','Manual']], value
: nvram
.mtu_enable
},
739 { name
: 'f_wan_mtu', type
: 'text', maxlen
: 4, size
: 6, value
: nvram
.wan_mtu
} ] },
740 { title
: 'Use WAN port for LAN', name
: 'f_wan_islan', type
: 'checkbox', value
: (nvram
.wan_islan
== 1) }
745 <div class='section-title'
>LAN
</div>
746 <div class='section'
>
747 <script type='text/javascript'
>
748 dns
= nvram
.wan_dns
.split(/\s+/);
749 ipp
= nvram
.lan_ipaddr
.split('.').splice(0, 3).join('.');
751 createFieldTable('', [
752 { title
: 'Router IP Address', name
: 'lan_ipaddr', type
: 'text', maxlen
: 15, size
: 17, value
: nvram
.lan_ipaddr
},
753 { title
: 'Subnet Mask', name
: 'lan_netmask', type
: 'text', maxlen
: 15, size
: 17, value
: nvram
.lan_netmask
},
754 { title
: 'Default Gateway', name
: 'lan_gateway', type
: 'text', maxlen
: 15, size
: 17, value
: nvram
.lan_gateway
},
755 { title
: 'Static DNS', name
: 'f_dns_1', type
: 'text', maxlen
: 21, size
: 25, value
: dns
[0] || '0.0.0.0' },
756 { title
: '<small>(IP:PORT)</small>', name
: 'f_dns_2', type
: 'text', maxlen
: 21, size
: 25, value
: dns
[1] || '0.0.0.0' },
757 { title
: '', name
: 'f_dns_3', type
: 'text', maxlen
: 21, size
: 25, value
: dns
[2] || '0.0.0.0' },
758 { title
: 'DHCP Server', name
: 'f_dhcpd_enable', type
: 'checkbox', value
: (nvram
.lan_proto
== 'dhcp') },
759 { title
: 'IP Address Range', indent
: 2, multi
: [
760 { name
: 'dhcpd_startip', type
: 'text', maxlen
: 15, size
: 17, value
: nvram
.dhcpd_startip
, suffix
: ' - ' },
761 { name
: 'dhcpd_endip', type
: 'text', maxlen
: 15, size
: 17, value
: nvram
.dhcpd_endip
, suffix
: ' <i id="dhcp_count"></i>' }
764 { title
: 'Lease Time', indent
: 2, name
: 'dhcp_lease', type
: 'text', maxlen
: 6, size
: 8, suffix
: ' <i>(minutes)</i>',
765 value
: (nvram
.dhcp_lease
> 0) ? nvram
.dhcp_lease
: 1440 },
766 { title
: 'WINS', indent
: 2, name
: 'wan_wins', type
: 'text', maxlen
: 15, size
: 17, value
: nvram
.wan_wins
}
772 <div class='section-title'
>Wireless
</div>
773 <div class='section'
>
774 <script type='text/javascript'
>
776 { title
: 'Enable Wireless', name
: 'f_wl_radio', type
: 'checkbox',
777 value
: (nvram
.wl_radio
== '1') && (nvram
.wl_net_mode
!= 'disabled') },
778 { title
: 'MAC Address', text
: '<a href="advanced-mac.asp">' + nvram
.wl0_hwaddr
+ '</a>' },
779 { title
: 'Wireless Mode', name
: 'f_wmode', type
: 'select',
780 options
: [['ap', 'Access Point'],['apwds', 'Access Point + WDS'],['sta', 'Wireless Client'],['wet', 'Wireless Ethernet Bridge'],['wds', 'WDS']],
781 value
: ((nvram
.wl_mode
== 'ap') && (nvram
.wds_enable
== '1')) ? 'apwds' : nvram
.wl_mode
},
782 { title
: 'B/G Mode', name
: 'wl_net_mode', type
: 'select', value
: (nvram
.wl_net_mode
== 'disabled') ? 'mixed' : nvram
.wl_net_mode
, options
:[['mixed','Mixed'],['b-only','B Only'],['g-only','G Only']] },
783 { title
: 'SSID', name
: 'wl_ssid', type
: 'text', maxlen
: 32, size
: 34, value
: nvram
.wl_ssid
},
784 { title
: 'Broadcast', indent
: 2, name
: 'f_bcast', type
: 'checkbox', value
: (nvram
.wl_closed
== '0') },
785 { title
: 'Channel', name
: 'wl_channel', type
: 'select', options
: ghz
, suffix
: ' <input type="button" id="_f_scan" value="Scan" onclick="scanButton()"> <img src="spin.gif" id="spin">',
786 value
: nvram
.wl_channel
},
788 { title
: 'Security', name
: 'security_mode2', type
: 'select',
789 options
: [['disabled','Disabled'],['wep','WEP'],['wpa_personal','WPA Personal'],['wpa_enterprise','WPA Enterprise'],['wpa2_personal','WPA2 Personal'],['wpa2_enterprise','WPA2 Enterprise'],['wpaX_personal','WPA / WPA2 Personal'],['wpaX_enterprise','WPA / WPA2 Enterprise'],['radius','Radius']],
790 value
: nvram
.security_mode2
},
791 { title
: 'Encryption', indent
: 2, name
: 'wl_crypto', type
: 'select',
792 options
: [['tkip','TKIP'],['aes','AES'],['tkip+aes','TKIP / AES']], value
: nvram
.wl_crypto
},
793 { title
: 'Shared Key', indent
: 2, name
: 'wl_wpa_psk', type
: 'password', maxlen
: 64, size
: 66, peekaboo
: 1,
794 suffix
: ' <input type="button" id="_f_psk_random1" value="Random" onclick="random_psk(\'_wl_wpa_psk\')">',
795 value
: nvram
.wl_wpa_psk
},
796 { title
: 'Shared Key', indent
: 2, name
: 'wl_radius_key', type
: 'password', maxlen
: 80, size
: 32, peekaboo
: 1,
797 suffix
: ' <input type="button" id="_f_psk_random2" value="Random" onclick="random_psk(\'_wl_radius_key\')">',
798 value
: nvram
.wl_radius_key
},
799 { title
: 'Group Key Renewal', indent
: 2, name
: 'wl_wpa_gtk_rekey', type
: 'text', maxlen
: 4, size
: 6, suffix
: ' <i>(seconds)</i>',
800 value
: nvram
.wl_wpa_gtk_rekey
},
801 { title
: 'Radius Server', indent
: 2, multi
: [
802 { name
: 'wl_radius_ipaddr', type
: 'text', maxlen
: 15, size
: 17, value
: nvram
.wl_radius_ipaddr
},
803 { name
: 'wl_radius_port', type
: 'text', maxlen
: 5, size
: 7, prefix
: ' : ', value
: nvram
.wl_radius_port
} ] },
804 { title
: 'Encryption', indent
: 2, name
: 'wl_wep_bit', type
: 'select', options
: [['128','128-bits'],['64','64-bits']],
805 value
: nvram
.wl_wep_bit
},
806 { title
: 'Passphrase', indent
: 2, name
: 'wl_passphrase', type
: 'text', maxlen
: 16, size
: 20,
807 suffix
: ' <input type="button" id="_f_wep_gen" value="Generate" onclick="generate_wep()"> <input type="button" id="_f_wep_random" value="Random" onclick="random_wep()">',
808 value
: nvram
.wl_passphrase
}
811 for (i
= 1; i
<= 4; ++i
) {
813 { title
: ('Key ' + i
), indent
: 2, name
: ('wl_key' + i
), type
: 'text', maxlen
: 26, size
: 34,
814 suffix
: '<input type="radio" onchange="verifyFields(this,1)" onclick="verifyFields(this,1)" name="f_wepidx" id="_f_wepidx_' + i
+ '" value="' + i
+ '"' + ((nvram
.wl_key
== i
) ? ' checked>' : '>'),
815 value
: nvram
['wl_key' + i
] });
819 { title
: 'WDS', name
: 'f_wl_lazywds', type
: 'select',
820 options
: [['0','Link With...'],['1','Automatic']], value
: nvram
.wl_lazywds
} );
821 wds
= ((nvram
.wl_wds
== '') ? nvram
.wds_save
: nvram
.wl_wds
).split(/\s+/);
822 for (i
= 0; i
< 10; i
+= 2) {
823 f
.push({ title
: (i
? '' : 'MAC Address'), indent
: 2, multi
: [
824 { name
: 'f_wds_' + i
, type
: 'text', maxlen
: 17, size
: 20, value
: wds
[i
] || '00:00:00:00:00:00' },
825 { name
: 'f_wds_' + (i
+ 1), type
: 'text', maxlen
: 17, size
: 20, value
: wds
[i
+ 1] || '00:00:00:00:00:00' } ] } );
828 createFieldTable('', f
);
835 <tr><td id='footer' colspan=
2>
836 <span id='footer-msg'
></span>
837 <input type='button' value='Save' id='save-button' onclick='save()'
>
838 <input type='button' value='Cancel' id='cancel-button' onclick='reloadPage();'
>
842 <script type='text/javascript'
>earlyInit()</script>
843 <div style='height:
100px'
></div>