/** * Update Networking ports from devices SNMP queries * * @param $ID_Device : ID of device * @param $type : type of device (NETWORKING_TYPE, PRINTER_TYPE ...) * @param $oidsModel : oid list from model SNMP * @param $oidvalues : list of values from agent query * @param $Array_Object_TypeNameConstant : array with oid => constant in relation with fields to update * **/ static function updateGLPINetworkingPorts($ID_Device, $type, $oidsModel, $oidvalues, $Array_Object_TypeNameConstant) { global $DB, $LANG, $FUSIONINVENTORY_MAPPING; if ($_SESSION['fusioninventory_logs'] == "1") { $logs = new PluginFusioninventoryLogs(); } $snmp_queries = new PluginFusioninventorySNMP(); $walks = new PluginFusioninventoryWalk(); $nn = new NetworkPort_NetworkPort(); if ($_SESSION['fusioninventory_logs'] == "1") { $logs->write("fusioninventory_fullsync", ">>>>>>>>>> Update ports device values <<<<<<<<<<", $type, $ID_Device, 1); } foreach ($Array_Object_TypeNameConstant as $oid => $link) { if (preg_match("/\\.\$/", $oid) and !empty($FUSIONINVENTORY_MAPPING[$type][$link]['field'])) { // SNMPWalk ONLY (ports) // print "OID : ".$oid."\n"; // For each port if ($FUSIONINVENTORY_MAPPING[$type][$link]['field'] == 'ifmac') { $query = "SELECT `glpi_networking_ports`.`ID`, `logical_number`,\n `glpi_networking_ports`.`ifmac` as `ifmac`\n FROM `glpi_networking_ports`\n LEFT JOIN `glpi_plugin_fusioninventory_networking_ports`\n ON `FK_networking_ports`=`glpi_networking_ports`.`ID`\n WHERE `on_device`='" . $ID_Device . "'\n AND `device_type`='" . $type . "'\n ORDER BY `logical_number`;"; } else { $query = "SELECT `glpi_networking_ports`.`ID`, `logical_number`, " . $FUSIONINVENTORY_MAPPING[$type][$link]['field'] . "\n FROM `glpi_networking_ports`\n LEFT JOIN `glpi_plugin_fusioninventory_networking_ports`\n ON `FK_networking_ports`=`glpi_networking_ports`.`ID`\n \t\t\t WHERE `on_device`='" . $ID_Device . "'\n AND `device_type`='" . $type . "'\n ORDER BY `logical_number`;"; } $result = $DB->query($query); while ($data = $DB->fetch_array($result)) { // Update Last UP if ($link == 'ifstatus' and $oidvalues[$oid . $data['logical_number']][""] == "1") { $query_update = "UPDATE `glpi_plugin_fusioninventory_networking_ports`\n SET `lastup`='" . date("Y-m-d H:i:s") . "'\n WHERE `FK_networking_ports`='" . $data["ID"] . "';"; $DB->query($query_update); } if ($link == 'ifPhysAddress' and !strstr($oidvalues[$oid . $data['logical_number']][""], ":")) { $MacAddress = PluginFusioninventoryIfmac::ifmacwalk_ifmacaddress($oidvalues[$oid . $data['logical_number']][""]); $oidvalues[$oid . $data['logical_number']][""] = $MacAddress; if (empty($oidvalues[$oid . $data['logical_number']][""])) { $oidvalues[$oid . $data['logical_number']][""] = "00:00:00:00:00:00"; } } if ($_SESSION['fusioninventory_logs'] == "1") { $logs->write("fusioninventory_fullsync", "****************", $type, $ID_Device, 1); } if ($_SESSION['fusioninventory_logs'] == "1") { $logs->write("fusioninventory_fullsync", "Oid : " . $oid, $type, $ID_Device, 1); } if ($_SESSION['fusioninventory_logs'] == "1") { $logs->write("fusioninventory_fullsync", "Link : " . $link, $type, $ID_Device, 1); } if ($link == "ifPhysAddress" and $oidvalues[$oid . $data['logical_number']][""] != "") { $oidvalues[$oid . $data['logical_number']][""] = $snmp_queries->MAC_Rewriting($oidvalues[$oid . $data['logical_number']][""]); } if ($link == "ifaddr") { $Arrayifaddr = $walks->GetoidValuesFromWalk($oidvalues, $oidsModel[0][1]['ifaddr'], 1); for ($j = 0; $j < count($Arrayifaddr); $j++) { if ($oidvalues[$oid . $Arrayifaddr[$j]][""] == $data['logical_number']) { $data['logical_number'] = $Arrayifaddr[$j]; } } if ($_SESSION['fusioninventory_logs'] == "1") { $logs->write("fusioninventory_fullsync", "=> " . $data['logical_number'], $type, $ID_Device, 1); } } else { if (isset($oidvalues[$oid . $data['logical_number']][""])) { if ($_SESSION['fusioninventory_logs'] == "1") { $logs->write("fusioninventory_fullsync", "=> " . $oidvalues[$oid . $data['logical_number']][""], $type, $ID_Device, 1); } } } if (isset($oidvalues[$oid . $data['logical_number']][""])) { if ($data[$FUSIONINVENTORY_MAPPING[$type][$link]['field']] != $oidvalues[$oid . $data['logical_number']][""]) { if ($FUSIONINVENTORY_MAPPING[$type][$link]['table'] == "glpi_networking_ports") { $ID_field = "ID"; } else { $ID_field = "FK_networking_ports"; } } else { if ($FUSIONINVENTORY_MAPPING[$type][$link]['table'] == "glpi_networking_ports") { $ID_field = "ID"; } else { $ID_field = "FK_networking_ports"; } } $queryUpdate = ''; if ($link == "ifaddr") { if ($data[$FUSIONINVENTORY_MAPPING[$type][$link]['field']] != $data['logical_number']) { $queryUpdate = "UPDATE " . $FUSIONINVENTORY_MAPPING[$type][$link]['table'] . "\n SET " . $FUSIONINVENTORY_MAPPING[$type][$link]['field'] . "='" . $data['logical_number'] . "'\n WHERE " . $ID_field . "='" . $data["ID"] . "'"; } } else { if ($data[$FUSIONINVENTORY_MAPPING[$type][$link]['field']] != $oidvalues[$oid . $data['logical_number']][""]) { $queryUpdate = "UPDATE " . $FUSIONINVENTORY_MAPPING[$type][$link]['table'] . "\n SET " . $FUSIONINVENTORY_MAPPING[$type][$link]['field'] . "='" . $oidvalues[$oid . $data['logical_number']][""] . "'\n WHERE " . $ID_field . "='" . $data["ID"] . "';"; } } if ($queryUpdate != '') { PluginFusioninventoryDb::lock_wire_check(); $DB->query($queryUpdate); // Delete port wire if port is internal disable if ($link == "ifinternalstatus" and ($oidvalues[$oid . $data['logical_number']][""] == "2" or $oidvalues[$oid . $data['logical_number']][""] == "down(2)")) { $netwire = new Netwire(); PluginFusioninventorySnmphistory::addLogConnection("remove", $netwire->getOppositeContact($data["ID"]), $FK_process); PluginFusioninventorySnmphistory::addLogConnection("remove", $data["ID"], $FK_process); if ($nn->getFromDBForNetworkPort($data['ID'])) { $nn->delete($data); } } // Add log because snmp value change PluginFusioninventorySnmphistory::addLog($data["ID"], $FUSIONINVENTORY_MAPPING[$type][$link]['name'], $data[$FUSIONINVENTORY_MAPPING[$type][$link]['field']], $oidvalues[$oid . $data['logical_number']][""], $type . "-" . $link, $_SESSION['FK_process']); PluginFusioninventoryDb::lock_wire_unlock(); } } } } } }