summaryrefslogtreecommitdiffstats
path: root/modules-available/rebootcontrol/pages/subnet.inc.php
diff options
context:
space:
mode:
Diffstat (limited to 'modules-available/rebootcontrol/pages/subnet.inc.php')
-rw-r--r--modules-available/rebootcontrol/pages/subnet.inc.php42
1 files changed, 23 insertions, 19 deletions
diff --git a/modules-available/rebootcontrol/pages/subnet.inc.php b/modules-available/rebootcontrol/pages/subnet.inc.php
index 946d2d64..c38c7595 100644
--- a/modules-available/rebootcontrol/pages/subnet.inc.php
+++ b/modules-available/rebootcontrol/pages/subnet.inc.php
@@ -20,23 +20,16 @@ class SubPage
private static function addSubnet()
{
User::assertPermission('subnet.edit');
- $range = [];
- foreach (['start', 'end'] as $key) {
- $range[$key] = Request::post($key, Request::REQUIRED, 'string');
- $range[$key . '_l'] = ip2long($range[$key]);
- if ($range[$key . '_l'] === false) {
- Message::addError('invalid-ip-address', $range[$key]);
- return;
- }
- }
- if ($range['start_l'] > $range['end_l']) {
- Message::addError('invalid-range', $range['start'], $range['end']);
+ $cidr = Request::post('cidr', Request::REQUIRED, 'string');
+ $range = IpUtil::parseCidr($cidr);
+ if ($range === false) {
+ Message::addError('invalid-cidr', $cidr);
return;
}
$ret = Database::exec('INSERT INTO reboot_subnet (start, end, fixed, isdirect)
VALUES (:start, :end, 1, 0)', [
- 'start' => sprintf('%u', $range['start_l']),
- 'end' => sprintf('%u', $range['end_l']),
+ 'start' => $range['start'],
+ 'end' => $range['end'],
], true);
if ($ret === false) {
Message::addError('subnet-already-exists');
@@ -97,15 +90,15 @@ class SubPage
User::assertPermission('subnet.*');
$nets = [];
$res = Database::simpleQuery('SELECT subnetid, start, end, fixed, isdirect,
- lastdirectcheck, lastseen, seencount, Count(hxs.hostid) AS jumphostcount
- FROM reboot_subnet
+ nextdirectcheck, lastseen, seencount, Count(hxs.hostid) AS jumphostcount, Count(sxs.srcid) AS sourcecount
+ FROM reboot_subnet s
LEFT JOIN reboot_jumphost_x_subnet hxs USING (subnetid)
+ LEFT JOIN reboot_subnet_x_subnet sxs ON (s.subnetid = sxs.dstid AND sxs.reachable <> 0)
GROUP BY subnetid, start, end
ORDER BY start ASC, end DESC');
$deadline = strtotime('-60 days');
while ($row = $res->fetch(PDO::FETCH_ASSOC)) {
- $row['start_s'] = long2ip($row['start']);
- $row['end_s'] = long2ip($row['end']);
+ $row['cidr'] = IpUtil::rangeToCidr($row['start'], $row['end']);
$row['lastseen_s'] = Util::prettyTime($row['lastseen']);
if ($row['lastseen'] && $row['lastseen'] < $deadline) {
$row['lastseen_class'] = 'text-danger';
@@ -114,7 +107,6 @@ class SubPage
}
$data = ['subnets' => $nets];
Render::addTemplate('subnet-list', $data);
- Module::isAvailable('js_ip');
}
private static function showSubnet()
@@ -127,17 +119,29 @@ class SubPage
Message::addError('invalid-subnet', $id);
return;
}
+ $subnet['cidr'] = IpUtil::rangeToCidr($subnet['start'], $subnet['end']);
$subnet['start_s'] = long2ip($subnet['start']);
$subnet['end_s'] = long2ip($subnet['end']);
+ // Get list of jump hosts
$res = Database::simpleQuery('SELECT h.hostid, h.host, h.port, hxs.subnetid FROM reboot_jumphost h
LEFT JOIN reboot_jumphost_x_subnet hxs ON (h.hostid = hxs.hostid AND hxs.subnetid = :id)
ORDER BY h.host ASC', ['id' => $id]);
+ // Mark those assigned to the current subnet
$jh = [];
while ($row = $res->fetch(PDO::FETCH_ASSOC)) {
$row['checked'] = $row['subnetid'] === null ? '' : 'checked';
$jh[] = $row;
}
$subnet['jumpHosts'] = $jh;
+ // Get list of all subnets that can broadcast into this one
+ $res = Database::simpleQuery('SELECT s.start, s.end FROM reboot_subnet s
+ INNER JOIN reboot_subnet_x_subnet sxs ON (s.subnetid = sxs.srcid AND sxs.dstid = :id AND sxs.reachable = 1)
+ ORDER BY s.start ASC', ['id' => $id]);
+ $sn = [];
+ while ($row = $res->fetch(PDO::FETCH_ASSOC)) {
+ $sn[] = ['cidr' => IpUtil::rangeToCidr($row['start'], $row['end'])];
+ }
+ $subnet['sourceNets'] = $sn;
Permission::addGlobalTags($subnet['perms'], null, ['subnet.flag', 'jumphost.view', 'jumphost.assign-subnet']);
Render::addTemplate('subnet-edit', $subnet);
}
@@ -147,4 +151,4 @@ class SubPage
}
-} \ No newline at end of file
+}