1 <!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML
4.0//EN'
>
4 Copyright (C) 2006-2008 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(); %>] New: ARP Binding
</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>
20 <style type='text/css'
>
31 <script type='text/javascript' src='debug.js'
></script>
33 <script type='text/javascript'
>
35 // <% nvram("new_arpbind_enable,new_arpbind_only,new_arpbind_list"); %>
37 var arpg
= new TomatoGrid();
39 arpg
.exist = function(f
, v
)
41 var data
= this.getAllData();
42 for (var i
= 0; i
< data
.length
; ++i
) {
43 if (data
[i
][f
] == v
) return true;
48 arpg
.existMAC = function(mac
)
50 if (mac
== "00:00:00:00:00:00") return false;
51 return this.exist(0, mac
);
54 arpg
.existIP = function(ip
)
56 if (ip
== "0.0.0.0") return true;
57 return this.exist(1, ip
);
60 arpg
.dataToView = function(data
) {
61 return [data
[0], data
[1]];
64 arpg
.verifyFields = function(row
, quiet
)
67 var f
= fields
.getAll(row
);
70 if (v_macz(f
[0], quiet
)) {
71 if (this.existMAC(f
[0].value
)) {
72 ferror
.set(f
[0], 'Duplicate MAC address', quiet
);
78 if (v_ip(f
[1], quiet
)) {
79 if(this.existIP(f
[1].value
)) {
80 ferror
.set(f
[1], 'Duplicate IP address', quiet
);
89 arpg
.resetNewEditor = function() {
92 f
= fields
.getAll(this.newEditor
);
95 f
[0].value
= '00:00:00:00:00:00';
96 f
[1].value
= '0.0.0.0';
100 arpg
.setup = function()
102 this.init('arpg-grid', '', 50,
103 [{ type
: 'text', maxlen
: 17 }, { type
: 'text', maxlen
: 15 }]);
104 this.headerSet(['MAC Address', 'IP Address']);
105 var s
= nvram
.new_arpbind_list
.split('>');
106 for (var i
= 0; i
< s
.length
; ++i
) {
107 var t
= s
[i
].split('<');
108 if (t
.length
== 2) this.insertData(-1, t
);
110 this.showNewEditor();
111 this.resetNewEditor();
116 if (arpg
.isEditing()) return;
118 var data
= arpg
.getAllData();
119 var arpbindlist
= '';
122 if (data
.length
!= 0) arpbindlist
+= data
[0].join('<');
123 for (i
= 1; i
< data
.length
; ++i
) {
124 arpbindlist
+= '>' + data
[i
].join('<');
128 fom
.new_arpbind_enable
.value
= E('_f_new_arpbind_enable').checked
? 1 : 0;
129 fom
.new_arpbind_only
.value
= E('_f_new_arpbind_only').checked
? 1 : 0;
130 fom
.new_arpbind_list
.value
= arpbindlist
;
140 <body onload='init()'
>
141 <form id='_fom' method='post' action='tomato.cgi'
>
142 <table id='container' cellspacing=
0>
143 <tr><td colspan=
2 id='header'
>
144 <div class='title'
>Tomato
</div>
145 <div class='version'
>Version <%
version(); %></div>
147 <tr id='body'
><td id='navi'
><script type='text/javascript'
>navi()</script></td>
149 <div id='ident'
><%
ident(); %></div>
153 <input type='hidden' name='_nextpage' value='new-arpbind.asp'
>
154 <input type='hidden' name='_service' value='arpbind-restart'
>
156 <input type='hidden' name='new_arpbind_enable'
>
157 <input type='hidden' name='new_arpbind_only'
>
158 <input type='hidden' name='new_arpbind_list'
>
160 <div class='section-title'
>ARP Binding
</div>
161 <div class='section'
>
162 <script type='text/javascript'
>
163 createFieldTable('', [
164 { title
: 'Enable ARP Binding', name
: 'f_new_arpbind_enable', type
: 'checkbox', value
: nvram
.new_arpbind_enable
!= '0' },
165 { title
: 'Limit unlisted machines', name
: 'f_new_arpbind_only', type
: 'checkbox', value
: nvram
.new_arpbind_only
!= '0' }
169 <table class='tomato-grid' id='arpg-grid'
></table>
176 <tr><td id='footer' colspan=
2>
177 <span id='footer-msg'
></span>
178 <input type='button' value='Save' id='save-button' onclick='save()'
>
179 <input type='button' value='Cancel' id='cancel-button' onclick='reloadPage();'
>
183 <script type='text/javascript'
>arpg
.setup();</script>