/** * Display bgp peers. * * Display pages with BGP Peers. * Examples: * print_bgp() - display all bgp peers from all devices * print_bgp(array('pagesize' => 99)) - display 99 bgp peers from all device * print_bgp(array('pagesize' => 10, 'pageno' => 3, 'pagination' => TRUE)) - display 10 bgp peers from page 3 with pagination header * print_bgp(array('pagesize' => 10, 'device' = 4)) - display 10 bgp peers for device_id 4 * * @param array $vars * @return none * */ function print_bgp($vars) { // Get bgp peers array $entries = get_bgp_array($vars); //r($entries); if (!$entries['count']) { // There have been no entries returned. Print the warning. print_warning('<h4>No BGP peers found!</h4>'); } else { // Entries have been returned. Print the table. $list = array('device' => FALSE); if ($vars['page'] != 'device') { $list['device'] = TRUE; } switch ($vars['graph']) { case 'prefixes_ipv4unicast': case 'prefixes_ipv4multicast': case 'prefixes_ipv4vpn': case 'prefixes_ipv6unicast': case 'prefixes_ipv6multicast': case 'macaccounting_bits': case 'macaccounting_pkts': case 'updates': $table_class = 'table-striped-two'; $list['graph'] = TRUE; break; default: $table_class = 'table-striped'; $list['graph'] = FALSE; } $string = '<table class="table table-bordered ' . $table_class . ' table-hover table-condensed table-rounded">' . PHP_EOL; $cols = array(array(NULL, 'class="state-marker"'), array(NULL, 'style="width: 1px;"'), 'device' => array('Local address', 'style="width: 150px;"'), array(NULL, 'style="width: 20px;"'), 'peer_ip' => array('Peer address', 'style="width: 150px;"'), 'type' => array('Type', 'style="width: 50px;"'), array('Family', 'style="width: 50px;"'), 'peer_as' => 'Remote AS', 'state' => 'State', 'Uptime / Updates'); //if (!$list['device']) { unset($cols['device']); } $string .= get_table_header($cols, $vars); $string .= ' <tbody>' . PHP_EOL; foreach ($entries['entries'] as $peer) { $local_dev = device_by_id_cache($peer['device_id']); $local_as = $list['device'] ? ' (AS' . $peer['bgpLocalAs'] . ')' : ''; $local_name = generate_device_link($local_dev, short_hostname($local_dev['hostname']), array('tab' => 'routing', 'proto' => 'bgp')); $local_ip = generate_device_link($local_dev, $peer['human_localip'] . $local_as, array('tab' => 'routing', 'proto' => 'bgp')); $peer_as = 'AS' . $peer['bgpPeerRemoteAs']; if ($peer['peer_device_id']) { $peer_dev = device_by_id_cache($peer['peer_device_id']); $peer_name = generate_device_link($peer_dev, short_hostname($peer_dev['hostname']), array('tab' => 'routing', 'proto' => 'bgp')); $peer_ip = generate_device_link($peer_dev, $peer['human_remoteip'] . " ({$peer_as})", array('tab' => 'routing', 'proto' => 'bgp')); } else { $peer_name = $peer['reverse_dns']; $peer_ip = $peer['human_remoteip'] . " ({$peer_as})"; } $peer_afis =& $entries['afisafi'][$peer['device_id']][$peer['bgpPeerRemoteAddr']]; $string .= ' <tr class="' . $peer['html_row_class'] . '">' . PHP_EOL; $string .= ' <td class="state-marker"></td>' . PHP_EOL; $string .= ' <td></td>' . PHP_EOL; $string .= ' <td style="white-space: nowrap">' . $local_ip . '<br />' . $local_name . '</td>' . PHP_EOL; $string .= ' <td><strong>»</strong></td>' . PHP_EOL; $string .= ' <td style="white-space: nowrap">' . $peer_ip . '<br />' . $peer_name . '</td>' . PHP_EOL; $string .= ' <td><strong>' . $peer['peer_type'] . '</strong></td>' . PHP_EOL; $string .= ' <td><small>' . implode('<br />', $peer_afis) . '</small></td>' . PHP_EOL; $string .= ' <td><strong>' . $peer_as . '</strong><br />' . $peer['astext'] . '</td>' . PHP_EOL; $string .= ' <td><strong><span class="' . $peer['admin_class'] . '">' . $peer['bgpPeerAdminStatus'] . '</span><br /><span class="' . $peer['state_class'] . '">' . $peer['bgpPeerState'] . '</span></strong></td>' . PHP_EOL; $string .= ' <td>' . formatUptime($peer['bgpPeerFsmEstablishedTime']) . '<br /> Updates <i class="oicon-arrow_down"></i> ' . format_si($peer['bgpPeerInUpdates']) . '<i class="oicon-arrow_up"></i> ' . format_si($peer['bgpPeerOutUpdates']) . '</td>' . PHP_EOL; $string .= ' </tr>' . PHP_EOL; // Graphs $peer_graph = FALSE; switch ($vars['graph']) { case 'prefixes_ipv4unicast': case 'prefixes_ipv4multicast': case 'prefixes_ipv4vpn': case 'prefixes_ipv6unicast': case 'prefixes_ipv6multicast': $afisafi = preg_replace('/prefixes_(ipv[46])(\\w+)/', '$1.$2', $vars['graph']); // prefixes_ipv6unicast ->> ipv6.unicast if (in_array($afisafi, $peer_afis) && $peer['bgpPeer_id']) { $graph_array['type'] = 'bgp_' . $vars['graph']; $graph_array['id'] = $peer['bgpPeer_id']; $peer_graph = TRUE; } break; case 'updates': if ($peer['bgpPeer_id']) { $graph_array['type'] = 'bgp_updates'; $graph_array['id'] = $peer['bgpPeer_id']; $peer_graph = TRUE; } break; case 'macaccounting_bits': case 'macaccounting_pkts': //FIXME. I really still not know it works or not? -- mike // This part copy-pasted from old code as is $acc = dbFetchRow("SELECT * FROM `mac_accounting` AS M\n LEFT JOIN `ip_mac` AS I ON M.mac = I.mac_address\n LEFT JOIN `ports` AS P ON P.port_id = M.port_id\n LEFT JOIN `devices` AS D ON D.device_id = P.device_id\n WHERE I.ip_address = ?", array($peer['bgpPeerRemoteAddr'])); $database = get_rrd_path($device, "cip-" . $acc['ifIndex'] . "-" . $acc['mac'] . ".rrd"); if (is_array($acc) && is_file($database)) { $peer_graph = TRUE; $graph_array['id'] = $acc['ma_id']; $graph_array['type'] = $vars['graph']; } break; } if ($peer_graph) { $graph_array['to'] = $config['time']['now']; $string .= ' <tr class="' . $peer['html_row_class'] . '">' . PHP_EOL; $string .= ' <td class="state-marker"></td><td colspan="10" style="white-space: nowrap">' . PHP_EOL; $string .= get_graph_row($graph_array); $string .= ' </td>' . PHP_EOL . ' </tr>' . PHP_EOL; } else { if ($list['graph']) { // Empty row for correct view class table-striped-two $string .= ' <tr class="' . $peer['html_row_class'] . '"><td class="state-marker"></td><td colspan="10"></td></tr>' . PHP_EOL; } } } $string .= ' </tbody>' . PHP_EOL; $string .= '</table>'; // Print pagination header if ($entries['pagination_html']) { $string = $entries['pagination_html'] . $string . $entries['pagination_html']; } // Print echo $string; } }
function print_graph_row($graph_array, $state_marker = FALSE) { echo get_graph_row($graph_array, $state_marker); }