diff options
author | jim-p <jimp@pfsense.org> | 2013-10-22 08:58:17 -0400 |
---|---|---|
committer | jim-p <jimp@pfsense.org> | 2013-10-22 08:59:51 -0400 |
commit | 6ccefb28f02ac6bb2b60840392bdd8c2c1ee9178 (patch) | |
tree | 601f5ea09d0dbea863d19bad3fa341d3944f7e75 /usr/local/www/status_dhcp_leases.php | |
parent | 6794e407b0b3b410757c5ac1a58c3264b5a79197 (diff) | |
download | pfsense-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-x | usr/local/www/status_dhcp_leases.php | 18 |
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; } } |