Projet

Général

Profil

Télécharger (14,9 ko) Statistiques
| Branche: | Tag: | Révision:

univnautes / usr / local / www / status_dhcp_leases.php @ 3c4cddc7

1 4d875b4f Scott Ullrich
<?php
2 b46bfcf5 Bill Marquette
/* $Id$ */
3 5b237745 Scott Ullrich
/*
4 b9546722 Chris Buechler
	status_dhcp_leases.php
5 13d193c2 Scott Ullrich
	Copyright (C) 2004-2009 Scott Ullrich
6 5b237745 Scott Ullrich
	All rights reserved.
7 4d875b4f Scott Ullrich
8 3c4cddc7 Phil Davis
	originally part of m0n0wall (http://m0n0.ch/wall)
9 4d875b4f Scott Ullrich
	Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
10
	All rights reserved.
11
12 5b237745 Scott Ullrich
	Redistribution and use in source and binary forms, with or without
13
	modification, are permitted provided that the following conditions are met:
14 4d875b4f Scott Ullrich
15 5b237745 Scott Ullrich
	1. Redistributions of source code must retain the above copyright notice,
16
	   this list of conditions and the following disclaimer.
17 4d875b4f Scott Ullrich
18 5b237745 Scott Ullrich
	2. Redistributions in binary form must reproduce the above copyright
19
	   notice, this list of conditions and the following disclaimer in the
20
	   documentation and/or other materials provided with the distribution.
21 4d875b4f Scott Ullrich
22 5b237745 Scott Ullrich
	THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
23
	INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
24
	AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25
	AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
26
	OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27
	SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28
	INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29
	CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30
	ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31
	POSSIBILITY OF SUCH DAMAGE.
32
*/
33
34 13d193c2 Scott Ullrich
/*
35
	pfSense_BUILDER_BINARIES:	/usr/bin/awk	/bin/cat	/usr/sbin/arp	/usr/bin/wc	/usr/bin/grep
36
	pfSense_MODULE:	dhcpserver
37
*/
38
39 6b07c15a Matthew Grooms
##|+PRIV
40
##|*IDENT=page-status-dhcpleases
41
##|*NAME=Status: DHCP leases page
42
##|*DESCR=Allow access to the 'Status: DHCP leases' page.
43 b9546722 Chris Buechler
##|*MATCH=status_dhcp_leases.php*
44 6b07c15a Matthew Grooms
##|-PRIV
45
46 5b237745 Scott Ullrich
require("guiconfig.inc");
47 7d1e0109 Joecowboy
require_once("config.inc");
48 b63695db Scott Ullrich
49 f75d8a89 Carlos Eduardo Ramos
$pgtitle = array(gettext("Status"),gettext("DHCP leases"));
50 b32dd0a6 jim-p
$shortcut_section = "dhcp";
51 972e5568 jim-p
52
$leasesfile = "{$g['dhcpd_chroot_path']}/var/db/dhcpd.leases";
53
54
if (($_GET['deleteip']) && (is_ipaddr($_GET['deleteip']))) {
55 f6a11dac jim-p
	/* Stop DHCPD */
56 972e5568 jim-p
	killbyname("dhcpd");
57
58 f6a11dac jim-p
	/* Read existing leases */
59 f6fef11d Phil Davis
	/* $leases_contents has the lines of the file, including the newline char at the end of each line. */
60 d579e3db smos
	$leases_contents = file($leasesfile);
61 972e5568 jim-p
	$newleases_contents = array();
62
	$i=0;
63
	while ($i < count($leases_contents)) {
64 f6a11dac jim-p
		/* Find the lease(s) we want to delete */
65 f6fef11d Phil Davis
		if ($leases_contents[$i] == "lease {$_GET['deleteip']} {\n") {
66 f6a11dac jim-p
			/* Skip to the end of the lease declaration */
67 972e5568 jim-p
			do {
68
				$i++;
69 f6fef11d Phil Davis
			} while ($leases_contents[$i] != "}\n");
70 972e5568 jim-p
		} else {
71 f6a11dac jim-p
			/* It's a line we want to keep, copy it over. */
72 972e5568 jim-p
			$newleases_contents[] = $leases_contents[$i];
73
		}
74
		$i++;
75
	}
76
77 f6a11dac jim-p
	/* Write out the new leases file */
78 972e5568 jim-p
	$fd = fopen($leasesfile, 'w');
79
	fwrite($fd, implode("\n", $newleases_contents));
80
	fclose($fd);
81
82 f6a11dac jim-p
	/* Restart DHCP Service */
83 972e5568 jim-p
	services_dhcpd_configure();
84 b9546722 Chris Buechler
	header("Location: status_dhcp_leases.php?all={$_GET['all']}");
85 972e5568 jim-p
}
86
87 b63695db Scott Ullrich
include("head.inc");
88
89 5b237745 Scott Ullrich
?>
90
91
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
92
<?php include("fbegin.inc"); ?>
93
<?php
94
95
function leasecmp($a, $b) {
96 5742ca5e Scott Ullrich
        return strcmp($a[$_GET['order']], $b[$_GET['order']]);
97
}
98
99
function adjust_gmt($dt) {
100 e085eba5 Joecowboy
	global $config; 
101
	$dhcpd = $config['dhcpd'];
102 d8b37f91 Renato Botelho
	foreach ($dhcpd as $dhcpditem) {
103
		$dhcpleaseinlocaltime = $dhcpditem['dhcpleaseinlocaltime'];
104 df321263 Joecowboy
		if ($dhcpleaseinlocaltime == "yes") 
105
			break;
106
	}
107 e085eba5 Joecowboy
	if ($dhcpleaseinlocaltime == "yes") {
108 d8b37f91 Renato Botelho
		$ts = strtotime($dt . " GMT");
109 7d1e0109 Joecowboy
		return strftime("%Y/%m/%d %I:%M:%S%p", $ts);
110 d8b37f91 Renato Botelho
	} else
111
		return $dt;
112 5b237745 Scott Ullrich
}
113
114 428d20c4 Seth Mos
function remove_duplicate($array, $field)
115
{
116
  foreach ($array as $sub)
117
   $cmp[] = $sub[$field];
118 29e9dc64 jim-p
  $unique = array_unique(array_reverse($cmp,true));
119 428d20c4 Seth Mos
  foreach ($unique as $k => $rien)
120
   $new[] = $array[$k];
121
  return $new;
122 5b237745 Scott Ullrich
}
123
124 428d20c4 Seth Mos
$awk = "/usr/bin/awk";
125
/* this pattern sticks comments into a single array item */
126
$cleanpattern = "'{ gsub(\"#.*\", \"\");} { gsub(\";\", \"\"); print;}'";
127
/* We then split the leases file by } */
128 b4f7282c Seth Mos
$splitpattern = "'BEGIN { RS=\"}\";} {for (i=1; i<=NF; i++) printf \"%s \", \$i; printf \"}\\n\";}'";
129 5b237745 Scott Ullrich
130 428d20c4 Seth Mos
/* stuff the leases file in a proper format into a array by line */
131 13d193c2 Scott Ullrich
exec("/bin/cat {$leasesfile} | {$awk} {$cleanpattern} | {$awk} {$splitpattern}", $leases_content);
132 428d20c4 Seth Mos
$leases_count = count($leases_content);
133 468b0d65 Seth Mos
exec("/usr/sbin/arp -an", $rawdata);
134 6ccefb28 jim-p
$arpdata_ip = array();
135
$arpdata_mac = array();
136 468b0d65 Seth Mos
foreach ($rawdata as $line) {
137
	$elements = explode(' ',$line);
138
	if ($elements[3] != "(incomplete)") {
139
		$arpent = array();
140 6ccefb28 jim-p
		$arpdata_ip[] = trim(str_replace(array('(',')'),'',$elements[1]));
141
		$arpdata_mac[] = strtolower(trim($elements[3]));
142 468b0d65 Seth Mos
	}
143
}
144 d579e3db smos
unset($rawdata);
145 428d20c4 Seth Mos
$pools = array();
146 5b237745 Scott Ullrich
$leases = array();
147
$i = 0;
148 b4f7282c Seth Mos
$l = 0;
149
$p = 0;
150 5b237745 Scott Ullrich
151
// Put everything together again
152 d579e3db smos
foreach($leases_content as $lease) {
153 428d20c4 Seth Mos
	/* split the line by space */
154 d579e3db smos
	$data = explode(" ", $lease);
155 428d20c4 Seth Mos
	/* walk the fields */
156
	$f = 0;
157
	$fcount = count($data);
158 b4f7282c Seth Mos
	/* with less then 20 fields there is nothing useful */
159
	if($fcount < 20) {
160
		$i++;
161
		continue;
162
	}
163 428d20c4 Seth Mos
	while($f < $fcount) {
164 b4f7282c Seth Mos
		switch($data[$f]) {
165
			case "failover":
166 97752da5 jim-p
				$pools[$p]['name'] = trim($data[$f+2], '"');
167
				$pools[$p]['name'] = "{$pools[$p]['name']} (" . convert_friendly_interface_to_friendly_descr(substr($pools[$p]['name'], 5)) . ")";
168 b4f7282c Seth Mos
				$pools[$p]['mystate'] = $data[$f+7];
169
				$pools[$p]['peerstate'] = $data[$f+14];
170
				$pools[$p]['mydate'] = $data[$f+10];
171
				$pools[$p]['mydate'] .= " " . $data[$f+11];
172
				$pools[$p]['peerdate'] = $data[$f+17];
173
				$pools[$p]['peerdate'] .= " " . $data[$f+18];
174
				$p++;
175
				$i++;
176
				continue 3;
177
			case "lease":
178
				$leases[$l]['ip'] = $data[$f+1];
179
				$leases[$l]['type'] = "dynamic";
180
				$f = $f+2;
181
				break;
182
			case "starts":
183
				$leases[$l]['start'] = $data[$f+2];
184
				$leases[$l]['start'] .= " " . $data[$f+3];
185
				$f = $f+3;
186
				break;
187
			case "ends":
188
				$leases[$l]['end'] = $data[$f+2];
189
				$leases[$l]['end'] .= " " . $data[$f+3];
190
				$f = $f+3;
191
				break;
192
			case "tstp":
193
				$f = $f+3;
194
				break;
195
			case "tsfp":
196
				$f = $f+3;
197
				break;
198
			case "atsfp":
199
				$f = $f+3;
200
				break;
201
			case "cltt":
202
				$f = $f+3;
203
				break;
204
			case "binding":
205 428d20c4 Seth Mos
				switch($data[$f+2]) {
206 b4f7282c Seth Mos
					case "active":
207
						$leases[$l]['act'] = "active";
208 428d20c4 Seth Mos
						break;
209 b4f7282c Seth Mos
					case "free":
210
						$leases[$l]['act'] = "expired";
211
						$leases[$l]['online'] = "offline";
212 428d20c4 Seth Mos
						break;
213 b4f7282c Seth Mos
					case "backup":
214
						$leases[$l]['act'] = "reserved";
215
						$leases[$l]['online'] = "offline";
216 428d20c4 Seth Mos
						break;
217
				}
218 b4f7282c Seth Mos
				$f = $f+1;
219
				break;
220
			case "next":
221
				/* skip the next binding statement */
222
				$f = $f+3;
223
				break;
224 dc073abd jim-p
			case "rewind":
225 042578fd jim-p
				/* skip the rewind binding statement */
226 dc073abd jim-p
				$f = $f+3;
227
				break;
228 b4f7282c Seth Mos
			case "hardware":
229
				$leases[$l]['mac'] = $data[$f+2];
230
				/* check if it's online and the lease is active */
231 6ccefb28 jim-p
				if (in_array($leases[$l]['ip'], $arpdata_ip)) {
232 468b0d65 Seth Mos
					$leases[$l]['online'] = 'online';
233
				} else {
234
					$leases[$l]['online'] = 'offline';
235 14cf741d Scott Ullrich
				}
236 b4f7282c Seth Mos
				$f = $f+2;
237
				break;
238
			case "client-hostname":
239
				if($data[$f+1] <> "") {
240
					$leases[$l]['hostname'] = preg_replace('/"/','',$data[$f+1]);
241
				} else {
242
					$hostname = gethostbyaddr($leases[$l]['ip']);
243
					if($hostname <> "") {
244
						$leases[$l]['hostname'] = $hostname;
245
					}
246
				}
247
				$f = $f+1;
248
				break;
249
			case "uid":
250
				$f = $f+1;
251
				break;
252 14cf741d Scott Ullrich
		}
253 428d20c4 Seth Mos
		$f++;
254 14cf741d Scott Ullrich
	}
255 b4f7282c Seth Mos
	$l++;
256 428d20c4 Seth Mos
	$i++;
257 d579e3db smos
	/* slowly chisel away at the source array */
258
	array_shift($leases_content);
259 5b237745 Scott Ullrich
}
260 d579e3db smos
/* remove the old array */
261
unset($lease_content);
262 428d20c4 Seth Mos
263
/* remove duplicate items by mac address */
264 9255cbc5 Seth Mos
if(count($leases) > 0) {
265 b4f7282c Seth Mos
	$leases = remove_duplicate($leases,"ip");
266 9255cbc5 Seth Mos
}
267 b4f7282c Seth Mos
268 9255cbc5 Seth Mos
if(count($pools) > 0) {
269
	$pools = remove_duplicate($pools,"name");
270
	asort($pools);
271
}
272 428d20c4 Seth Mos
273 9252431c Scott Ullrich
foreach($config['interfaces'] as $ifname => $ifarr) {
274 b9ed163d Ermal Luçi
	if (is_array($config['dhcpd'][$ifname]) && 
275
		is_array($config['dhcpd'][$ifname]['staticmap'])) {
276 9252431c Scott Ullrich
		foreach($config['dhcpd'][$ifname]['staticmap'] as $static) {
277
			$slease = array();
278
			$slease['ip'] = $static['ipaddr'];
279
			$slease['type'] = "static";
280
			$slease['mac'] = $static['mac'];
281 aedd7929 jim-p
			$slease['start'] = "";
282
			$slease['end'] = "";
283 08cf5428 Scott Ullrich
			$slease['hostname'] = htmlentities($static['hostname']);
284 9252431c Scott Ullrich
			$slease['act'] = "static";
285 6ccefb28 jim-p
			$slease['online'] = in_array(strtolower($slease['mac']), $arpdata_mac) ? 'online' : 'offline';
286 9252431c Scott Ullrich
			$leases[] = $slease;
287
		}
288
	}
289
}
290 5b237745 Scott Ullrich
291
if ($_GET['order'])
292
	usort($leases, "leasecmp");
293 428d20c4 Seth Mos
294
/* only print pool status when we have one */
295
if(count($pools) > 0) {
296 5b237745 Scott Ullrich
?>
297 2871ce84 Colin Fleming
<table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="dhcp leases">
298 428d20c4 Seth Mos
  <tr>
299 f75d8a89 Carlos Eduardo Ramos
    <td class="listhdrr"><?=gettext("Failover Group"); ?></a></td>
300
    <td class="listhdrr"><?=gettext("My State"); ?></a></td>
301
    <td class="listhdrr"><?=gettext("Since"); ?></a></td>
302
    <td class="listhdrr"><?=gettext("Peer State"); ?></a></td>
303
    <td class="listhdrr"><?=gettext("Since"); ?></a></td>
304 428d20c4 Seth Mos
  </tr>
305
<?php
306
foreach ($pools as $data) {
307
	echo "<tr>\n";
308 2871ce84 Colin Fleming
	echo "<td class=\"listlr\">{$fspans}{$data['name']}{$fspane}</td>\n";
309
	echo "<td class=\"listr\">{$fspans}{$data['mystate']}{$fspane}</td>\n";
310
	echo "<td class=\"listr\">{$fspans}" . adjust_gmt($data['mydate']) . "{$fspane}</td>\n";
311
	echo "<td class=\"listr\">{$fspans}{$data['peerstate']}{$fspane}</td>\n";
312
	echo "<td class=\"listr\">{$fspans}" . adjust_gmt($data['peerdate']) . "{$fspane}</td>\n";
313 428d20c4 Seth Mos
	echo "<td class=\"list\" valign=\"middle\" width=\"17\">&nbsp;</td>\n";
314
	echo "<td class=\"list\" valign=\"middle\" width=\"17\">&nbsp;</td>\n";
315
	echo "</tr>\n";
316
}
317
318
?>
319
</table>
320
321
<?php
322
/* only print pool status when we have one */
323
}
324
?>
325
326 2871ce84 Colin Fleming
<br/>
327 428d20c4 Seth Mos
328 2871ce84 Colin Fleming
<table class="tabcont sortable" width="100%" border="0" cellpadding="0" cellspacing="0" summary="dhcp leases">
329 5b237745 Scott Ullrich
  <tr>
330 f75d8a89 Carlos Eduardo Ramos
    <td class="listhdrr"><a href="#"><?=gettext("IP address"); ?></a></td>
331
    <td class="listhdrr"><a href="#"><?=gettext("MAC address"); ?></a></td>
332
    <td class="listhdrr"><a href="#"><?=gettext("Hostname"); ?></a></td>
333
    <td class="listhdrr"><a href="#"><?=gettext("Start"); ?></a></td>
334
    <td class="listhdrr"><a href="#"><?=gettext("End"); ?></a></td>
335
    <td class="listhdrr"><a href="#"><?=gettext("Online"); ?></a></td>
336
    <td class="listhdrr"><a href="#"><?=gettext("Lease Type"); ?></a></td>
337 5b237745 Scott Ullrich
	</tr>
338
<?php
339 57f2840e Evgeny
// Load MAC-Manufacturer table
340
$mac_man = load_mac_manufacturer_table();
341 5b237745 Scott Ullrich
foreach ($leases as $data) {
342 9252431c Scott Ullrich
	if (($data['act'] == "active") || ($data['act'] == "static") || ($_GET['all'] == 1)) {
343
		if ($data['act'] != "active" && $data['act'] != "static") {
344 5b237745 Scott Ullrich
			$fspans = "<span class=\"gray\">";
345 2871ce84 Colin Fleming
			$fspane = "&nbsp;</span>";
346 5b237745 Scott Ullrich
		} else {
347 2871ce84 Colin Fleming
			$fspans = "";
348
			$fspane = "&nbsp;";
349 5b237745 Scott Ullrich
		}
350 96033063 Erik Fonnesbeck
                $lip = ip2ulong($data['ip']);
351 5b2177e4 Scott Ullrich
		if ($data['act'] == "static") {
352
			foreach ($config['dhcpd'] as $dhcpif => $dhcpifconf) {
353 0e616855 Scott Ullrich
				if(is_array($dhcpifconf['staticmap'])) {
354
					foreach ($dhcpifconf['staticmap'] as $staticent) {
355
						if ($data['ip'] == $staticent['ipaddr']) {
356
							$data['if'] = $dhcpif;
357
							break;
358
						}
359 5b2177e4 Scott Ullrich
					}
360
				}
361
				/* exit as soon as we have an interface */
362
				if ($data['if'] != "")
363
					break;
364
			}
365
		} else {
366 8d8f0090 jim-p
			foreach ($config['dhcpd'] as $dhcpif => $dhcpifconf) {
367
				if (!is_array($dhcpifconf['range']))
368
					continue;
369 96033063 Erik Fonnesbeck
                        	if (($lip >= ip2ulong($dhcpifconf['range']['from'])) && ($lip <= ip2ulong($dhcpifconf['range']['to']))) {
370 5b2177e4 Scott Ullrich
                                	$data['if'] = $dhcpif;
371
                                	break;
372
                        	}
373
			}
374 69981800 Scott Ullrich
                }		
375 5b237745 Scott Ullrich
		echo "<tr>\n";
376 2871ce84 Colin Fleming
                echo "<td class=\"listlr\">{$fspans}{$data['ip']}{$fspane}</td>\n";
377 57f2840e Evgeny
		$mac=$data['mac']; 
378
		$mac_hi = strtoupper($mac[0] . $mac[1] . $mac[3] . $mac[4] . $mac[6] . $mac[7]);
379 9252431c Scott Ullrich
                if ($data['online'] != "online") {
380 57f2840e Evgeny
			if(isset($mac_man[$mac_hi])){ // Manufacturer for this MAC is defined
381 2871ce84 Colin Fleming
	                        echo "<td class=\"listr\">{$fspans}<a href=\"services_wol.php?if={$data['if']}&amp;mac=$mac\" title=\"" . gettext("$mac - send Wake on LAN packet to this MAC address") ."\">{$mac}</a><br /><font size=\"-2\"><i>{$mac_man[$mac_hi]}</i></font>{$fspane}</td>\n";
382 57f2840e Evgeny
			}else{	
383 2871ce84 Colin Fleming
                        	echo "<td class=\"listr\">{$fspans}<a href=\"services_wol.php?if={$data['if']}&amp;mac={$data['mac']}\" title=\"" . gettext("send Wake on LAN packet to this MAC address") ."\">{$data['mac']}</a>{$fspane}</td>\n";
384 57f2840e Evgeny
			}
385
                }else{
386
			if(isset($mac_man[$mac_hi])){ // Manufacturer for this MAC is defined
387 2871ce84 Colin Fleming
				echo "<td class=\"listr\">{$fspans}{$mac}<br /><font size=\"-2\"><i>{$mac_man[$mac_hi]}</i></font>{$fspane}</td>\n";
388 57f2840e Evgeny
	                }else{
389 2871ce84 Colin Fleming
                		echo "<td class=\"listr\">{$fspans}{$data['mac']}{$fspane}</td>\n";
390 57f2840e Evgeny
			}
391 37c0c49b Scott Ullrich
                }
392 2871ce84 Colin Fleming
                echo "<td class=\"listr\">{$fspans}"  . htmlentities($data['hostname']) . "{$fspane}</td>\n";
393 aedd7929 jim-p
				if ($data['type'] != "static") {
394 2871ce84 Colin Fleming
					echo "<td class=\"listr\">{$fspans}" . adjust_gmt($data['start']) . "{$fspane}</td>\n";
395
					echo "<td class=\"listr\">{$fspans}" . adjust_gmt($data['end']) . "{$fspane}</td>\n";
396 aedd7929 jim-p
				} else {
397 2871ce84 Colin Fleming
					echo "<td class=\"listr\">{$fspans} n/a {$fspane}</td>\n";
398
					echo "<td class=\"listr\">{$fspans} n/a {$fspane}</td>\n";
399 aedd7929 jim-p
				}
400 2871ce84 Colin Fleming
                echo "<td class=\"listr\">{$fspans}{$data['online']}{$fspane}</td>\n";
401
                echo "<td class=\"listr\">{$fspans}{$data['act']}{$fspane}</td>\n";
402
                echo "<td valign=\"middle\">&nbsp;";
403 9252431c Scott Ullrich
		if ($data['type'] == "dynamic") {
404 2871ce84 Colin Fleming
			echo "<a href=\"services_dhcp_edit.php?if={$data['if']}&amp;mac={$data['mac']}&amp;hostname={$data['hostname']}\">";
405
			echo "<img src=\"/themes/{$g['theme']}/images/icons/icon_plus.gif\" width=\"17\" height=\"17\" border=\"0\" title=\"" . gettext("add a static mapping for this MAC address") ."\" alt=\"add\" /></a>&nbsp;\n";
406 9252431c Scott Ullrich
		} else {
407 2871ce84 Colin Fleming
			echo "<img src=\"/themes/{$g['theme']}/images/icons/icon_plus_mo.gif\" width=\"17\" height=\"17\" border=\"0\" alt=\"add\" />&nbsp;\n";
408 9252431c Scott Ullrich
		}
409
410 2871ce84 Colin Fleming
                echo "<a href=\"services_wol_edit.php?if={$data['if']}&amp;mac={$data['mac']}&amp;descr={$data['hostname']}\">";
411
		echo "<img src=\"/themes/{$g['theme']}/images/icons/icon_wol_all.gif\" width=\"17\" height=\"17\" border=\"0\" title=\"" . gettext("add a Wake on LAN mapping for this MAC address") ."\" alt=\"add\" /></a>&nbsp;\n";
412 f6a11dac jim-p
413
		/* Only show the button for offline dynamic leases */
414
		if (($data['type'] == "dynamic") && ($data['online'] != "online")) {
415 2871ce84 Colin Fleming
			echo "<a href=\"status_dhcp_leases.php?deleteip={$data['ip']}&amp;all=" . htmlspecialchars($_GET['all']) . "\">";
416
			echo "<img src=\"/themes/{$g['theme']}/images/icons/icon_x.gif\" width=\"17\" height=\"17\" border=\"0\" title=\"" . gettext("delete this DHCP lease") . "\" alt=\"delete\" /></a>&nbsp;\n";
417 f6a11dac jim-p
		}
418 2871ce84 Colin Fleming
                echo "</td></tr>\n";
419 5b237745 Scott Ullrich
	}
420
}
421 428d20c4 Seth Mos
422 5b237745 Scott Ullrich
?>
423
</table>
424 2871ce84 Colin Fleming
<br/>
425 3ae16b9b Colin Fleming
<form action="status_dhcp_leases.php" method="get">
426 2871ce84 Colin Fleming
<input type="hidden" name="order" value="<?=htmlspecialchars($_GET['order']);?>" />
427 5b237745 Scott Ullrich
<?php if ($_GET['all']): ?>
428 2871ce84 Colin Fleming
<input type="hidden" name="all" value="0" />
429
<input type="submit" class="formbtn" value="<?=gettext("Show active and static leases only"); ?>" />
430 5b237745 Scott Ullrich
<?php else: ?>
431 2871ce84 Colin Fleming
<input type="hidden" name="all" value="1" />
432
<input type="submit" class="formbtn" value="<?=gettext("Show all configured leases"); ?>" />
433 5b237745 Scott Ullrich
<?php endif; ?>
434
</form>
435 428d20c4 Seth Mos
<?php if($leases == 0): ?>
436 f75d8a89 Carlos Eduardo Ramos
<p><strong><?=gettext("No leases file found. Is the DHCP server active"); ?>?</strong></p>
437 5b237745 Scott Ullrich
<?php endif; ?>
438 fda1fdae Scott Ullrich
439 5b237745 Scott Ullrich
<?php include("fend.inc"); ?>
440
</body>
441
</html>