--  *****************************************************************
--  DLINKSW-STORM-CTRL-MIB.mib : Storm Control MIB
--
--  Copyright (c) 2013 D-Link Corporation, all rights reserved.
--
--  *****************************************************************
DLINKSW-STORM-CTRL-MIB DEFINITIONS ::= BEGIN

    IMPORTS
           MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE,
           Integer32
               FROM SNMPv2-SMI           
           MODULE-COMPLIANCE, OBJECT-GROUP, NOTIFICATION-GROUP
               FROM SNMPv2-CONF        
           ifIndex, InterfaceIndex
               FROM IF-MIB
           Unsigned32
                FROM SNMPv2-SMI
           dlinkIndustrialCommon        
                FROM DLINK-ID-REC-MIB;
   
   dlinkSwStormCtrlMIB    MODULE-IDENTITY
           LAST-UPDATED "201306130000Z"
           ORGANIZATION "D-Link Corp."
        CONTACT-INFO
            "        D-Link Corporation

             Postal: No. 289, Sinhu 3rd Rd., Neihu District,
                     Taipei City 114, Taiwan, R.O.C
             Tel:     +886-2-66000123
             E-mail: tsd@dlink.com.tw
            "
        DESCRIPTION
            "This MIB module defines objects for Storm Control"
            
        REVISION "201306130000Z"
        DESCRIPTION
            "This is the first version of the MIB file for 'Storm Control'
            functionality."
        ::= { dlinkIndustrialCommon 25 } 

    
    
    DStormCtlTrafficType ::= TEXTUAL-CONVENTION
        STATUS          current
        DESCRIPTION
            "The type of storm control traffic type.
                broadcast(1) - broadcast storm.
            multicast(2) - including unknown L2 multicast, known L2 
                           multicast, unknown IP multicast and known 
                           IP multicast.
            unicast(3) - when the action is configured as 'shutdown mode', 
                         unicast refers to both known and unknown 
                         unicast packet; Otherwise, unicast refers to 
                         unknown unicast packet. "
        SYNTAX  INTEGER  {
            broadcast(1),
            multicast(2),
            unicast(3)
        }   
        
    DStormCtlThrType ::= TEXTUAL-CONVENTION
        STATUS          current
        DESCRIPTION
            "The type of storm control threshold is configured on an interface.
            pps(1) - the threshold is configured as packet count per second. 
            kbps(2) - the threshold is configured as a rate of bits per second. 
            percentage(3) - the threshold is configured as a percentage of total 
                      bandwidth per port. 
            "
        SYNTAX  INTEGER  {
            pps(1),
            kbps(2),
            percentage(3)
        }      
     
    DStormCtlThrTypeValue ::= TEXTUAL-CONVENTION
        STATUS          current
        DESCRIPTION
        "Denotes a generic threshold value.

         A DStormCtlThrTypeValue value is always interpreted within the context
         of a DStormCtlThrType value.  Every usage of the DStormCtlThrTypeValue
         textual convention is required to specify the DStormCtlThrType
         object that provides the context.  
         The unit and valid range are as follows:
         Threshold Type     Unit                      Valid Range
         =============      =====================     =================
         pps                packet per second         1 ~ 2147483647
         kbps               bits per second           1 ~ 2147483647
         percentage         percentage                1 ~ 100    
         
         The special value of -1 indicates this object is undefined.
         "
         SYNTAX       Integer32
        
    
      
    dStormCtrlMIBNotifications     OBJECT IDENTIFIER ::= { dlinkSwStormCtrlMIB 0 }
    dStormCtrlMIBObjects         OBJECT IDENTIFIER ::= { dlinkSwStormCtrlMIB 1 }
    dStormCtrlMIBConformance    OBJECT IDENTIFIER ::= { dlinkSwStormCtrlMIB 2 }
    
-- --------------------------------------------------------------------------    
    dStormCtrlGentrl    OBJECT IDENTIFIER ::= { dStormCtrlMIBObjects 1 }
    
    dStormCtrlNotifyEnable 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.
            stormOccurred(2): A notification will be generated when a storm event is
                      detected.
            stormCleared(3): A notification will be generated when a storm event is
                      cleared.
            both (4): A notification will be generated both when a storm event is 
                   detected and  cleared.
            NOTE:The default value of this object is none(1)."
        ::= { dStormCtrlGentrl 1}
        
    dStormCtrlPollingInterval OBJECT-TYPE
        SYNTAX  Unsigned32 (5..600)
        MAX-ACCESS      read-write
        STATUS          current
        DESCRIPTION
            "The interval, in seconds, the switch detects the storm."
        DEFVAL { 5 }   
        ::= { dStormCtrlGentrl 2}    

    dStormCtrlPollingRetries OBJECT-TYPE
        SYNTAX          Integer32 (-1 | 0 | 1.. 360)
        MAX-ACCESS      read-write
        STATUS          current
        DESCRIPTION
            "Specify the retry count. If the action is configured 
            as 'shutdown' mode and storm keep as long as 
            interval * retries, the port will enters error-disabled state.
            
            The effective range is from 1 to 360.
            
            0 means that a 'shutdown' mode port will directly enter 
            error-disabled state when storm is detected.
            
            -1 means that a 'shutdown' mode port will never enter 
            error-disabled state even if storm is detected."   
  DEFVAL { 3 } 
        ::= { dStormCtrlGentrl 3}            

-- --------------------------------------------------------------------------        
    dStormCtrlThresholdTable OBJECT-TYPE
        SYNTAX          SEQUENCE OF DStormCtrlThresholdEntry
        MAX-ACCESS      not-accessible
        STATUS          current
        DESCRIPTION
            "A table consists of a list of interface-specific threshold
            configuration for storm control."
        ::= { dStormCtrlMIBObjects 2 }

    dStormCtrlThresholdEntry OBJECT-TYPE
        SYNTAX          DStormCtrlThresholdEntry
        MAX-ACCESS      not-accessible
        STATUS          current
        DESCRIPTION
            "An entry presents threshold configuration on an interface."
        INDEX    { 
            ifIndex,
            dStormCtrlTrafficType
        }
        ::= { dStormCtrlThresholdTable 1 }

    DStormCtrlThresholdEntry ::= SEQUENCE {            
        dStormCtrlTrafficType           DStormCtlTrafficType,
        dStormCtrlThresholdType         DStormCtlThrType,            
        dStormCtrlRiseThresholdValue    DStormCtlThrTypeValue,
        dStormCtrlLowThresholdValue     DStormCtlThrTypeValue                                                               
    }
                 
    dStormCtrlTrafficType OBJECT-TYPE
        SYNTAX          DStormCtlTrafficType
        MAX-ACCESS      not-accessible
        STATUS          current
        DESCRIPTION
            "This object indicates the traffic type of the entry."
        ::= { dStormCtrlThresholdEntry 1 }
         
    dStormCtrlThresholdType OBJECT-TYPE
        SYNTAX          DStormCtlThrType
        MAX-ACCESS      read-create
        STATUS          current
        DESCRIPTION
            "This object indicates the threshold type of the entry."
        ::= { dStormCtrlThresholdEntry 2 }
    
    dStormCtrlRiseThresholdValue OBJECT-TYPE
        SYNTAX          DStormCtlThrTypeValue
        MAX-ACCESS      read-create
        STATUS          current
        DESCRIPTION
            "Specifies the rise threshold value of the entry.
            A special value of -1 indicates the storm control of the
            corresponding traffic type is not enabled on that interface.
            "
        ::= { dStormCtrlThresholdEntry 3 }
        
       dStormCtrlLowThresholdValue OBJECT-TYPE
        SYNTAX          DStormCtlThrTypeValue
        MAX-ACCESS      read-create
        STATUS          current
        DESCRIPTION
            "Specifies the low level threshold.
            A special value of -1 indicates low level is not specified.
            The default value will be 80% of the value of the corresponding  
            dStormCtrlRiseThresholdValue if applicable."                 
        ::= { dStormCtrlThresholdEntry 4 }
     
-- --------------------------------------------------------------------------
    dStormCtrlIfTable OBJECT-TYPE
        SYNTAX          SEQUENCE OF DStormCtrlIfEntry
        MAX-ACCESS      not-accessible
        STATUS          current
        DESCRIPTION
            "A table consists of a list of interface-specific configuration for 
            storm control."
        ::= { dStormCtrlMIBObjects 3 }

    dStormCtrlIfEntry OBJECT-TYPE
        SYNTAX          DStormCtrlIfEntry
        MAX-ACCESS      not-accessible
        STATUS          current
        DESCRIPTION
            "An entry presents storm control configuration on an interface.            
            "
        INDEX    { ifIndex }
        ::= { dStormCtrlIfTable 1 }

    DStormCtrlIfEntry ::= SEQUENCE {                                    
        dStormCtrlIfActionType         INTEGER               
    }
    
    dStormCtrlIfActionType OBJECT-TYPE
       SYNTAX          INTEGER {
            none(1),
            shutdown(2),
            drop(3)                        
        }
        MAX-ACCESS      read-write
        STATUS          current
        DESCRIPTION
            "Specify the action will be taken when storm occurs: 
              none(1) - Not filter the storm packets. 
              shutdown(2) - The storm-control shutdown the port when the rise threshold is reached.
              drop(3) - The storm-control always discards packets that exceed the rise threshold."
        ::= { dStormCtrlIfEntry 1 }
                             
-- --------------------------------------------------------------------------
    dStormCtrlTrafficInfoTable OBJECT-TYPE
        SYNTAX          SEQUENCE OF DStormCtrlTrafficInfoEntry
        MAX-ACCESS      not-accessible
        STATUS          current
        DESCRIPTION
            "A table consists of a list of status information for traffic types
            on interfaces. Only the interface/traffic-type on which the storm
            control is enabled will present on this table.
            "
        ::= { dStormCtrlMIBObjects 4 }

    dStormCtrlTrafficInfoEntry OBJECT-TYPE
        SYNTAX          DStormCtrlTrafficInfoEntry
        MAX-ACCESS      not-accessible
        STATUS          current
        DESCRIPTION
            "An entry presents the status of a traffic type on an interface."
        INDEX    { 
            ifIndex,
            dStormCtrlTrafficType
        }
        ::= { dStormCtrlTrafficInfoTable 1 }

    DStormCtrlTrafficInfoEntry ::= SEQUENCE {                                                 
        dStormCtrlTrafficInfoStatus         INTEGER,
        dStormCtrlCurTrafficUnitType        DStormCtlThrType,
        dStormCtrlCurTrafficValue           DStormCtlThrTypeValue
    }
                       
    dStormCtrlCurTrafficUnitType OBJECT-TYPE
        SYNTAX          DStormCtlThrType
        MAX-ACCESS      read-only
        STATUS          current
        DESCRIPTION
            "This object indicates the current traffic unit of the entry."
        ::= { dStormCtrlTrafficInfoEntry 1 }
    
    dStormCtrlCurTrafficValue OBJECT-TYPE
        SYNTAX          DStormCtlThrTypeValue
        MAX-ACCESS      read-only
        STATUS          current
        DESCRIPTION
            "Indicating the current traffic value on the interface.
            "
        ::= { dStormCtrlTrafficInfoEntry 2 }
        
       dStormCtrlTrafficInfoStatus OBJECT-TYPE
        SYNTAX       INTEGER {  
            forwarding(1),
            dropped(2),
            errorDisabled(3),
            linkDown(4),
            inactive(5)
        }
        MAX-ACCESS      read-only
        STATUS          current
        DESCRIPTION
            "This object indicates the current status of storm control on a
            given interface for a given traffic type. 
            forwarding(1): no storm event has been detected.
            dropped(2): a storm event has occurred and the storm traffic
                        exceeding the threshold is dropped. 
            errorDisabled(3): the port is disabled due to a storm. 
            linkDown(4): the port is physically linked down.
            inactive(5): Indicates that storm control is not 
                         enabled for the given traffic type.
            "
        ::= { dStormCtrlTrafficInfoEntry 3 } 
        
-- --------------------------------------------------------------------------
    dStormCtrlNotifyInfo  OBJECT IDENTIFIER ::= {  dStormCtrlMIBObjects 5 }
       
 
     dStormCtrlNotifyTrafficType OBJECT-TYPE
        SYNTAX             DStormCtlTrafficType
        MAX-ACCESS      accessible-for-notify
        STATUS          current
        DESCRIPTION
              "This object is used by dStormCtrlOccurred and dStormCtrlStormCleared
              to indicate the traffic type of the occurred storm."
              ::= { dStormCtrlNotifyInfo 1 }
        
 -- --------------------------------------------------------------------------  
    dStormCtrlOccurred NOTIFICATION-TYPE
        OBJECTS     { 
            ifIndex,
            dStormCtrlNotifyTrafficType
        }
        STATUS  current
        DESCRIPTION
            "This trap is sent when dStormCtrlNotifyEnable is 'stormOccurred'
            or 'both' and a storm is detected."
        ::= { dStormCtrlMIBNotifications 1 }

    dStormCtrlStormCleared NOTIFICATION-TYPE
        OBJECTS   { 
            ifIndex,
            dStormCtrlNotifyTrafficType
        }                       
        STATUS  current
        DESCRIPTION
            "This trap is sent when dStormCtrlNotifyEnable is 'stormCleared'
            or 'both' and a storm is cleared."
        ::= { dStormCtrlMIBNotifications 2 }
          
--  ***************************************************************************    
--  Conformance
--  ***************************************************************************                       
    dStormCtrlCompliances OBJECT IDENTIFIER ::= { dStormCtrlMIBConformance 1 }
        
    dStormCtrlCompliance MODULE-COMPLIANCE
        STATUS current
        DESCRIPTION 
            "The compliance statement for entities which implement the 
            DLINKSW-STORM-CTRL-MIB."
        MODULE -- this module
        MANDATORY-GROUPS { dStormCtrlBaiscGroup }
        ::= { dStormCtrlCompliances 1 }
        
    dStormCtrlGroup OBJECT IDENTIFIER ::= { dStormCtrlMIBConformance 2 }
        
    dStormCtrlBaiscGroup OBJECT-GROUP
        OBJECTS { 
            dStormCtrlNotifyEnable,
            dStormCtrlPollingInterval,
            dStormCtrlPollingRetries,
            dStormCtrlThresholdType,
            dStormCtrlRiseThresholdValue,
            dStormCtrlLowThresholdValue, 
            dStormCtrlIfActionType,
            dStormCtrlCurTrafficUnitType,
            dStormCtrlCurTrafficValue,
            dStormCtrlTrafficInfoStatus,              
            dStormCtrlNotifyTrafficType
        }
        STATUS current
        DESCRIPTION 
            "A collection of objects providing the information for storm control"
        ::= { dStormCtrlGroup 1 }
    
    dStormCtrlNotifyGroup NOTIFICATION-GROUP
        NOTIFICATIONS { 
            dStormCtrlOccurred,
            dStormCtrlStormCleared
        }
        STATUS current
        DESCRIPTION 
            "The collection of notifications used for storm control."
        ::= { dStormCtrlGroup 2 }          
                            
END

