mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
74 lines
3.1 KiB
PHP
74 lines
3.1 KiB
PHP
<?php
|
|
|
|
use LibreNMS\Config;
|
|
|
|
if (Config::get('enable_pseudowires') && $device['os_group'] == 'cisco') {
|
|
$pws_db = [];
|
|
// Pre-cache the existing state of pseudowires for this device from the database
|
|
$pws_db_raw = dbFetchRows('SELECT * FROM `pseudowires` WHERE `device_id` = ?', [$device['device_id']]);
|
|
foreach ($pws_db_raw as $pw_db) {
|
|
$pws_db[$pw_db['cpwVcID']] = $pw_db['pseudowire_id'];
|
|
}
|
|
|
|
$pws = snmpwalk_cache_oid($device, 'cpwVcID', [], 'CISCO-IETF-PW-MPLS-MIB');
|
|
$pws = snmpwalk_cache_oid($device, 'cpwVcName', $pws, 'CISCO-IETF-PW-MPLS-MIB');
|
|
$pws = snmpwalk_cache_oid($device, 'cpwVcType', $pws, 'CISCO-IETF-PW-MPLS-MIB');
|
|
$pws = snmpwalk_cache_oid($device, 'cpwVcPsnType', $pws, 'CISCO-IETF-PW-MPLS-MIB');
|
|
$pws = snmpwalk_cache_oid($device, 'cpwVcDescr', $pws, 'CISCO-IETF-PW-MPLS-MIB');
|
|
|
|
// For MPLS pseudowires
|
|
$pws = snmpwalk_cache_oid($device, 'cpwVcMplsPeerLdpID', $pws, 'CISCO-IETF-PW-MPLS-MIB');
|
|
|
|
foreach ($pws as $pw_id => $pw) {
|
|
// Added By Oirbsiu
|
|
// To correct Interface names that use escaped '/' e.g. GigabitEthernet0_4_0_12
|
|
// and translate the underscore back to a slash - e.g. GigabitEthernet0/4/0/12
|
|
// Thank you @murrant
|
|
$pw['cpwVcName'] = preg_replace('/(?<=\d)_(?=\d)/', '/', $pw['cpwVcName']);
|
|
// END
|
|
|
|
[$cpw_remote_id] = explode(':', $pw['cpwVcMplsPeerLdpID']);
|
|
|
|
if (\LibreNMS\Util\IPv4::isValid($cpw_remote_id)) {
|
|
//If cpwVcMplsPeerLdpID is in the IP form, then convert it to number to store it in DB to avoid failing
|
|
$cpw_remote_id = ip2long($cpw_remote_id);
|
|
}
|
|
|
|
$cpw_remote_device = dbFetchCell('SELECT device_id from ipv4_addresses AS A, ports AS I WHERE A.ipv4_address=? AND A.port_id=I.port_id', [$cpw_remote_id]);
|
|
$if_id = dbFetchCell('SELECT port_id from ports WHERE `ifDescr`=? AND `device_id`=?', [$pw['cpwVcName'], $device['device_id']]);
|
|
if (! empty($pws_db[$pw['cpwVcID']])) {
|
|
$pseudowire_id = $pws_db[$pw['cpwVcID']];
|
|
echo '.';
|
|
} else {
|
|
$pseudowire_id = dbInsert(
|
|
[
|
|
'device_id' => $device['device_id'],
|
|
'port_id' => $if_id,
|
|
'peer_device_id' => $cpw_remote_device,
|
|
'peer_ldp_id' => $cpw_remote_id,
|
|
'cpwVcID' => $pw['cpwVcID'],
|
|
'cpwOid' => $pw_id,
|
|
'pw_type' => $pw['cpwVcType'],
|
|
'pw_descr' => $pw['cpwVcDescr'],
|
|
'pw_psntype' => $pw['cpwVcPsnType'],
|
|
],
|
|
'pseudowires'
|
|
);
|
|
echo '+';
|
|
}
|
|
|
|
$device['pws'][$pw['cpwVcID']] = $pseudowire_id;
|
|
}//end foreach
|
|
|
|
// Cycle the list of pseudowires we cached earlier and make sure we saw them again.
|
|
foreach ($pws_db as $pw_id => $pseudowire_id) {
|
|
if (empty($device['pws'][$pw_id])) {
|
|
dbDelete('pseudowires', '`pseudowire_id` = ?', [$pseudowire_id]);
|
|
}
|
|
}
|
|
|
|
echo "\n";
|
|
} //end if
|
|
|
|
unset($pws_db, $pws_db_raw, $pw_db);
|