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(); %>] Advanced: MAC Address
</title>
15 <link rel='stylesheet' type='text/css' href='tomato.css'
>
17 <script type='text/javascript' src='tomato.js'
></script>
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 '';
33 for (var i
= 5; i
>= 3; --i
) {
34 var n
= (parseInt(mac
[i
], 16) + 1) & 0xFF;
42 function defmac(which
)
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
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;
61 function bdefault(which
)
63 E('_f_' + which
+ '_hwaddr').value
= defmac(which
);
64 verifyFields(null, true);
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;
96 function verifyFields(focused
, quiet
)
100 if (!v_mac('_f_wan_hwaddr', quiet
)) return 0;
102 for (uidx
= 0; uidx
< wl_ifaces
.length
; ++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
);
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;
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
) {
127 v
= E('_f_wl'+u
+'_hwaddr').value
;
128 E('_wl'+u
+'_hwaddr').value
= (v
== defmac('wl' + u
)) ? '' : v
;
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>
144 <tr id='body'
><td id='navi'
><script type='text/javascript'
>navi()</script></td>
146 <div id='ident'
><%
ident(); %></div>
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\'>');
163 <div class='section-title'
>MAC Address
</div>
164 <div class='section'
>
165 <script type='text/javascript'
>
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
);
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
);
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>
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();'
>
204 <script type='text/javascript'
>verifyFields(null, 1);</script>