mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
Keeps the look more in line with the navigation bar icons. In the future with Bootstrap 4, Glyphicons will not be included, so this starts the transistions away.
336 lines
16 KiB
PHP
336 lines
16 KiB
PHP
<?php
|
|
|
|
// This file prints a table row for each interface
|
|
$port['device_id'] = $device['device_id'];
|
|
$port['hostname'] = $device['hostname'];
|
|
|
|
$if_id = $port['port_id'];
|
|
|
|
$port = ifLabel($port);
|
|
|
|
if ($int_colour) {
|
|
$row_colour = $int_colour;
|
|
} else {
|
|
if (!is_integer($i / 2)) {
|
|
$row_colour = $list_colour_a;
|
|
} else {
|
|
$row_colour = $list_colour_b;
|
|
}
|
|
}
|
|
|
|
$port_adsl = dbFetchRow('SELECT * FROM `ports_adsl` WHERE `port_id` = ?', array($port['port_id']));
|
|
|
|
if ($port['ifInErrors_delta'] > 0 || $port['ifOutErrors_delta'] > 0) {
|
|
$error_img = generate_port_link($port, "<img src='images/16/chart_curve_error.png' alt='Interface Errors' border=0>", 'port_errors');
|
|
} else {
|
|
$error_img = '';
|
|
}
|
|
|
|
if (dbFetchCell('SELECT COUNT(*) FROM `mac_accounting` WHERE `port_id` = ?', array($port['port_id']))) {
|
|
$mac = "<a href='".generate_port_url($port, array('view' => 'macaccounting'))."'><img src='images/16/chart_curve.png' align='absmiddle'></a>";
|
|
} else {
|
|
$mac = '';
|
|
}
|
|
|
|
echo "<tr style=\"background-color: $row_colour;\" valign=top onmouseover=\"this.style.backgroundColor='$list_highlight';\" onmouseout=\"this.style.backgroundColor='$row_colour';\" style='cursor: pointer;'>
|
|
<td valign=top width=350>";
|
|
|
|
// Don't echo out ports ifIndex if it's a NOS device since their ifIndex is, for lack of better words....different
|
|
if ($device['os'] == 'nos') {
|
|
echo ' <span class=list-large>
|
|
'.generate_port_link($port, $port['label'])." $error_img $mac
|
|
</span><br /><span class=interface-desc>".$port['ifAlias'].'</span>';
|
|
} else {
|
|
echo ' <span class=list-large>
|
|
'.generate_port_link($port, $port['ifIndex'].'. '.$port['label'])." $error_img $mac
|
|
</span><br /><span class=interface-desc>".$port['ifAlias'].'</span>';
|
|
}
|
|
|
|
if ($port['ifAlias']) {
|
|
echo '<br />';
|
|
}
|
|
|
|
unset($break);
|
|
|
|
if ($port_details) {
|
|
foreach (dbFetchRows('SELECT * FROM `ipv4_addresses` WHERE `port_id` = ?', array($port['port_id'])) as $ip) {
|
|
echo "$break <a class=interface-desc href=\"javascript:popUp('netcmd.php?cmd=whois&query=$ip[ipv4_address]')\">".$ip['ipv4_address'].'/'.$ip['ipv4_prefixlen'].'</a>';
|
|
$break = '<br />';
|
|
}
|
|
|
|
foreach (dbFetchRows('SELECT * FROM `ipv6_addresses` WHERE `port_id` = ?', array($port['port_id'])) as $ip6) {
|
|
echo "$break <a class=interface-desc href=\"javascript:popUp('netcmd.php?cmd=whois&query=".$ip6['ipv6_address']."')\">".Net_IPv6::compress($ip6['ipv6_address']).'/'.$ip6['ipv6_prefixlen'].'</a>';
|
|
$break = '<br />';
|
|
}
|
|
}
|
|
|
|
echo '</span>';
|
|
|
|
echo "</td><td width=100 onclick=\"location.href='".generate_port_url($port)."'\" >";
|
|
|
|
if ($port_details) {
|
|
$port['graph_type'] = 'port_bits';
|
|
echo generate_port_link($port, "<img src='graph.php?type=port_bits&id=".$port['port_id'].'&from='.$config['time']['day'].'&to='.$config['time']['now'].'&width=100&height=20&legend=no&bg='.str_replace('#', '', $row_colour)."'>");
|
|
$port['graph_type'] = 'port_upkts';
|
|
echo generate_port_link($port, "<img src='graph.php?type=port_upkts&id=".$port['port_id'].'&from='.$config['time']['day'].'&to='.$config['time']['now'].'&width=100&height=20&legend=no&bg='.str_replace('#', '', $row_colour)."'>");
|
|
$port['graph_type'] = 'port_errors';
|
|
echo generate_port_link($port, "<img src='graph.php?type=port_errors&id=".$port['port_id'].'&from='.$config['time']['day'].'&to='.$config['time']['now'].'&width=100&height=20&legend=no&bg='.str_replace('#', '', $row_colour)."'>");
|
|
}
|
|
|
|
echo "</td><td width=120 onclick=\"location.href='".generate_port_url($port)."'\" >";
|
|
|
|
if ($port['ifOperStatus'] == 'up') {
|
|
$port['in_rate'] = ($port['ifInOctets_rate'] * 8);
|
|
$port['out_rate'] = ($port['ifOutOctets_rate'] * 8);
|
|
$in_perc = @round(($port['in_rate'] / $port['ifSpeed'] * 100));
|
|
$out_perc = @round(($port['in_rate'] / $port['ifSpeed'] * 100));
|
|
echo "<img src='images/16/arrow_left.png' align=absmiddle> <span style='color: ".percent_colour($in_perc)."'>".formatRates($port['in_rate'])."<br />
|
|
<img align=absmiddle src='images/16/arrow_out.png'> <span style='color: ".percent_colour($out_perc)."'>".formatRates($port['out_rate'])."<br />
|
|
<img src='images/icons/arrow_pps_in.png' align=absmiddle> ".format_bi($port['ifInUcastPkts_rate'])."pps</span><br />
|
|
<img src='images/icons/arrow_pps_out.png' align=absmiddle> ".format_bi($port['ifOutUcastPkts_rate']).'pps</span>';
|
|
}
|
|
|
|
echo "</td><td width=75 onclick=\"location.href='".generate_port_url($port)."'\" >";
|
|
if ($port['ifSpeed']) {
|
|
echo '<span class=box-desc>'.humanspeed($port['ifSpeed']).'</span>';
|
|
}
|
|
|
|
echo '<br />';
|
|
|
|
if ($port[ifDuplex] != 'unknown') {
|
|
echo '<span class=box-desc>'.$port['ifDuplex'].'</span>';
|
|
} else {
|
|
echo '-';
|
|
}
|
|
|
|
if ($device['os'] == 'ios' || $device['os'] == 'iosxe') {
|
|
if ($port['ifTrunk']) {
|
|
echo '<p class=box-desc><span class=purple><a title="';
|
|
$vlans = dbFetchRows("SELECT * FROM `ports_vlans` AS PV, vlans AS V WHERE PV.`port_id` ='".$port['port_id']."' and PV.`device_id` = '".$device['device_id']."' AND V.`vlan_vlan` = PV.vlan AND V.device_id = PV.device_id");
|
|
foreach ($vlans as $vlan) {
|
|
if ($vlan['state'] == 'blocking') {
|
|
$class = 'red';
|
|
} elseif ($vlan['state'] == 'forwarding') {
|
|
$class = 'green';
|
|
} else {
|
|
$class = 'none';
|
|
}
|
|
|
|
echo '<b class='.$class.'>'.$vlan['vlan'].'</b> '.$vlan['vlan_descr'].'<br />';
|
|
}
|
|
|
|
echo '">'.$port['ifTrunk'].'</a></span></p>';
|
|
} elseif ($port['ifVlan']) {
|
|
echo '<p class=box-desc><span class=blue>VLAN '.$port['ifVlan'].'</span></p>';
|
|
} elseif ($port['ifVrf']) {
|
|
$vrf = dbFetchRow('SELECT * FROM vrfs WHERE vrf_id = ?', array($port['ifVrf']));
|
|
echo "<p style='color: green;'>".$vrf['vrf_name'].'</p>';
|
|
}//end if
|
|
}//end if
|
|
|
|
if ($port_adsl['adslLineCoding']) {
|
|
echo "</td><td width=150 onclick=\"location.href='".generate_port_url($port)."'\" >";
|
|
echo $port_adsl['adslLineCoding'].'/'.rewrite_adslLineType($port_adsl['adslLineType']);
|
|
echo '<br />';
|
|
echo 'Sync:'.formatRates($port_adsl['adslAtucChanCurrTxRate']).'/'.formatRates($port_adsl['adslAturChanCurrTxRate']);
|
|
echo '<br />';
|
|
echo 'Max:'.formatRates($port_adsl['adslAtucCurrAttainableRate']).'/'.formatRates($port_adsl['adslAturCurrAttainableRate']);
|
|
echo "</td><td width=150 onclick=\"location.href='".generate_port_url($port)."'\" >";
|
|
echo 'Atten:'.$port_adsl['adslAtucCurrAtn'].'dB/'.$port_adsl['adslAturCurrAtn'].'dB';
|
|
echo '<br />';
|
|
echo 'SNR:'.$port_adsl['adslAtucCurrSnrMgn'].'dB/'.$port_adsl['adslAturCurrSnrMgn'].'dB';
|
|
} else {
|
|
echo "</td><td width=150 onclick=\"location.href='".generate_port_url($port)."'\" >";
|
|
if ($port['ifType'] && $port['ifType'] != '') {
|
|
echo '<span class=box-desc>'.fixiftype($port['ifType']).'</span>';
|
|
} else {
|
|
echo '-';
|
|
}
|
|
|
|
echo '<br />';
|
|
if ($ifHardType && $ifHardType != '') {
|
|
echo '<span class=box-desc>'.$ifHardType.'</span>';
|
|
} else {
|
|
echo '-';
|
|
}
|
|
|
|
echo "</td><td width=150 onclick=\"location.href='".generate_port_url($port)."'\" >";
|
|
if ($port['ifPhysAddress'] && $port['ifPhysAddress'] != '') {
|
|
echo '<span class=box-desc>'.formatMac($port['ifPhysAddress']).'</span>';
|
|
} else {
|
|
echo '-';
|
|
}
|
|
|
|
echo '<br />';
|
|
if ($port['ifMtu'] && $port['ifMtu'] != '') {
|
|
echo '<span class=box-desc>MTU '.$port['ifMtu'].'</span>';
|
|
} else {
|
|
echo '-';
|
|
}
|
|
}//end if
|
|
|
|
echo '</td>';
|
|
echo '<td width=375 valign=top class="interface-desc">';
|
|
|
|
$neighborsCount=0;
|
|
$nbLinks=0;
|
|
if (strpos($port['label'], 'oopback') === false && !$graph_type) {
|
|
foreach (dbFetchRows('SELECT * FROM `links` AS L, `ports` AS I, `devices` AS D WHERE L.local_port_id = ? AND L.remote_port_id = I.port_id AND I.device_id = D.device_id', array($if_id)) as $link) {
|
|
// echo("<img src='images/16/connect.png' align=absmiddle alt='Directly Connected' /> " . generate_port_link($link, makeshortif($link['label'])) . " on " . generate_device_link($link, shorthost($link['hostname'])) . "</a><br />");
|
|
// $br = "<br />";
|
|
$int_links[$link['port_id']] = $link['port_id'];
|
|
$int_links_phys[$link['port_id']] = 1;
|
|
$nbLinks++;
|
|
}
|
|
|
|
unset($br);
|
|
|
|
if ($port_details && $config['enable_port_relationship'] === true) {
|
|
// Show which other devices are on the same subnet as this interface
|
|
foreach (dbFetchRows("SELECT `ipv4_network_id` FROM `ipv4_addresses` WHERE `port_id` = ? AND `ipv4_address` NOT LIKE '127.%'", array($port['port_id'])) as $net) {
|
|
$ipv4_network_id = $net['ipv4_network_id'];
|
|
$sql = 'SELECT I.port_id FROM ipv4_addresses AS A, ports AS I, devices AS D
|
|
WHERE A.port_id = I.port_id
|
|
AND A.ipv4_network_id = ? AND D.device_id = I.device_id
|
|
AND D.device_id != ?';
|
|
$array = array(
|
|
$net['ipv4_network_id'],
|
|
$device['device_id'],
|
|
);
|
|
foreach (dbFetchRows($sql, $array) as $new) {
|
|
echo $new['ipv4_network_id'];
|
|
$this_ifid = $new['port_id'];
|
|
$this_hostid = $new['device_id'];
|
|
$this_hostname = $new['hostname'];
|
|
$this_ifname = fixifName($new['label']);
|
|
$int_links[$this_ifid] = $this_ifid;
|
|
$int_links_v4[$this_ifid] = 1;
|
|
}
|
|
}//end foreach
|
|
|
|
foreach (dbFetchRows('SELECT ipv6_network_id FROM ipv6_addresses WHERE port_id = ?', array($port['port_id'])) as $net) {
|
|
$ipv6_network_id = $net['ipv6_network_id'];
|
|
$sql = "SELECT I.port_id FROM ipv6_addresses AS A, ports AS I, devices AS D
|
|
WHERE A.port_id = I.port_id
|
|
AND A.ipv6_network_id = ? AND D.device_id = I.device_id
|
|
AND D.device_id != ? AND A.ipv6_origin != 'linklayer' AND A.ipv6_origin != 'wellknown'";
|
|
$array = array(
|
|
$net['ipv6_network_id'],
|
|
$device['device_id'],
|
|
);
|
|
|
|
foreach (dbFetchRows($sql, $array) as $new) {
|
|
echo $new['ipv6_network_id'];
|
|
$this_ifid = $new['port_id'];
|
|
$this_hostid = $new['device_id'];
|
|
$this_hostname = $new['hostname'];
|
|
$this_ifname = fixifName($new['label']);
|
|
$int_links[$this_ifid] = $this_ifid;
|
|
$int_links_v6[$this_ifid] = 1;
|
|
}
|
|
}//end foreach
|
|
}//end if
|
|
|
|
if (count($int_links) > 3) {
|
|
echo '<div class="collapse-neighbors"><i class="neighbors-button fa fa-plus" aria-hidden="true"></i>
|
|
<span class="neighbors-interface-list-firsts" style="display: inline;">';
|
|
}
|
|
|
|
|
|
if ($port_details && $config['enable_port_relationship'] === true && port_permitted($int_link, $device['device_id'])) {
|
|
foreach ($int_links as $int_link) {
|
|
$neighborsCount++;
|
|
if ($neighborsCount == 4) {
|
|
echo '<span class="neighbors-list-continued" style="display: inline;"></br>[...]</span>';
|
|
echo '</span>';
|
|
echo '<span class="neighbors-interface-list" style="display: none;">';
|
|
}
|
|
$link_if = dbFetchRow('SELECT * from ports AS I, devices AS D WHERE I.device_id = D.device_id and I.port_id = ?', array($int_link));
|
|
echo "$br";
|
|
|
|
if ($int_links_phys[$int_link]) {
|
|
echo "<img align=absmiddle src='images/16/connect.png'> ";
|
|
} else {
|
|
echo "<img align=absmiddle src='images/16/bullet_go.png'> ";
|
|
}
|
|
|
|
echo '<b>'.generate_port_link($link_if, makeshortif($link_if['label'])).' on '.generate_device_link($link_if, shorthost($link_if['hostname']));
|
|
|
|
if ($int_links_v6[$int_link]) {
|
|
echo " <b style='color: #a10000;'>v6</b>";
|
|
}
|
|
|
|
if ($int_links_v4[$int_link]) {
|
|
echo " <b style='color: #00a100'>v4</b>";
|
|
}
|
|
|
|
$br = '<br />';
|
|
}//end foreach
|
|
}//end if
|
|
|
|
// unset($int_links, $int_links_v6, $int_links_v4, $int_links_phys, $br);
|
|
}//end if
|
|
|
|
if ($port_details && $config['enable_port_relationship'] === true && port_permitted($port['port_id'], $device['device_id'])) {
|
|
foreach (dbFetchRows('SELECT * FROM `pseudowires` WHERE `port_id` = ?', array($port['port_id'])) as $pseudowire) {
|
|
// `port_id`,`peer_device_id`,`peer_ldp_id`,`cpwVcID`,`cpwOid`
|
|
$pw_peer_dev = dbFetchRow('SELECT * FROM `devices` WHERE `device_id` = ?', array($pseudowire['peer_device_id']));
|
|
$pw_peer_int = dbFetchRow('SELECT * FROM `ports` AS I, pseudowires AS P WHERE I.device_id = ? AND P.cpwVcID = ? AND P.port_id = I.port_id', array($pseudowire['peer_device_id'], $pseudowire['cpwVcID']));
|
|
|
|
$pw_peer_int = ifNameDescr($pw_peer_int);
|
|
echo "$br<img src='images/16/arrow_switch.png' align=absmiddle><b> ".generate_port_link($pw_peer_int, makeshortif($pw_peer_int['label'])).' on '.generate_device_link($pw_peer_dev, shorthost($pw_peer_dev['hostname'])).'</b>';
|
|
$br = '<br />';
|
|
}
|
|
|
|
foreach (dbFetchRows('SELECT * FROM `ports` WHERE `pagpGroupIfIndex` = ? and `device_id` = ?', array($port['ifIndex'], $device['device_id'])) as $member) {
|
|
echo "$br<img src='images/16/brick_link.png' align=absmiddle> <strong>".generate_port_link($member).' (PAgP)</strong>';
|
|
$br = '<br />';
|
|
}
|
|
|
|
if ($port['pagpGroupIfIndex'] && $port['pagpGroupIfIndex'] != $port['ifIndex']) {
|
|
$parent = dbFetchRow('SELECT * FROM `ports` WHERE `ifIndex` = ? and `device_id` = ?', array($port['pagpGroupIfIndex'], $device['device_id']));
|
|
echo "$br<img src='images/16/bricks.png' align=absmiddle> <strong>".generate_port_link($parent).' (PAgP)</strong>';
|
|
$br = '<br />';
|
|
}
|
|
|
|
foreach (dbFetchRows('SELECT * FROM `ports_stack` WHERE `port_id_low` = ? and `device_id` = ?', array($port['ifIndex'], $device['device_id'])) as $higher_if) {
|
|
if ($higher_if['port_id_high']) {
|
|
$this_port = get_port_by_index_cache($device['device_id'], $higher_if['port_id_high']);
|
|
echo "$br<img src='images/16/arrow_divide.png' align=absmiddle> <strong>".generate_port_link($this_port).'</strong>';
|
|
$br = '<br />';
|
|
}
|
|
}
|
|
|
|
foreach (dbFetchRows('SELECT * FROM `ports_stack` WHERE `port_id_high` = ? and `device_id` = ?', array($port['ifIndex'], $device['device_id'])) as $lower_if) {
|
|
if ($lower_if['port_id_low']) {
|
|
$this_port = get_port_by_index_cache($device['device_id'], $lower_if['port_id_low']);
|
|
echo "$br<img src='images/16/arrow_join.png' align=absmiddle> <strong>".generate_port_link($this_port).'</strong>';
|
|
$br = '<br />';
|
|
}
|
|
}
|
|
}//end if
|
|
|
|
unset($int_links, $int_links_v6, $int_links_v4, $int_links_phys, $br);
|
|
|
|
if ($nbLinks > 3) {
|
|
echo '</span></div>';
|
|
}
|
|
echo '</td></tr>';
|
|
|
|
// If we're showing graphs, generate the graph and print the img tags
|
|
if ($graph_type == 'etherlike') {
|
|
$graph_file = get_port_rrdfile_path($device['hostname'], $if_id, 'dot3');
|
|
} else {
|
|
$graph_file = get_port_rrdfile_path($device['hostname'], $if_id);
|
|
}
|
|
|
|
if ($graph_type && is_file($graph_file)) {
|
|
$type = $graph_type;
|
|
|
|
echo "<tr style='background-color: $row_colour; padding: 0px;'><td colspan=7>";
|
|
|
|
include 'includes/print-interface-graphs.inc.php';
|
|
|
|
echo '</td></tr>';
|
|
}
|