'device',
'device' => $device['device_id'],
'tab' => 'routing',
'proto' => 'mpls',
];
if (! isset($vars['view'])) {
$vars['view'] = 'lsp';
}
echo 'MPLS » ';
if ($vars['view'] == 'lsp') {
echo "';
}
echo ' | ';
if ($vars['view'] == 'paths') {
echo "';
}
echo ' | ';
if ($vars['view'] == 'sdps') {
echo "';
}
echo ' | ';
if ($vars['view'] == 'sdpbinds') {
echo "';
}
echo ' | ';
if ($vars['view'] == 'services') {
echo "';
}
echo ' | ';
if ($vars['view'] == 'saps') {
echo "';
}
print_optionbar_end();
echo '
';
if ($vars['view'] == 'lsp') {
echo 'Name |
Destination |
VRF |
Admin State |
Oper State |
Last Change at |
Transitions |
Last Transition |
PathsConf / Stby / Oper |
Type |
FRR |
Availability% |
';
$i = 0;
foreach (dbFetchRows('SELECT *, `vrf_name` FROM `mpls_lsps` AS l, `vrfs` AS v WHERE `l`.`vrf_oid` = `v`.`vrf_oid` AND `l`.`device_id` = `v`.`device_id` AND `l`.`device_id` = ? ORDER BY `l`.`mplsLspName`', [$device['device_id']]) as $lsp) {
if (! is_integer($i / 2)) {
$bg_colour = \LibreNMS\Config::get('list_colour.even');
} else {
$bg_colour = \LibreNMS\Config::get('list_colour.odd');
}
$adminstate_status_color = $operstate_status_color = $path_status_color = 'default';
if ($lsp['mplsLspAdminState'] == 'inService') {
$adminstate_status_color = 'success';
}
if ($lsp['mplsLspOperState'] == 'inService') {
$operstate_status_color = 'success';
} elseif ($lsp['mplsLspAdminState'] == 'inService' && $lsp['mplsLspOperState'] == 'outOfService') {
$operstate_status_color = 'danger';
}
if ($lsp['mplsLspConfiguredPaths'] + $lsp['mplsLspStandbyPaths'] == $lsp['mplsLspOperationalPaths']) {
$path_status_color = 'success';
} elseif ($lsp['mplsLspOperationalPaths'] == '0') {
$path_status_color = 'danger';
} elseif ($lsp['mplsLspConfiguredPaths'] + $lsp['mplsLspStandbyPaths'] > $lsp['mplsLspOperationalPaths']) {
$path_status_color = 'warning';
}
$avail = Number::calculatePercent($lsp['mplsLspPrimaryTimeUp'], $lsp['mplsLspAge'], 5);
$host = @dbFetchRow('SELECT * FROM `ipv4_addresses` AS A, `ports` AS I, `devices` AS D WHERE A.ipv4_address = ? AND I.port_id = A.port_id AND D.device_id = I.device_id', [$lsp['mplsLspToAddr']]);
$destination = $lsp['mplsLspToAddr'];
if (is_array($host)) {
$destination = generate_device_link($host, 0, ['tab' => 'routing', 'proto' => 'mpls', 'view' => 'lsp']);
}
echo "
" . $lsp['mplsLspName'] . ' |
' . $destination . ' |
' . $lsp['vrf_name'] . ' |
' . $lsp['mplsLspAdminState'] . ' |
' . $lsp['mplsLspOperState'] . ' |
' . \LibreNMS\Util\Time::formatInterval($lsp['mplsLspLastChange']) . ' |
' . $lsp['mplsLspTransitions'] . ' |
' . \LibreNMS\Util\Time::formatInterval($lsp['mplsLspLastTransition']) . ' |
' . $lsp['mplsLspConfiguredPaths'] . ' / ' . $lsp['mplsLspStandbyPaths'] . ' / ' . $lsp['mplsLspOperationalPaths'] . ' |
' . $lsp['mplsLspType'] . ' |
' . $lsp['mplsLspFastReroute'] . ' |
' . $avail . ' | ';
echo '
';
$i++;
}
echo '
';
} // endif lsp view
if ($vars['view'] == 'paths') {
echo ' |
LSP Name |
Index |
Type |
Admin State |
Oper State |
Last Change at |
Transitions |
Bandwidth |
Oper BW |
State |
Failcode |
Fail Node |
Metric |
Oper Metric |
';
$i = 0;
foreach (dbFetchRows('SELECT *, `mplsLspName` FROM `mpls_lsp_paths` AS `p`, `mpls_lsps` AS `l` WHERE `p`.`lsp_id` = `l`.`lsp_id` AND `p`.`device_id` = ? ORDER BY `l`.`mplsLspName`', [$device['device_id']]) as $path) {
if (! is_integer($i / 2)) {
$bg_colour = \LibreNMS\Config::get('list_colour.even');
} else {
$bg_colour = \LibreNMS\Config::get('list_colour.odd');
}
$adminstate_status_color = $operstate_status_color = 'default';
$failcode_status_color = 'warning';
if ($path['mplsLspPathAdminState'] == 'inService') {
$adminstate_status_color = 'success';
}
if ($path['mplsLspPathFailCode'] == 'noError') {
$failcode_status_color = 'success';
}
if ($path['mplsLspPathOperState'] == 'inService') {
$operstate_status_color = 'success';
} elseif ($path['mplsLspPathAdminState'] == 'inService' && $path['mplsLspPathOperState'] == 'outOfService') {
$operstate_status_color = 'danger';
}
$host = @dbFetchRow('SELECT * FROM `ipv4_addresses` AS A, `ports` AS I, `devices` AS D WHERE A.ipv4_address = ? AND I.port_id = A.port_id AND D.device_id = I.device_id', [$path['mplsLspPathFailNodeAddr']]);
$destination = $path['mplsLspPathFailNodeAddr'];
if (is_array($host)) {
$destination = generate_device_link($host, 0, ['tab' => 'routing', 'proto' => 'mpls']);
}
echo '
|
' . $path['mplsLspName'] . ' |
' . $path['path_oid'] . ' |
' . $path['mplsLspPathType'] . ' |
' . $path['mplsLspPathAdminState'] . ' |
' . $path['mplsLspPathOperState'] . ' |
' . \LibreNMS\Util\Time::formatInterval($path['mplsLspPathLastChange']) . ' |
' . $path['mplsLspPathTransitionCount'] . ' |
' . $path['mplsLspPathBandwidth'] . ' |
' . $path['mplsLspPathOperBandwidth'] . ' |
' . $path['mplsLspPathState'] . ' |
' . $path['mplsLspPathFailCode'] . ' |
' . $destination . ' |
' . $path['mplsLspPathMetric'] . ' |
' . $path['mplsLspPathOperMetric'] . ' | ';
echo '
';
echo '';
echo ' ';
// FIXME include only on expanded data-toggle
include 'includes/html/pages/routing/mpls-path-map.inc.php';
echo '
|
';
$i++;
}
echo '';
} // end paths view
if ($vars['view'] == 'sdps') {
echo 'SDP Id |
Destination |
Type |
LSP Type |
Description |
Admin State |
Oper State |
Admin MTU |
Oper MTU |
Last Mgmt Change at |
Last Status Change at |
';
$i = 0;
foreach (dbFetchRows('SELECT * FROM `mpls_sdps` WHERE `device_id` = ? ORDER BY `sdp_oid`', [$device['device_id']]) as $sdp) {
if (! is_integer($i / 2)) {
$bg_colour = \LibreNMS\Config::get('list_colour.even');
} else {
$bg_colour = \LibreNMS\Config::get('list_colour.odd');
}
$adminstate_status_color = $operstate_status_color = 'default';
$failcode_status_color = 'warning';
if ($sdp['sdpAdminStatus'] == 'up') {
$adminstate_status_color = 'success';
}
if ($sdp['sdpOperStatus'] == 'up') {
$operstate_status_color = 'success';
} elseif ($sdp['sdpAdminStatus'] == 'up' && $sdp['sdpOperStatus'] == 'down') {
$operstate_status_color = 'danger';
}
$host = @dbFetchRow('SELECT * FROM `ipv4_addresses` AS A, `ports` AS I, `devices` AS D WHERE A.ipv4_address = ? AND I.port_id = A.port_id AND D.device_id = I.device_id', [$sdp['sdpFarEndInetAddress']]);
$destination = $sdp['sdpFarEndInetAddress'];
if (is_array($host)) {
$destination = generate_device_link($host, 0, ['tab' => 'routing', 'proto' => 'mpls', 'view' => 'sdps']);
}
echo "
" . $sdp['sdp_oid'] . ' |
' . $destination . ' |
' . $sdp['sdpDelivery'] . ' |
' . $sdp['sdpActiveLspType'] . ' |
' . $sdp['sdpDescription'] . ' |
' . $sdp['sdpAdminStatus'] . ' |
' . $sdp['sdpOperStatus'] . ' |
' . $sdp['sdpAdminPathMtu'] . ' |
' . $sdp['sdpOperPathMtu'] . ' |
' . \LibreNMS\Util\Time::formatInterval($sdp['sdpLastMgmtChange']) . ' |
' . \LibreNMS\Util\Time::formatInterval($sdp['sdpLastStatusChange']) . ' | ';
echo '
';
$i++;
}
echo '';
} // end sdps view
if ($vars['view'] == 'sdpbinds') {
echo 'Service Id |
SDP Bind Id |
Bind Type |
VC Type |
Admin State |
Oper State |
Last Mgmt Change at |
Last Status Change at |
Ing Fwd Packets |
Ing Fwd Octets |
Egr Fwd Packets |
Egr Fwd Octets |
';
$i = 0;
foreach (dbFetchRows('SELECT b.*, s.svc_oid AS svcId FROM `mpls_sdp_binds` AS b LEFT JOIN `mpls_services` AS s ON `b`.`svc_id` = `s`.`svc_id` WHERE `b`.`device_id` = ? ORDER BY `sdp_oid`, `svc_oid`', [$device['device_id']]) as $sdpbind) {
if (! is_integer($i / 2)) {
$bg_colour = \LibreNMS\Config::get('list_colour.even');
} else {
$bg_colour = \LibreNMS\Config::get('list_colour.odd');
}
$adminstate_status_color = $operstate_status_color = 'default';
$failcode_status_color = 'warning';
if ($sdpbind['sdpBindAdminStatus'] == 'up') {
$adminstate_status_color = 'success';
}
if ($sdpbind['sdpBindAdminStatus'] == 'up' && $sdpbind['sdpBindOperStatus'] == 'up') {
$operstate_status_color = 'success';
} elseif ($sdpbind['sdpBindAdminStatus'] == 'up' && $sdpbind['sdpBindOperStatus'] == 'down') {
$operstate_status_color = 'danger';
}
echo "
" . $sdpbind['svcId'] . ' |
' . $sdpbind['sdp_oid'] . ':' . $sdpbind['svc_oid'] . ' |
' . $sdpbind['sdpBindType'] . ' |
' . $sdpbind['sdpBindVcType'] . ' |
' . $sdpbind['sdpBindAdminStatus'] . ' |
' . $sdpbind['sdpBindOperStatus'] . ' |
' . \LibreNMS\Util\Time::formatInterval($sdpbind['sdpBindLastMgmtChange']) . ' |
' . \LibreNMS\Util\Time::formatInterval($sdpbind['sdpBindLastStatusChange']) . ' |
' . $sdpbind['sdpBindBaseStatsIngFwdPackets'] . ' |
' . $sdpbind['sdpBindBaseStatsIngFwdOctets'] . ' |
' . $sdpbind['sdpBindBaseStatsEgrFwdPackets'] . ' |
' . $sdpbind['sdpBindBaseStatsEgrFwdOctets'] . ' | ';
echo '
';
$i++;
}
echo '';
} // end sdpbinds view
if ($vars['view'] == 'services') {
echo 'Service Id |
Type |
Customer |
Admin Status |
Oper Status |
Description |
Service MTU |
Num SAPs |
Last Mgmt Change at |
Last Status Change at |
VRF |
MAC Learning |
FDB Table Size |
FDB Entries |
STP Admin Status |
STP Oper Status |
';
$i = 0;
foreach (dbFetchRows('SELECT s.*, v.vrf_name FROM `mpls_services` AS s LEFT JOIN `vrfs` AS v ON `s`.`svcVRouterId` = `v`.`vrf_oid` AND `s`.`device_id` = `v`.`device_id` WHERE `s`.`device_id` = ? ORDER BY `svc_oid`', [$device['device_id']]) as $svc) {
if (! is_integer($i / 2)) {
$bg_colour = \LibreNMS\Config::get('list_colour.even');
} else {
$bg_colour = \LibreNMS\Config::get('list_colour.odd');
}
$adminstate_status_color = $operstate_status_color = 'default';
$failcode_status_color = 'warning';
if ($svc['svcAdminStatus'] == 'up') {
$adminstate_status_color = 'success';
}
if ($svc['svcAdminStatus'] == 'up' && $svc['svcOperStatus'] == 'up') {
$operstate_status_color = 'success';
} elseif ($svc['svcAdminStatus'] == 'up' && $svc['svcOperStatus'] == 'down') {
$operstate_status_color = 'danger';
}
$fdb_usage_perc = Number::calculatePercent($svc['svcTlsFdbNumEntries'], $svc['svcTlsFdbTableSize']);
if ($fdb_usage_perc > 95) {
$fdb_status_color = 'danger';
} elseif ($fdb_usage_perc > 75) {
$fdb_status_color = 'warning';
} else {
$fdb_status_color = 'success';
}
echo "
" . $svc['svc_oid'] . ' |
' . $svc['svcType'] . ' |
' . $svc['svcCustId'] . ' |
' . $svc['svcAdminStatus'] . ' |
' . $svc['svcOperStatus'] . ' |
' . $svc['svcDescription'] . ' |
' . $svc['svcMtu'] . ' |
' . $svc['svcNumSaps'] . ' |
' . \LibreNMS\Util\Time::formatInterval($svc['svcLastMgmtChange']) . ' |
' . \LibreNMS\Util\Time::formatInterval($svc['svcLastStatusChange']) . ' |
' . $svc['vrf_name'] . ' |
' . $svc['svcTlsMacLearning'] . ' |
' . $svc['svcTlsFdbTableSize'] . ' |
' . $svc['svcTlsFdbNumEntries'] . ' |
' . $svc['svcTlsStpAdminStatus'] . ' |
' . $svc['svcTlsStpOperStatus'] . ' | ';
echo '
';
$i++;
}
echo '';
} // end services view
if ($vars['view'] == 'saps') {
echo 'Service Id |
SAP Port |
Encapsulation |
Type |
Description |
Admin Status |
Oper Satatus |
Last Mgmt Change at |
Last Oper Change at |
';
$i = 0;
foreach (dbFetchRows('SELECT * FROM `mpls_saps` WHERE `device_id` = ? ORDER BY `device_id`, `svc_oid`, `sapPortId`, `sapEncapValue`', [$device['device_id']]) as $sap) {
$port = dbFetchRow('SELECT * FROM `ports` WHERE `device_id` = ? AND `ifName` = ?', [$sap['device_id'], $sap['ifName']]);
$port = cleanPort($port);
if (! is_integer($i / 2)) {
$bg_colour = \LibreNMS\Config::get('list_colour.even');
} else {
$bg_colour = \LibreNMS\Config::get('list_colour.odd');
}
$adminstate_status_color = $operstate_status_color = 'default';
$failcode_status_color = 'warning';
if ($sap['sapAdminStatus'] == 'up') {
$adminstate_status_color = 'success';
}
if ($sap['sapAdminStatus'] == 'up' && $sap['sapOperStatus'] == 'up') {
$operstate_status_color = 'success';
} elseif ($sap['sapAdminStatus'] == 'up' && $sap['sapOperStatus'] == 'down') {
$operstate_status_color = 'danger';
}
echo "" . '
' . generate_sap_url($sap, $sap['svc_oid']) . ' |
' . generate_port_link($port) . ' |
' . $sap['sapEncapValue'] . ' |
' . $sap['sapType'] . ' |
' . $sap['sapDescription'] . ' |
' . $sap['sapAdminStatus'] . ' |
' . $sap['sapOperStatus'] . ' |
' . \LibreNMS\Util\Time::formatInterval($sap['sapLastMgmtChange']) . ' |
' . \LibreNMS\Util\Time::formatInterval($sap['sapLastStatusChange']) . ' | ';
echo '
';
$i++;
}
echo '';
} // end sap view