Source of file api.vlanchange.php
Size: 31,278 Bytes - Last Modified: 2024-04-27T15:26:05+03:00
/tmp/current_snapshot/api/libs/api.vlanchange.php
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007 | <?php /** * Apply vlan on device */ class VlanChange { CONST MODULE_ONU_APPLY_AJAXONULIST = '?module=vlanmanagement_onu_apply&ajaxOnuList=true'; CONST MODULE_ONU_APPLY_VLAN = '?module=vlanmanagement_onu_apply&apply_vlan=true'; /** * OLT ID * * @var int */ protected $oltId = -1; /** * User's login * * @var string */ protected $username = ''; /** * OLT IP * * @var string */ protected $oltIp = ''; /** * OLT read snmp community * * @var string */ protected $oltCommunityRead = ''; /** * OLT write snmp community * * @var string */ protected $oltCommunityWrite = ''; /** * * * @var string */ protected $oltInterface = ''; /** * OLT's SNMP template file name * * @var string */ protected $snmpTemplateFile = ''; /** * OLT's SNMP template content * * @var array */ protected $snmpTemplate = array(); /** * Guest vlans list * * @var array */ protected $guestVlans = array(); /** * Contains all guest ONUs for certain OLT * * @var array */ protected $guestOnus = array(); /** * ONU MAC * * @var string */ protected $onuMac = ''; /** * ONU Serial * * @var string */ protected $onuSerial = ''; /** * Contains all realnames * * @var array */ protected $allRealnames = array(); /** * Vlan mode * * @var string */ protected $mode = 'none'; /** * Contains all possible cvlans for olt * * @var array */ protected $oltCvlans = array(); /** * Contains all used cvlans * * @var array */ protected $usedCvlans = array(); /** * Contains all universal qinq assignments * * @var array */ protected $universalAssign = array(); /** * CVLAN placeholder * * @var int */ protected $cvlan = -1; /** * SVLAN placeholder * * @var int */ protected $svlan = -1; /** * SVLAN id placeholder * * @var int */ protected $svlanid = -1; /** * Contains all switchmodels * * @var array */ protected $allModelsData = array(); /** * Containts all pononu data with serial key * * @var array */ protected $allSerial = array(); /** * Containts all pononu data with mac key * * @var array */ protected $allMac = array(); /** * Placeholder for snmp helper object * * @var object */ protected $snmp = ''; /** * Placeholder for nyan_orm instance for switches table * * @var object */ protected $switchesDB = ''; /** * Placeholder for nyan_orm instance for switchmodels table * * @var object */ protected $switchModelsDB = ''; /** * * * @var object */ protected $oltqinqDB = ''; /** * * * @var object */ protected $cvlanDB = ''; /** * * * @var object */ protected $svlanDB = ''; /** * Placeholder for nyan_orm object for pononu table * * @var object */ protected $ponDB = ''; /** * * * @var object */ protected $realNameDB = ''; /** * General ubiiling config content * * @var array */ protected $altCfg = ''; public function __construct($oltid = -1, $username = '') { $this->oltId = $oltid; $this->snmp = new SNMPHelper(); $this->loadAlter(); $this->switchesDB = new NyanORM('switches'); $this->switchModelsDB = new NyanORM('switchmodels'); $this->oltqinqDB = new NyanORM('olt_qinq'); $this->cvlanDB = new NyanORM('qinq_bindings'); $this->svlanDB = new NyanORM('qinq_svlan'); $this->ponDB = new NyanORM('pononu'); $this->realNameDB = new NyanORM('realname'); $this->usernameGuess($username); if ($this->oltId) { $this->allModelsData = $this->switchModelsDB->getAll('id'); $this->setSnmpTemplateFile(); $this->loadSnmpTemplate(); $this->loadAllOnu(); $this->loadAllRealnames(); $this->setVlanMode(); } } /** * Dirty hacks to set up environment with $_GET param or by onu * * @param string $username * * @return void */ protected function usernameGuess($username) { if (!empty($username)) { $this->username = $username; } else { if (ubRouting::checkGet('username')) { $this->username = ubRouting::get('username', 'mres'); } else { if (ubRouting::checkGet('onuid')) { $this->getUsernameByOnu(); } } } } /** * Load all ONU * * @return void */ protected function loadAllOnu() { $this->allMac = $this->ponDB->getAll('mac'); $this->allSerial = $this->ponDB->getAll('serial'); } /** * Check if onu already exist and linked to some user * * @param string $onuid * @param bool $check * @return string */ protected function getUsernameByOnu($onuid = '', $check = false) { if (empty($onuid)) { $onuid = ubRouting::get('onuid', 'mres'); } if (!empty($this->allMac)) { if (isset($this->allMac[$onuid])) { if (!empty($this->allMac[$onuid]['login'])) { if (!$check) { $this->username = $this->allMac[$onuid]['login']; } else { return ($this->allMac[$onuid]['login']); } } } } else { if (!empty($data)) { if (isset($this->allSerial[$onuid])) { if (!empty($this->allMac[$onuid]['login'])) { if (!$check) { $this->username = $this->allSerial[$onuid]['login']; } else { return ($this->allSerial[$onuid]['login']); } } } } } return(''); } /** * Poll selected OLT is there is ONU with guest vlan * * @return void */ public function checkOltGuestVlan() { $this->setGuestVlans(); $this->checkUserOnu(); $this->pollOlt(); } /** * Loads system alter.ini config for further usage * * @global object $ubillingConfig * * @return void */ protected function loadAlter() { global $ubillingConfig; $this->altCfg = $ubillingConfig->getAlter(); } /** * Loads all realnames * * @return void */ protected function loadAllRealnames() { $this->allRealnames = $this->realNameDB->getAll('login'); } /** * Returns html string to load JS file. * * @return string */ protected function loadVlanmanagementJs() { $result = '<script src = "./modules/jsc/vlanmanagement.js" type = "text/javascript"></script>'; return ($result); } /** * Find and set snmp template file name * * @return void */ protected function setSnmpTemplateFile() { $this->switchesDB->where('id', '=', $this->oltId); $switchData = $this->switchesDB->getAll('id'); $modelId = $switchData[$this->oltId]['modelid']; $this->oltIp = $switchData[$this->oltId]['ip']; $this->oltCommunityRead = $switchData[$this->oltId]['snmp']; if (empty($switchData[$this->oltId]['snmpwrite'])) { $this->oltCommunityWrite = $switchData[$this->oltId]['snmp']; } else { $this->oltCommunityWrite = $switchData[$this->oltId]['snmpwrite']; } $this->switchModelsDB->where('id', '=', $modelId); $modelData = $this->switchModelsDB->getAll('id'); $this->snmpTemplateFile = $modelData[$modelId]['snmptemplate']; if (empty($switchData[$this->oltId]['snmp'])) { throw new Exception('EMPTY OLT SNMP COMMUNITY'); } } /** * Find and set available guest vlans from config * * @return void */ protected function setGuestVlans() { if (isset($this->altCfg['VLAN_MANAGEMENT_ONU_GUEST_VLANS'])) { if (!empty($this->altCfg['VLAN_MANAGEMENT_ONU_GUEST_VLANS'])) { if (strpos($this->altCfg['VLAN_MANAGEMENT_ONU_GUEST_VLANS'], ',') !== false) { $vlans = explode(",", trim($this->altCfg['VLAN_MANAGEMENT_ONU_GUEST_VLANS'])); foreach ($vlans as $each) { array_push($this->guestVlans, trim($each)); } } else { array_push($this->guestVlans, trim($this->altCfg['VLAN_MANAGEMENT_ONU_GUEST_VLANS'])); } } } } /** * Check if user has assigned ONU with proper OLT link * * @return void * * @throws Exception */ protected function checkUserOnu() { $this->ponDB->where('login', '=', $this->username); $this->ponDB->where('oltid', '=', $this->oltId); $onuData = $this->ponDB->getAll('login'); if (!empty($onuData)) { $this->onuMac = $onuData[$this->username]['mac']; $this->onuSerial = $onuData[$this->username]['serial']; } $this->ponDB->where('login', '=', $this->username); $onuDataAlt = $this->ponDB->getAll('login'); if (!empty($onuDataAlt)) { //throw new Exception('OLT MISMATCH'); } else { //throw new Exception('NO ONU WAS FOUND'); } } /** * Load content of snmp template file if found * * @return void * * @throws Exception */ protected function loadSnmpTemplate() { $templateFile = 'config/snmptemplates/' . $this->snmpTemplateFile; $privateTemplateFile = DATA_PATH . 'documents/mysnmptemplates/' . $this->snmpTemplateFile; if (file_exists($templateFile)) { $this->snmpTemplate = rcms_parse_ini_file($templateFile, true); if (file_exists($privateTemplateFile)) { $this->snmpTemplate = rcms_parse_ini_file($privateTemplateFile, true); } } if (empty($this->snmpTemplate)) { throw new Exception('NO SNMP TEMPLATE FILE WAS FOUND'); } } /** * load all data from table switches related to olt * * @return array */ protected function loadOltDetails() { $this->switchesDB->where('id', '=', $this->oltId); $data = $this->switchesDB->getAll('id'); return ($data); } /** * Load all available assigns * * @return void */ protected function loadCvlans() { $this->loadUniversalAssign(); $this->loadOltCvlans(); $this->loadUsedCvlans(); } /** * Load olt pool * * @return void */ protected function loadOltCvlans() { $this->oltqinqDB->where('swid', '=', $this->oltId); $this->oltqinqDB->where('port', '=', $this->oltInterface); $this->oltCvlans = $this->oltqinqDB->getAll('swid'); } /** * Load all assignments from universal qinq by svlan * * @return void */ protected function loadUsedCvlans() { if (!empty($this->oltCvlans)) { if (isset($this->oltCvlans[$this->oltId])) { $this->cvlanDB->where('svlan_id', '=', $this->oltCvlans[$this->oltId]['svlan_id']); $this->usedCvlans = $this->cvlanDB->getAll('cvlan'); } } } /** * load assignment from universal qinq if exist for user * * @return void */ protected function loadUniversalAssign() { $this->universalAssign = $this->cvlanDB->getAll('login'); } protected function clearInterface($interface = '') { if (empty($interface)) { $interface = ubRouting::get('interface_olt', 'mres'); } if (strpos($interface, '/') !== false) { $interfaceExplode = explode("/", $interface); $this->oltInterface = $interfaceExplode[1]; } else { $this->oltInterface = $interface; } } /** * Compare available and used arrays to get free one * * @return void */ protected function setCvlanFromPool() { $freeCvlans = array(); $usedRange = array(); if (!empty($this->oltCvlans)) { if (isset($this->oltCvlans[$this->oltId])) { $oltRange = range($this->oltCvlans[$this->oltId]['cvlan'], $this->oltCvlans[$this->oltId]['cvlan'] + 63); foreach ($this->usedCvlans as $eachCvlan => $io) { $usedRange[$eachCvlan] = $eachCvlan; } $freeCvlans = array_diff($oltRange, $usedRange); } } reset($freeCvlans); $firstCvlan = current($freeCvlans); $this->cvlan = $firstCvlan; } /** * Find svlan number by id * * @return void */ protected function setSvlanFromPool() { $this->svlanDB->where('id', '=', $this->oltCvlans[$this->oltId]['svlan_id']); $data = $this->svlanDB->getAll('id'); $this->svlan = $data[$this->oltCvlans[$this->oltId]['svlan_id']]['svlan']; $this->svlanid = $this->oltCvlans[$this->oltId]['svlan_id']; } /** * Set svlan number from universal assignment * * @return void */ protected function setSvlanFromUniversal() { $this->svlanDB->where('id', '=', $this->universalAssign[$this->username]['svlan_id']); $data = $this->svlanDB->getAll('id'); $this->svlan = $data[$this->universalAssign[$this->username]['svlan_id']]['svlan']; $this->svlanid = $this->universalAssign[$this->username]['svlan_id']; } /** * Get cvlan from universal qinq or from pool * * @return void */ protected function setFreeCvlan() { if (empty($this->universalAssign)) { $this->setCvlanFromPool(); } else { if (!isset($this->universalAssign[$this->username])) { $this->setCvlanFromPool(); } else { $this->cvlan = $this->universalAssign[$this->username]['cvlan']; } } } /** * Set svlan from universal qinq or from pool * * @return void */ protected function setSvlan() { if ($this->cvlan) { if (!empty($this->universalAssign)) { $this->setSvlanFromPool(); } else { if (!isset($this->universalAssign[$this->username])) { $this->setSvlanFromPool(); } else { $this->setSvlanFromUniversal(); } } } } /** * Set svlan and cvlan * * @return void */ protected function getVlanPair() { $this->loadCvlans(); $this->setFreeCvlan(); $this->setSvlan(); } /** * Set vlan mode if was found in snmp template * * @return void * * @throws Exception */ protected function setVlanMode() { if (isset($this->snmpTemplate['vlan'])) { if (isset($this->snmpTemplate['vlan']['VLANMODE'])) { switch ($this->snmpTemplate['vlan']['VLANMODE']) { case 'BDCOM_B': $this->mode = 'bdcom_b'; break; default: $this->mode = 'none'; break; } } else { throw new Exception('no vlanmode set in snmp template file'); } } else { throw new Exception('no vlan section in snmp template file'); } } /** * List all unknown onu from olt * * @return void */ protected function pollOlt() { switch ($this->mode) { case 'bdcom_b': $this->pollOltBdcom(); break; default: exit(); } } /** * Get ONUs with guest vlan configured * * @return void */ protected function pollOltBdcom() { $allOnuIndex = array(); $interfaceIndex = array(); $interfaceOltIndex = array(); //$allOnuPvid = array(); $allOnuIndexRaw = $this->snmp->walk($this->oltIp, $this->oltCommunityRead, $this->snmpTemplate['vlan']['IFINDEX'], false); $allOnuIndexRaw = trim($allOnuIndexRaw); if (!empty($allOnuIndexRaw)) { $allOnuIndexRows = explodeRows($allOnuIndexRaw); foreach ($allOnuIndexRows as $eachRow) { $eachRow = trim($eachRow); $eachRowExplode = explode("=", $eachRow); $oid = $eachRowExplode[0]; $oid = trim(str_replace($this->snmpTemplate['vlan']['IFINDEX'] . '.', '', $oid)); $mac = convertMACDec2Hex($oid); $value = $eachRowExplode[1]; $value = trim(str_replace("INTEGER:", '', $value)); $allOnuIndex[$value] = $mac; } unset($value); unset($oid); unset($eachRow); unset($eachRowExplode); $interfaceIndexRaw = $this->snmp->walk($this->oltIp, $this->oltCommunityRead, $this->snmpTemplate['misc']['INTERFACEINDEX'], false); $interfaceIndexRaw = trim($interfaceIndexRaw); if (!empty($interfaceIndexRaw)) { $interfaceIndexRows = explodeRows($interfaceIndexRaw); foreach ($interfaceIndexRows as $eachRow) { $eachRow = trim($eachRow); $eachRowExplode = explode("=", $eachRow); $oidRaw = $eachRowExplode[0]; $oid = trim(str_replace($this->snmpTemplate['misc']['INTERFACEINDEX'] . ".", '', $oidRaw)); $valueRaw = $eachRowExplode[1]; $value = trim(str_replace("STRING:", '', $valueRaw)); $interfaceIndex[$oid] = $value; $valueExplode = explode(":", $value); $interfaceOltIndex[$oid] = $valueExplode[0]; } } unset($value); unset($oid); unset($eachRow); unset($eachRowExplode); $allOnuPvidRaw = $this->snmp->walk($this->oltIp, $this->oltCommunityRead, $this->snmpTemplate['vlan']['PVID'], false); $allOnuPvidRaw = trim($allOnuPvidRaw); if (!empty($allOnuPvidRaw)) { $allOnuPvidRows = explodeRows($allOnuPvidRaw); foreach ($allOnuPvidRows as $eachRow) { $eachRow = trim($eachRow); $eachRowExplode = explode("=", $eachRow); $oidRaw = $eachRowExplode[0]; $oidRaw = trim(str_replace($this->snmpTemplate['vlan']['PVID'] . ".", '', $oidRaw)); $oidRawExplode = explode(".", $oidRaw); $onuId = trim($oidRawExplode[0]); $portNumber = trim($oidRawExplode[1]); $value = $eachRowExplode[1]; $value = trim(str_replace("INTEGER:", '', $value)); foreach ($this->guestVlans as $eachGuest) { if ($eachGuest == $value) { if (isset($allOnuIndex[$onuId])) { //$allOnuPvid[$onuId][$portNumber] = $value; $this->guestOnus[$allOnuIndex[$onuId]] = array('id' => $allOnuIndex[$onuId], 'port' => $portNumber, 'vlan' => $value, 'interface' => $interfaceIndex[$onuId], 'interface_olt' => $interfaceOltIndex[$onuId], 'type' => 'epon', 'snmp_index' => $onuId); } } } } } } } /** * Ajax loader for onu list * * @return string */ public function onuListShow() { $result = ''; $add = '&oltid=' . ubRouting::get('oltid', 'mres'); if (ubRouting::checkGet('username')) { $add .= "&username=" . $this->username; } $columns = array('Interface', 'MAC/Serial', 'Port', 'VLAN', 'Real Name', 'Actions'); $opts = '"order": [[ 0, "asc" ]]'; $result .= wf_JqDtLoader($columns, self::MODULE_ONU_APPLY_AJAXONULIST . $add, false, __('Request'), 100, $opts); $result .= $this->loadVlanmanagementJs(); return($result); } /** * Generate ajax list of OLTs. * * @return string */ public function onuListAjaxRender() { $json = new wf_JqDtHelper(); $this->checkOltGuestVlan(); $currentUsername = $this->username; if (!empty($this->guestOnus)) { foreach ($this->guestOnus as $each) { if (ubRouting::checkGet('username')) { $this->$currentUsername = ubRouting::get('username', 'mres'); $this->username = ubRouting::get('username', 'mres'); } $altUsername = $this->getUsernameByOnu($each['id'], true); if (!$currentUsername) { $this->getUsernameByOnu($each['id']); $currentUsername = $altUsername; } if ($currentUsername) { $controls = wf_modalAuto(wf_img_sized('skins/add_icon.png', '', '16', '16'), __('Assign VLAN'), $this->changeVlanForm($each['id'], $each['port'], $each['vlan'], $each['type'], $each['interface'], $each['interface_olt'], $each['snmp_index'])); } else { $controls = wf_modalAuto(wf_img_sized('skins/add_icon.png', '', '16', '16'), __('Assign VLAN'), $this->userNameForm($each['id'], $each['port'], $each['vlan'], $each['type'], $each['interface'], $each['interface_olt'], $each['snmp_index'])); } $data[] = trim($each['interface']); $data[] = trim($each['id']); $data[] = trim($each['port']); $data[] = trim($each['vlan']); $data[] = wf_link('?module=userprofile&username=', trim(@$this->allRealnames[$altUsername]['realname'])); $data[] = $controls; $json->addRow($data); $currentUsername = ''; unset($data); } } $json->getJson(); } protected function onuModelsSelector() { $models = array(); if (!empty($this->allModelsData)) { foreach ($this->allModelsData as $io => $each) { if (@$this->altCfg['ONUMODELS_FILTER']) { if (ispos($each['modelname'], 'ONU')) { $models[$each['id']] = $each['modelname']; } } else { $models[$each['id']] = $each['modelname']; } } } return($models); } /** * Returns ONU creation form * * @return string */ protected function userNameForm($onuId, $port, $vlan, $type, $interface, $interface_olt, $snmp_index) { $result = ''; $inputs = wf_TextInput('username', __('Login'), '', true, 20, '', '', 'usernameInput---' . ubRouting::get('oltid', 'mres') . '---' . $onuId . '---' . $port); $inputs .= wf_Submit(__('Validate')); $result .= wf_Form('', 'POST', $inputs, 'glamour', '', 'usernameForm---' . ubRouting::get('oltid', 'mres') . '---' . $onuId . '---' . $port, '', 'onsubmit="return validateVlanUsernameForm(' . ubRouting::get('oltid', 'mres') . ",'" . $onuId . "', " . $port . ',' . $vlan . ",'" . $type . "','" . $interface . "','" . $interface_olt . "'," . $snmp_index . ')"'); return ($result); } /** * Show form to change cvlan on onu * * @param string $onuId * @param int $port * @param int $vlan * @param string $type * @param string $interface * @param string $interface_olt * * @return string */ public function changeVlanForm($onuId, $port, $vlan, $type, $interface, $interface_olt, $snmp_index) { $result = ''; $oltDetails = $this->loadOltDetails(); $this->clearInterface($interface_olt); $this->getVlanPair(); $models = $this->onuModelsSelector(); $inputs = wf_HiddenInput('change_cvlan', true); $inputs .= wf_HiddenInput('interface_olt', $interface_olt); $inputs .= wf_HiddenInput('interface', $interface); $inputs .= wf_HiddenInput('onuid', $onuId); $inputs .= wf_HiddenInput('port', $port); $inputs .= wf_HiddenInput('cvlan', $this->cvlan); $inputs .= wf_HiddenInput('svlan', $this->svlan); $inputs .= wf_HiddenInput('svlanid', $this->svlanid); $inputs .= wf_HiddenInput('snmp_index', $snmp_index); $inputs .= wf_HiddenInput('type', $type); $cells = wf_TableCell(__('Login')); $cells .= wf_TableCell(wf_TextInput('username', '', $this->username, false, 20)); $rows = wf_TableRow($cells); $checkedUsername = $this->getUsernameByOnu($onuId, true); if (!empty($checkedUsername)) { if ($this->username != $checkedUsername) { $rows .= 'this onu is assigned to another user: ' . wf_Link('?module=userprofile&username=' . $checkedUsername, $checkedUsername); } } $cells = wf_TableCell(__('OLT')); $cells .= wf_TableCell($oltDetails[$this->oltId]['ip'] . ' ' . $oltDetails[$this->oltId]['location']); $rows .= wf_TableRow($cells); $cells = wf_TableCell(__('Model')); $cells .= wf_tableCell(wf_Selector('onumodelid', $models, '', '')); $rows .= wf_TableRow($cells); if ($this->cvlan) { if (!empty($this->universalAssign)) { if (isset($this->universalAssign[$this->username])) { $cells = wf_TableCell('Found UniversalQINQ assignment'); } else { $cells = wf_TableCell('New vlan pair assigned from pool'); } } else { $cells = wf_TableCell('New vlan pair assigned from pool'); } $rows .= wf_TableRow($cells); $cells = wf_TableCell('SVLAN'); $cells .= wf_TableCell($this->svlan); $rows .= wf_TableRow($cells); $cells = wf_TableCell('CVLAN'); $cells .= wf_TableCell($this->cvlan); $rows .= wf_TableRow($cells); } else { $rows .= 'There is no vlan pool for OLT or UniversalQINQ assignment for user' . wf_delimiter(); } $cells = wf_TableCell('OLT ' . __('Interface')); $cells .= wf_TableCell($interface_olt); $rows .= wf_TableRow($cells); $cells = wf_TableCell('ONU ' . __('Interface')); $cells .= wf_TableCell($interface); $rows .= wf_TableRow($cells); $cells = wf_TableCell('ONU MAC/SN'); $cells .= wf_TableCell($onuId); $rows .= wf_TableRow($cells); $cells = wf_TableCell(__('Port')); $cells .= wf_TableCell($port); $rows .= wf_TableRow($cells); $cells = wf_TableCell('Guest vlan'); $cells .= wf_TableCell($vlan); $rows .= wf_TableRow($cells); if ($this->cvlan) { $cells = wf_TableCell(wf_Submit(__('Apply'))); $rows .= wf_TableRow($cells); } $inputs .= wf_TableBody($rows, '100%', 0, 'sortable'); $result .= wf_Form('', 'POST', $inputs, 'glamour'); return($result); } /** * Apply cvlan on onu * * @return void */ public function changeVlan() { switch ($this->mode) { case 'bdcom_b': $this->changeOltBdcom(); break; default: exit(); } $this->routineAdd(); } protected function changeOltBdcom() { $this->loadCvlans(); $pvidData['oid'] = $this->snmpTemplate['vlan']['PVID'] . '.' . ubRouting::post('snmp_index', 'vf') . '.' . ubRouting::post('port', 'vf'); $pvidData['type'] = 'i'; $pvidData['value'] = ubRouting::post('cvlan', 'vf'); $saveData['oid'] = $this->snmpTemplate['vlan']['SAVE']; $saveData['type'] = 'i'; $saveData['value'] = '1'; $setData[] = $pvidData; $setData[] = $saveData; @$this->snmp->set($this->oltIp, $this->oltCommunityWrite, $setData); rcms_redirect(VlanManagement::MODULE_ONU_APPLY . '&oltid=' . ubRouting::get('oltid', 'mres')); } protected function routineAdd() { $this->ponizerRoutineAdd(); $this->universalRoutineAdd(); } protected function ponizerRoutineAdd() { $type = ubRouting::post('type', 'mres'); $onuid = ubRouting::post('onuid', 'mres'); $oltid = ubRouting::post('oltid', 'mres'); $login = ubRouting::post('username', 'mres'); $onumodelid = ubRouting::post('onumodelid', 'mres'); if (!isset($this->onuMac[$onuid])) { $this->ponizerAdd($type, $oltid, $onumodelid, $onuid, $login); } else { if ($this->onuMac[$onuid]['oltid'] !== $oltid) { $this->ponizerFixOlt($type, $oltid, $onumodelid, $onuid, $login); } } } protected function ponizerAdd($type, $oltid, $onumodelid, $onuid, $login) { $pon = new PONizer(); switch ($type) { case 'epon': $pon->onuCreate($onumodelid, $oltid, '', $onuid, '', $login); } } protected function ponizerFixOlt($type, $oltid, $onumodelid, $onuid, $login) { $pon = new PONizer(); switch ($type) { case 'epon': $pon->onuCreate($onumodelid, $oltid, '', $onuid, '', $login); } } protected function universalRoutineAdd() { $login = trim(ubRouting::post('username', 'mres')); $svlanid = trim(ubRouting::post('svlanid', 'int')); $svlan = trim(ubRouting::post('svlan', 'int')); $cvlan = trim(ubRouting::post('cvlan', 'int')); if (!isset($this->universalAssign[$login])) { $universal = new UniversalQINQ(); $this->cvlanDB->data('login', $login); $this->cvlanDB->data('svlan_id', $svlanid); $this->cvlanDB->data('cvlan', $cvlan); $this->cvlanDB->create(); $universal->logAdd($login, $svlan, $cvlan); } } } |