New routers supported
[tomato.git] / release / src / router / www / advanced-mac.asp
blob0c2e886ae393ee7a752040808f0f4009f8bf0e71
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 For use with Tomato Firmware only.
8 No part of this file may be used without permission.
9 -->
10 <html>
11 <head>
12 <meta http-equiv='content-type' content='text/html;charset=utf-8'>
13 <meta name='robots' content='noindex,nofollow'>
14 <title>[<% ident(); %>] Advanced: MAC Address</title>
15 <link rel='stylesheet' type='text/css' href='tomato.css'>
16 <% css(); %>
17 <script type='text/javascript' src='tomato.js'></script>
19 <!-- / / / -->
21 <script type='text/javascript' src='debug.js'></script>
23 <script type='text/javascript' src='wireless.jsx?_http_id=<% nv(http_id); %>'></script>
24 <script type='text/javascript'>
26 // <% nvram("et0macaddr,mac_wan,wl_macaddr,wl_hwaddr"); %>
28 function et0plus(plus)
30 var mac = nvram.et0macaddr.split(':');
31 if (mac.length != 6) return '';
32 while (plus-- > 0) {
33 for (var i = 5; i >= 3; --i) {
34 var n = (parseInt(mac[i], 16) + 1) & 0xFF;
35 mac[i] = n.hex(2);
36 if (n != 0) break;
39 return mac.join(':');
42 function defmac(which)
44 if (which == 'wan')
45 return et0plus(1);
46 else { // wlX
47 /* REMOVE-BEGIN */
48 // trying to mimic the behaviour of static int set_wlmac(int idx, int unit, int subunit, void *param) in router/rc/network.c when we have wlX or wlX.X
49 /* REMOVE-END */
50 var u, s, t, v;
51 u = which.substr(2, which.length) * 1;
52 s = parseInt(u.toString().substr(u.toString().indexOf(".") + 1, u.toString().length) * 1);
53 u = parseInt(u.toString().substr(0, u.toString().indexOf(".") - 1) * 1);
54 t = et0plus(2 + u + ((s > 0) ? (u * 0x10 + s) : 0)).split(':');
55 v = (parseInt(t[0], 16) + ((s > 0) ? (u * 0x10 + 2) : 0) ) & 0xFF;
56 t[0] = v.hex(2);
57 return t.join(':');
61 function bdefault(which)
63 E('_f_' + which + '_hwaddr').value = defmac(which);
64 verifyFields(null, true);
67 function brand(which)
69 var mac;
70 var i;
72 mac = ['00'];
73 for (i = 5; i > 0; --i)
74 mac.push(Math.floor(Math.random() * 255).hex(2));
75 E('_f_' + which + '_hwaddr').value = mac.join(':');
76 verifyFields(null, true);
79 function bclone(which)
81 E('_f_' + which + '_hwaddr').value = '<% compmac(); %>';
82 verifyFields(null, true);
85 function findPrevMAC(mac, maxidx)
87 if (E('_f_wan_hwaddr').value == mac) return 1;
89 for (var uidx = 0; uidx < maxidx; ++uidx) {
90 if (E('_f_wl'+wl_fface(uidx)+'_hwaddr').value == mac) return 1;
93 return 0;
96 function verifyFields(focused, quiet)
98 var uidx, u, a;
100 if (!v_mac('_f_wan_hwaddr', quiet)) return 0;
102 for (uidx = 0; uidx < wl_ifaces.length; ++uidx) {
103 u = wl_fface(uidx);
104 a = E('_f_wl'+u+'_hwaddr');
105 if (!v_mac(a, quiet)) return 0;
107 if (findPrevMAC(a.value, uidx)) {
108 ferror.set(a, 'Addresses must be unique', quiet);
109 return 0;
112 return 1;
115 function save()
117 var u, uidx, v;
119 if (!verifyFields(null, false)) return;
120 if (!confirm("Warning: Changing the MAC address may require that you reboot all devices, computers or modem connected to this router. Continue anyway?")) return;
122 var fom = E('_fom');
123 fom.mac_wan.value = (fom._f_wan_hwaddr.value == defmac('wan')) ? '' : fom._f_wan_hwaddr.value;
125 for (uidx = 0; uidx < wl_ifaces.length; ++uidx) {
126 u = wl_fface(uidx);
127 v = E('_f_wl'+u+'_hwaddr').value;
128 E('_wl'+u+'_hwaddr').value = (v == defmac('wl' + u)) ? '' : v;
131 form.submit(fom, 1);
134 </script>
135 </head>
137 <body>
138 <form id='_fom' method='post' action='tomato.cgi'>
139 <table id='container' cellspacing=0>
140 <tr><td colspan=2 id='header'>
141 <div class='title'>Tomato</div>
142 <div class='version'>Version <% version(); %></div>
143 </td></tr>
144 <tr id='body'><td id='navi'><script type='text/javascript'>navi()</script></td>
145 <td id='content'>
146 <div id='ident'><% ident(); %></div>
148 <!-- / / / -->
150 <input type='hidden' name='_nextpage' value='advanced-mac.asp'>
151 <input type='hidden' name='_nextwait' value='10'>
152 <input type='hidden' name='_service' value='*'>
154 <input type='hidden' name='mac_wan'>
156 <script type='text/javascript'>
157 for (var uidx = 0; uidx < wl_ifaces.length; ++uidx) {
158 var u = wl_fface(uidx);
159 W('<input type=\'hidden\' id=\'_wl'+u+'_hwaddr\' name=\'wl'+u+'_hwaddr\'>');
161 </script>
163 <div class='section-title'>MAC Address</div>
164 <div class='section'>
165 <script type='text/javascript'>
167 f = [
168 { title: 'WAN Port', indent: 1, name: 'f_wan_hwaddr', type: 'text', maxlen: 17, size: 20,
169 suffix: ' <input type="button" value="Default" onclick="bdefault(\'wan\')"> <input type="button" value="Random" onclick="brand(\'wan\')"> <input type="button" value="Clone PC" onclick="bclone(\'wan\')">',
170 value: nvram.mac_wan || defmac('wan') }
173 for (var uidx = 0; uidx < wl_ifaces.length; ++uidx) {
174 var u = wl_fface(uidx);
175 f.push(
176 { title: 'Wireless Interface ' + ((wl_ifaces.length > 1) ? wl_ifaces[uidx][0] : ''), indent: 1, name: 'f_wl'+u+'_hwaddr', type: 'text', maxlen: 17, size: 20,
177 suffix:' <input type="button" value="Default" onclick="bdefault(\'wl'+u+'\')"> <input type="button" value="Random" onclick="brand(\'wl'+u+'\')"> <input type="button" value="Clone PC" onclick="bclone(\'wl'+u+'\')">',
178 value: nvram['wl'+u+'_hwaddr'] || defmac('wl' + u) }
182 createFieldTable('', f);
184 </script>
185 <br>
186 <table border=0 cellpadding=1>
187 <tr><td>Router's LAN MAC Address:</td><td><b><script type='text/javascript'>W(('<% nv('et0macaddr'); %>').toUpperCase());</script></b></td></tr>
188 <tr><td>Computer's MAC Address:</td><td><b><script type='text/javascript'>W(('<% compmac(); %>').toUpperCase());</script></b></td></tr>
189 </table>
190 </div>
194 <!-- / / / -->
196 </td></tr>
197 <tr><td id='footer' colspan=2>
198 <span id='footer-msg'></span>
199 <input type='button' value='Save' id='save-button' onclick='save()'>
200 <input type='button' value='Cancel' id='cancel-button' onclick='reloadPage();'>
201 </td></tr>
202 </table>
203 </form>
204 <script type='text/javascript'>verifyFields(null, 1);</script>
205 </body>
206 </html>