/** * @test */ public function ImportNetworkEquipment() { global $DB; self::restore_database(); // Load session rights $_SESSION['glpidefault_entity'] = 0; Session::initEntityProfiles(2); Session::changeProfile(4); $pfUnmanaged = new PluginFusioninventoryUnmanaged(); $networkEquipment = new NetworkEquipment(); $networkPort = new NetworkPort(); $networkName = new NetworkName(); $iPAddress = new IPAddress(); $input = array('name' => 'switch', 'entities_id' => 0, 'item_type' => 'NetworkEquipment', 'sysdescr' => 'Cisco machin chose', 'locations_id' => 1, 'is_dynamic' => 1, 'serial' => 'XXS6BEF3', 'comment' => 'this is a comment', 'plugin_fusioninventory_configsecurities_id' => 1); $unmanageds_id = $pfUnmanaged->add($input); // * Add networkport $input = array(); $input['itemtype'] = 'PluginFusioninventoryUnmanaged'; $input['items_id'] = $unmanageds_id; $input['instantiation_type'] = 'NetworkPortEthernet'; $input['name'] = 'general'; $input['mac'] = '00:00:00:43:ae:0f'; $input['is_dynamic'] = 1; $networkports_id = $networkPort->add($input); $input = array(); $input['items_id'] = $networkports_id; $input['itemtype'] = 'NetworkPort'; $input['name'] = ''; $input['is_dynamic'] = 1; $networknames_id = $networkName->add($input); $input = array(); $input['entities_id'] = 0; $input['itemtype'] = 'NetworkName'; $input['items_id'] = $networknames_id; $input['name'] = '192.168.20.1'; $input['is_dynamic'] = 1; $iPAddress->add($input); $pfUnmanaged->import($unmanageds_id); $cnt = countElementsInTable("glpi_networkequipments"); $this->assertEquals(1, $cnt, "May have network equipment added"); $cnt = countElementsInTable("glpi_plugin_fusioninventory_unmanageds"); $this->assertEquals(0, $cnt, "Unknown device may be deleted"); $networkEquipment->getFromDB(1); $this->assertEquals('XXS6BEF3', $networkEquipment->fields['serial'], "Serial"); $this->assertEquals('switch', $networkEquipment->fields['name'], "Name"); $this->assertEquals(1, $networkEquipment->fields['is_dynamic'], "is_dynamic"); $this->assertEquals(1, $networkEquipment->fields['locations_id'], "locations_id"); $this->assertEquals('this is a comment', $networkEquipment->fields['comment'], "comment"); $networkPort->getFromDB(1); $a_reference = array('name' => 'general', 'id' => '1', 'items_id' => '1', 'itemtype' => 'NetworkEquipment', 'entities_id' => '0', 'is_recursive' => '0', 'logical_number' => '0', 'instantiation_type' => 'NetworkPortEthernet', 'mac' => '00:00:00:43:ae:0f', 'comment' => '', 'is_deleted' => '0', 'is_dynamic' => '1'); $this->assertEquals($a_reference, $networkPort->fields, "Networkport"); $networkName->getFromDB(1); $a_reference = array('id' => '1', 'entities_id' => '0', 'items_id' => '1', 'itemtype' => 'NetworkPort', 'comment' => NULL, 'fqdns_id' => '0', 'is_deleted' => '0', 'is_dynamic' => '1', 'name' => ''); $this->assertEquals($a_reference, $networkName->fields, "Networkname"); $iPAddress->getFromDB(1); $a_reference = array('name' => '192.168.20.1', 'id' => '1', 'entities_id' => '0', 'items_id' => '1', 'itemtype' => 'NetworkName', 'version' => '4', 'binary_0' => '0', 'binary_1' => '0', 'binary_2' => '65535', 'binary_3' => '3232240641', 'is_deleted' => '0', 'is_dynamic' => '1', 'mainitems_id' => '1', 'mainitemtype' => 'NetworkEquipment'); $this->assertEquals($a_reference, $iPAddress->fields, "IPAddress"); }
public function Cisco1Unmanaged() { global $DB; $DB->connect(); self::restore_database(); $a_lldp = array('ifdescr' => 'GigabitEthernet0/10', 'logical_number' => '', 'sysdescr' => '', 'model' => '', 'ip' => '192.168.200.124', 'mac' => '', 'name' => ''); $pfINetworkEquipmentLib = new PluginFusioninventoryInventoryNetworkEquipmentLib(); $networkEquipment = new NetworkEquipment(); $networkport = new NetworkPort(); $networkName = new NetworkName(); $iPAddress = new IPAddress(); $pfNetworkPort = new PluginFusioninventoryNetworkPort(); $pfUnmanaged = new PluginFusioninventoryUnmanaged(); // Nortel switch $networkequipments_id = $networkEquipment->add(array('name' => 'cisco1', 'entities_id' => 0)); $networkports_id = $networkport->add(array('itemtype' => 'NetworkEquipment', 'items_id' => $networkequipments_id, 'entities_id' => 0)); // Unmanaged $unmanageds_id = $pfUnmanaged->add(array('name' => 'otherswitch', 'entities_id' => 0)); $networkports_unknown_id = $networkport->add(array('itemtype' => 'PluginFusioninventoryUnmanaged', 'items_id' => $unmanageds_id, 'entities_id' => 0)); $networknames_id = $networkName->add(array('entities_id' => 0, 'itemtype' => 'NetworkPort', 'items_id' => $networkports_unknown_id)); $iPAddress->add(array('entities_id' => 0, 'itemtype' => 'NetworkName', 'items_id' => $networknames_id, 'name' => '192.168.200.124')); $pfINetworkEquipmentLib->importConnectionLLDP($a_lldp, $networkports_id); $a_portslinks = getAllDatasFromTable('glpi_networkports_networkports'); $this->assertEquals(1, count($a_portslinks), 'May have 1 connection between 2 network ports'); $a_networkports = getAllDatasFromTable('glpi_networkports'); $this->assertEquals(3, count($a_networkports), 'May have 3 network ports (' . print_r($a_networkports, TRUE) . ')'); $a_unkowns = getAllDatasFromTable('glpi_plugin_fusioninventory_unmanageds'); $this->assertEquals(1, count($a_unkowns), 'May have only one unknown device (' . print_r($a_unkowns, TRUE) . ')'); $a_networkport_ref = array('id' => '3', 'items_id' => $unmanageds_id, 'itemtype' => 'PluginFusioninventoryUnmanaged', 'entities_id' => '0', 'is_recursive' => '0', 'logical_number' => '0', 'name' => 'GigabitEthernet0/10', 'instantiation_type' => 'NetworkPortEthernet', 'mac' => NULL, 'comment' => NULL, 'is_deleted' => '0', 'is_dynamic' => '0'); $networkport->getFromDB(3); $this->assertEquals($a_networkport_ref, $networkport->fields, 'New unknown port created'); $a_ref = array('id' => 1, 'networkports_id_1' => $networkports_id, 'networkports_id_2' => 3); $this->assertEquals($a_ref, current($a_portslinks), 'Link port'); }
function getPortIDfromSysmacandPortnumber($sysmac, $ifnumber, $params = array()) { global $DB; $PortID = ''; $queryPort = "SELECT *\n FROM `glpi_networkports`\n WHERE `mac`='" . $sysmac . "'\n AND `itemtype`='NetworkEquipment'\n AND `logical_number`='" . $ifnumber . "'\n LIMIT 1"; $resultPort = $DB->query($queryPort); if ($DB->numrows($resultPort) == "1") { $dataPort = $DB->fetch_assoc($resultPort); $PortID = $dataPort['id']; } if ($PortID == '') { // case where mac is of switch and not of the port (like Procurve) $queryPort = "SELECT *\n FROM `glpi_plugin_fusioninventory_networkports`\n LEFT JOIN `glpi_networkports`\n ON `glpi_plugin_fusioninventory_networkports`.`networkports_id`=\n `glpi_networkports`.`id`\n LEFT JOIN `glpi_networkequipments`\n ON `glpi_networkports`.`items_id`=\n `glpi_networkequipments`.`id`\n WHERE `glpi_networkports`.`mac`='" . $sysmac . "'\n AND `glpi_networkports`.`itemtype`='NetworkEquipment'\n AND `logical_number`='" . $ifnumber . "'\n LIMIT 1"; $resultPort = $DB->query($queryPort); $dataPort = $DB->fetch_assoc($resultPort); if ($DB->numrows($resultPort) == "1") { $PortID = $dataPort['networkports_id']; } } // In case of mac is mac of switch, not a port if ($PortID == '') { $queryPort = "SELECT *\n FROM `glpi_networkports`\n WHERE `logical_number`='" . $ifnumber . "'\n AND `itemtype`='NetworkEquipment'\n AND `items_id` IN\n (SELECT `items_id`\n FROM `glpi_networkports`\n WHERE `instantiation_type`='NetworkPortAggregate'\n AND `mac`='" . $sysmac . "')\n LIMIT 1"; $resultPort = $DB->query($queryPort); $dataPort = $DB->fetch_assoc($resultPort); if (isset($dataPort['id'])) { $PortID = $dataPort['id']; } } if ($PortID == "") { $NetworkPort = new NetworkPort(); $PluginFusioninventoryUnmanaged = new PluginFusioninventoryUnmanaged(); $query = "SELECT *\n FROM `glpi_networkports`\n WHERE `itemtype`='PluginFusioninventoryUnmanaged'\n AND `mac`='" . $sysmac . "'\n LIMIT 1"; $result = $DB->query($query); if ($DB->numrows($result) == "1") { $data = $DB->fetch_assoc($result); return $data['id']; } // Add unmanaged device because not find device $input = array(); $input['mac'] = $sysmac; if (isset($params['sysname'])) { $input['name'] = $params['sysname']; } if (isset($_SESSION["plugin_fusioninventory_entity"])) { $input['entities_id'] = $_SESSION["plugin_fusioninventory_entity"]; } if (isset($params['sysdescr'])) { $input['sysdescr'] = $params['sysdescr']; } $unkonwn_id = $PluginFusioninventoryUnmanaged->add($input); // Add port $input = array(); $input['items_id'] = $unkonwn_id; $input['itemtype'] = 'PluginFusioninventoryUnmanaged'; $input['mac'] = $sysmac; if (isset($params['ifdescr'])) { $input['name'] = $params['ifdescr']; } $input['instantiation_type'] = 'NetworkPortEthernet'; $PortID = $NetworkPort->add($input); return $PortID; } return $PortID; }
include "../../../inc/includes.php"; $pfUnmanaged = new PluginFusioninventoryUnmanaged(); $ptt = new PluginFusioninventoryTask(); Html::header(__('FusionInventory', 'fusioninventory'), $_SERVER["PHP_SELF"], "assets", "pluginfusioninventoryunmanaged"); Session::checkRight('plugin_fusioninventory_unmanaged', READ); PluginFusioninventoryMenu::displayMenu("mini"); $id = ""; if (isset($_GET["id"])) { $id = $_GET["id"]; } if (isset($_POST["add"])) { Session::checkRight('plugin_fusioninventory_unmanaged', CREATE); if (isset($_POST['items_id']) && $_POST['items_id'] != "0" and $_POST['items_id'] != "") { $_POST['itemtype'] = '1'; } $pfUnmanaged->add($_POST); Html::back(); } else { if (isset($_POST["delete"])) { Session::checkRight('plugin_fusioninventory_unmanaged', PURGE); $pfUnmanaged->check($_POST['id'], DELETE); $pfUnmanaged->delete($_POST); $pfUnmanaged->redirectToList(); } else { if (isset($_POST["restore"])) { $pfUnmanaged->check($_POST['id'], DELETE); if ($pfUnmanaged->restore($_POST)) { Event::log($_POST["id"], "PluginFusioninventoryUnmanaged", 4, "inventory", $_SESSION["glpiname"] . " " . __('restoration of the item', 'fusioninventory') . " " . $pfUnmanaged->getField('name')); } $pfUnmanaged->redirectToList(); } else {
function importConnectionMac($a_portconnection, $networkports_id) { $wire = new NetworkPort_NetworkPort(); $networkPort = new NetworkPort(); $pfNetworkPort = new PluginFusioninventoryNetworkPort(); $pfUnmanaged = new PluginFusioninventoryUnmanaged(); $a_snmpports = current($pfNetworkPort->find("`networkports_id`='" . $networkports_id . "'", "", 1)); $pfNetworkPort->getFromDB($a_snmpports['id']); $count = count($a_portconnection); $pfNetworkPort->loadNetworkport($networkports_id); if ($pfNetworkPort->getValue('trunk') != '1') { if ($count == '2') { // detect if phone IP is one of the 2 devices $phonecase = 0; $macNotPhone_id = 0; $macNotPhone = ''; $phonePort_id = 0; foreach ($a_portconnection as $ifmac) { $a_ports = $networkPort->find("`mac`='" . $ifmac . "'", "", 1); $a_port = current($a_ports); if ($a_port['itemtype'] == 'Phone') { // Connect phone on switch port and other (computer..) in this phone $phonePort_id = $a_port['id']; $phonecase++; } else { $macNotPhone_id = $a_port['id']; $macNotPhone = $ifmac; } } if ($phonecase == '1') { $wire->add(array('networkports_id_1' => $networkports_id, 'networkports_id_2' => $phonePort_id)); $networkPort->getFromDB($phonePort_id); $Phone = new Phone(); $Phone->getFromDB($networkPort->fields['items_id']); $a_portsPhone = $networkPort->find("`items_id`='" . $networkPort->fields['items_id'] . "'\n AND `itemtype`='Phone'\n AND `name`='Link'", '', 1); $portLink_id = 0; if (count($a_portsPhone) == '1') { $a_portPhone = current($a_portsPhone); $portLink_id = $a_portPhone['id']; } else { // Create Port Link $input = array(); $input['name'] = 'Link'; $input['itemtype'] = 'Phone'; $input['items_id'] = $Phone->fields['id']; $input['entities_id'] = $Phone->fields['entities_id']; $portLink_id = $networkPort->add($input); } $opposite_id = FALSE; if ($opposite_id == $wire->getOppositeContact($portLink_id)) { if ($opposite_id != $macNotPhone_id) { $pfNetworkPort->disconnectDB($portLink_id); // disconnect this port $pfNetworkPort->disconnectDB($macNotPhone_id); // disconnect destination port } } if (!isset($macNotPhone_id)) { // Create unmanaged ports $unmanagedn_infos = array(); $unmanagedn_infos["name"] = ''; if (isset($_SESSION["plugin_fusioninventory_entity"])) { $input['entities_id'] = $_SESSION["plugin_fusioninventory_entity"]; } $newID = $pfUnmanaged->add($unmanagedn_infos); // Add networking_port $port_add = array(); $port_add["items_id"] = $newID; $port_add["itemtype"] = 'PluginFusioninventoryUnmanaged'; $port_add['mac'] = $macNotPhone; $port_add['instantiation_type'] = "NetworkPortEthernet"; $macNotPhone_id = $networkPort->add($port_add); } $wire->add(array('networkports_id_1' => $portLink_id, 'networkports_id_2' => $macNotPhone_id)); } else { $pfUnmanaged->hubNetwork($pfNetworkPort, $a_portconnection); } } else { if ($count > 1) { // MultipleMac $pfUnmanaged->hubNetwork($pfNetworkPort, $a_portconnection); } else { // One mac on port foreach ($a_portconnection as $ifmac) { //Only 1 time $a_ports = $networkPort->find("`mac`='" . $ifmac . "' AND `logical_number`='1'", "", 1); if (count($a_ports) == 0) { $a_ports = $networkPort->find("`mac`='" . $ifmac . "'", "", 1); } if (count($a_ports) > 0) { $a_port = current($a_ports); $hub = 0; $id = $networkPort->getContact($a_port['id']); if ($id and $networkPort->getFromDB($id)) { if ($networkPort->fields['itemtype'] == 'PluginFusioninventoryUnmanaged') { $pfUnmanaged->getFromDB($networkPort->fields['items_id']); if ($pfUnmanaged->fields['hub'] == '1') { $hub = 1; } } } $direct_id = $networkPort->getContact($networkports_id); if ($id and $id != $networkports_id and $hub == '0') { $directconnect = 0; if (!$direct_id) { $directconnect = 1; } else { $networkPort->getFromDB($direct_id); if ($networkPort->fields['itemtype'] == 'PluginFusioninventoryUnmanaged') { // 1. Hub connected to this switch port $pfUnmanaged->connectPortToHub(array($a_port), $networkPort->fields['items_id']); } else { // 2. direct connection $directconnect = 1; } } if ($directconnect == '1') { $pfNetworkPort->disconnectDB($networkports_id); // disconnect this port $pfNetworkPort->disconnectDB($a_port['id']); // disconnect destination port $wire->add(array('networkports_id_1' => $networkports_id, 'networkports_id_2' => $a_port['id'])); } } else { if ($id and $hub == '1') { $directconnect = 0; if (!$direct_id) { $directconnect = 1; } else { $networkPort->getFromDB($direct_id); $ddirect = $networkPort->fields; $networkPort->getFromDB($id); if ($ddirect['items_id'] == $networkPort->fields['items_id'] and $ddirect['itemtype'] == $networkPort->fields['itemtype']) { // 1.The hub where this device is connected is yet connected // to this switch port // => Do nothing } else { // 2. The hub where this device is connected to is not connected // to this switch port if ($ddirect['itemtype'] == 'PluginFusioninventoryUnmanaged') { // b. We have a hub connected to the switch port $pfUnmanaged->connectPortToHub(array($a_port), $ddirect['items_id']); } else { // a. We have a direct connexion to another device // (on the switch port) $directconnect = 1; } } } if ($directconnect == '1') { $pfNetworkPort->disconnectDB($networkports_id); // disconnect this port $pfNetworkPort->disconnectDB($a_port['id']); // disconnect destination port $wire->add(array('networkports_id_1' => $networkports_id, 'networkports_id_2' => $a_port['id'])); } } else { if ($id) { // Yet connected } else { // Not connected $pfNetworkPort->disconnectDB($networkports_id); // disconnect this port $wire->add(array('networkports_id_1' => $networkports_id, 'networkports_id_2' => $a_port['id'])); } } } } else { // Create unmanaged device $pfUnmanaged = new PluginFusioninventoryUnmanaged(); $input = array(); $manufacturer = PluginFusioninventoryInventoryExternalDB::getManufacturerWithMAC($ifmac); $input['name'] = $manufacturer; if (isset($_SESSION["plugin_fusioninventory_entity"])) { $input['entities_id'] = $_SESSION["plugin_fusioninventory_entity"]; } $newID = $pfUnmanaged->add($input); $input['itemtype'] = "PluginFusioninventoryUnmanaged"; $input['items_id'] = $newID; $input['mac'] = $ifmac; $input['instantiation_type'] = "NetworkPortEthernet"; $newPortID = $networkPort->add($input); $pfNetworkPort->disconnectDB($networkports_id); // disconnect this port $wire->add(array('networkports_id_1' => $networkports_id, 'networkports_id_2' => $newPortID)); } } } } } }