'routing',
'protocol' => '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 'Device |
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` ORDER BY `l`.`device_id`, `l`.`mplsLspName`') as $lsp) {
$device = device_by_id_cache($lsp['device_id']);
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 = round($lsp['mplsLspPrimaryTimeUp'] / $lsp['mplsLspAge'] * 100, 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, array('tab' => 'routing', 'proto' => 'mpls'));
}
echo "
" . generate_device_link($device, 0, array('tab' => 'routing', 'proto' => 'mpls')) . ' |
' . $lsp['mplsLspName'] . ' |
' . $destination . ' |
' . $lsp['vrf_name'] . ' |
' . $lsp['mplsLspAdminState'] . ' |
' . $lsp['mplsLspOperState'] . ' |
' . formatUptime($lsp['mplsLspLastChange']) . ' |
' . $lsp['mplsLspTransitions'] . ' |
' . formatUptime($lsp['mplsLspLastTransition']) . ' |
' . $lsp['mplsLspConfiguredPaths'] . ' / ' . $lsp['mplsLspStandbyPaths'] . ' / ' . $lsp['mplsLspOperationalPaths'] . ' |
' . $lsp['mplsLspType'] . ' |
' . $lsp['mplsLspFastReroute'] . ' |
' . $avail . ' | ';
echo '
';
$i++;
}
echo '
';
} // endif lsp view
if ($vars['view'] == 'paths') {
echo 'Device |
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` ORDER BY `p`.`device_id`, `l`.`mplsLspName`') as $path) {
$device = device_by_id_cache($path['device_id']);
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, array('tab' => 'routing', 'proto' => 'mpls'));
}
echo "
" . generate_device_link($device, 0, array('tab' => 'routing', 'proto' => 'mpls', 'view' => 'paths')) . ' |
' . $path['mplsLspName'] . ' |
' . $path['path_oid'] . ' |
' . $path['mplsLspPathType'] . ' |
' . $path['mplsLspPathAdminState'] . ' |
' . $path['mplsLspPathOperState'] . ' |
' . formatUptime($path['mplsLspPathLastChange']) . ' |
' . $path['mplsLspPathTransitionCount'] . ' |
' . $path['mplsLspPathBandwidth'] . ' |
' . $path['mplsLspPathOperBandwidth'] . ' |
' . $path['mplsLspPathState'] . ' |
' . $path['mplsLspPathFailCode'] . ' |
' . $destination . ' |
' . $path['mplsLspPathMetric'] . ' |
' . $path['mplsLspPathOperMetric'] . ' | ';
echo '
';
$i++;
}
echo '';
} // end paths view
if ($vars['view'] == 'sdps') {
echo 'Device |
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` ORDER BY `sdp_oid`') as $sdp) {
$device = device_by_id_cache($sdp['device_id']);
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, array('tab' => 'routing', 'proto' => 'mpls'));
}
echo "
" . generate_device_link($device, 0, array('tab' => 'routing', 'proto' => 'mpls', 'view' => 'sdps')) . ' |
' . $sdp['sdp_oid'] . ' |
' . $destination . ' |
' . $sdp['sdpDelivery'] . ' |
' . $sdp['sdpActiveLspType'] . ' |
' . $sdp['sdpDescription'] . ' |
' . $sdp['sdpAdminStatus'] . ' |
' . $sdp['sdpOperStatus'] . ' |
' . $sdp['sdpAdminPathMtu'] . ' |
' . $sdp['sdpOperPathMtu'] . ' |
' . formatUptime($sdp['sdpLastMgmtChange']) . ' |
' . formatUptime($sdp['sdpLastStatusChange']) . ' | ';
echo '
';
$i++;
}
echo '';
} // end sdps view
if ($vars['view'] == 'sdpbinds') {
echo 'Device |
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` ORDER BY `sdp_oid`, `svc_oid`') as $sdpbind) {
$device = device_by_id_cache($sdpbind['device_id']);
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['sdpBindOperStatus'] == 'up') {
$operstate_status_color = 'success';
} else {
$operstate_status_color = 'danger';
}
echo "
" . generate_device_link($device, 0, array('tab' => 'routing', 'proto' => 'mpls', 'view' => 'sdpbinds')) . ' |
' . $sdpbind['svcId'] . ' |
' . $sdpbind['sdp_oid'] . ':' . $sdpbind['svc_oid'] . ' |
' . $sdpbind['sdpBindType'] . ' |
' . $sdpbind['sdpBindVcType'] . ' |
' . $sdpbind['sdpBindAdminStatus'] . ' |
' . $sdpbind['sdpBindOperStatus'] . ' |
' . formatUptime($sdpbind['sdpBindLastMgmtChange']) . ' |
' . formatUptime($sdpbind['sdpBindLastStatusChange']) . ' |
' . $sdpbind['sdpBindBaseStatsIngFwdPackets'] . ' |
' . $sdpbind['sdpBindBaseStatsIngFwdOctets'] . ' |
' . $sdpbind['sdpBindBaseStatsEgrFwdPackets'] . ' |
' . $sdpbind['sdpBindBaseStatsEgrFwdOctets'] . ' | ';
echo '
';
$i++;
}
echo '';
} // end sdpbinds view
if ($vars['view'] == 'services') {
echo 'Device |
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` ORDER BY `svc_oid`') as $svc) {
$device = device_by_id_cache($svc['device_id']);
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['svcOperStatus'] == 'up') {
$operstate_status_color = 'success';
} else {
$operstate_status_color = 'danger';
}
echo "
" . generate_device_link($device, 0, array('tab' => 'routing', 'proto' => 'mpls', 'view' => 'services')) . ' |
' . $svc['svc_oid'] . ' |
' . $svc['svcType'] . ' |
' . $svc['svcCustId'] . ' |
' . $svc['svcAdminStatus'] . ' |
' . $svc['svcOperStatus'] . ' |
' . $svc['svcDescription'] . ' |
' . $svc['svcMtu'] . ' |
' . $svc['svcNumSaps'] . ' |
' . formatUptime($svc['svcLastMgmtChange']) . ' |
' . formatUptime($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 'Device |
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` ORDER BY `device_id`, `svc_oid`, `sapPortId`, `sapEncapValue`') as $sap) {
$port = dbFetchRow('SELECT * FROM `ports` WHERE `device_id` = ? AND `ifName` = ?', [$sap['device_id'], $sap['ifName']]);
$port = cleanPort($port);
$device = device_by_id_cache($sap['device_id']);
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['sapOperStatus'] == 'up') {
$operstate_status_color = 'success';
} else {
$operstate_status_color = 'danger';
}
echo "
" . generate_device_link($device, 0, array('tab' => 'routing', 'proto' => 'mpls', 'view' => 'saps')) . ' |
' . $sap['svc_oid'] . ' |
' . generate_port_link($port) . ' |
' . $sap['sapEncapValue'] . ' |
' . $sap['sapType'] . ' |
' . $sap['sapDescription'] . ' |
' . $sap['sapAdminStatus'] . ' |
' . $sap['sapOperStatus'] . ' |
' . formatUptime($sap['sapLastMgmtChange']) . ' |
' . formatUptime($sap['sapLastStatusChange']) . ' | ';
echo '
';
$i++;
}
echo '';
} // end sap view