IGMP-MIB DEFINITIONS ::= BEGIN

IMPORTS
    MODULE-IDENTITY, OBJECT-TYPE, experimental, Counter32, Gauge32,
    Integer32, IpAddress, TimeTicks  FROM SNMPv2-SMI
    RowStatus, TruthValue            FROM SNMPv2-TC
    MODULE-COMPLIANCE, OBJECT-GROUP  FROM SNMPv2-CONF;


igmpMIB MODULE-IDENTITY
    LAST-UPDATED "9807281330Z"
    ORGANIZATION "IETF IDMR Working Group."
    CONTACT-INFO
            " Keith McCloghrie
              Cisco Systems, Inc.
              170 West Tasman Drive
              San Jose, CA  95134-1706
              US

              Phone: +1 408 526 5260
              EMail: kzm@cisco.com"
    DESCRIPTION
            "The MIB module for IGMP Management."
    ::= { experimental 59 }


igmpMIBObjects     OBJECT IDENTIFIER ::= { igmpMIB 1 }

igmp      OBJECT IDENTIFIER ::= { igmpMIBObjects 1 }

--
--  The IGMP Interface Table
--

igmpInterfaceTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF IgmpInterfaceEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
            "The (conceptual) table listing the interfaces on which IGMP
            is enabled."
    ::= { igmp 1 }

igmpInterfaceEntry OBJECT-TYPE
    SYNTAX     IgmpInterfaceEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
            "An entry (conceptual row) representing an interface on
            which IGMP is enabled."
    INDEX      { igmpInterfaceIfIndex }
    ::= { igmpInterfaceTable 1 }

IgmpInterfaceEntry ::= SEQUENCE {
    igmpInterfaceIfIndex               Integer32,
    igmpInterfaceQueryInterval         Integer32,
    igmpInterfaceStatus                RowStatus,
    igmpInterfaceVersion               INTEGER,
    igmpInterfaceQuerier               IpAddress,
    igmpInterfaceQueryMaxResponseTime  Integer32,
    igmpInterfaceQuerierPresentTimeout Integer32,   -- deprecated
    igmpInterfaceLeaveEnabled          TruthValue,  -- deprecated
    igmpInterfaceVersion1QuerierTimer  Integer32,
    igmpInterfaceWrongVersionQueries   Counter32,
    igmpInterfaceJoins                 Counter32,
    igmpInterfaceLeaves                Counter32,   -- deprecated
    igmpInterfaceGroups                Gauge32,
    igmpInterfaceRobustness            Integer32,
    igmpInterfaceProxyIfIndex          Integer32,
    igmpInterfaceLastMembQueryIntvl    Integer32,
    igmpInterfaceQuerierUpTime         Integer32,
    igmpInterfaceQuerierExpiryTime     Integer32
}

igmpInterfaceIfIndex OBJECT-TYPE
    SYNTAX     Integer32
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
            "The ifIndex value of the interface for which IGMP is
            enabled."
    ::= { igmpInterfaceEntry 1 }

igmpInterfaceQueryInterval OBJECT-TYPE
    SYNTAX     Integer32
    UNITS      "seconds"
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
            "The frequency at which IGMP Host-Query packets are
            transmitted on this interface."
    DEFVAL     { 125 }
    ::= { igmpInterfaceEntry 2 }

igmpInterfaceStatus OBJECT-TYPE
    SYNTAX     RowStatus
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
            "The activation of a row enables IGMP on the interface.  The
            destruction of a row disables IGMP on the interface."
    ::= { igmpInterfaceEntry 3 }

igmpInterfaceVersion OBJECT-TYPE
    SYNTAX     INTEGER { version1(1), version2(2) }
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
            "The version of IGMP which is running on this interface.
            This object can be used to configure a router capable of
            running either value.  For IGMP to function correctly, all
            routers on a LAN must be configured to run the same version
            of IGMP on that LAN."
    DEFVAL     { version2 }
    ::= { igmpInterfaceEntry 4 }

igmpInterfaceQuerier OBJECT-TYPE
    SYNTAX     IpAddress
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
            "The address of the IGMP Querier on the IP subnet to which
            this interface is attached."
    ::= { igmpInterfaceEntry 5 }

igmpInterfaceQueryMaxResponseTime OBJECT-TYPE
    SYNTAX     Integer32
    UNITS      "seconds"
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
            "The maximum query response time advertised in IGMPv2
            queries on this interface."
    DEFVAL     { 10 }
    ::= { igmpInterfaceEntry 6 }

igmpInterfaceQuerierPresentTimeout OBJECT-TYPE
    SYNTAX     Integer32
    UNITS      "seconds"
    MAX-ACCESS read-create
    STATUS     deprecated
    DESCRIPTION
            "A timeout interval.  If no IGMPv2 queries are heard on this
            interface within this timeout interval, the local router
            will take over the Querier on the IP subnet to which this
            interface is attached.  This object is now deprecated, since
            its value can be derived from igmpInterfaceRobustness."
    DEFVAL     { 255 }
    ::= { igmpInterfaceEntry 7 }

igmpInterfaceLeaveEnabled OBJECT-TYPE
    SYNTAX     TruthValue
    MAX-ACCESS read-create
    STATUS     deprecated
    DESCRIPTION
            "An indication of whether the processing of IGMPv2 Leave
            messages is enabled on this interface.  This object is now
            deprecated since it must be true when igmpInterfaceVersion
            is version2, and must be false when it is version1 to comply
            with the IGMP specfication."
    DEFVAL     { true }
    ::= { igmpInterfaceEntry 8 }

igmpInterfaceVersion1QuerierTimer OBJECT-TYPE
    SYNTAX     Integer32
    UNITS      "seconds"
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
            "The time remaining until the host assumes that there are no
            IGMPv1 routers present on the interface.  While this is
            non-zero, the host will reply to all queries with version 1
            membership reports."
    ::= { igmpInterfaceEntry 9 }

igmpInterfaceWrongVersionQueries OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
            "The number of queries received whose IGMP version does not
            match igmpInterfaceVersion.   IGMP requires that all routers
            on a LAN be configured to run the same version of IGMP.
            Thus, if any queries are received with the wrong version,
            this indicates a configuration error."
    ::= { igmpInterfaceEntry 10 }

igmpInterfaceJoins OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
            "The number of times a group membership has been added on
            this interface; that is, the number of times an entry for
            this interface has been added to the Cache Table.  This
            object gives an indication of the amount of IGMP activity
            over time."
    ::= { igmpInterfaceEntry 11 }

igmpInterfaceLeaves OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     deprecated
    DESCRIPTION
            "The number of times a group membership has been removed
            from this interface; that is, the number of times an entry
            for this interface has been deleted from the Cache Table.
            This object is deprecated since its value cannot be usefully
            compared with igmpInterfaceJoins to get the number of groups
            joined.  Instead, igmpInterfaceGroups gives the number of
            groups joined, which may be compared with igmpInterfaceJoins
            to derive the number of leaves."
    ::= { igmpInterfaceEntry 12 }

igmpInterfaceGroups OBJECT-TYPE
    SYNTAX     Gauge32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
            "The current number of entries for this interface in the
            Cache Table."
    ::= { igmpInterfaceEntry 13 }

igmpInterfaceRobustness OBJECT-TYPE
    SYNTAX     Integer32
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
            "The Robustness Variable allows tuning for the expected
            packet loss on a subnet.  If a subnet is expected to be
            lossy, the Robustness Variable may be increased.  IGMP is
            robust to (Robustness Variable-1) packet losses."
    DEFVAL     { 2 }
    ::= { igmpInterfaceEntry 14 }

igmpInterfaceLastMembQueryIntvl OBJECT-TYPE
    SYNTAX     Integer32
    UNITS      "tenths of seconds"
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
            "The Last Member Query Interval is the Max Response Time
            inserted into Group-Specific Queries sent in response to
            Leave Group messages, and is also the amount of time between
            Group-Specific Query messages.  This value may be tuned to
            modify the leave latency of the network.  A reduced value
            results in reduced time to detect the loss of the last
            member of a group."
    DEFVAL     { 10 }
    ::= { igmpInterfaceEntry 15 }

igmpInterfaceProxyIfIndex OBJECT-TYPE
    SYNTAX     Integer32
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
            "Some devices implement a form of IGMP proxying whereby
            memberships learned on the interface represented by this
            row, cause IGMP Host Membership Reports to be sent on the
            interface whose ifIndex value is given by this object.  Such
            a device would implement the igmpV2RouterMIBGroup only on
            its router interfaces (those interfaces whose ifIndex value
            is given by this object on some interface).  Typically, the
            value of this object is 0, indicating that no proxying is
            being done."
    DEFVAL     { 0 }
    ::= { igmpInterfaceEntry 16 }

igmpInterfaceQuerierUpTime OBJECT-TYPE
    SYNTAX     Integer32
    UNITS      "seconds"
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
            "The number of seconds since igmpInterfaceQuerier was last
            changed."
    ::= { igmpInterfaceEntry 17 }

igmpInterfaceQuerierExpiryTime OBJECT-TYPE
    SYNTAX     Integer32
    UNITS      "seconds"
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
            "The number of seconds remaining before the Other Querier
            Present Timer expires.  If the local system is the querier,
            the value of this object is zero."
    ::= { igmpInterfaceEntry 18 }

--
--  The IGMP Cache Table
--

igmpCacheTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF IgmpCacheEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
            "The (conceptual) table listing the IP multicast groups for
            which there are members on a particular interface."
    ::= { igmp 2 }

igmpCacheEntry OBJECT-TYPE
    SYNTAX     IgmpCacheEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
            "An entry (conceptual row) in the igmpCacheTable."
    INDEX      { igmpCacheAddress, igmpCacheIfIndex }
    ::= { igmpCacheTable 1 }

IgmpCacheEntry ::= SEQUENCE {
    igmpCacheAddress            IpAddress,
    igmpCacheIfIndex            Integer32,
    igmpCacheSelf               TruthValue,
    igmpCacheLastReporter       IpAddress,
    igmpCacheUpTime             TimeTicks,
    igmpCacheExpiryTime         TimeTicks,
    igmpCacheStatus             RowStatus,
    igmpCacheVersion1HostTimer  Integer32
}

igmpCacheAddress OBJECT-TYPE
    SYNTAX     IpAddress
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
            "The IP multicast group address for which this entry
            contains information."
    ::= { igmpCacheEntry 1 }

igmpCacheIfIndex OBJECT-TYPE
    SYNTAX     Integer32
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
            "The interface for which this entry contains information for
            an IP multicast group address."
    ::= { igmpCacheEntry 2 }

igmpCacheSelf OBJECT-TYPE
    SYNTAX     TruthValue
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
            "An indication of whether the local system is a member of
            this group address on this interface."
    DEFVAL     { true }
    ::= { igmpCacheEntry 3 }

igmpCacheLastReporter OBJECT-TYPE
    SYNTAX     IpAddress
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
            "The IP address of the source of the last membership report
            received for this IP Multicast group address on this
            interface.  If no membership report has been received, this
            object has the value 0.0.0.0."
    ::= { igmpCacheEntry 4 }

igmpCacheUpTime OBJECT-TYPE
    SYNTAX     TimeTicks
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
            "The time since the system joined this group address, or
            zero if the system is not currently a member."
    ::= { igmpCacheEntry 5 }

igmpCacheExpiryTime OBJECT-TYPE
    SYNTAX     TimeTicks
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
            "The minimum amount of time remaining before this entry will
            be aged out."
    ::= { igmpCacheEntry 6 }

igmpCacheStatus OBJECT-TYPE
    SYNTAX     RowStatus
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
            "The status of this entry."
    ::= { igmpCacheEntry 7 }

igmpCacheVersion1HostTimer OBJECT-TYPE
    SYNTAX     Integer32
    UNITS      "seconds"
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
            "The time remaining until the local router will assume that
            there are no longer any IGMP version 1 members on the IP
            subnet attached to this interface.  Upon hearing any IGMPv1
            Membership Report, this value is reset to the group
            membership timer.  While this time remaining is non-zero,
            the local router ignores any IGMPv2 Leave messages for this
            group that it receives on this interface."
    ::= { igmpCacheEntry 8 }

igmpMIBConformance
               OBJECT IDENTIFIER ::= { igmpMIB 2 }
igmpMIBCompliances
               OBJECT IDENTIFIER ::= { igmpMIBConformance 1 }
igmpMIBGroups  OBJECT IDENTIFIER ::= { igmpMIBConformance 2 }


-- compliance statements

igmpV1HostMIBCompliance MODULE-COMPLIANCE
    STATUS  current
    DESCRIPTION
            "The compliance statement for hosts running IGMPv1 and
            implementing the IGMP MIB."
    MODULE  -- this module
    MANDATORY-GROUPS { igmpBaseMIBGroup }

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

    ::= { igmpMIBCompliances 1 }

igmpV1RouterMIBCompliance MODULE-COMPLIANCE
    STATUS  current
    DESCRIPTION
            "The compliance statement for routers running IGMPv1 and
            implementing the IGMP MIB."
    MODULE  -- this module
         MANDATORY-GROUPS { igmpBaseMIBGroup,
                       igmpRouterMIBGroup
                     }

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

    ::= { igmpMIBCompliances 2 }

igmpV2HostMIBCompliance MODULE-COMPLIANCE
    STATUS  current
    DESCRIPTION
            "The compliance statement for hosts running IGMPv2 and
            implementing the IGMP MIB."
    MODULE  -- this module
    MANDATORY-GROUPS { igmpBaseMIBGroup,
                       igmpV2HostMIBGroup
                     }

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

    ::= { igmpMIBCompliances 3 }

igmpV2RouterMIBCompliance MODULE-COMPLIANCE
    STATUS  current
    DESCRIPTION
            "The compliance statement for routers running IGMPv2 and
            implementing the IGMP MIB."
    MODULE  -- this module
    MANDATORY-GROUPS { igmpBaseMIBGroup,
                       igmpRouterMIBGroup,
                       igmpV2RouterMIBGroup
                     }

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

    ::= { igmpMIBCompliances 4 }


-- units of conformance

igmpBaseMIBGroup OBJECT-GROUP
    OBJECTS { igmpCacheSelf, igmpCacheLastReporter,
              igmpCacheStatus, igmpInterfaceStatus
            }
    STATUS  current
    DESCRIPTION
            "The basic collection of objects providing management of
            IGMP version 1 or 2."
    ::= { igmpMIBGroups 1 }

igmpRouterMIBGroup OBJECT-GROUP
    OBJECTS { igmpCacheUpTime, igmpCacheExpiryTime,
              igmpInterfaceQueryInterval
            }
    STATUS  current
    DESCRIPTION
            "A collection of additional objects for management of IGMP
            version 1 or 2 in routers."
    ::= { igmpMIBGroups 2 }


igmpV2HostMIBGroup OBJECT-GROUP
    OBJECTS { igmpInterfaceQuerier,
              igmpInterfaceVersion1QuerierTimer
            }
    STATUS  current
    DESCRIPTION
            "A collection of additional objects for management of IGMP
            version 2 in hosts."
    ::= { igmpMIBGroups 3 }

igmpRouterVersion2MIBGroup OBJECT-GROUP
    OBJECTS { igmpInterfaceVersion,
              igmpInterfaceQueryMaxResponseTime,
              igmpInterfaceQuerierPresentTimeout,
              igmpInterfaceLeaveEnabled,
              igmpInterfaceWrongVersionQueries,
              igmpInterfaceJoins,
              igmpInterfaceLeaves,
              igmpCacheVersion1HostTimer
            }
    STATUS  deprecated
    DESCRIPTION
            "A collection of additional objects for management of IGMP
            version 2 in routers.  This group has been obsoleted by
            igmpV2RouterMIBGroup."
    ::= { igmpMIBGroups 4 }

igmpV2RouterMIBGroup OBJECT-GROUP
    OBJECTS { igmpInterfaceVersion, igmpInterfaceQuerier,
              igmpInterfaceQueryMaxResponseTime,
              igmpInterfaceRobustness,
              igmpInterfaceWrongVersionQueries,
              igmpInterfaceJoins, igmpInterfaceGroups,
              igmpInterfaceLastMembQueryIntvl,
              igmpInterfaceQuerierUpTime,
              igmpInterfaceQuerierExpiryTime,
              igmpCacheVersion1HostTimer
            }
    STATUS  current
    DESCRIPTION
            "A collection of additional objects for management of IGMP
            version 2 in routers."
    ::= { igmpMIBGroups 5 }

igmpV2ProxyMIBGroup OBJECT-GROUP
    OBJECTS { igmpInterfaceProxyIfIndex }
    STATUS  current
    DESCRIPTION
            "A collection of additional objects for management of IGMP
            proxy devices."
    ::= { igmpMIBGroups 6 }

END