123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497 |
- <?php
- /**
- * OLT Stels FD16XX hardware abstraction layer
- */
- class PONstels16 extends PONProto {
- /**
- * Stels FD16XX 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']);
- $this->onuSerialCaseMode = (isset($this->snmpTemplates[$oltModelId]['onu']['SERIAL_CASE_MODE'])
- ? $this->snmpTemplates[$oltModelId]['onu']['SERIAL_CASE_MODE'] : 0);
- $distIndex = array();
- $ifaceIndex = array();
- $sigIndex = $this->walkCleared($oltIPPORT, $oltCommunity,
- $this->snmpTemplates[$oltModelId]['signal']['SIGINDEX'],
- '',
- '.0.0 ', self::SNMPCACHE);
- //ONU distance polling for stels16 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);
- $macIndexProcessed = $this->macParseStels16($macIndex);
- $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->interfaceParsestels16($oltid, $ifaceIndex, $macIndex, $deviceType);
- $this->interfaceParsestels16($oltid, $ifaceIndex, $ponPrefixAdd);
- }
- }
- if (isset($this->snmpTemplates[$oltModelId]['misc']['DEREGREASON'])) {
- if (!empty($this->snmpTemplates[$oltModelId]['misc']['DEREGREASON'])) {
- $this->lastDeregParsestels16($oltid, $lastDeregIndex, $macIndexProcessed);
- }
- }
- }
- if (!$oltNoFDBQ) {
- $fdbMACIndex = $this->walkCleared($oltIPPORT, $oltCommunity,
- $this->snmpTemplates[$oltModelId]['misc']['FDBMACINDEX'],
- '',
- '', self::SNMPCACHE);
- $this->fdbParsestels16($fdbMACIndex, $macIndexProcessed);
- }
- $uniOperStatusIndex = array();
- if (isset($this->snmpTemplates[$oltModelId]['misc']['UNIOPERSTATUS'])) {
- $uniOperStatusIndex = $this->walkCleared($oltIPPORT, $oltCommunity,
- $this->snmpTemplates[$oltModelId]['misc']['UNIOPERSTATUS'],
- '',
- array($this->snmpTemplates[$oltModelId]['misc']['UNIOPERSTATUSVALUE'], '"'),
- self::SNMPCACHE);
- $this->uniParseStels16($uniOperStatusIndex, $macIndexProcessed);
- }
- }
- /**
- * Processes OLT MAC adresses and returns them in array: LLID=>MAC
- *
- * @param $macIndex
- *
- * @return array
- */
- protected function macParseStels16($macIndex) {
- $ONUsMACs = array();
- if (!empty($macIndex)) {
- //mac index preprocessing
- foreach ($macIndex as $io => $eachmac) {
- $line = explode('=', $eachmac);
- if (empty($line[0]) || empty($line[1])) {
- continue;
- }
- $tmpONUDevIdx = trim($line[0]);
- $tmpONUMAC = trim($line[1]);
- $tmpONUMAC = str_replace(' ', ':', $tmpONUMAC);
- if ($this->onuSerialCaseMode == 1) {
- $tmpONUMAC = strtolower($tmpONUMAC);
- } elseif ($this->onuSerialCaseMode == 2) {
- $tmpONUMAC = strtoupper($tmpONUMAC);
- }
- //mac is present
- if (!empty($tmpONUDevIdx) and ! empty($tmpONUMAC)) {
- $ONUsMACs[$tmpONUDevIdx] = $tmpONUMAC;
- }
- }
- }
- return ($ONUsMACs);
- }
- /**
- * Parses & stores in cache OLT ONU interfaces
- *
- * @param int $oltid
- * @param array $ifaceIndex
- * @param array $macIndex
- *
- * @return void
- */
- protected function interfaceParsestels16($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 lastDeregParsestels16($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($macIndex)) {
- foreach ($macIndex 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 fdbParsestels16($fdbMACIndex, $macIndexProcessed) {
- $onuMACIndex = $macIndexProcessed;
- $i = 0;
- $fdbCahce = array();
- if (!empty($onuMACIndex) and !empty($fdbMACIndex)) {
- // processing $fdbMACIndex array to get a FDB record at once
- foreach ($fdbMACIndex as $eachIdx => $eachFDBLine) {
- $i++;
- if (empty($eachFDBLine) or !ispos($eachFDBLine, '=')) { continue; }
- $line = explode('=', $eachFDBLine);
- $onuPlasticIdx = trim($line[1]); // ONU Plastic index
- // Plastic index is present
- if (isset($onuMACIndex[$onuPlasticIdx])) {
- $fdbMACVLAN = trim($line[0]); // getting DEC MAC + VLAN portion
- $fdbVLAN = substr($fdbMACVLAN, strripos($fdbMACVLAN, '.') + 1); // fdb VLAN
- $fdbMAC = convertMACDec2Hex(substr($fdbMACVLAN, 0, strripos($fdbMACVLAN, '.'))); // fdb MAC;
- $fdbCahce[$onuMACIndex[$onuPlasticIdx]][$i] = array('mac' => $fdbMAC, 'vlan' => $fdbVLAN);
- }
- }
- }
- //saving OLT FDB
- $this->olt->writeFdb($fdbCahce);
- }
- /**
- * Performs UNI port oper status preprocessing for index array and stores it into cache
- *
- * @param $uniOperStatusIndex
- * @param $macIndexProcessed
- *
- * @return void
- */
- protected function uniParseStels16($uniOperStatusIndex, $macIndexProcessed) {
- $uniStats = array();
- $result = array();
- if (!empty($macIndexProcessed) and !empty($uniOperStatusIndex)) {
- //UniOperStats index preprocessing
- foreach ($uniOperStatusIndex as $io => $eachRow) {
- $line = explode('=', $eachRow);
- file_put_contents('exports/pondata/unioperstats/unistats', print_r($line, true));
- if (empty($line[0]) || empty($line[1])) {
- continue;
- }
- // dev index + .0. + ether port index
- $tmpDevIdxEtherIdx = trim($line[0]);
- $tmpDevIdxEtherIdxLen = strlen($tmpDevIdxEtherIdx);
- // ehter port index
- $tmpEtherIdx = strrchr($tmpDevIdxEtherIdx, '.');
- $tmpEtherIdxLen = strlen($tmpEtherIdx);
- $tmpEtherIdx = 'eth' . trim($tmpEtherIdx, '.');
- file_put_contents('exports/pondata/unioperstats/unistats', $tmpEtherIdx . "\n", 8);
- //dev index = $tmpDevIdxEtherIdx - '.0.' - $tmpEtherIdx
- $tmpONUDevIdx = substr($tmpDevIdxEtherIdx, 0, $tmpDevIdxEtherIdxLen - $tmpEtherIdxLen - 2);
- $tmpUniStatus = trim(trim($line[1]), '"');
- file_put_contents('exports/pondata/unioperstats/unistats', $tmpONUDevIdx . "\n", 8);
- file_put_contents('exports/pondata/unioperstats/unistats', $tmpUniStatus . "\n", 8);
- $uniStats[$tmpONUDevIdx] = array($tmpEtherIdx => $tmpUniStatus);
- }
- file_put_contents('exports/pondata/unioperstats/unistats', print_r($uniStats, true), 8);
- file_put_contents('exports/pondata/unioperstats/unistats', print_r($macIndexProcessed, true), 8);
- //storing results
- foreach ($macIndexProcessed as $devId => $eachMac) {
- if (isset($uniStats[$devId])) {
- $result[$eachMac] = $uniStats[$devId];
- }
- }
- //saving UniOperStats
- $this->olt->writeUniOperStats($result);
- }
- }
- }
|