$value) { if ($value != '') { switch ($var) { case 'device': case 'device_id': $where .= generate_query_values_and($value, 'A.device_id'); $where_netscaler .= generate_query_values_and($value, 'N.device_id'); break; case 'interface': $where .= generate_query_values_and($value, 'I.ifDescr', 'LIKE%'); $join_ports = TRUE; break; case 'type': $where .= generate_query_values_and($value, 'A.ip_type'); break; case 'network': if (!is_array($value)) { $value = explode(',', $value); } if ($ids = get_entity_ids_ip_by_network($address_type, $value)) { // Full network with prefix $where .= generate_query_values_and($ids, 'A.ip_address_id'); } else { // Part of network string $where .= ' AND 0'; // Nothing! } $where_netscaler .= ' AND 0'; // Currently, unsupported for Netscaller break; case 'address': if (!is_array($value)) { $value = explode(',', $value); } // Remove prefix part $addr = []; foreach ($value as $tmp) { list($addr[], $mask) = explode('/', $tmp); } if ($ids = get_entity_ids_ip_by_network($address_type, $addr)) { // Full network with prefix $where .= generate_query_values_and($ids, 'A.ip_address_id'); } else { $where .= ' AND 0'; // Nothing! } /// FIXME. Netscaller hack if (count($addr) && get_ip_version($addr[0])) { // Netscaller for valid IP address $where_netscaler .= generate_query_values_and($addr, 'N.vsvr_ip'); } else { $where_netscaler .= generate_query_values_and($addr, 'N.vsvr_ip', '%LIKE%'); } break; } } } $query_device_permitted = generate_query_permitted(array('device')); $query_port_permitted = generate_query_permitted(array('device', 'port')); // Also search netscaler Vserver IPs $query_netscaler = 'FROM `netscaler_vservers` AS N '; $query_netscaler .= 'LEFT JOIN `devices` USING(`device_id`) '; $query_netscaler .= $where_netscaler . $query_device_permitted; //$query_netscaler_count = 'SELECT COUNT(`vsvr_id`) ' . $query_netscaler; $query_netscaler = 'SELECT * ' . $query_netscaler; $query_netscaler .= ' ORDER BY `vsvr_ip`'; // Override by address type if ($address_type == 'ipv6') { $query_netscaler = str_replace(array('vsvr_ip', '0.0.0.0'), array('vsvr_ipv6', '0:0:0:0:0:0:0:0'), $query_netscaler); //$query_netscaler_count = str_replace(array('vsvr_ip', '0.0.0.0'), array('vsvr_ipv6', '0:0:0:0:0:0:0:0'), $query_netscaler_count); } $entries = dbFetchRows($query_netscaler, $param_netscaler); // Rewrite netscaler addresses foreach ($entries as $entry) { $ip_address = ($address_type == 'ipv4') ? $entry['vsvr_ip'] : $entry['vsvr_'.$address_type]; $ip_network = ($address_type == 'ipv4') ? $entry['vsvr_ip'].'/32' : $entry['vsvr_'.$address_type].'/128'; $ip_array[] = array('type' => 'netscalervsvr', 'device_id' => $entry['device_id'], 'hostname' => $entry['hostname'], 'vsvr_id' => $entry['vsvr_id'], 'vsvr_label' => $entry['vsvr_label'], 'ifAlias' => 'Netscaler: '.$entry['vsvr_type'].'/'.$entry['vsvr_entitytype'], $address_type.'_address' => $ip_address, $address_type.'_network' => $ip_network ); } //print_message($query_netscaler_count); $query = 'FROM `ip_addresses` AS A '; $query .= ' LEFT JOIN `ip_networks` AS N USING(`ip_network_id`)'; if ($join_ports) { $query .= ' LEFT JOIN `ports` USING(`port_id`)'; } //$query .= ' LEFT JOIN `devices` USING(`device_id`)'; $query .= $where . $query_port_permitted; //$query_count = 'SELECT COUNT(`ip_address_id`) ' . $query; $query = 'SELECT A.*, N.* ' . $query; $query .= ' ORDER BY A.`ip_binary`'; if ($ip_valid) { $pagination = FALSE; } // Override by address type //$query = str_replace(array('ip_address', 'ip_network'), array($address_type.'_address', $address_type.'_network'), $query); $query = preg_replace('/ip_(address|network|type|binary)/', $address_type.'_$1', $query); //$query_count = str_replace(array('ip_address', 'ip_network'), array($address_type.'_address', $address_type.'_network'), $query_count); // Query addresses $entries = dbFetchRows($query, $param); $ip_array = array_sort($ip_array, $address_type.'_address'); // Sort netscaller $ip_array = array_merge($entries, $ip_array); // Query address count //if ($pagination) { $count = dbFetchCell($query_count, $param); } if ($pagination) { $count = count($ip_array); $ip_array = array_slice($ip_array, $start, $pagesize); } $list = array('device' => FALSE); if (!isset($vars['device']) || empty($vars['device']) || $vars['page'] == 'search') { $list['device'] = TRUE; } $string = generate_box_open($vars['header']); $string .= '
Device | ' . PHP_EOL; } $string .= 'Interface | ' . PHP_EOL; $string .= 'Address | ' . PHP_EOL; $string .= 'Type | ' . PHP_EOL; $string .= '[VRF] Description | ' . PHP_EOL; $string .= '
---|---|---|---|---|
' . $device_link . ' | ' . PHP_EOL; } $string .= '' . $entity_link . ' | ' . PHP_EOL; if ($address_type === 'ipv6') { $entry[$address_type.'_address'] = Net_IPv6::compress($entry[$address_type.'_address']); } $string .= '' . generate_popup_link('ip', $entry[$address_type.'_address'] . '/' . $length) . ' | ' . PHP_EOL; $type = strlen($entry[$address_type.'_type']) ? $entry[$address_type.'_type'] : get_ip_type($entry[$address_type.'_address'] . '/' . $length); $type_class = $GLOBALS['config']['ip_types'][$type]['label-class']; $string .= '' . $type . ' | ' . PHP_EOL; $string .= '' . $entry['ifAlias'] . ' | ' . PHP_EOL; $string .= '