45 lines
1.5 KiB
PHP
45 lines
1.5 KiB
PHP
<?php
|
|
/**
|
|
* Observium
|
|
*
|
|
* This file is part of Observium.
|
|
*
|
|
* @package observium
|
|
* @subpackage discovery
|
|
* @copyright (C) Adam Armstrong
|
|
*
|
|
*/
|
|
|
|
if ($mac_found['ipv6'][$vrf_name]) { return; }
|
|
|
|
if ($oids = snmpwalk_cache_twopart_oid($device, 'ipv6NetToMediaPhysAddress', [], 'IPV6-MIB', NULL, OBS_SNMP_ALL_TABLE)) {
|
|
// Or check IPV6-MIB::ipv6NetToMediaPhysAddress (IPv6 only, deprecated, junos)
|
|
//ipv6NetToMediaPhysAddress[18][fe80:0:0:0:200:ff:fe00:4] 2:0:0:0:0:4
|
|
print_debug("Used IPV6-MIB::ipv6NetToMediaPhysAddress");
|
|
$ip_version = 'ipv6';
|
|
$mac_found[$ip_version][$vrf_name] = 1;
|
|
|
|
foreach ($oids as $ifIndex => $oids1) {
|
|
foreach ($oids1 as $ip => $entry) {
|
|
if (!is_valid_param($entry['ipv6NetToMediaPhysAddress'], 'mac')) {
|
|
print_debug("Invalid MAC address '{$entry['ipv6NetToMediaPhysAddress']}'");
|
|
print_debug_vars($entry);
|
|
continue;
|
|
}
|
|
|
|
if (str_contains($ip, ':') && str_contains($ip, '.')) {
|
|
// Windows return incorrect index:
|
|
// ipv6NetToMediaPhysAddress[1][10ff:200:0:0:0:0:0:100].2 =
|
|
// ipv6NetToMediaPhysAddress[5][10ff:200:0:0:0:0:0:0].1 = 33:33:0:0:0:1
|
|
$ip = explode('.', $ip)[0];
|
|
} else {
|
|
$ip = hex2ip($ip);
|
|
}
|
|
$ip = ip_uncompress($ip);
|
|
$mac_table[$vrf_name][$ip_version][$ifIndex][$ip] = mac_zeropad($entry['ipv6NetToMediaPhysAddress']);
|
|
}
|
|
}
|
|
}
|
|
|
|
// EOF
|