function createIPv4Prefix($range = '', $name = '', $is_connected = FALSE, $taglist = array(), $vlan_ck = NULL) { // $range is in x.x.x.x/x format, split into ip/mask vars $rangeArray = explode('/', $range); if (count($rangeArray) != 2) { throw new InvalidRequestArgException('range', $range, 'Invalid IPv4 prefix'); } $ip = $rangeArray[0]; $mask = $rangeArray[1]; $forbidden_ranges = array(constructIPRange("", 8), constructIPRange("ð", 4)); $net = constructIPRange(ip4_parse($ip), $mask); foreach ($forbidden_ranges as $invalid_net) { if (IPNetContainsOrEqual($invalid_net, $net)) { throw new InvalidArgException('range', $range, 'Reserved IPv4 network'); } } usePreparedInsertBlade('IPv4Network', array('ip' => ip4_bin2db($net['ip_bin']), 'mask' => $mask, 'name' => $name)); $network_id = lastInsertID(); if ($is_connected and $mask < 31) { updateV4Address($net['ip_bin'], 'network', 'yes'); updateV4Address(ip_last($net), 'broadcast', 'yes'); } produceTagsForNewRecord('ipv4net', $taglist, $network_id); if ($vlan_ck != NULL) { $ctx = getContext(); fixContext(spotEntity('ipv4net', $network_id)); if (permitted('ipv4net', '8021q', 'bind')) { commitSupplementVLANIPv4($vlan_ck, $network_id); } restoreContext($ctx); } return $network_id; }
function delIPv4Prefix() { assertUIntArg('id'); $netinfo = spotEntity('ipv4net', $_REQUEST['id']); loadIPAddrList($netinfo); if (!isIPNetworkEmpty($netinfo)) { showError("There are allocations within prefix, delete forbidden"); return; } if (array_key_exists($netinfo['ip_bin'], $netinfo['addrlist'])) { updateV4Address($netinfo['ip_bin'], '', 'no'); } $last_ip = ip_last($netinfo); if (array_key_exists($last_ip, $netinfo['addrlist'])) { updateV4Address($last_ip, '', 'no'); } destroyIPv4Prefix($_REQUEST['id']); showFuncMessage(__FUNCTION__, 'OK'); global $pageno; if ($pageno == 'ipv4net') { return buildRedirectURL('index', 'default'); } }
function importPTRData() { assertUIntArg('addrcount'); $nbad = $ngood = 0; for ($i = 1; $i <= $_REQUEST['addrcount']; $i++) { $inputname = "import_{$i}"; if (!isCheckSet($inputname)) { continue; } $ip_bin = assertIPv4Arg("addr_{$i}"); assertStringArg("descr_{$i}", TRUE); assertStringArg("rsvd_{$i}"); // Non-existent addresses will not have this argument set in request. $rsvd = 'no'; if ($_REQUEST["rsvd_{$i}"] == 'yes') { $rsvd = 'yes'; } if (updateV4Address($ip_bin, $_REQUEST["descr_{$i}"], $rsvd) == '') { $ngood++; } else { $nbad++; } } if (!$nbad) { return showFuncMessage(__FUNCTION__, 'OK', array($ngood)); } else { return showFuncMessage(__FUNCTION__, 'ERR', array($nbad, $ngood)); } }