Migrate UI cleanup phase 4 from MIPS into ARM
[tomato.git] / release / src-rt-6.x.4708 / router / www / advanced-mac.asp
blob3792860108a954af5f16dec52219c7f5d27b3758
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 <meta name="viewport" content="width=device-width">
15 <title>[<% ident(); %>] Advanced: MAC Address</title>
16 <link rel='stylesheet' type='text/css' href='tomato.css'>
17 <% css(); %>
18 <script type='text/javascript' src='tomato.js'></script>
20 <!-- / / / -->
22 <script type='text/javascript' src='debug.js'></script>
24 <script type='text/javascript' src='wireless.jsx?_http_id=<% nv(http_id); %>'></script>
25 <script type='text/javascript'>
27 // <% nvram("et0macaddr,mac_wan,wl_macaddr,wl_hwaddr"); %>
29 function et0plus(plus)
31 var mac = nvram.et0macaddr.split(':');
32 if (mac.length != 6) return '';
33 while (plus-- > 0) {
34 for (var i = 5; i >= 3; --i) {
35 var n = (parseInt(mac[i], 16) + 1) & 0xFF;
36 mac[i] = n.hex(2);
37 if (n != 0) break;
40 return mac.join(':');
43 function defmac(which)
45 if (which == 'wan')
46 return et0plus(1);
47 else { // wlX
48 /* REMOVE-BEGIN */
49 // 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
50 /* REMOVE-END */
51 var u, s, t, v;
52 u = which.substr(2, which.length) * 1;
53 s = parseInt(u.toString().substr(u.toString().indexOf(".") + 1, u.toString().length) * 1);
54 u = parseInt(u.toString().substr(0, u.toString().indexOf(".") - 1) * 1);
55 t = et0plus(2 + u + ((s > 0) ? (u * 0x10 + s) : 0)).split(':');
56 v = (parseInt(t[0], 16) + ((s > 0) ? (u * 0x10 + 2) : 0) ) & 0xFF;
57 t[0] = v.hex(2);
58 return t.join(':');
62 function bdefault(which)
64 E('_f_' + which + '_hwaddr').value = defmac(which);
65 verifyFields(null, true);
68 function brand(which)
70 var mac;
71 var i;
73 mac = ['00'];
74 for (i = 5; i > 0; --i)
75 mac.push(Math.floor(Math.random() * 255).hex(2));
76 E('_f_' + which + '_hwaddr').value = mac.join(':');
77 verifyFields(null, true);
80 function bclone(which)
82 E('_f_' + which + '_hwaddr').value = '<% compmac(); %>';
83 verifyFields(null, true);
86 function findPrevMAC(mac, maxidx)
88 if (E('_f_wan_hwaddr').value == mac) return 1;
90 for (var uidx = 0; uidx < maxidx; ++uidx) {
91 if (E('_f_wl'+wl_fface(uidx)+'_hwaddr').value == mac) return 1;
94 return 0;
97 function verifyFields(focused, quiet)
99 var uidx, u, a;
101 if (!v_mac('_f_wan_hwaddr', quiet)) return 0;
103 for (uidx = 0; uidx < wl_ifaces.length; ++uidx) {
104 u = wl_fface(uidx);
105 a = E('_f_wl'+u+'_hwaddr');
106 if (!v_mac(a, quiet)) return 0;
108 if (findPrevMAC(a.value, uidx)) {
109 ferror.set(a, 'Addresses must be unique', quiet);
110 return 0;
113 return 1;
116 function save()
118 var u, uidx, v;
120 if (!verifyFields(null, false)) return;
121 if (!confirm("Warning: Changing the MAC address may require that you reboot all devices, computers or modem connected to this router. Continue anyway?")) return;
123 var fom = E('_fom');
124 fom.mac_wan.value = (fom._f_wan_hwaddr.value == defmac('wan')) ? '' : fom._f_wan_hwaddr.value;
126 for (uidx = 0; uidx < wl_ifaces.length; ++uidx) {
127 u = wl_fface(uidx);
128 v = E('_f_wl'+u+'_hwaddr').value;
129 E('_wl'+u+'_hwaddr').value = (v == defmac('wl' + u)) ? '' : v;
132 form.submit(fom, 1);
135 </script>
136 </head>
138 <body>
139 <form id='_fom' method='post' action='tomato.cgi'>
140 <table id='container' cellspacing=0>
141 <tr><td colspan=2 id='header'>
142 <div class='title'>Tomato</div>
143 <div class='version'>Version <% version(); %></div>
144 </td></tr>
145 <tr id='body'><td id='navi'><script type='text/javascript'>navi()</script></td>
146 <td id='content'>
147 <div id='ident'><% ident(); %></div>
149 <!-- / / / -->
151 <input type='hidden' name='_nextpage' value='advanced-mac.asp'>
152 <input type='hidden' name='_nextwait' value='10'>
153 <input type='hidden' name='_service' value='*'>
155 <input type='hidden' name='mac_wan'>
157 <script type='text/javascript'>
158 for (var uidx = 0; uidx < wl_ifaces.length; ++uidx) {
159 var u = wl_fface(uidx);
160 W('<input type=\'hidden\' id=\'_wl'+u+'_hwaddr\' name=\'wl'+u+'_hwaddr\'>');
162 </script>
164 <div class='section-title'>MAC Address</div>
165 <div class='section'>
166 <script type='text/javascript'>
168 f = [
169 { title: 'WAN Port', indent: 1, name: 'f_wan_hwaddr', type: 'text', maxlen: 17, size: 20,
170 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\')">',
171 value: nvram.mac_wan || defmac('wan') }
174 for (var uidx = 0; uidx < wl_ifaces.length; ++uidx) {
175 var u = wl_fface(uidx);
176 f.push(
177 { title: 'Wireless Interface ' + ((wl_ifaces.length > 1) ? wl_ifaces[uidx][0] : ''), indent: 1, name: 'f_wl'+u+'_hwaddr', type: 'text', maxlen: 17, size: 20,
178 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+'\')">',
179 value: nvram['wl'+u+'_hwaddr'] || defmac('wl' + u) }
183 createFieldTable('', f);
185 </script>
186 <br>
187 <table border=0 cellpadding=1>
188 <tr><td>Router's LAN MAC Address:</td><td><b><script type='text/javascript'>W(('<% nv('et0macaddr'); %>').toUpperCase());</script></b></td></tr>
189 <tr><td>Computer's MAC Address:</td><td><b><script type='text/javascript'>W(('<% compmac(); %>').toUpperCase());</script></b></td></tr>
190 </table>
191 </div>
195 <!-- / / / -->
197 </td></tr>
198 <tr><td id='footer' colspan=2>
199 <span id='footer-msg'></span>
200 <input type='button' value='Save' id='save-button' onclick='save()'>
201 <input type='button' value='Cancel' id='cancel-button' onclick='reloadPage();'>
202 </td></tr>
203 </table>
204 </form>
205 <script type='text/javascript'>verifyFields(null, 1);</script>
206 </body>
207 </html>