-- *****************************************************************
-- CISCO-SEU-MITIGATION.my
--   
-- Copyright (c) 2009 by cisco Systems Inc.
-- All rights reserved.
--   
-- *****************************************************************

CISCO-SEU-MITIGATION-MIB DEFINITIONS ::= BEGIN

IMPORTS
    MODULE-IDENTITY,
    OBJECT-TYPE,
    Counter32,
    NOTIFICATION-TYPE,
    Unsigned32
        FROM SNMPv2-SMI
    MODULE-COMPLIANCE,
    NOTIFICATION-GROUP,
    OBJECT-GROUP
        FROM SNMPv2-CONF
    DisplayString,
    TruthValue,
    DateAndTime
        FROM SNMPv2-TC
    ciscoMgmt
        FROM CISCO-SMI
    EntPhysicalIndexOrZero
        FROM CISCO-TC;


ciscoSeuMitigationMIB MODULE-IDENTITY
    LAST-UPDATED    "200906240000Z"
    ORGANIZATION    "Cisco Systems, Inc."
    CONTACT-INFO
            "Cisco Systems
            Customer Service

            Postal: 170 W Tasman Drive
            San Jose, CA  95134
            USA

            Tel: +1 800 553-NETS

            E-mail: cs-seu-mitigation@cisco.com"
    DESCRIPTION
        "This MIB reports the status of non-automatic and automatic,
        rate-adaptive Single Event Upset (SEU) mitigation algorithms and
        adjusts their parameters, as well as reports the effects of 
        those mitigations on memories, caches, and registers. SEU 
        mitigation allows Cisco IOS to run on radiation tolerant 
        hardware deployed in a geosynchronous Earth orbit satellites for
        IP communications. One of the challenges in deploying equipment 
        in such an environment is the impact that radiation has on 
        digital circuits. A Single Event Upset (SEU) occurs when the 
        hardware is exposed to energetic ions and protons in the space
        environment. The value stored in a bit of information can change
        when a large enough charge is deposited on the digital circuit. 
        This leads to adverse effects in the operation of the software;
        in this case Cisco IOS. While steps have been taken to reduce 
        the occurrence of SEUs through the use of radiation tolerant 
        hardware, these steps do not eliminate the threat. A critical
        requirement in running IOS on such platforms is the utilization
        of SEU mitigation strategies to reduce the impact of such events
        on the operation of the Cisco device.

                 GLOSSARY

        SEU  :   Acronym for 'Single Event Upset' : A hardware 
                 disruption caused when hardware is exposed to energetic
                 ions and protons.

        scrub :  An algorithm that periodically refreshes memory, cache
                 or register contents by various means."
    REVISION        "200906240000Z"
    DESCRIPTION
        "Initial version of this MIB module."
    ::= { ciscoMgmt 701 }


ciscoSeuMitigationMIBNotifs  OBJECT IDENTIFIER
    ::= { ciscoSeuMitigationMIB 0 }

ciscoSeuMitigationMIBObjects  OBJECT IDENTIFIER
    ::= { ciscoSeuMitigationMIB 1 }

ciscoSeuMitigationMIBConform  OBJECT IDENTIFIER
    ::= { ciscoSeuMitigationMIB 2 }

-- ********************************************************

csmScrubTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF CsmScrubEntry 
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This table provides the configuration settings for the
        scrub algorithms. All entries are added with the SEU 
        subsystem is initialized."
    ::= { ciscoSeuMitigationMIBObjects 1 }

csmScrubEntry OBJECT-TYPE
    SYNTAX          CsmScrubEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object represents an entry in the
        csmScrubConfigTable."
    INDEX           { csmScrubIndex } 
    ::= { csmScrubTable 1 }

CsmScrubEntry ::= SEQUENCE {
        csmScrubIndex                  Unsigned32,
        csmScrubEntPhysicalIndex       EntPhysicalIndexOrZero,
        csmScrubScrubName              DisplayString,
        csmScrubRateAdaptive           TruthValue,
        csmScrubAlgorithmEnabled       TruthValue,
        csmScrubRunInterval            Unsigned32,
        csmScrubRunIntervalUnits       DisplayString,
        csmScrubDeltaInterval          Unsigned32,
        csmScrubDeltaIntervalUnits     DisplayString,
        csmScrubRetryInterval          Unsigned32,
        csmScrubRetryIntervalUnits     DisplayString,
        csmScrubCurrentInterval        Unsigned32,
        csmScrubCurrentIntervalUnits   DisplayString,
        csmScrubThresholdInterval      Unsigned32,
        csmScrubThresholdIntervalUnits DisplayString,
        csmScrubThresholdIntervalCount Unsigned32,
        csmScrubThresholdErrorValue    Unsigned32,
        csmScrubRunning                TruthValue,
        csmScrubStatus                 INTEGER,
        csmScrubLastRun                DateAndTime,
        csmScrubPassesCompleted        Unsigned32
}

csmScrubIndex OBJECT-TYPE
    SYNTAX          Unsigned32 (1..1000)
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object uniquely identifies the csmScrubEntry." 
    ::= { csmScrubEntry 1 }

csmScrubEntPhysicalIndex OBJECT-TYPE
    SYNTAX          EntPhysicalIndexOrZero
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object represents the EntityPhysicalIndex (from the
        ENTITY-MIB) corresponding to the physical entity upon which the
        scrub or SEU-mitigation is being performed." 
    ::= { csmScrubEntry 2 }

csmScrubScrubName OBJECT-TYPE
    SYNTAX          DisplayString
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object represents the name of the particular scrub or SEU
        algorithm, such as Memory Scrub, Register Scrub, etc." 
    ::= { csmScrubEntry 3 }

csmScrubRateAdaptive OBJECT-TYPE
    SYNTAX          TruthValue
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object indicates whether the scrub or SEU algorithm is
        rate-adaptive. The values provided by objects 
        csmScrubDeltaInterval, csmScrubRetryInterval, and 
        csmScrubThresholdInterval are only applicable when this 
        object is set to 'true'.
           true  : Algorithm is rate-adaptive.
           false : Algorithm is NOT rate-adaptive." 
    ::= { csmScrubEntry 4 }

csmScrubAlgorithmEnabled OBJECT-TYPE
    SYNTAX          TruthValue
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
        "This object indicates whether the SEU algorithm is
        enabled.
        true  : Algorithm is enabled
        false : Algorithm is disabled" 
    ::= { csmScrubEntry 5 }

csmScrubRunInterval OBJECT-TYPE
    SYNTAX          Unsigned32
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
        "This object represents the amount of wait time between when
        a scrub algorithm finishes its current run and begins its 
        next run."
    DEFVAL          { 60 } 
    ::= { csmScrubEntry 6 }

csmScrubRunIntervalUnits OBJECT-TYPE
    SYNTAX          DisplayString
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object represents the units for csmScrubRunInterval."
    DEFVAL          { "Minutes" } 
    ::= { csmScrubEntry 7 }

csmScrubDeltaInterval OBJECT-TYPE
    SYNTAX          Unsigned32
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
        "This object represents the amount of time that a rate-adaptive
        scrub algorithm increases or decreases the 
        csmScrubRunInterval. The scrub interval is decreased when
        an error interrupt occurs and the 
        cScrubThresholdIntervalCount is exceeded. The scrub 
        interval is increased when the scrub retry timer expires."
    DEFVAL          { 10 } 
    ::= { csmScrubEntry 8 }

csmScrubDeltaIntervalUnits OBJECT-TYPE
    SYNTAX          DisplayString
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object represents the units for csmScrubDeltaInterval."
    DEFVAL          { "Minutes" } 
    ::= { csmScrubEntry 9 }

csmScrubRetryInterval OBJECT-TYPE
    SYNTAX          Unsigned32
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
        "This object represents the amount of time a rate-adaptive scrub
        algorithm waits before increasing the csmScrubRunInterval."
    DEFVAL          { 10 } 
    ::= { csmScrubEntry 10 }

csmScrubRetryIntervalUnits OBJECT-TYPE
    SYNTAX          DisplayString
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object represents the units for
        csmScrubConfigRetryInterval."
    DEFVAL          { "Minutes" } 
    ::= { csmScrubEntry 11 }

csmScrubCurrentInterval OBJECT-TYPE
    SYNTAX          Unsigned32
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object represents the current interval between which
        scrubs or SEU-mitigation runs. A value of 0 (zero) indicates
        that the scrubs or runs are back-to-back." 
    ::= { csmScrubEntry 12 }

csmScrubCurrentIntervalUnits OBJECT-TYPE
    SYNTAX          DisplayString
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object represents the units for csmScrubCurrentInterval." 
    ::= { csmScrubEntry 13 }

csmScrubThresholdInterval OBJECT-TYPE
    SYNTAX          Unsigned32
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
        "This object represents the period of time that a rate-adaptive
        scrub algorithm will check for csmScrubThresholdErrorValue being
        exceeded. If the threshold is exceeded within this sliding time
        window, the scrub rate will increase."
    DEFVAL          { 60 } 
    ::= { csmScrubEntry 14 }

csmScrubThresholdIntervalUnits OBJECT-TYPE
    SYNTAX          DisplayString
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object indicates the units for
        csmScrubConfigThresholdInterval."
    DEFVAL          { "Minutes" } 
    ::= { csmScrubEntry 15 }

csmScrubThresholdIntervalCount OBJECT-TYPE
    SYNTAX          Unsigned32 (1..1000)
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
        "This object represents the number of error interrupts received
        before a rate-adaptive scrub or SEU-mitigation algorithm
        decreases the scrub interval." 
    ::= { csmScrubEntry 16 }

csmScrubThresholdErrorValue OBJECT-TYPE
    SYNTAX          Unsigned32 (1..1000)
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
        "This object represents the error threshold above which,
        when it occurs during sliding window 
        (csmScrubThresholdInterval), the scrub or SEU-mitigation
        rate will increase." 
    ::= { csmScrubEntry 17 }

csmScrubRunning OBJECT-TYPE
    SYNTAX          TruthValue
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object indicates whether the scrub or SEU algorithm is
        running or not.
           true  : Algorithm is running.
           false : Algorithm is NOT running." 
    ::= { csmScrubEntry 18 }

csmScrubStatus OBJECT-TYPE
    SYNTAX          INTEGER  {
                        elevated(1),
                        decreased(2),
                        normal(3)
                    }
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object indicates whether an adaptive scrub or SEU
        algorithm is performing scrubs more frequently (elevated)
        due most likely to more frequent SEUs or decreased due to
        less frequent SEUs, or at a normal rate." 
    ::= { csmScrubEntry 19 }

csmScrubLastRun OBJECT-TYPE
    SYNTAX          DateAndTime
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object represents the date and time a scrub or
        SEU-mitigation algorithm last ran." 
    ::= { csmScrubEntry 20 }

csmScrubPassesCompleted OBJECT-TYPE
    SYNTAX          Unsigned32
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object represents the total number of scrub or
        SEU-mitigations runs since the last 'clear SEU counters' CLI
        (command line interace) command was issued." 
    ::= { csmScrubEntry 21 }
 

-- ********************************************************************

csmScrubErrorsTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF CsmScrubErrorsEntry 
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This table lists the errors and counts for the errors that the
        scrub algorithms are mitigating. All entries are 
        added with the SEU subsystem is initialized."
    ::= { ciscoSeuMitigationMIBObjects 2 }

csmScrubErrorsEntry OBJECT-TYPE
    SYNTAX          CsmScrubErrorsEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object represents an entry in the csmScrubErrorsTable."
    INDEX           { csmScrubErrorsIndex } 
    ::= { csmScrubErrorsTable 1 }

CsmScrubErrorsEntry ::= SEQUENCE {
        csmScrubErrorsIndex               Unsigned32,
        csmScrubErrorsEntPhysicalIndex    EntPhysicalIndexOrZero,
        csmScrubErrorsDescription         DisplayString,
        csmScrubErrorsReference           DisplayString,
        csmScrubErrorsSingleBit           Counter32,
        csmScrubErrorsSingleBitInterrupts Counter32,
        csmScrubErrorsMultibit            Counter32,
        csmScrubErrorsMultibitInterrupts  Counter32
}

csmScrubErrorsIndex OBJECT-TYPE
    SYNTAX          Unsigned32 (1..1000)
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object uniquely identifies the csmScrubEntry." 
    ::= { csmScrubErrorsEntry 1 }

csmScrubErrorsEntPhysicalIndex OBJECT-TYPE
    SYNTAX          EntPhysicalIndexOrZero
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object is represents the EntityPhysicalIndex (from the
        ENTITY-MIB) corresponding to the physical entity upon which the
        scrub or
        SEU-mitigation is being performed." 
    ::= { csmScrubErrorsEntry 2 }

csmScrubErrorsDescription OBJECT-TYPE
    SYNTAX          DisplayString
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object represents the error name and may include things
        such as DDR memory errors, cache errors, register errors, and
        other processor-specific register errors." 
    ::= { csmScrubErrorsEntry 3 }

csmScrubErrorsReference OBJECT-TYPE
    SYNTAX          DisplayString
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object provides a reference to a User's Manual entry, if
        one exists, for processor and other device-specific errors." 
    ::= { csmScrubErrorsEntry 4 }

csmScrubErrorsSingleBit OBJECT-TYPE
    SYNTAX          Counter32
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object counts the single-bit errors for the specific error
        type described by csmScrubErrorsDescription." 
    ::= { csmScrubErrorsEntry 5 }

csmScrubErrorsSingleBitInterrupts OBJECT-TYPE
    SYNTAX          Counter32
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object counts number of interrupts thrown, if any, for
        single-bit errors that occurred for the specific error
        type described by csmScrubErrorsDescription." 
    ::= { csmScrubErrorsEntry 6 }

csmScrubErrorsMultibit OBJECT-TYPE
    SYNTAX          Counter32
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object counts the multi-bit errors for the specific
        error type described by csmScrubErrorsDescription." 
    ::= { csmScrubErrorsEntry 7 }

csmScrubErrorsMultibitInterrupts OBJECT-TYPE
    SYNTAX          Counter32
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object counts number of interrupts thrown, if any, for
        multiple-bit errors that occurred for the specific error
        type described by csmScrubErrorsDescription." 
    ::= { csmScrubErrorsEntry 8 }
 


-- *********************************************************************

csmSeuEventLogMaxEntries OBJECT-TYPE
    SYNTAX          Unsigned32 (1..65535)
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object represents the maximum number of entries
        in the csmSeuEventLogTable." 
    ::= { ciscoSeuMitigationMIBObjects 3 }
-- *********************************************************************

csmSeuEventLogTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF CsmSeuEventLogEntry 
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This table lists any special error and scrub or SEU-mitigation
        algorithm events that may have occurred and is limited to
        csmSeuEventLogMaxEntries. All entries are added with the SEU
        subsystem is initialized."
    ::= { ciscoSeuMitigationMIBObjects 4 }

csmSeuEventLogEntry OBJECT-TYPE
    SYNTAX          CsmSeuEventLogEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object represents an entry in the
        csmSeuEventLogTable."
    INDEX           { csmSeuEventLogIndex } 
    ::= { csmSeuEventLogTable 1 }

CsmSeuEventLogEntry ::= SEQUENCE {
        csmSeuEventLogIndex       Unsigned32,
        csmSeuEventLogDescription DisplayString,
        csmSeuEventLogReference   DisplayString,
        csmSeuEventLogAddress     DisplayString,
        csmSeuEventLogTimeStamp   DateAndTime
}

csmSeuEventLogIndex OBJECT-TYPE
    SYNTAX          Unsigned32
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object uniquely identifies the csmScrubEventLogEntry." 
    ::= { csmSeuEventLogEntry 1 }

csmSeuEventLogDescription OBJECT-TYPE
    SYNTAX          DisplayString (SIZE  (64..255))
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object describes the event of interest." 
    ::= { csmSeuEventLogEntry 2 }

csmSeuEventLogReference OBJECT-TYPE
    SYNTAX          DisplayString
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object provides a reference to a User's Manual entry, if
        one exists, that describes and provides more detail for the
        event of interest." 
    ::= { csmSeuEventLogEntry 3 }

csmSeuEventLogAddress OBJECT-TYPE
    SYNTAX          DisplayString
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object provides the hexadecimal address (if one exists)
        associated with the event that occurred." 
    ::= { csmSeuEventLogEntry 4 }

csmSeuEventLogTimeStamp OBJECT-TYPE
    SYNTAX          DateAndTime
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object provides a date-and-time-stamp for the event that
        occurred." 
    ::= { csmSeuEventLogEntry 5 }
 


-- Default Notification Type

csmSeuScrubAlert NOTIFICATION-TYPE
    OBJECTS         { csmScrubStatus }
    STATUS          current
    DESCRIPTION
        "Notifies NMS when the scrub rate or SEU-mitigation rate
        is elevated, decreased or returns to normal."
   ::= { ciscoSeuMitigationMIBNotifs 1 }
ciscoSeuMitigationMIBCompliances  OBJECT IDENTIFIER
    ::= { ciscoSeuMitigationMIBConform 1 }

ciscoSeuMitigationMIBGroups  OBJECT IDENTIFIER
    ::= { ciscoSeuMitigationMIBConform 2 }


ciscoSeuMitigationMIBCompliance MODULE-COMPLIANCE
    STATUS          current
    DESCRIPTION
        "This is the module-compliance containing default object
        groups."
    MODULE          -- this module
    MANDATORY-GROUPS {
                        ciscoSeuMitigationMIBMainObjectGroup,
                        ciscoSeuMitigationMIBNotificationGroup
                    }
    ::= { ciscoSeuMitigationMIBCompliances 1 }

-- Units of Conformance

ciscoSeuMitigationMIBMainObjectGroup OBJECT-GROUP
    OBJECTS         {
                        csmScrubEntPhysicalIndex,
                        csmScrubAlgorithmEnabled,
                        csmScrubScrubName,
                        csmScrubRateAdaptive,
                        csmScrubRunInterval,
                        csmScrubRunIntervalUnits,
                        csmScrubDeltaInterval,
                        csmScrubDeltaIntervalUnits,
                        csmScrubRetryInterval,
                        csmScrubRetryIntervalUnits,
                        csmScrubThresholdInterval,
                        csmScrubThresholdIntervalUnits,
                        csmScrubCurrentInterval,
                        csmScrubCurrentIntervalUnits,
                        csmScrubThresholdIntervalCount,
                        csmScrubThresholdErrorValue,
                        csmScrubRunning,
                        csmScrubStatus,
                        csmScrubLastRun,
                        csmScrubPassesCompleted,
                        csmScrubErrorsEntPhysicalIndex,
                        csmScrubErrorsDescription,
                        csmScrubErrorsReference,
                        csmScrubErrorsSingleBit,
                        csmScrubErrorsSingleBitInterrupts,
                        csmScrubErrorsMultibit,
                        csmScrubErrorsMultibitInterrupts,
                        csmSeuEventLogMaxEntries,
                        csmSeuEventLogDescription,
                        csmSeuEventLogReference,
                        csmSeuEventLogAddress,
                        csmSeuEventLogTimeStamp
                    }
    STATUS          current
    DESCRIPTION
        "This is the list of objects that are required for an agent to
        support the CISCO-SEU-MITIGATION-MIB."
    ::= { ciscoSeuMitigationMIBGroups 1 }

ciscoSeuMitigationMIBNotificationGroup NOTIFICATION-GROUP
   NOTIFICATIONS    { csmSeuScrubAlert }
    STATUS          current
    DESCRIPTION
        "This is the list of Notifications required for an agent to
        support the CISCO-SEU-MITIGATION-MIB."
    ::= { ciscoSeuMitigationMIBGroups 2 }

END
