1 | <?php |
||
2 | |||
3 | foreach (DeviceCache::getPrimary()->getVrfContexts() as $context_name) { |
||
4 | $device['context_name'] = $context_name; |
||
5 | |||
6 | $oids = snmp_walk($device, 'ipAddressIfIndex.ipv6', ['-Osq', '-Ln'], 'IP-MIB'); |
||
7 | $oids = str_replace('ipAddressIfIndex.ipv6.', '', $oids); |
||
8 | $oids = str_replace('"', '', $oids); |
||
9 | $oids = str_replace('IP-MIB::', '', $oids); |
||
10 | $oids = trim($oids); |
||
11 | |||
12 | foreach (explode("\n", $oids) as $data) { |
||
13 | if ($data) { |
||
14 | $data = trim($data); |
||
15 | [$ipv6addr,$ifIndex] = explode(' ', $data); |
||
16 | $oid = ''; |
||
17 | $sep = ''; |
||
18 | $adsep = ''; |
||
19 | unset($ipv6_address); |
||
20 | $do = '0'; |
||
21 | foreach (explode(':', $ipv6addr) as $part) { |
||
22 | $n = hexdec($part); |
||
23 | $oid = "$oid" . "$sep" . "$n"; |
||
24 | $sep = '.'; |
||
25 | $ipv6_address = $ipv6_address . "$adsep" . $part; |
||
26 | $do++; |
||
27 | if ($do == 2) { |
||
28 | $adsep = ':'; |
||
29 | $do = '0'; |
||
30 | } else { |
||
31 | $adsep = ''; |
||
32 | } |
||
33 | } |
||
34 | |||
35 | $ipv6_prefixlen = snmp_get($device, ".1.3.6.1.2.1.4.34.1.5.2.16.$oid", '', 'IP-MIB'); |
||
36 | $ipv6_prefixlen = explode('.', $ipv6_prefixlen); |
||
0 ignored issues
–
show
Bug
introduced
by
Loading history...
|
|||
37 | $ipv6_prefixlen = str_replace('"', '', end($ipv6_prefixlen)); |
||
38 | |||
39 | if (Str::contains($ipv6_prefixlen, 'SNMPv2-SMI::zeroDotZero')) { |
||
40 | d_echo('Incomplete IPv6 data in IF-MIB'); |
||
41 | $oids = trim(Str::replaceFirst($data, '', $oids)); |
||
42 | } |
||
43 | |||
44 | $ipv6_origin = snmp_get($device, ".1.3.6.1.2.1.4.34.1.6.2.16.$oid", '-Ovq', 'IP-MIB'); |
||
45 | |||
46 | discover_process_ipv6($valid, $ifIndex, $ipv6_address, $ipv6_prefixlen, $ipv6_origin, $device['context_name']); |
||
47 | } //end if |
||
48 | } //end foreach |
||
49 | |||
50 | if (empty($oids)) { |
||
51 | $oids = snmp_walk($device, 'ipv6AddrPfxLength', ['-OsqnU', '-Ln'], 'IPV6-MIB'); |
||
52 | $oids = str_replace('.1.3.6.1.2.1.55.1.8.1.2.', '', $oids); |
||
53 | $oids = str_replace('"', '', $oids); |
||
54 | $oids = trim($oids); |
||
55 | |||
56 | foreach (explode("\n", $oids) as $data) { |
||
57 | if ($data) { |
||
58 | $data = trim($data); |
||
59 | [$if_ipv6addr,$ipv6_prefixlen] = explode(' ', $data); |
||
60 | [$ifIndex,$ipv6addr] = explode('.', $if_ipv6addr, 2); |
||
61 | $ipv6_address = snmp2ipv6($ipv6addr); |
||
62 | $ipv6_origin = snmp_get($device, "IPV6-MIB::ipv6AddrType.$if_ipv6addr", '-Ovq', 'IPV6-MIB'); |
||
63 | discover_process_ipv6($valid, $ifIndex, $ipv6_address, $ipv6_prefixlen, $ipv6_origin, $device['context_name']); |
||
64 | } //end if |
||
65 | } //end foreach |
||
66 | } //end if |
||
67 | |||
68 | $sql = 'SELECT `ipv6_addresses`.*, `ports`.`device_id`, `ports`.`ifIndex` FROM `ipv6_addresses`'; |
||
69 | $sql .= ' LEFT JOIN `ports` ON `ipv6_addresses`.`port_id` = `ports`.`port_id`'; |
||
70 | $sql .= ' WHERE `ports`.device_id = ? OR `ports`.`device_id` IS NULL'; |
||
71 | foreach (dbFetchRows($sql, [$device['device_id']]) as $row) { |
||
72 | $full_address = $row['ipv6_address'] . '/' . $row['ipv6_prefixlen']; |
||
73 | $port_id = $row['port_id']; |
||
74 | $valid_address = $full_address . '-' . $port_id; |
||
75 | if (! $valid['ipv6'][$valid_address]) { |
||
76 | echo '-'; |
||
77 | $query = dbDelete('ipv6_addresses', '`ipv6_address_id` = ?', [$row['ipv6_address_id']]); |
||
78 | if (! dbFetchCell('SELECT COUNT(*) FROM `ipv6_addresses` WHERE `ipv6_network_id` = ?', [$row['ipv6_network_id']])) { |
||
79 | $query = dbDelete('ipv6_networks', '`ipv6_network_id` = ?', [$row['ipv6_network_id']]); |
||
80 | } |
||
81 | } |
||
82 | } |
||
83 | |||
84 | echo "\n"; |
||
85 | unset($device['context_name']); |
||
86 | } |
||
87 | unset($vrfs_c); |
||
88 |