1 | <?php |
||||
2 | /** |
||||
3 | * Timos.php |
||||
4 | * |
||||
5 | * -Description- |
||||
6 | * |
||||
7 | * This program is free software: you can redistribute it and/or modify |
||||
8 | * it under the terms of the GNU General Public License as published by |
||||
9 | * the Free Software Foundation, either version 3 of the License, or |
||||
10 | * (at your option) any later version. |
||||
11 | * |
||||
12 | * This program is distributed in the hope that it will be useful, |
||||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the |
||||
15 | * GNU General Public License for more details. |
||||
16 | * |
||||
17 | * You should have received a copy of the GNU General Public License |
||||
18 | * along with this program. If not, see <https://www.gnu.org/licenses/>. |
||||
19 | * |
||||
20 | * @link https://www.librenms.org |
||||
21 | * |
||||
22 | * @copyright 2019 Vitali Kari |
||||
23 | * @copyright 2019 Tony Murray |
||||
24 | * @author Vitali Kari <[email protected]> |
||||
25 | * @author Tony Murray <[email protected]> |
||||
26 | */ |
||||
27 | |||||
28 | namespace LibreNMS\OS; |
||||
29 | |||||
30 | use App\Models\Device; |
||||
31 | use App\Models\MplsLsp; |
||||
32 | use App\Models\MplsLspPath; |
||||
33 | use App\Models\MplsSap; |
||||
34 | use App\Models\MplsSdp; |
||||
35 | use App\Models\MplsSdpBind; |
||||
36 | use App\Models\MplsService; |
||||
37 | use App\Models\MplsTunnelArHop; |
||||
38 | use App\Models\MplsTunnelCHop; |
||||
39 | use Illuminate\Support\Collection; |
||||
40 | use LibreNMS\Device\WirelessSensor; |
||||
41 | use LibreNMS\Interfaces\Discovery\MplsDiscovery; |
||||
42 | use LibreNMS\Interfaces\Discovery\Sensors\WirelessPowerDiscovery; |
||||
43 | use LibreNMS\Interfaces\Polling\MplsPolling; |
||||
44 | use LibreNMS\OS; |
||||
45 | use LibreNMS\RRD\RrdDefinition; |
||||
46 | |||||
47 | class Timos extends OS implements MplsDiscovery, MplsPolling, WirelessPowerDiscovery |
||||
48 | { |
||||
49 | public function discoverOS(Device $device): void |
||||
50 | { |
||||
51 | parent::discoverOS($device); // yaml |
||||
52 | |||||
53 | $hardware_index = snmp_get($this->getDeviceArray(), 'tmnxChassisType.1', '-Ovq', 'TIMETRA-CHASSIS-MIB'); |
||||
54 | $device->hardware = snmp_get($this->getDeviceArray(), "tmnxChassisTypeName.$hardware_index", '-Ovq', 'TIMETRA-CHASSIS-MIB'); |
||||
55 | |||||
56 | $hw = snmpwalk_group($this->getDeviceArray(), 'tmnxHwClass', 'TIMETRA-CHASSIS-MIB'); |
||||
57 | foreach ($hw[1]['tmnxHwClass'] as $unitID => $class) { |
||||
58 | if ($class == 3) { |
||||
59 | $device->serial = snmp_get($this->getDeviceArray(), "1.3.6.1.4.1.6527.3.1.2.2.1.8.1.5.1.$unitID", '-OQv', 'TIMETRA-CHASSIS-MIB'); |
||||
60 | |||||
61 | return; |
||||
62 | } |
||||
63 | } |
||||
64 | } |
||||
65 | |||||
66 | /** |
||||
67 | * Discover wireless Rx (Received Signal Strength). This is in dBm. Type is power. |
||||
68 | * Returns an array of LibreNMS\Device\Sensor objects that have been discovered |
||||
69 | * ALU-MICROWAVE-MIB::aluMwRadioLocalRxMainPower |
||||
70 | * |
||||
71 | * @return array |
||||
72 | */ |
||||
73 | public function discoverWirelesspower() |
||||
74 | { |
||||
75 | $name = $this->getCacheByIndex('aluMwRadioName', 'ALU-MICROWAVE-MIB'); |
||||
76 | $rsl = snmpwalk_cache_oid($this->getDeviceArray(), 'aluMwRadioLocalRxMainPower', [], 'ALU-MICROWAVE-MIB'); |
||||
77 | |||||
78 | $sensors = []; |
||||
79 | $divisor = 10; |
||||
80 | |||||
81 | foreach ($rsl as $index => $data) { |
||||
82 | $sensors[] = new WirelessSensor( |
||||
83 | 'power', |
||||
84 | $this->getDeviceId(), |
||||
85 | '.1.3.6.1.4.1.6527.6.1.2.2.7.1.3.1.2.' . $index, |
||||
86 | 'Nokia-Packet-MW-Rx', |
||||
87 | $index, |
||||
88 | "Rx ({$name[$index]})", |
||||
89 | $data['aluMwRadioLocalRxMainPower'] / $divisor, |
||||
90 | '1', |
||||
91 | '10' |
||||
92 | ); |
||||
93 | } |
||||
94 | |||||
95 | return $sensors; |
||||
96 | } |
||||
97 | |||||
98 | /** |
||||
99 | * @param mixed $tmnxEncapVal |
||||
100 | * @return string encapsulation |
||||
101 | * |
||||
102 | * @see TIMETRA-TC-MIB::TmnxEncapVal |
||||
103 | */ |
||||
104 | private function nokiaEncap($tmnxEncapVal) |
||||
105 | { |
||||
106 | // implement other encapsulation values |
||||
107 | $map = sprintf('%032b', $tmnxEncapVal); |
||||
108 | |||||
109 | if (substr($map, -32, 20) == '00000000000000000000') { // 12-bit IEEE 802.1Q VLAN ID |
||||
110 | if ($tmnxEncapVal == 4095) { |
||||
111 | return '*'; |
||||
112 | } |
||||
113 | } |
||||
114 | |||||
115 | return $tmnxEncapVal; |
||||
116 | } |
||||
117 | |||||
118 | /** |
||||
119 | * @return Collection MplsLsp objects |
||||
120 | */ |
||||
121 | public function discoverMplsLsps() |
||||
122 | { |
||||
123 | $mplsLspCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'vRtrMplsLspTable', [], 'TIMETRA-MPLS-MIB', 'nokia'); |
||||
124 | if (! empty($mplsLspCache)) { |
||||
125 | $mplsLspCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'vRtrMplsLspLastChange', $mplsLspCache, 'TIMETRA-MPLS-MIB', 'nokia', '-OQUst'); |
||||
126 | } |
||||
127 | |||||
128 | $lsps = collect(); |
||||
129 | foreach ($mplsLspCache as $key => $value) { |
||||
130 | [$vrf_oid, $lsp_oid] = explode('.', $key); |
||||
131 | |||||
132 | $mplsLspFromAddr = $value['vRtrMplsLspFromAddr']; |
||||
133 | if (isset($value['vRtrMplsLspNgFromAddr'])) { |
||||
134 | $mplsLspFromAddr = long2ip(hexdec(str_replace(' ', '', $value['vRtrMplsLspNgFromAddr']))); |
||||
0 ignored issues
–
show
Bug
introduced
by
Loading history...
|
|||||
135 | } |
||||
136 | $mplsLspToAddr = $value['vRtrMplsLspToAddr']; |
||||
137 | if (isset($value['vRtrMplsLspNgToAddr'])) { |
||||
138 | $mplsLspToAddr = long2ip(hexdec(str_replace(' ', '', $value['vRtrMplsLspNgToAddr']))); |
||||
139 | } |
||||
140 | |||||
141 | $lsps->push(new MplsLsp([ |
||||
142 | 'vrf_oid' => $vrf_oid, |
||||
143 | 'lsp_oid' => $lsp_oid, |
||||
144 | 'device_id' => $this->getDeviceId(), |
||||
145 | 'mplsLspRowStatus' => $value['vRtrMplsLspRowStatus'], |
||||
146 | 'mplsLspLastChange' => round($value['vRtrMplsLspLastChange'] / 100), |
||||
147 | 'mplsLspName' => $value['vRtrMplsLspName'], |
||||
148 | 'mplsLspAdminState' => $value['vRtrMplsLspAdminState'], |
||||
149 | 'mplsLspOperState' => $value['vRtrMplsLspOperState'], |
||||
150 | 'mplsLspFromAddr' => $mplsLspFromAddr, |
||||
151 | 'mplsLspToAddr' => $mplsLspToAddr, |
||||
152 | 'mplsLspType' => $value['vRtrMplsLspType'], |
||||
153 | 'mplsLspFastReroute' => $value['vRtrMplsLspFastReroute'], |
||||
154 | ])); |
||||
155 | } |
||||
156 | |||||
157 | return $lsps; |
||||
158 | } |
||||
159 | |||||
160 | /** |
||||
161 | * @param Collection $lsps collecton of synchronized lsp objects from discoverMplsLsps() |
||||
162 | * @return Collection MplsLspPath objects |
||||
163 | */ |
||||
164 | public function discoverMplsPaths($lsps) |
||||
165 | { |
||||
166 | $mplsPathCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'vRtrMplsLspPathTable', [], 'TIMETRA-MPLS-MIB', 'nokia'); |
||||
167 | if (! empty($mplsPathCache)) { |
||||
168 | $mplsPathCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'vRtrMplsLspPathLastChange', $mplsPathCache, 'TIMETRA-MPLS-MIB', 'nokia', '-OQUst'); |
||||
169 | } |
||||
170 | |||||
171 | $paths = collect(); |
||||
172 | foreach ($mplsPathCache as $key => $value) { |
||||
173 | [$vrf_oid, $lsp_oid, $path_oid] = explode('.', $key); |
||||
174 | $lsp_id = $lsps->where('lsp_oid', $lsp_oid)->firstWhere('vrf_oid', $vrf_oid)->lsp_id; |
||||
175 | $paths->push(new MplsLspPath([ |
||||
176 | 'lsp_id' => $lsp_id, |
||||
177 | 'path_oid' => $path_oid, |
||||
178 | 'device_id' => $this->getDeviceId(), |
||||
179 | 'mplsLspPathRowStatus' => $value['vRtrMplsLspPathRowStatus'], |
||||
180 | 'mplsLspPathLastChange' => round($value['vRtrMplsLspPathLastChange'] / 100), |
||||
181 | 'mplsLspPathType' => $value['vRtrMplsLspPathType'], |
||||
182 | 'mplsLspPathBandwidth' => $value['vRtrMplsLspPathBandwidth'], |
||||
183 | 'mplsLspPathOperBandwidth' => $value['vRtrMplsLspPathOperBandwidth'], |
||||
184 | 'mplsLspPathAdminState' => $value['vRtrMplsLspPathAdminState'], |
||||
185 | 'mplsLspPathOperState' => $value['vRtrMplsLspPathOperState'], |
||||
186 | 'mplsLspPathState' => $value['vRtrMplsLspPathState'], |
||||
187 | 'mplsLspPathFailCode' => $value['vRtrMplsLspPathFailCode'], |
||||
188 | 'mplsLspPathFailNodeAddr' => $value['vRtrMplsLspPathFailNodeAddr'], |
||||
189 | 'mplsLspPathMetric' => $value['vRtrMplsLspPathMetric'], |
||||
190 | 'mplsLspPathOperMetric' => $value['vRtrMplsLspPathOperMetric'], |
||||
191 | 'mplsLspPathTunnelARHopListIndex' => $value['vRtrMplsLspPathTunnelARHopListIndex'], |
||||
192 | 'mplsLspPathTunnelCHopListIndex' => $value['vRtrMplsLspPathTunnelCRHopListIndex'], |
||||
193 | ])); |
||||
194 | } |
||||
195 | |||||
196 | return $paths; |
||||
197 | } |
||||
198 | |||||
199 | /** |
||||
200 | * @return Collection MplsSdp objects |
||||
201 | */ |
||||
202 | public function discoverMplsSdps() |
||||
203 | { |
||||
204 | $mplsSdpCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'sdpInfoTable', [], 'TIMETRA-SDP-MIB', 'nokia', '-OQUst'); |
||||
205 | |||||
206 | $sdps = collect(); |
||||
207 | foreach ($mplsSdpCache as $value) { |
||||
208 | if ((! empty($value['sdpFarEndInetAddress'])) && ($value['sdpFarEndInetAddressType'] == 'ipv4')) { |
||||
209 | $ip = long2ip(hexdec(str_replace(' ', '', $value['sdpFarEndInetAddress']))); |
||||
0 ignored issues
–
show
It seems like
hexdec(str_replace(' ', ...dpFarEndInetAddress'])) can also be of type double ; however, parameter $ip of long2ip() does only seem to accept integer , maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||
210 | } else { |
||||
211 | //Fixme implement ipv6 conversion |
||||
212 | $ip = $value['sdpFarEndInetAddress']; |
||||
213 | } |
||||
214 | $sdps->push(new MplsSdp([ |
||||
215 | 'sdp_oid' => $value['sdpId'], |
||||
216 | 'device_id' => $this->getDeviceId(), |
||||
217 | 'sdpRowStatus' => $value['sdpRowStatus'], |
||||
218 | 'sdpDelivery' => $value['sdpDelivery'], |
||||
219 | 'sdpDescription' => $value['sdpDescription'], |
||||
220 | 'sdpAdminStatus' => $value['sdpAdminStatus'], |
||||
221 | 'sdpOperStatus' => $value['sdpOperStatus'], |
||||
222 | 'sdpAdminPathMtu' => $value['sdpAdminPathMtu'], |
||||
223 | 'sdpOperPathMtu' => $value['sdpOperPathMtu'], |
||||
224 | 'sdpLastMgmtChange' => round($value['sdpLastMgmtChange'] / 100), |
||||
225 | 'sdpLastStatusChange' => round($value['sdpLastStatusChange'] / 100), |
||||
226 | 'sdpActiveLspType' => $value['sdpActiveLspType'], |
||||
227 | 'sdpFarEndInetAddressType' => $value['sdpFarEndInetAddressType'], |
||||
228 | 'sdpFarEndInetAddress' => $ip, |
||||
229 | ])); |
||||
230 | } |
||||
231 | |||||
232 | return $sdps; |
||||
233 | } |
||||
234 | |||||
235 | /** |
||||
236 | * @return Collection MplsService objects |
||||
237 | */ |
||||
238 | public function discoverMplsServices() |
||||
239 | { |
||||
240 | $mplsSvcCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'svcBaseInfoTable', [], 'TIMETRA-SERV-MIB', 'nokia', '-OQUst'); |
||||
241 | $mplsSvcCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'svcTlsInfoTable', $mplsSvcCache, 'TIMETRA-SERV-MIB', 'nokia', '-OQUst'); |
||||
242 | |||||
243 | $svcs = collect(); |
||||
244 | |||||
245 | // Workaround, remove some defalt entries we do not want to see |
||||
246 | $filter = '/^\w* Service for internal purposes only/'; |
||||
247 | |||||
248 | foreach ($mplsSvcCache as $key => $value) { |
||||
249 | $garbage = preg_match($filter, $value['svcDescription']); |
||||
250 | if ($garbage) { |
||||
251 | unset($key); |
||||
252 | continue; |
||||
253 | } |
||||
254 | |||||
255 | $svcs->push(new MplsService([ |
||||
256 | 'svc_oid' => $value['svcId'], |
||||
257 | 'device_id' => $this->getDeviceId(), |
||||
258 | 'svcRowStatus' => $value['svcRowStatus'], |
||||
259 | 'svcType' => $value['svcType'], |
||||
260 | 'svcCustId' => $value['svcCustId'], |
||||
261 | 'svcAdminStatus' => $value['svcAdminStatus'], |
||||
262 | 'svcOperStatus' => $value['svcOperStatus'], |
||||
263 | 'svcDescription' => $value['svcDescription'], |
||||
264 | 'svcMtu' => $value['svcMtu'], |
||||
265 | 'svcNumSaps' => $value['svcNumSaps'], |
||||
266 | 'svcNumSdps' => $value['svcNumSdps'], |
||||
267 | 'svcLastMgmtChange' => round($value['svcLastMgmtChange'] / 100), |
||||
268 | 'svcLastStatusChange' => round($value['svcLastStatusChange'] / 100), |
||||
269 | 'svcVRouterId' => $value['svcVRouterId'], |
||||
270 | 'svcTlsMacLearning' => $value['svcTlsMacLearning'], |
||||
271 | 'svcTlsStpAdminStatus' => $value['svcTlsStpAdminStatus'], |
||||
272 | 'svcTlsStpOperStatus' => $value['svcTlsStpOperStatus'], |
||||
273 | 'svcTlsFdbTableSize' => $value['svcTlsFdbTableSize'], |
||||
274 | 'svcTlsFdbNumEntries' => $value['svcTlsFdbNumEntries'], |
||||
275 | ])); |
||||
276 | } |
||||
277 | |||||
278 | return $svcs; |
||||
279 | } |
||||
280 | |||||
281 | /** |
||||
282 | * @return Collection MplsSap objects |
||||
283 | */ |
||||
284 | public function discoverMplsSaps($svcs) |
||||
285 | { |
||||
286 | $mplsSapCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'sapBaseInfoTable', [], 'TIMETRA-SAP-MIB', 'nokia', '-OQUst'); |
||||
287 | $mplsSapTrafficCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'sapBaseStatsTable', [], 'TIMETRA-SAP-MIB', 'nokia', '-OQUst'); |
||||
288 | |||||
289 | $saps = collect(); |
||||
290 | |||||
291 | // Workaround, there are some oids not covered by actual MIB, try to filter them |
||||
292 | // i.e. sapBaseInfoEntry.300.118208001.1342177283.10 |
||||
293 | $filter_key = '/300\.[0-9]+\.[0-9]+\.[0-9]+/'; |
||||
294 | // remove some default entries we do not want to see |
||||
295 | $filter_value = '/^Internal SAP/'; |
||||
296 | |||||
297 | foreach ($mplsSapCache as $key => $value) { |
||||
298 | if (preg_match($filter_key, $key) || preg_match($filter_value, $value['sapDescription'])) { |
||||
299 | unset($key); |
||||
300 | continue; |
||||
301 | } |
||||
302 | [$svcId, $sapPortId, $sapEncapValue] = explode('.', $key); |
||||
303 | $svc_id = $svcs->firstWhere('svc_oid', $svcId)->svc_id; |
||||
304 | $traffic_id = $svcId . '.' . $sapPortId . '.' . $this->nokiaEncap($sapEncapValue); |
||||
305 | |||||
306 | $saps->push(new MplsSap([ |
||||
307 | 'svc_id' => $svc_id, |
||||
308 | 'svc_oid' => $svcId, |
||||
309 | 'sapPortId' => $sapPortId, |
||||
310 | 'device_id' => $this->getDeviceId(), |
||||
311 | 'sapEncapValue' => $this->nokiaEncap($sapEncapValue), |
||||
312 | 'sapRowStatus' => $value['sapRowStatus'], |
||||
313 | 'sapType' => $value['sapType'], |
||||
314 | 'sapDescription' => $value['sapDescription'], |
||||
315 | 'sapAdminStatus' => $value['sapAdminStatus'], |
||||
316 | 'sapOperStatus' => $value['sapOperStatus'], |
||||
317 | 'sapLastMgmtChange' => round($value['sapLastMgmtChange'] / 100), |
||||
318 | 'sapLastStatusChange' => round($value['sapLastStatusChange'] / 100), |
||||
319 | 'sapIngressBytes' => $mplsSapTrafficCache[$traffic_id]['sapBaseStatsIngressPchipOfferedLoPrioOctets'], |
||||
320 | 'sapEgressBytes' => $mplsSapTrafficCache[$traffic_id]['sapBaseStatsEgressQchipForwardedOutProfOctets'], |
||||
321 | 'sapIngressDroppedBytes' => $mplsSapTrafficCache[$traffic_id]['sapBaseStatsIngressQchipDroppedLoPrioOctets'], |
||||
322 | 'sapEgressDroppedBytes' => $mplsSapTrafficCache[$traffic_id]['sapBaseStatsEgressQchipDroppedOutProfOctets'], |
||||
323 | ])); |
||||
324 | } |
||||
325 | |||||
326 | return $saps; |
||||
327 | } |
||||
328 | |||||
329 | /** |
||||
330 | * @return Collection MplsSdpBind objects |
||||
331 | */ |
||||
332 | public function discoverMplsSdpBinds($sdps, $svcs) |
||||
333 | { |
||||
334 | $mplsBindCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'sdpBindTable', [], 'TIMETRA-SDP-MIB', 'nokia', '-OQUsbt'); |
||||
335 | $mplsBindCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'sdpBindBaseStatsTable', $mplsBindCache, 'TIMETRA-SDP-MIB', 'nokia', '-OQUsb'); |
||||
336 | |||||
337 | $binds = collect(); |
||||
338 | foreach ($mplsBindCache as $key => $value) { |
||||
339 | [$svcId] = explode('.', $key); |
||||
340 | $bind_id = str_replace(' ', '', $value['sdpBindId']); |
||||
341 | $sdp_oid = hexdec(substr($bind_id, 0, 8)); |
||||
342 | $svc_oid = hexdec(substr($bind_id, 9, 16)); |
||||
343 | $sdp_id = $sdps->firstWhere('sdp_oid', $sdp_oid)->sdp_id; |
||||
344 | $svc_id = $svcs->firstWhere('svc_oid', $svcId)->svc_id; |
||||
345 | if (isset($sdp_id, $svc_id, $sdp_oid, $svc_oid)) { |
||||
346 | $binds->push(new MplsSdpBind([ |
||||
347 | 'sdp_id' => $sdp_id, |
||||
348 | 'svc_id' => $svc_id, |
||||
349 | 'sdp_oid' => $sdp_oid, |
||||
350 | 'svc_oid' => $svc_oid, |
||||
351 | 'device_id' => $this->getDeviceId(), |
||||
352 | 'sdpBindRowStatus' => $value['sdpBindRowStatus'], |
||||
353 | 'sdpBindAdminStatus' => $value['sdpBindAdminStatus'], |
||||
354 | 'sdpBindOperStatus' => $value['sdpBindOperStatus'], |
||||
355 | 'sdpBindLastMgmtChange' => round($value['sdpBindLastMgmtChange'] / 100), |
||||
356 | 'sdpBindLastStatusChange' => round($value['sdpBindLastStatusChange'] / 100), |
||||
357 | 'sdpBindType' => $value['sdpBindType'], |
||||
358 | 'sdpBindVcType' => $value['sdpBindVcType'], |
||||
359 | 'sdpBindBaseStatsIngFwdPackets' => $value['sdpBindBaseStatsIngressForwardedPackets'], |
||||
360 | 'sdpBindBaseStatsIngFwdOctets' => $value['sdpBindBaseStatsIngFwdOctets'], |
||||
361 | 'sdpBindBaseStatsEgrFwdPackets' => $value['sdpBindBaseStatsEgressForwardedPackets'], |
||||
362 | 'sdpBindBaseStatsEgrFwdOctets' => $value['sdpBindBaseStatsEgressForwardedOctets'], |
||||
363 | ])); |
||||
364 | } |
||||
365 | } |
||||
366 | |||||
367 | return $binds; |
||||
368 | } |
||||
369 | |||||
370 | /** |
||||
371 | * @return Collection MplsTunnelArHop objects |
||||
372 | */ |
||||
373 | public function discoverMplsTunnelArHops($paths) |
||||
374 | { |
||||
375 | $mplsTunnelArHopCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'mplsTunnelARHopTable', [], 'MPLS-TE-MIB', 'nokia', '-OQUsbt'); |
||||
376 | $mplsTunnelArHopCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'vRtrMplsTunnelARHopTable', $mplsTunnelArHopCache, 'TIMETRA-MPLS-MIB', 'nokia', '-OQUsb'); |
||||
377 | |||||
378 | // vRtrMplsTunnelARHopProtection Bits |
||||
379 | $localAvailable = 0b10000000; |
||||
380 | $localInUse = 0b01000000; |
||||
381 | $bandwidthProtected = 0b00100000; |
||||
382 | $nodeProtected = 0b00010000; |
||||
383 | $preemptionPending = 0b00001000; |
||||
384 | $nodeId = 0b00000100; |
||||
385 | |||||
386 | $arhops = collect(); |
||||
387 | foreach ($mplsTunnelArHopCache as $key => $value) { |
||||
388 | [$mplsTunnelARHopListIndex, $mplsTunnelARHopIndex] = explode('.', $key); |
||||
389 | $lsp_path_id = $paths->firstWhere('mplsLspPathTunnelARHopListIndex', $mplsTunnelARHopListIndex)->lsp_path_id; |
||||
390 | $protection = intval($value['vRtrMplsTunnelARHopProtection'], 16); |
||||
391 | |||||
392 | $localLinkProtection = ($protection & $localAvailable) ? 'true' : 'false'; |
||||
393 | $linkProtectionInUse = ($protection & $localInUse) ? 'true' : 'false'; |
||||
394 | $bandwidthProtection = ($protection & $bandwidthProtected) ? 'true' : 'false'; |
||||
395 | $nextNodeProtection = ($protection & $nodeProtected) ? 'true' : 'false'; |
||||
396 | |||||
397 | $ARHopRouterId = $value['vRtrMplsTunnelARHopRouterId']; |
||||
398 | if (isset($value['vRtrMplsTunnelARHopNgRouterId'])) { |
||||
399 | $ARHopRouterId = long2ip(hexdec(str_replace(' ', '', $value['vRtrMplsTunnelARHopNgRouterId']))); |
||||
0 ignored issues
–
show
It seems like
hexdec(str_replace(' ', ...nnelARHopNgRouterId'])) can also be of type double ; however, parameter $ip of long2ip() does only seem to accept integer , maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||
400 | } |
||||
401 | |||||
402 | if (isset($mplsTunnelARHopListIndex, $mplsTunnelARHopIndex, $lsp_path_id)) { |
||||
403 | $arhops->push(new MplsTunnelArHop([ |
||||
404 | 'mplsTunnelARHopListIndex' => $mplsTunnelARHopListIndex, |
||||
405 | 'mplsTunnelARHopIndex' => $mplsTunnelARHopIndex, |
||||
406 | 'lsp_path_id' => $lsp_path_id, |
||||
407 | 'device_id' => $this->getDeviceId(), |
||||
408 | 'mplsTunnelARHopAddrType' => $value['mplsTunnelARHopAddrType'], |
||||
409 | 'mplsTunnelARHopIpv4Addr' => $value['mplsTunnelARHopIpv4Addr'], |
||||
410 | 'mplsTunnelARHopIpv6Addr' => $value['mplsTunnelARHopIpv6Addr'], |
||||
411 | 'mplsTunnelARHopAsNumber' => $value['mplsTunnelARHopAsNumber'], |
||||
412 | 'mplsTunnelARHopStrictOrLoose' => $value['mplsTunnelARHopStrictOrLoose'], |
||||
413 | 'mplsTunnelARHopRouterId' => $ARHopRouterId, |
||||
414 | 'localProtected' => $localLinkProtection, |
||||
415 | 'linkProtectionInUse' => $linkProtectionInUse, |
||||
416 | 'bandwidthProtected' => $bandwidthProtection, |
||||
417 | 'nextNodeProtected' => $nextNodeProtection, |
||||
418 | ])); |
||||
419 | } |
||||
420 | } |
||||
421 | |||||
422 | return $arhops; |
||||
423 | } |
||||
424 | |||||
425 | /** |
||||
426 | * @return Collection MplsTunnelCHop objects |
||||
427 | */ |
||||
428 | public function discoverMplsTunnelCHops($paths) |
||||
429 | { |
||||
430 | $mplsTunnelCHopCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'vRtrMplsTunnelCHopTable', [], 'TIMETRA-MPLS-MIB', 'nokia', '-OQUsb'); |
||||
431 | |||||
432 | $chops = collect(); |
||||
433 | foreach ($mplsTunnelCHopCache as $key => $value) { |
||||
434 | [$mplsTunnelCHopListIndex, $mplsTunnelCHopIndex] = explode('.', $key); |
||||
435 | $lsp_path_id = $paths->firstWhere('mplsLspPathTunnelCHopListIndex', $mplsTunnelCHopListIndex)->lsp_path_id; |
||||
436 | |||||
437 | $chops->push(new MplsTunnelCHop([ |
||||
438 | 'mplsTunnelCHopListIndex' => $mplsTunnelCHopListIndex, |
||||
439 | 'mplsTunnelCHopIndex' => $mplsTunnelCHopIndex, |
||||
440 | 'lsp_path_id' => $lsp_path_id, |
||||
441 | 'device_id' => $this->getDeviceId(), |
||||
442 | 'mplsTunnelCHopAddrType' => $value['vRtrMplsTunnelCHopAddrType'], |
||||
443 | 'mplsTunnelCHopIpv4Addr' => $value['vRtrMplsTunnelCHopIpv4Addr'], |
||||
444 | 'mplsTunnelCHopIpv6Addr' => $value['vRtrMplsTunnelCHopIpv6Addr'], |
||||
445 | 'mplsTunnelCHopAsNumber' => $value['vRtrMplsTunnelCHopAsNumber'], |
||||
446 | 'mplsTunnelCHopStrictOrLoose' => $value['vRtrMplsTunnelCHopStrictOrLoose'], |
||||
447 | 'mplsTunnelCHopRouterId' => $value['vRtrMplsTunnelCHopRtrID'], |
||||
448 | ])); |
||||
449 | } |
||||
450 | |||||
451 | return $chops; |
||||
452 | } |
||||
453 | |||||
454 | /** |
||||
455 | * @return Collection MplsLsp objects |
||||
456 | */ |
||||
457 | public function pollMplsLsps() |
||||
458 | { |
||||
459 | $mplsLspCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'vRtrMplsLspTable', [], 'TIMETRA-MPLS-MIB', 'nokia'); |
||||
460 | if (! empty($mplsLspCache)) { |
||||
461 | $mplsLspCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'vRtrMplsLspLastChange', $mplsLspCache, 'TIMETRA-MPLS-MIB', 'nokia', '-OQUst'); |
||||
462 | $mplsLspCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'vRtrMplsLspStatTable', $mplsLspCache, 'TIMETRA-MPLS-MIB', 'nokia'); |
||||
463 | } |
||||
464 | |||||
465 | $lsps = collect(); |
||||
466 | foreach ($mplsLspCache as $key => $value) { |
||||
467 | [$vrf_oid, $lsp_oid] = explode('.', $key); |
||||
468 | |||||
469 | $mplsLspFromAddr = $value['vRtrMplsLspFromAddr']; |
||||
470 | if (isset($value['vRtrMplsLspNgFromAddr'])) { |
||||
471 | $mplsLspFromAddr = long2ip(hexdec(str_replace(' ', '', $value['vRtrMplsLspNgFromAddr']))); |
||||
0 ignored issues
–
show
It seems like
hexdec(str_replace(' ', ...trMplsLspNgFromAddr'])) can also be of type double ; however, parameter $ip of long2ip() does only seem to accept integer , maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||
472 | } |
||||
473 | $mplsLspToAddr = $value['vRtrMplsLspToAddr']; |
||||
474 | if (isset($value['vRtrMplsLspNgToAddr'])) { |
||||
475 | $mplsLspToAddr = long2ip(hexdec(str_replace(' ', '', $value['vRtrMplsLspNgToAddr']))); |
||||
476 | } |
||||
477 | |||||
478 | $lsps->push(new MplsLsp([ |
||||
479 | 'vrf_oid' => $vrf_oid, |
||||
480 | 'lsp_oid' => $lsp_oid, |
||||
481 | 'device_id' => $this->getDeviceId(), |
||||
482 | 'mplsLspRowStatus' => $value['vRtrMplsLspRowStatus'], |
||||
483 | 'mplsLspLastChange' => round($value['vRtrMplsLspLastChange'] / 100), |
||||
484 | 'mplsLspName' => $value['vRtrMplsLspName'], |
||||
485 | 'mplsLspAdminState' => $value['vRtrMplsLspAdminState'], |
||||
486 | 'mplsLspOperState' => $value['vRtrMplsLspOperState'], |
||||
487 | 'mplsLspFromAddr' => $mplsLspFromAddr, |
||||
488 | 'mplsLspToAddr' => $mplsLspToAddr, |
||||
489 | 'mplsLspType' => $value['vRtrMplsLspType'], |
||||
490 | 'mplsLspFastReroute' => $value['vRtrMplsLspFastReroute'], |
||||
491 | 'mplsLspAge' => abs($value['vRtrMplsLspAge']), |
||||
492 | 'mplsLspTimeUp' => abs($value['vRtrMplsLspTimeUp']), |
||||
493 | 'mplsLspTimeDown' => abs($value['vRtrMplsLspTimeDown']), |
||||
494 | 'mplsLspPrimaryTimeUp' => abs($value['vRtrMplsLspPrimaryTimeUp']), |
||||
495 | 'mplsLspTransitions' => $value['vRtrMplsLspTransitions'], |
||||
496 | 'mplsLspLastTransition' => abs(round($value['vRtrMplsLspLastTransition'] / 100)), |
||||
497 | 'mplsLspConfiguredPaths' => $value['vRtrMplsLspConfiguredPaths'], |
||||
498 | 'mplsLspStandbyPaths' => $value['vRtrMplsLspStandbyPaths'], |
||||
499 | 'mplsLspOperationalPaths' => $value['vRtrMplsLspOperationalPaths'], |
||||
500 | ])); |
||||
501 | } |
||||
502 | |||||
503 | return $lsps; |
||||
504 | } |
||||
505 | |||||
506 | /** |
||||
507 | * @param Collection $lsps collecton of synchronized lsp objects from pollMplsLsps() |
||||
508 | * @return Collection MplsLspPath objects |
||||
509 | */ |
||||
510 | public function pollMplsPaths($lsps) |
||||
511 | { |
||||
512 | $mplsPathCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'vRtrMplsLspPathTable', [], 'TIMETRA-MPLS-MIB', 'nokia'); |
||||
513 | if (! empty($mplsPathCache)) { |
||||
514 | $mplsPathCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'vRtrMplsLspPathLastChange', $mplsPathCache, 'TIMETRA-MPLS-MIB', 'nokia', '-OQUst'); |
||||
515 | $mplsPathCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'vRtrMplsLspPathStatTable', $mplsPathCache, 'TIMETRA-MPLS-MIB', 'nokia'); |
||||
516 | } |
||||
517 | |||||
518 | $paths = collect(); |
||||
519 | foreach ($mplsPathCache as $key => $value) { |
||||
520 | [$vrf_oid, $lsp_oid, $path_oid] = explode('.', $key); |
||||
521 | $lsp_id = $lsps->where('lsp_oid', $lsp_oid)->firstWhere('vrf_oid', $vrf_oid)->lsp_id; |
||||
522 | $paths->push(new MplsLspPath([ |
||||
523 | 'lsp_id' => $lsp_id, |
||||
524 | 'path_oid' => $path_oid, |
||||
525 | 'device_id' => $this->getDeviceId(), |
||||
526 | 'mplsLspPathRowStatus' => $value['vRtrMplsLspPathRowStatus'], |
||||
527 | 'mplsLspPathLastChange' => round($value['vRtrMplsLspPathLastChange'] / 100), |
||||
528 | 'mplsLspPathType' => $value['vRtrMplsLspPathType'], |
||||
529 | 'mplsLspPathBandwidth' => $value['vRtrMplsLspPathBandwidth'], |
||||
530 | 'mplsLspPathOperBandwidth' => $value['vRtrMplsLspPathOperBandwidth'], |
||||
531 | 'mplsLspPathAdminState' => $value['vRtrMplsLspPathAdminState'], |
||||
532 | 'mplsLspPathOperState' => $value['vRtrMplsLspPathOperState'], |
||||
533 | 'mplsLspPathState' => $value['vRtrMplsLspPathState'], |
||||
534 | 'mplsLspPathFailCode' => $value['vRtrMplsLspPathFailCode'], |
||||
535 | 'mplsLspPathFailNodeAddr' => $value['vRtrMplsLspPathFailNodeAddr'], |
||||
536 | 'mplsLspPathMetric' => $value['vRtrMplsLspPathMetric'], |
||||
537 | 'mplsLspPathOperMetric' => $value['vRtrMplsLspPathOperMetric'], |
||||
538 | 'mplsLspPathTimeUp' => abs($value['vRtrMplsLspPathTimeUp']), |
||||
539 | 'mplsLspPathTimeDown' => abs($value['vRtrMplsLspPathTimeDown']), |
||||
540 | 'mplsLspPathTransitionCount' => $value['vRtrMplsLspPathTransitionCount'], |
||||
541 | 'mplsLspPathTunnelARHopListIndex' => $value['vRtrMplsLspPathTunnelARHopListIndex'], |
||||
542 | 'mplsLspPathTunnelCHopListIndex' => $value['vRtrMplsLspPathTunnelCRHopListIndex'], |
||||
543 | ])); |
||||
544 | } |
||||
545 | |||||
546 | return $paths; |
||||
547 | } |
||||
548 | |||||
549 | /** |
||||
550 | * @return Collection MplsSdp objects |
||||
551 | */ |
||||
552 | public function pollMplsSdps() |
||||
553 | { |
||||
554 | $mplsSdpCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'sdpInfoTable', [], 'TIMETRA-SDP-MIB', 'nokia', '-OQUst'); |
||||
555 | |||||
556 | $sdps = collect(); |
||||
557 | foreach ($mplsSdpCache as $value) { |
||||
558 | if ((! empty($value['sdpFarEndInetAddress'])) && ($value['sdpFarEndInetAddressType'] == 'ipv4')) { |
||||
559 | $ip = long2ip(hexdec(str_replace(' ', '', $value['sdpFarEndInetAddress']))); |
||||
0 ignored issues
–
show
It seems like
hexdec(str_replace(' ', ...dpFarEndInetAddress'])) can also be of type double ; however, parameter $ip of long2ip() does only seem to accept integer , maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||
560 | } else { |
||||
561 | //Fixme implement ipv6 conversion |
||||
562 | $ip = $value['sdpFarEndInetAddress']; |
||||
563 | } |
||||
564 | $sdps->push(new MplsSdp([ |
||||
565 | 'sdp_oid' => $value['sdpId'], |
||||
566 | 'device_id' => $this->getDeviceId(), |
||||
567 | 'sdpRowStatus' => $value['sdpRowStatus'], |
||||
568 | 'sdpDelivery' => $value['sdpDelivery'], |
||||
569 | 'sdpDescription' => $value['sdpDescription'], |
||||
570 | 'sdpAdminStatus' => $value['sdpAdminStatus'], |
||||
571 | 'sdpOperStatus' => $value['sdpOperStatus'], |
||||
572 | 'sdpAdminPathMtu' => $value['sdpAdminPathMtu'], |
||||
573 | 'sdpOperPathMtu' => $value['sdpOperPathMtu'], |
||||
574 | 'sdpLastMgmtChange' => round($value['sdpLastMgmtChange'] / 100), |
||||
575 | 'sdpLastStatusChange' => round($value['sdpLastStatusChange'] / 100), |
||||
576 | 'sdpActiveLspType' => $value['sdpActiveLspType'], |
||||
577 | 'sdpFarEndInetAddressType' => $value['sdpFarEndInetAddressType'], |
||||
578 | 'sdpFarEndInetAddress' => $ip, |
||||
579 | ])); |
||||
580 | } |
||||
581 | |||||
582 | return $sdps; |
||||
583 | } |
||||
584 | |||||
585 | /** |
||||
586 | * @return Collection MplsService objects |
||||
587 | */ |
||||
588 | public function pollMplsServices() |
||||
589 | { |
||||
590 | $mplsSvcCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'svcBaseInfoTable', [], 'TIMETRA-SERV-MIB', 'nokia', '-OQUst'); |
||||
591 | $mplsSvcCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'svcTlsInfoTable', $mplsSvcCache, 'TIMETRA-SERV-MIB', 'nokia', '-OQUst'); |
||||
592 | |||||
593 | $svcs = collect(); |
||||
594 | |||||
595 | // Workaround, remove some default entries we do not want to see |
||||
596 | $filter = '/^\w* Service for internal purposes only/'; |
||||
597 | |||||
598 | foreach ($mplsSvcCache as $key => $value) { |
||||
599 | $garbage = preg_match($filter, $value['svcDescription']); |
||||
600 | if ($garbage) { |
||||
601 | unset($key); |
||||
602 | continue; |
||||
603 | } |
||||
604 | $svcs->push(new MplsService([ |
||||
605 | 'svc_oid' => $value['svcId'], |
||||
606 | 'device_id' => $this->getDeviceId(), |
||||
607 | 'svcRowStatus' => $value['svcRowStatus'], |
||||
608 | 'svcType' => $value['svcType'], |
||||
609 | 'svcCustId' => $value['svcCustId'], |
||||
610 | 'svcAdminStatus' => $value['svcAdminStatus'], |
||||
611 | 'svcOperStatus' => $value['svcOperStatus'], |
||||
612 | 'svcDescription' => $value['svcDescription'], |
||||
613 | 'svcMtu' => $value['svcMtu'], |
||||
614 | 'svcNumSaps' => $value['svcNumSaps'], |
||||
615 | 'svcNumSdps' => $value['svcNumSdps'], |
||||
616 | 'svcLastMgmtChange' => round($value['svcLastMgmtChange'] / 100), |
||||
617 | 'svcLastStatusChange' => round($value['svcLastStatusChange'] / 100), |
||||
618 | 'svcVRouterId' => $value['svcVRouterId'], |
||||
619 | 'svcTlsMacLearning' => $value['svcTlsMacLearning'], |
||||
620 | 'svcTlsStpAdminStatus' => $value['svcTlsStpAdminStatus'], |
||||
621 | 'svcTlsStpOperStatus' => $value['svcTlsStpOperStatus'], |
||||
622 | 'svcTlsFdbTableSize' => $value['svcTlsFdbTableSize'], |
||||
623 | 'svcTlsFdbNumEntries' => $value['svcTlsFdbNumEntries'], |
||||
624 | ])); |
||||
625 | } |
||||
626 | |||||
627 | return $svcs; |
||||
628 | } |
||||
629 | |||||
630 | /** |
||||
631 | * @return Collection MplsSap objects |
||||
632 | */ |
||||
633 | public function pollMplsSaps($svcs) |
||||
634 | { |
||||
635 | $mplsSapCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'sapBaseInfoTable', [], 'TIMETRA-SAP-MIB', 'nokia', '-OQUst'); |
||||
636 | $mplsSapTrafficCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'sapBaseStatsTable', [], 'TIMETRA-SAP-MIB', 'nokia', '-OQUst'); |
||||
637 | |||||
638 | $saps = collect(); |
||||
639 | |||||
640 | // Workaround, there are some oids not covered by actual MIB, try to filter them |
||||
641 | // i.e. sapBaseInfoEntry.300.118208001.1342177283.10 |
||||
642 | $filter_key = '/300\.[0-9]+\.[0-9]+\.[0-9]+/'; |
||||
643 | // remove some default entries we do not want to see |
||||
644 | $filter_value = '/^Internal SAP/'; |
||||
645 | |||||
646 | // cache a ifIndex -> ifName |
||||
647 | $ifIndexNames = $this->getDevice()->ports()->pluck('ifName', 'ifIndex'); |
||||
648 | |||||
649 | foreach ($mplsSapCache as $key => $value) { |
||||
650 | if (preg_match($filter_key, $key) || preg_match($filter_value, $value['sapDescription'])) { |
||||
651 | unset($key); |
||||
652 | continue; |
||||
653 | } |
||||
654 | [$svcId, $sapPortId, $sapEncapValue] = explode('.', $key); |
||||
655 | $svc_id = $svcs->firstWhere('svc_oid', $svcId)->svc_id; |
||||
656 | $traffic_id = $svcId . '.' . $sapPortId . '.' . $this->nokiaEncap($sapEncapValue); |
||||
657 | |||||
658 | $saps->push(new MplsSap([ |
||||
659 | 'svc_id' => $svc_id, |
||||
660 | 'svc_oid' => $svcId, |
||||
661 | 'sapPortId' => $sapPortId, |
||||
662 | 'ifName' => $ifIndexNames->get($sapPortId), |
||||
663 | 'device_id' => $this->getDeviceId(), |
||||
664 | 'sapEncapValue' => $this->nokiaEncap($sapEncapValue), |
||||
665 | 'sapRowStatus' => $value['sapRowStatus'], |
||||
666 | 'sapType' => $value['sapType'], |
||||
667 | 'sapDescription' => $value['sapDescription'], |
||||
668 | 'sapAdminStatus' => $value['sapAdminStatus'], |
||||
669 | 'sapOperStatus' => $value['sapOperStatus'], |
||||
670 | 'sapLastMgmtChange' => round($value['sapLastMgmtChange'] / 100), |
||||
671 | 'sapLastStatusChange' => round($value['sapLastStatusChange'] / 100), |
||||
672 | ])); |
||||
673 | //create SAP graphs |
||||
674 | $rrd_name = \LibreNMS\Data\Store\Rrd::safeName('sap-' . $traffic_id); |
||||
675 | $rrd_def = RrdDefinition::make() |
||||
676 | ->addDataset('sapIngressBits', 'COUNTER', 0) |
||||
677 | ->addDataset('sapEgressBits', 'COUNTER', 0) |
||||
678 | ->addDataset('sapIngressDroppedBits', 'COUNTER', 0) |
||||
679 | ->addDataset('sapEgressDroppedBits', 'COUNTER', 0); |
||||
680 | |||||
681 | $fields = [ |
||||
682 | 'sapIngressBits' => $mplsSapTrafficCache[$traffic_id]['sapBaseStatsIngressPchipOfferedLoPrioOctets'] * 8, |
||||
683 | 'sapEgressBits' => $mplsSapTrafficCache[$traffic_id]['sapBaseStatsEgressQchipForwardedOutProfOctets'] * 8, |
||||
684 | 'sapIngressDroppedBits' => $mplsSapTrafficCache[$traffic_id]['sapBaseStatsIngressQchipDroppedLoPrioOctets'] * 8, |
||||
685 | 'sapEgressDroppedBits' => $mplsSapTrafficCache[$traffic_id]['sapBaseStatsEgressQchipDroppedOutProfOctets'] * 8, |
||||
686 | ]; |
||||
687 | |||||
688 | $tags = [ |
||||
689 | 'traffic_id' => $traffic_id, |
||||
690 | 'rrd_name' => $rrd_name, |
||||
691 | 'rrd_def' => $rrd_def, |
||||
692 | ]; |
||||
693 | |||||
694 | data_update($this->getDeviceArray(), 'sap', $tags, $fields); |
||||
695 | $this->enableGraph('sap'); |
||||
696 | } |
||||
697 | |||||
698 | return $saps; |
||||
699 | } |
||||
700 | |||||
701 | /** |
||||
702 | * @return Collection MplsSDpBind objects |
||||
703 | */ |
||||
704 | public function pollMplsSdpBinds($sdps, $svcs) |
||||
705 | { |
||||
706 | $mplsBindCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'sdpBindTable', [], 'TIMETRA-SDP-MIB', 'nokia', '-OQUsbt'); |
||||
707 | $mplsBindCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'sdpBindBaseStatsTable', $mplsBindCache, 'TIMETRA-SDP-MIB', 'nokia', '-OQUsb'); |
||||
708 | |||||
709 | $binds = collect(); |
||||
710 | foreach ($mplsBindCache as $key => $value) { |
||||
711 | [$svcId] = explode('.', $key); |
||||
712 | $bind_id = str_replace(' ', '', $value['sdpBindId']); |
||||
713 | $sdp_oid = hexdec(substr($bind_id, 0, 8)); |
||||
714 | $svc_oid = hexdec(substr($bind_id, 9, 16)); |
||||
715 | $sdp_id = $sdps->firstWhere('sdp_oid', $sdp_oid)->sdp_id; |
||||
716 | $svc_id = $svcs->firstWhere('svc_oid', $svcId)->svc_id; |
||||
717 | if (isset($sdp_id, $svc_id, $sdp_oid, $svc_oid)) { |
||||
718 | $binds->push(new MplsSdpBind([ |
||||
719 | 'sdp_id' => $sdp_id, |
||||
720 | 'svc_id' => $svc_id, |
||||
721 | 'sdp_oid' => $sdp_oid, |
||||
722 | 'svc_oid' => $svc_oid, |
||||
723 | 'device_id' => $this->getDeviceId(), |
||||
724 | 'sdpBindRowStatus' => $value['sdpBindRowStatus'], |
||||
725 | 'sdpBindAdminStatus' => $value['sdpBindAdminStatus'], |
||||
726 | 'sdpBindOperStatus' => $value['sdpBindOperStatus'], |
||||
727 | 'sdpBindLastMgmtChange' => round($value['sdpBindLastMgmtChange'] / 100), |
||||
728 | 'sdpBindLastStatusChange' => round($value['sdpBindLastStatusChange'] / 100), |
||||
729 | 'sdpBindType' => $value['sdpBindType'], |
||||
730 | 'sdpBindVcType' => $value['sdpBindVcType'], |
||||
731 | 'sdpBindBaseStatsIngFwdPackets' => $value['sdpBindBaseStatsIngressForwardedPackets'], |
||||
732 | 'sdpBindBaseStatsIngFwdOctets' => $value['sdpBindBaseStatsIngFwdOctets'], |
||||
733 | 'sdpBindBaseStatsEgrFwdPackets' => $value['sdpBindBaseStatsEgressForwardedPackets'], |
||||
734 | 'sdpBindBaseStatsEgrFwdOctets' => $value['sdpBindBaseStatsEgressForwardedOctets'], |
||||
735 | ])); |
||||
736 | } |
||||
737 | } |
||||
738 | |||||
739 | return $binds; |
||||
740 | } |
||||
741 | |||||
742 | /** |
||||
743 | * @return Collection MplsTunnelArHop objects |
||||
744 | */ |
||||
745 | public function pollMplsTunnelArHops($paths) |
||||
746 | { |
||||
747 | $mplsTunnelArHopCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'mplsTunnelARHopTable', [], 'MPLS-TE-MIB', 'nokia', '-OQUsbt'); |
||||
748 | $mplsTunnelArHopCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'vRtrMplsTunnelARHopTable', $mplsTunnelArHopCache, 'TIMETRA-MPLS-MIB', 'nokia', '-OQUsb'); |
||||
749 | |||||
750 | // vRtrMplsTunnelARHopProtection Bits |
||||
751 | $localAvailable = 0b10000000; |
||||
752 | $localInUse = 0b01000000; |
||||
753 | $bandwidthProtected = 0b00100000; |
||||
754 | $nodeProtected = 0b00010000; |
||||
755 | $preemptionPending = 0b00001000; |
||||
756 | $nodeId = 0b00000100; |
||||
757 | |||||
758 | $arhops = collect(); |
||||
759 | foreach ($mplsTunnelArHopCache as $key => $value) { |
||||
760 | [$mplsTunnelARHopListIndex, $mplsTunnelARHopIndex] = explode('.', $key); |
||||
761 | $lsp_path_id = $paths->firstWhere('mplsLspPathTunnelARHopListIndex', $mplsTunnelARHopListIndex)->lsp_path_id; |
||||
762 | $protection = intval($value['vRtrMplsTunnelARHopProtection'], 16); |
||||
763 | |||||
764 | $localLinkProtection = ($protection & $localAvailable) ? 'true' : 'false'; |
||||
765 | $linkProtectionInUse = ($protection & $localInUse) ? 'true' : 'false'; |
||||
766 | $bandwidthProtection = ($protection & $bandwidthProtected) ? 'true' : 'false'; |
||||
767 | $nextNodeProtection = ($protection & $nodeProtected) ? 'true' : 'false'; |
||||
768 | |||||
769 | $ARHopRouterId = $value['vRtrMplsTunnelARHopRouterId']; |
||||
770 | if (isset($value['vRtrMplsTunnelARHopNgRouterId'])) { |
||||
771 | $ARHopRouterId = long2ip(hexdec(str_replace(' ', '', $value['vRtrMplsTunnelARHopNgRouterId']))); |
||||
0 ignored issues
–
show
It seems like
hexdec(str_replace(' ', ...nnelARHopNgRouterId'])) can also be of type double ; however, parameter $ip of long2ip() does only seem to accept integer , maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||
772 | } |
||||
773 | |||||
774 | if (isset($mplsTunnelARHopListIndex, $mplsTunnelARHopIndex, $lsp_path_id)) { |
||||
775 | $arhops->push(new MplsTunnelArHop([ |
||||
776 | 'mplsTunnelARHopListIndex' => $mplsTunnelARHopListIndex, |
||||
777 | 'mplsTunnelARHopIndex' => $mplsTunnelARHopIndex, |
||||
778 | 'lsp_path_id' => $lsp_path_id, |
||||
779 | 'device_id' => $this->getDeviceId(), |
||||
780 | 'mplsTunnelARHopAddrType' => $value['mplsTunnelARHopAddrType'], |
||||
781 | 'mplsTunnelARHopIpv4Addr' => $value['mplsTunnelARHopIpv4Addr'], |
||||
782 | 'mplsTunnelARHopIpv6Addr' => $value['mplsTunnelARHopIpv6Addr'], |
||||
783 | 'mplsTunnelARHopAsNumber' => $value['mplsTunnelARHopAsNumber'], |
||||
784 | 'mplsTunnelARHopStrictOrLoose' => $value['mplsTunnelARHopStrictOrLoose'], |
||||
785 | 'mplsTunnelARHopRouterId' => $ARHopRouterId, |
||||
786 | 'localProtected' => $localLinkProtection, |
||||
787 | 'linkProtectionInUse' => $linkProtectionInUse, |
||||
788 | 'bandwidthProtected' => $bandwidthProtection, |
||||
789 | 'nextNodeProtected' => $nextNodeProtection, |
||||
790 | ])); |
||||
791 | } |
||||
792 | } |
||||
793 | |||||
794 | return $arhops; |
||||
795 | } |
||||
796 | |||||
797 | /** |
||||
798 | * @return Collection MplsTunnelCHop objects |
||||
799 | */ |
||||
800 | public function pollMplsTunnelCHops($paths) |
||||
801 | { |
||||
802 | $mplsTunnelCHopCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'vRtrMplsTunnelCHopTable', [], 'TIMETRA-MPLS-MIB', 'nokia', '-OQUsb'); |
||||
803 | |||||
804 | $chops = collect(); |
||||
805 | foreach ($mplsTunnelCHopCache as $key => $value) { |
||||
806 | [$mplsTunnelCHopListIndex, $mplsTunnelCHopIndex] = explode('.', $key); |
||||
807 | $lsp_path_id = $paths->firstWhere('mplsLspPathTunnelCHopListIndex', $mplsTunnelCHopListIndex)->lsp_path_id; |
||||
808 | |||||
809 | $chops->push(new MplsTunnelCHop([ |
||||
810 | 'mplsTunnelCHopListIndex' => $mplsTunnelCHopListIndex, |
||||
811 | 'mplsTunnelCHopIndex' => $mplsTunnelCHopIndex, |
||||
812 | 'lsp_path_id' => $lsp_path_id, |
||||
813 | 'device_id' => $this->getDeviceId(), |
||||
814 | 'mplsTunnelCHopAddrType' => $value['vRtrMplsTunnelCHopAddrType'], |
||||
815 | 'mplsTunnelCHopIpv4Addr' => $value['vRtrMplsTunnelCHopIpv4Addr'], |
||||
816 | 'mplsTunnelCHopIpv6Addr' => $value['vRtrMplsTunnelCHopIpv6Addr'], |
||||
817 | 'mplsTunnelCHopAsNumber' => $value['vRtrMplsTunnelCHopAsNumber'], |
||||
818 | 'mplsTunnelCHopStrictOrLoose' => $value['vRtrMplsTunnelCHopStrictOrLoose'], |
||||
819 | 'mplsTunnelCHopRouterId' => $value['vRtrMplsTunnelCHopRtrID'], |
||||
820 | ])); |
||||
821 | } |
||||
822 | |||||
823 | return $chops; |
||||
824 | } |
||||
825 | |||||
826 | // End Class Timos |
||||
827 | } |
||||
828 |