Source of file api.ponstels12.php
Size: 15,011 Bytes - Last Modified: 2024-04-27T15:26:05+03:00
/tmp/current_snapshot/api/libs/api.ponstels12.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392 | <?php /** * OLT Stels FD12XX hardware abstraction layer */ class PONStels12 extends PONProto { /** * Stels FD12XX devices polling * * @return void */ public function collect() { $oltModelId = $this->oltParameters['MODELID']; $oltid = $this->oltParameters['ID']; $oltIp = $this->oltParameters['IP']; $oltCommunity = $this->oltParameters['COMMUNITY']; $oltNoFDBQ = $this->oltParameters['NOFDB']; $oltIPPORT = $oltIp . ':' . self::SNMPPORT; $deviceType = $this->snmpTemplates[$oltModelId]['define']['DEVICE']; $ponPrefixAdd = (empty($this->snmpTemplates[$oltModelId]['misc']['INTERFACEADDPONPREFIX']) ? '' : $this->snmpTemplates[$oltModelId]['misc']['INTERFACEADDPONPREFIX']); $distIndex = array(); $ifaceIndex = array(); $sigIndex = $this->walkCleared($oltIPPORT, $oltCommunity, $this->snmpTemplates[$oltModelId]['signal']['SIGINDEX'], '', '.0.0 ', self::SNMPCACHE); //ONU distance polling for stels12 devices if (isset($this->snmpTemplates[$oltModelId]['misc'])) { if (isset($this->snmpTemplates[$oltModelId]['misc']['DISTINDEX'])) { if (!empty($this->snmpTemplates[$oltModelId]['misc']['DISTINDEX'])) { $distIndex = $this->walkCleared($oltIPPORT, $oltCommunity, $this->snmpTemplates[$oltModelId]['misc']['DISTINDEX'], '', '', self::SNMPCACHE); $onuIndex = $this->walkCleared($oltIPPORT, $oltCommunity, $this->snmpTemplates[$oltModelId]['misc']['ONUINDEX'], '', '.0.0 ', self::SNMPCACHE); $ifaceIndex = $this->walkCleared($oltIPPORT, $oltCommunity, $this->snmpTemplates[$oltModelId]['misc']['INTERFACEINDEX'], '', '"', self::SNMPCACHE); } } if (isset($this->snmpTemplates[$oltModelId]['misc']['DEREGREASON'])) { if (!empty($this->snmpTemplates[$oltModelId]['misc']['DEREGREASON'])) { $lastDeregIndex = $this->walkCleared($oltIPPORT, $oltCommunity, $this->snmpTemplates[$oltModelId]['misc']['DEREGREASON'], '', '"', self::SNMPCACHE); } } } //getting MAC index. $macIndex = $this->walkCleared($oltIPPORT, $oltCommunity, $this->snmpTemplates[$oltModelId]['signal']['MACINDEX'], '', '', self::SNMPCACHE); $this->signalParse($oltid, $sigIndex, $macIndex, $this->snmpTemplates[$oltModelId]['signal']); if (isset($this->snmpTemplates[$oltModelId]['misc'])) { if (isset($this->snmpTemplates[$oltModelId]['misc']['DISTINDEX'])) { if (!empty($this->snmpTemplates[$oltModelId]['misc']['DISTINDEX'])) { // processing distance data $this->distanceParse($oltid, $distIndex, $macIndex); //processing interfaces data //$this->interfaceParseStels12($oltid, $ifaceIndex, $macIndex, $deviceType); $this->interfaceParseStels12($oltid, $ifaceIndex, $ponPrefixAdd); } } if (isset($this->snmpTemplates[$oltModelId]['misc']['DEREGREASON'])) { if (!empty($this->snmpTemplates[$oltModelId]['misc']['DEREGREASON'])) { $this->lastDeregParseStels12($oltid, $lastDeregIndex, $macIndex); } } } if (!$oltNoFDBQ) { $fdbMACIndex = $this->walkCleared($oltIPPORT, $oltCommunity, $this->snmpTemplates[$oltModelId]['misc']['FDBMACINDEX'], '', '', self::SNMPCACHE); $this->fdbParseStels12($fdbMACIndex); } } /** * Parses & stores in cache OLT ONU interfaces * * @param int $oltid * @param array $ifaceIndex * @param array $macIndex * * @return void */ protected function interfaceParseStels12($oltid, $ifaceIndex, $ponPrefixAdd = '') { $macIndex = $this->olt->readMacIndex(); $oltid = vf($oltid, 3); $ifaceTmp = array(); $result = array(); $i = 0; //iface index preprocessing if ((!empty($ifaceIndex)) and ( !empty($macIndex))) { // creating mapping of internal pon ifaces nums to sequential, like this: //bsPortIndex.1.0.13; Value (Integer): 13 => 1 //bsPortIndex.1.0.14; Value (Integer): 14 => 2 //bsPortIndex.1.0.15; Value (Integer): 15 => 3 //bsPortIndex.1.0.16; Value (Integer): 16 => 4 //bsPortIndex.1.0.17; Value (Integer): 17 => 5 //bsPortIndex.1.0.18; Value (Integer): 18 => 6 //bsPortIndex.1.0.19; Value (Integer): 19 => 7 //bsPortIndex.1.0.20; Value (Integer): 20 => 8 foreach ($ifaceIndex as $io => $eachIface) { $i++; $line = explode('=', $eachIface); if (isset($line[1])) { $ponIfaceNum = trim($line[1]); // pon interface number $ifaceTmp[$ponIfaceNum] = $i; } } // using "special" math to get pon port num + LLID from dev index // formula: dev index DEC to HEX // 16780033 => 1000B01, where // 0B => 11 - pon port num // 01 => 1 - LLID if (!empty($macIndex) and !empty($ifaceTmp)) { foreach ($macIndex as $eachMac => $devId) { $LLID = ''; $hexDevId = dechex($devId); $portNum = hexdec(substr($hexDevId, -4, 2)); $onuNum = hexdec(substr($hexDevId, -2, 2)); if (!empty($ifaceTmp[$portNum])) { $portNum = $ifaceTmp[$portNum]; $LLID = $portNum . ":" . $onuNum; } else { $LLID = __('On ho'); } //storing results $result[$eachMac] = $ponPrefixAdd . $LLID; } } //saving ONUs interfaces $this->olt->writeInterfaces($result); } } /** * Parses & stores in cache ONU last dereg reasons * * @param int $oltid * @param array $deregIndex * @param array $macIndex * * @return void */ protected function lastDeregParseStels12($oltid, $deregIndex, $macIndex) { $oltid = vf($oltid, 3); $deregTmp = array(); $macTmp = array(); $result = array(); //dereg index preprocessing if ((!empty($deregIndex)) and ( !empty($macIndex))) { foreach ($deregIndex as $io => $eachdereg) { $line = explode('=', $eachdereg); //dereg is present if (isset($line[1])) { $lastDeregRaw = trim($line[1]); // last dereg reason $devIndex = trim($line[0]); // device index $deregTmp[$devIndex] = $lastDeregRaw; } } //mac index preprocessing foreach ($macIndex as $io => $eachmac) { $line = explode('=', $eachmac); //mac is present if (isset($line[1])) { $macRaw = trim($line[1]); //mac address $devIndex = trim($line[0]); //device index $macRaw = str_replace(' ', ':', $macRaw); $macRaw = strtolower($macRaw); $macTmp[$devIndex] = $macRaw; } } //storing results if (!empty($macTmp)) { foreach ($macTmp as $devId => $eachMac) { $currentInterface = ''; if (!empty($deregTmp)) { foreach ($deregTmp as $intefaceOffset => $interfaceName) { // dirty hack for firmware > 1.4.0 - some shitty math used $recalcIfaceOffset = $intefaceOffset; if ($recalcIfaceOffset < 100) { $recalcIfaceOffset = (($recalcIfaceOffset - 10) * 256) + 16779776; } if ($devId >= $recalcIfaceOffset) { $currentInterface = $intefaceOffset; } } $result[$eachMac] = (isset($deregTmp[$currentInterface])) ? $deregTmp[$currentInterface] : __('On ho'); } } //saving ONUs dereg reasons $this->olt->writeDeregs($result); } } } /** * Parses & stores in cache OLT ONU interfaces * * @param int $oltid * @param array $intIndex * @param array $macIndex * * @return void */ protected function interfaceParseStels($oltid, $intIndex, $macIndex) { $oltid = vf($oltid, 3); $intTmp = array(); $macTmp = array(); $result = array(); //distance index preprocessing if ((!empty($intIndex)) and ( !empty($macIndex))) { foreach ($intIndex as $io => $eachint) { $line = explode('=', $eachint); //distance is present if (isset($line[1])) { // distance $devIndex = trim($line[0]); // device index $devIndex = explode('.', $devIndex); $portIndex = trim($devIndex[0]); $interfaceRaw = $devIndex[0] . ':' . $devIndex[1]; // $devIndex = ($devIndex[1] * 256) + 1; $intTmp[$portIndex . ':' . $devIndex] = $interfaceRaw; } } //mac index preprocessing foreach ($macIndex as $io => $eachmac) { $line = explode('=', $eachmac); //mac is present if (isset($line[1])) { $macRaw = trim($line[1]); //mac address $devIndex = trim($line[0]); //device index $devIndex = explode('.', $devIndex); $portIndex = trim($devIndex[0]); $devIndex = $devIndex[1]; $macRaw = str_replace(' ', ':', $macRaw); $macRaw = strtolower($macRaw); $macTmp[$portIndex . ':' . $devIndex] = $macRaw; } } //storing results if (!empty($macTmp)) { foreach ($macTmp as $devId => $eachMac) { if (isset($intTmp[$devId])) { $interface = $intTmp[$devId]; $result[$eachMac] = $interface; } } //saving ONUs interfaces $this->olt->writeInterfaces($result); } } } /** * Parses & stores in cache OLT ONU interfaces * * @param int $oltid * @param array $deregIndex * @param array $macIndex * * @return void */ protected function lastDeregParseStels($oltid, $deregIndex, $macIndex) { $oltid = vf($oltid, 3); $deregTmp = array(); $onuTmp = array(); $result = array(); //dereg index preprocessing if ((!empty($deregIndex)) and ( !empty($macIndex))) { foreach ($deregIndex as $io => $eachdereg) { $line = explode('=', $eachdereg); //dereg is present if (isset($line[1])) { $deregRaw = trim(trim($line[1]), '"'); // dereg $devIndex = $line[0]; $devIndex = explode('.', $devIndex); $portIndex = trim($devIndex[0]); $devIndex = trim($devIndex[1]); // $devIndex = (($devIndex * 256) + 1); $deregTmp[$portIndex . ':' . $devIndex] = $deregRaw; } } //mac index preprocessing foreach ($macIndex as $io => $eachmac) { $line = explode('=', $eachmac); //mac is present if (isset($line[1])) { $macRaw = trim($line[1]); //mac address $devIndex = trim($line[0]); $devIndex = explode('.', $devIndex); $portIndex = trim($devIndex[0]); $devIndex = $devIndex[1]; $macRaw = str_replace(' ', ':', $macRaw); $macRaw = strtolower($macRaw); $onuTmp[$portIndex . ':' . $devIndex] = $macRaw; } } //storing results if (!empty($onuTmp)) { foreach ($onuTmp as $devId => $eachMac) { if (isset($deregTmp[$devId])) { $result[$eachMac] = $deregTmp[$devId]; } } //saving ONUs dereg reasons $this->olt->writeDeregs($result); } } } /** * Parses & stores to cache ONUs FDB cache (MACs behind ONU) * * @param $fdbMACIndex * * @return void */ protected function fdbParseStels12($fdbMACIndex) { $onuMACIndex = $this->olt->readMacIndex(); $i = 0; $fdbCahce = array(); if (!empty($onuMACIndex) and !empty($fdbMACIndex)) { // processing $fdbMACIndex array to get a FDB record at once foreach ($fdbMACIndex as $eachIdx => $eachONUMAC) { $i++; $line = explode('=', $eachONUMAC); // MAC is present if (isset($line[1])) { $onuMAC = trim($line[1]); if (ispos($onuMAC, 'STRING:')) continue; $onuMAC = strtolower(str_replace(' ', ':', $onuMAC)); // ONU MAC $tmpIndex = trim($line[0]); // pon port number + device index $fdbVLAN = substr($tmpIndex, strripos($tmpIndex, '.') + 1); // fdb VLAN $fdbMAC = convertMACDec2Hex(substr($tmpIndex, 0, strripos($tmpIndex, '.'))); // fdb MAC; $fdbCahce[$onuMAC][$i] = array('mac' => $fdbMAC, 'vlan' => $fdbVLAN); } } } //saving OLT FDB $this->olt->writeFdb($fdbCahce); } } |