-- *****************************************************************
-- MIBS/CISCO-IGMP-FILTER-MIB.my: Cisco IGMP Filter MIB

-- Aug. 2001, Dipesh Gorashia, Pauline Shuen

-- Copyright (c) 2001, 2002 by cisco Systems, Inc.
-- All rights reserved.
-- *****************************************************************

CISCO-IGMP-FILTER-MIB DEFINITIONS ::= BEGIN

IMPORTS
    TruthValue,
    TestAndIncr
        FROM SNMPv2-TC
    MODULE-IDENTITY,
    OBJECT-TYPE,
    Unsigned32
        FROM SNMPv2-SMI
    ifIndex
        FROM IF-MIB
    ciscoMgmt
        FROM CISCO-SMI
    InetAddressType,
    InetAddress
        FROM INET-ADDRESS-MIB
    MODULE-COMPLIANCE,
    OBJECT-GROUP
        FROM SNMPv2-CONF;

ciscoIGMPFilterMIB MODULE-IDENTITY
    LAST-UPDATED    "200511290000Z"
    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

            Email: cs-ipmulticast@cisco.com"
    DESCRIPTION
            "IGMP Filter configuration MIB. This MIB provides a
            mechanism for users to configure the system to intercept 
            IGMP joins for IP Multicast groups identified in this 
            MIB and only allow certain ports to join certain 
            multicast groups."
    REVISION        "200511290000Z"
    DESCRIPTION
            "Deprecated ciscoIgmpFilterGolbalMIBCompliance
            and added ciscoIgmpFilterGlobalMIBComplianceRev1
            to include ciscoIgmpFilterGlobalGroup under
            MANDATORY-GROUPS; Updated the imports such that
            Unsigned32 is imported from SNMPv2-SMI instead
            of CISCO-TC, and other clean up."
    REVISION        "200205090000Z"
    DESCRIPTION
            "Corrected typos existing in the MIB."
    REVISION        "200111080000Z"
    DESCRIPTION
            "Initial version of this MIB module"
    ::= { ciscoMgmt 238 }

ciscoIgmpFilterMIBObjects OBJECT IDENTIFIER
    ::= { ciscoIGMPFilterMIB 1 }

cIgmpFilterGeneral OBJECT IDENTIFIER
    ::= { ciscoIgmpFilterMIBObjects 1 }

cIgmpFilterInfo OBJECT IDENTIFIER
    ::= { ciscoIgmpFilterMIBObjects 2 }

cIgmpFilterEditor OBJECT IDENTIFIER
    ::= { ciscoIgmpFilterMIBObjects 3 }

-- IGMP Filter General Group
cIgmpFilterEnable OBJECT-TYPE
    SYNTAX          TruthValue
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
            "This object controls whether the IGMP filtering
            is enabled on the device. A false(2) value will 
            prevent the IGMP filtering action on the device."
    DEFVAL          { false }
    ::= { cIgmpFilterGeneral 1 }

cIgmpFilterMaxProfiles OBJECT-TYPE
    SYNTAX          Unsigned32
    UNITS           "profiles"
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
            "Indicates the maximum number of profiles supported by
            this device.  A value of zero indicates no limitation on
            the number of profiles."
    ::= { cIgmpFilterGeneral 2 }

-- IGMP Filter Information Group
cIgmpFilterTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF CIgmpFilterEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
            "This table contains entries that identify lists of
            IP Multicast groups for each profile configured on
            the device. 

            Each entry contains a range of contiguous IP
            Multicast groups associated to a profile index.
            Multiple cIgmpFilterEntry may be associated
            with the same cIgmpFilterProfileIndex.

            All the cIgmpFilterEntry with  the same profile index 
            are subjected to the same IGMP filtering action as 
            defined in cIgmpFilterProfileAction.

            Each profile index may be associated with zero or more 
            interfaces through cIgmpFilterInterfaceIfIndex
            object in cIgmpFilterInterfaceTable.
            The maximum number of entries is determined by
            cIgmpFilterMaxProfiles."
    ::= { cIgmpFilterInfo 1 }

cIgmpFilterEntry OBJECT-TYPE
    SYNTAX          CIgmpFilterEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
            "An entry (conceptual row) in the cIgmpFilterTable.

            The creation, deletion or modification of an entry
            is controlled through the MIB objects defined under
            cIgmpFilterEditor group."
    INDEX           {
                        cIgmpFilterProfileIndex,
                        cIgmpFilterStartAddressType,
                        cIgmpFilterStartAddress
                    }
    ::= { cIgmpFilterTable 1 }

CIgmpFilterEntry ::= SEQUENCE {
    cIgmpFilterProfileIndex      Unsigned32,
    cIgmpFilterStartAddressType  InetAddressType,
    cIgmpFilterStartAddress      InetAddress,
    cIgmpFilterEndAddressType    InetAddressType,
    cIgmpFilterEndAddress        InetAddress,
    cIgmpFilterProfileAction     INTEGER
}

cIgmpFilterProfileIndex OBJECT-TYPE
    SYNTAX          Unsigned32
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION     "Index identifying this entry."
    ::= { cIgmpFilterEntry 1 }

cIgmpFilterStartAddressType OBJECT-TYPE
    SYNTAX          InetAddressType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
            "This object describes the type of Internet
            address used to determine the start address 
            of IP multicast group for a profile."
    ::= { cIgmpFilterEntry 2 }

cIgmpFilterStartAddress OBJECT-TYPE
    SYNTAX          InetAddress (SIZE (1..64))
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
            "This object describes the start of the IP multicast
            group address of a contiguous range which will be
            subjected to filtering operation."
    ::= { cIgmpFilterEntry 3 }

cIgmpFilterEndAddressType OBJECT-TYPE
    SYNTAX          InetAddressType
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
            "This object indicates the type of Internet
            address used to determine the end address 
            of IP multicast group for a profile."
    ::= { cIgmpFilterEntry 4 }

cIgmpFilterEndAddress OBJECT-TYPE
    SYNTAX          InetAddress
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
            "This object indicates the end of the IP multicast
            group address of a contiguous range which will be 
            subjected to filtering operation."
    ::= { cIgmpFilterEntry 5 }

cIgmpFilterProfileAction OBJECT-TYPE
    SYNTAX          INTEGER {
                        permit(1),
                        deny(2)
                    }
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
            "This object defines the action for
            filtering IGMP reports for this profile.

            If the object is set to deny(2):
            then all IGMP reports associated to IP multicast
            groups included in the profile identified by
            cIgmpFilterInterfaceProfileIndex will be dropped.

            If the object is set to permit(1):
            then all IGMP reports associated to IP multicast
            groups not included in the profile identified by
            cIgmpFilterInterfaceProfileIndex will be dropped."
    ::= { cIgmpFilterEntry 6 }

-- The per interface IGMP filtering configuration table
cIgmpFilterInterfaceTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF CIgmpFilterInterfaceEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
            "This table contains the list of interfaces that can
            support IGMP filter feature."
    ::= { cIgmpFilterInfo 2 }

cIgmpFilterInterfaceEntry OBJECT-TYPE
    SYNTAX          CIgmpFilterInterfaceEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
            "Each entry contains the configuration for associating
            the IGMP filter profile index with the interface.

            An entry is created for each of the IGMP filter capable 
            interface on the system.

            The entry is removed on removal of corresponding 
            interface from system."
    INDEX           { ifIndex }
    ::= { cIgmpFilterInterfaceTable 1 }

CIgmpFilterInterfaceEntry ::= SEQUENCE {
    cIgmpFilterInterfaceProfileIndex  Unsigned32
}

cIgmpFilterInterfaceProfileIndex OBJECT-TYPE
    SYNTAX          Unsigned32
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
            "Specifies which IGMP filter profile applies to this
            interface. If the value of this MIB object matches the 
            value of cIgmpFilterProfileIndex in cIgmpFilterTable, 
            the corresponding profile configuration will apply to
            this interface. 

            Agent returns inconsistentValue if this profile 
            does not exist in cIgmpFilterTable. 
            A value of zero indicates no profile is associated
            with corresponding interface.

            The filtering action on each interface is also
            defined by the associated profile."
    DEFVAL          { 0 }
    ::= { cIgmpFilterInterfaceEntry 1 }

-- The IGMP Filter Editor Group

-- Group of objects acting as buffer to add/delete/modify
-- entries in the cIgmpFilterTable.
-- Objects in the  group are set to appropriate values and  state of
-- cIgmpFilterEditOperation is changed to add/delete or modify
-- to apply the required changes to the cIgmpFilterTable.
cIgmpFilterEditSpinLock OBJECT-TYPE
    SYNTAX          TestAndIncr
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
            "This object is used to facilitate modification of
            IGMP Filter Editor Group in the CISCO-IGMP-FILTER-MIB 
            module by multiple managers.  In particular, it is 
            useful when modifying the value of the cIgmpFilterEditor 
            object. 

            The procedure for modifying the cIgmpFilterEditor 
            object is as follows: 

                1.  Retrieve the value of cIgmpFilterEditSpinLock and 
                    of object within cIgmpFilterEditor group. 

                2.  Generate new values for 'writeable' objects
                    in the cIgmpFilterEditor group except for 
                    cIgmpFilterEditSpinLock object.

                3.  Set the value of cIgmpFilterEditSpinLock to the 
                    retrieved value, and the value of objects in 
                    cIgmpFilterEditor to the new value. If the set
                    fails for the cIgmpFilterEditSpinLock object,
                    go back to step 1. 

            The cIgmpFilterApplyStatus and cIgmpFilterEditSpinLock 
            should be read together by NMS to make sure that the 
            result is associated with its configuration request.

            To add/delete or modify a profile ( through cIgmpFilterEditor
            objects ) following procedure may be followed as an example.:

                1.  GET(cIgmpFilterEditSpinLock.0) and save in sValue.
                2.  SET(cIgmpFilterEditSpinLock.0 = sValue,
                        cIgmpFilterEditProfileIndex.0 = validProfileNumber,
                        cIgmpFilterEditStartAddress.0 = validStartAddress,
                        cIgmpFilterEditEndAddress.0 = validEndAddress,
                        cIgmpFilterEditOperation.0 =  validOperation)
                3.  If the SET in step 2 is not successful go back
                    to step 1.
                4.  If the SET in step 2 is successful, user should 
                    GET(cIgmpFilterEditSpinLock.0) and 
                    GET(cIgmpFilterApplyStatus.0) simultaneously.

                5.  The cIgmpFilterApplyStatus.0 reflects the outcome of
                    step 2 only if
                    cIgmpFilterEditSpinLock.0 = sValue + 1 or
                    cIgmpFilterEditSpinLock.0 = 0 if sValue reaches
                    value at which cIgmpFilterEditSpinLock wraps 
                    around."
    ::= { cIgmpFilterEditor 1 }

cIgmpFilterEditProfileIndex OBJECT-TYPE
    SYNTAX          Unsigned32
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
            "Buffer object to edit corresponding object
            cIgmpFilterProfileIndex in cIgmpFilterTable.

            Maximum value this object can be set to is 
            determined by cIgmpFilterMaxProfiles object."
    ::= { cIgmpFilterEditor 2 }

cIgmpFilterEditStartAddressType OBJECT-TYPE
    SYNTAX          InetAddressType
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
            "Buffer object to edit corresponding object
            cIgmpFilterStartAddressType in cIgmpFilterTable.

            This object describes the type of Internet  
            address used to determine the start address 
            of IP multicast group for a profile."
    ::= { cIgmpFilterEditor 3 }

cIgmpFilterEditStartAddress OBJECT-TYPE
    SYNTAX          InetAddress (SIZE (1..64))
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
            "Buffer object to edit corresponding object
            cIgmpFilterStartAddress in cIgmpFilterTable
              to establish start address of filtering
            range for a profile."
    ::= { cIgmpFilterEditor 4 }

cIgmpFilterEditEndAddressType OBJECT-TYPE
    SYNTAX          InetAddressType
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
            "Buffer object to edit corresponding object
            cIgmpFilterEndAddressType in cIgmpFilterTable.

            This object describes the type of Internet     
            address used to determine the start address 
            of IP multicast group for a profile."
    ::= { cIgmpFilterEditor 5 }

cIgmpFilterEditEndAddress OBJECT-TYPE
    SYNTAX          InetAddress
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
            "Buffer object to edit corresponding object
            cIgmpFilterEndAddress in cIgmpFilterTable 
            to establish end address of filtering 
            range for a profile."
    ::= { cIgmpFilterEditor 6 }

cIgmpFilterEditProfileAction OBJECT-TYPE
    SYNTAX          INTEGER {
                        permit(1),
                        deny(2)
                    }
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
            "Buffer object to edit corresponding object in
            cIgmpFilterTable to determine filtering action
            of each profile."
    DEFVAL          { deny }
    ::= { cIgmpFilterEditor 7 }

cIgmpFilterEditOperation OBJECT-TYPE
    SYNTAX          INTEGER {
                        none(1),
                        add(2),
                        delete(3),
                        modify(4)
                    }
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
            "The function of this object is to allow user to
            apply the changes in cIgmpFilterEditor objects to 
            cIgmpFilterTable. 

            This object always has the value 'none' when read.
            When written each value causes the appropriate action:

            'add' - tries to insert the information contained 
            in cIgmpFilterEditor objects into  cIgmpFilterTable.
            If the entry already exists in the table the 'add' 
            fails.        

            'delete' - tries to delete corresponding entry from
            cIgmpFilterTable. If a user completely deletes a profile
            that has corresponding entries in the
            cIgmpFilterInterfaceTable, then all the interfaces mapped
            to corresponding profile will be cleared and set to zero.

            'modify' - Mode of operation used to edit an entry in
             cIgmpFilterTable. If the corresponding entry does not 
             exist, modify operation fails. This mode allows user to
             extend/truncate a contiguous filtered range, type of
             Internet addressing and filtering action for a profile. 

            'none' - no operation is performed."
    ::= { cIgmpFilterEditor 8 }

cIgmpFilterApplyStatus OBJECT-TYPE
    SYNTAX          INTEGER {
                        someOtherError(1),
                        succeeded(2),
                        inconsistentEdit(3),
                        entryPresentError(4),
                        entryNotPresentError(5)
                    }
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
            "The current status of an 'add', 'delete' or 'modify'
            operation. If no apply is currently active, the status 
            represented is that of the most recently completed 'add', 
            'delete' or 'modify' operation.

            The value of this objects indicates succeeded(2) state 
            initially when no 'add', 'delete', 'modify' operation
            has been carried out.

            The possible values are:
               someOtherError - the 'add', 'delete' or 'modify' failed 
               due to undefined error(s) in apply operation.
               (e.g., insufficient memory). 

               succeeded - the 'add', 'delete' or 'modify' operation
               was successful. (This value is also used when no
               apply has been invoked since the last time the local 
               system restarted.)

               inconsistentEdit - the 'add', 'delete' or 'modify' failed
               due to inconsistency of the data.

               entryPresentError - the 'add' operation failed  as the 
               corresponding entry already exists in cIgmpFilterTable.

               entryNotPresentError - the 'modify' operation failed 
               as no corresponding entry exists in cIgmpFilterTable."
    ::= { cIgmpFilterEditor 9 }

ciscoIgmpFilterMIBConformance OBJECT IDENTIFIER
    ::= { ciscoIGMPFilterMIB 2 }

ciscoIgmpFilterMIBCompliances OBJECT IDENTIFIER
    ::= { ciscoIgmpFilterMIBConformance 1 }

ciscoIgmpFilterMIBGroups OBJECT IDENTIFIER
    ::= { ciscoIgmpFilterMIBConformance 2 }

-- Compliance
ciscoIgmpFilterGolbalMIBCompliance MODULE-COMPLIANCE
    STATUS          deprecated
    DESCRIPTION
            "The compliance statement for entities providing
            global control of action and implementing IGMP
            Filter MIB.

            OBJECT  cIgmpFilterEditStartAddressType
            SYNTAX  InetAddressType { ipv4(1) }
            DESCRIPTION
            An implementation is only required to support IPv4
            addresses.

            OBJECT  cIgmpFilterEditStartAddress
            SYNTAX  InetAddress (SIZE(4))
            DESCRIPTION
            An implementation is only required to support IPv4
            addresses.

            OBJECT  cIgmpFilterEditEndAddressType
            SYNTAX  InetAddressType { ipv4(1) }
            DESCRIPTION
            An implementation is only required to support IPv4
            addresses.

            OBJECT  cIgmpFilterEditEndAddress                  
            SYNTAX  InetAddress (SIZE(4))      
            DESCRIPTION
            An implementation is only required to support IPv4
            addresses.

            OBJECT  cIgmpFilterStartAddressType
            SYNTAX  InetAddressType { ipv4(1) }
            DESCRIPTION
            An implementation is only required to support IPv4
            addresses.

            OBJECT  cIgmpFilterStartAddress
            SYNTAX  InetAddress (SIZE(4))
            DESCRIPTION
            An implementation is only required to support IPv4
            addresses.

            OBJECT  cIgmpFilterEndAddressType
            SYNTAX  InetAddressType { ipv4(1) }
            DESCRIPTION
            An implementation is only required to support IPv4
            addresses.


            OBJECT  cIgmpFilterEndAddress
            SYNTAX  InetAddress (SIZE(4))
            DESCRIPTION
            An implementation is only required to support IPv4
            addresses."
    MODULE          -- this module
    MANDATORY-GROUPS {
                        ciscoIgmpFilterInfoGroup,
                        ciscoIgmpFilterEditorGroup
                    }
    ::= { ciscoIgmpFilterMIBCompliances 1 }

ciscoIgmpFilterGlobalMIBComplianceRev1 MODULE-COMPLIANCE
    STATUS          current
    DESCRIPTION
            "The compliance statement for entities providing
            global control of action and implementing IGMP
            Filter MIB.

            OBJECT  cIgmpFilterEditStartAddressType
            SYNTAX  InetAddressType { ipv4(1) }
            DESCRIPTION
            An implementation is only required to support IPv4
            addresses.

            OBJECT  cIgmpFilterEditStartAddress
            SYNTAX  InetAddress (SIZE(4))
            DESCRIPTION
            An implementation is only required to support IPv4
            addresses.

            OBJECT  cIgmpFilterEditEndAddressType
            SYNTAX  InetAddressType { ipv4(1) }
            DESCRIPTION
            An implementation is only required to support IPv4
            addresses.

            OBJECT  cIgmpFilterEditEndAddress                  
            SYNTAX  InetAddress (SIZE(4))      
            DESCRIPTION
            An implementation is only required to support IPv4
            addresses.

            OBJECT  cIgmpFilterStartAddressType
            SYNTAX  InetAddressType { ipv4(1) }
            DESCRIPTION
            An implementation is only required to support IPv4
            addresses.

            OBJECT  cIgmpFilterStartAddress
            SYNTAX  InetAddress (SIZE(4))
            DESCRIPTION
            An implementation is only required to support IPv4
            addresses.

            OBJECT  cIgmpFilterEndAddressType
            SYNTAX  InetAddressType { ipv4(1) }
            DESCRIPTION
            An implementation is only required to support IPv4
            addresses.


            OBJECT  cIgmpFilterEndAddress
            SYNTAX  InetAddress (SIZE(4))
            DESCRIPTION
            An implementation is only required to support IPv4
            addresses."
    MODULE          -- this module
    MANDATORY-GROUPS {
                        ciscoIgmpFilterGlobalGroup,
                        ciscoIgmpFilterInfoGroup,
                        ciscoIgmpFilterEditorGroup
                    }
    ::= { ciscoIgmpFilterMIBCompliances 2 }

-- Units of Conformance
ciscoIgmpFilterGlobalGroup OBJECT-GROUP
    OBJECTS         {
                        cIgmpFilterEnable,
                        cIgmpFilterMaxProfiles
                    }
    STATUS          current
    DESCRIPTION
            "A collection of objects providing the configuration of
            IGMP filter for the system."
    ::= { ciscoIgmpFilterMIBGroups 1 }

ciscoIgmpFilterInfoGroup OBJECT-GROUP
    OBJECTS         {
                        cIgmpFilterEndAddressType,
                        cIgmpFilterEndAddress,
                        cIgmpFilterProfileAction,
                        cIgmpFilterInterfaceProfileIndex
                    }
    STATUS          current
    DESCRIPTION
            "A collection of objects providing the configuration of
            IGMP filter for the system."
    ::= { ciscoIgmpFilterMIBGroups 2 }

ciscoIgmpFilterEditorGroup OBJECT-GROUP
    OBJECTS         {
                        cIgmpFilterEditSpinLock,
                        cIgmpFilterEditProfileIndex,
                        cIgmpFilterEditStartAddressType,
                        cIgmpFilterEditStartAddress,
                        cIgmpFilterEditEndAddressType,
                        cIgmpFilterEditEndAddress,
                        cIgmpFilterEditProfileAction,
                        cIgmpFilterEditOperation,
                        cIgmpFilterApplyStatus
                    }
    STATUS          current
    DESCRIPTION
            "A collection of objects acting as a buffer
            to add/delete/modify the entries in 
            read-only table cIgmpFilterTable."
    ::= { ciscoIgmpFilterMIBGroups 3 }

END
