summaryrefslogtreecommitdiffstats
path: root/usr/local/www/status_dhcp_leases.php
diff options
context:
space:
mode:
authorjim-p <jimp@pfsense.org>2013-10-22 08:58:17 -0400
committerjim-p <jimp@pfsense.org>2013-10-22 08:59:51 -0400
commit6ccefb28f02ac6bb2b60840392bdd8c2c1ee9178 (patch)
tree601f5ea09d0dbea863d19bad3fa341d3944f7e75 /usr/local/www/status_dhcp_leases.php
parent6794e407b0b3b410757c5ac1a58c3264b5a79197 (diff)
downloadpfsense-6ccefb28f02ac6bb2b60840392bdd8c2c1ee9178.zip
pfsense-6ccefb28f02ac6bb2b60840392bdd8c2c1ee9178.tar.gz
Optimize DHCPv4 lease display online status for static leases. Do not re-parse complete ARP table for each lease, as it can be slow with large ARP tables.
Diffstat (limited to 'usr/local/www/status_dhcp_leases.php')
-rwxr-xr-xusr/local/www/status_dhcp_leases.php18
1 files changed, 6 insertions, 12 deletions
diff --git a/usr/local/www/status_dhcp_leases.php b/usr/local/www/status_dhcp_leases.php
index 6c2dc69..78733db 100755
--- a/usr/local/www/status_dhcp_leases.php
+++ b/usr/local/www/status_dhcp_leases.php
@@ -137,15 +137,14 @@ $splitpattern = "'BEGIN { RS=\"}\";} {for (i=1; i<=NF; i++) printf \"%s \", \$i;
exec("/bin/cat {$leasesfile} | {$awk} {$cleanpattern} | {$awk} {$splitpattern}", $leases_content);
$leases_count = count($leases_content);
exec("/usr/sbin/arp -an", $rawdata);
-$arpdata = array();
+$arpdata_ip = array();
+$arpdata_mac = array();
foreach ($rawdata as $line) {
$elements = explode(' ',$line);
if ($elements[3] != "(incomplete)") {
$arpent = array();
- $arpent['ip'] = trim(str_replace(array('(',')'),'',$elements[1]));
- // $arpent['mac'] = trim($elements[3]);
- // $arpent['interface'] = trim($elements[5]);
- $arpdata[] = $arpent['ip'];
+ $arpdata_ip[] = trim(str_replace(array('(',')'),'',$elements[1]));
+ $arpdata_mac[] = strtolower(trim($elements[3]));
}
}
unset($rawdata);
@@ -235,7 +234,7 @@ foreach($leases_content as $lease) {
case "hardware":
$leases[$l]['mac'] = $data[$f+2];
/* check if it's online and the lease is active */
- if (in_array($leases[$l]['ip'], $arpdata)) {
+ if (in_array($leases[$l]['ip'], $arpdata_ip)) {
$leases[$l]['online'] = 'online';
} else {
$leases[$l]['online'] = 'offline';
@@ -289,12 +288,7 @@ foreach($config['interfaces'] as $ifname => $ifarr) {
$slease['end'] = "";
$slease['hostname'] = htmlentities($static['hostname']);
$slease['act'] = "static";
- $online = exec("/usr/sbin/arp -an |/usr/bin/grep {$slease['mac']}| /usr/bin/wc -l|/usr/bin/awk '{print $1;}'");
- if ($online == 1) {
- $slease['online'] = 'online';
- } else {
- $slease['online'] = 'offline';
- }
+ $slease['online'] = in_array(strtolower($slease['mac']), $arpdata_mac) ? 'online' : 'offline';
$leases[] = $slease;
}
}
OpenPOWER on IntegriCloud