From ab45804e62aa9b4ece2beb1bdff7539aacb065c9 Mon Sep 17 00:00:00 2001 From: Chris Freas Date: Fri, 17 Apr 2015 14:59:47 -0400 Subject: [PATCH] Add Juniper inventory support --- includes/discovery/entity-physical.inc.php | 241 ++++++++++++--------- 1 file changed, 139 insertions(+), 102 deletions(-) diff --git a/includes/discovery/entity-physical.inc.php b/includes/discovery/entity-physical.inc.php index e60e50514e..88aee578ed 100755 --- a/includes/discovery/entity-physical.inc.php +++ b/includes/discovery/entity-physical.inc.php @@ -1,123 +1,160 @@ $entry) { - - $entPhysicalDescr = $entry['entPhysicalDescr']; - $entPhysicalContainedIn = $entry['entPhysicalContainedIn']; - $entPhysicalClass = $entry['entPhysicalClass']; - $entPhysicalName = $entry['entPhysicalName']; - $entPhysicalSerialNum = $entry['entPhysicalSerialNum']; - $entPhysicalModelName = $entry['entPhysicalModelName']; - $entPhysicalMfgName = $entry['entPhysicalMfgName']; - $entPhysicalVendorType = $entry['entPhysicalVendorType']; - $entPhysicalParentRelPos = $entry['entPhysicalParentRelPos']; - $entPhysicalHardwareRev = $entry['entPhysicalHardwareRev']; - $entPhysicalFirmwareRev = $entry['entPhysicalFirmwareRev']; - $entPhysicalSoftwareRev = $entry['entPhysicalSoftwareRev']; - $entPhysicalIsFRU = $entry['entPhysicalIsFRU']; - $entPhysicalAlias = $entry['entPhysicalAlias']; - $entPhysicalAssetID = $entry['entPhysicalAssetID']; - - if (isset($entity_array[$entPhysicalIndex]['0']['entAliasMappingIdentifier'])) { - $ifIndex = $entity_array[$entPhysicalIndex]['0']['entAliasMappingIdentifier']; - } - - if (!strpos($ifIndex, "fIndex") || $ifIndex == "") { - unset($ifIndex); + $entity_array = array(); + echo(" jnxBoxAnatomy"); + $entity_array = snmpwalk_cache_oid($device, "jnxBoxAnatomy", $entity_array, "JUNIPER-MIB"); } else { - $ifIndex_array = explode(".", $ifIndex); - $ifIndex = $ifIndex_array[1]; + + $entity_array = array(); + echo(" entPhysicalEntry"); + $entity_array = snmpwalk_cache_oid($device, "entPhysicalEntry", $entity_array, "ENTITY-MIB:CISCO-ENTITY-VENDORTYPE-OID-MIB"); + echo(" entAliasMappingIdentifier"); + $entity_array = snmpwalk_cache_twopart_oid($device, "entAliasMappingIdentifier", $entity_array, "ENTITY-MIB:IF-MIB"); } - if ($entPhysicalVendorTypes[$entPhysicalVendorType] && !$entPhysicalModelName) - { - $entPhysicalModelName = $entPhysicalVendorTypes[$entPhysicalVendorType]; - } + foreach ($entity_array as $entPhysicalIndex => $entry) { - // FIXME - dbFacile + if ($device['os'] == 'junos') { - if ($entPhysicalDescr || $entPhysicalName) - { - $entPhysical_id = dbFetchCell("SELECT entPhysical_id FROM `entPhysical` WHERE device_id = ? AND entPhysicalIndex = ?",array($device['device_id'], $entPhysicalIndex)); + // Juniper's MIB doesn't have the same objects as the Entity MIB, so some values + // are made up here. + $entPhysicalDescr = $entry['jnxContentsDescr']; + $entPhysicalContainedIn = $entry['jnxContainersWithin']; + $entPhysicalClass = $entry['jnxBoxClass']; + $entPhysicalName = $entry['jnxOperatingDescr']; + $entPhysicalSerialNum = $entry['jnxContentsSerialNo']; + $entPhysicalModelName = $entry['jnxContentsPartNo']; + $entPhysicalMfgName = 'Juniper'; + $entPhysicalVendorType = 'Juniper'; + $entPhysicalParentRelPos = -1; + $entPhysicalHardwareRev = $entry['jnxContentsRevision']; + $entPhysicalFirmwareRev = $entry['entPhysicalFirmwareRev']; + $entPhysicalSoftwareRev = $entry['entPhysicalSoftwareRev']; + $entPhysicalIsFRU = $entry['jnxFruType']; + $entPhysicalAlias = $entry['entPhysicalAlias']; + $entPhysicalAssetID = $entry['entPhysicalAssetID']; + } else { - if ($entPhysical_id) { - $update_data = array( - 'entPhysicalIndex' => $entPhysicalIndex, - 'entPhysicalDescr' => $entPhysicalDescr, - 'entPhysicalClass' => $entPhysicalClass, - 'entPhysicalName' => $entPhysicalName, - 'entPhysicalModelName' => $entPhysicalModelName, - 'entPhysicalSerialNum' => $entPhysicalSerialNum, - 'entPhysicalContainedIn' => $entPhysicalContainedIn, - 'entPhysicalMfgName' => $entPhysicalMfgName, - 'entPhysicalParentRelPos' => $entPhysicalParentRelPos, - 'entPhysicalVendorType' => $entPhysicalVendorType, - 'entPhysicalHardwareRev' => $entPhysicalHardwareRev, - 'entPhysicalFirmwareRev' => $entPhysicalFirmwareRev, - 'entPhysicalSoftwareRev' => $entPhysicalSoftwareRev, - 'entPhysicalIsFRU' => $entPhysicalIsFRU, - 'entPhysicalAlias' => $entPhysicalAlias, - 'entPhysicalAssetID' => $entPhysicalAssetID - ); - dbUpdate($update_data, 'entPhysical', 'device_id=? AND entPhysicalIndex=?',array($device['device_id'],$entPhysicalIndex)); - echo("."); - } else { - $insert_data = array( - 'device_id' => $device['device_id'], - 'entPhysicalIndex' => $entPhysicalIndex, - 'entPhysicalDescr' => $entPhysicalDescr, - 'entPhysicalClass' => $entPhysicalClass, - 'entPhysicalName' => $entPhysicalName, - 'entPhysicalModelName' => $entPhysicalModelName, - 'entPhysicalSerialNum' => $entPhysicalSerialNum, - 'entPhysicalContainedIn' => $entPhysicalContainedIn, - 'entPhysicalMfgName' => $entPhysicalMfgName, - 'entPhysicalParentRelPos' => $entPhysicalParentRelPos, - 'entPhysicalVendorType' => $entPhysicalVendorType, - 'entPhysicalHardwareRev' => $entPhysicalHardwareRev, - 'entPhysicalFirmwareRev' => $entPhysicalFirmwareRev, - 'entPhysicalSoftwareRev' => $entPhysicalSoftwareRev, - 'entPhysicalIsFRU' => $entPhysicalIsFRU, - 'entPhysicalAlias' => $entPhysicalAlias, - 'entPhysicalAssetID' => $entPhysicalAssetID - ); + $entPhysicalDescr = $entry['entPhysicalDescr']; + $entPhysicalContainedIn = $entry['entPhysicalContainedIn']; + $entPhysicalClass = $entry['entPhysicalClass']; + $entPhysicalName = $entry['entPhysicalName']; + $entPhysicalSerialNum = $entry['entPhysicalSerialNum']; + $entPhysicalModelName = $entry['entPhysicalModelName']; + $entPhysicalMfgName = $entry['entPhysicalMfgName']; + $entPhysicalVendorType = $entry['entPhysicalVendorType']; + $entPhysicalParentRelPos = $entry['entPhysicalParentRelPos']; + $entPhysicalHardwareRev = $entry['entPhysicalHardwareRev']; + $entPhysicalFirmwareRev = $entry['entPhysicalFirmwareRev']; + $entPhysicalSoftwareRev = $entry['entPhysicalSoftwareRev']; + $entPhysicalIsFRU = $entry['entPhysicalIsFRU']; + $entPhysicalAlias = $entry['entPhysicalAlias']; + $entPhysicalAssetID = $entry['entPhysicalAssetID']; + } - if (!empty($ifIndex)) { - $insert_data['ifIndex'] = $ifIndex; + if (isset($entity_array[$entPhysicalIndex]['0']['entAliasMappingIdentifier'])) { + $ifIndex = $entity_array[$entPhysicalIndex]['0']['entAliasMappingIdentifier']; + } + + if (!strpos($ifIndex, "fIndex") || $ifIndex == "") { + unset($ifIndex); + } else { + $ifIndex_array = explode(".", $ifIndex); + $ifIndex = $ifIndex_array[1]; + } + + if ($entPhysicalVendorTypes[$entPhysicalVendorType] && !$entPhysicalModelName) { + $entPhysicalModelName = $entPhysicalVendorTypes[$entPhysicalVendorType]; + } + + // FIXME - dbFacile + + if ($entPhysicalDescr || $entPhysicalName) { + $entPhysical_id = dbFetchCell("SELECT entPhysical_id FROM `entPhysical` WHERE device_id = ? AND entPhysicalIndex = ?",array($device['device_id'], $entPhysicalIndex)); + + if ($entPhysical_id) { + $update_data = array( + 'entPhysicalIndex' => $entPhysicalIndex, + 'entPhysicalDescr' => $entPhysicalDescr, + 'entPhysicalClass' => $entPhysicalClass, + 'entPhysicalName' => $entPhysicalName, + 'entPhysicalModelName' => $entPhysicalModelName, + 'entPhysicalSerialNum' => $entPhysicalSerialNum, + 'entPhysicalContainedIn' => $entPhysicalContainedIn, + 'entPhysicalMfgName' => $entPhysicalMfgName, + 'entPhysicalParentRelPos' => $entPhysicalParentRelPos, + 'entPhysicalVendorType' => $entPhysicalVendorType, + 'entPhysicalHardwareRev' => $entPhysicalHardwareRev, + 'entPhysicalFirmwareRev' => $entPhysicalFirmwareRev, + 'entPhysicalSoftwareRev' => $entPhysicalSoftwareRev, + 'entPhysicalIsFRU' => $entPhysicalIsFRU, + 'entPhysicalAlias' => $entPhysicalAlias, + 'entPhysicalAssetID' => $entPhysicalAssetID + ); + dbUpdate($update_data, 'entPhysical', 'device_id=? AND entPhysicalIndex=?',array($device['device_id'],$entPhysicalIndex)); + echo("."); + } else { + $insert_data = array( + 'device_id' => $device['device_id'], + 'entPhysicalIndex' => $entPhysicalIndex, + 'entPhysicalDescr' => $entPhysicalDescr, + 'entPhysicalClass' => $entPhysicalClass, + 'entPhysicalName' => $entPhysicalName, + 'entPhysicalModelName' => $entPhysicalModelName, + 'entPhysicalSerialNum' => $entPhysicalSerialNum, + 'entPhysicalContainedIn' => $entPhysicalContainedIn, + 'entPhysicalMfgName' => $entPhysicalMfgName, + 'entPhysicalParentRelPos' => $entPhysicalParentRelPos, + 'entPhysicalVendorType' => $entPhysicalVendorType, + 'entPhysicalHardwareRev' => $entPhysicalHardwareRev, + 'entPhysicalFirmwareRev' => $entPhysicalFirmwareRev, + 'entPhysicalSoftwareRev' => $entPhysicalSoftwareRev, + 'entPhysicalIsFRU' => $entPhysicalIsFRU, + 'entPhysicalAlias' => $entPhysicalAlias, + 'entPhysicalAssetID' => $entPhysicalAssetID + ); + + if (!empty($ifIndex)) { + $insert_data['ifIndex'] = $ifIndex; + } + + dbInsert($insert_data, 'entPhysical'); + echo("+"); + } + + if ($device['os'] == 'junos') { + + // $entPhysicalIndex appears as a numeric OID fragment + // (string), so convert it to an "integer" for the + // validation step below since it is stored in the DB as + // an integer. This should be fixed. + list($first,$second) = explode(".",$entPhysicalIndex); + $entPhysicalIndexNoDots = $first . $second; + $valid[$entPhysicalIndexNoDots] = 1; + } else { + $valid[$entPhysicalIndex] = 1; + } + } } - dbInsert($insert_data, 'entPhysical'); - echo("+"); - } +} else { echo("Disabled!"); } - $valid[$entPhysicalIndex] = 1; - } - } - - } else { echo("Disabled!"); } - - $sql = "SELECT * FROM `entPhysical` WHERE `device_id` = '".$device['device_id']."'"; - foreach (dbFetchRows($sql) as $test) - { +$sql = "SELECT * FROM `entPhysical` WHERE `device_id` = '".$device['device_id']."'"; +foreach (dbFetchRows($sql) as $test) { $id = $test['entPhysicalIndex']; if (!$valid[$id]) { - echo("-"); - dbDelete('entPhysical', 'entPhysical_id = ?', array($test['entPhysical_id'])); + echo("-"); + dbDelete('entPhysical', 'entPhysical_id = ?', array($test['entPhysical_id'])); } - } - - echo("\n"); +} +echo("\n"); ?>