RFC 2037
Entity MIB using SMIv2
Entity MIB using SMIv2 π
part 1 of 6 π«Ά more parts are coming, so don't leave yet bestie
Network Working Group, RFC 2037 π
- Authors: K. McCloghrie and A. Bierman (Cisco Systems) π
- Category: Standards Track π₯
- Date: October 1996 π
- Obsoletes / Updates: this title block doesn't list anything, so nothing is obsoleted or updated here πΈ
Status of This Memo π¦
okay so this document is an Internet standards track protocol for the Internet community β¨ it's also inviting discussion and suggestions for improvements, so feel free to speak up π for the current standardization state and status of this protocol, check the current edition of the "Internet Official Protocol Standards" (STD 1) π and yes, distribution of this memo is unlimited π
Table of Contents
1. Introduction .............................................. 2
2. The SNMP Network Management Framework ..................... 2
2.1 Object Definitions ....................................... 2
3. Overview .................................................. 3
3.1 Terms .................................................... 4
3.2 Relationship to Community Strings ........................ 5
3.3 Relationship to Proxy Mechanisms ......................... 5
3.4 Relationship to a Chassis MIB ............................ 5
3.5 Relationship to the Interfaces MIB ....................... 6
3.6 Relationship to the Other MIBs ........................... 6
3.7 Relationship to Naming Scopes ............................ 6
3.8 Multiple Instances of the Entity MIB ..................... 7
3.9 Re-Configuration of Entities ............................. 7
3.10 MIB Structure ........................................... 7
3.10.1 entityPhysical Group .................................. 8
3.10.2 entityLogical Group ................................... 8
3.10.3 entityMapping Group ................................... 8
3.10.4 entityGeneral Group ................................... 9
3.10.5 entityNotifications Group ............................. 9
3.11 Multiple Agents ......................................... 9
4. Definitions ............................................... 10
5. Usage Examples ............................................ 26
5.1 Router/Bridge ............................................ 26
5.2 Repeaters ................................................ 30
6. Acknowledgements .......................................... 33
7. References ................................................ 34
8. Security Considerations ................................... 35
9. Authors' Addresses ........................................ 35
1. Introduction π§
this memo defines a chunk of the Management Information Base (MIB) for network management protocols used across the Internet community π specifically, it describes the managed objects for handling multiple logical and physical entities that are all managed by one SNMP agent β¨
2. The SNMP Network Management Framework πΈ
the SNMP Network Management Framework is currently made up of three major pieces, bestie π
- the SMI, described in RFC 1902 [1]. this is the set of mechanisms used to describe and name objects for management purposes π
- the MIB-II, STD 17, RFC 1213 [2]. this is the core set of managed objects for the Internet protocol suite π
- the protocol, RFC 1157 [6] and/or RFC 1905 [4]. this is the protocol used to access managed information π₯
textual conventions are defined in RFC 1903 [3], and conformance statements are defined in RFC 1904 [5] π
the Framework allows new objects to be defined for experimentation and evaluation π¦
this memo specifies a MIB module that is compliant with the SNMPv2 SMI. a semantically identical MIB that conforms to the SNMPv1 SMI can be produced through the appropriate translation π
2.1. Object Definitions π
managed objects are accessed through a virtual information store called the Management Information Base, or MIB π«Ά objects in the MIB are defined using the subset of Abstract Syntax Notation One (ASN.1) that the SMI defines π§ each object type is named by an OBJECT IDENTIFIER, which is an administratively assigned name π the object type together with an object instance uniquely identifies one specific instantiation of the object β¨ and for human convenience, we often use a textual string called the descriptor to refer to the object type π
3. Overview π
okay so there's a real need for a standard way to represent a single agent that supports multiple instances of one MIB π this is already true for at least 3 standard MIBs, and it's likely to happen with more and more MIBs over time β for example:
- multiple instances of a bridge supported within a single device that has a single agent π
- multiple repeaters supported by a single agent π
- multiple OSPF backbone areas, each one operating as part of its own Autonomous System, and each identified by the same area-id (e.g., 0.0.0.0), supported inside a single router with one agent π¦
the fact that there's a single agent in each of these cases means there's some relationship tying all of these entities together π«Ά basically, there's some "overall" physical entity that houses everything managed by that one agent. in other words, there are multiple "logical" entities inside a single physical entity β¨ sometimes the overall physical entity contains multiple (smaller) physical entities, and each logical entity is associated with one particular physical entity π other times, the overall physical entity is a "compound" of multiple physical entities, like a stack of stackable hubs π§
what we need is a way to figure out exactly which logical entities the agent manages (whether over SNMPv1 or SNMPv2), so that we can talk to the agent about one particular logical entity π₯ when different logical entities are tied to different physical entities within the overall physical entity, it's also handy to use that information to tell the logical entities apart π
in these situations, there's no need for varbinds for multiple logical entities to be referenced in the same SNMP message (although that might be useful in the future) π instead, it's good enough, and in some situations even better, for the context or community in the message to identify which logical entity the varbinds apply to π
3.1. Terms π
some new terms get used throughout this document, so here's the tea π΅
- Naming Scope: a "naming scope" is the set of information that can potentially be accessed through a single SNMP operation. every instance inside the naming scope shares the same unique identifier space. for SNMPv1, a naming scope is identified by the value of the associated
entLogicalCommunityinstance. π - Multi-Scoped Object: a MIB object for which identical instance values identify different managed information in different naming scopes is called a "multi-scoped" MIB object πΈ
- Single-Scoped Object: a MIB object for which identical instance values identify the same managed information in different naming scopes is called a "single-scoped" MIB object π
- Logical Entity: a managed system contains one or more logical entities, and each one is represented by at most one instantiation of each of a particular set of MIB objects. a set of management functions is associated with each logical entity. examples of logical entities include routers, bridges, print-servers, etc. π
- Physical Entity: a "physical entity" or "physical component" represents an identifiable physical resource within a managed system. zero or more logical entities may use a physical resource at any given time. which physical components an agent represents in the
entPhysicalTableis an implementation-specific choice. typically, physical resources (e.g. communications ports, backplanes, sensors, daughter-cards, power supplies, the overall chassis) that can be managed through functions associated with one or more logical entities are included in the MIB. π₯ - Containment Tree: each physical component may optionally be modeled as "contained" within another physical component. a "containment-tree" is the conceptual sequence of
entPhysicalIndexvalues that uniquely specifies the exact physical location of a physical component within the managed system. it's generated by "following and recording" eachentPhysicalContainedIninstance "up the tree towards the root", until a value of zero is found, which means there's no further containment π§
note that chassis slots, which can accept one or more module types from one or more vendors, are modeled as containers in this MIB. the value of entPhysicalContainedIn for a particular 'module' entity (entPhysicalClass value of module(9)) must be equal to an entPhysicalIndex that represents the parent 'container' entity (associated entPhysicalClass value of container(5)). an agent must represent both empty and full containers in the entPhysicalTable π«Ά
3.2. Relationship to Community Strings ποΈ
for community-based SNMP, telling different logical entities apart is one purpose of the community string [6], but it's not the only one π this is handled by representing each community string as a logical entity β¨
note that different logical entities may share the same naming scope, and therefore the same values of entLogicalCommunity. this is possible as long as they don't need the same instance of a MIB object to represent different managed information π
3.3. Relationship to Proxy Mechanisms π
the Entity MIB is designed to allow functional component discovery π¦ the administrative relationships between different logical entities aren't visible in any Entity MIB tables, so an NMS can't tell whether MIB instances in different naming scopes are realized locally or remotely (for example, through some proxy mechanism) just by looking at any particular Entity MIB objects π
managing administrative framework functions isn't an explicit goal of the Entity MIB WG at this time π this new area of functionality may be revisited after some operational experience with the Entity MIB has been gained β
note that a network administrator will probably be able to associate community strings with naming scopes using proprietary mechanisms, as a matter of configuration π there are no mechanisms for managing naming scopes defined in this MIB π
3.4. Relationship to a Chassis MIB π¦
some readers may remember that a previous IETF working group tried to define a Chassis MIB π°οΈ no consensus was reached by that working group, possibly because its scope was too broad π₯² so this MIB is not meant to be a "Chassis MIB replacement", and it's also not within this MIB's scope to contain all the information that might be needed to manage a "chassis" π ββοΈ on the other hand, the entities represented by an implementation of this MIB might well be contained in a chassis π
3.5. Relationship to the Interfaces MIB π
okay so the Entity MIB has a mapping table πΊοΈ that lists physical components which have "external values" (like ifIndex) attached to them within a given naming scope. bestie, this is how you find the physical spot of each interface in the ifTable [7] π. ngl the tricky part is that ifIndex values in different contexts aren't related to one another, so the interface-to-physical-component links only make sense relative to the same logical entity inside the agent π
.
the Entity MIB also has an entPhysicalName object that kinda copies the vibe of the ifName object from the Interfaces MIB [7], but for all types of physical components π
3.6. Relationship to the Other MIBs π§©
another mapping table in the Entity MIB links physical components to identifiers from other standard MIBs β¨. you can use it along with the physical mapping table to find the physical location of each repeater port in the rptrPortTable, or each interface in the ifTable π¦.
3.7. Relationship to Naming Scopes π
okay so there's some question about which MIB objects can come back within a given naming scope π€. MIB objects that aren't multi-scoped inside a managed system will probably ignore context information when implemented π. so those objects will likely show up in all naming scopes, not just the 'main' one.
for example, a community string used to access the management info for logical device 'bridge2' might let you see all the non-bridge stuff in 'main', plus a second instance of the Bridge MIB π.
isolating single-scoped objects is an implementation-specific matter for the agent π οΈ. an agent might want to limit what gets returned in a naming scope to just the multi-scoped objects there (like the system group and the Bridge MIB). in that case, all the single-scoped management info would live in one common naming scope (like 'main'), which can itself hold some multi-scoped objects (like the system group) π.
3.8. Multiple Instances of the Entity MIB π―
it's possible that more than one agent exists in a managed system π , and then several instances of the Entity MIB (all representing the same managed objects) might be available to an NMS π‘.
to reduce complexity for agent implementation, multiple instances of the Entity MIB are not required to be equivalent or even consistent π. an NMS may be able to "align" what different agents return by looking at the columns of each table, but vendor-specific identifiers and (especially) index values are likely to be different π. each agent may also be managing different subsets of the entire chassis.
when all of a physically-modular device is represented by a single agent, the entry whose entPhysicalContainedIn has the value zero would likely have 'chassis' as the value of its entPhysicalClass π§±. alternatively, for an agent on a module where the agent represents only the physical entities on that module (not those on other modules), the entry whose entPhysicalContainedIn has the value zero would likely have 'module' as the value of its entPhysicalClass π.
an agent implementation of the entLogicalTable is not required to contain information about logical entities managed primarily by other agents π
. the entLogicalTAddress and entLogicalTDomain objects in the entLogicalTable are provided to support an historical multiplexing mechanism, not to identify other SNMP agents π°οΈ.
note that the Entity MIB is a single-scoped MIB, in the event an agent represents the MIB in different naming scopes β¨.
3.9. Re-Configuration of Entities π§
all the MIB objects defined in this MIB have at most a read-only MAX-ACCESS clause, which means none of them are write-able π
. this was a conscious decision by the working group to keep this MIB's scope limited π€. it's possible this restriction could be lifted after implementation experience, using additional tables (via the AUGMENTS clause) for configuration and extended entity information πΈ.
3.10. MIB Structure ποΈ
the Entity MIB contains five conformance groups π:
- entityPhysical group: describes the physical entities managed by a single agent.
- entityLogical group: describes the logical entities managed by a single agent.
- entityMapping group: describes the associations between the physical entities, logical entities, interfaces, and non-interface ports managed by a single agent.
- entityGeneral group: describes general system attributes shared by potentially all types of entities managed by a single agent.
- entityNotifications group: contains status indication notifications.
3.10.1. entityPhysical Group π§±
this group contains a single table to identify physical system components, called the entPhysicalTable ποΈ.
the entPhysicalTable contains one row per physical entity, and must always contain at least one row for an "overall" physical entity π. each row is indexed by an arbitrary, small integer, and contains a description and type of the physical entity. it also optionally contains the index number of another entPhysicalEntry, indicating a containment relationship between the two π«Ά.
3.10.2. entityLogical Group π§
this group contains a single table to identify logical entities, called the entLogicalTable π.
the entLogicalTable contains one row per logical entity. each row is indexed by an arbitrary, small integer and contains a name, description, and type of the logical entity. it also contains information to allow SNMPv1 or SNMPv2C [9] access to the MIB information for the logical entity π.
3.10.3. entityMapping Group πΊοΈ
this group contains three tables to identify associations between different system components π.
the entLPMappingTable contains mappings between entLogicalIndex values (logical entities) and entPhysicalIndex values (the physical components supporting that entity). a logical entity can map to more than one physical component, and more than one logical entity can map to (share) the same physical component π€.
the entAliasMappingTable contains mappings between entLogicalIndex, entPhysicalIndex pairs and 'alias' object identifier values. this lets resources managed with other MIBs (like repeater ports, bridge ports, and physical and logical interfaces) be identified in the physical entity hierarchy π. note that each alias identifier is only relevant in a particular naming scope π.
the entPhysicalContainsTable contains simple mappings between 'entPhysicalContainedIn' values for each container/containee relationship in the managed system. its indexing lets an NMS quickly discover the entPhysicalIndex values for all children of a given physical entity π.
3.10.4. entityGeneral Group π·
this group contains general information relating to the other object groups π. at this time, the entGeneral group contains a single scalar object (entLastChangeTime), which represents the value of sysUptime when any part of the system configuration last changed β°.
3.10.5. entityNotifications Group π
this group contains notification definitions relating to the overall status of the Entity MIB instantiation π.
3.11. Multiple Agents π€
even though a primary motivation for this MIB is to represent the multiple logical entities supported by a single agent, it's also possible to use it to represent multiple logical entities supported by multiple agents (in the same "overall" physical entity) β¨. honestly it's implicit in the SNMP architecture that the number of agents is transparent to a network management station π.
however, there is no agreement at this time on the degree of cooperation which should be expected for agent implementations π. so multiple agents within the same managed system are free to implement the Entity MIB independently π¦. (Refer to the section on "Multiple Instances of the Entity MIB" for more details.)
4. Definitions π
ENTITY-MIB DEFINITIONS ::= BEGIN
IMPORTS
MODULE-IDENTITY, OBJECT-TYPE,
mib-2, NOTIFICATION-TYPE
FROM SNMPv2-SMI
TDomain, TAddress, DisplayString, TEXTUAL-CONVENTION,
AutonomousType, RowPointer, TimeStamp
FROM SNMPv2-TC
MODULE-COMPLIANCE, OBJECT-GROUP
FROM SNMPv2-CONF;
entityMIB MODULE-IDENTITY
LAST-UPDATED "9605160000Z"
ORGANIZATION "IETF ENTMIB Working Group"
CONTACT-INFO
" WG E-mail: entmib@cisco.com
Subscribe: majordomo@cisco.com
msg body: subscribe entmib
Keith McCloghrie
ENTMIB Working Group Chair
Cisco Systems Inc.
170 West Tasman Drive
San Jose, CA 95134
408-526-5260
kzm@cisco.com
Andy Bierman
ENTMIB Working Group Editor
Cisco Systems Inc.
170 West Tasman Drive
San Jose, CA 95134
408-527-3711
abierman@cisco.com"
DESCRIPTION
"The MIB module for representing multiple logical
entities supported by a single SNMP agent."
::= { 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
STATUS current
DESCRIPTION
"An arbitrary value which uniquely identifies the physical
entity. The value is a small positive integer; index values
for different physical entities are not necessarily
contiguous."
SYNTAX INTEGER (1..2147483647)
PhysicalClass ::= TEXTUAL-CONVENTION
STATUS current
DESCRIPTION
"An enumerated value which provides an indication of the
general hardware type of a particular physical entity."
SYNTAX INTEGER {
other(1),
unknown(2),
chassis(3),
backplane(4),
container(5), -- e.g. slot or daughter-card holder
powerSupply(6),
fan(7),
sensor(8),
module(9), -- e.g. plug-in card or daughter-card
port(10)
}
-- 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 }
Okay bestie, picking up right where we left off with the physical table π§π Now we get the columns: the SEQUENCE that defines a row, then each object one by one. Let's gooo π₯
Here's the row layout for the physical table, the whole blueprint for one entPhysicalEntry π
EntPhysicalEntry ::= SEQUENCE {
entPhysicalIndex PhysicalIndex,
entPhysicalDescr DisplayString,
entPhysicalVendorType AutonomousType,
entPhysicalContainedIn INTEGER,
entPhysicalClass PhysicalClass,
entPhysicalParentRelPos INTEGER,
entPhysicalName DisplayString
}
First up is entPhysicalIndex π It's the not-accessible key for each row, so you can't read it directly, but the row is identified by it π
entPhysicalIndex OBJECT-TYPE
SYNTAX PhysicalIndex
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"The index for this entry."
::= { entPhysicalEntry 1 }
Next is entPhysicalDescr π This one's the manufacturer's name for the entity, and it should be a different string for every version or model. Iconic, honestly β¨
entPhysicalDescr OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"A textual description of physical entity. This object
should contain a string which 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 is giving hardware-type drama π€πΏ It's the vendor's own hardware type. It's not the same as MIB-II's sysObjectID, so don't mix those up, bestie π If the agent doesn't know it, the answer is { 0 0 }.
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 a 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 is the family tree π³π It says which physical entity this one is inside of. A value of zero means it's sitting at the top with nobody above it. The containment relationships form a strict hierarchy, so recursion is a no-go π ββοΈ
entPhysicalContainedIn OBJECT-TYPE
SYNTAX INTEGER (0..2147483647)
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."
::= { entPhysicalEntry 4 }
entPhysicalClass is the general vibe check π§ It tells you what kind of hardware this is, using the standard enumeration. If nothing fits, it's other(1), and if the agent doesn't recognise it, it's unknown(2). Lowkey the most important column for sorting things out π
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 which most accurately indicates the general class of
the physical entity, or the primary class if there is more
than one.
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 is the seating chart πͺβ This is the position of a child among its siblings, the ones that share the same containedIn and class. NMS tools use it to put siblings in order, and it should match any external labels, like "card #3" getting 3. If there's no real ordering, the agent picks a consistent one, and it can be sparse or dense. Numbering can start at 1 or 0, and the values only mean something among siblings of the same parent πΈ And yes, the agent should keep these across reboots, using algorithms or non-volatile storage π
entPhysicalParentRelPos OBJECT-TYPE
SYNTAX INTEGER (-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 which 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).
This value should match any external labeling of the
physical component if possible. For example, for a module
labeled as 'card #3', entPhysicalParentRelPos should have
the value '3'.
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 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 a
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 is the console name ππ» This is the name you'd actually type at the device's console, like console or a plain number such as 1. If there's no local name, it's a zero-length string. Heads up: two entities can share a name if the console can't tell them apart, like slot-1 and the card in slot-1 π
entPhysicalName OBJECT-TYPE
SYNTAX DisplayString
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, such as `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 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 }
Now we switch to the logical side of things π¦ This is the logical entity table, with its own little group of columns β¨
-- 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. At least
one entry must exist."
::= { 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 }
The logical row has six columns π Here's the blueprint for each entry:
EntLogicalEntry ::= SEQUENCE {
entLogicalIndex INTEGER,
entLogicalDescr DisplayString,
entLogicalType AutonomousType,
entLogicalCommunity OCTET STRING,
entLogicalTAddress TAddress,
entLogicalTDomain TDomain
}
entLogicalIndex is the ID card πͺͺ It's a small positive integer that uniquely identifies each logical entity. The values don't have to be contiguous, so gaps are totally fine π
entLogicalIndex OBJECT-TYPE
SYNTAX INTEGER (1..2147483647)
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"The value of this object uniquely identifies the logical
entity. The value is a small positive integer; index values
for different logical entities are are not necessarily
contiguous."
::= { entLogicalEntry 1 }
entLogicalDescr is the manufacturer's glow-up π It's the manufacturer's name for the logical entity, and it should be distinct for each version.
entLogicalDescr OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"A textual description of the logical entity. This object
should contain a string which 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 is the category label π·οΈ This is normally the OBJECT IDENTIFIER of the node in the SMI naming tree that represents the major MIB module (or most of them) the entity supports. The examples are a regular host or router being mib-2, an 802.1d bridge being dot1dBridge, and an 802.3 repeater being snmpDot3RptrMgmt. If there's no good node to point at, use mib-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 is the access pass ππΏ It's an SNMPv1 or SNMPv2C community string that gets you into the detailed info for this logical entity. Agents should allow read access with it (to an appropriate subset of objects), and they can pick what to return based on the request's privileges. An agent must not return a string that grants more privileges than the one used to read this object, so no sneaky upgrades, okay? π«
Naming scopes are the bestie-sharing part π Logical entities can share one main naming scope if they have no object instances in common. For example, bridge1 and repeater1 can live in the main scope, but bridge2 and repeater2 need another community string. And for agents that aren't reachable over SNMPv1 or SNMPv2C, the value is the empty string.
entLogicalCommunity OBJECT-TYPE
SYNTAX OCTET STRING (SIZE (1..255))
MAX-ACCESS read-only
STATUS current
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 choose to return a community string
based on the privileges of the request used to read this
object. Note that an agent may choose to 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 which
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 'main'
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 'main'
naming scope.
For agents not accessible via SNMPv1 or SNMPv2C, the value
of this object is the empty-string."
::= { entLogicalEntry 4 }
Okay bestie, we're picking up right where entLogicalCommunity left off π Next up is the transport address for the logical entity, the spot where management traffic actually lands π¦
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 containing the IP-address in network-byte order and
the last 2 containing the UDP port in network-byte order.
Consult 'Transport Mappings for Version 2 of the Simple
Network Management Protocol' (RFC 1906 [8]) 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 SNMPv2 document (RFC 1906 [8])."
::= { entLogicalEntry 6 }
Think of entLogicalTAddress as the address and entLogicalTDomain as the kind of transport it's using π The address is formatted based on the domain, and for snmpUDPDomain that means 6 octets: 4 for the IP address and 2 for the UDP port, both in network-byte order β¨ Ngl, the 1906 doc is where all the transport juice is, so go check it if you're curious π§
Now the logical-to-physical mapping table, which is so important, the way it tells you which hardware is actually doing the work for each logical entity π
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 which
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 (since the
entPhysicalContainedIn hierarchy can provide the same
information). If, on the other hand, more than one bridge
was 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 }
The big vibe of this table is "only keep the useful stuff" π Like, if a system has one power supply, mapping every logical entity to it is just noise. And when a bridge sits on a module, you only need the module mapping, because the containment tree already tells you about the ports π If several bridges are using the same module's ports, though, then yep, you map each bridge to the ports it uses πΈ And a single backplane repeater? No mapping needed for that either π«Ά
-- 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 which 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 INTEGER,
entAliasMappingIdentifier RowPointer
}
entAliasLogicalIndexOrZero OBJECT-TYPE
SYNTAX INTEGER (0..2147483647)
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"The value of this object uniquely identifies the logical
entity which 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 which 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 any zero-indexed entry. 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.
Since only physical ports are modeled in this table, only
entries which 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 }
Alias mappings are where it gets extra π₯ Each physical port can get tied to an external identifier, and that identifier belongs to a logical entity's naming scope. The entAliasLogicalIndexOrZero value of 0 is the wildcard that matches everyone who doesn't have their own explicit entry, and explicit entries take precedence over it π Ports are the only physical things allowed in this table, so the classic ifIndex or rptrPortGroupIndex stuff goes here, while bridge ports get found through the Bridge MIB instead π¦
-- physical mapping table
entPhysicalContainsTable OBJECT-TYPE
SYNTAX SEQUENCE OF EntPhysicalContainsEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"A table which exposes the container/containee relationships
between physical entities. This table provides equivalent
information found by constructing the virtual containment
tree for a given entPhysicalTable but in a more direct
format."
::= { 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 }
This containment table is basically the containment tree, but flattened into a direct list so you don't have to build the tree yourself π§ Each row is just one container and one containee, nothing fancy, no cap π
-- 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 any of these events
occur:
* a conceptual row is created or deleted in any
of these tables:
- entPhysicalTable
- entLogicalTable
- entLPMappingTable
- entAliasMappingTable
- entPhysicalContainsTable
* any instance in the following list of objects
changes value:
- entPhysicalDescr
- entPhysicalVendorType
- entPhysicalContainedIn
- entPhysicalClass
- entPhysicalParentRelPos
- entPhysicalName
- entLogicalDescr
- entLogicalType
- entLogicalCommunity
- entLogicalTAddress
- entLogicalTDomain
- entAliasMappingIdentifier "
::= { entityGeneral 1 }
-- Entity MIB Trap Definitions
entityMIBTraps OBJECT IDENTIFIER ::= { entityMIB 2 }
entityMIBTrapPrefix OBJECT IDENTIFIER ::= { entityMIBTraps 0 }
entLastChangeTime is the MIB's "when did something last move?" stamp β° It's the sysUpTime value at the moment a row gets created or deleted in one of those five tables, or when any object on that list changes value π And the trap definitions at the bottom are the setup for the entity MIB's traps π
Okay so the big trap here is entConfigChange π It fires whenever entLastChangeTime changes, and an NMS can use it to kick off its logical/physical entity table maintenance polls. The real drama is the throttling: an agent must not send more than one trap-event in any five second period, and extra changes inside that "throttling" window get suppressed π That's why the NMS also keeps checking entLastChangeTime itself, so nothing slips through because of throttling or transmission loss π«Ά
entConfigChange NOTIFICATION-TYPE
STATUS current
DESCRIPTION
"An entConfigChange trap is sent when the value of
entLastChangeTime changes. It can be utilized by an NMS to
trigger logical/physical entity table maintenance polls.
An agent must not generate more than one entConfigChange
'trap-event' in a five second period, where a 'trap-event'
is the transmission of a single trap PDU to a list of trap
destinations. If additional configuration changes occur
within the five second 'throttling' period, then these
trap-events should be suppressed by the agent. An NMS should
periodically check the value of entLastChangeTime to detect
any missed entConfigChange trap-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 current
DESCRIPTION
"The compliance statement for SNMP entities which implement
the Entity MIB."
MODULE -- this module
MANDATORY-GROUPS { entityPhysicalGroup,
entityLogicalGroup,
entityMappingGroup,
entityGeneralGroup,
entityNotificationsGroup }
::= { entityCompliances 1 }
-- MIB groupings
entityPhysicalGroup OBJECT-GROUP
OBJECTS {
entPhysicalDescr,
entPhysicalVendorType,
entPhysicalContainedIn,
entPhysicalClass,
entPhysicalParentRelPos,
entPhysicalName
}
STATUS current
DESCRIPTION
"The collection of objects which are 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 current
DESCRIPTION
"The collection of objects which are 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 which are 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 which are 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 }
END
5. Usage Examples β¨
Time for the fun part π These sections go through the instance values for two example networking devices. I kept them simple so they're easier to vibe with. Stuff like fans, sensors, empty slots, and sub-modules isn't shown, but real implementations might totally model them π§
5.1. Router/Bridge π¦
Picture a router with two slots πΈ Each slot holds a 3 port router/bridge module, and every port is represented in the ifTable. It's running two logical instances of OSPF and has two logical bridges, which is giving multitasking energy π
Here's the physical side, the entPhysicalTable:
Physical entities -- entPhysicalTable:
1 Field-replaceable physical chassis:
entPhysicalDescr.1 == "Acme Chassis Model 100"
entPhysicalVendorType.1 == acmeProducts.chassisTypes.1
entPhysicalContainedIn.1 == 0
entPhysicalClass.1 == chassis(3)
entPhysicalParentRelPos.1 == 0
entPhysicalName.1 == '100-A'
2 slots within the chassis:
entPhysicalDescr.2 == "Acme Chassis Slot Type AA"
entPhysicalVendorType.2 == acmeProducts.slotTypes.1
entPhysicalContainedIn.2 == 1
entPhysicalClass.2 == container(5)
entPhysicalParentRelPos.2 == 1
entPhysicalName.2 == 'S1'
entPhysicalDescr.3 == "Acme Chassis Slot Type AA"
entPhysicalVendorType.3 == acmeProducts.slotTypes.1
entPhysicalContainedIn.3 == 1
entPhysicalClass.3 == container(5)
entPhysicalParentRelPos.3 == 2
entPhysicalName.3 == 'S2'
2 Field-replaceable modules:
Slot 1 contains a module with 3 ports:
entPhysicalDescr.4 == "Acme Router-100"
entPhysicalVendorType.4 == acmeProducts.moduleTypes.14
entPhysicalContainedIn.4 == 2
entPhysicalClass.4 == module(9)
entPhysicalParentRelPos.4 == 1
entPhysicalName.4 == 'M1'
entPhysicalDescr.5 == "Acme Ethernet-100 Port Rev G"
entPhysicalVendorType.5 == acmeProducts.portTypes.2
entPhysicalContainedIn.5 == 4
entPhysicalClass.5 == port(10)
entPhysicalParentRelPos.5 == 1
entPhysicalName.5 == 'P1'
entPhysicalDescr.6 == "Acme Ethernet-100 Port Rev G"
entPhysicalVendorType.6 == acmeProducts.portTypes.2
entPhysicalContainedIn.6 == 4
entPhysicalClass.6 == port(10)
entPhysicalParentRelPos.6 == 2
entPhysicalName.6 == 'P2'
entPhysicalDescr.7 == "Acme Router-100 F-Port: Rev B"
entPhysicalVendorType.7 == acmeProducts.portTypes.3
entPhysicalContainedIn.7 == 4
entPhysicalClass.7 == port(10)
entPhysicalParentRelPos.7 == 3
entPhysicalName.7 == 'P3'
Slot 2 contains another 3-port module:
entPhysicalDescr.8 == "Acme Router-100 Comm Module: Rev C"
entPhysicalVendorType.8 == acmeProducts.moduleTypes.15
entPhysicalContainedIn.8 == 3
entPhysicalClass.8 == module(9)
entPhysicalParentRelPos.8 == 1
entPhysicalName.8 == 'M2'
entPhysicalDescr.9 == "Acme Fddi-100 Port Rev CC"
entPhysicalVendorType.9 == acmeProducts.portTypes.5
entPhysicalContainedIn.9 == 8
entPhysicalClass.9 == port(10)
entPhysicalParentRelPos.9 == 1
entPhysicalName.9 == 'FDDI Primary'
entPhysicalDescr.10 == "Acme Ethernet-100 Port Rev G"
entPhysicalVendorType.10 == acmeProducts.portTypes.2
entPhysicalContainedIn.10 == 8
entPhysicalClass.10 == port(10)
entPhysicalParentRelPos.10 == 2
entPhysicalName.10 == 'Ethernet A'
entPhysicalDescr.11 == "Acme Ethernet-100 Port Rev G"
entPhysicalVendorType.11 == acmeProducts.portTypes.2
entPhysicalContainedIn.11 == 8
entPhysicalClass.11 == port(10)
entPhysicalParentRelPos.11 == 3
entPhysicalName.11 == 'Ethernet B'
Next up are the logical entities in the entLogicalTable π Two OSPF instances and two bridges, all sharing the same address and SNMP UDP domain π
Logical entities -- entLogicalTable
2 OSPF instances:
entLogicalDescr.1 == "Acme OSPF v1.1"
entLogicalType.1 == ospf
entLogicalCommunity.1 == "public-ospf1"
entLogicalTAddress.1 == 124.125.126.127:161
entLogicalTDomain.1 == snmpUDPDomain
entLogicalDescr.2 == "Acme OSPF v1.1"
entLogicalType.2 == ospf
entLogicalCommunity.2 == "public-ospf2"
entLogicalTAddress.2 == 124.125.126.127:161
entLogicalTDomain.2 == snmpUDPDomain
2 logical bridges:
entLogicalDescr.3 == "Acme Bridge v2.1.1"
entLogicalType.3 == dod1dBridge
entLogicalCommunity.3 == "public-bridge1"
entLogicalTAddress.3 == 124.125.126.127:161
entLogicalTDomain.3 == snmpUDPDomain
entLogicalDescr.4 == "Acme Bridge v2.1.1"
entLogicalType.4 == dod1dBridge
entLogicalCommunity.4 == "public-bridge2"
entLogicalTAddress.4 == 124.125.126.127:161
entLogicalTDomain.4 == snmpUDPDomain
Now the logical-to-physical mappings, the bit that ties each logical entity to its hardware π§©
Logical to Physical Mappings:
1st OSPF instance: uses module 1-port 1
entLPPhysicalIndex.1.5 == 5
2nd OSPF instance: uses module 2-port 1
entLPPhysicalIndex.2.9 == 9
1st bridge group: uses module 1, all ports
[ed. -- Note that these mappings are included in the table since
another logical entity (1st OSPF) utilizes one of the
ports. If this were not the case, then a single mapping
to the module (e.g. entLPPhysicalIndex.3.4) would be
present instead. ]
entLPPhysicalIndex.3.5 == 5
entLPPhysicalIndex.3.6 == 6
entLPPhysicalIndex.3.7 == 7
2nd bridge group: uses module 2, all ports
entLPPhysicalIndex.4.9 == 9
entLPPhysicalIndex.4.10 == 10
entLPPhysicalIndex.4.11 == 11
Then come the physical-to-logical-to-MIB alias mappings in the entAliasMappingTable π There are two examples here: one where ifIndex values are global, and one where they aren't shared by every logical entity.
Physical to Logical to MIB Alias Mappings -- entAliasMappingTable:
Example 1: ifIndex values are global to all logical entities
entAliasMappingIdentifier.5.0 == ifIndex.1
entAliasMappingIdentifier.6.0 == ifIndex.2
entAliasMappingIdentifier.7.0 == ifIndex.3
entAliasMappingIdentifier.9.0 == ifIndex.4
entAliasMappingIdentifier.10.0 == ifIndex.5
entAliasMappingIdentifier.11.0 == ifIndex.6
Example 2: ifIndex values are not shared by all logical entities
entAliasMappingIdentifier.5.0 == ifIndex.1
entAliasMappingIdentifier.5.3 == ifIndex.101
entAliasMappingIdentifier.6.0 == ifIndex.2
entAliasMappingIdentifier.6.3 == ifIndex.102
entAliasMappingIdentifier.7.0 == ifIndex.3
entAliasMappingIdentifier.7.3 == ifIndex.103
entAliasMappingIdentifier.9.0 == ifIndex.4
entAliasMappingIdentifier.9.3 == ifIndex.204
entAliasMappingIdentifier.10.0 == ifIndex.5
entAliasMappingIdentifier.10.3 == ifIndex.205
entAliasMappingIdentifier.11.0 == ifIndex.6
entAliasMappingIdentifier.11.3 == ifIndex.206
Last but not least, the physical containment tree in the entPhysicalContainsTable π³ It's basically the family tree of the chassis, containers, modules, and ports π
Physical Containment Tree -- entPhysicalContainsTable
chassis has two containers:
entPhysicalChildIndex.1.2 = 2
entPhysicalChildIndex.1.3 = 3
container 1 has a module:
entPhysicalChildIndex.2.4 = 4
container 2 has a module:
entPhysicalChildIndex.3.8 = 8
module 1 has 3 ports:
entPhysicalChildIndex.4.5 = 5
entPhysicalChildIndex.4.6 = 6
entPhysicalChildIndex.4.7 = 7
module 2 has 3 ports:
entPhysicalChildIndex.8.9 = 9
entPhysicalChildIndex.8.10 = 10
entPhysicalChildIndex.1.11 = 11
5.2. Repeaters β¨
okay so this is a 3-slot hub with 2 backplane ethernet segments π slot three is empty, and the other slots hold ethernet repeater modules π¦
[ed. -- Note that a replacement for the current Repeater MIB (RFC 1516) is likely to emerge soon, and it will no longer be necessary to access repeater MIB data in different naming scopes.]
Physical entities -- entPhysicalTable: the chassis, backplanes, and slots all get their own entries π
1 Field-replaceable physical chassis:
entPhysicalDescr.1 == "Acme Chassis Model 110"
entPhysicalVendorType.1 == acmeProducts.chassisTypes.2
entPhysicalContainedIn.1 == 0
entPhysicalClass.1 == chassis(3)
entPhysicalParentRelPos.1 == 0
entPhysicalName.1 == '110-B'
2 Chassis Ethernet Backplanes:
entPhysicalDescr.2 == "Acme Ethernet Backplane Type A"
entPhysicalVendorType.2 == acmeProducts.backplaneTypes.1
entPhysicalContainedIn.2 == 1
entPhysicalClass.2 == backplane(4)
entPhysicalParentRelPos.2 == 1
entPhysicalName.2 == 'B1'
entPhysicalDescr.3 == "Acme Ethernet Backplane Type A"
entPhysicalVendorType.3 == acmeProducts.backplaneTypes.1
entPhysicalContainedIn.3 == 1
entPhysicalClass.3 == backplane(4)
entPhysicalParentRelPos.3 == 2
entPhysicalName.3 == 'B2'
3 slots within the chassis:
entPhysicalDescr.4 == "Acme Hub Slot Type RB"
entPhysicalVendorType.4 == acmeProducts.slotTypes.5
entPhysicalContainedIn.4 == 1
entPhysicalClass.4 == container(5)
entPhysicalParentRelPos.4 == 1
entPhysicalName.4 == 'Slot 1'
entPhysicalDescr.5 == "Acme Hub Slot Type RB"
entPhysicalVendorType.5 == acmeProducts.slotTypes.5
entPhysicalContainedIn.5 == 1
entPhysicalClass.5 == container(5)
entPhysicalParentRelPos.5 == 2
entPhysicalName.5 == 'Slot 2'
entPhysicalDescr.6 == "Acme Hub Slot Type RB"
entPhysicalVendorType.6 == acmeProducts.slotTypes.5
entPhysicalContainedIn.6 == 1
entPhysicalClass.6 == container(5)
entPhysicalParentRelPos.6 == 3
entPhysicalName.6 == 'Slot 3'
Slot 1 contains a plug-in module with 4 10-BaseT ports:
entPhysicalDescr.7 == "Acme 10Base-T Module 114 Rev A"
entPhysicalVendorType.7 == acmeProducts.moduleTypes.32
entPhysicalContainedIn.7 == 4
entPhysicalClass.7 == module(9)
entPhysicalParentRelPos.7 == 1
entPhysicalName.7 == 'M1'
entPhysicalDescr.8 == "Acme 10Base-T Port RB Rev A"
entPhysicalVendorType.8 == acmeProducts.portTypes.10
entPhysicalContainedIn.8 == 7
entPhysicalClass.8 == port(10)
entPhysicalParentRelPos.8 == 1
entPhysicalName.8 == 'Ethernet-A'
entPhysicalDescr.9 == "Acme 10Base-T Port RB Rev A"
entPhysicalVendorType.9 == acmeProducts.portTypes.10
entPhysicalContainedIn.9 == 7
entPhysicalClass.9 == port(10)
entPhysicalParentRelPos.9 == 2
entPhysicalName.9 == 'Ethernet-B'
entPhysicalDescr.10 == "Acme 10Base-T Port RB Rev B"
entPhysicalVendorType.10 == acmeProducts.portTypes.10
entPhysicalContainedIn.10 == 7
entPhysicalClass.10 == port(10)
entPhysicalParentRelPos.10 == 3
entPhysicalName.10 == 'Ethernet-C'
entPhysicalDescr.11 == "Acme 10Base-T Port RB Rev B"
entPhysicalVendorType.11 == acmeProducts.portTypes.10
entPhysicalContainedIn.11 == 7
entPhysicalClass.11 == port(10)
entPhysicalParentRelPos.11 == 4
entPhysicalName.11 == 'Ethernet-D'
Slot 2 contains another ethernet module with 2 ports.
entPhysicalDescr.12 == "Acme 10Base-T Module Model 4 Rev A"
entPhysicalVendorType.12 == acmeProducts.moduleTypes.30
entPhysicalContainedIn.12 = 5
entPhysicalClass.12 == module(9)
entPhysicalParentRelPos.12 == 1
entPhysicalName.12 == 'M2'
entPhysicalDescr.13 == "Acme 802.3 AUI Port Rev A"
entPhysicalVendorType.13 == acmeProducts.portTypes.11
entPhysicalContainedIn.13 == 12
entPhysicalClass.13 == port(10)
entPhysicalParentRelPos.13 == 1
entPhysicalName.13 == 'AUI'
entPhysicalDescr.14 == "Acme 10Base-T Port RD Rev B"
entPhysicalVendorType.14 == acmeProducts.portTypes.14
entPhysicalContainedIn.14 == 12
entPhysicalClass.14 == port(10)
entPhysicalParentRelPos.14 == 2
entPhysicalName.14 == 'E2'
Logical entities -- entLogicalTable π§ two repeaters, both living on the same agent
Repeater 1--comprised of any ports attached to backplane 1
entLogicalDescr.1 == "Acme repeater v3.1"
entLogicalType.1 == snmpDot3RptrMgt
entLogicalCommunity.1 "public-repeater1"
entLogicalTAddress.1 == 124.125.126.127:161
entLogicalTDomain.1 == snmpUDPDomain
Repeater 2--comprised of any ports attached to backplane 2:
entLogicalDescr.2 == "Acme repeater v3.1"
entLogicalType.2 == snmpDot3RptrMgt
entLogicalCommunity.2 == "public-repeater2"
entLogicalTAddress.2 == 124.125.126.127:161
entLogicalTDomain.2 == snmpUDPDomain
Logical to Physical Mappings -- entLPMappingTable: which physical ports belong to which repeater πΊοΈ
repeater1 uses backplane 1, slot 1-ports 1 & 2, slot 2-port 1
[ed. -- Note that a mapping to the module is not included,
since in this example represents a port-switchable hub.
Even though all ports on the module could belong to the
same repeater as a matter of configuration, the LP port
mappings should not be replaced dynamically with a single
mapping for the module (e.g. entLPPhysicalIndex.1.7).
If all ports on the module shared a single backplane connection,
then a single mapping for the module would be more appropriate. ]
entLPPhysicalIndex.1.2 == 2
entLPPhysicalIndex.1.8 == 8
entLPPhysicalIndex.1.9 == 9
entLPPhysicalIndex.1.13 == 13
repeater2 uses backplane 2, slot 1-ports 3 & 4, slot 2-port 2
entLPPhysicalIndex.2.3 == 3
entLPPhysicalIndex.2.10 == 10
entLPPhysicalIndex.2.11 == 11
entLPPhysicalIndex.2.14 == 14
Physical to Logical to MIB Alias Mappings -- entAliasMappingTable: the repeater port identifiers are shared by both repeaters πͺ
Repeater Port Identifier values are shared by both repeaters:
entAliasMappingIdentifier.8.0 == rptrPortGroupIndex.1.1
entAliasMappingIdentifier.9.0 == rptrPortGroupIndex.1.2
entAliasMappingIdentifier.10.0 == rptrPortGroupIndex.1.3
entAliasMappingIdentifier.11.0 == rptrPortGroupIndex.1.4
entAliasMappingIdentifier.13.0 == rptrPortGroupIndex.2.1
entAliasMappingIdentifier.14.0 == rptrPortGroupIndex.2.2
Physical Containment Tree -- entPhysicalContainsTable π³ who holds what
chassis has two backplanes and three containers:
entPhysicalChildIndex.1.2 = 2
entPhysicalChildIndex.1.3 = 3
entPhysicalChildIndex.1.4 = 4
entPhysicalChildIndex.1.5 = 5
entPhysicalChildIndex.1.6 = 6
container 1 has a module:
entPhysicalChildIndex.4.7 = 7
container 2 has a module
entPhysicalChildIndex.5.12 = 12
[ed. - in this example, container 3 is empty.]
module 1 has 4 ports:
entPhysicalChildIndex.7.8 = 8
entPhysicalChildIndex.7.9 = 9
entPhysicalChildIndex.7.10 = 10
entPhysicalChildIndex.7.11 = 11
module 2 has 2 ports:
entPhysicalChildIndex.12.13 = 13
entPhysicalChildIndex.12.14 = 14
6. Acknowledgements π«Ά
this doc was produced by the IETF Entity MIB Working Group, and they absolutely deserve a shoutout π£
7. References π
[1] SNMPv2 Working Group, Case, J., McCloghrie, K., Rose, M., and S. Waldbusser, "Structure of Management Information for version 2 of the Simple Network Management Protocol (SNMPv2)", RFC 1902, January 1996.
[2] McCloghrie, K., and M. Rose, Editors, "Management Information Base for Network Management of TCP/IP-based internets: MIB-II", STD 17, RFC 1213, Hughes LAN Systems, Performance Systems International, March 1991.
[3] SNMPv2 Working Group, Case, J., McCloghrie, K., Rose, M., and S. Waldbusser, "Textual Conventions for version 2 of the Simple Network Management Protocol (SNMPv2)", RFC 1903, January 1996.
[4] SNMPv2 Working Group, Case, J., McCloghrie, K., Rose, M., and S. Waldbusser, "Protocol Operations for version 2 of the Simple Network Management Protocol (SNMPv2)", RFC 1905, January 1996.
[5] SNMPv2 Working Group, Case, J., McCloghrie, K., Rose, M., and S. Waldbusser, "Conformance Statements for version 2 of the Simple Network Management Protocol (SNMPv2)", RFC 1904, January 1996.
[6] Case, J., M. Fedor, M. Schoffstall, J. Davin, "Simple Network Management Protocol", RFC 1157, SNMP Research, Performance Systems International, MIT Laboratory for Computer Science, May 1990.
[7] McCloghrie, K., and Kastenholtz, F., "Interfaces Group Evolution", RFC 1573, Hughes LAN Systems, FTP Software, January 1994.
[8] SNMPv2 Working Group, Case, J., McCloghrie, K., Rose, M., and S. Waldbusser, "Transport Mappings for version 2 of the Simple Network Management Protocol (SNMPv2)", RFC 1906, January 1996.
[9] SNMPv2 Working Group, Case, J., McCloghrie, K., Rose, M., and S. Waldbusser, "Introduction to Community-based SNMPv2", RFC 1901, January 1996.
8. Security Considerations π¨
this part is seriously important, so listen up π
In order to implement this MIB, an agent must make certain management information available about various logical and physical entities within a managed system, which may be considered sensitive in some network environments.
Therefore, a network administrator may wish to employ instance-level access control, and configure the Entity MIB access (i.e., community strings in SNMPv1 and SNMPv2C), such that certain instances within this MIB (e.g., entLogicalCommunity, or entire entLogicalEntries, entPhysicalEntries, and associated mapping table entries), are excluded from particular MIB views. π
9. Authors' Addresses π
Keith McCloghrie Cisco Systems, Inc. 170 West Tasman Drive San Jose, CA 95134
Phone: 408-526-5260 EMail: kzm@cisco.com
Andy Bierman Cisco Systems, Inc. 170 West Tasman Drive San Jose, CA 95134
Phone: 408-527-3711 EMail: abierman@cisco.com
π¦ where this page comes from
- ietf: rfc2037 1996-10
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms