--  *****************************************************************
--  DLINKSW-PACKET-MONITOR-MIB.mib : Packet Monitoring MIB
-- 
--  Copyright (c) 2013 D-Link Corporation, all rights reserved.
--   
--  *****************************************************************
DLINKSW-PACKET-MONITOR-MIB DEFINITIONS ::= BEGIN

    IMPORTS
    MODULE-IDENTITY,
    OBJECT-TYPE,
    Unsigned32,
    Integer32
            FROM SNMPv2-SMI
    DisplayString, RowStatus 
            FROM SNMPv2-TC
    MODULE-COMPLIANCE, OBJECT-GROUP
		    FROM SNMPv2-CONF
    ifIndex, InterfaceIndexOrZero
            FROM IF-MIB
    VlanId       
        FROM Q-BRIDGE-MIB            
    
    dlinkIndustrialCommon
            FROM DLINK-ID-REC-MIB;

    dlinkSwPktMonitorMIB MODULE-IDENTITY
        LAST-UPDATED "201407210000Z"
        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 configuring Monitoring Traffic.
            Acronyms and terminology:
            SPAN (Switched Port Analyzer): Mirror network traffic for analysis 
                by a network analyzer. 
            Local-SPAN: The SPAN feature is local when the monitored ports are 
                all located on the same switch as the destination port. 
            RSPAN (Remote SPAN):  Source ports and destination ports that are 
                distributed across multiple switches, allowing one to monitor 
                any destination port located on the RSPAN VLAN."

        REVISION "201407210000Z"
        DESCRIPTION 
            "Added the dPktMonSessionSrcTxIfStgState for dPktMonSessionSrcTxIfTable." 

        REVISION "201309270000Z"
        DESCRIPTION 
            "Added the dPktMonSessionRowStatus for dPktMonSessionTable.
             Modified the MAX-ACCESS(read-write to read-create) for
             dPktMonSessionDestRemoteVlanId, dPktMonSessionSourceRemoteVlanId
             and dPktMonSessionDestInterface in dPktMonSessionTable.
             Added the dPktMonSessionDestRemoteReplaceVlanTable for supporting
             egress per flow RSPAN VLAN replacement on a RSPAN source switch."   
                   
        REVISION "201303040000Z"
        DESCRIPTION 
            "This is the first version of the MIB file."           
         
    ::= { dlinkIndustrialCommon 12 }

-- -----------------------------------------------------------------------------
    dPktMonMIBNotifications    OBJECT IDENTIFIER ::= { dlinkSwPktMonitorMIB 0 }
    dPktMonMIBObjects          OBJECT IDENTIFIER ::= { dlinkSwPktMonitorMIB 1 }
    dPktMonMIBConformance      OBJECT IDENTIFIER ::= { dlinkSwPktMonitorMIB 2 }

-- -----------------------------------------------------------------------------
-- Monitor Session Management
-- -----------------------------------------------------------------------------
    dPktMonSessionTableCurrEntries  OBJECT-TYPE
        SYNTAX          Unsigned32
        MAX-ACCESS      read-only
        STATUS          current
        DESCRIPTION
            "Indicates the number of entries present in the dPktMonSessionTable."
        ::= { dPktMonMIBObjects 1 }                        

    dPktMonSessionTable OBJECT-TYPE
        SYNTAX          SEQUENCE OF DPktMonSessionEntry
        MAX-ACCESS      not-accessible
        STATUS          current
        DESCRIPTION
            "A table to create a packet monitoring session, allowing 
            packets on source ports or VLAN to be monitored via a 
            destination port."            
        ::= { dPktMonMIBObjects 2 }

    dPktMonSessionEntry OBJECT-TYPE
        SYNTAX          DPktMonSessionEntry
        MAX-ACCESS      not-accessible
        STATUS          current
        DESCRIPTION
            "Each entry in the dPktMonSessionTable describes configuration 
            information about Packet Monitoring."             
        INDEX { dPktMonSessionID }
        ::= { dPktMonSessionTable 1 }

    DPktMonSessionEntry ::= SEQUENCE {
        dPktMonSessionID                        Integer32,
        dPktMonSessionSessionType               INTEGER,
        dPktMonSessionDestRemoteVlanId          Integer32,
        dPktMonSessionSourceRemoteVlanId        Integer32,
        dPktMonSessionDestInterface             InterfaceIndexOrZero,
        dPktMonSessionRowStatus                 RowStatus
    }

    dPktMonSessionID OBJECT-TYPE
        SYNTAX          Integer32 (1..80)
        MAX-ACCESS      not-accessible
        STATUS          current
        DESCRIPTION            
            "An index value that uniquely identifies the the packet 
            monitoring session associated with this information."
        ::= { dPktMonSessionEntry 1 }
        
    dPktMonSessionSessionType OBJECT-TYPE
        SYNTAX          INTEGER { 
            none(0), 
            localSession(1),
            remoteSourceSession(2),
            remoteDestinationSession(3) 
        }
        MAX-ACCESS      read-only
        STATUS          current
        DESCRIPTION
            " Indicates the session type of the entry.      
            none (0):
                Indicates the entry is inactive.
            localSession (1):
                Indicates the entry is operating as Local-SPAN.
            remoteSourceSession (2):
                Indicates the entry is operating as an RSPAN source session, which
                associates SPAN source ports or VLANs with a destination RSPAN VLAN.                
            remoteDestinationSession (3):
                Indicates the entry is operating as an RSPAN destination session.
                An RSPAN destination session associates an RSPAN VLAN with a 
                destination port."                           
        ::= { dPktMonSessionEntry 2 }  
          
    dPktMonSessionDestRemoteVlanId OBJECT-TYPE
        SYNTAX          Integer32 (0 | 2..4094)
        MAX-ACCESS      read-create
        STATUS          current
        DESCRIPTION
            "Indicates the RSPAN VLAN ID on the RSPAN source session. 
            This object should be considered in conjunction with the 
            dPktMonSessionDestInterface. 
            When this object is set with valid VLAN ID (2 to 4094), the mirrored 
            packets are transmitted with an RSPAN VLAN tag from the destination 
            port. 
            If this object is set to 0, the destination RSPAN VLAN becomes 
            unspecified, then the mirrored traffic will be transmitted without
            additional RSPAN VLAN tag."                               
        ::= { dPktMonSessionEntry 3 }
        
    dPktMonSessionSourceRemoteVlanId OBJECT-TYPE
        SYNTAX          Integer32 (0 | 2..4094)
        MAX-ACCESS      read-create
        STATUS          current
        DESCRIPTION
            "Set this object with valid VLAN ID (2 to 4094) for an RSPAN destination
            session.                        
            If this object is set to 0, the source RSPAN VLAN becomes 
            unspecified."
        ::= { dPktMonSessionEntry 4 }        
        
    dPktMonSessionDestInterface OBJECT-TYPE
        SYNTAX          InterfaceIndexOrZero
        MAX-ACCESS      read-create
        STATUS          current
        DESCRIPTION
            "Indicates the destination interface of the packet monitoring 
            session. Both physical ports and port channel are valid as 
            destination interfaces of monitor sessions.
            A value of zero indicates that no interface is associated with
            this monitoring session."
        ::= { dPktMonSessionEntry 5 }
        
    dPktMonSessionRowStatus OBJECT-TYPE
        SYNTAX  RowStatus
        MAX-ACCESS  read-create
        STATUS  current
        DESCRIPTION
            "The status of this conceptual row."
        ::= { dPktMonSessionEntry 6 }
    
-- -----------------------------------------------------------------------------     
    dPktMonSessionSrcIfObjects OBJECT-IDENTITY
        STATUS          current
        DESCRIPTION
            "This object identifier represents the objects that are configured
            the source interfaces for monitor sessions."   
        ::= { dPktMonMIBObjects 3 }

    dPktMonSessionSrcRxIfTable OBJECT-TYPE
        SYNTAX          SEQUENCE OF DPktMonSessionSrcRxIfEntry
        MAX-ACCESS      not-accessible
        STATUS          current
        DESCRIPTION
            "This table consists of a list of source interface on which the packets
            received for packet monitor sessions.
            The first index element identifies the dPktMonSessionEntry that a 
            source interface (indicated by second index element) for monitoring 
            receiving packets (dPktMonSessionSrcRxIfEntry) belongs to. An entry
            is removed from this table when its corresponding dPktMonSessionEntry
            is deleted.
            For a monitor session, to add or delete a source receiving interface
            by creating or removing an entry in this table.  
            The valid interface includes: physical port/port channel/vlan and cpu.                       
            "            
        ::= { dPktMonSessionSrcIfObjects 1 }

    dPktMonSessionSrcRxIfEntry OBJECT-TYPE
        SYNTAX          DPktMonSessionSrcRxIfEntry
        MAX-ACCESS      not-accessible
        STATUS          current
        DESCRIPTION
            "Each entry in the dPktMonSessionSrcRxIfTable describes  
            the source interface on which the packets received for a monitor session."                      
        INDEX { dPktMonSessionID, ifIndex }
        ::= { dPktMonSessionSrcRxIfTable 1 }

    DPktMonSessionSrcRxIfEntry ::= SEQUENCE {              
        dPktMonSessionSrcRxIfRowStatus      RowStatus
    } 
              
    dPktMonSessionSrcRxIfRowStatus OBJECT-TYPE
        SYNTAX          RowStatus
        MAX-ACCESS      read-create
        STATUS          current
        DESCRIPTION
            "The status of this conceptual row. Use this object to add/remove
            an interface for a monitor session."
        ::= { dPktMonSessionSrcRxIfEntry 1 }

-- -----------------------------------------------------------------------------    
    dPktMonSessionSrcTxIfTable OBJECT-TYPE
        SYNTAX          SEQUENCE OF DPktMonSessionSrcTxIfEntry
        MAX-ACCESS      not-accessible
        STATUS          current
        DESCRIPTION                 
            "This table consists of a list of source interface on which the packets
            transmitted for packet monitor sessions.
            The first index element identifies the dPktMonSessionEntry that a 
            source interface (indicated by second index element) for monitoring 
            transmitting packets (dPktMonSessionSrcTxIfEntry) belongs to. An entry
            is removed from this table when its corresponding dPktMonSessionEntry is
            deleted.
            For a monitor session, to add or delete a source transmitting interface
            by creating or removing an entry in this table.  
            "      
        ::= { dPktMonSessionSrcIfObjects 2 }

    dPktMonSessionSrcTxIfEntry OBJECT-TYPE
        SYNTAX          DPktMonSessionSrcTxIfEntry
        MAX-ACCESS      not-accessible
        STATUS          current
        DESCRIPTION
            "Each entry in the dPktMonSessionSrcTxIfTable describes  
            the source interface on which the packets transmitted for a monitor session."                      
        INDEX { dPktMonSessionID, ifIndex }
        ::= { dPktMonSessionSrcTxIfTable 1 }

    DPktMonSessionSrcTxIfEntry ::= SEQUENCE {             
        dPktMonSessionSrcTxIfRowStatus      RowStatus,
        dPktMonSessionSrcTxIfStgState       INTEGER
    } 
            
    dPktMonSessionSrcTxIfRowStatus OBJECT-TYPE
        SYNTAX          RowStatus
        MAX-ACCESS      read-create
        STATUS          current
        DESCRIPTION
            "The status of this conceptual row. Use this object to add/remove
            an interface for a monitor session."
        ::= { dPktMonSessionSrcTxIfEntry 1 }
        
    dPktMonSessionSrcTxIfStgState OBJECT-TYPE
        SYNTAX INTEGER {
			    no-care(1),
			    forwarding(2)
		    }
        MAX-ACCESS      read-create
        STATUS          current
        DESCRIPTION
            "This object indicates if the monitoring of the packets transmitted 
            on the interface will be affected by the interface's STG status.
            'no-care' -  monitor the packets transmitted on the interface regardless 
                         of the interfaces STG status.
            'forwarding' - monitor the packets transmitted on the interface only when 
                          the interfaces all STGs status are forwarding."
        DEFVAL { no-care }
        ::= { dPktMonSessionSrcTxIfEntry 2 }

-- -----------------------------------------------------------------------------    
    dPktMonSessionSrcDropIfTable OBJECT-TYPE
        SYNTAX          SEQUENCE OF DPktMonSessionSrcDropIfEntry
        MAX-ACCESS      not-accessible
        STATUS          current
        DESCRIPTION                 
            "This table consists of a list of source interface to monitor the
            packets which dropped on received port.
            The first index element identifies the dPktMonSessionEntry that a 
            source interface (indicated by second index element) for monitoring
            dropped packets (dPktMonSessionSrcDropIfTable) belongs to. An entry
            is removed from this table when its corresponding dPktMonSessionEntry
            is deleted.
            For a monitor session, to add or delete a source interface 
            for monitoring dropped packets by creating or removing an entry in
            this table.        
            "
        ::= { dPktMonSessionSrcIfObjects 3 }

    dPktMonSessionSrcDropIfEntry OBJECT-TYPE
        SYNTAX          DPktMonSessionSrcDropIfEntry
        MAX-ACCESS      not-accessible
        STATUS          current
        DESCRIPTION
            "Each entry in the dPktMonSessionSrcDropIfTable describes  
            the source interface to monitor the packets which dropped on received port
            for a monitor session."                      
        INDEX { dPktMonSessionID, ifIndex }
        ::= { dPktMonSessionSrcDropIfTable 1 }

    DPktMonSessionSrcDropIfEntry ::= SEQUENCE {             
        dPktMonSessionSrcDropIfRowStatus      RowStatus
    } 
            
    dPktMonSessionSrcDropIfRowStatus OBJECT-TYPE
        SYNTAX          RowStatus
        MAX-ACCESS      read-create
        STATUS          current
        DESCRIPTION
            "The status of this conceptual row. Use this object to add/remove
            an interface for a port monitor session."
        ::= { dPktMonSessionSrcDropIfEntry 1 }  
        
-- -----------------------------------------------------------------------------
-- Configuring ACL for Monitor Session
-- -----------------------------------------------------------------------------
    dPktMonSessionSrcAclTable OBJECT-TYPE
        SYNTAX          SEQUENCE OF DPktMonSessionSrcAclEntry
        MAX-ACCESS      not-accessible
        STATUS          current
        DESCRIPTION            
            "A table containing associations between ACL and monitor session."             
        ::= { dPktMonMIBObjects 4 }
            
    dPktMonSessionSrcAclEntry OBJECT-TYPE
        SYNTAX          DPktMonSessionSrcAclEntry
        MAX-ACCESS      not-accessible
        STATUS          current
        DESCRIPTION
            "A table entry representing an access list association to 
            a monitor session."
        INDEX {  dPktMonSessionID, dPktMonSessionSrcAclName }
        ::= { dPktMonSessionSrcAclTable 1 }   
        
    DPktMonSessionSrcAclEntry ::= SEQUENCE {
        dPktMonSessionSrcAclName        DisplayString,
        dPktMonSessionSrcAclRowStatus   RowStatus    
    }          
    dPktMonSessionSrcAclName	OBJECT-TYPE
        SYNTAX          DisplayString (SIZE (1..32))
        MAX-ACCESS      not-accessible
        STATUS          current
        DESCRIPTION           
            "Indicates the name of an access list for flow based monitoring.             
            Multiple access lists can be monitored on a session at a time. "
        ::= {dPktMonSessionSrcAclEntry 1} 
        
    dPktMonSessionSrcAclRowStatus OBJECT-TYPE
        SYNTAX          RowStatus
        MAX-ACCESS      read-create
        STATUS          current
        DESCRIPTION
            "The status of this conceptual row."
        ::= { dPktMonSessionSrcAclEntry 2 }

-- -----------------------------------------------------------------------------
-- Configuring global RSPAN VLAN
-- -----------------------------------------------------------------------------                    
    dPktMonRspanVlanTable OBJECT-TYPE
        SYNTAX          SEQUENCE OF DPktMonRspanVlanEntry
        MAX-ACCESS      not-accessible
        STATUS          current
        DESCRIPTION            
            "A table containing RSPAN VLAN information on the 
            VLANs which currently configured as RSPAN VLAN."
        ::= { dPktMonMIBObjects 5 }
        
    dPktMonRspanVlanEntry OBJECT-TYPE
        SYNTAX          DPktMonRspanVlanEntry
        MAX-ACCESS      not-accessible
        STATUS          current
        DESCRIPTION
            "Each entry in the dPktMonRspanVlanTable indicates  
            the VLAN is configured as RSPAN VLAN.
            An entry is created/removed when RSPAN VLAN is enabled
            or disabled at the VLAN via CLI or by issuing appropriate 
			sets to this table using snmp."                                  
        INDEX { dPktMonRspanVlanId }
        ::= { dPktMonRspanVlanTable 1 }

    DPktMonRspanVlanEntry ::= SEQUENCE {
        dPktMonRspanVlanId          VlanId,
        dPktMonRspanVlanRowStatus   RowStatus    
    }
    
    dPktMonRspanVlanId OBJECT-TYPE
        SYNTAX          VlanId
        MAX-ACCESS      not-accessible
        STATUS          current
        DESCRIPTION                        
            "The VLAN number.
            When a VLAN is specified as an RSPAN VLAN, the MAC address 
            learning on the RSPAN VLAN is disabled."           
        ::= { dPktMonRspanVlanEntry 1 }

    dPktMonRspanVlanRowStatus OBJECT-TYPE
        SYNTAX          RowStatus
        MAX-ACCESS      read-create
        STATUS          current
        DESCRIPTION
            "The status of this conceptual row."
        ::= { dPktMonRspanVlanEntry 2 }
        
-- -----------------------------------------------------------------------------
-- Configuring Egress Replace RSPAN VLAN for Monitor Session
-- -----------------------------------------------------------------------------
    dPktMonSessionDestRemoteReplaceVlanTable OBJECT-TYPE
        SYNTAX          SEQUENCE OF DPktMonSessionDestRemoteReplaceVlanEntry 	
        MAX-ACCESS      not-accessible
        STATUS          current
        DESCRIPTION            
            "A table containing associations between replace RSPAN VLAN egress
            per flow and monitor session.
            For a RSPAN source session, multiple flows of VLAN replacement can
            be configured."
        ::= { dPktMonMIBObjects 6 }
            
    dPktMonSessionDestRemoteReplaceVlanEntry OBJECT-TYPE
        SYNTAX          DPktMonSessionDestRemoteReplaceVlanEntry
        MAX-ACCESS      not-accessible
        STATUS          current
        DESCRIPTION
            "A table entry representing an access list and replace VLAN
            association to a monitor session."
        INDEX {  dPktMonSessionID, dPktMonSessionDestRemoteAccessListName,dPktMonSessionDestRemoteReplaceVlanId }
        ::= { dPktMonSessionDestRemoteReplaceVlanTable 1 }   
        
    DPktMonSessionDestRemoteReplaceVlanEntry ::= SEQUENCE {
    	dPktMonSessionDestRemoteAccessListName        DisplayString,
        dPktMonSessionDestRemoteReplaceVlanId        VlanId,
        dPktMonSessionDestRemoteReplaceVlanRowStatus   RowStatus    
    } 
    
    dPktMonSessionDestRemoteAccessListName	OBJECT-TYPE
        SYNTAX          DisplayString (SIZE (1..32))
        MAX-ACCESS      not-accessible
        STATUS          current
        DESCRIPTION           
            "Indicates the name of an access list for egress per flow RSPAN VLAN
            replacement."
        ::= {dPktMonSessionDestRemoteReplaceVlanEntry 1} 
        
    dPktMonSessionDestRemoteReplaceVlanId	OBJECT-TYPE
        SYNTAX          VlanId
        MAX-ACCESS      not-accessible
        STATUS          current
        DESCRIPTION           
            "Indicates the VLAN ID used to replace RSPAN VLAN ID for the matched
            flow of packets transmitted out from the destination interface on a
            RSPAN source switch."           
        ::= {dPktMonSessionDestRemoteReplaceVlanEntry 2} 
        
    dPktMonSessionDestRemoteReplaceVlanRowStatus OBJECT-TYPE
        SYNTAX          RowStatus
        MAX-ACCESS      read-create
        STATUS          current
        DESCRIPTION
            "The status of this conceptual row."
        ::= { dPktMonSessionDestRemoteReplaceVlanEntry 3 }
        
-- -----------------------------------------------------------------------------
-- MIB Conformance statements
-- -----------------------------------------------------------------------------   
    dPktMonMIBCompliances  OBJECT IDENTIFIER
        ::= { dPktMonMIBConformance 1 }

    dPktMonMIBGroups  OBJECT IDENTIFIER
        ::= { dPktMonMIBConformance 2 } 
    
    dPktMonMIBCompliance MODULE-COMPLIANCE
        STATUS          current
        DESCRIPTION
            "The compliance statement for entities which implement the 
			DLINKSW-PACKET-MONITOR-MIB."
        MODULE          -- this module
        MANDATORY-GROUPS  { dPktMonBasicGroup }
                    
        GROUP   dPktMonRspanGroup
        DESCRIPTION
            "The group is required when the RSPAN is supported."
            
        GROUP   dPktMonFlowBasedMirrorGroup
        DESCRIPTION
            "The group is required when the flow based mirror is supported."    

        GROUP   dPktMonMonitorDropPktGroup
        DESCRIPTION
            "The group is required when the monitoring dropped packets is supported."    
             
 	GROUP   dPktMonDestRemoteReplaceVlanGroup
        DESCRIPTION
            "The group is required when the egress per flow RSPAN VLAN replacement is supported."
             
        ::= { dPktMonMIBCompliances 1 }
            
    dPktMonBasicGroup OBJECT-GROUP
		OBJECTS {    
		    dPktMonSessionTableCurrEntries, 
		    dPktMonSessionDestInterface, 
		    dPktMonSessionRowStatus, 
		    dPktMonSessionSrcRxIfRowStatus, 
		    dPktMonSessionSrcTxIfRowStatus            
		}
		STATUS current
		DESCRIPTION 
			"A collection of objects providing basic packet monitoring 
			configuration."
		::= { dPktMonMIBGroups 1 }
		
	dPktMonRspanGroup OBJECT-GROUP
		OBJECTS {   
			dPktMonSessionSessionType, 
			dPktMonSessionDestRemoteVlanId, 
			dPktMonSessionSourceRemoteVlanId,
			dPktMonRspanVlanRowStatus
		}
		STATUS current
		DESCRIPTION 
			"A collection of objects providing RSPAN configuration."
		::= { dPktMonMIBGroups 2 }
		
	dPktMonFlowBasedMirrorGroup OBJECT-GROUP
		OBJECTS { dPktMonSessionSrcAclRowStatus }
		STATUS current
		DESCRIPTION 
			"A collection of objects providing flow based mirroring 
			configuration."
		::= { dPktMonMIBGroups 3 }
    
    	dPktMonMonitorDropPktGroup OBJECT-GROUP
		OBJECTS { dPktMonSessionSrcDropIfRowStatus }
		STATUS current
		DESCRIPTION 
			"A collection of objects provides the configuration for monitoring
            dropped packets on source interfaces. 
			"
		::= { dPktMonMIBGroups 4 }    
		
	dPktMonDestRemoteReplaceVlanGroup OBJECT-GROUP
		OBJECTS { dPktMonSessionDestRemoteReplaceVlanRowStatus }
		STATUS current
		DESCRIPTION 
			"A collection of objects provides the configuration for
			performing egress per flow RSPAN VLAN replacement on a
			RSPAN source switch."
		::= { dPktMonMIBGroups 5 }    
END


