-- CISCO-PORT-STORM-CONTROL-MIB.my
-- MIB support for the Port Storm Control Feature
--   

-- Copyright (c) 2003, 2007 by Cisco Systems, Inc.
-- All rights reserved

CISCO-PORT-STORM-CONTROL-MIB DEFINITIONS ::= BEGIN

IMPORTS
    MODULE-IDENTITY,
    OBJECT-TYPE,
    NOTIFICATION-TYPE,
    Integer32,
    Counter64
        FROM SNMPv2-SMI
    MODULE-COMPLIANCE,
    OBJECT-GROUP,
    NOTIFICATION-GROUP
        FROM SNMPv2-CONF
    ifIndex
        FROM IF-MIB
    TruthValue,
    TEXTUAL-CONVENTION,
    TimeStamp
        FROM SNMPv2-TC
    ciscoMgmt
        FROM CISCO-SMI;


ciscoPortStormControlMIB MODULE-IDENTITY
    LAST-UPDATED    "200710190000Z"
    ORGANIZATION    "Cisco Systems, Inc."
    CONTACT-INFO
            "Cisco Systems
            Customer Services

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

            Tel: +1 800 553-NETS
            E-mail: cs-lan-switch-snmp@cisco.com"
    DESCRIPTION
        "The MIB module for managing Cisco Port Storm Control."
    REVISION        "200710190000Z"
    DESCRIPTION
        "cpscEvent notification is deprecated and replaced by new
        notification cpscEventRev1."
    REVISION        "200307030000Z"
    DESCRIPTION
        "Initial version of this MIB module."
    ::= { ciscoMgmt 362 }


-- A LAN storm occurs when packets flood the LAN creating excessive
-- traffic. Storm control is a mechanism to mitigate the effect of
-- the storm, by controlling the amount of received broadcast,
-- multicast, or unicast traffic.
--   
-- The port storm control MIB allows the Network Management Station
-- to configure the storm control feature on supported physical
-- interfaces.
--   

--   
-- MIB Groups

ciscoPortStormControlMIBNotifs  OBJECT IDENTIFIER
    ::= { ciscoPortStormControlMIB 0 }

ciscoPortStormControlMIBObjects  OBJECT IDENTIFIER
    ::= { ciscoPortStormControlMIB 1 }

ciscoPortStormControlMIBConform  OBJECT IDENTIFIER
    ::= { ciscoPortStormControlMIB 2 }

cpscConfigObjects  OBJECT IDENTIFIER
    ::= { ciscoPortStormControlMIBObjects 1 }

cpscStatusObjects  OBJECT IDENTIFIER
    ::= { ciscoPortStormControlMIBObjects 2 }


-- Textual Conventions
--   

--   
-- Traffic Types that can be regulated by Storm Control

CPortStormControlTrafficType ::= TEXTUAL-CONVENTION
    STATUS          current
    DESCRIPTION
        "The type of traffic that can be configured to be
        regulated per physical interface."
    SYNTAX          INTEGER  {
                        broadcast(1),
                        multicast(2),
                        unicast(3),
                        all(4)
                    }

-- Storm control Action that the user can configure on a port

CPortStormControlActionType ::= TEXTUAL-CONVENTION
    STATUS          current
    DESCRIPTION
        "The type of storm control action that is configured on
        a port.

        An action of filter indicates that packets should be 
        filtered if a storm event is detected on a port.

        An action of shutdown indicates that the port should be 
        shutdown if a storm event is detected on a port."
    SYNTAX          INTEGER  {
                        filter(1),
                        shutdown(2)
                    }

CPortStormControlStatusType ::= TEXTUAL-CONVENTION
    STATUS          current
    DESCRIPTION
        "The current status of storm control on a given
        interface for a given traffic type.

        inactive - Indicates that storm control is not enabled
                   for the given traffic type.

        forwarding - Indicates that storm control is monitoring
                     the traffic type, but no storm event has
                     been detected.

        trafficTypeFiltered - Indicates that a storm event has
                              has occurred and the particular
                              traffic type is being filtered

        allTrafficFiltered - Indicates that a storm event has 
                             occurred and all traffic received
                             on the interface is being filtered

        shutdown -  Indicates that the interface has been
                    shutdown in response to a storm event."
    SYNTAX          INTEGER  {
                        inactive(1),
                        forwarding(2),
                        trafficTypeFiltered(3),
                        allTrafficFiltered(4),
                        shutdown(5)
                    }
-- Storm Control Configuration
-- A management station needs to do a couple of things to
-- configure storm control on an interface
-- One is to configure the thresholds for the particular traffic
-- type(s) and the other is to configure the desired action

cpscThresholdTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF CPortSCThresholdEntry 
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "A table of storm control threshold configuration entries."
    ::= { cpscConfigObjects 1 }

cpscThresholdEntry OBJECT-TYPE
    SYNTAX          CPortSCThresholdEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "A collection of storm control threshold configuration
        entries.

        Storm control can be configured for multiple traffic types
        on a given interface. One entry is created for each
        interface and the traffic type that can be monitored by
        the device."
    INDEX           {
                        ifIndex,
                        cpscTrafficType
                    } 
    ::= { cpscThresholdTable 1 }

CPortSCThresholdEntry ::= SEQUENCE {
        cpscTrafficType    CPortStormControlTrafficType,
        cpscUpperThreshold INTEGER,
        cpscLowerThreshold INTEGER
}

cpscTrafficType OBJECT-TYPE
    SYNTAX          CPortStormControlTrafficType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object identifies a particular traffic type
        for which a management station desires to configure
        storm control on the given interface (which is identified
        by its ifIndex)." 
    ::= { cpscThresholdEntry 1 }

cpscUpperThreshold OBJECT-TYPE
    SYNTAX          INTEGER (0..10000)
    UNITS           "0.01 Percentage"
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
        "This object represents the upper threshold of total
        amount of a particular traffic type that can be seen
        on a given interface, after which a storm event is
        declared and storm control action is taken.

        The value represents the traffic as a percentage of
        total bandwidth of the interface, in units of 0.01 %.

        For example, if a management station sets the value of
        cpscUpperThreshold.3.1 as 4000, it means the 
        following:
            a) storm control is enabled on the interface with 
               ifIndex = 3 for broadcast (1) packets
            b) if the broadcast traffic received per second
               on the interface is more than (4000*0.01 = 40%) of
               the total interface bandwidth, then the system will
               take storm control actions, as indicated by
               cpscAction.3 .

        It should be noted that setting the upper threshold value
        to anything other than 100% results in storm control being
        automatically enabled on the given interface, for the
        given traffic type.

        An implementation may not be able to support different
        threshold values for different traffic types, in which
        case changing the value for one traffic type will 
        automatically result in the threshold value for other
        types also modified.

        The default value of this object is implementation-
        dependent." 
    ::= { cpscThresholdEntry 2 }

cpscLowerThreshold OBJECT-TYPE
    SYNTAX          INTEGER (0..10000)
    UNITS           "0.01 Percentage"
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
        "This object represents the lower threshold of total
        amount of a particular traffic type.

        When a filter action (see cpscAction) is
        in effect on an interface because of a previous storm 
        event, the value of this object determines when the 
        system will stop the filter action. 

        The value represents traffic as percent of total bandwidth
        of the interface, in units of 0.01 %.
        For example, if a broadcast(1) storm occurred on an 
        interface with ifIndex 3, and the value of 
        cpscLowerThreshold.3.1 is 2500 (25%), then 
        the system will stop filtering broadcast traffic on that
        interface if it drops below 25% of the total bandwidth.

        This value will be ignored if a shutdown action is 
        configured. The value of this object must be
        equal to or less than the value of the upper threshold
        specified by cpscUpperThreshold for the same entry.

        The default value of this object is implementation-
        dependent.

        On platforms that only support one threshold level for 
        this traffic type and interface,this object is read-only
        and always has the same value of  the corresponding 
        cpscUpperThreshold for the same entry." 
    ::= { cpscThresholdEntry 3 }
 

-- Per interface storm action configuration table

cpscActionTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF CPortSCActionEntry 
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "A table of storm control action entries."
    ::= { cpscConfigObjects 2 }

cpscActionEntry OBJECT-TYPE
    SYNTAX          CPortSCActionEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "An entry containing the storm control action
        configuration information. An entry is created for each
        interface that can support the storm control feature."
    INDEX           { ifIndex } 
    ::= { cpscActionTable 1 }

CPortSCActionEntry ::= SEQUENCE {
        cpscAction              CPortStormControlActionType,
        cpscNotificationControl INTEGER 
}

cpscAction OBJECT-TYPE
    SYNTAX          CPortStormControlActionType
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
        "This object represents the storm control action
        taken when the traffic of a particular type exceeds
        the configured upper threshold values." 
    ::= { cpscActionEntry 1 }

cpscNotificationControl OBJECT-TYPE
    SYNTAX          INTEGER  {
                        none(1),
                        stormOccurred(2),
                        stormCleared(3),
                        both(4)
                    }
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
        "This object controls when a storm control notification
        will be generated.

        If the object is set to none(1), no notifications will
        be generated.

        A notification will be generated when a storm event is
        detected or cleared when the object is set to
        stormOccurred(2) or stormCleared(3) respectively.

        If the object is set to both(4), a notification will be
        generated both when a storm event is detected and
        cleared. 

        NOTE:
            a) The default value of this object is none(1).
            b) Irrespective of the value of this object, the
            value of the global object cpscNotificationThreshold
            controls whether or not a notification will be
            generated at a given point." 
    ::= { cpscActionEntry 2 }
 


-- Global Storm control notification configuration

cpscNotificationThreshold OBJECT-TYPE
    SYNTAX          INTEGER (0..1000)
    UNITS           "Notifications per Minute"
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
        "The value of object controls the global rate of storm
        control notifications generated by an entity per minute. 

        A value of 0 indicates no limit, and the entity will
        generate notifications for each storm event as governed by
        the cpscNotificationControl for a given interface." 
    ::= { cpscConfigObjects 3 }
-- Storm control status information

cpscStatusTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF CPortSCStatusEntry 
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "A table of storm control status entries."
    ::= { cpscStatusObjects 1 }

cpscStatusEntry OBJECT-TYPE
    SYNTAX          CPortSCStatusEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "A collection of storm control status entries, one per
        interface and traffic type.

        An entry is created for each storm control capable
        interface and the traffic type with the storm control
        status information."
    INDEX           {
                        ifIndex,
                        cpscTrafficType
                    } 
    ::= { cpscStatusTable 1 }

CPortSCStatusEntry ::= SEQUENCE {
        cpscStatus           CPortStormControlStatusType,
        cpscCurrentLevel     INTEGER,
        cpscSuppressedPacket Counter64
}

cpscStatus OBJECT-TYPE
    SYNTAX          CPortStormControlStatusType
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object identifies the status of storm control
        on the interface (identified by ifIndex) corresponding
        to a particular traffic type (identified by    
        cpscTrafficType).

        A value of inactive indicates that no storm control
        has been enabled on the interface for the traffic type." 
    ::= { cpscStatusEntry 1 }

cpscCurrentLevel OBJECT-TYPE
    SYNTAX          INTEGER (0..10000)
    UNITS           "0.01 Percentage"
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object identifies the current level of traffic of
        a particular type on a given interface, as a percentage
        of the total interface bandwidth.

        When storm control is inactive, the value is 10000,
        indicating the maximum level (100% of the particular
        traffic type is allowed to be received)." 
    ::= { cpscStatusEntry 2 }

cpscSuppressedPacket OBJECT-TYPE
    SYNTAX          Counter64
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object represents the total number of packets
        of a particular traffic type that have been suppressed
        on a given interface by storm control filter action." 
    ::= { cpscStatusEntry 3 }
 

-- Storm control history table
-- Provides information about storm events that
-- occurred on a given interface, if available

cpscHistoryTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF CPortSCHistoryEntry 
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "A conceptual table to represent the history
        of storm events on an interface.

        Management station can use this to get 
        information about the timeline of storm events as
        to when each event occurred, and when it ended."
    ::= { cpscStatusObjects 2 }

cpscHistoryEntry OBJECT-TYPE
    SYNTAX          CPortSCHistoryEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "A collection of storm control history entries
        per interface and per traffic type. The number of such
        entries available is implementation-dependent."
    INDEX           {
                        ifIndex,
                        cpscHistoryTrafficType,
                        cpscHistoryIndex
                    } 
    ::= { cpscHistoryTable 1 }

CPortSCHistoryEntry ::= SEQUENCE {
        cpscHistoryTrafficType CPortStormControlTrafficType,
        cpscHistoryIndex       Integer32,
        cpscHistoryStartTime   TimeStamp,
        cpscHistoryEndTime     TimeStamp
}

cpscHistoryTrafficType OBJECT-TYPE
    SYNTAX          CPortStormControlTrafficType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "The traffic type corresponding to this storm history
        entry." 
    ::= { cpscHistoryEntry 1 }

cpscHistoryIndex OBJECT-TYPE
    SYNTAX          Integer32 (1..1024 )
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "A number that uniquely identifies one storm control
        history entry for a given interface. The index starts
        at 1 and increases by 1. 

        Although this MIB specification stipulates a maximum of 
        1K entries, the actual maximum number of history entries
        returned per interface is implementation-dependent.

        When the value of this index reaches the actual maximum 
        number of entries supported by an implementation, it will
        wrap around to 1." 
    ::= { cpscHistoryEntry 2 }

cpscHistoryStartTime OBJECT-TYPE
    SYNTAX          TimeStamp
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "The value of sysUpTime when the storm event was declared
        on the interface for the particular traffic type, and 
        storm control measures were taken." 
    ::= { cpscHistoryEntry 3 }

cpscHistoryEndTime OBJECT-TYPE
    SYNTAX          TimeStamp
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "The value of sysUpTime when the storm ceased to exist
        and the interface was set to its previous normal state.

        If the interface was shutdown due to user configuration,
        then the value will be equal to the value of sysUpTime 
        when the interface was shutdown.

        If the storm event continues to persist when this object
        is queried, the value returned will be 0." 
    ::= { cpscHistoryEntry 4 }
 

-- Notifications

cpscNotificationsPrefix  OBJECT IDENTIFIER
    ::= { ciscoPortStormControlMIBNotifs 1 }


cpscEventRev1 NOTIFICATION-TYPE
    OBJECTS         { cpscStatus }
    STATUS          current
    DESCRIPTION
        "This notification is sent by the implementation when
        a storm event occurs on an interface with respect to
        a particular traffic type.
        cpscEventRev1 deprecates cpscEvent to make it RFC 2578
        compliant. According to section 8.5 of RFC 2578, the next
        to last sub-identifier in the name of any newly-defined
        notification must have the value zero."
   ::= { ciscoPortStormControlMIBNotifs 2 }

cpscEvent NOTIFICATION-TYPE
    OBJECTS         { cpscStatus }
    STATUS          deprecated
    DESCRIPTION
        "This notification is sent by the implementation when
        a storm event occurs on an interface with respect to
        a particular traffic type.
        cpscEvent is deprecated and replaced by cpscEventRev1."
   ::= { cpscNotificationsPrefix 1 }
-- MIB Conformance statements

ciscoPortStormControlMIBCompliances  OBJECT IDENTIFIER
    ::= { ciscoPortStormControlMIBConform 1 }

ciscoPortStormControlMIBGroups  OBJECT IDENTIFIER
    ::= { ciscoPortStormControlMIBConform 2 }


ciscoPortStormControlMIBCompliance MODULE-COMPLIANCE
    STATUS          deprecated
    DESCRIPTION
        "The compliance statement for the cisco port storm
        control MIB."
    MODULE          -- this module
    MANDATORY-GROUPS { cpscConfigurationGroup }

    GROUP           cpscNotifConfigurationGroup
    DESCRIPTION
        "This group is mandatory if the managed system supports
        notifications for storm events."

    GROUP           cpscNotificationGroup
    DESCRIPTION
        "This group is mandatory if the managed system supports
        notifications for storm events."

    GROUP           cpscStatusGroup
    DESCRIPTION
        "This group is mandatory if the storm control status
        information is available in the managed system."

    GROUP           cpscStatisticsGroup
    DESCRIPTION
        "This group is mandatory if the storm control statistics
        information is available in the managed system."

    GROUP           cpscHistoryGroup
    DESCRIPTION
        "This group is mandatory if the managed system maintains
        such storm control history information."

    OBJECT          cpscLowerThreshold
    MIN-ACCESS      read-only
    DESCRIPTION
        "Write access is not required."

    OBJECT          cpscAction
    MIN-ACCESS      read-only
    DESCRIPTION
        "Write access is not required."
    ::= { ciscoPortStormControlMIBCompliances 1 }

ciscoPortStormControlMIBComplianceRev1 MODULE-COMPLIANCE
    STATUS          current
    DESCRIPTION
        "Please enter description here"
    MODULE          -- this module
    MANDATORY-GROUPS { cpscConfigurationGroup }

    GROUP           cpscNotifConfigurationGroup
    DESCRIPTION
        "This group is mandatory if the managed system supports
        notifications for storm events."

    GROUP           cpscNotificationGroupRev1
    DESCRIPTION
        "This group is mandatory if the managed system supports
        notifications for storm events."

    GROUP           cpscStatusGroup
    DESCRIPTION
        "This group is mandatory if the storm control status
        information is available in the managed system."

    GROUP           cpscStatisticsGroup
    DESCRIPTION
        "This group is mandatory if the storm control statistics
        information is available in the managed system."

    GROUP           cpscHistoryGroup
    DESCRIPTION
        "This group is mandatory if the managed system maintains
        such storm control history information."

    OBJECT          cpscLowerThreshold
    MIN-ACCESS      read-only
    DESCRIPTION
        "Write access is not required."

    OBJECT          cpscAction
    MIN-ACCESS      read-only
    DESCRIPTION
        "Write access is not required."
    ::= { ciscoPortStormControlMIBCompliances 2 }

cpscConfigurationGroup OBJECT-GROUP
    OBJECTS         {
                        cpscUpperThreshold,
                        cpscLowerThreshold,
                        cpscAction
                    }
    STATUS          current
    DESCRIPTION
        "A collection of objects to configure the Port Storm
        Control feature on a given interface."
    ::= { ciscoPortStormControlMIBGroups 1 }

cpscStatusGroup OBJECT-GROUP
    OBJECTS         {
                        cpscStatus,
                        cpscCurrentLevel
                    }
    STATUS          current
    DESCRIPTION
        "A collection of objects to provide storm control
        status on a given interface."
    ::= { ciscoPortStormControlMIBGroups 2 }

cpscNotificationGroup NOTIFICATION-GROUP
   NOTIFICATIONS    { cpscEvent }
    STATUS          deprecated
    DESCRIPTION
        "A collection of notification objects for user with
        the cisco port storm control mib."
    ::= { ciscoPortStormControlMIBGroups 3 }

cpscNotifConfigurationGroup OBJECT-GROUP
    OBJECTS         {
                        cpscNotificationControl,
                        cpscNotificationThreshold
                    }
    STATUS          current
    DESCRIPTION
        "A collection of objects to configure notification
        information."
    ::= { ciscoPortStormControlMIBGroups 4 }

cpscStatisticsGroup OBJECT-GROUP
    OBJECTS         { cpscSuppressedPacket }
    STATUS          current
    DESCRIPTION
        "A collection of objects to provide storm control
        statistics information."
    ::= { ciscoPortStormControlMIBGroups 5 }

cpscHistoryGroup OBJECT-GROUP
    OBJECTS         {
                        cpscHistoryStartTime,
                        cpscHistoryEndTime
                    }
    STATUS          current
    DESCRIPTION
        "A collection of objects to provide storm control
        history information on a given interface."
    ::= { ciscoPortStormControlMIBGroups 6 }

cpscNotificationGroupRev1 NOTIFICATION-GROUP
   NOTIFICATIONS    { cpscEventRev1 }
    STATUS          current
    DESCRIPTION
        "A collection of notification objects for user with
        the cisco port storm control mib."
    ::= { ciscoPortStormControlMIBGroups 7 }

END
