|
@@ -458,49 +458,49 @@ class Subnet extends cmdbAbstractObject
|
|
|
|
|
|
if (!$bEditMode)
|
|
|
{
|
|
|
- $oPage->SetCurrentTab(Dict::S('Class:Subnet/Tab:IPUsage'));
|
|
|
-
|
|
|
- $bit_ip = ip2long($this->Get('ip'));
|
|
|
- $bit_mask = ip2long($this->Get('ip_mask'));
|
|
|
-
|
|
|
- $iIPMin = $bit_ip & $bit_mask;
|
|
|
- $iIPMax = ($bit_ip | (~$bit_mask)) - 1;
|
|
|
-
|
|
|
- $sIPMin = long2ip($iIPMin);
|
|
|
- $sIPMax = long2ip($iIPMax);
|
|
|
-
|
|
|
- $oPage->p(Dict::Format('Class:Subnet/Tab:IPUsage-explain', $sIPMin, $sIPMax));
|
|
|
-
|
|
|
- $oIfSet = new CMDBObjectSet(DBObjectSearch::FromOQL("SELECT NetworkInterface AS if WHERE INET_ATON(if.ip_address) >= INET_ATON('$sIPMin') AND INET_ATON(if.ip_address) <= INET_ATON('$sIPMax')"));
|
|
|
- self::DisplaySet($oPage, $oIfSet, array('block_id' => 'nwif'));
|
|
|
-
|
|
|
- $iCountUsed = $oIfSet->Count();
|
|
|
- $iCountRange = $iIPMax - $iIPMin;
|
|
|
- $iFreeCount = $iCountRange - $iCountUsed;
|
|
|
-
|
|
|
- $oPage->SetCurrentTab(Dict::S('Class:Subnet/Tab:FreeIPs'));
|
|
|
- $oPage->p(Dict::Format('Class:Subnet/Tab:FreeIPs-count', $iFreeCount));
|
|
|
- $oPage->p(Dict::S('Class:Subnet/Tab:FreeIPs-explain'));
|
|
|
-
|
|
|
- $aUsedIPs = $oIfSet->GetColumnAsArray('ip_address', false);
|
|
|
- $iAnIP = $iIPMin;
|
|
|
- $iFound = 0;
|
|
|
- while (($iFound < min($iFreeCount, 10)) && ($iAnIP <= $iIPMax))
|
|
|
- {
|
|
|
- $sAnIP = long2ip($iAnIP);
|
|
|
- if (!in_array($sAnIP, $aUsedIPs))
|
|
|
- {
|
|
|
- $iFound++;
|
|
|
- $oPage->p($sAnIP);
|
|
|
- }
|
|
|
- else
|
|
|
+ $oPage->SetCurrentTab(Dict::S('Class:Subnet/Tab:IPUsage'));
|
|
|
+
|
|
|
+ $bit_ip = ip2long($this->Get('ip'));
|
|
|
+ $bit_mask = ip2long($this->Get('ip_mask'));
|
|
|
+
|
|
|
+ $iIPMin = ($bit_ip & $bit_mask) + 1; // exclude the first one: identifies the subnet itsel
|
|
|
+ $iIPMax = ($bit_ip | (~$bit_mask)) - 1; // exclude the last one : reserved for DHCP
|
|
|
+
|
|
|
+ $sIPMin = long2ip($iIPMin);
|
|
|
+ $sIPMax = long2ip($iIPMax);
|
|
|
+
|
|
|
+ $oPage->p(Dict::Format('Class:Subnet/Tab:IPUsage-explain', $sIPMin, $sIPMax));
|
|
|
+
|
|
|
+ $oIfSet = new CMDBObjectSet(DBObjectSearch::FromOQL("SELECT NetworkInterface AS if WHERE INET_ATON(if.ip_address) >= INET_ATON('$sIPMin') AND INET_ATON(if.ip_address) <= INET_ATON('$sIPMax')"));
|
|
|
+ self::DisplaySet($oPage, $oIfSet, array('block_id' => 'nwif'));
|
|
|
+
|
|
|
+ $iCountUsed = $oIfSet->Count();
|
|
|
+ $iCountRange = $iIPMax - $iIPMin;
|
|
|
+ $iFreeCount = $iCountRange - $iCountUsed;
|
|
|
+
|
|
|
+ $oPage->SetCurrentTab(Dict::S('Class:Subnet/Tab:FreeIPs'));
|
|
|
+ $oPage->p(Dict::Format('Class:Subnet/Tab:FreeIPs-count', $iFreeCount));
|
|
|
+ $oPage->p(Dict::S('Class:Subnet/Tab:FreeIPs-explain'));
|
|
|
+
|
|
|
+ $aUsedIPs = $oIfSet->GetColumnAsArray('ip_address', false);
|
|
|
+ $iAnIP = $iIPMin;
|
|
|
+ $iFound = 0;
|
|
|
+ while (($iFound < min($iFreeCount, 10)) && ($iAnIP <= $iIPMax))
|
|
|
{
|
|
|
+ $sAnIP = long2ip($iAnIP);
|
|
|
+ if (!in_array($sAnIP, $aUsedIPs))
|
|
|
+ {
|
|
|
+ $iFound++;
|
|
|
+ $oPage->p($sAnIP);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ }
|
|
|
+ $iAnIP++;
|
|
|
}
|
|
|
- $iAnIP++;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-}
|
|
|
class Patch extends cmdbAbstractObject
|
|
|
{
|
|
|
|