diff options
author | Simon Rettberg | 2020-04-27 13:38:32 +0200 |
---|---|---|
committer | Simon Rettberg | 2020-05-15 17:33:07 +0200 |
commit | ae048fb16bc6b2b2d7e5084db18c62cb379ffe1d (patch) | |
tree | 83e3ae3921d6d7f4c26efa63b64b9113d48e19d9 /modules-available/rebootcontrol/hooks | |
parent | [remoteaccess] New module (diff) | |
download | slx-admin-ae048fb16bc6b2b2d7e5084db18c62cb379ffe1d.tar.gz slx-admin-ae048fb16bc6b2b2d7e5084db18c62cb379ffe1d.tar.xz slx-admin-ae048fb16bc6b2b2d7e5084db18c62cb379ffe1d.zip |
[rebootcontrol/statistics] Move subnet size handling to hook
Diffstat (limited to 'modules-available/rebootcontrol/hooks')
-rw-r--r-- | modules-available/rebootcontrol/hooks/client-update.inc.php | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/modules-available/rebootcontrol/hooks/client-update.inc.php b/modules-available/rebootcontrol/hooks/client-update.inc.php new file mode 100644 index 00000000..48c16b66 --- /dev/null +++ b/modules-available/rebootcontrol/hooks/client-update.inc.php @@ -0,0 +1,24 @@ +<?php + +if ($type === '~poweron') { + $subnet = Request::post('subnet', false, 'string'); + if ($subnet !== false && ($subnet = explode('/', $subnet)) !== false && count($subnet) === 2 + && $subnet[0] === $ip && $subnet[1] >= 8 && $subnet[1] < 32) { + $start = ip2long($ip); + if ($start !== false) { + $maskHost = (int)(pow(2, 32 - $subnet[1]) - 1); + $maskNet = ~$maskHost & 0xffffffff; + $end = $start | $maskHost; + $start &= $maskNet; + $netparams = ['start' => sprintf('%u', $start), 'end' => sprintf('%u', $end), 'now' => $NOW]; + $affected = Database::exec('UPDATE reboot_subnet + SET lastseen = :now, seencount = seencount + 1 + WHERE start = :start AND end = :end', $netparams); + if ($affected === 0) { + // New entry + Database::exec('INSERT INTO reboot_subnet (start, end, fixed, isdirect, lastseen, seencount) + VALUES (:start, :end, 0, 0, :now, 1)', $netparams); + } + } + } +} |