function guifi_get_currentDeviceIpv4s($device) { $ips = array(); if (empty($device['ipv4'])) { return $ips; } foreach ($device['ipv4'] as $k => $ip) { if (empty($ip[netmask])) { continue; } $ipc = _ipcalc($ip['ipv4'], $ip['netmask']); $interfaces = guifi_get_currentInterfaces($device); if (array_key_exists($ip['interface_id'], $interfaces)) { $ki = $ip['interface_id']; } else { $ki = $device['id'] . ',' . $ip['id']; } $ips[$ip['interface_id'] . ',' . $ip['id']] = $ip['ipv4'] . '/' . $ipc['maskbits'] . ' ' . $interfaces[$ki]; } return $ips; }
/** * @param array containing editing device information $edit * @param weight form ewlements $form_weight */ function guifi_vinterfaces_form($iClass, $edit, &$form_weight) { global $user; guifi_log(GUIFILOG_TRACE, 'function guifi_vinterfaces_form(iClass)', $edit[$iClass]); switch ($edit[type]) { case 'switch': if (!$edit[variable][managed] or in_array($iClass, 'tunnels')) { return; } break; case 'radio': if (empty($edit[variable][firmware_id])) { return; } $firm = guifi_get_firmware($edit[variable][firmware_id]); if (!in_array($iClass, $firm->managed)) { return; } break; default: return; } switch ($iClass) { case 'aggregations': $icon = '/icons/aggr-16.png'; $iconNew = '/icons/aggr-new.png'; $msg = t('Aggregations (bridges, bondings...) section'); $ititle = t('Aggregations'); break; case 'vlans': $icon = '/icons/vlans-16.png'; $iconNew = '/icons/vlans-new.png'; $msg = t('Virtual Interfaces (vlans,vrrp...) section'); $ititle = t('Virtual Interfaces'); break; default: $icon = '/icons/ports-16.png'; $msg = t('%iClass section', array('%iClass' => $iClass)); break; } // Build vinterface fieldset $form = array('#type' => 'fieldset', '#title' => t($ititle) . ' - ' . count($edit[$iClass]), '#collapsible' => TRUE, '#tree' => TRUE, '#collapsed' => TRUE, '#weight' => $form_weight++, '#prefix' => '<br><img src="/' . drupal_get_path('module', 'guifi') . $icon . '"> ' . $msg . '<div id="add-' . $iClass . '">', '#suffix' => '</div>'); if (empty($edit[$iClass])) { guifi_log(GUIFILOG_TRACE, 'function guifi_ports_form(empty)', $iClass); guifi_vinterface_form($form, $iClass, 0, $edit, true, $form_weight); /* $form['msgnone'] = array( '#type' =>'item', '#value'=>t('None'), '#weight'=>$form_weight++, ); */ } // Loop across all existing interfaces $vif_count = 0; $total_vif = count($iClass); $first_vif = true; // placeholder for the add interface form /* $form['vifs'] = array( '#parents' => array('vifs'), '#type' => 'fieldset', '#prefix' => '<div id="add-'.$iClass.'">', '#suffix' => '</div>', '#weight' => $form_weight++, ); */ guifi_log(GUIFILOG_TRACE, 'function guifi_vinterfaces_form(edit)', $edit[$iClass]); foreach ($edit[$iClass] as $vifId => $vif) { guifi_log(GUIFILOG_TRACE, 'function guifi_vinterfaces_form(vint LOOP)', $vifId); $form[$vifId] = guifi_vinterface_form($iClass, $vif, $first_vif, guifi_get_currentInterfaces($edit)); $first_vif = false; } guifi_log(GUIFILOG_TRACE, 'function guifi_ports_form(vint LOOP AFTER)', $form); // placeholder for the add interface form /* $form['vinew'] = array( '#type' => 'hidden', '#prefix' => '<div id="add-'.$iClass.'">', '#suffix' => '</div>', '#weight' => $form_weight++, );*/ $form['add' . $iClass] = array('#type' => 'image_button', '#src' => drupal_get_path('module', 'guifi') . $iconNew, '#parents' => array('add' . $iClass), '#attributes' => array('title' => t('Add ' . $iClass)), '#ahah' => array('path' => 'guifi/js/add-vinterface/' . $iClass, 'wrapper' => 'add-' . $iClass, 'method' => 'replace', 'effect' => 'fade'), '#weight' => $form_weight++); return $form; }
function guifi_device_print_iclass($iClass, $device) { if (empty($device[$iClass])) { return NULL; } $rows = array(); $inames = guifi_get_currentInterfaces($device); foreach ($device[$iClass] as $inum => $if) { $ipstr = ''; $rows_if = array(); guifi_log(GUIFILOG_TRACE, sprintf('function guifi_device_print_iclass(interface %s)', $if['id']), $if); if ($if['ipv4']) { foreach ($if['ipv4'] as $ipnum => $ipv4) { guifi_log(GUIFILOG_TRACE, sprintf('function guifi_device_print_iclass(ip %s)', $ipv4['ipv4']), $ipv4); if ($ipv4['ipv4']) { $ip = _ipcalc($ipv4['ipv4'], $ipv4['netmask']); $ipstr = $ipv4['ipv4'] . '/' . $ip['maskbits']; } else { $ipstr = t('n/a'); } $rows_if[] = array($ipstr, $ipv4['netmask']); } } else { $rows_if[] = array(null, null); } $related = array(); $relatedNames = array(); if (is_array($if[related_interfaces])) { $related = $if[related_interfaces]; } else { $related[] = $if[related_interfaces]; } foreach ($related as $v) { $relatedNames[$v] = $inames[$v]; } $rspan = count($rows_if); switch ($iClass) { case 'vlans': $begin = array(array('data' => $if['interface_class']), array('data' => $if['interface_type']), array('data' => implode(', ', $relatedNames)), array('data' => $if['vlan']), array('data' => $if['comments']), array('data' => $if['mac'])); break; default: $begin = array(array('data' => $if['interface_class']), array('data' => $if['interface_type']), array('data' => implode(', ', $relatedNames)), array('data' => $if['comments']), array('data' => $if['mac'])); } foreach ($begin as $i => $r) { $begin[$i] = array_merge($r, array('rowspan' => $rspan, 'valign' => 'top')); } foreach ($rows_if as $i => $row) { if ($i == 0) { $rows[] = array_merge($begin, $row); } else { $rows[] = $row; } } } return $rows; }
function guifi_ipv4s_form($edit, &$form_weight) { if ($edit['new']) { return; } global $user; // if (empty($edit[ipv4])) // return; guifi_log(GUIFILOG_TRACE, 'function guifi_ipv4s_form(ipv4)', $edit['ipv4']); // Clean empty subnets foreach ($edit[ipv4] as $k => $v) { if (empty($v[ipv4])) { unset($edit[ipv4][$k]); } } // Build ipv4 fieldset $form = array('#type' => 'fieldset', '#title' => t('IPv4 addresses networking section') . ' - ' . count($edit[ipv4]), '#collapsible' => TRUE, '#tree' => TRUE, '#collapsed' => TRUE, '#description' => 'Under development. Changes at this form take no effect.', '#weight' => $form_weight++, '#prefix' => '<br><img src="/' . drupal_get_path('module', 'guifi') . '/icons/ipv4.png"> ' . t('ipv4 section')); // Loop across all existing addresses $ipv4_count = 0; $total_ipv4 = count($edit[ipv4]); $first = true; foreach ($edit[ipv4] as $k => $ipv4) { if (is_numeric($k)) { guifi_log(GUIFILOG_TRACE, 'function guifi_ipv4s_form(vint LOOP)', $ipv4); $form[$k] = guifi_ipv4i_form($ipv4, $k, $first, guifi_get_currentInterfaces($edit, TRUE)); $first = false; } } guifi_log(GUIFILOG_TRACE, 'function guifi_ipv4s_form(vint LOOP AFTER)', $form); // placeholder for the add interface form $form['ipv4sdialog'] = array('#parents' => array('ipv4', 'ipv4sdialog'), '#type' => 'hidden', '#title' => t('New address properties dialog'), '#description' => t('Get the address from'), '#prefix' => '<div id="add-ipv4s-dialog">', '#suffix' => '</div>', '#collapsible' => true, '#collapsed' => true, '#attributes' => array('class' => 'fieldset-interface-port'), '#weight' => $form_weight++, '#tree' => true); $form['ipv4sdialog']['adddid'] = array('#type' => 'textfield', '#title' => t('device'), '#description' => t('select the device to obtain the ipv4 address from'), '#autocomplete_path' => 'guifi/js/select-node-device', '#size' => 60, '#maxlength' => 128, '#element_validate' => array('guifi_devicename_validate'), '#ahah' => array('event' => 'blur', 'path' => 'guifi/js/select-device-subnets', 'wrapper' => 'add-ipv4s-dialog', 'method' => 'replace', 'effect' => 'fade'), '#weight' => $form_weight++); $form['ipv4sdialog']['ipv4'] = array('#type' => 'textfield', '#title' => t('IPv4 address'), '#description' => t('Obtained address'), '#size' => 20, '#maxlength' => 20, '#weight' => $form_weight++); $form['ipv4sdialog']['ipv4_type'] = array('#type' => 'hidden', '#weight' => $form_weight++); $form['ipv4sdialog']['snet'] = array('#type' => 'select', '#options' => array('none' => t('select address')), '#title' => t('address & remote interface'), '#description' => t('select a free address from the device<br>click on the select list to refresh values'), '#weight' => $form_weight++); $form['ipv4sdialog']['netmask'] = array('#type' => 'select', '#ahah' => array('path' => 'guifi/js/add-ipv4s/netmask', 'wrapper' => 'add-ipv4s-dialog', 'method' => 'replace', 'effect' => 'fade'), '#title' => 'network mask', '#weight' => $form_weight++); $form['ipv4sdialog']['iid'] = array('#type' => 'select', '#options' => guifi_get_currentInterfaces($edit), '#title' => t('interface'), '#description' => t('where the new ip addres should be given to'), '#weight' => $form_weight++); $form['ipv4sdialog']['addipv4'] = array('#type' => 'submit', '#value' => 'Add IPv4, Save & continue edit', '#prefix' => '<div style="clear: both">', '#suffix' => '</div>', '#submit' => array('guifi_device_add_ipv4s_submit', 'guifi_device_form_submit'), '#weight' => $form_weight++); $form['addpubipv4'] = array('#type' => 'image_button', '#src' => drupal_get_path('module', 'guifi') . '/icons/ipv4-public-new.png', '#attributes' => array('title' => t('Get a new IPv4 subnetwork range (10.x.x.x) publicly available')), '#ahah' => array('path' => 'guifi/js/add-ipv4s/public', 'wrapper' => 'add-ipv4s-dialog', 'method' => 'replace', 'effect' => 'fade'), '#prefix' => '<div style="clear: both"> <hr> </div>', '#weight' => $form_weight++); $form['addprivipv4'] = array('#type' => 'image_button', '#src' => drupal_get_path('module', 'guifi') . '/icons/ipv4-private-new.png', '#attributes' => array('title' => t('Get a new IPv4 private subnetwork range (172.x.x.x) for internal links/puropses only')), '#ahah' => array('path' => 'guifi/js/add-ipv4s/private', 'wrapper' => 'add-ipv4s-dialog', 'method' => 'replace', 'effect' => 'fade'), '#weight' => $form_weight++); $form['addexistentipv4'] = array('#type' => 'image_button', '#src' => drupal_get_path('module', 'guifi') . '/icons/ipv4-new.png', '#attributes' => array('title' => t('Get a new IPv4 address from an subnetwork already defined')), '#ahah' => array('path' => 'guifi/js/add-ipv4s/defined', 'wrapper' => 'add-ipv4s-dialog', 'method' => 'replace', 'effect' => 'fade'), '#weight' => $form_weight++); return $form; }