Source of file api.ponstels11.php
Size: 17,452 Bytes - Last Modified: 2024-04-27T15:26:05+03:00
/tmp/current_snapshot/api/libs/api.ponstels11.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378 | <?php /** * OLT Stels FD11XX hardware abstraction layer */ class PONStels11 extends PONStels12 { /** * Receives, preprocess and stores all required data from Stels FD11XX or V-Solution 1600D * * @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']; $ponPrefixAdd = (empty($this->snmpTemplates[$oltModelId]['misc']['INTERFACEADDPONPREFIX']) ? '' : $this->snmpTemplates[$oltModelId]['misc']['INTERFACEADDPONPREFIX']); $sigIndexOID = $this->snmpTemplates[$oltModelId]['signal']['SIGINDEX']; $sigIndex = $this->snmp->walk($oltIp . ':' . self::SNMPPORT, $oltCommunity, $sigIndexOID, self::SNMPCACHE); $sigIndex = str_replace($sigIndexOID . '.', '', $sigIndex); $sigIndex = str_replace($this->snmpTemplates[$oltModelId]['signal']['SIGVALUE'], '', $sigIndex); $sigIndex = explodeRows($sigIndex); $macIndexOID = $this->snmpTemplates[$oltModelId]['signal']['MACINDEX']; $macIndex = $this->snmp->walk($oltIp . ':' . self::SNMPPORT, $oltCommunity, $macIndexOID, self::SNMPCACHE); $macIndex = str_replace($macIndexOID . '.', '', $macIndex); $macIndex = str_replace($this->snmpTemplates[$oltModelId]['signal']['MACVALUE'], '', $macIndex); $macIndex = explodeRows($macIndex); $this->signalParseStels($oltid, $sigIndex, $macIndex, $this->snmpTemplates[$oltModelId]['signal'], $ponPrefixAdd); //ONU distance polling for stels devices if (isset($this->snmpTemplates[$oltModelId]['misc'])) { if (isset($this->snmpTemplates[$oltModelId]['misc']['DISTINDEX'])) { if (!empty($this->snmpTemplates[$oltModelId]['misc']['DISTINDEX'])) { $distIndexOid = $this->snmpTemplates[$oltModelId]['misc']['DISTINDEX']; $distIndex = $this->snmp->walk($oltIp . ':' . self::SNMPPORT, $oltCommunity, $distIndexOid, self::SNMPCACHE); $distIndex = str_replace($distIndexOid . '.', '', $distIndex); $distIndex = str_replace($this->snmpTemplates[$oltModelId]['misc']['DISTVALUE'], '', $distIndex); $distIndex = explodeRows($distIndex); $lastDeregIndexOID = $this->snmpTemplates[$oltModelId]['misc']['DEREGREASON']; $lastDeregIndex = $this->snmp->walk($oltIp . ':' . self::SNMPPORT, $oltCommunity, $lastDeregIndexOID, self::SNMPCACHE); $lastDeregIndex = str_replace($lastDeregIndexOID . '.', '', $lastDeregIndex); $lastDeregIndex = str_replace($this->snmpTemplates[$oltModelId]['misc']['DEREGVALUE'], '', $lastDeregIndex); $lastDeregIndex = explodeRows($lastDeregIndex); $this->distanceParseStels($oltid, $distIndex, $macIndex); $this->lastDeregParseStels($oltid, $lastDeregIndex, $macIndex); if (!$oltNoFDBQ) { $fdbIndexOID = $this->snmpTemplates[$oltModelId]['misc']['FDBINDEX']; $fdbIndex = $this->snmp->walk($oltIp . ':' . self::SNMPPORT, $oltCommunity, $fdbIndexOID, self::SNMPCACHE); $fdbIndex = str_replace($fdbIndexOID . '.', '', $fdbIndex); $fdbIndex = str_replace($this->snmpTemplates[$oltModelId]['misc']['FDBVALUE'], '', $fdbIndex); $fdbIndex = explodeRows($fdbIndex); $fdbMACIndexOID = $this->snmpTemplates[$oltModelId]['misc']['FDBMACINDEX']; $fdbMACIndex = $this->snmp->walk($oltIp . ':' . self::SNMPPORT, $oltCommunity, $fdbMACIndexOID, self::SNMPCACHE); $fdbMACIndex = str_replace($fdbMACIndexOID . '.', '', $fdbMACIndex); $fdbMACIndex = str_replace($this->snmpTemplates[$oltModelId]['misc']['FDBMACVALUE'], '', $fdbMACIndex); $fdbMACIndex = explodeRows($fdbMACIndex); $fdbVLANIndexOID = $this->snmpTemplates[$oltModelId]['misc']['FDBVLANINDEX']; $fdbVLANIndex = $this->snmp->walk($oltIp . ':' . self::SNMPPORT, $oltCommunity, $fdbVLANIndexOID, self::SNMPCACHE); $fdbVLANIndex = str_replace($fdbVLANIndexOID . '.', '', $fdbVLANIndex); $fdbVLANIndex = str_replace($this->snmpTemplates[$oltModelId]['misc']['FDBVLANVALUE'], '', $fdbVLANIndex); $fdbVLANIndex = explodeRows($fdbVLANIndex); $this->fdbParseStels($oltid, $macIndex, $fdbIndex, $fdbMACIndex, $fdbVLANIndex); } } } } //getting others system data from OLT if (isset($this->snmpTemplates[$oltModelId]['system'])) { //OLT uptime if (isset($this->snmpTemplates[$oltModelId]['system']['UPTIME'])) { $uptimeIndexOid = $this->snmpTemplates[$oltModelId]['system']['UPTIME']; $oltSystemUptimeRaw = $this->snmp->walk($oltIp . ':' . self::SNMPPORT, $oltCommunity, $uptimeIndexOid, self::SNMPCACHE); $this->uptimeParse($oltid, $oltSystemUptimeRaw); } //OLT temperature if (isset($this->snmpTemplates[$oltModelId]['system']['TEMPERATURE'])) { $temperatureIndexOid = $this->snmpTemplates[$oltModelId]['system']['TEMPERATURE']; $oltTemperatureRaw = $this->snmp->walk($oltIp . ':' . self::SNMPPORT, $oltCommunity, $temperatureIndexOid, self::SNMPCACHE); $this->temperatureParse($oltid, $oltTemperatureRaw); } } } /** * Performs signal preprocessing for sig/mac index arrays and stores it into cache * * @param int $oltid * @param array $sigIndex * @param array $macIndex * @param array $snmpTemplate * * @return void */ public function signalParseStels($oltid, $sigIndex, $macIndex, $snmpTemplate, $ponPrefixAdd = '') { $oltid = vf($oltid, 3); $sigTmp = array(); $macTmp = array(); $macDevIdx = array(); $ifacesIdx = array(); $result = array(); $curDate = curdatetime(); $plasticIndexSig = 0; $plasticIndexMac = 0; //signal index preprocessing if ((!empty($sigIndex)) and ( !empty($macIndex))) { foreach ($sigIndex as $io => $eachsig) { $line = explode('=', $eachsig); //signal is present if (isset($line[1])) { $signalRaw = trim($line[1]); // signal level $signalOnuPort = str_replace($snmpTemplate['SIGINDEX'], '', $line[0]); $signalOnuPort = explode('.', $signalOnuPort); $plasticIndexSig = trim($signalOnuPort[1]); // $plasticIndexSig = ($plasticIndexSig * 256) + 1; // realy shitty index if ($signalRaw == $snmpTemplate['DOWNVALUE'] or empty($signalRaw)) { $signalRaw = 'Offline'; } else { if ($snmpTemplate['OFFSETMODE'] == 'logm') { if ($snmpTemplate['OFFSET']) { $signalRaw = round(10 * log10($signalRaw) - $snmpTemplate['OFFSET'], 2); } } } $sigTmp[$signalOnuPort[0] . ':' . $plasticIndexSig] = $signalRaw; } } //mac index preprocessing foreach ($macIndex as $io => $eachmac) { $line = explode('=', $eachmac); //mac is present if (isset($line[1])) { $macRaw = trim($line[1]); //mac address $macOnuPort = str_replace($snmpTemplate['MACINDEX'], '', $line[0]); $macOnuPort = explode('.', $macOnuPort); $plasticIndexMac = trim($macOnuPort[1]); $macRaw = str_replace(' ', ':', $macRaw); $macRaw = strtolower($macRaw); $macTmp[$macOnuPort[0] . ':' . $plasticIndexMac] = $macRaw; $macDevIdx[$macRaw] = $macOnuPort[0] . ':' . $plasticIndexMac; $ifacesIdx[$macRaw] = $ponPrefixAdd . $macOnuPort[0] . ':' . $plasticIndexMac; // $macDevIdx[$macRaw] = $macOnuPort[0] . '.' . (($plasticIndexMac - 1) / 256); } } //storing results if (!empty($macTmp)) { foreach ($macTmp as $devId => $eachMac) { if (isset($sigTmp[$devId])) { $signal = $sigTmp[$devId]; $result[$eachMac] = $signal; //signal history filling if ($signal == 'Offline') { $signal = $this->onuOfflineSignalLevel; //over 9000 offline signal level :P } //saving each ONU signal history $this->olt->writeSignalHistory($eachMac, $signal); } } //saving ONUs signals $this->olt->writeSignals($result); //saving ONUs cache $this->olt->writeOnuCache($macTmp); //saving ONUs interfaces $this->olt->writeInterfaces($ifacesIdx); //saving ONUs MAC index $this->olt->writeMacIndex($macDevIdx); } } } /** * Parses & stores in cache OLT ONU distances * * @param int $oltid * @param array $distIndex * @param array $macIndex * * @return void */ protected function distanceParseStels($oltid, $distIndex, $macIndex) { $oltid = vf($oltid, 3); $distTmp = array(); $onuTmp = array(); $result = array(); $curDate = curdatetime(); //distance index preprocessing if ((!empty($distIndex)) and ( !empty($macIndex))) { foreach ($distIndex as $io => $eachdist) { $line = explode('=', $eachdist); //distance is present if (isset($line[1])) { $distanceRaw = trim($line[1]); // distance $devIndex = $line[0]; $devIndex = explode('.', $devIndex); $portIndex = trim($devIndex[0]); $devIndex = trim($devIndex[1]); // $devIndex = (($devIndex * 256) + 1); $distTmp[$portIndex . ':' . $devIndex] = $distanceRaw; } } //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($distTmp[$devId])) { $distance = $distTmp[$devId]; $result[$eachMac] = $distance; } } //saving distances $this->olt->writeDistances($result); } } } /** * Parses & stores to cache ONUs FDB cache (MACs behind ONU) * * @param $oltID * @param $onuMACIndex * @param $fdbIndex * @param $fdbMACIndex * @param $fdbVLANIndex */ protected function fdbParseStels($oltID, $onuMACIndex, $fdbIndex, $fdbMACIndex, $fdbVLANIndex) { $macLLIDIndexes = array(); $fdbLLIDIndexes = array(); $fdbIdxMAC = array(); $fdbIdxVLAN = array(); $fdbCahce = array(); // processing $onuMACIndex array to get pon port number + ONU LLID => ONU MAC mapping if (!empty($onuMACIndex) and ! empty($fdbIndex)) { foreach ($onuMACIndex as $eachIdx => $eachONUMAC) { $line = explode('=', $eachONUMAC); // MAC is present if (isset($line[1])) { $onuMAC = trim($line[1]); $tmpIndex = trim($line[0]); // pon port number + device index $tmpIndex = explode('.', $tmpIndex); $portIndex = trim($tmpIndex[0]); // pon port number $devIndexRaw = $tmpIndex[1]; // seems next lines no needed no more // $devIndexLLID = ($devIndexRaw - 1) / 256; // ONU LLID // $macLLIDIndexes[$portIndex . ':' . $devIndexLLID] = $onuMAC; // pon port number + ONU LLID => ONU MAC $macLLIDIndexes[$portIndex . ':' . $devIndexRaw] = $onuMAC; // pon port number + ONU LLID => ONU MAC } } // processing FDBIndex array to get FDB index number => pon port number + ONU LLID mapping foreach ($fdbIndex as $each => $eachIdx) { $line = explode('=', $eachIdx); // ONU LLID is present if (isset($line[1])) { $devLLID = trim($line[1]); // ONU LLID $tmpIndex = trim($line[0]); // pon port number + FDB index $tmpIndex = explode('.', $tmpIndex); $portIndex = trim($tmpIndex[0]); // pon port number $fdbIdxRaw = $tmpIndex[1]; // FDB index number $fdbLLIDIndexes[$fdbIdxRaw] = $portIndex . ':' . $devLLID; // FDB index number => pon port number + ONU LLID } } // processing $fdbMACIndex array to get FDB index number => FDB MAC mapping foreach ($fdbMACIndex as $each => $eachIdx) { $line = explode('=', $eachIdx); // FDB MAC is present if (isset($line[1])) { $fdbMAC = trim($line[1]); // FDB MAC $tmpIndex = trim($line[0]); // pon port number + FDB index $tmpIndex = explode('.', $tmpIndex); $fdbIdxRaw = $tmpIndex[1]; // FDB index number $fdbIdxMAC[$fdbIdxRaw] = $fdbMAC; // FDB index number => FDB MAC } } // processing $fdbVLANIndex array to get FDB index number => FDB VLAN mapping foreach ($fdbVLANIndex as $each => $eachIdx) { $line = explode('=', $eachIdx); // FDB VLAN is present if (isset($line[1])) { $fdbVLAN = trim($line[1]); // FDB VLAN $tmpIndex = trim($line[0]); // pon port number + FDB index $tmpIndex = explode('.', $tmpIndex); $fdbIdxRaw = $tmpIndex[1]; // FDB index number $fdbIdxVLAN[$fdbIdxRaw] = $fdbVLAN; // FDB index number => FDB VLAN } } if (!empty($macLLIDIndexes) and ! empty($fdbLLIDIndexes)) { foreach ($macLLIDIndexes as $eachLLID => $eachONUMAC) { $onuFDBIdxs = array_keys($fdbLLIDIndexes, $eachLLID); if (!empty($onuFDBIdxs)) { $tmpFDBArr = array(); $tmpONUMAC = strtolower(AddMacSeparator(RemoveMacAddressSeparator($eachONUMAC, array(':', '-', '.', ' ')))); foreach ($onuFDBIdxs as $io => $eachIdx) { $tmpFDBMAC = empty($fdbIdxMAC[$eachIdx]) ? '' : $fdbIdxMAC[$eachIdx]; if (empty($tmpFDBMAC) or $tmpFDBMAC == $eachONUMAC) { continue; } else { $tmpFDBMAC = strtolower(AddMacSeparator(RemoveMacAddressSeparator($tmpFDBMAC, array(':', '-', '.', ' ')))); $tmpFDBVLAN = empty($fdbIdxVLAN[$eachIdx]) ? '' : $fdbIdxVLAN[$eachIdx]; // not applicable with PON HAL now. // i dont know nahooya this was here //$tmpONUID = $this->getONUIDByMAC($tmpONUMAC); //$tmpONUID = (empty($tmpONUID)) ? $eachIdx : $tmpONUID; $tmpONUID=$eachIdx; $tmpFDBArr[$tmpONUID] = array('mac' => $tmpFDBMAC, 'vlan' => $tmpFDBVLAN); } } $fdbCahce[$tmpONUMAC] = $tmpFDBArr; } } } } //saving OLT FDB $this->olt->writeFdb($fdbCahce); } } |