コード例 #1
0
ファイル: database.php プロジェクト: rhysm/racktables
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;
}
コード例 #2
0
ファイル: ophandlers.php プロジェクト: xtha/salt
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');
    }
}
コード例 #3
0
ファイル: ophandlers.php プロジェクト: rhysm/racktables
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));
    }
}