<?xml version="1.0"?>
<!-- Core DDF for SNMP scanners : this defines common device sections that will apply to many devices
    Any deviceid and ruleid values in here should be assumed to be "well known", so that other DDFs can
    access or suppress them, as needed.
    -->
<APC_DDF xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://localhost/ddf_schema/apc_ddf_1_1.xsd"
         ddfid="core" ddfname="Core" ddfversion="9">
	<schemaVersion>1.1</schemaVersion>
	<!-- Common MIB-2 provided product, location data -->
	<device deviceid="mib2data">
		<oidMustExist ruleid="mib2objidtest" oid=".1.3.6.1.2.1.1.2.0"/>
			
		<setProductData ruleid="modeldata" field="model"><mapValue mapid="ignoreunknown"><sysObjIDLookup field="model"><getOid>.1.3.6.1.2.1.1.2.0</getOid></sysObjIDLookup></mapValue></setProductData>

		<setProductData ruleid="vendordata" field="vendor"><mapValue mapid="ignoreunknown"><sysObjIDLookup field="vendor"><getOid>.1.3.6.1.2.1.1.2.0</getOid></sysObjIDLookup></mapValue></setProductData>

		<setProductData ruleid="typedata" field="type"><mapValue mapid="ignoreunknown"><sysObjIDLookup field="type"><getOid>.1.3.6.1.2.1.1.2.0</getOid></sysObjIDLookup></mapValue></setProductData>
						
        <!-- Now used for matching to product catalog -->
		<setProductData ruleid="sysobjid" field="sysobjid"><getOid>.1.3.6.1.2.1.1.2.0</getOid></setProductData>

		<setLocationData ruleid="locationdata" field="LOCATION"><mapValue mapid="ignoreunknown"><getOid>.1.3.6.1.2.1.1.6.0</getOid></mapValue></setLocationData>

		<setLocationData ruleid="contactdata" field="CONTACT"><mapValue mapid="ignoreunknown"><getOid>.1.3.6.1.2.1.1.4.0</getOid></mapValue></setLocationData>
    
    <setLocationData ruleid="namedata" field="SYSNAME"><mapValue mapid="ignoreunknown"><getOid>.1.3.6.1.2.1.1.5.0</getOid></mapValue></setLocationData>
				
		<setLocationData ruleid="descdata" field="NOTES"><getOid>.1.3.6.1.2.1.1.1.0</getOid></setLocationData>
		<valueMap ruleid="ignoreunknown">
			<valueIn>Unknown</valueIn><valueOut></valueOut>
			<valueIn>*</valueIn><valueOut>*</valueOut>
		</valueMap>
	</device>
	<!-- Common MIB-2 label -->
	<device deviceid="mib2datalabel">
		<oidMustNotMatch ruleid="mib2name" oid=".1.3.6.1.2.1.1.5.0">
			<valueList>
				<value><sysHostname/></value>
				<value>Unknown</value>
			</valueList>
		</oidMustNotMatch>
		<setDefaultLabel ruleid="labeldata"><getOid>.1.3.6.1.2.1.1.5.0</getOid> (<sysHostname/>)</setDefaultLabel>
	</device>
	<!-- APC discovery MIB generic device information -->
	<device deviceid="apcdiscdata">
		<oidMustExist ruleid="mib2objidtest" oid=".1.3.6.1.4.1.318.1.4.2.1.0"/>
		
		<!-- Replace MIB2 model data with model from discovery MIB -->
		<suppressRule ruleid="stompmib2model" suppressid="core/mib2data/modeldata"/>
		<setProductData ruleid="modeldata" field="model"><mapValue mapid="isxm_model_valuemap"><getOid>.1.3.6.1.4.1.318.1.4.2.2.1.5.1</getOid></mapValue></setProductData>

		<!-- Put serial number in product field -->
		<setProductData ruleid="serialnum" field="apc_serial_num"><getOid>.1.3.6.1.4.1.318.1.4.2.2.1.3.1</getOid></setProductData>
		<setProductData ruleid="serialnum2" field="serial_num"><getOid>.1.3.6.1.4.1.318.1.4.2.2.1.3.1</getOid></setProductData>		
		<suppressRule ruleid="stompmib2vendor" suppressid="core/mib2data/vendordata"/>
		<setProductData ruleid="vendordata" field="vendor">American Power Conversion</setProductData>
		
    <!-- If model returned is InfraStruXure Manager, then remove uppercase X, otherwise just return model. --> 
		<valueMap ruleid="isxm_model_valuemap">
		    <valueIn>APC InfraStruXure Manager</valueIn><valueOut>APC InfraStruxure Manager</valueOut>
		    
		    <valueIn>*</valueIn><valueOut>*</valueOut>
		</valueMap>
	</device>
	
	<!-- APC discovery MIB generic device information - status -->
	<device deviceid="apcdiscdatastate">
		<oidMustExist ruleid="statetest" oid=".1.3.6.1.4.1.318.1.4.2.2.1.4.1"/>
		
		<!-- Add status sensor for general device state	-->
		<stateSensor ruleid="apcDiscoveryStatus_row1" index=".1.3.6.1.4.1.318.1.4.2.2.1.1">
			<type>devstatus</type>
			<sensorId>DEVSTATUS_<rowIndex/></sensorId>
			<value><mapValue mapid="devstatus-to-index"><getRowOid>.1.3.6.1.4.1.318.1.4.2.2.1.4</getRowOid></mapValue></value>
			<label>Device Status -<space/><getRowOid>.1.3.6.1.4.1.318.1.4.2.2.1.2</getRowOid></label>
			<sensorSet>default</sensorSet>
		</stateSensor>
		<valueMap ruleid="devstatus-to-index">
			<valueIn>1</valueIn><valueOut>0</valueOut>
			<valueIn>2</valueIn><valueOut>1</valueOut>
			<valueIn>3</valueIn><valueOut>2</valueOut>
			<valueIn>4</valueIn><valueOut>3</valueOut>
			<valueIn>*</valueIn><valueOut>0</valueOut>
		</valueMap>
	</device>
	
	<!-- APC discovery MIB generic (non-essential) device information - status alarms -->
	<!-- when rules are defined to generate specific alarms for a device, a suppressRule should be defined within that device tag to keep these alarms from being generated as well -->
	<!-- current examples: essential and apcsmartups -->
	<!-- rather than having this device tag define detection rules to keep track of when it should be overridden -->
	<device deviceid="apcdiscgenericalarms">
		<oidMustExist ruleid="statetest" oid=".1.3.6.1.4.1.318.1.4.2.2.1.4.1"/>
		
		<!-- first row of general device state is roll-up status of entire node -->
		<alarmFlags ruleid="apcDiscoveryStatus_row1">
			<value><getOid>.1.3.6.1.4.1.318.1.4.2.2.1.4.1</getOid></value>
			<alarmFlagsTest match="4">
				<name><activeText>Critical Status</activeText>
					<inactiveText>Critical Status Cleared</inactiveText></name>
				<severity>critical</severity>
				<category>General</category>
				<description>
					<activeText>A critical condition exists.</activeText>
					<inactiveText>A critical condition no longer exists.</inactiveText>
				</description>
				<alarmRecommendedActions>
					<recommendedActionId>Access the device to identify and correct the problem. If the problem persists, contact APC Support (http://www.apc.com/go/direct/index.cfm?tag=support).</recommendedActionId>
				</alarmRecommendedActions>
			</alarmFlagsTest>
			<alarmFlagsTest match="3">
				<name><activeText>Warning Status</activeText>
					<inactiveText>Warning Status Cleared</inactiveText></name>
				<severity>warning</severity>
				<category>General</category>
				<description>
					<activeText>A warning condition exists.</activeText>
					<inactiveText>A warning condition no longer exists.</inactiveText>
				</description>
				<alarmRecommendedActions>
					<recommendedActionId>Access the device to identify and correct the problem. If the problem persists, contact APC Support (http://www.apc.com/go/direct/index.cfm?tag=support).</recommendedActionId>
				</alarmRecommendedActions>
			</alarmFlagsTest>
		</alarmFlags>
	</device>
	
	<!-- APC discovery MIB ISX Manager -->
	<!-- Discovery Table Model column has ISX Manager Identifier -->
	<device deviceid="apcisxm">
		<oidMustMatch ruleid="apcDiscoveryModel_isxmtest" oid=".1.3.6.1.4.1.318.1.4.2.2.1.2.1">
			<valueList>
				<value>isx4</value>
			</valueList>
		</oidMustMatch>
		<!-- ISX Manager returns sysOid of just 1.3.6.1.4.1.318 so just set type direct instead of lookup -->
    <suppressRule ruleid="stompmib2type" suppressid="core/mib2data/typedata"/>
    <setProductData ruleid="typedata" field="type">Data Center Expert Server</setProductData>
	</device>
	
	<!-- APC discovery MIB generic device information - firmware -->
	<device deviceid="apcdiscdatafw">
		<oidMustMatch ruleid="fwtablecount" oid=".1.3.6.1.4.1.318.1.4.2.3.0">
			<valueList>
                <value>2</value><!-- Firmware less then 646 -->
                <value>3</value><!-- Firmware 646 or greater -->
            </valueList>
		</oidMustMatch>
		<!-- Add firmware version from firmware table -->
		<setProductData ruleid="aosversion" field="apcaosversion"><getOid>.1.3.6.1.4.1.318.1.4.2.4.1.3.1</getOid></setProductData>		
		<setProductData ruleid="bootversion" field="bootversion"><getOid>.1.3.6.1.4.1.318.1.4.2.4.1.4.1</getOid></setProductData>		
		<setProductData ruleid="apcappversion" field="apcappversion"><getOid>.1.3.6.1.4.1.318.1.4.2.4.1.3.2</getOid></setProductData>		
		<setProductData ruleid="appversion" field="appversion"><getOid>.1.3.6.1.4.1.318.1.4.2.4.1.4.2</getOid></setProductData>		
	</device>

	<!-- APC discovery MIB generic device information - firmware (single entry) -->
	<device deviceid="apcdiscdatafw1">
		<oidMustMatch ruleid="fwtablecount" oid=".1.3.6.1.4.1.318.1.4.2.3.0">
			<valueList><value>1</value></valueList>
		</oidMustMatch>
		<!-- Add firmware version from firmware table -->
		<setProductData ruleid="apcappversion" field="apcappversion"><getOid>.1.3.6.1.4.1.318.1.4.2.4.1.3.1</getOid></setProductData>		
		<setProductData ruleid="appversion" field="appversion"><getOid>.1.3.6.1.4.1.318.1.4.2.4.1.4.1</getOid></setProductData>		
	</device>

	<!-- APC Essential Alarms - drives actual processing of alarms -->
	<device deviceid="apcessential">
		<oidMustExist ruleid="essentialtest" oid=".1.3.6.1.4.1.318.1.4.2.9.0"/>
				
		<!-- make sure generic device status alarms (Critical/Warning condition exists) are not generated as well -->
		<suppressRule ruleid="stompgenericalarms" suppressid="core/apcdiscgenericalarms/apcDiscoveryStatus_row1"/>

		<processEssentialAlarms ruleid="default"/>
	</device>
	
	<!-- General test - must be able to get sysobjecid -->
	<device deviceid="sysobjid">
		<preDetectOidMustExist ruleid="sysobjidtest" oid=".1.3.6.1.2.1.1.2.0"/>
	</device>

</APC_DDF>

