Esempio n. 1
0
function guifi_radio_add_link2ap_confirm_submit(&$form, &$form_state)
{
    guifi_log(GUIFILOG_TRACE, sprintf("function guifi_radio_add_link2ap_confirm_submit(Radio: %d)", $form_state['values']['filters']['from_radio']), $form_state['values']['filters']);
    $form_state['rebuild'] = TRUE;
    $interface_id = $form_state['values']['link2apInterface'];
    $local_ipv4 =& $form_state['values']['radios'][$form_state['values']['filters']['from_radio']]['interfaces'][$interface_id]['ipv4'];
    list($nid, $device_id, $radiodev_counter) = explode(',', $form_state['values']['linked']);
    // get list of the current used ips
    $ips_allocated = guifi_ipcalc_get_ips('0.0.0.0', '0.0.0.0', $form_state['values'], 1);
    $qAP = db_query('SELECT i.id, i.radiodev_counter, i.mac, a.ipv4, a.netmask, a.id aid ' . 'FROM {guifi_interfaces} i, {guifi_ipv4} a ' . 'WHERE i.device_id = %d ' . '  AND i.interface_type in ("wLan/Lan","wLan") ' . '  AND i.radiodev_counter=%d ' . '  AND a.interface_id=i.id', $device_id, $radiodev_counter);
    $link = array();
    while ($ipAP = db_fetch_array($qAP)) {
        $item = _ipcalc($ipAP['ipv4'], $ipAP['netmask']);
        $link['ipv4'] = guifi_ipcalc_find_ip($item['netid'], $ipAP['netmask'], $ips_allocated);
        if ($link['ipv4'] != NULL) {
            break;
        }
        drupal_set_message(t('Network was full, looking for more networks available...'));
    }
    // if network was full, delete link
    if ($link['ipv4'] == NULL) {
        $form_state['action'] = 'guifi_radio_add_link2ap_form';
        drupal_set_message(t('The Link was not created: ' . 'The selected node have already all possible connections allocated. ' . 'Now you can:' . '<ul><li>select another Access Point</li>' . '<li><b>contribute</b> to create a new Access Point ' . 'to increase the possible network connections..<li>' . '<li>...or check the status and usage of the currently defined connections ' . 'at this device to find an unused but defined connection ' . 'to be reused.</li></ul>' . 'Note that Open Networks are expanding thanks to ' . 'the <b>contributions of their participants</b>.'), 'error');
        return;
    }
    drupal_set_message(t('Got IP address %net/%mask', array('%net' => $link['ipv4'], '%mask' => $ipAP['netmask'])));
    // local ipv4 information
    $lipv4['new'] = TRUE;
    $lipv4['ipv4'] = $link['ipv4'];
    $lipv4['ipv4_type'] = 1;
    $lipv4['netmask'] = $ipAP['netmask'];
    // link
    $lipv4['links'][0]['new'] = TRUE;
    $lipv4['links'][0]['unfold'] = TRUE;
    $lipv4['links'][0]['interface_id'] = $ipAP['id'];
    $lipv4['links'][0]['device_id'] = $device_id;
    $lipv4['links'][0]['nid'] = $nid;
    $lipv4['links'][0]['routing'] = 'Gateway';
    $lipv4['links'][0]['link_type'] = 'ap/client';
    // remote interface
    $lipv4['links'][0]['interface']['id'] = $ipAP['id'];
    $lipv4['links'][0]['interface']['radiodev_counter'] = $ipAP['radiodev_counter'];
    // remote ipv4
    $lipv4['links'][0]['interface']['ipv4']['id'] = $ipAP['aid'];
    $lipv4['links'][0]['interface']['ipv4']['ipv4'] = $ipAP['ipv4'];
    $lipv4['links'][0]['interface']['ipv4']['netmask'] = $ipAP['netmask'];
    // unfold return
    $form_state['values']['radios'][$form_state['values']['filters']['from_radio']]['unfold'] = TRUE;
    $lipv4['unfold'] = TRUE;
    $local_ipv4[] = $lipv4;
    // guifi_log(GUIFILOG_BASIC,'WDS added',$form_state['values']);
    unset($form_state['action']);
    return;
}
Esempio n. 2
0
function guifi_api_cloudy_addlink($gapi, $parameters)
{
    if (!guifi_api_check_fields($gapi, array('device_id', 'cloudy_id'), $parameters)) {
        return FALSE;
    }
    /* User allow changes ? */
    $device = guifi_device_load($parameters['device_id']);
    if (!guifi_device_access('update', $device)) {
        $gapi->addError(501);
        return FALSE;
    }
    /* Exist ? */
    if (!$device['id']) {
        $gapi->addError(500, "device not found: {$parameters['device_id']}");
        return FALSE;
    }
    /* User allow changes ? */
    $cloudy = guifi_device_load($parameters['cloudy_id']);
    if (!guifi_device_access('update', $cloudy)) {
        $gapi->addError(501);
        return FALSE;
    }
    /* Exist ? */
    if (!$cloudy['id']) {
        $gapi->addError(500, "device not found: {$parameters['cloudy_id']}");
        return FALSE;
    }
    $ipv4_id = 0;
    /* Si no hi ha interface sel·leccionada busquem una que tingui IPv4 */
    foreach ($device['interfaces'] as $iid => $if) {
        if (is_array($if['ipv4'])) {
            break;
        }
    }
    if (!is_array($if['ipv4'])) {
        $gapi->addError(500, "Device did not assign IPv4.");
    }
    /* Calcular IP */
    /* Coses que no m'agraden a. El 0 posat a ipv4, s'hauria de calcular. b. interface_type, tb sembla que es contabilitza */
    $ips_allocated = guifi_ipcalc_get_ips('0.0.0.0', '0.0.0.0', $device, 1);
    $base_ip = $device['interfaces'][$iid]['ipv4'][$ipv4_id];
    $item = _ipcalc($base_ip['ipv4'], $base_ip['netmask']);
    $ip = guifi_ipcalc_find_ip($item['netid'], $base_ip['netmask'], $ips_allocated);
    /* Creem l'interficie al Cloudy. És totalment necessari? */
    $newLink = array("new" => TRUE, "interface" => array("new" => TRUE, "device_id" => $cloudy['id'], "interface_type" => "Lan", "ipv4" => array("new" => TRUE, "ipv4_type" => 1, "ipv4" => $ip, "netmask" => $base_ip['netmask'])), "id" => -1, "link_type" => "cable", "flag" => "Planned", "nid" => $cloudy['nid'], "device_id" => $cloudy['id'], "routing" => "Gateway");
    $device['interfaces'][$iid]['ipv4'][$ipv4_id]['links'][] = $newLink;
    $device['interfaces'][$iid]['unfold'] = TRUE;
    guifi_device_save($device);
    $gapi->addResponseField('device', $device);
    return TRUE;
}
function guifi_interfaces_add_cable_public_link_submit(&$form, &$form_state)
{
    $values = $form_state['clicked_button']['#parents'];
    $iid = $values[1];
    $ipv4_id = $values[3];
    $to_did = $form_state['values']['interfaces'][$iid]['ipv4'][$ipv4_id]['to_did'];
    $rdevice = guifi_device_load($to_did);
    guifi_log(GUIFILOG_TRACE, sprintf('function guifi_interfaces_add_cable_public_link_submit(%d)', $iid), $form_state['clicked_button']['#parents']);
    $ips_allocated = guifi_ipcalc_get_ips('0.0.0.0', '0.0.0.0', $form_state['values'], 1);
    // get next available ip address
    $base_ip = $form_state['values']['interfaces'][$iid]['ipv4'][$ipv4_id];
    $item = _ipcalc($base_ip['ipv4'], $base_ip['netmask']);
    $ip = guifi_ipcalc_find_ip($item['netid'], $base_ip['netmask'], $ips_allocated);
    // no IP was given, so raise a message and don't create the link'
    if (empty($ip)) {
        drupal_set_message(t('Unable to assign a free ip, link not created, ' . 'contact the administrator.'));
        return;
    }
    $newlk['new'] = TRUE;
    $newlk['interface'] = array();
    $newlk['link_type'] = 'cable';
    $newlk['flag'] = 'Planned';
    $newlk['nid'] = $form_state['values']['nid'];
    $newlk['device_id'] = $to_did;
    if ($rdevice['type'] == 'radio') {
        $newlk['routing'] = 'BGP';
    } else {
        $newlk['routing'] = 'Gateway';
    }
    $newlk['interface']['new'] = TRUE;
    $newlk['interface']['device_id'] = $to_did;
    $free = guifi_get_free_interfaces($to_did, $rdevice);
    $newlk['interface']['interface_type'] = array_shift($free);
    $newlk['interface']['ipv4']['new'] = TRUE;
    $newlk['interface']['ipv4']['ipv4_type'] = 1;
    $newlk['interface']['ipv4']['ipv4'] = $ip;
    $newlk['interface']['ipv4']['netmask'] = $base_ip['netmask'];
    $form_state['values']['interfaces'][$iid]['ipv4'][$ipv4_id]['links'][] = $newlk;
    $form_state['values']['interfaces'][$iid]['unfold'] = TRUE;
    //  print_r($form_state['values']);
    $form_state['rebuild'] = TRUE;
    return TRUE;
}
Esempio n. 4
0
/**
 * Select DEVICE SUBNETWORKS
 *
 * URL: http://guifi.net/guifi/js/select-device-subnets/%
 */
function guifi_ahah_select_device_subnets()
{
    $cid = 'form_' . $_POST['form_build_id'];
    $cache = cache_get($cid, 'cache_form');
    $dname = $_POST['ipv4']['ipv4sdialog']['adddid'];
    $device = explode('-', $dname);
    $sql = sprintf("SELECT ip.ipv4, ip.netmask, ip.ipv4_type, i.id, i.device_id, i.interface_type\n       FROM {guifi_ipv4} ip, {guifi_interfaces} i\n       WHERE ip.interface_id=i.id\n        AND i.device_id=%d", $device[0]);
    guifi_log(GUIFILOG_TRACE, sprintf('guifi_ahah_select_device_subnets (device=%d', $device[0]), $sql);
    $device_snets = array('none' => t('select address'));
    $qifs = db_query($sql);
    $ips_allocated = guifi_ipcalc_get_ips();
    drupal_set_message(t('obtaining a select list with free address(es) from subnets allocated at %device', array('%device' => $dname)));
    while ($difs = db_fetch_object($qifs)) {
        $ips = _ipcalc($difs->ipv4, $difs->netmask);
        $newip = guifi_ipcalc_find_ip($ips['netid'], $difs->netmask, $ips_allocated, false);
        if ($newip) {
            $device_snets[$newip . '|' . $difs->netmask . '|' . $difs->ipv4_type] = $newip . ' ' . t('from') . ' ' . $ips[netid] . '/' . $ips['maskbits'] . ' - ' . $difs->interface_type;
        } else {
            if ($difs->ipv4_type == 'public') {
                drupal_set_message(t('Network %net/%mask at %int is full', array('%net' => $ips['netid'], '%mask' => $ips['maskbits'], '%int' => $difs->interface_type)), 'warning');
            }
        }
    }
    if ($cache) {
        $form = $cache->data;
        $form['ipv4']['ipv4sdialog']['adddid']['#value'] = $dname;
        $form['ipv4']['ipv4sdialog']['snet']['#options'] = $device_snets;
        $form['ipv4']['ipv4sdialog']['snet']['#type'] = 'select';
        $form['ipv4']['ipv4sdialog']['snet']['#description'] = t('choose an address obtained from') . ':<br>' . $dname;
        cache_set($cid, $form, 'cache_form', $cache->expire);
        // Build and render the new select element, then return it in JSON format.
        $form_state = array();
        $form['#post'] = $_POST;
        $form = form_builder($form['form_id']['#value'], $form, $form_state);
        $output = theme('status_messages') . drupal_render($form[ipv4][ipv4sdialog]);
        drupal_json(array('status' => TRUE, 'data' => $output));
    } else {
        drupal_json(array('status' => FALSE, 'data' => ''));
    }
    exit;
}