-- *****************************************************************
-- MY-PRIVATE-VLAN-MIB 
-- Copyright (c).
-- All rights reserved.
-- *****************************************************************

DES7200-PRIVATE-VLAN-MIB DEFINITIONS ::= BEGIN

IMPORTS
    MODULE-IDENTITY, 
    OBJECT-TYPE
        FROM SNMPv2-SMI
    TEXTUAL-CONVENTION, 
    TruthValue
        FROM SNMPv2-TC
    myMgmt
        FROM DES7200-SMI
    ifIndex
        FROM IF-MIB
    MODULE-COMPLIANCE, 
    OBJECT-GROUP
        FROM SNMPv2-CONF;

myPrivateVlanMIB MODULE-IDENTITY
    LAST-UPDATED "200903230000Z"
    ORGANIZATION "D-Link Crop."
    CONTACT-INFO
            "
            http://support.dlink.com"            
    DESCRIPTION             "The MIB module to support Private VLAN feature on switching devices."
    REVISION "200903010000Z"
    DESCRIPTION            " The Initial version of this MIB module."
    ::= { myMgmt 44 } 


-- 
-- Textual Conventions
--

PrivateVlanType ::= TEXTUAL-CONVENTION
    STATUS       current
    DESCRIPTION            "The VLAN type as defined for Private VLAN feature.

            'normal' -- this VLAN is a normal VLAN (i.e., not a 
                        private VLAN or private group).

            'primary' -- this VLAN is the primary VLAN as defined for
                         Private VLAN feature.

            'isolated' -- this VLAN is the isolated VLAN as
                          defined for Private VLAN feature. All the 
                          ports in the isolated VLAN can only talk 
                          to the specifically designated ports 
                          configured as promiscuous ports, i.e., 
                          the ports even in the same isolated VLAN 
                          can not talk to each other. 
            
            'community' -- this VLAN is the community VLAN as
                           defined for Private VLAN feature. All the 
                           ports in this community VLAN can behave 
                           like ports in normal VLAN type except 
                           that they can also receive egress packets 
                           tagged with its associated primary VLAN 
                           ID. 
                           
             A VLAN of isolated(3), community(4) type is also called a secondary VLAN."
    SYNTAX     INTEGER {
                       normal(1),
                       primary(2),
                       isolated(3),
                       community(4)
               }

VlanIndexOrZero ::= TEXTUAL-CONVENTION
    STATUS    current
    DESCRIPTION            "The VLAN ID or zero as defined for Private VLAN
            feature. If the value is between 1 and 4095
            inclusive, it represents an IEEE 802.1Q VLAN-ID.
            If the value is zero, it is object-specific and
            must therefore be defined as part of the
            description of any object which uses this syntax."
    SYNTAX    INTEGER(0..4095)
                 
VlanIndexBitmap ::= TEXTUAL-CONVENTION
    STATUS    current
    DESCRIPTION            "A string of octets containing one bit per VLAN for a 
            total of 1024 VLANs in the management domain.  
            The most significant bit of the octet string is the 
            lowest value VLAN of 1024 VLANs.

            Refer to the description on the MIB object that
            uses this textual convention to determine the meaning
            of bits that are set ('1') or cleared ('0').

            The most significant bit of the bitmap is transmitted 
            first. Note that if the length of this string is less than
            128 octets, any 'missing' octets are assumed to contain
            the value zero. An NMS may omit any zero-valued octets
            from the end of this string in order to reduce SetPDU
            size, and the agent may also omit zero-valued trailing
            octets, to reduce the size of GetResponse PDUs."

    SYNTAX    OCTET STRING (SIZE (0..128))


mypvlanMIBObjects OBJECT IDENTIFIER ::= { myPrivateVlanMIB 1 }

mypvlanVlanObjects OBJECT IDENTIFIER ::= { mypvlanMIBObjects 1 }

mypvlanPortObjects OBJECT IDENTIFIER ::= { mypvlanMIBObjects 2 }

mypvlanSVIObjects  OBJECT IDENTIFIER ::= { mypvlanMIBObjects 3 }

--
-- VLAN tables for Private VLAN feature
--

mypvlanVlanTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF MyPvlanVlanEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION             "A table containing Private VLAN information on the 
            VLANs which currently exist."
    ::= { mypvlanVlanObjects 1 }
 
mypvlanVlanEntry OBJECT-TYPE
    SYNTAX      MyPvlanVlanEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION            "A conceptual row containing the Private VLAN 
            information on the VLANs for a particular management 
            domain."    
    INDEX { mypvlanVlanIndex}
    ::= { mypvlanVlanTable 1 }

MyPvlanVlanEntry ::= SEQUENCE {
    mypvlanVlanIndex VlanIndexOrZero,
    mypvlanVlanPrivateVlanType PrivateVlanType,
    mypvlanVlanAssociatedPrimaryVlan VlanIndexOrZero,
    mypvlanIfAssociatedPrimaryVlan TruthValue
}     

mypvlanVlanIndex OBJECT-TYPE
    SYNTAX     VlanIndexOrZero 
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION             "Indicated the VLAN id."
    ::= { mypvlanVlanEntry 1 }

mypvlanVlanPrivateVlanType OBJECT-TYPE
    SYNTAX     PrivateVlanType 
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION             "Indicated the VLAN type as defined for Private VLAN 
            feature."
    ::= { mypvlanVlanEntry 2 }

mypvlanVlanAssociatedPrimaryVlan OBJECT-TYPE
    SYNTAX     VlanIndexOrZero 
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION             "The VLAN ID of The associated primary VLAN used for 
            the Private VLAN feature if pvlanVlanPrivateVlanType 
            has the value of isolated(3), community(4). If pvlanVlanPrivateVlanType 
            has the value of normal(1) or primary(2), then this 
            object has the value of 0.
            The value should be 0 when configuring 'private-vlan type'.
            When configuring 'private-vlan association',the value of 0 means deleting the association, otherwise means
            configure association on this primary vlan."
     ::= { mypvlanVlanEntry 3 }

mypvlanIfAssociatedPrimaryVlan OBJECT-TYPE
    SYNTAX     TruthValue 
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION             "It indicate if the vlan assiociate with primary vlan when get the mib, and
                             indicate if setting the assiociate with primary vlan when set the mib, 0 means
                             configure 'private-vlan type', not 0 means configure 'private-vlan association'."
     ::= { mypvlanVlanEntry 4 }

--
-- Table for configuring host-association on host ports
--

mypvlanPrivatePortTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF MyPvlanPrivatePortEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION            "A table containing information of the configuration of 
            VLAN on the host ports of the device."
    ::= { mypvlanPortObjects 1 }

mypvlanPrivatePortEntry OBJECT-TYPE
    SYNTAX     MyPvlanPrivatePortEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION            "A conceptual row containing information of the 
            configuration of VLAN for each host port. 
            When pvlanPrivatePortSecondaryVlan and pvlanPrivatePortPrimaryVlan 
            are both zero, it means deleting the configuration on the port, when they 
            are both nonzero, it means configuring the host port, 
            otherwise are invalid input. This table is valid only for host port."
    INDEX      { ifIndex }
    ::= { mypvlanPrivatePortTable 1 }

MyPvlanPrivatePortEntry ::= SEQUENCE {
    mypvlanPrivatePortPrimaryVlan  VlanIndexOrZero,
    mypvlanPrivatePortSecondaryVlan  VlanIndexOrZero
}

mypvlanPrivatePortPrimaryVlan OBJECT-TYPE
    SYNTAX     VlanIndexOrZero
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION            "The VLAN ID of the primary VLAN configured on this 
            private port. If mypvlanPrivatePortPrimaryVlan and mypvlanPrivatePortSecondaryVlan
            are both zero when set the mib, it means delete the private-vlan configuration on the host port."
    ::= { mypvlanPrivatePortEntry 1 }    

mypvlanPrivatePortSecondaryVlan OBJECT-TYPE
    SYNTAX     VlanIndexOrZero
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION            "The VLAN ID of the secondary VLAN configured on this 
            private port.If mypvlanPrivatePortPrimaryVlan and mypvlanPrivatePortSecondaryVlan
            are both zero when set the mib, it means delete the private-vlan configuration on the host port."
    ::= { mypvlanPrivatePortEntry 2 }    

--
-- Table for remapping secondary VLAN to primary VLAN on promiscuous 
-- ports for Private VLAN feature 
--

mypvlanPromPortTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF MyPvlanPromPortEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION            "A table containing information of secondary VLAN to 
            primary VLAN remapping on ports of the device."
    ::= { mypvlanPortObjects 2 }

mypvlanPromPortEntry OBJECT-TYPE
    SYNTAX     MyPvlanPromPortEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION            "A conceptual row containing information of secondary 
            VLAN to primary VLAN remapping for each port. An entry 
            is created by the managed system for each interface
            which can be configured as a promiscuous port for 
            Private VLAN feature.This table is valid only for promiscuous port."
    INDEX      { ifIndex }
    ::= { mypvlanPromPortTable 1 }
 
MyPvlanPromPortEntry ::= SEQUENCE {
    mypvlanPrivatePortPrimaryVlanId     VlanIndexOrZero,
    mypvlanPromPortSecondaryRemap       OCTET STRING,
    mypvlanPromPortSecondaryRemap2k     OCTET STRING,
    mypvlanPromPortSecondaryRemap3k     OCTET STRING,
    mypvlanPromPortSecondaryRemap4k     OCTET STRING    
} 

mypvlanPrivatePortPrimaryVlanId OBJECT-TYPE
    SYNTAX     VlanIndexOrZero
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION            "Primary Vlan Id configured on the promiscuous port, it is zero
                            when delete the remapping on the port."
    ::= { mypvlanPromPortEntry 1 } 

mypvlanPromPortSecondaryRemap OBJECT-TYPE
    SYNTAX     OCTET STRING (SIZE (0..128))
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION            "A string of octets containing one bit per VLAN in the
            management domain on this port.  The first octet
            corresponds to VLANs with VlanIndexOrZero values of 0 
            through 7; the second octet to VLANs 8 through 15; etc.  
            The most significant bit of each octet corresponds to 
            the lowest value VlanIndexOrZero in that octet.

            A bit can only be set to '1' when the bit is 
            corresponding to a VLAN of Private VLAN isolated, 
            community type which has already 
            been associated with a primary VLAN. 
        
            Note that if the length of this string is less than
            128 octets, any 'missing' octets are assumed to contain
            the value zero. An NMS may omit any zero-valued octets
            from the end of this string in order to reduce SetPDU 
            size, and the agent may also omit zero-valued trailing 
            octets, to reduce the size of GetResponse PDUs."
    ::= { mypvlanPromPortEntry 2 }

mypvlanPromPortSecondaryRemap2k OBJECT-TYPE
    SYNTAX     OCTET STRING (SIZE (0..128))
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION             "A string of octets containing one bit per VLAN  for 
            VLANs with VlanIndexOrZero values of 1024 through 2047 
            in the management domain on this port.  The first octet 
            corresponds to VLANs with VlanIndexOrZero values of 1024 
            through 1031; the second octet to VLANs 1032 through 
            1039; etc.  The most significant bit of each octet 
            corresponds to the lowest value VlanIndexOrZero in 
            that octet. 

            A bit can only be set to '1' when the bit is 
            corresponding to a VLAN of Private VLAN isolated or 
            community type which has already been associated with a 
            primary VLAN.  
 
            Note that if the length of this string is less than
            128 octets, any 'missing' octets are assumed to contain
            the value zero. An NMS may omit any zero-valued octets
            from the end of this string in order to reduce SetPDU 
            size, and the agent may also omit zero-valued trailing 
            octets, to reduce the size of GetResponse PDUs.

            This object is only instantiated on devices which support
            the range of VlanIndexOrZero up to 4095."
    ::= { mypvlanPromPortEntry 3 }

mypvlanPromPortSecondaryRemap3k OBJECT-TYPE
    SYNTAX     OCTET STRING (SIZE (0..128))
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION            "A string of octets containing one bit per VLAN  for 
            VLANs with VlanIndexOrZero values of 2048 through 3071 
            in the management domain on this port.  The first octet 
            corresponds to VLANs with VlanIndexOrZero values of 2048 
            through 2055; the second octet to VLANs 2056 through 
            2063; etc.  The most significant bit of each octet 
            corresponds to the lowest value VlanIndexOrZero in 
            that octet.

            A bit can only be set to '1' when the bit is 
            corresponding to a VLAN of Private VLAN isolated or 
            community type which has already been associated with a 
            primary VLAN. 

            Note that if the length of this string is less than
            128 octets, any 'missing' octets are assumed to contain
            the value zero. An NMS may omit any zero-valued octets
            from the end of this string in order to reduce SetPDU 
            size, and the agent may also omit zero-valued trailing 
            octets, to reduce the size of GetResponse PDUs.

            This object is only instantiated on devices which support
            the range of VlanIndexOrZero up to 4095."
    ::= { mypvlanPromPortEntry 4 }

mypvlanPromPortSecondaryRemap4k OBJECT-TYPE
    SYNTAX     OCTET STRING (SIZE (0..128))
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION            "A string of octets containing one bit per VLAN  for 
            VLANs with VlanIndexOrZero values of 3072 through 4095 
            in the management domain on this port.  The first octet 
            corresponds to VLANs with VlanIndexOrZero values of 3072 
            through 3079; the second octet to VLANs 3080 through 
            3087; etc.  The most significant bit of each octet 
            corresponds to the lowest value VlanIndexOrZero in 
            that octet.

            A bit can only be set to '1' when the bit is 
            corresponding to a VLAN of Private VLAN isolated or 
            community type which has already been associated with a 
            primary VLAN. 

            Note that if the length of this string is less than
            128 octets, any 'missing' octets are assumed to contain
            the value zero. An NMS may omit any zero-valued octets
            from the end of this string in order to reduce SetPDU 
            size, and the agent may also omit zero-valued trailing 
            octets, to reduce the size of GetResponse PDUs.

            This object is only instantiated on devices which support
            the range of VlanIndexOrZero up to 4095."
    ::= { mypvlanPromPortEntry 5 }


--
-- Table for configuring port mode for Private VLAN feature
--

mypvlanPortModeTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF MyPvlanPortModeEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION            "A table containing information of the configuration of
            port mode for the Private VLAN feature."
    ::= { mypvlanPortObjects 3 }

mypvlanPortModeEntry OBJECT-TYPE
    SYNTAX     MyPvlanPortModeEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION            "A conceptual row containing information of the
            configuration of port mode on each port for the 
            Private VLAN feature. An entry of this table is 
            created by the managed system when the capability
            to be a Private VLAN port is detected on an 
            interface." 
    INDEX      { ifIndex }
    ::= { mypvlanPortModeTable 1 }

MyPvlanPortModeEntry ::= SEQUENCE {
    mypvlanPortMode INTEGER 
}

mypvlanPortMode OBJECT-TYPE
    SYNTAX     INTEGER {
                       nonPrivateVlan(1), 
                       host(2),
                       promiscuous(3)                       
               }        
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION            "The Private VLAN port mode on this port.  

            nonPrivateVlan(1) -- this port is configured to be a
                                 non-Private-VLAN port.

            host(2) -- this port is configured to be 
                       a Private-VLAN host port, i.e., private 
                       port.

            promiscuous(3) -- this port is configured to be
                              a Private-VLAN promiscuous port."
    ::= { mypvlanPortModeEntry 1 }

--
-- Private VLAN mapping for the Switch Virtual Interfaces  
--

mypvlanSVIMappingTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF MyPvlanSVIMappingEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION            "A table containing the configuration of 
            primary VLAN SVI (Switch Virtual Interfaces) 
            mapping for the secondary VLANs for the Private 
            VLAN feature."
    ::= { mypvlanSVIObjects 1 }

mypvlanSVIMappingEntry OBJECT-TYPE
    SYNTAX      MyPvlanSVIMappingEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION            "A conceptual row containing the Primary VLAN 
            SVI mapping configuration for the existing 
            secondary VLANs. An entry is created by the managed 
            system for each VLAN with corresponding VLAN's 
            pvlanVlanPrivateVlanType of isolated(3), community(4)."
   INDEX      { mypvlanSVIMappingVlanIndex } 
    ::= { mypvlanSVIMappingTable 1 }

MyPvlanSVIMappingEntry ::= SEQUENCE {
    mypvlanSVIMappingVlanIndex VlanIndexOrZero, 
    mypvlanSVIMappingPrimarySVI VlanIndexOrZero 
}

mypvlanSVIMappingVlanIndex OBJECT-TYPE
    SYNTAX        VlanIndexOrZero
    MAX-ACCESS    not-accessible
    STATUS        current
    DESCRIPTION             "An index value that uniquely identifies the
            Virtual LAN associated with this information."
    ::= { mypvlanSVIMappingEntry 1 }

mypvlanSVIMappingPrimarySVI OBJECT-TYPE
    SYNTAX     VlanIndexOrZero 
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION            "The Vlan ID of the primary VLAN SVI this secondary
            VLAN is mapped to for the Private VLAN feature. 
            This object has the value of zero if this secondary 
            VLAN is not mapped to any primary VLAN SVI."  
     ::= { mypvlanSVIMappingEntry 2 }

--
-- Conformance Information
--

mypvlanMIBConformance OBJECT IDENTIFIER ::= { myPrivateVlanMIB 2 }
mypvlanMIBCompliances OBJECT IDENTIFIER ::= { mypvlanMIBConformance 1 }
mypvlanMIBGroups      OBJECT IDENTIFIER ::= { mypvlanMIBConformance 2}

--
-- compliance statements
--

mypvlanMIBCompliance MODULE-COMPLIANCE
    STATUS  current 
    DESCRIPTION            "The compliance statement for Private VLAN feature 
            implementation."
    MODULE  -- this module
             -- no MANDATORY-GROUPS

        GROUP mypvlanVlanGroup
        DESCRIPTION                 "This group must be implemented on devices which has 
                Private VLAN feature support."
                
        GROUP mypvlanPrivatePortGroup
        DESCRIPTION                 "This group must be implemented on devices which has 
                Private VLAN feature support."
                
        GROUP mypvlanPromPortGroup
        DESCRIPTION                "This group must be implemented on devices which has 
                support for promiscuous port of Private VLAN feature."

        GROUP mypvlanPortModeGroup
        DESCRIPTION               "A collection of objects providing basic 
            port mode configuration for Private VLAN feature."
                
        GROUP mypvlanSVIGroup
        DESCRIPTION                "A collection of objects providing  
            svi mapping configuration for Private VLAN feature."
                
    ::= { mypvlanMIBCompliances 1 }                             

--
-- units of conformance
--
mypvlanVlanGroup OBJECT-GROUP
    OBJECTS { 
            mypvlanVlanIndex,
            mypvlanVlanPrivateVlanType,
            mypvlanVlanAssociatedPrimaryVlan,           
            mypvlanIfAssociatedPrimaryVlan 
            }
    STATUS  current
    DESCRIPTION            "A collection of objects providing basic VLAN 
            configuration for Private VLAN feature."
    ::= { mypvlanMIBGroups 1 }
    
mypvlanPrivatePortGroup OBJECT-GROUP
    OBJECTS { 
            mypvlanPrivatePortPrimaryVlan,
            mypvlanPrivatePortSecondaryVlan
            }
    STATUS  current
    DESCRIPTION            "A collection of objects providing basic 
            private port configuration for Private VLAN 
            feature."
    ::= { mypvlanMIBGroups 2 }
    
mypvlanPromPortGroup OBJECT-GROUP
    OBJECTS {               
            mypvlanPrivatePortPrimaryVlan,
            mypvlanPromPortSecondaryRemap,
            mypvlanPromPortSecondaryRemap2k,
            mypvlanPromPortSecondaryRemap3k,
            mypvlanPromPortSecondaryRemap4k
            }
    STATUS  current
    DESCRIPTION            "A collection of objects providing basic 
            promiscuous port configuration for Private 
            VLAN feature."
    ::= { mypvlanMIBGroups 3 }  

mypvlanPortModeGroup OBJECT-GROUP
    OBJECTS {               
            mypvlanPortMode
            }
    STATUS  current
    DESCRIPTION            "A collection of objects providing basic 
            port mode configuration for Private VLAN feature."
    ::= { mypvlanMIBGroups 4 }  

mypvlanSVIGroup OBJECT-GROUP
    OBJECTS {               
            mypvlanSVIMappingPrimarySVI
            }
    STATUS  current
    DESCRIPTION            "A collection of objects providing  
            svi mapping configuration for Private VLAN feature."
    ::= { mypvlanMIBGroups 5 } 
END