0 || $port['ifOutErrors_delta'] > 0) { $error_img = generate_port_link($port, "", 'port_errors'); } else { $error_img = ''; } if (dbFetchCell('SELECT COUNT(*) FROM `mac_accounting` WHERE `port_id` = ?', [$port['port_id']])) { $mac = " 'macaccounting']) . "'>"; } else { $mac = ''; } echo " "; if (Auth::user()->hasGlobalRead()) { $port_data = array_to_htmljson($port); echo ''; } echo ' ' . generate_port_link($port, $port['label']) . " $error_img $mac
" . $port['ifAlias'] . ''; if ($port['ifAlias']) { echo '
'; } unset($break); if ($port_details) { foreach (dbFetchRows('SELECT * FROM `ipv4_addresses` WHERE `port_id` = ?', [$port['port_id']]) as $ip) { echo "$break " . $ip['ipv4_address'] . '/' . $ip['ipv4_prefixlen'] . ''; $break = '
'; } foreach (dbFetchRows('SELECT * FROM `ipv6_addresses` WHERE `port_id` = ?', [$port['port_id']]) as $ip6) { echo "$break " . IP::parse($ip6['ipv6_address'], true) . '/' . $ip6['ipv6_prefixlen'] . ''; $break = '
'; } } echo ''; $port_group_name_list = Port::find($port['port_id'])->groups->pluck('name')->toArray() ?: ['Default']; echo ''; echo implode('
', $port_group_name_list); echo ""; if ($port_details) { $port['graph_type'] = 'port_bits'; echo generate_port_link($port, ""); $port['graph_type'] = 'port_upkts'; echo generate_port_link($port, ""); $port['graph_type'] = 'port_errors'; echo generate_port_link($port, ""); } echo ""; if ($port['ifOperStatus'] == 'up') { $port['in_rate'] = ($port['ifInOctets_rate'] * 8); $port['out_rate'] = ($port['ifOutOctets_rate'] * 8); $in_perc = empty($port['ifSpeed']) ? 0 : round(($port['in_rate'] / $port['ifSpeed'] * 100)); $out_perc = empty($port['ifSpeed']) ? 0 : round(($port['in_rate'] / $port['ifSpeed'] * 100)); echo " " . Number::formatSi($port['in_rate'], 2, 3, 'bps') . "
" . Number::formatSi($port['out_rate'], 2, 3, 'bps') . "
" . Number::formatBi($port['ifInUcastPkts_rate'], 2, 3, 'pps') . "

" . Number::formatBi($port['ifOutUcastPkts_rate'], 2, 3, 'pps') . '
'; } echo ""; if ($port['ifSpeed']) { echo '' . \LibreNMS\Util\Number::formatSi($port['ifSpeed'], 2, 3, 'bps') . ''; } echo '
'; if ($port['ifDuplex'] != 'unknown') { echo '' . $port['ifDuplex'] . ''; } else { echo '-'; } $vlans = dbFetchColumn( 'SELECT vlan FROM `ports_vlans` AS PV, vlans AS V ' . 'WHERE PV.`port_id`=? AND PV.`device_id`=? AND V.`vlan_vlan`=PV.vlan AND V.device_id = PV.device_id', [$port['port_id'], $device['device_id']] ); $vlan_count = count($vlans); if ($vlan_count > 1) { echo '

VLANs: '; echo $vlan_count; echo '

'; } elseif ($vlan_count == 1 || $port['ifVlan']) { echo '

VLAN: '; echo $vlans[0] ?: $port['ifVlan']; echo '

'; } elseif ($port['ifVrf']) { $vrf = dbFetchRow('SELECT * FROM vrfs WHERE vrf_id = ?', [$port['ifVrf']]); echo "

" . $vrf['vrf_name'] . '

'; }//end if if ($port_adsl['adslLineCoding']) { echo ""; echo $port_adsl['adslLineCoding'] . '/' . rewrite_adslLineType($port_adsl['adslLineType']); echo '
'; // ATU-C is CO -> ATU-C TX is the download speed for the CPE // ATU-R is the CPE -> ATU-R TX is the upload speed of the CPE echo 'Sync:' . Number::formatSi($port_adsl['adslAtucChanCurrTxRate'], 2, 3, 'bps') . '/' . Number::formatSi($port_adsl['adslAturChanCurrTxRate'], 2, 3, 'bps'); echo '
'; // This is the Receive Max AttainableRate, so : // adslAturCurrAttainableRate is DownloadMaxRate // adslAtucCurrAttainableRate is UploadMaxRate echo 'Max:' . Number::formatSi($port_adsl['adslAturCurrAttainableRate'], 2, 3, 'bps') . '/' . Number::formatSi($port_adsl['adslAtucCurrAttainableRate'], 2, 3, 'bps'); echo ""; echo 'Atten:' . $port_adsl['adslAturCurrAtn'] . 'dB/' . $port_adsl['adslAtucCurrAtn'] . 'dB'; echo '
'; echo 'SNR:' . $port_adsl['adslAturCurrSnrMgn'] . 'dB/' . $port_adsl['adslAtucCurrSnrMgn'] . 'dB'; } else { echo ""; if ($port['ifType'] && $port['ifType'] != '') { echo '' . \LibreNMS\Util\Rewrite::normalizeIfType($port['ifType']) . ''; } else { echo '-'; } echo '
'; if ($ifHardType && $ifHardType != '') { echo '' . $ifHardType . ''; } else { echo '-'; } echo ""; if ($port['ifPhysAddress'] && $port['ifPhysAddress'] != '') { echo '' . \LibreNMS\Util\Rewrite::readableMac($port['ifPhysAddress']) . ''; } else { echo '-'; } echo '
'; if ($port['ifMtu'] && $port['ifMtu'] != '') { echo 'MTU ' . $port['ifMtu'] . ''; } else { echo '-'; } }//end if echo ''; echo ''; $neighborsCount = 0; $nbLinks = 0; $int_links = []; 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', [$if_id]) as $link) { $int_links[$link['port_id']] = $link['port_id']; $int_links_phys[$link['port_id']] = 1; $nbLinks++; } unset($br); if ($port_details && Config::get('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.%'", [$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 = [ $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 = \LibreNMS\Util\Rewrite::normalizeIfName($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 = ?', [$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 = [ $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 = \LibreNMS\Util\Rewrite::normalizeIfName($new['label']); $int_links[$this_ifid] = $this_ifid; $int_links_v6[$this_ifid] = 1; } }//end foreach }//end if if (count($int_links) > 3) { echo '
'; } if ($port_details && Config::get('enable_port_relationship') === true && port_permitted($int_link, $device['device_id'])) { foreach ($int_links as $int_link) { $neighborsCount++; if ($neighborsCount == 4) { echo '
[...]
'; echo '
'; echo '
'; } echo ''; // 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 ""; include 'includes/html/print-interface-graphs.inc.php'; echo ''; }