Exemple #1
0
function fatlady_dhcps($prefix, $svc)
{
    $service = cut($svc, 0, ".");
    $version = scut($service, 0, "DHCPS");
    XNODE_set_var("FATLADY_DHCPS_PATH", $prefix);
    XNODE_set_var("SERVICE_NAME", $svc);
    $b = "/htdocs/phplib/fatlady/DHCPS";
    if ($version == 4) {
        dophp("load", $b . "/dhcps4.php");
    } else {
        if ($version == 6) {
            dophp("load", $b . "/dhcps6.php");
        } else {
            $_GLOBALS["FATLADY_result"] = "FAILED";
            $_GLOBALS["FATLADY_node"] = "";
            $_GLOBALS["FATLADY_message"] = "Unsupported DHCP service : " . $svc;
            /* internal error, no i18n(). */
        }
    }
    XNODE_del_var("FATLADY_DHCPS_PATH");
    XNODE_del_var("SERVICE_NAME");
    if ($_GLOBALS["FATLADY_result"] == "OK") {
        set($prefix . "/valid", 1);
    }
}
Exemple #2
0
function dhcp_client($mode, $inf, $devnam, $opt, $router, $dns)
{
    $hlp = "/var/servd/" . $inf . "-dhcp6c.sh";
    $pid = "/var/servd/" . $inf . "-dhcp6c.pid";
    $cfg = "/var/servd/" . $inf . "-dhcp6c.cfg";
    /* DHCP over PPP session ? */
    $previnf = XNODE_get_var($inf . "_PREVINF");
    XNODE_del_var($inf . "_PREVINF");
    /* dslite ? */
    $nextinf = XNODE_get_var($inf . "_NEXTINF");
    XNODE_del_var($inf . "_NEXTINF");
    //if ($mode=="PPPDHCP" && $_GLOBALS["PREVINF"]!="")
    //msg("mode is ".$mode.", previnf is ".$previnf);
    msg("mode is " . $mode . ", previnf is " . $previnf . ", nextinf is " . $nextinf);
    if ($mode == "PPPDHCP" && $previnf != "") {
        //$pppdev = PHYINF_getruntimeifname($_GLOBALS["PREVINF"]);
        $pppdev = PHYINF_getruntimeifname($previnf);
        if ($pppdev == "") {
            return error("no PPP device.");
        }
        msg("PPP device = " . $pppdev);
    }
    msg("dhcpopt: " . $opt);
    /* Gererate DHCP-IAID from 32-bit of mac address*/
    $mac = PHYINF_getphymac($inf);
    $mac1 = cut($mac, 3, ":");
    $mac2 = cut($mac, 0, ":");
    $mac3 = cut($mac, 1, ":");
    $mac4 = cut($mac, 2, ":");
    $iaidstr = $mac1 . $mac2 . $mac3 . $mac4;
    $iaid = strtoul($iaidstr, 16);
    /* Generate configuration file. */
    if ($mode == "INFOONLY") {
        $send = "\tinformation-only;\n";
        $idas = "";
    } else {
        //check if we have pd hint
        $stsp = XNODE_getpathbytarget("/runtime", "inf", "uid", $inf, 0);
        $pdhint_enable = query($stsp . "/pdhint/enable");
        $pdhintmsg = "\n";
        if ($pdhint_enable == "1") {
            $pdhint_network = query($stsp . "/pdhint/network");
            $pdhint_prefix = query($stsp . "/pdhint/prefix");
            $pdhint_plft = query($stsp . "/pdhint/preferlft");
            $pdhint_vlft = query($stsp . "/pdhint/validlft");
            if ($pdhint_vlft != "") {
                $pdhintmsg = "\tprefix " . $pdhint_network . "/" . $pdhint_prefix . " " . $pdhint_plft . " " . $pdhint_vlft . ";\n";
            } else {
                $pdhintmsg = "\tprefix " . $pdhint_network . "/" . $pdhint_prefix . " " . $pdhint_plft . ";\n";
            }
        }
        //check if we got the prefix before
        //++++
        $pre_pd_network = query("/runtime/ipv6/pre_pdnetwork");
        if ($pre_pd_network != "") {
            $pre_pd_prefix = query("/runtime/ipv6/pre_pdprefix");
            $pre_pd_plft = query("/runtime/ipv6/pre_pdplft");
            $pre_pd_vlft = query("/runtime/ipv6/pre_pdvlft");
            if ($pre_pd_vlft != "") {
                $pdhintmsg = "\tprefix " . $pre_pd_network . "/" . $pre_pd_prefix . " " . $pre_pd_plft . " " . $pre_pd_vlft . ";\n";
            } else {
                $pdhintmsg = "\tprefix " . $pre_pd_network . "/" . $pre_pd_prefix . " " . $pre_pd_plft . ";\n";
            }
        } else {
            $pdhintmsg = "\tprefix  ::/56 0 0;\n";
        }
        //----
        //if (strstr($opt,"IA-NA")!="") {$send=$send."\tsend ia-na 0;\n"; $idas=$idas."id-assoc na {\n};\n";}
        if (strstr($opt, "IA-NA") != "") {
            $send = $send . "\tsend ia-na " . $iaid . ";\n";
            $idas = $idas . "id-assoc na " . $iaid . "{\n};\n";
        }
        //if (strstr($opt,"IA-PD")!="") {$send=$send."\tsend ia-pd 0;\n"; $idas=$idas."id-assoc pd {\n};\n";}
        if (strstr($opt, "IA-PD") != "") {
            $send = $send . "\tsend ia-pd 0;\n";
            $idas = $idas . "id-assoc pd {\n" . $pdhintmsg . "};\n";
        }
    }
    if ($mode == "PPPDHCP") {
        $dname = $pppdev;
    } else {
        $dname = $devnam;
    }
    $nextinfp = XNODE_getpathbytarget("", "inf", "uid", $nextinf, 0);
    $nextinet = query($nextinfp . "/inet");
    $nextinetp = XNODE_getpathbytarget("inet", "entry", "uid", $nextinet, 0);
    $nextmode = query($nextinetp . "/ipv4/ipv4in6/mode");
    if ($nextinf != "" && $nextmode == "dslite") {
        $rqstmsg = "\trequest aftr-server-domain-name;\n";
    } else {
        $rqstmsg = "";
    }
    fwrite(w, $cfg, "interface " . $dname . " {\n" . $send . "\trequest domain-name-servers;\n" . "\trequest domain-name;\n" . "\trequest ntp-servers;\n" . $rqstmsg . "\tscript \"" . $hlp . "\";\n" . "};\n" . $idas);
    /* generate callback script */
    fwrite(w, $hlp, "#!/bin/sh\n" . 'if [ $new_addr != "" ] || [ $new_pd_prefix != "" ]; then\\n' . "\techo [\$0]: [{$new_addr}] [{$new_pd_prefix}] [{$new_pd_plen}] [{$new_pd_pltime}] [{$new_pd_vltime}] > /dev/console\n" . "else\n" . "\texit 0\n" . "fi\n" . "phpsh /etc/services/INET/inet6_dhcpc_helper.php" . " INF=" . $inf . " MODE=" . $mode . " DEVNAM=" . $dname . " GATEWAY=" . $router . " DHCPOPT=" . $opt . ' "NAMESERVERS=$new_domain_name_servers"' . ' "DOMAIN=$new_domain_name"' . ' "NEW_ADDR=$new_addr"' . ' "NEW_PD_PREFIX=$new_pd_prefix"' . ' "NEW_PD_PLEN=$new_pd_plen"' . ' "NEW_PD_PLTIME=$new_pd_pltime"' . ' "NEW_PD_VLTIME=$new_pd_vltime"' . ' "DNS=' . $dns . '"' . ' "NEW_AFTR_NAME=$new_aftr_name"' . ' "NTPSERVER=$new_ntp_servers"' . "\n");
    /* Start DHCP client */
    cmd("chmod +x " . $hlp);
    if ($pppdev == "") {
        cmd("dhcp6c -c " . $cfg . " -p " . $pid . " -t LL -n " . $inf . " " . $devnam);
    } else {
        cmd("dhcp6c -c " . $cfg . " -p " . $pid . " -t LL -o " . $devnam . " -n " . $inf . " " . $pppdev);
    }
    return 0;
}