   UPS-MIB DEFINITIONS ::= BEGIN
   

IMPORTS
	TRAP-TYPE
		FROM RFC-1215
	mib-2, DisplayString
		FROM RFC1213-MIB
	OBJECT-TYPE
		FROM RFC-1212
	Gauge, Counter
		FROM RFC1155-SMI;
--        AutonomousType, TestAndIncr, TimeInterval, TimeStamp
--                FROM SNMPv2-TC;

-- created from upsMIB (9402050000Z)

upsMIB OBJECT IDENTIFIER ::= { mib-2  33 } -- this has to be fixed by hand

AutonomousType ::= 
    INTEGER
TestAndIncr ::= 
    INTEGER
TimeInterval ::= 
    INTEGER
TimeStamp ::= 
    INTEGER

PositiveInteger ::= 
    INTEGER

NonNegativeInteger ::=
    INTEGER


   upsObjects            OBJECT IDENTIFIER ::= { upsMIB 1 }


   --
   -- The Device Identification group.
   --      All objects in this group except for upsIdentName and
   --      upsIdentAttachedDevices are set at device initialization
   --      and remain static.
   --

   upsIdent              OBJECT IDENTIFIER ::= { upsObjects 1 }

   upsIdentManufacturer OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..31))
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "The name of the UPS manufacturer."
       ::= { upsIdent 1 }

   upsIdentModel OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "The UPS Model designation."
       ::= { upsIdent 2 }

   upsIdentUPSSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "The UPS firmware/software version(s).  This variable
	       may or may not have the same value as
	       upsIdentAgentSoftwareVersion in some implementations."
       ::= { upsIdent 3 }

   upsIdentAgentSoftwareVersion OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..63))
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "The UPS agent software version.  This variable may or
	       may not have the same value as
	       upsIdentUPSSoftwareVersion in some implementations."
       ::= { upsIdent 4 }

   upsIdentName OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       ACCESS read-write
       STATUS     mandatory
       DESCRIPTION
	       "A string identifying the UPS.  This object should be
	       set by the administrator."
       ::= { upsIdent 5 }

   upsIdentAttachedDevices OBJECT-TYPE
       SYNTAX     DisplayString (SIZE(0..63))
       ACCESS read-write
       STATUS     mandatory
       DESCRIPTION
	       "A string identifying the devices attached to the
	       output(s) of the UPS.  This object should be set by
	       the administrator."
       ::= { upsIdent 6 }


   --
   -- Battery Group
   --

   upsBattery            OBJECT IDENTIFIER ::= { upsObjects 2 }

   upsBatteryStatus OBJECT-TYPE
       SYNTAX     INTEGER {
	   unknown(1),
	   batteryNormal(2),
	   batteryLow(3),
	   batteryDepleted(4)
       }
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "The indication of the capacity remaining in the UPS
	       system's batteries.   A value of batteryNormal
	       indicates that the remaining run-time is greater than
	       upsConfigLowBattTime.  A value of batteryLow indicates
	       that the remaining battery run-time is less than or
	       equal to upsConfigLowBattTime.  A value of
	       batteryDepleted indicates that the UPS will be unable
	       to sustain the present load when and if the utility
	       power is lost (including the possibility that the
	       utility power is mandatoryly absent and the UPS is
	       unable to sustain the output)."
       ::= { upsBattery 1 }

   upsSecondsOnBattery OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "If the unit is on battery power, the elapsed time
	       since the UPS last switched to battery power, or the
	       time since the network management subsystem was last
	       restarted, whichever is less.  Zero shall be returned
	       if the unit is not on battery power."
       ::= { upsBattery 2 }

   upsEstimatedMinutesRemaining OBJECT-TYPE
       SYNTAX     PositiveInteger
       --      "minutes"
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "An estimate of the time to battery charge depletion
	       under the present load conditions if the utility power
	       is off and remains off, or if it were to be lost and
	       remain off."
       ::= { upsBattery 3 }

   upsEstimatedChargeRemaining OBJECT-TYPE
       SYNTAX     INTEGER (0..100)
       --      "percent"
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "An estimate of the battery charge remaining expressed
	       as a percent of full charge."
       ::= { upsBattery 4 }

   upsBatteryVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       --      "0.1 Volt DC"
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "The magnitude of the present battery voltage."
       ::= { upsBattery 5 }

   upsBatterymandatory OBJECT-TYPE
       SYNTAX     INTEGER
       --      "0.1 Amp DC"
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "The present battery mandatory."
       ::= { upsBattery 6 }

   upsBatteryTemperature OBJECT-TYPE
       SYNTAX     INTEGER
       --      "degrees Centigrade"
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "The ambient temperature at or near the UPS Battery
	       casing."
       ::= { upsBattery 7 }


   --
   -- Input Group
   --

   upsInput              OBJECT IDENTIFIER ::= { upsObjects 3 }

   upsInputLineBads OBJECT-TYPE
       SYNTAX     Counter
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "A count of the number of times the input entered an
	       out-of-tolerance condition as defined by the
	       manufacturer.  This count is incremented by one each
	       time the input transitions from zero out-of-tolerance
	       lines to one or more input lines out-of-tolerance."
       ::= { upsInput 1 }


   upsInputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "The number of input lines utilized in this device.
	       This variable indicates the number of rows in the
	       input table."
       ::= { upsInput 2 }

   upsInputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF UpsInputEntry
       ACCESS not-accessible
       STATUS     mandatory
       DESCRIPTION
	       "A list of input table entries.  The number of entries
	       is given by the value of upsInputNumLines."
       ::= { upsInput 3 }

   upsInputEntry OBJECT-TYPE
       SYNTAX     UpsInputEntry
       ACCESS not-accessible
       STATUS     mandatory
       DESCRIPTION
	       "An entry containing information applicable to a
	       particular input line."
       INDEX { upsInputLineIndex }
       ::= { upsInputTable 1 }

   UpsInputEntry ::= SEQUENCE {
       upsInputLineIndex   PositiveInteger,
       upsInputFrequency   NonNegativeInteger,
       upsInputVoltage     NonNegativeInteger,
       upsInputmandatory     NonNegativeInteger,
       upsInputTruePower   NonNegativeInteger
   }

   upsInputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       ACCESS not-accessible
       STATUS     mandatory
       DESCRIPTION
	       "The input line identifier."
       ::= { upsInputEntry 1 }

   upsInputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       --      "0.1 Hertz"
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "The present input frequency."
       ::= { upsInputEntry 2 }

   upsInputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       --      "RMS Volts"
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "The magnitude of the present input voltage."
       ::= { upsInputEntry 3 }

   upsInputmandatory OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       --      "0.1 RMS Amp"
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "The magnitude of the present input mandatory."
       ::= { upsInputEntry 4 }

   upsInputTruePower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       --      "Watts"
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "The magnitude of the present input true power."
       ::= { upsInputEntry 5 }


   --
   -- The Output group.
   --

   upsOutput             OBJECT IDENTIFIER ::= { upsObjects 4 }

   upsOutputSource OBJECT-TYPE
       SYNTAX     INTEGER {
	   other(1),
	   none(2),
	   normal(3),
	   bypass(4),
	   battery(5),
	   booster(6),
	   reducer(7)
       }
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "The present source of output power.  The enumeration
	       none(2) indicates that there is no source of output
	       power (and therefore no output power), for example,
	       the system has opened the output breaker."
       ::= { upsOutput 1 }

   upsOutputFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       --      "0.1 Hertz"
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "The present output frequency."
       ::= { upsOutput 2 }

   upsOutputNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "The number of output lines utilized in this device.
	       This variable indicates the number of rows in the
	       output table."
       ::= { upsOutput 3 }

   upsOutputTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF UpsOutputEntry
       ACCESS not-accessible
       STATUS     mandatory
       DESCRIPTION
	       "A list of output table entries.  The number of
	       entries is given by the value of upsOutputNumLines."
       ::= { upsOutput 4 }

   upsOutputEntry OBJECT-TYPE
       SYNTAX     UpsOutputEntry
       ACCESS not-accessible
       STATUS     mandatory
       DESCRIPTION
	       "An entry containing information applicable to a
	       particular output line."
       INDEX { upsOutputLineIndex }
       ::= { upsOutputTable 1 }

   UpsOutputEntry ::= SEQUENCE {
       upsOutputLineIndex   PositiveInteger,
       upsOutputVoltage     NonNegativeInteger,
       upsOutputmandatory     NonNegativeInteger,
       upsOutputPower       NonNegativeInteger,
       upsOutputPercentLoad INTEGER
   }

   upsOutputLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       ACCESS not-accessible
       STATUS     mandatory
       DESCRIPTION
	       "The output line identifier."
       ::= { upsOutputEntry 1 }

   upsOutputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       --      "RMS Volts"
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "The present output voltage."
       ::= { upsOutputEntry 2 }

   upsOutputmandatory OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       --      "0.1 RMS Amp"
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "The present output mandatory."
       ::= { upsOutputEntry 3 }

   upsOutputPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       --      "Watts"
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "The present output true power."
       ::= { upsOutputEntry 4 }

   upsOutputPercentLoad OBJECT-TYPE
       SYNTAX     INTEGER (0..200)
       --      "percent"
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "The percentage of the UPS power capacity presently
	       being used on this output line, i.e., the greater of
	       the percent load of true power capacity and the
	       percent load of VA."
       ::= { upsOutputEntry 5 }

   --
   -- The Bypass group.
   --

   upsBypass             OBJECT IDENTIFIER ::= { upsObjects 5 }

   upsBypassFrequency OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       --      "0.1 Hertz"
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "The present bypass frequency."
       ::= { upsBypass 1 }

   upsBypassNumLines OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "The number of bypass lines utilized in this device.
	       This entry indicates the number of rows in the bypass
	       table."
       ::= { upsBypass 2 }

   upsBypassTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF UpsBypassEntry
       ACCESS not-accessible
       STATUS     mandatory
       DESCRIPTION
	       "A list of bypass table entries.  The number of
	       entries is given by the value of upsBypassNumLines."
       ::= { upsBypass 3 }

   upsBypassEntry OBJECT-TYPE
       SYNTAX     UpsBypassEntry
       ACCESS not-accessible
       STATUS     mandatory
       DESCRIPTION
	       "An entry containing information applicable to a
	       particular bypass input."
       INDEX { upsBypassLineIndex }
       ::= { upsBypassTable 1 }

   UpsBypassEntry ::= SEQUENCE {
       upsBypassLineIndex  PositiveInteger,
       upsBypassVoltage    NonNegativeInteger,
       upsBypassmandatory    NonNegativeInteger,
       upsBypassPower      NonNegativeInteger
   }

   upsBypassLineIndex OBJECT-TYPE
       SYNTAX     PositiveInteger
       ACCESS not-accessible
       STATUS     mandatory
       DESCRIPTION
	       "The bypass line identifier."
       ::= { upsBypassEntry 1 }

   upsBypassVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       --      "RMS Volts"
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "The present bypass voltage."
       ::= { upsBypassEntry 2 }

   upsBypassmandatory OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       --      "0.1 RMS Amp"
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "The present bypass mandatory."
       ::= { upsBypassEntry 3 }

   upsBypassPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       --      "Watts"
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "The present true power conveyed by the bypass."
       ::= { upsBypassEntry 4 }


   --
   -- The Alarm group.
   --

   upsAlarm              OBJECT IDENTIFIER ::= { upsObjects 6 }

   upsAlarmsPresent OBJECT-TYPE
       SYNTAX     Gauge
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "The present number of active alarm conditions."
       ::= { upsAlarm 1 }

   upsAlarmTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF UpsAlarmEntry
       ACCESS not-accessible
       STATUS     mandatory
       DESCRIPTION
	       "A list of alarm table entries.  The table contains
	       zero, one, or many rows at any moment, depending upon
	       the number of alarm conditions in effect.  The table
	       is initially empty at agent startup.  The agent
	       creates a row in the table each time a condition is
	       detected and deletes that row when that condition no
	       longer pertains.  The agent creates the first row with
	       upsAlarmId equal to 1, and increments the value of
	       upsAlarmId each time a new row is created, wrapping to
	       the first free value greater than or equal to 1 when
	       the maximum value of upsAlarmId would otherwise be
	       exceeded.  Consequently, after multiple operations,
	       the table may become sparse, e.g., containing entries
	       for rows 95, 100, 101, and 203 and the entries should
	       not be assumed to be in chronological order because
	       upsAlarmId might have wrapped.

	       Alarms are named by an AutonomousType (OBJECT
	       IDENTIFIER), upsAlarmDescr, to allow a single table to
	       reflect well known alarms plus alarms defined by a
	       particular implementation, i.e., as documented in the
	       private enterprise MIB definition for the device.  No
	       two rows will have the same value of upsAlarmDescr,
	       since alarms define conditions.  In order to meet this
	       requirement, care should be taken in the definition of
	       alarm conditions to insure that a system cannot enter
	       the same condition multiple times simultaneously.

	       The number of rows in the table at any given time is
	       reflected by the value of upsAlarmsPresent."
       ::= { upsAlarm 2 }

   upsAlarmEntry OBJECT-TYPE
       SYNTAX     UpsAlarmEntry
       ACCESS not-accessible
       STATUS     mandatory
       DESCRIPTION
	       "An entry containing information applicable to a
	       particular alarm."
       INDEX { upsAlarmId }
       ::= { upsAlarmTable 1 }

   UpsAlarmEntry ::= SEQUENCE {
       upsAlarmId          PositiveInteger,
       upsAlarmDescr       AutonomousType,
       upsAlarmTime        TimeStamp
   }

   upsAlarmId OBJECT-TYPE
       SYNTAX     PositiveInteger
       ACCESS not-accessible
       STATUS     mandatory
       DESCRIPTION
	       "A unique identifier for an alarm condition.  This
	       value must remain constant."
       ::= { upsAlarmEntry 1 }

   upsAlarmDescr OBJECT-TYPE
       SYNTAX     AutonomousType
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "A reference to an alarm description object.  The
	       object referenced should not be accessible, but rather
	       be used to provide a unique description of the alarm
	       condition."
       ::= { upsAlarmEntry 2 }

   upsAlarmTime OBJECT-TYPE
       SYNTAX     TimeStamp
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "The value of sysUpTime when the alarm condition was
	       detected.  If the alarm condition was detected at the
	       time of agent startup and presumably existed before
	       agent startup, the value of upsAlarmTime shall equal
	       0."
       ::= { upsAlarmEntry 3 }


   --
   -- Well known alarm conditions.
   --

   upsWellKnownAlarms    OBJECT IDENTIFIER ::= { upsAlarm 3 }

   upsAlarmBatteryBad OBJECT IDENTIFIER
       ::= { upsWellKnownAlarms  1 }

   upsAlarmOnBattery OBJECT IDENTIFIER
       ::= { upsWellKnownAlarms  2 }

   upsAlarmLowBattery OBJECT IDENTIFIER
       ::= { upsWellKnownAlarms  3 }


   upsAlarmDepletedBattery OBJECT IDENTIFIER
       ::= { upsWellKnownAlarms  4 }

   upsAlarmTempBad OBJECT IDENTIFIER
       ::= { upsWellKnownAlarms  5 }

   upsAlarmInputBad OBJECT IDENTIFIER
       ::= { upsWellKnownAlarms  6 }

   upsAlarmOutputBad OBJECT IDENTIFIER
       ::= { upsWellKnownAlarms  7 }

   upsAlarmOutputOverload OBJECT IDENTIFIER
       ::= { upsWellKnownAlarms  8 }

   upsAlarmOnBypass OBJECT IDENTIFIER
       ::= { upsWellKnownAlarms  9 }

   upsAlarmBypassBad OBJECT IDENTIFIER
       ::= { upsWellKnownAlarms 10 }

   upsAlarmOutputOffAsRequested OBJECT IDENTIFIER
       ::= { upsWellKnownAlarms 11 }

   upsAlarmUpsOffAsRequested OBJECT IDENTIFIER
       ::= { upsWellKnownAlarms 12 }

   upsAlarmChargerFailed OBJECT IDENTIFIER
       ::= { upsWellKnownAlarms 13 }

   upsAlarmUpsOutputOff OBJECT IDENTIFIER
       ::= { upsWellKnownAlarms 14 }

   upsAlarmUpsSystemOff OBJECT IDENTIFIER
       ::= { upsWellKnownAlarms 15 }

   upsAlarmFanFailure OBJECT IDENTIFIER
       ::= { upsWellKnownAlarms 16 }

   upsAlarmFuseFailure OBJECT IDENTIFIER
       ::= { upsWellKnownAlarms 17 }

   upsAlarmGeneralFault OBJECT IDENTIFIER
       ::= { upsWellKnownAlarms 18 }

   upsAlarmDiagnosticTestFailed OBJECT IDENTIFIER
       ::= { upsWellKnownAlarms 19 }

   upsAlarmCommunicationsLost OBJECT IDENTIFIER
       ::= { upsWellKnownAlarms 20 }

   upsAlarmAwaitingPower OBJECT IDENTIFIER
       ::= { upsWellKnownAlarms 21 }

   upsAlarmShutdownPending OBJECT IDENTIFIER
       ::= { upsWellKnownAlarms 22 }

   upsAlarmShutdownImminent OBJECT IDENTIFIER
       ::= { upsWellKnownAlarms 23 }

   upsAlarmTestInProgress OBJECT IDENTIFIER
       ::= { upsWellKnownAlarms 24 }

   emdTemperatureTooHigh OBJECT IDENTIFIER
       ::= { upsWellKnownAlarms 26 }

   emdTemperatureTooLow OBJECT IDENTIFIER
       ::= { upsWellKnownAlarms 27 }

   emdHumidityTooHigh OBJECT IDENTIFIER
       ::= { upsWellKnownAlarms 28 }

   emdHumidityTooLow OBJECT IDENTIFIER
       ::= { upsWellKnownAlarms 29 }

   emdAlarm1Active OBJECT IDENTIFIER
       ::= { upsWellKnownAlarms 30 }

   emdAlarm2Active OBJECT IDENTIFIER
       ::= { upsWellKnownAlarms 31 }

   --
   -- The Test Group
   --

   upsTest               OBJECT IDENTIFIER ::= { upsObjects 7 }

   upsTestId OBJECT-TYPE
       SYNTAX     OBJECT IDENTIFIER
       ACCESS read-write
       STATUS     mandatory
       DESCRIPTION
	       "The test is named by an OBJECT IDENTIFIER which
	       allows a standard mechanism for the initiation of
	       tests, including the well known tests identified in
	       this document as well as those introduced by a
	       particular implementation, i.e., as documented in the
	       private enterprise MIB definition for the device.

	       Setting this variable initiates the named test. Sets
	       to this variable require the presence of
	       upsTestSpinLock in the same SNMP message.

	       The set request will be rejected with an appropriate
	       error message if the requested test cannot be
	       performed, including attempts to start a test when
	       another test is already in progress.  The status of
	       the mandatory or last test is maintained in
	       upsTestResultsSummary. Tests in progress may be
	       aborted by setting the upsTestId variable to
	       upsTestAbortTestInProgress.

	       Read operations return the value of the name of the
	       test in progress if a test is in progress or the name
	       of the last test performed if no test is in progress,
	       unless no test has been run, in which case the well
	       known value upsTestNoTestsInitiated is returned."
       ::= { upsTest 1 }

   -- see [6] for more information on the semantics of objects with
   -- syntax of TestAndIncr

   upsTestSpinLock OBJECT-TYPE
       SYNTAX     TestAndIncr
       ACCESS read-write
       STATUS     mandatory
       DESCRIPTION
	       "A spin lock on the test subsystem.  The spinlock is
	       used as follows.

	       Before starting a test, a manager-station should make
	       sure that a test is not in progress as follows:

		   try_again:
		     get (upsTestSpinLock)
		     while (upsTestResultsSummary == inProgress) {
		       /* loop while a test is running for another
	       manager */
		       short delay
		       get (upsTestSpinLock)
		     }
		     lock_value = upsTestSpinLock
		     /* no test in progress, start the test */
		     set (upsTestSpinLock = lock_value, upsTestId =
	       requested_test)
		     if (error_index == 1) { /* (upsTestSpinLock
	       failed) */
		       /* if problem is not access control, then
			   some other manager slipped in ahead of us
	       */
		       goto try_again
		     }
		     if (error_index == 2) { /* (upsTestId) */
		       /* cannot perform the test */
		       give up
		     }
		     /* test started ok */
		     /* wait for test completion by polling
	       upsTestResultsSummary */
		     get (upsTestSpinLock, upsTestResultsSummary,
	       upsTestResultsDetail)
		     while (upsTestResultsSummary == inProgress) {
		       short delay
		       get (upsTestSpinLock, upsTestResultsSummary,
	       upsTestResultsDetail)
		     }
		     /* when test completes, retrieve any additional
	       test results */
		     /* if upsTestSpinLock == lock_value + 1, then
	       these are our test */
		     /* results (as opposed to another manager's */
		     The initial value of upsTestSpinLock at agent
	       initialization shall
		     be 1."
       ::= { upsTest 2 }

   upsTestResultsSummary OBJECT-TYPE
       SYNTAX     INTEGER {
	   donePass(1),
	   doneWarning(2),
	   doneError(3),
	   aborted(4),
	   inProgress(5),
	   noTestsInitiated(6)
       }
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "The results of the mandatory or last UPS diagnostics
	       test performed.  The values for donePass(1),
	       doneWarning(2), and doneError(3) indicate that the
	       test completed either successfully, with a warning, or
	       with an error, respectively.  The value aborted(4) is
	       returned for tests which are aborted by setting the
	       value of upsTestId to upsTestAbortTestInProgress.
	       Tests which have not yet concluded are indicated by
	       inProgress(5).  The value noTestsInitiated(6)
	       indicates that no previous test results are available,
	       such as is the case when no tests have been run since
	       the last reinitialization of the network management
	       subsystem and the system has no provision for non-
	       volatile storage of test results."
       ::= { upsTest 3 }

   upsTestResultsDetail OBJECT-TYPE
       SYNTAX     DisplayString (SIZE (0..255))
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "Additional information about upsTestResultsSummary.
	       If no additional information available, a zero length
	       string is returned."
       ::= { upsTest 4 }

   upsTestStartTime OBJECT-TYPE
       SYNTAX     TimeStamp
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "The value of sysUpTime at the time the test in
	       progress was initiated, or, if no test is in progress,
	       the time the previous test was initiated.  If the
	       value of upsTestResultsSummary is noTestsInitiated(6),
	       upsTestStartTime has the value 0."
       ::= { upsTest 5 }

   upsTestElapsedTime OBJECT-TYPE
       SYNTAX     TimeInterval
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "The amount of time, in TimeTicks, since the test in
	       progress was initiated, or, if no test is in progress,
	       the previous test took to complete.  If the value of
	       upsTestResultsSummary is noTestsInitiated(6),
	       upsTestElapsedTime has the value 0."
       ::= { upsTest 6 }

   --
   -- Well known tests.
   --

   upsWellKnownTests     OBJECT IDENTIFIER ::= { upsTest 7 }


   upsTestNoTestsInitiated OBJECT IDENTIFIER
       ::= { upsWellKnownTests  1 }

   upsTestAbortTestInProgress OBJECT IDENTIFIER
       ::= { upsWellKnownTests  2 }

   upsTestGeneralSystemsTest OBJECT IDENTIFIER
       ::= { upsWellKnownTests  3 }

   upsTestQuickBatteryTest OBJECT IDENTIFIER
       ::= { upsWellKnownTests  4 }

   upsTestDeepBatteryCalibration OBJECT IDENTIFIER
       ::= { upsWellKnownTests  5 }


   --
   -- The Control group.
   --

   upsControl            OBJECT IDENTIFIER ::= { upsObjects 8 }

   upsShutdownType OBJECT-TYPE
       SYNTAX     INTEGER {
	   output(1),
	   system(2)
       }
       ACCESS read-write
       STATUS     mandatory
       DESCRIPTION
	       "This object determines the nature of the action to be
	       taken at the time when the countdown of the
	       upsShutdownAfterDelay and upsRebootWithDuration
	       objects reaches zero.

	       Setting this object to output(1) indicates that
	       shutdown requests should cause only the output of the
	       UPS to turn off.  Setting this object to system(2)
	       indicates that shutdown requests will cause the entire
	       UPS system to turn off."
       ::= { upsControl 1 }

   upsShutdownAfterDelay OBJECT-TYPE
       SYNTAX     INTEGER (-1..2147483647)
       --      "seconds"
       ACCESS read-write
       STATUS     mandatory
       DESCRIPTION
	       "Setting this object will shutdown (i.e., turn off)
	       either the UPS output or the UPS system (as determined
	       by the value of upsShutdownType at the time of
	       shutdown) after the indicated number of seconds, or
	       less if the UPS batteries become depleted. Setting
	       this object to 0 will cause the shutdown to occur
	       immediately.  Setting this object to -1 will abort the
	       countdown.  If the system is already in the desired
	       state at the time the countdown reaches 0, then
	       nothing will happen.  That is, there is no additional
	       action at that time if upsShutdownType = system and
	       the system is already off.  Similarly, there is no
	       additional action at that time if upsShutdownType =
	       output and the output is already off.  When read,
	       upsShutdownAfterDelay will return the number of
	       seconds remaining until shutdown, or -1 if no shutdown
	       countdown is in effect.  On some systems, if the agent
	       is restarted while a shutdown countdown is in effect,
	       the countdown may be aborted.  Sets to this object
	       override any upsShutdownAfterDelay already in effect."
       ::= { upsControl 2 }

   upsStartupAfterDelay OBJECT-TYPE
       SYNTAX     INTEGER (-1..2147483647)
       --      "seconds"
       ACCESS read-write
       STATUS     mandatory
       DESCRIPTION
	       "Setting this object will start the output after the
	       indicated number of seconds, including starting the
	       UPS, if necessary.  Setting this object to 0 will
	       cause the startup to occur immediately.  Setting this
	       object to -1 will abort the countdown.  If the output
	       is already on at the time the countdown reaches 0,
	       then nothing will happen.  Sets to this object
	       override the effect of any upsStartupAfterDelay
	       countdown or upsRebootWithDuration countdown in
	       progress.  When read, upsStartupAfterDelay will return
	       the number of seconds until startup, or -1 if no
	       startup countdown is in effect.  If the countdown
	       expires during a utility failure, the startup shall
	       not occur until the utility power is restored.  On
	       some systems, if the agent is restarted while a
	       startup countdown is in effect, the countdown is
	       aborted."
       ::= { upsControl 3 }

   upsRebootWithDuration OBJECT-TYPE
       SYNTAX     INTEGER (-1..300)
       --      "seconds"
       ACCESS read-write
       STATUS     mandatory
       DESCRIPTION
	       "Setting this object will immediately shutdown (i.e.,
	       turn off) either the UPS output or the UPS system (as
	       determined by the value of upsShutdownType at the time
	       of shutdown) for a period equal to the indicated
	       number of seconds, after which time the output will be
	       started, including starting the UPS, if necessary.  If
	       the number of seconds required to perform the request
	       is greater than the requested duration, then the
	       requested shutdown and startup cycle shall be
	       performed in the minimum time possible, but in no case
	       shall this require more than the requested duration
	       plus 60 seconds.  When read, upsRebootWithDuration
	       shall return the number of seconds remaining in the
	       countdown, or -1 if no countdown is in progress.  If
	       the startup should occur during a utility failure, the
	       startup shall not occur until the utility power is
	       restored."
       ::= { upsControl 4 }

   upsAutoRestart OBJECT-TYPE
       SYNTAX     INTEGER {
	   on(1),
	   off(2)
       }
       ACCESS read-write
       STATUS     mandatory
       DESCRIPTION
	       "Setting this object to 'on' will cause the UPS system
	       to restart after a shutdown if the shutdown occurred
	       during a power loss as a result of either a
	       upsShutdownAfterDelay or an internal battery depleted
	       condition.  Setting this object to 'off' will prevent
	       the UPS system from restarting after a shutdown until
	       an operator manually or remotely explicitly restarts
	       it.  If the UPS is in a startup or reboot countdown,
	       then the UPS will not restart until that delay has
	       been satisfied."
       ::= { upsControl 5 }


   --
   -- The Configuration group.
   --

   upsConfig             OBJECT IDENTIFIER ::= { upsObjects 9 }

   upsConfigInputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       --      "RMS Volts"
       ACCESS read-write
       STATUS     mandatory
       DESCRIPTION
	       "The magnitude of the nominal input voltage.  On those
	       systems which support read-write access to this
	       object, if there is an attempt to set this variable to
	       a value that is not supported, the request must be
	       rejected and the agent shall respond with an
	       appropriate error message, i.e., badValue for SNMPv1,
	       or inconsistentValue for SNMPv2."
       ::= { upsConfig 1 }

   upsConfigInputFreq OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       --      "0.1 Hertz"
       ACCESS read-write
       STATUS     mandatory
       DESCRIPTION
	       "The nominal input frequency.  On those systems which
	       support read-write access to this object, if there is
	       an attempt to set this variable to a value that is not
	       supported, the request must be rejected and the agent
	       shall respond with an appropriate error message, i.e.,
	       badValue for SNMPv1, or inconsistentValue for SNMPv2."
       ::= { upsConfig 2 }

   upsConfigOutputVoltage OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       --      "RMS Volts"
       ACCESS read-write
       STATUS     mandatory
       DESCRIPTION
	       "The magnitude of the nominal output voltage.  On
	       those systems which support read-write access to this
	       object, if there is an attempt to set this variable to
	       a value that is not supported, the request must be
	       rejected and the agent shall respond with an
	       appropriate error message, i.e., badValue for SNMPv1,
	       or inconsistentValue for SNMPv2."
       ::= { upsConfig 3 }

   upsConfigOutputFreq OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       --      "0.1 Hertz"
       ACCESS read-write
       STATUS     mandatory
       DESCRIPTION
	       "The nominal output frequency.  On those systems which
	       support read-write access to this object, if there is
	       an attempt to set this variable to a value that is not
	       supported, the request must be rejected and the agent
	       shall respond with an appropriate error message, i.e.,
	       badValue for SNMPv1, or inconsistentValue for SNMPv2."
       ::= { upsConfig 4 }

   upsConfigOutputVA OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       --      "Volt-Amps"
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "The magnitude of the nominal Volt-Amp rating."
       ::= { upsConfig 5 }

   upsConfigOutputPower OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       --      "Watts"
       ACCESS read-only
       STATUS     mandatory
       DESCRIPTION
	       "The magnitude of the nominal true power rating."
       ::= { upsConfig 6 }

   upsConfigLowBattTime OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       --      "minutes"
       ACCESS read-write
       STATUS     mandatory
       DESCRIPTION
	       "The value of upsEstimatedMinutesRemaining at which a
	       lowBattery condition is declared.  For agents which
	       support only discrete (discontinuous) values, then the
	       agent shall round up to the next supported value.  If
	       the requested value is larger than the largest
	       supported value, then the largest supported value
	       shall be selected."
       ::= { upsConfig 7 }

   upsConfigAudibleStatus OBJECT-TYPE
       SYNTAX     INTEGER {
	   disabled(1),
	   enabled(2),
	   muted(3)
       }
       ACCESS read-write
       STATUS     mandatory
       DESCRIPTION
	       "The requested state of the audible alarm.  When in
	       the disabled state, the audible alarm should never
	       sound.  The enabled state is self-describing.  Setting
	       this object to muted(3) when the audible alarm is
	       sounding shall temporarily silence the alarm.  It will
	       remain muted until it would normally stop sounding and
	       the value returned for read operations during this
	       period shall equal muted(3).  At the end of this
	       period, the value shall revert to enabled(2).  Writes
	       of the value muted(3) when the audible alarm is not
	       sounding shall be accepted but otherwise shall have no
	       effect."
       ::= { upsConfig 8 }

   upsConfigLowVoltageTransferPoint OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       --      "RMS Volts"
       ACCESS read-write
       STATUS     mandatory
       DESCRIPTION
	       "The minimum input line voltage allowed before the UPS
	       system transfers to battery backup."
       ::= { upsConfig 9 }

   upsConfigHighVoltageTransferPoint OBJECT-TYPE
       SYNTAX     NonNegativeInteger
       --      "RMS Volts"
       ACCESS read-write
       STATUS     mandatory
       DESCRIPTION
	       "The maximum line voltage allowed before the UPS
	       system transfers to battery backup."
       ::= { upsConfig 10 }


   --
   -- notifications, i.e., traps
   --
   upsTraps              OBJECT IDENTIFIER ::= { upsMIB 2 }

   -- This section defines the well-known notifications sent by
   -- UPS agents.
   -- Care must be taken to insure that no particular notification
   -- is sent to a single receiving entity more often than once
   -- every five seconds.

   upsTrapOnBattery TRAP-TYPE
       ENTERPRISE       upsTraps
       VARIABLES { upsEstimatedMinutesRemaining, upsSecondsOnBattery,
		 upsConfigLowBattTime }
       DESCRIPTION
	       "The UPS is operating on battery power.  This trap is
	       persistent and is resent at one minute intervals until
	       the UPS either turns off or is no longer running on
	       battery."
     ::= 1

   upsTrapTestCompleted TRAP-TYPE
       ENTERPRISE       upsTraps
       VARIABLES { upsTestId, upsTestSpinLock,
		 upsTestResultsSummary, upsTestResultsDetail,
		 upsTestStartTime, upsTestElapsedTime }
       DESCRIPTION
	       "This trap is sent upon completion of a UPS diagnostic
	       test."
     ::= 2

   upsTrapAlarmEntryAdded TRAP-TYPE
       ENTERPRISE       upsTraps
       VARIABLES { upsAlarmId, upsAlarmDescr }
       DESCRIPTION
	       "This trap is sent each time an alarm is inserted into
	       to the alarm table.  It is sent on the insertion of
	       all alarms except for upsAlarmOnBattery and
	       upsAlarmTestInProgress."
     ::= 3

   upsTrapAlarmEntryRemoved TRAP-TYPE
       ENTERPRISE       upsTraps
       VARIABLES { upsAlarmId, upsAlarmDescr }
       DESCRIPTION
	       "This trap is sent each time an alarm is removed from
	       the alarm table.  It is sent on the removal of all
	       alarms except for upsAlarmTestInProgress."
     ::= 4


   END
