ENTITY-MIB DEFINITIONS ::= BEGIN

IMPORTS
    MODULE-IDENTITY, OBJECT-TYPE, mib-2, NOTIFICATION-TYPE,
    Integer32
        FROM SNMPv2-SMI
    TDomain, TAddress, TEXTUAL-CONVENTION,
    AutonomousType, RowPointer, TimeStamp, TruthValue,
    DateAndTime
        FROM SNMPv2-TC
    MODULE-COMPLIANCE, OBJECT-GROUP, NOTIFICATION-GROUP
        FROM SNMPv2-CONF
    SnmpAdminString
        FROM SNMP-FRAMEWORK-MIB;

entityMIB MODULE-IDENTITY
    LAST-UPDATED "200508100000Z"
    ORGANIZATION "IETF ENTMIB Working Group"
    CONTACT-INFO
            "        WG E-mail: entmib@ietf.org
                     Mailing list subscription info:
                       http://www.ietf.org/mailman/listinfo/entmib

                     Andy Bierman
                     ietf@andybierman.com

                     Keith McCloghrie
                     Cisco Systems Inc.
                     170 West Tasman Drive
                     San Jose, CA 95134
                     +1 408-526-5260
                     kzm@cisco.com"

    DESCRIPTION
            "The MIB module for representing multiple logical
            entities supported by a single SNMP agent.

            Copyright (C) The Internet Society (2005).  This
            version of this MIB module is part of RFC 4133; see
            the RFC itself for full legal notices."

    REVISION        "200508100000Z"
    DESCRIPTION
            "Initial Version of Entity MIB (Version 3).
             This revision obsoletes RFC 2737.
             Additions:
               - cpu(12) enumeration added to PhysicalClass TC
               - DISPLAY-HINT clause to PhysicalIndex TC
               - PhysicalIndexOrZero TC
               - entPhysicalMfgDate object
               - entPhysicalUris object
             Changes:
               - entPhysicalContainedIn SYNTAX changed from
                 INTEGER to PhysicalIndexOrZero

             This version published as RFC 4133."

    REVISION        "199912070000Z"
    DESCRIPTION
            "Initial Version of Entity MIB (Version 2).
             This revision obsoletes RFC 2037.
             This version published as RFC 2737."

    REVISION        "199610310000Z"
    DESCRIPTION
            "Initial version (version 1), published as
             RFC 2037."
    ::= { mib-2 47 }

entityMIBObjects OBJECT IDENTIFIER ::= { entityMIB 1 }

-- MIB contains four groups
entityPhysical OBJECT IDENTIFIER ::= { entityMIBObjects 1 }
entityLogical  OBJECT IDENTIFIER ::= { entityMIBObjects 2 }
entityMapping  OBJECT IDENTIFIER ::= { entityMIBObjects 3 }
entityGeneral  OBJECT IDENTIFIER ::= { entityMIBObjects 4 }


-- Textual Conventions
PhysicalIndex ::= TEXTUAL-CONVENTION
    DISPLAY-HINT      "d"
    STATUS            current
    DESCRIPTION
            "An arbitrary value that uniquely identifies the physical
            entity.  The value should be a small, positive integer.
            Index values for different physical entities are not
            necessarily contiguous."
    SYNTAX Integer32 (1..2147483647)

PhysicalIndexOrZero ::= TEXTUAL-CONVENTION
    DISPLAY-HINT      "d"
    STATUS            current
    DESCRIPTION
            "This textual convention is an extension of the
            PhysicalIndex convention, which defines a greater than zero
            value used to identify a physical entity.  This extension
            permits the additional value of zero.  The semantics of the
            value zero are object-specific and must, therefore, be
            defined as part of the description of any object that uses
            this syntax.  Examples of the usage of this extension are
            situations where none or all physical entities need to be
            referenced."
    SYNTAX Integer32 (0..2147483647)

PhysicalClass ::= TEXTUAL-CONVENTION
    STATUS            current
    DESCRIPTION
            "An enumerated value which provides an indication of the
            general hardware type of a particular physical entity.
            There are no restrictions as to the number of
            entPhysicalEntries of each entPhysicalClass, which must be
            instantiated by an agent.

            The enumeration 'other' is applicable if the physical entity
            class is known, but does not match any of the supported
            values.

            The enumeration 'unknown' is applicable if the physical
            entity class is unknown to the agent.

            The enumeration 'chassis' is applicable if the physical
            entity class is an overall container for networking
            equipment.  Any class of physical entity, except a stack,
            may be contained within a chassis; and a chassis may only
            be contained within a stack.
            The enumeration 'backplane' is applicable if the physical
            entity class is some sort of device for aggregating and
            forwarding networking traffic, such as a shared backplane in
            a modular ethernet switch.  Note that an agent may model a
            backplane as a single physical entity, which is actually
            implemented as multiple discrete physical components (within
            a chassis or stack).

            The enumeration 'container' is applicable if the physical
            entity class is capable of containing one or more removable
            physical entities, possibly of different types.  For
            example, each (empty or full) slot in a chassis will be
            modeled as a container.  Note that all removable physical
            entities should be modeled within a container entity, such
            as field-replaceable modules, fans, or power supplies.  Note
            that all known containers should be modeled by the agent,
            including empty containers.

            The enumeration 'powerSupply' is applicable if the physical
            entity class is a power-supplying component.

            The enumeration 'fan' is applicable if the physical entity
            class is a fan or other heat-reduction component.

            The enumeration 'sensor' is applicable if the physical
            entity class is some sort of sensor, such as a temperature
            sensor within a router chassis.

            The enumeration 'module' is applicable if the physical
            entity class is some sort of self-contained sub-system.  If
            the enumeration 'module' is removable, then it should be
            modeled within a container entity, otherwise it should be
            modeled directly within another physical entity (e.g., a
            chassis or another module).

            The enumeration 'port' is applicable if the physical entity
            class is some sort of networking port, capable of receiving
            and/or transmitting networking traffic.

            The enumeration 'stack' is applicable if the physical entity
            class is some sort of super-container (possibly virtual),
            intended to group together multiple chassis entities.  A
            stack may be realized by a 'virtual' cable, a real
            interconnect cable, attached to multiple chassis, or may in
            fact be comprised of multiple interconnect cables.  A stack
            should not be modeled within any other physical entities,
            but a stack may be contained within another stack.  Only
            chassis entities should be contained within a stack.
            The enumeration 'cpu' is applicable if the physical entity
            class is some sort of central processing unit."
    SYNTAX      INTEGER  {
       other(1),
       unknown(2),
       chassis(3),
       backplane(4),
       container(5),     -- e.g., chassis slot or daughter-card holder
       powerSupply(6),
       fan(7),
       sensor(8),
       module(9),        -- e.g., plug-in card or daughter-card
       port(10),
       stack(11),        -- e.g., stack of multiple chassis entities
       cpu(12)
    }

SnmpEngineIdOrNone ::= TEXTUAL-CONVENTION
    STATUS            current
    DESCRIPTION
            "A specially formatted SnmpEngineID string for use with the
            Entity MIB.

            If an instance of an object of SYNTAX SnmpEngineIdOrNone has
            a non-zero length, then the object encoding and semantics
            are defined by the SnmpEngineID textual convention (see STD
            62, RFC 3411 [RFC3411]).

            If an instance of an object of SYNTAX SnmpEngineIdOrNone
            contains a zero-length string, then no appropriate
            SnmpEngineID is associated with the logical entity (i.e.,
            SNMPv3 is not supported)."
    SYNTAX OCTET STRING (SIZE(0..32)) -- empty string or SnmpEngineID


--           The Physical Entity Table
entPhysicalTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF EntPhysicalEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
            "This table contains one row per physical entity.  There is
            always at least one row for an 'overall' physical entity."
    ::= { entityPhysical 1 }

entPhysicalEntry       OBJECT-TYPE
    SYNTAX      EntPhysicalEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
            "Information about a particular physical entity.

            Each entry provides objects (entPhysicalDescr,
            entPhysicalVendorType, and entPhysicalClass) to help an NMS
            identify and characterize the entry, and objects
            (entPhysicalContainedIn and entPhysicalParentRelPos) to help
            an NMS relate the particular entry to other entries in this
            table."
    INDEX   { entPhysicalIndex }
    ::= { entPhysicalTable 1 }

EntPhysicalEntry ::= SEQUENCE {
      entPhysicalIndex          PhysicalIndex,
      entPhysicalDescr          SnmpAdminString,
      entPhysicalVendorType     AutonomousType,
      entPhysicalContainedIn    PhysicalIndexOrZero,
      entPhysicalClass          PhysicalClass,
      entPhysicalParentRelPos   Integer32,
      entPhysicalName           SnmpAdminString,
      entPhysicalHardwareRev    SnmpAdminString,
      entPhysicalFirmwareRev    SnmpAdminString,
      entPhysicalSoftwareRev    SnmpAdminString,
      entPhysicalSerialNum      SnmpAdminString,
      entPhysicalMfgName        SnmpAdminString,
      entPhysicalModelName      SnmpAdminString,
      entPhysicalAlias          SnmpAdminString,
      entPhysicalAssetID        SnmpAdminString,
      entPhysicalIsFRU          TruthValue,
      entPhysicalMfgDate        DateAndTime,
      entPhysicalUris           OCTET STRING

}

entPhysicalIndex    OBJECT-TYPE
    SYNTAX      PhysicalIndex
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
            "The index for this entry."
    ::= { entPhysicalEntry 1 }

entPhysicalDescr OBJECT-TYPE
    SYNTAX      SnmpAdminString
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
            "A textual description of physical entity.  This object
            should contain a string that identifies the manufacturer's
            name for the physical entity, and should be set to a
            distinct value for each version or model of the physical
            entity."
    ::= { entPhysicalEntry 2 }

entPhysicalVendorType OBJECT-TYPE
    SYNTAX      AutonomousType
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
            "An indication of the vendor-specific hardware type of the
            physical entity.  Note that this is different from the
            definition of MIB-II's sysObjectID.

            An agent should set this object to an enterprise-specific
            registration identifier value indicating the specific
            equipment type in detail.  The associated instance of
            entPhysicalClass is used to indicate the general type of
            hardware device.

            If no vendor-specific registration identifier exists for
            this physical entity, or the value is unknown by this agent,
            then the value { 0 0 } is returned."
    ::= { entPhysicalEntry 3 }

entPhysicalContainedIn OBJECT-TYPE
    SYNTAX      PhysicalIndexOrZero
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
            "The value of entPhysicalIndex for the physical entity which
            'contains' this physical entity.  A value of zero indicates
            this physical entity is not contained in any other physical
            entity.  Note that the set of 'containment' relationships
            define a strict hierarchy; that is, recursion is not
            allowed.

            In the event that a physical entity is contained by more
            than one physical entity (e.g., double-wide modules), this
            object should identify the containing entity with the lowest
            value of entPhysicalIndex."
    ::= { entPhysicalEntry 4 }

entPhysicalClass OBJECT-TYPE
    SYNTAX      PhysicalClass
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
            "An indication of the general hardware type of the physical
            entity.

            An agent should set this object to the standard enumeration
            value that most accurately indicates the general class of
            the physical entity, or the primary class if there is more
            than one entity.

            If no appropriate standard registration identifier exists
            for this physical entity, then the value 'other(1)' is
            returned.  If the value is unknown by this agent, then the
            value 'unknown(2)' is returned."
    ::= { entPhysicalEntry 5 }

entPhysicalParentRelPos OBJECT-TYPE
    SYNTAX      Integer32 (-1..2147483647)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
            "An indication of the relative position of this 'child'
            component among all its 'sibling' components.  Sibling
            components are defined as entPhysicalEntries that share the
            same instance values of each of the entPhysicalContainedIn
            and entPhysicalClass objects.

            An NMS can use this object to identify the relative ordering
            for all sibling components of a particular parent
            (identified by the entPhysicalContainedIn instance in each
            sibling entry).

            If possible, this value should match any external labeling
            of the physical component.  For example, for a container
            (e.g., card slot) labeled as 'slot #3',
            entPhysicalParentRelPos should have the value '3'.  Note
            that the entPhysicalEntry for the module plugged in slot 3
            should have an entPhysicalParentRelPos value of '1'.

            If the physical position of this component does not match
            any external numbering or clearly visible ordering, then
            user documentation or other external reference material
            should be used to determine the parent-relative position.
            If this is not possible, then the agent should assign a
            consistent (but possibly arbitrary) ordering to a given set
            of 'sibling' components, perhaps based on internal
            representation of the components.
            If the agent cannot determine the parent-relative position
            for some reason, or if the associated value of
            entPhysicalContainedIn is '0', then the value '-1' is
            returned.  Otherwise, a non-negative integer is returned,
            indicating the parent-relative position of this physical
            entity.

            Parent-relative ordering normally starts from '1' and
            continues to 'N', where 'N' represents the highest
            positioned child entity.  However, if the physical entities
            (e.g., slots) are labeled from a starting position of zero,
            then the first sibling should be associated with an
            entPhysicalParentRelPos value of '0'.  Note that this
            ordering may be sparse or dense, depending on agent
            implementation.

            The actual values returned are not globally meaningful, as
            each 'parent' component may use different numbering
            algorithms.  The ordering is only meaningful among siblings
            of the same parent component.

            The agent should retain parent-relative position values
            across reboots, either through algorithmic assignment or use
            of non-volatile storage."
    ::= { entPhysicalEntry 6 }

entPhysicalName OBJECT-TYPE
    SYNTAX      SnmpAdminString
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
            "The textual name of the physical entity.  The value of this
            object should be the name of the component as assigned by
            the local device and should be suitable for use in commands
            entered at the device's `console'.  This might be a text
            name (e.g., `console') or a simple component number (e.g.,
            port or module number, such as `1'), depending on the
            physical component naming syntax of the device.

            If there is no local name, or if this object is otherwise
            not applicable, then this object contains a zero-length
            string.

            Note that the value of entPhysicalName for two physical
            entities will be the same in the event that the console
            interface does not distinguish between them, e.g., slot-1
            and the card in slot-1."
    ::= { entPhysicalEntry 7 }



entPhysicalHardwareRev    OBJECT-TYPE
    SYNTAX      SnmpAdminString
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
            "The vendor-specific hardware revision string for the
            physical entity.  The preferred value is the hardware
            revision identifier actually printed on the component itself
            (if present).

            Note that if revision information is stored internally in a
            non-printable (e.g., binary) format, then the agent must
            convert such information to a printable format, in an
            implementation-specific manner.

            If no specific hardware revision string is associated with
            the physical component, or if this information is unknown to
            the agent, then this object will contain a zero-length
            string."
    ::= { entPhysicalEntry 8 }

entPhysicalFirmwareRev    OBJECT-TYPE
    SYNTAX      SnmpAdminString
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
            "The vendor-specific firmware revision string for the
            physical entity.

            Note that if revision information is stored internally in a
            non-printable (e.g., binary) format, then the agent must
            convert such information to a printable format, in an
            implementation-specific manner.

            If no specific firmware programs are associated with the
            physical component, or if this information is unknown to the
            agent, then this object will contain a zero-length string."
    ::= { entPhysicalEntry 9 }

entPhysicalSoftwareRev    OBJECT-TYPE
    SYNTAX      SnmpAdminString
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
            "The vendor-specific software revision string for the
            physical entity.

            Note that if revision information is stored internally in a
            non-printable (e.g., binary) format, then the agent must
            convert such information to a printable format, in an
            implementation-specific manner.

            If no specific software programs are associated with the
            physical component, or if this information is unknown to the
            agent, then this object will contain a zero-length string."
    ::= { entPhysicalEntry 10 }

entPhysicalSerialNum   OBJECT-TYPE
    SYNTAX      SnmpAdminString (SIZE (0..32))
     MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
            "The vendor-specific serial number string for the physical
            entity.  The preferred value is the serial number string
            actually printed on the component itself (if present).

            On the first instantiation of an physical entity, the value
            of entPhysicalSerialNum associated with that entity is set
            to the correct vendor-assigned serial number, if this
            information is available to the agent.  If a serial number
            is unknown or non-existent, the entPhysicalSerialNum will be
            set to a zero-length string instead.

            Note that implementations that can correctly identify the
            serial numbers of all installed physical entities do not
            need to provide write access to the entPhysicalSerialNum
            object.  Agents which cannot provide non-volatile storage
            for the entPhysicalSerialNum strings are not required to
            implement write access for this object.

            Not every physical component will have a serial number, or
            even need one.  Physical entities for which the associated
            value of the entPhysicalIsFRU object is equal to 'false(2)'
            (e.g., the repeater ports within a repeater module), do not
            need their own unique serial number.  An agent does not have
            to provide write access for such entities, and may return a
            zero-length string.

            If write access is implemented for an instance of
            entPhysicalSerialNum, and a value is written into the
            instance, the agent must retain the supplied value in the
            entPhysicalSerialNum instance (associated with the same
            physical entity) for as long as that entity remains
            instantiated.  This includes instantiations across all
            re-initializations/reboots of the network management system,
            including those resulting in a change of the physical
            entity's entPhysicalIndex value."
    ::= { entPhysicalEntry 11 }

entPhysicalMfgName   OBJECT-TYPE
    SYNTAX      SnmpAdminString
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
            "The name of the manufacturer of this physical component.
            The preferred value is the manufacturer name string actually
            printed on the component itself (if present).

            Note that comparisons between instances of the
            entPhysicalModelName, entPhysicalFirmwareRev,
            entPhysicalSoftwareRev, and the entPhysicalSerialNum
            objects, are only meaningful amongst entPhysicalEntries with
            the same value of entPhysicalMfgName.

            If the manufacturer name string associated with the physical
            component is unknown to the agent, then this object will
            contain a zero-length string."
    ::= { entPhysicalEntry 12 }

entPhysicalModelName   OBJECT-TYPE
    SYNTAX      SnmpAdminString
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
            "The vendor-specific model name identifier string associated
            with this physical component.  The preferred value is the
            customer-visible part number, which may be printed on the
            component itself.

            If the model name string associated with the physical
            component is unknown to the agent, then this object will
            contain a zero-length string."
    ::= { entPhysicalEntry 13 }

entPhysicalAlias    OBJECT-TYPE
    SYNTAX      SnmpAdminString (SIZE (0..32))
     MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
            "This object is an 'alias' name for the physical entity, as
            specified by a network manager, and provides a non-volatile
            'handle' for the physical entity.

            On the first instantiation of a physical entity, the value
            of entPhysicalAlias associated with that entity is set to
            the zero-length string.  However, the agent may set the
            value to a locally unique default value, instead of a
            zero-length string.

            If write access is implemented for an instance of
            entPhysicalAlias, and a value is written into the instance,
            the agent must retain the supplied value in the
            entPhysicalAlias instance (associated with the same physical
            entity) for as long as that entity remains instantiated.
            This includes instantiations across all
            re-initializations/reboots of the network management system,
            including those resulting in a change of the physical
            entity's entPhysicalIndex value."
    ::= { entPhysicalEntry 14 }

entPhysicalAssetID OBJECT-TYPE
    SYNTAX      SnmpAdminString (SIZE (0..32))
     MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
            "This object is a user-assigned asset tracking identifier
            (as specified by a network manager) for the physical entity,
            and provides non-volatile storage of this information.

            On the first instantiation of a physical entity, the value
            of entPhysicalAssetID associated with that entity is set to
            the zero-length string.

            Not every physical component will have an asset tracking
            identifier, or even need one.  Physical entities for which
            the associated value of the entPhysicalIsFRU object is equal
            to 'false(2)' (e.g., the repeater ports within a repeater
            module), do not need their own unique asset tracking
            identifier.  An agent does not have to provide write access
            for such entities, and may instead return a zero-length
            string.

            If write access is implemented for an instance of
            entPhysicalAssetID, and a value is written into the
            instance, the agent must retain the supplied value in the
            entPhysicalAssetID instance (associated with the same
            physical entity) for as long as that entity remains
            instantiated.  This includes instantiations across all
            re-initializations/reboots of the network management system,
            including those resulting in a change of the physical
            entity's entPhysicalIndex value.
            If no asset tracking information is associated with the
            physical component, then this object will contain a
            zero-length string."
    ::= { entPhysicalEntry 15 }

entPhysicalIsFRU OBJECT-TYPE
    SYNTAX      TruthValue
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
            "This object indicates whether or not this physical entity
            is considered a 'field replaceable unit' by the vendor.  If
            this object contains the value 'true(1)' then this
            entPhysicalEntry identifies a field replaceable unit.  For
            all entPhysicalEntries that represent components
            permanently contained within a field replaceable unit, the
            value 'false(2)' should be returned for this object."
    ::= { entPhysicalEntry 16 }

entPhysicalMfgDate  OBJECT-TYPE
    SYNTAX      DateAndTime
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
            "This object contains the date of manufacturing of the
            managed entity.  If the manufacturing date is unknown or not
            supported, the object is not instantiated.  The special
            value '0000000000000000'H may also be returned in this
            case."
    ::= { entPhysicalEntry 17 }

entPhysicalUris OBJECT-TYPE
    SYNTAX      OCTET STRING
     MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
            "This object contains additional identification information
            about the physical entity.  The object contains URIs and,
            therefore, the syntax of this object must conform to RFC
            3986, section 2.

            Multiple URIs may be present and are separated by white
            space characters.  Leading and trailing white space
            characters are ignored.

            If no additional identification information is known
            about the physical entity or supported, the object is not
            instantiated.  A zero length octet string may also be
            returned in this case."
    REFERENCE
            "RFC 3986, Uniform Resource Identifiers (URI): Generic
            Syntax, section 2, August 1998."

    ::= { entPhysicalEntry 18 }


--           The Logical Entity Table
entLogicalTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF EntLogicalEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
            "This table contains one row per logical entity.  For agents
            that implement more than one naming scope, at least one
            entry must exist.  Agents which instantiate all MIB objects
            within a single naming scope are not required to implement
            this table."
    ::= { entityLogical 1 }

entLogicalEntry       OBJECT-TYPE
    SYNTAX      EntLogicalEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
            "Information about a particular logical entity.  Entities
            may be managed by this agent or other SNMP agents (possibly)
            in the same chassis."
    INDEX       { entLogicalIndex }
    ::= { entLogicalTable 1 }

EntLogicalEntry ::= SEQUENCE {
      entLogicalIndex            Integer32,
      entLogicalDescr            SnmpAdminString,
      entLogicalType             AutonomousType,
      entLogicalCommunity        OCTET STRING,
      entLogicalTAddress         TAddress,
      entLogicalTDomain          TDomain,
      entLogicalContextEngineID  SnmpEngineIdOrNone,
      entLogicalContextName      SnmpAdminString
}

entLogicalIndex OBJECT-TYPE
    SYNTAX      Integer32 (1..2147483647)
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
            "The value of this object uniquely identifies the logical
            entity.  The value should be a small positive integer; index
            values for different logical entities are not necessarily
            contiguous."
    ::= { entLogicalEntry 1 }

entLogicalDescr OBJECT-TYPE
    SYNTAX      SnmpAdminString
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
            "A textual description of the logical entity.  This object
            should contain a string that identifies the manufacturer's
            name for the logical entity, and should be set to a distinct
            value for each version of the logical entity."
    ::= { entLogicalEntry 2 }

entLogicalType OBJECT-TYPE
    SYNTAX      AutonomousType
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
            "An indication of the type of logical entity.  This will
            typically be the OBJECT IDENTIFIER name of the node in the
            SMI's naming hierarchy which represents the major MIB
            module, or the majority of the MIB modules, supported by the
            logical entity.  For example:
               a logical entity of a regular host/router -> mib-2
               a logical entity of a 802.1d bridge -> dot1dBridge
               a logical entity of a 802.3 repeater -> snmpDot3RptrMgmt
            If an appropriate node in the SMI's naming hierarchy cannot
            be identified, the value 'mib-2' should be used."
    ::= { entLogicalEntry 3 }

entLogicalCommunity OBJECT-TYPE
    SYNTAX      OCTET STRING (SIZE (0..255))
    MAX-ACCESS  read-only
    STATUS      deprecated
    DESCRIPTION
            "An SNMPv1 or SNMPv2C community-string, which can be used to
            access detailed management information for this logical
            entity.  The agent should allow read access with this
            community string (to an appropriate subset of all managed
            objects) and may also return a community string based on the
            privileges of the request used to read this object.  Note
            that an agent may return a community string with read-only
            privileges, even if this object is accessed with a
            read-write community string.  However, the agent must take
            care not to return a community string that allows more
            privileges than the community string used to access this
            object.

            A compliant SNMP agent may wish to conserve naming scopes by
            representing multiple logical entities in a single 'default'
            naming scope.  This is possible when the logical entities,
            represented by the same value of entLogicalCommunity, have
            no object instances in common.  For example, 'bridge1' and
            'repeater1' may be part of the main naming scope, but at
            least one additional community string is needed to represent
            'bridge2' and 'repeater2'.

            Logical entities 'bridge1' and 'repeater1' would be
            represented by sysOREntries associated with the 'default'
            naming scope.

            For agents not accessible via SNMPv1 or SNMPv2C, the value
            of this object is the empty string.  This object may also
            contain an empty string if a community string has not yet
            been assigned by the agent, or if no community string with
            suitable access rights can be returned for a particular SNMP
            request.

            Note that this object is deprecated.  Agents which implement
            SNMPv3 access should use the entLogicalContextEngineID and
            entLogicalContextName objects to identify the context
            associated with each logical entity.  SNMPv3 agents may
            return a zero-length string for this object, or may continue
            to return a community string (e.g., tri-lingual agent
            support)."
    ::= { entLogicalEntry 4 }

entLogicalTAddress OBJECT-TYPE
    SYNTAX      TAddress
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
            "The transport service address by which the logical entity
            receives network management traffic, formatted according to
            the corresponding value of entLogicalTDomain.

            For snmpUDPDomain, a TAddress is 6 octets long: the initial
            4 octets contain the IP-address in network-byte order and
            the last 2 contain the UDP port in network-byte order.
            Consult 'Transport Mappings for the Simple Network
            Management Protocol' (STD 62, RFC 3417 [RFC3417]) for
            further information on snmpUDPDomain."
    ::= { entLogicalEntry 5 }

entLogicalTDomain OBJECT-TYPE
    SYNTAX      TDomain
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
            "Indicates the kind of transport service by which the
            logical entity receives network management traffic.
            Possible values for this object are presently found in the
            Transport Mappings for Simple Network Management Protocol'
            (STD 62, RFC 3417 [RFC3417])."
    ::= { entLogicalEntry 6 }

entLogicalContextEngineID    OBJECT-TYPE
    SYNTAX      SnmpEngineIdOrNone
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
            "The authoritative contextEngineID that can be used to send
            an SNMP message concerning information held by this logical
            entity, to the address specified by the associated
            'entLogicalTAddress/entLogicalTDomain' pair.

            This object, together with the associated
            entLogicalContextName object, defines the context associated
            with a particular logical entity, and allows access to SNMP
            engines identified by a contextEngineId and contextName
            pair.

            If no value has been configured by the agent, a zero-length
            string is returned, or the agent may choose not to
            instantiate this object at all."
    ::= { entLogicalEntry 7 }

entLogicalContextName    OBJECT-TYPE
    SYNTAX      SnmpAdminString
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
            "The contextName that can be used to send an SNMP message
            concerning information held by this logical entity, to the
            address specified by the associated
            'entLogicalTAddress/entLogicalTDomain' pair.

            This object, together with the associated
            entLogicalContextEngineID object, defines the context
            associated with a particular logical entity, and allows
            access to SNMP engines identified by a contextEngineId and
            contextName pair.

            If no value has been configured by the agent, a zero-length
            string is returned, or the agent may choose not to
            instantiate this object at all."
    ::= { entLogicalEntry 8 }

entLPMappingTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF EntLPMappingEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
            "This table contains zero or more rows of logical entity to
            physical equipment associations.  For each logical entity
            known by this agent, there are zero or more mappings to the
            physical resources, which are used to realize that logical
            entity.

            An agent should limit the number and nature of entries in
            this table such that only meaningful and non-redundant
            information is returned.  For example, in a system that
            contains a single power supply, mappings between logical
            entities and the power supply are not useful and should not
            be included.

            Also, only the most appropriate physical component, which is
            closest to the root of a particular containment tree, should
            be identified in an entLPMapping entry.

            For example, suppose a bridge is realized on a particular
            module, and all ports on that module are ports on this
            bridge.  A mapping between the bridge and the module would
            be useful, but additional mappings between the bridge and
            each of the ports on that module would be redundant (because
            the entPhysicalContainedIn hierarchy can provide the same
            information).  On the other hand, if more than one bridge
            were utilizing ports on this module, then mappings between
            each bridge and the ports it used would be appropriate.

            Also, in the case of a single backplane repeater, a mapping
            for the backplane to the single repeater entity is not
            necessary."
    ::= { entityMapping 1 }

entLPMappingEntry       OBJECT-TYPE
    SYNTAX      EntLPMappingEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
            "Information about a particular logical entity to physical
            equipment association.  Note that the nature of the
            association is not specifically identified in this entry.
            It is expected that sufficient information exists in the
            MIBs used to manage a particular logical entity to infer how
            physical component information is utilized."
    INDEX       { entLogicalIndex, entLPPhysicalIndex }
    ::= { entLPMappingTable 1 }

EntLPMappingEntry ::= SEQUENCE {
      entLPPhysicalIndex         PhysicalIndex
}

entLPPhysicalIndex OBJECT-TYPE
    SYNTAX      PhysicalIndex
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
            "The value of this object identifies the index value of a
            particular entPhysicalEntry associated with the indicated
            entLogicalEntity."
    ::= { entLPMappingEntry 1 }


-- logical entity/component to alias table
entAliasMappingTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF EntAliasMappingEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
            "This table contains zero or more rows, representing
            mappings of logical entity and physical component to
            external MIB identifiers.  Each physical port in the system
            may be associated with a mapping to an external identifier,
            which itself is associated with a particular logical
            entity's naming scope.  A 'wildcard' mechanism is provided
            to indicate that an identifier is associated with more than
            one logical entity."
    ::= { entityMapping 2 }

entAliasMappingEntry       OBJECT-TYPE
    SYNTAX      EntAliasMappingEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
            "Information about a particular physical equipment, logical
            entity to external identifier binding.  Each logical
            entity/physical component pair may be associated with one
            alias mapping.  The logical entity index may also be used as
            a 'wildcard' (refer to the entAliasLogicalIndexOrZero object
            DESCRIPTION clause for details.)

            Note that only entPhysicalIndex values that represent
            physical ports (i.e., associated entPhysicalClass value is
            'port(10)') are permitted to exist in this table."
    INDEX { entPhysicalIndex, entAliasLogicalIndexOrZero }
    ::= { entAliasMappingTable 1 }

EntAliasMappingEntry ::= SEQUENCE {
      entAliasLogicalIndexOrZero        Integer32,
      entAliasMappingIdentifier         RowPointer
}

entAliasLogicalIndexOrZero OBJECT-TYPE
    SYNTAX      Integer32 (0..2147483647)
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
            "The value of this object identifies the logical entity
            that defines the naming scope for the associated instance
            of the 'entAliasMappingIdentifier' object.

            If this object has a non-zero value, then it identifies the
            logical entity named by the same value of entLogicalIndex.

            If this object has a value of zero, then the mapping between
            the physical component and the alias identifier for this
            entAliasMapping entry is associated with all unspecified
            logical entities.  That is, a value of zero (the default
            mapping) identifies any logical entity that does not have
            an explicit entry in this table for a particular
            entPhysicalIndex/entAliasMappingIdentifier pair.

            For example, to indicate that a particular interface (e.g.,
            physical component 33) is identified by the same value of
            ifIndex for all logical entities, the following instance
            might exist:

                    entAliasMappingIdentifier.33.0 = ifIndex.5

            In the event an entPhysicalEntry is associated differently
            for some logical entities, additional entAliasMapping
            entries may exist, e.g.:

                    entAliasMappingIdentifier.33.0 = ifIndex.6
                    entAliasMappingIdentifier.33.4 =  ifIndex.1
                    entAliasMappingIdentifier.33.5 =  ifIndex.1
                    entAliasMappingIdentifier.33.10 = ifIndex.12

            Note that entries with non-zero entAliasLogicalIndexOrZero
            index values have precedence over zero-indexed entries.  In
            this example, all logical entities except 4, 5, and 10,
            associate physical entity 33 with ifIndex.6."
    ::= { entAliasMappingEntry 1 }

entAliasMappingIdentifier OBJECT-TYPE
    SYNTAX      RowPointer
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
            "The value of this object identifies a particular conceptual
            row associated with the indicated entPhysicalIndex and
            entLogicalIndex pair.

            Because only physical ports are modeled in this table, only
            entries that represent interfaces or ports are allowed.  If
            an ifEntry exists on behalf of a particular physical port,
            then this object should identify the associated 'ifEntry'.
            For repeater ports, the appropriate row in the
            'rptrPortGroupTable' should be identified instead.

            For example, suppose a physical port was represented by
            entPhysicalEntry.3, entLogicalEntry.15 existed for a
            repeater, and entLogicalEntry.22 existed for a bridge.  Then
            there might be two related instances of
            entAliasMappingIdentifier:
               entAliasMappingIdentifier.3.15 == rptrPortGroupIndex.5.2
               entAliasMappingIdentifier.3.22 == ifIndex.17
            It is possible that other mappings (besides interfaces and
            repeater ports) may be defined in the future, as required.

            Bridge ports are identified by examining the Bridge MIB and
            appropriate ifEntries associated with each 'dot1dBasePort',
            and are thus not represented in this table."
    ::= { entAliasMappingEntry 2 }


-- physical mapping table
entPhysicalContainsTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF EntPhysicalContainsEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
            "A table that exposes the container/'containee'
            relationships between physical entities.  This table
            provides all the information found by constructing the
            virtual containment tree for a given entPhysicalTable, but
            in a more direct format.

            In the event a physical entity is contained by more than one
            other physical entity (e.g., double-wide modules), this
            table should include these additional mappings, which cannot
            be represented in the entPhysicalTable virtual containment
            tree."
    ::= { entityMapping 3 }

entPhysicalContainsEntry OBJECT-TYPE
    SYNTAX      EntPhysicalContainsEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
            "A single container/'containee' relationship."
    INDEX       { entPhysicalIndex, entPhysicalChildIndex }
    ::= { entPhysicalContainsTable 1 }

EntPhysicalContainsEntry ::= SEQUENCE {
      entPhysicalChildIndex     PhysicalIndex
}

entPhysicalChildIndex OBJECT-TYPE
    SYNTAX      PhysicalIndex
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
            "The value of entPhysicalIndex for the contained physical
            entity."
    ::= { entPhysicalContainsEntry 1 }

-- last change time stamp for the whole MIB
entLastChangeTime OBJECT-TYPE
    SYNTAX      TimeStamp
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
            "The value of sysUpTime at the time a conceptual row is
            created, modified, or deleted in any of these tables:
                    - entPhysicalTable
                    - entLogicalTable
                    - entLPMappingTable
                    - entAliasMappingTable
                    - entPhysicalContainsTable
            "
    ::= { entityGeneral 1 }


-- Entity MIB Trap Definitions
entityMIBTraps      OBJECT IDENTIFIER ::= { entityMIB 2 }
entityMIBTrapPrefix OBJECT IDENTIFIER ::= { entityMIBTraps 0 }

entConfigChange NOTIFICATION-TYPE
    STATUS             current
    DESCRIPTION
            "An entConfigChange notification is generated when the value
            of entLastChangeTime changes.  It can be utilized by an NMS
            to trigger logical/physical entity table maintenance polls.

            An agent should not generate more than one entConfigChange
            'notification-event' in a given time interval (five seconds
            is the suggested default).  A 'notification-event' is the
            transmission of a single trap or inform PDU to a list of
            notification destinations.

            If additional configuration changes occur within the
            throttling period, then notification-events for these
            changes should be suppressed by the agent until the current
            throttling period expires.  At the end of a throttling
            period, one notification-event should be generated if any
            configuration changes occurred since the start of the
            throttling period.  In such a case, another throttling
            period is started right away.

            An NMS should periodically check the value of
            entLastChangeTime to detect any missed entConfigChange
            notification-events, e.g., due to throttling or transmission
            loss."
   ::= { entityMIBTrapPrefix 1 }


-- conformance information
entityConformance OBJECT IDENTIFIER ::= { entityMIB 3 }

entityCompliances OBJECT IDENTIFIER ::= { entityConformance 1 }
entityGroups      OBJECT IDENTIFIER ::= { entityConformance 2 }


-- compliance statements
entityCompliance MODULE-COMPLIANCE
    STATUS  deprecated
    DESCRIPTION
            "The compliance statement for SNMP entities that implement
            version 1 of the Entity MIB."
    MODULE  -- this module
        MANDATORY-GROUPS {
                           entityPhysicalGroup,
                           entityLogicalGroup,
                           entityMappingGroup,
                           entityGeneralGroup,
                           entityNotificationsGroup
        }
    ::= { entityCompliances 1 }

entity2Compliance MODULE-COMPLIANCE
    STATUS  deprecated
    DESCRIPTION
            "The compliance statement for SNMP entities that implement
            version 2 of the Entity MIB."
    MODULE  -- this module
        MANDATORY-GROUPS {
                           entityPhysicalGroup,
                           entityPhysical2Group,
                           entityGeneralGroup,
                           entityNotificationsGroup
        }
        GROUP entityLogical2Group
        DESCRIPTION
            "Implementation of this group is not mandatory for agents
            that model all MIB object instances within a single naming
            scope."

        GROUP entityMappingGroup
        DESCRIPTION
            "Implementation of the entPhysicalContainsTable is mandatory
            for all agents.  Implementation of the entLPMappingTable and
            entAliasMappingTables are not mandatory for agents that
            model all MIB object instances within a single naming scope.

            Note that the entAliasMappingTable may be useful for all
            agents; however, implementation of the entityLogicalGroup or
            entityLogical2Group is required to support this table."

        OBJECT entPhysicalSerialNum
        MIN-ACCESS   not-accessible
        DESCRIPTION
            "Read and write access is not required for agents that
            cannot identify serial number information for physical
            entities, and/or cannot provide non-volatile storage for
            NMS-assigned serial numbers.

            Write access is not required for agents that can identify
            serial number information for physical entities, but cannot
            provide non-volatile storage for NMS-assigned serial
            numbers.

            Write access is not required for physical entities for which
            the associated value of the entPhysicalIsFRU object is equal
            to 'false(2)'."

        OBJECT entPhysicalAlias
        MIN-ACCESS   read-only
        DESCRIPTION
            "Write access is required only if the associated
            entPhysicalClass value is equal to 'chassis(3)'."

        OBJECT entPhysicalAssetID
        MIN-ACCESS   not-accessible
        DESCRIPTION
            "Read and write access is not required for agents that
            cannot provide non-volatile storage for NMS-assigned asset
            identifiers.

            Write access is not required for physical entities for which
            the associated value of the entPhysicalIsFRU object is equal
            to 'false(2)'."

        OBJECT entPhysicalClass
        SYNTAX INTEGER {
            other(1),
            unknown(2),
            chassis(3),
            backplane(4),
            container(5),
            powerSupply(6),
            fan(7),
            sensor(8),
            module(9),
            port(10),
            stack(11)
        }
        DESCRIPTION
            "Implementation of the 'cpu(12)' enumeration is not
            required."

    ::= { entityCompliances 2 }


entity3Compliance MODULE-COMPLIANCE
    STATUS  current
    DESCRIPTION
            "The compliance statement for SNMP entities that implement
            version 3 of the Entity MIB."
    MODULE  -- this module
        MANDATORY-GROUPS {
                           entityPhysicalGroup,
                           entityPhysical2Group,
                           entityPhysical3Group,
                           entityGeneralGroup,
                           entityNotificationsGroup
        }
        GROUP entityLogical2Group
        DESCRIPTION
            "Implementation of this group is not mandatory for agents
            that model all MIB object instances within a single naming
            scope."

        GROUP entityMappingGroup
        DESCRIPTION
            "Implementation of the entPhysicalContainsTable is mandatory
            for all agents.  Implementation of the entLPMappingTable and
            entAliasMappingTables are not mandatory for agents that
            model all MIB object instances within a single naming scope.

            Note that the entAliasMappingTable may be useful for all
            agents; however, implementation of the entityLogicalGroup or
            entityLogical2Group is required to support this table."

        OBJECT entPhysicalSerialNum
        MIN-ACCESS   not-accessible
        DESCRIPTION
            "Read and write access is not required for agents that
            cannot identify serial number information for physical
            entities, and/or cannot provide non-volatile storage for
            NMS-assigned serial numbers.

            Write access is not required for agents that can identify
            serial number information for physical entities, but cannot
            provide non-volatile storage for NMS-assigned serial
            numbers.

            Write access is not required for physical entities for
            which the associated value of the entPhysicalIsFRU object
            is equal to 'false(2)'."

        OBJECT entPhysicalAlias
        MIN-ACCESS   read-only
        DESCRIPTION
            "Write access is required only if the associated
            entPhysicalClass value is equal to 'chassis(3)'."

        OBJECT entPhysicalAssetID
        MIN-ACCESS   not-accessible
        DESCRIPTION
            "Read and write access is not required for agents that
            cannot provide non-volatile storage for NMS-assigned asset
            identifiers.

            Write access is not required for physical entities for which
            the associated value of entPhysicalIsFRU is equal to
            'false(2)'."
    ::= { entityCompliances 3 }


-- MIB groupings
entityPhysicalGroup    OBJECT-GROUP
    OBJECTS {
              entPhysicalDescr,
              entPhysicalVendorType,
              entPhysicalContainedIn,
              entPhysicalClass,
              entPhysicalParentRelPos,
              entPhysicalName
            }
    STATUS  current
    DESCRIPTION
            "The collection of objects used to represent physical
            system components, for which a single agent provides
            management information."
    ::= { entityGroups 1 }

entityLogicalGroup    OBJECT-GROUP
    OBJECTS {
              entLogicalDescr,
              entLogicalType,
              entLogicalCommunity,
              entLogicalTAddress,
              entLogicalTDomain
            }
    STATUS  deprecated
    DESCRIPTION
            "The collection of objects used to represent the list of
            logical entities, for which a single agent provides
            management information."

    ::= { entityGroups 2 }

entityMappingGroup    OBJECT-GROUP
    OBJECTS {
              entLPPhysicalIndex,
              entAliasMappingIdentifier,
              entPhysicalChildIndex
            }
    STATUS  current
    DESCRIPTION
            "The collection of objects used to represent the
            associations between multiple logical entities, physical
            components, interfaces, and port identifiers, for which a
            single agent provides management information."
    ::= { entityGroups 3 }

entityGeneralGroup    OBJECT-GROUP
    OBJECTS {
              entLastChangeTime
            }
    STATUS  current
    DESCRIPTION
            "The collection of objects used to represent general entity
            information, for which a single agent provides management
            information."
    ::= { entityGroups 4 }

entityNotificationsGroup NOTIFICATION-GROUP
    NOTIFICATIONS { entConfigChange }
    STATUS        current
    DESCRIPTION
            "The collection of notifications used to indicate Entity MIB
            data consistency and general status information."
    ::= { entityGroups 5 }

entityPhysical2Group    OBJECT-GROUP
    OBJECTS {
              entPhysicalHardwareRev,
              entPhysicalFirmwareRev,
              entPhysicalSoftwareRev,
              entPhysicalSerialNum,
              entPhysicalMfgName,
              entPhysicalModelName,
              entPhysicalAlias,
              entPhysicalAssetID,
              entPhysicalIsFRU
            }
    STATUS  current
    DESCRIPTION
            "The collection of objects used to represent physical
            system components, for which a single agent provides
            management information.  This group augments the objects
            contained in the entityPhysicalGroup."
    ::= { entityGroups 6 }

entityLogical2Group    OBJECT-GROUP
    OBJECTS {
              entLogicalDescr,
              entLogicalType,
              entLogicalTAddress,
              entLogicalTDomain,
              entLogicalContextEngineID,
              entLogicalContextName
            }
    STATUS  current
    DESCRIPTION
            "The collection of objects used to represent the
            list of logical entities, for which a single SNMP entity
            provides management information."
    ::= { entityGroups 7 }

entityPhysical3Group    OBJECT-GROUP
    OBJECTS {
              entPhysicalMfgDate,
              entPhysicalUris
            }
    STATUS  current
    DESCRIPTION
            "The collection of objects used to represent physical
            system components, for which a single agent provides
            management information.  This group augments the objects
            contained in the entityPhysicalGroup."
    ::= { entityGroups 8 }


END
