-------------------------------------------------------------------------------
--
--   FILE         ATTO Bridge Private SNMP MIB
--
--   DESCRIPTION  Bridge SNMP Management Information Base
--
--   THIS PROGRAM AND THE INFORMATION CONTAINED HEREIN IS THE PROPERTY OF
--   ATTO TECHNOLOGY, INC. AND SHALL NOT BE REPRODUCED, COPIED, OR USED IN
--   WHOLE OR IN PART OTHER THAN AS PROVIDED FOR IN THE LICENSE AGREEMENT
--   PURSUANT TO WHICH IT WAS FURNISHED.
--
--   COPYRIGHT (c) ATTO TECHNOLOGY, INC. 1996 - 2006
--   ALL RIGHTS RESERVED.
--
-------------------------------------------------------------------------------

-------------------------------------------------------------------------------
-- Standard version
-------------------------------------------------------------------------------
ATTOBRIDGE-MIB DEFINITIONS ::= BEGIN
    IMPORTS
        IpAddress, experimental, enterprises
            FROM RFC1155-SMI
        ifIndex, DisplayString
            FROM RFC1213-MIB
        NOTIFICATION-TYPE
            FROM SNMPv2-SMI;

--
-- According to ftp://ftp.isi.edu/in-notes/iana/assignments/enterprise-numbers,
-- ATTO's enterprise number is registered as being 4547.
--
attotech                OBJECT IDENTIFIER ::= { enterprises 4547 }
products                OBJECT IDENTIFIER ::= { attotech 1 }

bridge             MODULE-IDENTITY 
    LAST-UPDATED "200509200000Z"    -- 20 Sep, 2005
    ORGANIZATION "ATTO Technology, Inc."
    CONTACT-INFO
        "ATTO"
    DESCRIPTION
        "Bridge Custom MIB"
  ::= { products 2 }

bridgeConfig            OBJECT IDENTIFIER ::= { bridge 1 }
bridgeStatus            OBJECT IDENTIFIER ::= { bridge 2 }
bridgeTrapInfo          OBJECT IDENTIFIER ::= { bridge 3 }
--bridgeTraps           OBJECT IDENTIFIER ::= { bridge 4 }

-------------------------------------------------------------------------------
-- OBJECT DEFINITIONS
-------------------------------------------------------------------------------
trapsEnabled OBJECT-TYPE
    SYNTAX      INTEGER { disabled(1), enabled(2) }
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "Indicates whether traps are enabled or disabled."
    ::= { bridgeConfig 1 }

snmpUpdatesEnabled OBJECT-TYPE
    SYNTAX      INTEGER { disabled(1), enabled(2) }
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "Indicates whether SNMP updates are enabled or disabled."
    ::= { bridgeConfig 2 }

snmpExtendedEnabled OBJECT-TYPE
    SYNTAX      INTEGER { disabled(1), enabled(2) }
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "Indicates whether extended SNMP is enabled or disabled."
    ::= { bridgeConfig 3 }

-------------------------------------------------------------------------------
-- OBJECT TABLE DEFINITIONS
-------------------------------------------------------------------------------

--
--
-- Temperature Sensor Table
--
tempSensorTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF TempSensorEntry
    ACCESS      not-accessible
    STATUS      mandatory
    DESCRIPTION "The temperature sensor table stores information about 
                 the bridge temperature sensor."
    ::= { bridgeStatus 1 }

tempSensorEntry OBJECT-TYPE
    SYNTAX      TempSensorEntry
    ACCESS      not-accessible
    STATUS      mandatory
    DESCRIPTION "The temperature sensor table stores information about 
                 the bridge temperature sensor."
    INDEX       { tempSensorIndex }
    ::= { tempSensorTable 1 }

TempSensorEntry ::= SEQUENCE {
                              tempSensorIndex   INTEGER,
                              tempSensorStatus  INTEGER,
                              temperature       INTEGER
                             }

tempSensorIndex OBJECT-TYPE
    SYNTAX      INTEGER (1..3)
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "Used to index the sensor in the temperature
                 sensor table."
    ::= { tempSensorEntry 1 }

tempSensorStatus OBJECT-TYPE
    SYNTAX      INTEGER { normal(1), warning(2), critical(3), unknown(4) }
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "The current status of the sensor (normal, warning or critical)."
    ::= { tempSensorEntry 2 }

temperature OBJECT-TYPE
    SYNTAX      INTEGER
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "The current temperature of the sensor."
    ::= { tempSensorEntry 3 }

--
--
-- Voltage Sensor Table
--
voltageSensorTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF VoltageSensorEntry
    ACCESS      not-accessible
    STATUS      mandatory
    DESCRIPTION "The voltage sensor table stores information about 
                 the bridge voltage sensor."
    ::= { bridgeStatus 2 }

voltageSensorEntry OBJECT-TYPE
    SYNTAX      VoltageSensorEntry
    ACCESS      not-accessible
    STATUS      mandatory
    DESCRIPTION "The voltage sensor table stores information about 
                 the bridge voltage sensor."
    INDEX       { voltageSensorIndex }
    ::= { voltageSensorTable 1 }

VoltageSensorEntry ::= SEQUENCE {
                              voltageSensorIndex   INTEGER,
                              voltageSensorStatus  INTEGER,
                              voltage       INTEGER
                             }

voltageSensorIndex OBJECT-TYPE
    SYNTAX      INTEGER (1..3)
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "Used to index the sensor in the voltage
                 sensor table."
    ::= { voltageSensorEntry 1 }

voltageSensorStatus OBJECT-TYPE
    SYNTAX      INTEGER { normal(1), warning(2), critical(3), unknown(4) }
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "The current status of the sensor (normal, warning or critical)."
    ::= { voltageSensorEntry 2 }

voltage OBJECT-TYPE
    SYNTAX      INTEGER
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "The current voltage of the sensor."
    ::= { voltageSensorEntry 3 }

--
--
-- Device Table
--
deviceCount OBJECT-TYPE
    SYNTAX      Counter
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "Number of devices present."
    ::= { bridgeStatus 4 }

deviceCacheTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF DeviceEntry
    ACCESS      not-accessible
    STATUS      mandatory
    DESCRIPTION "The device table stores information about the devices
                 attached to the bridge."
    ::= { bridgeStatus 5 }

deviceEntry OBJECT-TYPE
    SYNTAX      DeviceEntry
    ACCESS      not-accessible
    STATUS      mandatory
    DESCRIPTION "The device table stores information about the devices
                 attached to the bridge."
    INDEX       { deviceCacheIndex }
    ::= { deviceCacheTable 1 }

DeviceEntry ::= SEQUENCE {
                              deviceCacheIndex  INTEGER,
                              deviceSource      DisplayString,
                              deviceDestination DisplayString,
                              deviceType        DisplayString,
                              deviceVendor      DisplayString,
                              deviceProduct     DisplayString,
                              deviceRevision    DisplayString,
                              deviceState       INTEGER
                             }

deviceCacheIndex OBJECT-TYPE
    SYNTAX      INTEGER (1..64)
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "Used to index the device table."
    ::= { deviceEntry 1 }

deviceSource OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..79))
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "A string representing the source interface, meaning the 
                 interface exposed to the host."
    ::= { deviceEntry 2 }

deviceDestination OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..79))
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "A string representing the destination interface, meaning 
                 the interface of the target device."
    ::= { deviceEntry 3 }

deviceType OBJECT-TYPE
    SYNTAX DisplayString (SIZE (0..16)) 
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "Device type (i.e. DISK, TAPE, etc.) of attached device."
    ::= { deviceEntry 4 }

deviceVendor OBJECT-TYPE
    SYNTAX DisplayString (SIZE (0..8)) 
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "Vendor name of attached device, from inquiry data."
    ::= { deviceEntry 5 }

deviceProduct OBJECT-TYPE
    SYNTAX DisplayString (SIZE (0..16))
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "Product name of attached device, from inquiry data."
    ::= { deviceEntry 6 }

deviceRevision OBJECT-TYPE
    SYNTAX DisplayString (SIZE (0..4))
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "Revision of attached device, from inquiry data."
    ::= { deviceEntry 7 }

deviceState OBJECT-TYPE
    SYNTAX      INTEGER { offline(0), online(1) }
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "The current state of the device (online, offline, or unknown)."
    ::= { deviceEntry 8 }


--
--
-- Error Table
--
errorCount OBJECT-TYPE
    SYNTAX      Counter
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "Number of errors that have occured since last bridge
                 power-on or reset."
    ::= { bridgeStatus 6 }

errorsSinceUpdate OBJECT-TYPE
    SYNTAX      Counter
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "Number of errors that have occured since last MIB scan,
                 which is approximately every 15sec."
    ::= { bridgeStatus 7 }

errorTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF ErrorEntry
    ACCESS      not-accessible
    STATUS      mandatory
    DESCRIPTION "The Device Error table stores information about errors that
                 have occurred with the devices attached to the bridge."
    ::= { bridgeStatus 8 }

errorEntry OBJECT-TYPE
    SYNTAX      ErrorEntry
    ACCESS      not-accessible
    STATUS      mandatory
    DESCRIPTION "The Device Error table stores information about errors that
                 have occurred with the devices attached to the bridge."
    INDEX       { errorIndex }
    ::= { errorTable 1 }

ErrorEntry ::= SEQUENCE {
                              errorIndex       INTEGER,
                              errorDateStamp   DisplayString,
                              errorTimeStamp   DisplayString,
                              errorInitiator   DisplayString,
                              errorSource      DisplayString,
                              errorOpCode      INTEGER,
                              errorSenseKey    INTEGER,
                              errorASC         INTEGER,
                              errorASCQ        INTEGER,
                              errorLogSense    OCTET STRING
                             }

errorIndex OBJECT-TYPE
    SYNTAX      INTEGER
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "Used to index the error device table."
    ::= { errorEntry 1 }

errorDateStamp OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..11))
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "Date at which the error occurred."
    ::= { errorEntry 2 }

errorTimeStamp OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..9))
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "Time at which the error occurred."
    ::= { errorEntry 3 }

errorInitiator OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..79))
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "A string representing the initiator which issued the 
                 failed command."
    ::= { errorEntry 4 }

errorSource OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..79))
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "A string representing the source interface, meaning the 
                 interface exposed to the host, which is associated with 
                 the error."
    ::= { errorEntry 5 }

errorOpCode OBJECT-TYPE
    SYNTAX      INTEGER 
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "OpCode of the command which failed."
    ::= { errorEntry 6 }

errorSenseKey OBJECT-TYPE
    SYNTAX      INTEGER 
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "Sense Key returned as a result of the failed command."
    ::= { errorEntry 7 }

errorASC OBJECT-TYPE
    SYNTAX      INTEGER 
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "ASC returned as a result of the failed command."
    ::= { errorEntry 8 }

errorASCQ OBJECT-TYPE
    SYNTAX      INTEGER 
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "ASCQ returned as a result of the failed command."
    ::= { errorEntry 9 }

errorLogSense OBJECT-TYPE
    SYNTAX      OCTET STRING (SIZE(64))
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "Log Sense returned as a result of the failed command."
    ::= { errorEntry 10 }

-------------------------------------------------------------------------------
-- TRAP DEFINITIONS
-------------------------------------------------------------------------------
trapMaxClients OBJECT-TYPE
    SYNTAX      INTEGER
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "The maximum number of SNMP trap recipients supported by the
                 unit."
    ::= { bridgeTrapInfo 1 }

--
-- Currently not supported
--
--trapClientCount OBJECT-TYPE
--    SYNTAX      INTEGER
--    ACCESS      not-accessible
--    STATUS      mandatory
--    DESCRIPTION "The current number of rows in the trap table."
--    ::= { bridgeTrapInfo 2 }

--
-- Trap table definition
--
trapClientTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF TrapClientEntry
    ACCESS      not-accessible
    STATUS      mandatory
    DESCRIPTION "A table containing a row for each IP address/port number that
                 traps will be sent to."
    ::= { bridgeTrapInfo 3 }

trapClientEntry OBJECT-TYPE
    SYNTAX      TrapClientEntry
    ACCESS      not-accessible
    STATUS      mandatory
    DESCRIPTION "Ip/Port pair for a specific client."
    INDEX       { trapClientIndex }
    ::= { trapClientTable 1 }

TrapClientEntry ::= SEQUENCE {
                        trapClientIndex       INTEGER,
                        trapClientIpAddress   IpAddress,
                        trapClientPort        INTEGER,
                        trapClientFilter      INTEGER,
                        trapClientRowState    INTEGER
                       }

trapClientIndex OBJECT-TYPE
    SYNTAX      INTEGER
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "Used to index a trap client in the trapClientTable."
    ::= { trapClientEntry 1 }

trapClientIpAddress OBJECT-TYPE
    SYNTAX      IpAddress
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "The IP address of a client registered for traps in 
                 dotted notation."
    ::= { trapClientEntry 2 }

trapClientPort OBJECT-TYPE
    SYNTAX      INTEGER (1..2147483647)
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "The UDP port to send traps for this host.  Normally this would
                 be the standard trap port (162).  This object is an index and
                 must be specified to create a row in this table."
    ::= { trapClientEntry 3 }

trapClientFilter OBJECT-TYPE
    SYNTAX      INTEGER {
                         none          (1),
                         critical      (2),
                         warning       (3),
                         informational (4),
                         all           (5)
                       }
    ACCESS      read-only
    STATUS      mandatory
    DESCRIPTION "This value defines the trap severity filter for this trap
                 host.  The unit will send traps to this host that have a
                 severity level less than or equal to this value.  The
                 default value of this object is 'warning'."
    ::= { trapClientEntry 4 }

trapClientRowState OBJECT-TYPE
    SYNTAX      INTEGER {
                         rowDestroy(1),  -- Remove row from table
                         rowInactive(2), -- Row exists, but Traps disabled
                         rowActive(3)    -- Row exists and is enabled for
                                         -- sending traps
                       }
    ACCESS      read-write
    STATUS      mandatory
    DESCRIPTION "Specifies the state of the row.
                    rowDestroy
                        READ  : Can never happen
                        WRITE : Remove this row from the table.
                    rowInactive
                        READ  : Indicates that this row does not exist, but
                                that traps are not enabled to be sent to the
                                target.
                        WRITE : If the row does not exist, and the agent allows
                                writes to the trap table, then a new row is
                                created.  The values of the optional columns
                                will be set to default values.  Traps are not
                                enabled to be sent to the target.  If the row
                                already existed, then traps are disabled from
                                being sent to the target.
                    rowActive
                        READ  : Indicates that this row exists, and that traps
                                are enabled to be sent to the target.
                        WRITE : If the row does not exist, and the agent allows
                                writes to the trap table, then a new row is
                                created.  The values of the optional columns
                                will be set to default traps.  If the row
                                already exists then traps are enabled to be
                                sent to the target.

                A value of rowActive or rowInactive must be specified to create
                a row in the table."
    ::= { trapClientEntry 5 }

--
-- Bridge specific traps
--
bridgeTempStatusChanged TRAP-TYPE
    ENTERPRISE  attotech
    VARIABLES   { tempSensorIndex, tempSensorStatus, temperature }
    DESCRIPTION "The bridgeTempStatusChanged trap supports notification of
                 temperature status changes in the bridge.
                 
                 The following information is returned:
                    tempSensorIndex  - the sensor of concern
                    tempSensorStatus - the current status of the sensor
                                       (normal, warning, critical)
                    temperature      - current temperature of the sensor

                 Recommended severity level (for filtering): warning"
    ::= 1

bridgeVoltageStatusChanged TRAP-TYPE
    ENTERPRISE  attotech
    VARIABLES   { voltageSensorIndex, voltageSensorStatus, voltage }
    DESCRIPTION "The bridgeVoltageStatusChanged trap supports notification of
                 temperature status changes in the bridge.
                 
                 The following information is returned:
                    voltageSensorIndex  - the sensor of concern
                    voltageSensorStatus - the current status of the sensor
                                       (normal, warning, critical)
                    voltage             - current temperature of the sensor

                 Recommended severity level (for filtering): warning"
    ::= 2

bridgeDeviceTransition TRAP-TYPE
    ENTERPRISE  attotech
    VARIABLES   { deviceCacheIndex, deviceSource, deviceState }
    DESCRIPTION "The bridgeDeviceTransition trap supports notification of
                 device online/offline status changes in the bridge.
                 
                 The following information is returned:
                    deviceCacheIndex - the device of concern
                    deviceSource     - the description of the source device
					deviceState      - the current state of the device

                 Recommended severity level (for filtering): informational"
    ::= 4

bridgeDeviceError TRAP-TYPE
    ENTERPRISE  attotech
    VARIABLES   { errorSource, errorOpCode, errorSenseKey, 
                  errorASC, errorASCQ, errorsSinceUpdate }
    DESCRIPTION "The bridgeDeviceTransition trap supports notification of
                 device online/offline status changes in the bridge.
                 
                 The following information is returned:
                    errorSource       - the description of the source device
				    errorOpCode       - the offending command
					errorSenseKey     - the sense key returned by the device
					errorASC          - the ASC returned by the device
					errorASCQ         - the ASCQ returned by the device
					errorsSinceUpdate - the number of errors in the past 15sec

                 Recommended severity level (for filtering): informational"
    ::= 5

END

-------------------------------------------------------------------------------
