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; }
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; }
/** * 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; }