RFC 6933
Entity MIB (Version 4)
RFC 6933: Entity MIB (Version 4) ✨
Okay bestie, let's start with the basics 🎀 This is RFC 6933, called Entity MIB (Version 4), and it's a Standards Track document, so it's an official Internet spec 💅 It was published in May 2013 under ISSN 2070-1721. It came from the IETF, and it obsoletes RFC 4133, which was version 3 of the Entity MIB, so this is the new hotness 🔥
The authors are A. Bierman from YumaWorks, Inc., D. Romascanu from Avaya, J. Quittek from NEC Europe Ltd., and M. Chandramouli from Cisco Systems, Inc. Iconic squad 👑
Abstract
This memo defines a portion of the Management Information Base (MIB) that network management protocols in the Internet community can use 🦋 It's all about managed objects for handling multiple logical and physical entities that a single Simple Network Management Protocol (SNMP) agent looks after. This document specifies version 4 of the Entity MIB, and it obsoletes version 3 of the Entity MIB module, which was published as RFC 4133. Main character energy ✨
Status of This Memo
This is an Internet Standards Track document 🌈
This document comes from the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community, received public review, and got approved for publication by the Internet Engineering Steering Group (IESG). If you want more on Internet Standards, check out Section 2 of RFC 5741 📚
Info about the current status of this document, any errata, and how to send feedback is at http://www.rfc-editor.org/info/rfc6933 🌸
Copyright Notice
Copyright (c) 2013 IETF Trust and the persons identified as the document authors. All rights reserved 💜
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) as they stand on the publication date. Please read these carefully, because they spell out your rights and restrictions for this document. Code Components pulled out of this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions, and they come without warranty as described in the Simplified BSD License ⚠️
Table of Contents
1. The SNMP Management Framework ...................................3
2. Overview ........................................................3
2.1. Terms ......................................................5
2.2. Relationship to Community Strings ..........................6
2.3. Relationship to SNMP Contexts ..............................6
2.4. Relationship to Proxy Mechanisms ...........................6
2.5. Relationship to a Chassis MIB ..............................7
2.6. Relationship to the Interfaces MIB .........................7
2.7. Relationship to the Other MIB Modules ......................7
2.8. Relationship to Naming Scopes ..............................7
2.9. Multiple Instances of the Entity MIB .......................8
2.10. Re-Configuration of Entities ..............................9
2.11. Textual Convention Change .................................9
2.12. MIB Structure .............................................9
2.12.1. entityPhysical Group ..............................10
2.12.2. entityLogical Group ...............................12
2.12.3. entityMapping Group ...............................12
2.12.4. entityGeneral Group ...............................13
2.12.5. entityNotifications Group .........................13
2.13. Multiple Agents ..........................................13
2.14. Changes Since RFC 2037 ...................................14
2.14.1. Textual Conventions ...............................14
2.14.2. New entPhysicalTable Objects ......................14
2.14.3. New entLogicalTable Objects .......................14
2.14.4. Bug Fixes .........................................14
2.15. Changes Since RFC 2737 ...................................15
2.15.1. Textual Conventions ...............................15
2.15.2. New Objects .......................................15
2.15.3. Bug Fixes .........................................15
2.16. Changes Since RFC 4133 ...................................15
2.16.1. MIB Module Addition ...............................15
2.16.2. Modification to Some of the MIB Objects ...........15
2.16.3. New TC for Universally Unique Identifier ..........16
3. MIB Definitions ................................................16
3.1. ENTITY-MIB ................................................16
3.2. IANA-ENTITY-MIB ...........................................50
3.3. UUID-TC-MIB ...............................................53
4. Usage Examples .................................................55
4.1. Router/Bridge .............................................55
4.2. Repeaters .................................................62
4.3. EMAN Example ..............................................69
5. Security Considerations ........................................70
6. IANA Considerations ............................................72
7. Acknowledgements ...............................................73
8. References .....................................................73
8.1. Normative References ......................................73
8.2. Informative References ....................................74
1. The SNMP Management Framework 🧚
If you want a detailed tour of the documents that describe the current Internet-Standard Management Framework, go check section 7 of RFC 3410 [RFC3410] 📖
Managed objects are accessed through a virtual information store called the Management Information Base, or MIB. MIB objects are usually reached through the Simple Network Management Protocol (SNMP). Objects in the MIB get defined with the mechanisms in the Structure of Management Information (SMI). This memo specifies a MIB module that complies with SMIv2, which is described in STD 58, RFC 2578 [RFC2578], STD 58, RFC 2579 [RFC2579] and STD 58, RFC 2580 [RFC2580] 💅
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 [RFC2119]. These are the capital-letter bossy words, so read them carefully 🫶
2. Overview 🌸
There's a real need for a standardized way to represent a single agent that supports multiple instances of one MIB module. This is already true for at least 3 standard MIB modules, and it's likely to happen with more and more MIB modules as time goes on. For example:
- multiple instances of a bridge supported within a single device that has a single agent;
- multiple repeaters supported by a single agent; and
- multiple OSPF backbone areas, each 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 single agent in each of these cases means a relationship ties these entities together. Basically, there's some "overall" physical entity that holds everything that one agent manages, which means there are multiple "logical" entities inside a single physical entity 🧩 Sometimes the overall physical entity holds multiple (smaller) physical entities, and each logical entity is tied to one particular physical entity. Other times the overall physical entity is a "compound" of several physical entities, like a stack of stackable hubs.
So what we need is a way to figure out exactly which logical entities the agent manages (using some version of SNMP), so we can talk to the agent about a particular logical entity 👀 When different logical entities are tied to different physical entities within the overall physical entity, it also helps to use that info to tell logical entities apart.
In these situations, varbinds for multiple logical entities don't need to show up in the same SNMP message (although that could be useful someday). Instead, it's good enough, and sometimes even better, to have the context or community in the message say which logical entity the varbinds are for 💖
Version 2 of this MIB handles new requirements that showed up after the first Entity MIB [RFC2037] was published. There's a need for a standardized way to give non-volatile, administratively assigned identifiers to physical components represented with the Entity MIB. There's also a need to line up the Entity MIB with the SNMPv3 administrative framework (STD 62, [RFC3411]). Implementation experience has shown that extra physical component attributes are also desirable ✨
Version 3 of this MIB handles new requirements that came up after the second Entity MIB [RFC2737] was published. We need to identify physical entities that are central processing units (CPUs), and we need a Textual Convention (TC) that identifies an entPhysicalIndex value or zero, where zero has application-specific semantics. Two new objects were added to the entPhysicalTable to record the manufacturing date and to provide additional URIs for a particular physical entity 🍓
Version 4 of this MIB handles new requirements that came up since the third version of the Entity MIB [RFC4133] was published. We need to add new enumerated values for entity physical classes, and we need to identify physical entities using a Universally Unique Identifier (UUID) format. We also need compliant implementations of the Entity MIB with smaller subsets of MIB objects for devices with constrained resources 🦋
The PhysicalClass TEXTUAL-CONVENTION got deprecated, and a new IANAPhysicalClass TC (maintained by IANA) took its place. A new TC, UUIDorZero, was created to represent a UUID, and a new MIB object was added to the entPhysicalTable to identify an entity. There's also a new compliance statement, entity4CRCompliance, for implementations where entities with constrained resources support a selected subset of MIB objects 🌈
2.1. Terms ✨
Okay bestie, let's lock in the vocab first so the rest of the doc makes sense 💅
- Naming Scope: a "naming scope" is the set of info you can reach through one single SNMP operation 🎀. Every instance inside a naming scope shares the same unique identifier space. For SNMPv1, the naming scope is identified by the value of the associated
entLogicalCommunityinstance. For SNMPv3, they say "context" instead of "naming scope". The full definition of an SNMP context is in Section 3.3.1 of RFC 3411 [RFC3411]. - Multi-Scoped Object: a MIB object where identical instance values point to different managed info in different naming scopes is a "multi-scoped" MIB object 🦋
- Single-Scoped Object: a MIB object where identical instance values point to the same managed info across naming scopes is a "single-scoped" MIB object 🌸
- Logical Entity: a managed system has one or more "logical entities" 👑. Each one is represented by at most one instantiation of each of a particular set of MIB objects, and each has its own set of management functions. Examples include routers, bridges, print-servers, etc.
- Physical Entity: a "physical entity" or "physical component" is 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 matter. Usually, physical resources (communications ports, backplanes, sensors, daughter-cards, power supplies, and the overall chassis) that can be managed through functions tied to one or more logical entities get included in the MIB. - Containment Tree: each physical component may be modeled as 'contained' within another physical component 🧩. A "containment-tree" is the conceptual sequence of
entPhysicalIndexvalues that uniquely pins down the exact physical location of a physical component in the managed system. You make it by 'following and recording' eachentPhysicalContainedIninstance 'up the tree towards the root' until you hit a value of zero, which means there's no further containment.
2.2. Relationship to Community Strings
For community-based SNMP, telling logical entities apart is one purpose of the community string [RFC1157]. It's not the only purpose, though 🫶 This is handled by representing each community string as a logical entity.
Different logical entities can share the same naming scope and therefore the same values of entLogicalCommunity. That's totally possible, as long as they don't need the same instance of a MIB object to represent different managed information ✨
2.3. Relationship to SNMP Contexts
Version 2 of the Entity MIB supports associating SNMPv3 contexts with logical entities 💜 Two new MIB objects, which define an SnmpEngineID and ContextName pair, get used together to identify an SNMP context tied to a logical entity. That context can then be used (together with the entLogicalTAddress and entLogicalTDomain MIB objects) to send SNMPv3 messages on behalf of a particular logical entity.
2.4. Relationship to Proxy Mechanisms
The Entity MIB is built for functional component discovery 🔍 The administrative relationships between different logical entities are not visible in any Entity MIB tables. An NMS cannot tell, just by looking at any particular Entity MIB objects, whether MIB instances in different naming scopes are realized locally or remotely (e.g., via some proxy mechanism).
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 is gained.
For community-based versions of SNMP, a network administrator will likely be able to associate community strings with naming scopes that have proprietary mechanisms, through configuration. There are no mechanisms for managing naming scopes defined in this MIB.
2.5. Relationship to a Chassis MIB
Some of you might remember that a previous IETF working group tried to define a Chassis MIB 😭 No consensus was reached, possibly because its scope was too broad. So it's not the purpose of the ENTITY-MIB module to be a "Chassis MIB replacement", and it's not in scope for the module to contain all the info that might be needed to manage a "chassis". On the other hand, the entities represented by an implementation of the ENTITY-MIB module might well be contained in a chassis 📦
2.6. Relationship to the Interfaces MIB
The Entity MIB has a mapping table that identifies physical components with 'external values' (e.g., ifIndex) associated with them within a given naming scope 🦋 This table can be used to identify the physical location of each interface in the ifTable [RFC2863]. Because ifIndex values in different contexts aren't related to one another, the interface-to-physical-component associations are relative to the same logical entity within the agent.
The Entity MIB also contains entPhysicalName and entPhysicalAlias objects. They approximate the semantics of the ifName and ifAlias objects (respectively) from the Interfaces MIB [RFC2863], for all types of physical components 💅
2.7. Relationship to the Other MIB Modules
The Entity MIB has a mapping table that identifies physical components with identifiers from other standard MIB modules 🧚 For example, this table can be used along with the physical mapping table to find the physical location of each repeater port in the rptrPortTable, or each interface in the ifTable.
2.8. Relationship to Naming Scopes
There's some question about which MIB objects may be returned within a given naming scope 🤔 MIB objects that aren't multi-scoped within a managed system are likely to ignore context information in implementation. In that case, such objects will likely be returned in all naming scopes (e.g., not just the 'default' naming scope or the SNMPv3 default context).
For example, a community string used to access the management information for logical device 'bridge2' may allow access to all the non-bridge-related objects in the 'default' naming scope, as well as a second instance of the Bridge MIB [RFC4188] 🎀
Isolating single-scoped MIB objects is up to the agent, and that's an implementation-specific matter 👑 An agent may want to limit the objects returned in a particular naming scope to only the multi-scoped objects in that scope (e.g., the system group and the Bridge MIB). In that case, all the single-scoped management information would belong to a common naming scope (e.g., 'default'), which itself may contain some multi-scoped objects (e.g., the system group).
2.9. Multiple Instances of the Entity MIB
It's possible that more than one agent exists in a managed system 🌈 In those cases, multiple instances of the Entity MIB (representing the same managed objects) may 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' instances returned by different agents by examining 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 a single agent represents all of a physically modular device, the entry (for which 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 (for which 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. In other words, the entLogicalTAddress and entLogicalTDomain objects in the entLogicalTable are there to support a historical multiplexing mechanism, not to identify other SNMP agents 🧃
Note that the Entity MIB is a single-scoped MIB, in case an agent represents the MIB in different naming scopes.
2.10. Re-Configuration of Entities
Most of the MIB objects defined in this MIB have, at most, a read-only MAX-ACCESS clause 🔒 That was a conscious decision by the working group to keep this MIB's scope limited. The second version of the Entity MIB does let a network administrator configure some common attributes of physical components ✨
2.11. Textual Convention Change
Version 1 of the Entity MIB has three MIB objects defined with the (now obsolete) DisplayString TEXTUAL-CONVENTION. In version 2 of the Entity MIB, the syntax for these objects was updated to use the (now preferred) SnmpAdminString TEXTUAL-CONVENTION 🌸
The ENTMIB working group (which was in charge of the document at that point) realized this change is not strictly supported by SMIv2. In their judgment, deprecating the old objects and defining new objects would have caused a bigger hit to backward compatibility and interoperability, given the particular semantics of these objects 💖
2.12. MIB Structure
The Entity MIB contains five groups of MIB objects 🧁
entityPhysicalgroup: describes the physical entities managed by a single agent.entityLogicalgroup: describes the logical entities managed by a single agent.entityMappinggroup: describes the associations between the physical entities, logical entities, interfaces, and non-interface ports managed by a single agent.entityGeneralgroup: describes general system attributes shared by potentially all types of entities managed by a single agent.entityNotificationsgroup: contains status indication notifications.
2.12.1. entityPhysical Group ✨
okay so this group has one table for identifying physical system components, and it's called the entPhysicalTable 🔧
the entPhysicalTable has one row per physical entity. it must always contain at least one row for an "overall" physical entity, and that row should have an entPhysicalClass value of 'stack(11)', 'chassis(3)', or 'module(9)'. the overall entity is the main character of the whole device 👑
each row is indexed by an arbitrary, small integer and holds a description and type for the physical entity. it can also optionally hold the index number of another entPhysicalEntry, which shows a containment relationship between the two rows 🧚
version 2 of the Entity MIB adds more objects for each physical entity. some common read-only attributes were added, plus three writable string objects. slay 💅
- entPhysicalAlias this string can be used by an NMS as a non-volatile identifier for the physical component. keeping a non-volatile string for every physical component in the entPhysicalTable can be costly and unnecessary 💸 so an agent may algorithmically generate entPhysicalAlias strings for particular entries (for example, based on the entPhysicalClass value) 🦋
- entPhysicalAssetID this string stores a user-specific asset identifier for removable physical components. to reduce the non-volatile storage a particular agent needs, a network administrator should only assign asset identifiers to physical entities that are field-replaceable (meaning they are not permanently contained within another physical entity) 🎀
- entPhysicalSerialNum this string stores a vendor-specific serial number for physical components. this writable object is used when an agent cannot identify the serial numbers of all installed physical entities and a network administrator wants to configure the non-volatile serial number strings manually (through an NMS application) 🌸
version 3 of the Entity MIB adds two more objects for each physical entity:
- entPhysicalMfgDate 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'Hmay also be returned in this case 📅 - entPhysicalUris this object provides additional identification information about the physical entity 🔍
this object contains one or more Uniform Resource Identifiers (URIs), so its syntax must conform to [RFC3986], Section 3. Uniform Resource Names (URNs) [RFC3406] are resource identifiers with the specific requirements for enabling location-independent identification of a resource, as well as longevity of reference. URNs are part of the larger URI family, with the specific goal of providing persistent naming of resources. URI schemes and URN namespaces are registered by IANA (see http://www.iana.org/assignments/uri-schemes and http://www.iana.org/assignments/urn-namespaces) 🌈
for example, the entPhysicalUris object may be used to encode a URI containing a Common Language Equipment Identifier (CLEI) URN for the managed physical entity. the URN namespace for CLEIs is defined in [RFC4152], and the CLEI format is defined in [T1.213] and [T1.213a]. for example, an entPhysicalUris instance may have the value of:
URN:CLEI:D4CE18B7AA
[RFC3986] and [RFC4152] identify this as a URI in the CLEI URN namespace. the specific CLEI code, D4CE18B7AA, is based on the example provided in [T1.213a] 🧾
multiple URIs may be present, and they 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 🙈
version 4 of the Entity MIB module provides an additional MIB object for each physical entity ✨
- entPhysicalUUID this object provides a unique identification for the physical entity. this object contains a globally unique identifier for the physical entity, in the format defined in RFC 4122 [RFC4122] 🆔
to support existing implementations of ENTITY-MIB version 3 [RFC4133], the entPhysicalUris object should be used to store the UUID value of the physical entity as well, in URN format. this duplication of information enables backward compatibility. note that entPhysicalUris allows write access while entPhysicalUUID is read-only 🫶
2.12.2. entityLogical Group
this group contains a single table for identifying 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 that allows access to the MIB information for the logical entity. this includes SNMP versions that use a community name (with some form of implied context representation), and SNMP versions that use the SNMP ARCH [RFC3411] method of context identification 🔐
if an agent represents multiple logical entities with this MIB, then this group must be implemented for all logical entities known to the agent 📢
if an agent represents a single logical entity, or multiple logical entities within a single naming scope, then implementation of this group may be omitted by the agent 😌
2.12.3. entityMapping Group
this group contains three tables for identifying associations between different system components 🗺️
- entLPMappingTable this table 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. if an agent represents a single logical entity, or multiple logical entities within a single naming scope, then implementation of this table may be omitted by the agent 🤝
- entAliasMappingTable this table contains mappings between entLogicalIndex and entPhysicalIndex pairs, and 'alias' object identifier values. this allows resources managed with other MIB modules (for example, repeater ports, bridge ports, and physical and logical interfaces) to be identified in the physical entity hierarchy 🪞 note that each alias identifier is only relevant in a particular naming scope. if an agent represents a single logical entity, or multiple logical entities within a single naming scope, then implementation of this table may be omitted by the agent 💫
- entPhysicalContainsTable this table contains simple mappings between entPhysicalContainedIn values for each container/'containee' relationship in the managed system. the indexing of this table allows an NMS to quickly discover the entPhysicalIndex values for all children of a given physical entity 🌳
2.12.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 Entity MIB configuration last changed ⏰
2.12.5. entityNotifications Group
this group contains notification definitions relating to the overall status of the Entity MIB instantiation 🔔
2.13. Multiple Agents
even though a primary motivation for this MIB is to represent the multiple logical entities supported by a single agent, another motivation is to represent multiple logical entities supported by multiple agents (in the same "overall" physical entity). indeed, it is 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 as to the degree of cooperation that should be expected for agent implementations. therefore, multiple agents within the same managed system are free to implement the Entity MIB independently. (for more information, refer to Section 2.9, "Multiple Instances of the Entity MIB".) 🤷♀️
2.14. Changes Since RFC 2037
2.14.1. Textual Conventions
the PhysicalClass TC text has been clarified, and a new enumeration to support 'stackable' components has been added. the SnmpEngineIdOrNone TC has been added to support SNMPv3 🧩
2.14.2. New entPhysicalTable Objects
the entPhysicalHardwareRev, entPhysicalFirmwareRev, and entPhysicalSoftwareRev objects have been added for revision identification 🛠️
the entPhysicalSerialNum, entPhysicalMfgName, entPhysicalModelName, and entPhysicalIsFRU objects have been added for better vendor identification for physical components. in the event the agent cannot identify this information, the entPhysicalSerialNum object can be set by a management station 📦
the entPhysicalAlias and entPhysicalAssetID objects have been added for better user component identification. these objects are intended to be set by a management station and preserved by the agent across restarts 🏷️
2.14.3. New entLogicalTable Objects
the entLogicalContextEngineID and entLogicalContextName objects have been added to provide an SNMP context for SNMPv3 access on behalf of a logical entity 🔑
2.14.4. Bug Fixes
a bug was fixed in the entLogicalCommunity object. the subrange was incorrect (1..255) and is now correct (0..255). the description clause has also been clarified. this object is now deprecated 🐛
the entLastChangeTime object description has been changed to generalize the events that cause an update to the last change timestamp 🕰️
the syntax was changed from DisplayString to SnmpAdminString for the entPhysicalDescr, entPhysicalName, and entLogicalDescr objects 💅
2.15. Changes Since RFC 2737
2.15.1. Textual Conventions
the PhysicalIndexOrZero TC has been added to allow objects to reference an entPhysicalIndex value or zero. the PhysicalClass TC has been extended to support a new enumeration for central processing units 🧠
2.15.2. New Objects
the entPhysicalMfgDate object has been added to the entPhysicalTable to provide the date of manufacturing of the managed entity 📅
the entPhysicalUris object has been added to the entPhysicalTable to provide additional identification information about the physical entity, such as a Common Language Equipment Identifier (CLEI) URN 🌐
2.15.3. Bug Fixes
the syntax was changed from INTEGER to Integer32 for the entPhysicalParentRelPos, entLogicalIndex, and entAliasLogicalIndexOrZero objects, and from INTEGER to PhysicalIndexOrZero for the entPhysicalContainedIn object 🔧
2.16. Changes Since RFC 4133
2.16.1. MIB Module Addition
over time, there may be the need to add new enumerated values to the PhysicalClass TEXTUAL-CONVENTION. to allow for such additions without requiring re-issuing of this MIB module, a new MIB module called IANA-ENTITY-MIB was created. it provides the IANA-maintained TEXTUAL-CONVENTION IANAPhysicalClass. the PhysicalClass TC has been deprecated 🦋
2.16.2. Modification to Some of the MIB Objects 🦋
okay so there's a brand new MIB object in the entPhysicalTable called entPhysicalUUID 🫶 compared to entPhysicalUris, it's read-only and has a fixed size so it can only hold [RFC4122] compliant values. literally so clean 😭 also, the PhysicalClass TEXTUAL-CONVENTION got deprecated 💀 and in its place there's a new IANAPhysicalClass TC that IANA maintains now. the glow-up is real ✨
there are also two new MODULE-COMPLIANCE modules:
entity4Complianceis for full compliance with version 4 of the Entity MIB 💅entity4CRComplianceis for devices with constrained resources, like ones running on batteries 🔋 they might only need a small set of objects supported:entPhysicalClass,entPhysicalName, andentPhysicalUUID🌸
2.16.3. New TC for Universally Unique Identifier 🎀
a new TEXTUAL-CONVENTION called UUIDorZero was created to represent a Universally Unique Identifier (UUID) with a syntax that follows [RFC4122], Section 4.1 💜 making it a TC means other MIB modules can reuse it later by importing it, which is so smart of them 🧚 this TC lives in the UUID-TC-MIB module.
3. MIB Definitions ✨
3.1. ENTITY-MIB 🌈
ENTITY-MIB DEFINITIONS ::= BEGIN
IMPORTS
MODULE-IDENTITY, OBJECT-TYPE, mib-2, NOTIFICATION-TYPE,
Integer32
FROM SNMPv2-SMI -- RFC 2578
TDomain, TAddress, TEXTUAL-CONVENTION,
AutonomousType, RowPointer, TimeStamp, TruthValue,
DateAndTime
FROM SNMPv2-TC -- RFC 2579
MODULE-COMPLIANCE, OBJECT-GROUP, NOTIFICATION-GROUP
FROM SNMPv2-CONF -- RFC 2580
SnmpAdminString
FROM SNMP-FRAMEWORK-MIB -- RFC 3411
UUIDorZero
FROM UUID-TC-MIB -- RFC 6933
IANAPhysicalClass
FROM IANA-ENTITY-MIB; -- RFC 6933
entityMIB MODULE-IDENTITY
LAST-UPDATED "201304050000Z" -- April 5, 2013
ORGANIZATION "IETF Energy Management Working Group"
CONTACT-INFO
"WG Email: eman@ietf.org
Mailing list subscription info:
http://www.ietf.org/mailman/listinfo/eman
Andy Bierman
YumaWorks, Inc.
274 Redwood Shores Parkway, #133
Redwood City, CA 94065
USA
Phone: +1 408-716-0466
Email: andy@yumaworks.com
Dan Romascanu
Avaya
Park Atidim, Bldg. #3
Tel Aviv, 61581
Israel
Phone: +972-3-6458414
Email: dromasca@avaya.com
Juergen Quittek
NEC Europe Ltd.
Network Research Division
Kurfuersten-Anlage 36
Heidelberg 69115
Germany
Phone: +49 6221 4342-115
Email: quittek@neclab.eu
Mouli Chandramouli
Cisco Systems, Inc.
Sarjapur Outer Ring Road
Bangalore 560103
India
Phone: +91 80 4429 2409
Email: moulchan@cisco.com"
DESCRIPTION
"The MIB module for representing multiple logical
entities supported by a single SNMP agent.
Copyright (c) 2013 IETF Trust and the persons identified
as authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with
or without modification, is permitted pursuant to, and
subject to the license terms contained in, the Simplified
BSD License set forth in Section 4.c of the IETF Trust's
Legal Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info)."
REVISION "201304050000Z" -- April 5, 2013
DESCRIPTION
"Entity MIB (Version 4).
This revision obsoletes RFC 4133.
- Creation of a new MIB module, IANA-ENTITY-MIB, which
makes the PhysicalIndex TC an IANA-maintained TEXTUAL-
CONVENTION. IANAPhysicalClass is now imported
from the IANA-ENTITY-MIB.
- Addition of a new MIB object to the entPhysicalTable,
entPhysicalUUID. UUIDorZero is imported from the
UUID-TC-MIB.
- Addition of two new MODULE-COMPLIANCE modules-
entity4Compliance and entity4CRCompliance.
This version is published as RFC 6933."
REVISION "200508100000Z"
DESCRIPTION
"Initial Version of Entity MIB (Version 3).
This revision obsoletes RFC 2737.
Additions:
- cpu(12) enumeration added to IANAPhysicalClass TC
- DISPLAY-HINT clause to PhysicalIndex TC
- PhysicalIndexOrZero TC
- entPhysicalMfgDate object
- entPhysicalUris object
Changes:
- entPhysicalContainedIn SYNTAX changed from
INTEGER to PhysicalIndexOrZero
This version was published as RFC 4133."
REVISION "199912070000Z"
DESCRIPTION
"Initial Version of Entity MIB (Version 2).
This revision obsoletes RFC 2037.
This version was 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)
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).
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
PhysicalClass Textual Convention 🎀
okay bestie, the PhysicalClass TC is officially deprecated 😭 but it's still in the MIB so it's worth knowing what it said!! The IANAPhysicalClass TC from the IANA-ENTITY-MIB is what to use now ✨
PhysicalClass ::= TEXTUAL-CONVENTION
STATUS deprecated
DESCRIPTION
"Starting with version 4 of the ENTITY-MIB, this TC is
deprecated, and the usage of the IANAPhysicalClass TC from
the IANA-ENTITY-MIB is recommended instead.
An enumerated value that 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; 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)
}
The Physical Entity Table 🦋
so this is the big table! one row per physical entity, and there's always at least one row for the "overall" physical entity 💜
-- 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 }
The Row Layout 💅
this SEQUENCE is basically the full menu of columns in each row, so you can see all the juicy fields at a glance ✨
EntPhysicalEntry ::= SEQUENCE {
entPhysicalIndex PhysicalIndex,
entPhysicalDescr SnmpAdminString,
entPhysicalVendorType AutonomousType,
entPhysicalContainedIn PhysicalIndexOrZero,
entPhysicalClass IANAPhysicalClass,
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,
entPhysicalUUID UUIDorZero
}
entPhysicalIndex 🌸
entPhysicalIndex OBJECT-TYPE
SYNTAX PhysicalIndex
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"The index for this entry."
::= { entPhysicalEntry 1 }
entPhysicalDescr 🍓
ngl this one is so important, the description should name the manufacturer AND get a distinct value for each version or model. no copy-paste vibes allowed 🙈
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 🧚
this is the vendor's own hardware type, and it is NOT the same thing as MIB-II's sysObjectID. the fallback is { 0 0 } if there's no registration id or the agent doesn't know it 🫶
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 💜
this is the "who's my parent" column! zero means it's not inside anything, and containment is a strict hierarchy so no recursion allowed, periodt 💀
entPhysicalContainedIn OBJECT-TYPE
SYNTAX PhysicalIndexOrZero
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The value of entPhysicalIndex for the physical entity that
'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 👑
and here's the general hardware type, ya know, like chassis or fan. if nothing fits it's other(1), and if the agent just doesn't know it's unknown(2) 🔥
entPhysicalClass OBJECT-TYPE
SYNTAX IANAPhysicalClass
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 }
Okay bestie, next up is the sibling-ordering column 🦋 It's basically the "who's first in line" number for components that share a parent ✨
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 }
Next is the name column, which is literally the label the device uses on its console 🖥️💜
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 }
Hardware revision is next, and this one is the printed-on-the-box rev, if there is one 🔧✨
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 }
Firmware revision is up next, and it's the same vibe but for the firmware programs 💾🌸
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 }
Software revision is the same deal, just for the software programs 🎀
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 }
Serial number is giving main character energy 😭🔥 It's read-write, and there's a whole retention rule for it, so read this one carefully, bestie 🫶
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 a 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 that 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 numbers. 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 }
Manufacturer name is next, and the note at the end is a big deal, because comparing the other fields only makes sense within the same manufacturer 👑💅
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 }
Model name is the customer-facing part number, so it's basically the product's public-facing name 🌈⭐
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 }
And last but not least, the alias. This one is writable and it's basically a nickname the network manager gets to pick, and it has to survive reboots 🦋🍓 Honestly one of my favourites 💖
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 }
Okay bestie, let's get into the asset tags and the logical entity table 💅🎀
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 }
Asset IDs are basically the sticker on your laptop that says "property of" someone, and the agent has to remember it even through reboots, even if the physical entity's index number changes. Iconic storage energy ✨
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 }
So FRU just means "the part you can swap out in the field" 🔧 Anything permanently baked inside one of those is marked false(2), and that's the vibe 🌸
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 }
Manufacturing date, or the object just doesn't exist if nobody knows 💀 The special '0000000000000000'H value is also allowed in that case 🫶
entPhysicalUris OBJECT-TYPE
SYNTAX OCTET STRING
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"This object contains identification
information about the physical entity. The object
contains URIs; therefore, the syntax of this object
MUST conform to RFC 3986, Section 3.
Multiple URIs may be present and are separated by white
space characters. Leading and trailing white space
characters are ignored.
If no URI identification information is known
about the physical entity, 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 }
URIs get their own strict syntax rule, and you can stack multiple of them separated by whitespace, which is so organized of them 🦋
entPhysicalUUID OBJECT-TYPE
SYNTAX UUIDorZero
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"This object contains identification information
about the physical entity. The object contains a
Universally Unique Identifier, the syntax of this object
MUST conform to RFC 4122, Section 4.1.
A zero-length octet string is returned if no UUID
information is known."
REFERENCE
"RFC 4122, A Universally Unique IDentifier (UUID) URN
Namespace, Section 4.1, July 2005."
::= { entPhysicalEntry 19 }
UUIDs are the ultimate unique ID energy, and the syntax has to match RFC 4122 Section 4.1 or it's not it 💜 No UUID known? You get a zero-length string, no drama 🙈
-- 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 that 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
}
The logical side of things 🧚 One row per logical entity, and if your agent is juggling more than one naming scope, there MUST be at least one row. Agents with everything in one scope don't have to bother, and they're NOT REQUIRED to implement it 😭
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 that 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 }
Index numbers are supposed to be small and positive, but they don't have to be back to back, so gaps are totally fine 🌈 The description should say who made it, plus a different value for every version 💅 And entLogicalType is basically the name of the MIB module that best describes the entity, with mib-2 as the backup plan 🍓
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 that 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 }
Community strings are the old-school passwords, and this one is deprecated, so it's basically a vintage piece 🕰️ Agents can hand back read access and a community string based on the request, but they MUST NOT over-share privileges beyond what the requester already had. SNMPv3 agents should use the context objects instead, but they can still keep the community string around for tri-lingual vibes 🌍
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 RFC 3417 for further information on snmpUDPDomain."
REFERENCE
"Transport Mappings for the Simple Network Management
Protocol (SNMP), STD 62, RFC 3417."
::= { entLogicalEntry 5 }
And this is the address where the logical entity actually receives its management traffic 📮 For UDP it's the 4-octet IP address followed by the 2-octet port, both in network byte order, so it's a whole 6-octet glow-up 🦋
okay so the entLogicalTDomain object is basically asking "how does this logical entity actually receive its management traffic?" 🚚 ✨ the answer comes from the transport types in RFC 3417 💜
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
RFC 3417."
REFERENCE
"Transport Mappings for the Simple Network Management
Protocol (SNMP), STD 62, RFC 3417."
::= { 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
MIB modules 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 entities and physical components 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 binding between a
logical entity/physical component pair and an external
identifier. 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
okay so this part is where the MIB tells the NMS when things changed 🕰️✨ entLastChangeTime is the timestamp that ticks whenever a row in one of the entity tables gets created, modified, or deleted 💖
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 deprecated
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 }
entity4Compliance MODULE-COMPLIANCE
STATUS current
DESCRIPTION
"The compliance statement for SNMP entities that implement
the full version 4 (full compliance) of the Entity MIB."
MODULE -- this module
MANDATORY-GROUPS {
entityPhysicalGroup,
entityPhysical2Group,
entityPhysical3Group,
entityGeneralGroup,
entityNotificationsGroup,
entityPhysical4Group
}
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 4 }
entity4CRCompliance MODULE-COMPLIANCE
STATUS current
DESCRIPTION
"The compliance statement for SNMP entities that implement
version 4 of the Entity MIB on devices with constrained
resources."
MODULE -- this module
MANDATORY-GROUPS {
entityPhysicalCRGroup,
entityPhysical4Group
}
::= { entityCompliances 5 }
Okay so the groupings are basically the bundles 🧺 that tell you which objects belong together for each kind of entity info, and they all close out the ENTITY-MIB module 💜
-- 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 }
entityPhysical4Group OBJECT-GROUP
OBJECTS {
entPhysicalUUID
}
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 and
entityPhysicalCRGroup."
::= { entityGroups 9 }
entityPhysicalCRGroup OBJECT-GROUP
OBJECTS {
entPhysicalClass,
entPhysicalName
}
STATUS current
DESCRIPTION
"The collection of objects used to represent physical
system components for constrained resourced devices,
for which a single agent provides management
information."
::= { entityGroups 10 }
END
3.2. IANA-ENTITY-MIB ✨
Next up is the IANA-ENTITY-MIB module 🦋 It's a tiny module, but it's where the IANAPhysicalClass textual convention lives, so it's kind of a big deal 💅
IANA-ENTITY-MIB DEFINITIONS ::= BEGIN
IMPORTS
MODULE-IDENTITY, mib-2
FROM SNMPv2-SMI -- RFC 2578
TEXTUAL-CONVENTION
FROM SNMPv2-TC -- RFC 2579
;
ianaEntityMIB MODULE-IDENTITY
LAST-UPDATED "201304050000Z" -- April 5, 2013
ORGANIZATION "IANA"
CONTACT-INFO
"Internet Assigned Numbers Authority
Postal: ICANN
12025 Waterfront Drive, Suite 300
Los Angeles, CA 90094-2536
Phone: +1-310-301-5800
EMail: iana@iana.org"
DESCRIPTION
"This MIB module defines a TEXTUAL-CONVENTION that provides
an indication of the general hardware type of a particular
physical entity.
Copyright (c) 2013 IETF Trust and the persons identified as
authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD
License set forth in Section 4.c of the IETF Trust's Legal
Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info).
The initial version of this MIB module was published in
RFC 6933; for full legal notices see the RFC itself."
REVISION "201304050000Z" -- April 5, 2013
DESCRIPTION "Initial version of this MIB as published in
RFC 6933."
::= { mib-2 216 }
-- Textual Conventions
IANAPhysicalClass ::= TEXTUAL-CONVENTION
STATUS current
DESCRIPTION
"An enumerated value that 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; 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 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.
The enumeration 'energyObject' is applicable if the
physical entity is some sort of energy object, i.e.,
a piece of equipment that is part of or attached to
a communications network that is monitored, controlled,
or aids in the management of another device for Energy
Management.
The enumeration 'battery' is applicable if the physical
entity class is some sort of battery."
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),
energyObject(13),
battery (14)
}
END
3.3. UUID-TC-MIB ✨
okay so this MIB module is the one that defines the UUID textual conventions 🆔 it's giving "reusable building block," bestie. the module is in the IETF Energy Management Working Group's hands, and it starts with its imports and metadata:
UUID-TC-MIB DEFINITIONS ::= BEGIN
IMPORTS
MODULE-IDENTITY, mib-2
FROM SNMPv2-SMI -- RFC 2578
TEXTUAL-CONVENTION
FROM SNMPv2-TC -- RFC 2579
;
uuidTCMIB MODULE-IDENTITY
LAST-UPDATED "201304050000Z" -- April 5, 2013
ORGANIZATION "IETF Energy Management Working Group"
CONTACT-INFO "WG Email: eman@ietf.org
Mailing list subscription info:
http://www.ietf.org/mailman/listinfo/eman
Dan Romascanu
Avaya
Park Atidim, Bldg. #3
Tel Aviv, 61581
Israel
Phone: +972-3-6458414
Email: dromasca@avaya.com
Juergen Quittek
NEC Europe Ltd.
Network Research Division
Kurfuersten-Anlage 36
Heidelberg 69115
Germany
Phone: +49 6221 4342-115
Email: quittek@neclab.eu
Mouli Chandramouli
Cisco Systems, Inc.
Sarjapur Outer Ring Road
Bangalore 560103
India
Phone: +91 80 4429 2409
Email: moulchan@cisco.com"
DESCRIPTION
"This MIB module defines TEXTUAL-CONVENTIONs
representing Universally Unique IDentifiers
(UUIDs).
Copyright (c) 2013 IETF Trust and the persons
identified as authors of the code. All rights
reserved.
Redistribution and use in source and binary forms,
with or without modification, is permitted
pursuant to, and subject to the license terms
contained in, the Simplified BSD License set forth
in Section 4.c of the IETF Trust's Legal
Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info)."
REVISION "201304050000Z" -- April 5, 2013
DESCRIPTION "Initial version of this MIB as published in
RFC 6933."
::= { mib-2 217 }
-- Textual Conventions
UUID ::= TEXTUAL-CONVENTION
DISPLAY-HINT "4x-2x-2x-1x1x-6x"
STATUS current
DESCRIPTION
"Universally Unique Identifier information. The syntax must
conform to RFC 4122, Section 4.1."
SYNTAX OCTET STRING (SIZE (16))
UUIDorZero ::= TEXTUAL-CONVENTION
DISPLAY-HINT "4x-2x-2x-1x1x-6x"
STATUS current
DESCRIPTION
"Universally Unique Identifier information. The syntax must
conform to RFC 4122, Section 4.1.
The semantics of the value zero-length OCTET STRING are
object-specific and must therefore be defined as part of
the description of any object that uses this syntax."
SYNTAX OCTET STRING (SIZE (0|16))
END
so the two conventions are UUID (a 16-octet OCTET STRING) and UUIDorZero (either 0 or 16 octets) 💜 the display hint is the same for both, and the UUIDorZero description says that what a zero-length value means is up to each object that uses it 🙈
4. Usage Examples 🎀
okay now for the fun part 🧚 this section walks through the instance values for two example networking devices. they're kept super simple so they're easier to understand, which means fans, sensors, empty slots, and sub-modules are left out 🫶 they might still be modeled in real implementations tho!
4.1. Router/Bridge 🦋
so the first example is a router with two slots 🔥 each slot holds a 3-port router/bridge module. every port gets its own entry in the ifTable 💅 and there are two logical OSPF instances running plus two logical bridges. here's the whole listing:
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'
entPhysicalHardwareRev.1 == 'A(1.00.02)'
entPhysicalSoftwareRev.1 == ''
entPhysicalFirmwareRev.1 == ''
entPhysicalSerialNum.1 == 'C100076544'
entPhysicalMfgName.1 == 'Acme'
entPhysicalModelName.1 == '100'
entPhysicalAlias.1 == 'cl-SJ17-3-006:rack1:rtr-U3'
entPhysicalAssetID.1 == '0007372293'
entPhysicalIsFRU.1 == true(1)
entPhysicalMfgDate.1 == '2002-5-26,13:30:30.0,-4:0'
entPhysicalUris.1 == 'URN:CLEI:CNME120ARA'
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'
entPhysicalHardwareRev.2 == 'B(1.00.01)'
entPhysicalSoftwareRev.2 == ''
entPhysicalFirmwareRev.2 == ''
entPhysicalSerialNum.2 == ''
entPhysicalMfgName.2 == 'Acme'
entPhysicalModelName.2 == 'AA'
entPhysicalAlias.2 == ''
entPhysicalAssetID.2 == ''
entPhysicalIsFRU.2 == false(2)
entPhysicalMfgDate.2 == '2002-7-26,12:22:12.0,-4:0'
entPhysicalUris.2 == 'URN:CLEI:CNME123ARA'
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'
entPhysicalHardwareRev.3 == '1.00.07'
entPhysicalSoftwareRev.3 == ''
entPhysicalFirmwareRev.3 == ''
entPhysicalSerialNum.3 == ''
entPhysicalMfgName.3 == 'Acme'
entPhysicalModelName.3 == 'AA'
entPhysicalAlias.3 == ''
entPhysicalAssetID.3 == ''
entPhysicalIsFRU.3 == false(2)
entPhysicalMfgDate.3 == '2002-7-26,12:12:12.0,-4:0'
entPhysicalUris.3 == 'URN:CLEI:CNME123ARA'
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'
entPhysicalHardwareRev.4 == '1.00.07'
entPhysicalSoftwareRev.4 == '1.4.1'
entPhysicalFirmwareRev.4 == 'A(1.1)'
entPhysicalSerialNum.4 == 'C100087363'
entPhysicalMfgName.4 == 'Acme'
entPhysicalModelName.4 == 'R100-FE'
entPhysicalAlias.4 == 'rtr-U3:m1:SJ17-3-eng'
entPhysicalAssetID.4 == '0007372462'
entPhysicalIsFRU.4 == true(1)
entPhysicalMfgDate.4 == '2003-7-18,13:30:30.0,-4:0'
entPhysicalUris.4 == 'URN:CLEI:CNRU123CAA'
entPhysicalDescr.5 == 'Acme Ethernet-100 Port'
entPhysicalVendorType.5 == acmeProducts.portTypes.2
entPhysicalContainedIn.5 == 4
entPhysicalClass.5 == port(10)
entPhysicalParentRelPos.5 == 1
entPhysicalName.5 == 'P1'
entPhysicalHardwareRev.5 == 'G(1.02)'
entPhysicalSoftwareRev.5 == ''
entPhysicalFirmwareRev.5 == '1.1'
entPhysicalSerialNum.5 == ''
entPhysicalMfgName.5 == 'Acme'
entPhysicalModelName.5 == 'FE-100'
entPhysicalAlias.5 == ''
entPhysicalAssetID.5 == ''
entPhysicalIsFRU.5 == false(2)
entPhysicalMfgDate.5 == '2003-7-18,14:20:22.0,-4:0'
entPhysicalUris.5 == 'URN:CLEI:CNMES23ARA'
entPhysicalDescr.6 == 'Acme Ethernet-100 Port'
entPhysicalVendorType.6 == acmeProducts.portTypes.2
entPhysicalContainedIn.6 == 4
entPhysicalClass.6 == port(10)
entPhysicalParentRelPos.6 == 2
entPhysicalName.6 == 'P2'
entPhysicalHardwareRev.6 == 'G(1.02)'
entPhysicalSoftwareRev.6 == ''
entPhysicalFirmwareRev.6 == '1.1'
entPhysicalSerialNum.6 == ''
entPhysicalMfgName.6 == 'Acme'
entPhysicalModelName.6 == 'FE-100'
entPhysicalAlias.6 == ''
entPhysicalAssetID.6 == ''
entPhysicalIsFRU.6 == false(2)
entPhysicalMfgDate.6 == '2003-7-19,10:15:15.0,-4:0'
entPhysicalUris.6 == 'URN:CLEI:CNMES23ARA'
entPhysicalDescr.7 == 'Acme Router-100 FDDI-Port'
entPhysicalVendorType.7 == acmeProducts.portTypes.3
entPhysicalContainedIn.7 == 4
entPhysicalClass.7 == port(10)
entPhysicalParentRelPos.7 == 3
entPhysicalName.7 == 'P3'
entPhysicalHardwareRev.7 == 'B(1.03)'
entPhysicalSoftwareRev.7 == '2.5.1'
entPhysicalFirmwareRev.7 == '2.5F'
entPhysicalSerialNum.7 == ''
entPhysicalMfgName.7 == 'Acme'
entPhysicalModelName.7 == 'FDDI-100'
entPhysicalAlias.7 == ''
entPhysicalAssetID.7 == ''
entPhysicalIsFRU.7 == false(2)
Slot 2 contains another 3-port module:
entPhysicalDescr.8 == 'Acme Router-100 Comm Module'
entPhysicalVendorType.8 == acmeProducts.moduleTypes.15
entPhysicalContainedIn.8 == 3
entPhysicalClass.8 == module(9)
entPhysicalParentRelPos.8 == 1
entPhysicalName.8 == 'M2'
entPhysicalHardwareRev.8 == '2.01.00'
entPhysicalSoftwareRev.8 == '3.0.7'
entPhysicalFirmwareRev.8 == 'A(1.2)'
entPhysicalSerialNum.8 == 'C100098732'
entPhysicalMfgName.8 == 'Acme'
entPhysicalModelName.8 == 'C100'
entPhysicalAlias.8 == 'rtr-U3:m2:SJ17-2-eng'
entPhysicalAssetID.8 == '0007373982'
entPhysicalIsFRU.8 == true(1)
entPhysicalMfgDate.8 == '2002-5-26,13:30:15.0,-4:0'
entPhysicalUris.8 == 'URN:CLEI:CNRT321MAA'
entPhysicalDescr.9 == 'Acme Fddi-100 Port'
entPhysicalVendorType.9 == acmeProducts.portTypes.5
entPhysicalContainedIn.9 == 8
entPhysicalClass.9 == port(10)
entPhysicalParentRelPos.9 == 1
entPhysicalName.9 == 'FDDI Primary'
entPhysicalHardwareRev.9 == 'CC(1.07)'
entPhysicalSoftwareRev.9 == '2.0.34'
entPhysicalFirmwareRev.9 == '1.1'
entPhysicalSerialNum.9 == ''
entPhysicalMfgName.9 == 'Acme'
entPhysicalModelName.9 == 'FDDI-100'
entPhysicalAlias.9 == ''
entPhysicalAssetID.9 == ''
entPhysicalIsFRU.9 == false(2)
entPhysicalDescr.10 == 'Acme Ethernet-100 Port'
entPhysicalVendorType.10 == acmeProducts.portTypes.2
entPhysicalContainedIn.10 == 8
entPhysicalClass.10 == port(10)
entPhysicalParentRelPos.10 == 2
entPhysicalName.10 == 'Ethernet A'
entPhysicalHardwareRev.10 == 'G(1.04)'
entPhysicalSoftwareRev.10 == ''
entPhysicalFirmwareRev.10 == '1.3'
entPhysicalSerialNum.10 == ''
entPhysicalMfgName.10 == 'Acme'
entPhysicalModelName.10 == 'FE-100'
entPhysicalAlias.10 == ''
entPhysicalAssetID.10 == ''
entPhysicalIsFRU.10 == false(2)
entPhysicalMfgDate.10 == '2002-7-26,13:30:15.0,-4:0'
entPhysicalUris.10 == 'URN:CLEI:CNMES23ARA'
entPhysicalDescr.11 == 'Acme Ethernet-100 Port'
entPhysicalVendorType.11 == acmeProducts.portTypes.2
entPhysicalContainedIn.11 == 8
entPhysicalClass.11 == port(10)
entPhysicalParentRelPos.11 == 3
entPhysicalName.11 == 'Ethernet B'
entPhysicalHardwareRev.11 == 'G(1.04)'
entPhysicalSoftwareRev.11 == ''
entPhysicalFirmwareRev.11 == '1.3'
entPhysicalSerialNum.11 == ''
entPhysicalMfgName.11 == 'Acme'
entPhysicalModelName.11 == 'FE-100'
entPhysicalAlias.11 == ''
entPhysicalAssetID.11 == ''
entPhysicalIsFRU.11 == false(2)
entPhysicalMfgDate.11 == '2002-8-16,15:35:15.0,-4:0'
entPhysicalUris.11 == 'URN:CLEI:CNMES23ARA'
Logical entities -- entLogicalTable; no SNMPv3 support
2 OSPF instances:
entLogicalDescr.1 == 'Acme OSPF v1.1'
entLogicalType.1 == ospf
entLogicalCommunity.1 == 'public-ospf1'
entLogicalTAddress.1 == 192.0.2.1:161
entLogicalTDomain.1 == snmpUDPDomain
entLogicalContextEngineID.1 == ''
entLogicalContextName.1 == ''
entLogicalDescr.2 == 'Acme OSPF v1.1'
entLogicalType.2 == ospf
entLogicalCommunity.2 == 'public-ospf2'
entLogicalTAddress.2 == 192.0.2.1:161
entLogicalTDomain.2 == snmpUDPDomain
entLogicalContextEngineID.2 == ''
entLogicalContextName.2 == ''
2 logical bridges:
entLogicalDescr.3 == 'Acme Bridge v2.1.1'
entLogicalType.3 == dot1dBridge
entLogicalCommunity.3 == 'public-bridge1'
entLogicalTAddress.3 == 192.0.2.1:161
entLogicalTDomain.3 == snmpUDPDomain
entLogicalContextEngineID.3 == ''
entLogicalContextName.3 == ''
entLogicalDescr.4 == 'Acme Bridge v2.1.1'
entLogicalType.4 == dot1dBridge
entLogicalCommunity.4 == 'public-bridge2'
entLogicalTAddress.4 == 192.0.2.1:161
entLogicalTDomain.4 == snmpUDPDomain
entLogicalContextEngineID.4 == ''
entLogicalContextName.4 == ''
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
Note that these mappings are included in the table because
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
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;
(Bridge-1 uses ifIndex values 101 - 103 and Bridge-2 uses
ifIndex values 204-206.)
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.4 == ifIndex.204
entAliasMappingIdentifier.10.0 == ifIndex.5
entAliasMappingIdentifier.10.4 == ifIndex.205
entAliasMappingIdentifier.11.0 == ifIndex.6
entAliasMappingIdentifier.11.4 == ifIndex.206
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.8.11 == 11
4.2. Repeaters 🦋
Okay so this second example is a 3-slot hub with 2 backplane ethernet segments 🔌✨ Slot three is empty, and the other slots hold ethernet repeater modules 💖
Note that this example assumes an older Repeater MIB implementation [RFC1516] rather than the new Repeater MIB [RFC2108]. The new version contains an object called rptrPortRptrId, which should be used to identify repeater port groupings, rather than using community strings or contexts 🎀
Here's the physical entity data for the hub 💅
Physical entities -- entPhysicalTable:
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'
entPhysicalHardwareRev.1 == 'A(1.02.00)'
entPhysicalSoftwareRev.1 == ''
entPhysicalFirmwareRev.1 == ''
entPhysicalSerialNum.1 == 'C100079294'
entPhysicalMfgName.1 == 'Acme'
entPhysicalModelName.1 == '110'
entPhysicalAlias.1 == 'bldg09:floor1:rptr18:0067eea0229f'
entPhysicalAssetID.1 == '0007386327'
entPhysicalIsFRU.1 == true(1)
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'
entPhysicalHardwareRev.2 == 'A(2.04.01)'
entPhysicalSoftwareRev.2 == ''
entPhysicalFirmwareRev.2 == ''
entPhysicalSerialNum.2 == ''
entPhysicalMfgName.2 == 'Acme'
entPhysicalModelName.2 == 'BK-A'
entPhysicalAlias.2 == ''
entPhysicalAssetID.2 == ''
entPhysicalIsFRU.2 == false(2)
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'
entPhysicalHardwareRev.3 == 'A(2.04.01)'
entPhysicalSoftwareRev.3 == ''
entPhysicalFirmwareRev.3 == ''
entPhysicalSerialNum.3 == ''
entPhysicalMfgName.3 == 'Acme'
entPhysicalModelName.3 == 'BK-A'
entPhysicalAlias.3 == ''
entPhysicalAssetID.3 == ''
entPhysicalIsFRU.3 == false(2)
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'
entPhysicalHardwareRev.4 == 'B(1.00.03)'
entPhysicalSoftwareRev.4 == ''
entPhysicalFirmwareRev.4 == ''
entPhysicalSerialNum.4 == ''
entPhysicalMfgName.4 == 'Acme'
entPhysicalModelName.4 == 'RB'
entPhysicalAlias.4 == ''
entPhysicalAssetID.4 == ''
entPhysicalIsFRU.4 == false(2)
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'
entPhysicalHardwareRev.5 == 'B(1.00.03)'
entPhysicalSoftwareRev.5 == ''
entPhysicalFirmwareRev.5 == ''
entPhysicalSerialNum.5 == ''
entPhysicalMfgName.5 == 'Acme'
entPhysicalModelName.5 == 'RB'
entPhysicalAlias.5 == ''
entPhysicalAssetID.5 == ''
entPhysicalIsFRU.5 == false(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'
entPhysicalHardwareRev.6 == 'B(1.00.03)'
entPhysicalSoftwareRev.6 == ''
entPhysicalFirmwareRev.6 == ''
entPhysicalSerialNum.6 == ''
entPhysicalMfgName.6 == 'Acme'
entPhysicalModelName.6 == 'RB'
entPhysicalAlias.6 == ''
entPhysicalAssetID.6 == ''
entPhysicalIsFRU.6 == false(2)
Okay so Slot 1 is bestie's main character moment 🎀 It has a plug-in module with 4 10-BaseT ports, and here's how it's all laid out 💅
entPhysicalDescr.7 == 'Acme 10Base-T Module 114'
entPhysicalVendorType.7 == acmeProducts.moduleTypes.32
entPhysicalContainedIn.7 == 4
entPhysicalClass.7 == module(9)
entPhysicalParentRelPos.7 == 1
entPhysicalName.7 == 'M1'
entPhysicalHardwareRev.7 == 'A(1.02.01)'
entPhysicalSoftwareRev.7 == '1.7.2'
entPhysicalFirmwareRev.7 == 'A(1.5)'
entPhysicalSerialNum.7 == 'C100096244'
entPhysicalMfgName.7 == 'Acme'
entPhysicalModelName.7 = '114'
entPhysicalAlias.7 == 'bldg09:floor1:eng'
entPhysicalAssetID.7 == '0007962951'
entPhysicalIsFRU.7 == true(1)
entPhysicalDescr.8 == 'Acme 10Base-T Port RB'
entPhysicalVendorType.8 == acmeProducts.portTypes.10
entPhysicalContainedIn.8 == 7
entPhysicalClass.8 == port(10)
entPhysicalParentRelPos.8 == 1
entPhysicalName.8 == 'Ethernet-A'
entPhysicalHardwareRev.8 == 'A(1.04F)'
entPhysicalSoftwareRev.8 == ''
entPhysicalFirmwareRev.8 == '1.4'
entPhysicalSerialNum.8 == ''
entPhysicalMfgName.8 == 'Acme'
entPhysicalModelName.8 == 'RB'
entPhysicalAlias.8 == ''
entPhysicalAssetID.8 == ''
entPhysicalIsFRU.8 == false(2)
entPhysicalDescr.9 == 'Acme 10Base-T Port RB'
entPhysicalVendorType.9 == acmeProducts.portTypes.10
entPhysicalContainedIn.9 == 7
entPhysicalClass.9 == port(10)
entPhysicalParentRelPos.9 == 2
entPhysicalName.9 == 'Ethernet-B'
entPhysicalHardwareRev.9 == 'A(1.04F)'
entPhysicalSoftwareRev.9 == ''
entPhysicalFirmwareRev.9 == '1.4'
entPhysicalSerialNum.9 == ''
entPhysicalMfgName.9 == 'Acme'
entPhysicalModelName.9 = 'RB'
entPhysicalAlias.9 == ''
entPhysicalAssetID.9 == ''
entPhysicalIsFRU.9 == false(2)
entPhysicalDescr.10 == 'Acme 10Base-T Port RB'
entPhysicalVendorType.10 == acmeProducts.portTypes.10
entPhysicalContainedIn.10 == 7
entPhysicalClass.10 == port(10)
entPhysicalParentRelPos.10 == 3
entPhysicalName.10 == 'Ethernet-C'
entPhysicalHardwareRev.10 == 'B(1.02.07)'
entPhysicalSoftwareRev.10 == ''
entPhysicalFirmwareRev.10 == '1.4'
entPhysicalSerialNum.10 == ''
entPhysicalMfgName.10 == 'Acme'
entPhysicalModelName.10 == 'RB'
entPhysicalAlias.10 == ''
entPhysicalAssetID.10 == ''
entPhysicalIsFRU.10 == false(2)
entPhysicalDescr.11 == 'Acme 10Base-T Port RB'
entPhysicalVendorType.11 == acmeProducts.portTypes.10
entPhysicalContainedIn.11 == 7
entPhysicalClass.11 == port(10)
entPhysicalParentRelPos.11 == 4
entPhysicalName.11 == 'Ethernet-D'
entPhysicalHardwareRev.11 == 'B(1.02.07)'
entPhysicalSoftwareRev.11 == ''
entPhysicalFirmwareRev.11 == '1.4'
entPhysicalSerialNum.11 == ''
entPhysicalMfgName.11 == 'Acme'
entPhysicalModelName.11 == 'RB'
entPhysicalAlias.11 == ''
entPhysicalAssetID.11 == ''
entPhysicalIsFRU.11 == false(2)
Slot 2 holds another ethernet module, this one with 2 ports 🌸
entPhysicalDescr.12 == 'Acme 10Base-T Module Model 4'
entPhysicalVendorType.12 == acmeProducts.moduleTypes.30
entPhysicalContainedIn.12 = 5
entPhysicalClass.12 == module(9)
entPhysicalParentRelPos.12 == 1
entPhysicalName.12 == 'M2'
entPhysicalHardwareRev.12 == 'A(1.01.07)'
entPhysicalSoftwareRev.12 == '1.8.4'
entPhysicalFirmwareRev.12 == 'A(1.8)'
entPhysicalSerialNum.12 == 'C100102384'
entPhysicalMfgName.12 == 'Acme'
entPhysicalModelName.12 == '4'
entPhysicalAlias.12 == 'bldg09:floor1:devtest'
entPhysicalAssetID.12 == '0007968462'
entPhysicalIsFRU.12 == true(1)
entPhysicalDescr.13 == 'Acme 802.3 AUI Port'
entPhysicalVendorType.13 == acmeProducts.portTypes.11
entPhysicalContainedIn.13 == 12
entPhysicalClass.13 == port(10)
entPhysicalParentRelPos.13 == 1
entPhysicalName.13 == 'AUI'
entPhysicalHardwareRev.13 == 'A(1.06F)'
entPhysicalSoftwareRev.13 == ''
entPhysicalFirmwareRev.13 == '1.5'
entPhysicalSerialNum.13 == ''
entPhysicalMfgName.13 == 'Acme'
entPhysicalModelName.13 == ''
entPhysicalAlias.13 == ''
entPhysicalAssetID.13 == ''
entPhysicalIsFRU.13 == false(2)
entPhysicalDescr.14 == 'Acme 10Base-T Port RD'
entPhysicalVendorType.14 == acmeProducts.portTypes.14
entPhysicalContainedIn.14 == 12
entPhysicalClass.14 == port(10)
entPhysicalParentRelPos.14 == 2
entPhysicalName.14 == 'E2'
entPhysicalHardwareRev.14 == 'B(1.01.02)'
entPhysicalSoftwareRev.14 == ''
entPhysicalFirmwareRev.14 == '2.1'
entPhysicalSerialNum.14 == ''
entPhysicalMfgName.14 == 'Acme'
entPhysicalModelName.14 == ''
entPhysicalAlias.14 == ''
entPhysicalAssetID.14 == ''
entPhysicalIsFRU.14 == false(2)
Next up are the logical entities, listed in the entLogicalTable, with SNMPv3 support ✨
Logical entities -- entLogicalTable; with SNMPv3 support
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 == 192.0.2.1:161
entLogicalTDomain.1 == snmpUDPDomain
entLogicalContextEngineID.1 == '80000777017c7d7e7f'H
entLogicalContextName.1 == 'repeater1'
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 == 192.0.2.1:161
entLogicalTDomain.2 == snmpUDPDomain
entLogicalContextEngineID.2 == '80000777017c7d7e7f'H
entLogicalContextName.2 == 'repeater2'
Now for the logical to physical mappings in the entLPMappingTable 🦋
Logical to Physical Mappings -- entLPMappingTable:
repeater1 uses backplane 1, slot 1-ports 1 & 2, slot 2-port 1
Heads up, there's no mapping to the module here, because this example is a port-switchable hub 🙈 Even if every port on the module could belong to the same repeater through configuration, the LP port mappings should not be replaced dynamically with a single mapping for the module (for example, entLPPhysicalIndex.1.7). If all the ports on the module shared one backplane connection, then a single mapping for the module would be the better fit.
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
Next, the physical to logical to MIB alias mappings in the entAliasMappingTable. The Repeater Port Identifier values are shared by both repeaters 💜
Physical to Logical to MIB Alias Mappings -- entAliasMappingTable:
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
Last bit: the containment tree in the entPhysicalContainsTable 🧚
Physical Containment Tree -- entPhysicalContainsTable
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
Note that 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
4.3. EMAN Example 🧚
okay so to show how the new MIB objects work for Energy Management (EMAN) apps, picture a router with 16 slots that hold line cards 💅. The example uses the entPhysicalTable for 3 components: a chassis, a slot, and a line card sitting in that slot. The chassis contains the slot, and the slot contains the line card. 🦋
entPhysicalDescr.1 == 'ACME Series 16 Slots'
entPhysicalVendorType.1 == acmeProducts.chassisTypes.1
entPhysicalContainedIn.1 == 0
entPhysicalClass.1 == chassis(3)
entPhysicalParentRelPos.1 == -1
entPhysicalName.1 == 'Router 0 Chassis'
entPhysicalHardwareRev.1 == ''
entPhysicalSoftwareRev.1 == ''
entPhysicalFirmwareRev.1 == ''
entPhysicalSerialNum.1 == 'abcd1234'
entPhysicalMfgName.1 == 'ACME'
entPhysicalModelName.1 == 'ACME-16-LCC'
entPhysicalAlias.1 == ''
entPhysicalAssetID.1 == ''
entPhysicalIsFRU.1 == true(1)
entPhysicalMfgDate.1 == '2008-7-28,13:30:30.0,-4:0'
entPhysicalUris.1 == 'urn:f81d4fae-7dec-11d0-a765-00a0c91e6bf6'
entPhysicalUUID.1 == 'f81d4fae-7dec-11d0-a765-00a0c91e6bf6'
entPhysicalDescr.2 == 'ACME Line Card Slot'
entPhysicalVendorType.2 == acmeProducts.slotTypes.1
entPhysicalContainedIn.2 == 1
entPhysicalClass.2 = container(5)
entPhysicalParentRelPos.2 == 6
entPhysicalName.2 == 'Slot 6'
entPhysicalHardwareRev.2 == ''
entPhysicalFirmwareRev.2 == ''
entPhysicalSoftwareRev.2 == ''
entPhysicalSerialNum.2 == ''
entPhysicalMfgName.2 == 'ACME'
entPhysicalModelName.2 == ''
entPhysicalAlias.2 == ''
entPhysicalAssetID.2 == ''
entPhysicalIsFRU.2 == false(2)
entPhysicalUris.2 == ''urn:7dc53df5-703e-49b3-8670-b1c468f47f1f'
entPhysicalUUID.2 == '7dc53df5-703e-49b3-8670-b1c468f47f1f'
entPhysicalDescr.4 == 'ACME Series1 Line Card'
entPhysicalVendorType.4 == acmeProducts.moduleTypes.14
entPhysicalContainedIn.4 == 2
entPhysicalClass.4 == module(9)
entPhysicalParentRelPos.4 == 0
entPhysicalName.4 == 'Series1 Linecard'
entPhysicalHardwareRev.4 == ''
entPhysicalFirmwareRev.4 == ''
entPhysicalSoftwareRev.4 == ''
entPhysicalSerialNum.4 == ''
entPhysicalMfgName.4 == 'ACME'
entPhysicalModelName.4 == ''
entPhysicalAlias.4 == ''
entPhysicalAssetID.4 == ''
entPhysicalIsFRU.4 == true(1)
entPhysicalUris.4 == 'urn:01c47915-4777-11d8-bc70-0090272ff725'
entPhysicalUUID.4 == '01c47915-4777-11d8-bc70-0090272ff725'
5. Security Considerations 🔐
okay this part is SO important bestie, so read it carefully 🥺. There are a bunch of management objects in these MIB modules with a MAX-ACCESS clause of read-write and/or read-create. Those objects can be sensitive or vulnerable in some network environments. Supporting SET operations in a non-secure environment without proper protection can seriously mess with network operations 💀.
These are the tables and objects that are sensitive or vulnerable when it comes to writing:
entPhysicalSerialNumentPhysicalAliasentPhysicalAssetIDentPhysicalUris
These objects hold info about the physical entities inside a managed system, like serial numbers, asset IDs, and the managed components, plus how the managed objects get handled. If they get misconfigured or leaked, that can expose sensitive asset info, mess with how entities are managed, or raise privacy issues if they let someone track values that identify a person 🙈.
Some of the readable objects in these MIB modules (meaning objects with a MAX-ACCESS other than not-accessible) can also be sensitive or vulnerable in some network environments. So it's really important to control even GET and/or NOTIFY access to them, and maybe even encrypt their values when they go over the network via SNMP 🔒. These are the tables and objects that are sensitive or vulnerable when it comes to reading:
entPhysicalDescrentPhysicalVendorTypeentPhysicalHardwareReventPhysicalFirmwareReventPhysicalSoftwareReventPhysicalMfgNameentPhysicalModelNameentPhysicalUUID
These objects expose info about the physical entities in a managed system, which can be used to figure out the vendor, model, version, and specific device identification for each system component 👀.
entLogicalDescrentLogicalType
These objects expose the type of logical entities in the managed system ✨.
entLogicalCommunity
This object exposes community names tied to particular logical entities in the system 🫣.
entLogicalTAddressentLogicalTDomain
These objects expose network addresses that can be used to talk to an SNMP agent on behalf of particular logical entities in the system 📡.
entLogicalContextEngineIDentLogicalContextName
These objects identify the authoritative SNMP engine that holds info on behalf of particular logical entities in the system 🧠.
SNMP versions before SNMPv3 did not include adequate security. Even if the network itself is secure (for example by using IPsec), there is no control over who on that secure network is allowed to access and GET/SET (read/change/create/delete) the objects in these MIB modules. That's a big ol' red flag 🚩.
Implementations SHOULD provide the security features described by the SNMPv3 framework (see [RFC3410]), and implementations claiming compliance to the SNMPv3 standard MUST include full support for authentication and privacy via the User-based Security Model (USM) [RFC3414] with the AES cipher algorithm [RFC3826]. Implementations MAY also provide support for the Transport Security Model (TSM) [RFC5591] in combination with a secure transport such as SSH [RFC5592] or TLS/DTLS [RFC6353] 🦋.
Further, deploying SNMP versions prior to SNMPv3 is NOT RECOMMENDED 🙅♀️. Instead, it is RECOMMENDED to deploy SNMPv3 and to enable cryptographic security. It is then a customer/operator responsibility to make sure the SNMP entity giving access to an instance of these MIB modules is properly configured, so that only principals (users) with legitimate rights can GET or SET (change/create/delete) the objects 🫶.
6. IANA Considerations 📋
This document defines the first version of the IANA-maintained IANA-ENTITY-MIB module, which lets new physical classes be added to the enumeration in IANAPhysicalClass. An Expert Review, as defined in RFC 5226 [RFC5226], is REQUIRED for each modification 💖.
The MIB module in this document uses the following IANA-assigned OBJECT IDENTIFIER values, recorded in the SMI Numbers registry:
Descriptor OBJECT IDENTIFIER value
---------- -----------------------
entityMIB { mib-2 47 }
IANA has allocated two OBJECT IDENTIFIERS under mib-2 for:
Descriptor OBJECT IDENTIFIER value
---------- -----------------------
ianaEntityMIB { mib-2 216 }
uuidTCMIB { mib-2 217 }
7. Acknowledgements 🌸
The first three versions of the RFCs on the ENTITY MIB modules were written by A. Bierman and K. McCloghrie. The authors want to thank A. Bierman and K. McCloghrie for the earlier versions of the ENTITY MIB 🫶.
The motivation for the extension to RFC 4133 came from the requirements of the EMAN WG of the IETF ✨.
The authors also thank Juergen Schoenwaelder for his review and comments, which helped improve this document 🙌.
8. References 📚
8.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC2578] McCloghrie, K., Perkins, D., and J. Schoenwaelder, "Structure of Management Information Version 2 (SMIv2)", STD 58, RFC 2578, April 1999.
[RFC2579] McCloghrie, K., Ed., Perkins, D., Ed., and J. Schoenwaelder, Ed., "Textual Conventions for SMIv2", STD 58, RFC 2579, April 1999.
[RFC2580] McCloghrie, K., Ed., Perkins, D., Ed., and J. Schoenwaelder, Ed., "Conformance Statements for SMIv2", STD 58, RFC 2580, April 1999.
[RFC3411] Harrington, D., Presuhn, R., and B. Wijnen, "An Architecture for Describing Simple Network Management Protocol (SNMP) Management Frameworks", STD 62, RFC 3411, December 2002.
[RFC3414] Blumenthal, U. and B. Wijnen, "User-based Security Model (USM) for version 3 of the Simple Network Management Protocol (SNMPv3)", STD 62, RFC 3414, December 2002.
[RFC3826] Blumenthal, U., Maino, F., and K. McCloghrie, "The Advanced Encryption Standard (AES) Cipher Algorithm in the SNMP User-based Security Model", RFC 3826, June 2004.
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform Resource Identifier (URI): Generic Syntax", STD 66, RFC 3986, January 2005.
[RFC4122] Leach, P., Mealling, M., and R. Salz, "A Universally Unique IDentifier (UUID) URN Namespace", RFC 4122, July 2005.
[RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an IANA Considerations Section in RFCs", BCP 26, RFC 5226, May 2008.
[RFC5591] Harrington, D. and W. Hardaker, "Transport Security Model for the Simple Network Management Protocol (SNMP)", RFC 5591, June 2009.
[RFC5592] Harrington, D., Salowey, J., and W. Hardaker, "Secure Shell Transport Model for the Simple Network Management Protocol (SNMP)", RFC 5592, June 2009.
[RFC6353] Hardaker, W., "Transport Layer Security (TLS) Transport Model for the Simple Network Management Protocol (SNMP)", RFC 6353, July 2011.
8.2. Informative References 📚✨
These are the extra-credit reads, the ones that help you understand the vibe but aren't strictly required to build the thing 🤓💅
[RFC1157] Case, J., Fedor, M., Schoffstall, M., and J. Davin,
"Simple Network Management Protocol (SNMP)", RFC 1157,
May 1990.
[RFC1516] McMaster, D. and K. McCloghrie, "Definitions of Managed
Objects for IEEE 802.3 Repeater Devices", RFC 1516,
September 1993.
[RFC2108] de Graaf, K., Romascanu, D., McMaster, D., and K.
McCloghrie, "Definitions of Managed Objects for IEEE
802.3 Repeater Devices using SMIv2", RFC 2108, February
1997.
[RFC2037] McCloghrie, K. and A. Bierman, "Entity MIB using
SMIv2", RFC 2037, October 1996.
[RFC2737] McCloghrie, K. and A. Bierman, "Entity MIB (Version
2)", RFC 2737, December 1999.
[RFC2863] McCloghrie, K. and F. Kastenholz, "The Interfaces Group
MIB", RFC 2863, June 2000.
[RFC3406] Daigle, L., van Gulik, D., Iannella, R., and P.
Faltstrom, "Uniform Resource Names (URN) Namespace
Definition Mechanisms", BCP 66, RFC 3406, October 2002.
[RFC3410] Case, J., Mundy, R., Partain, D., and B. Stewart,
"Introduction and Applicability Statements for
Internet-Standard Management Framework", RFC 3410,
December 2002.
[RFC4133] Bierman, A. and K. McCloghrie, "Entity MIB (Version
3)", RFC 4133, August 2005.
[RFC4152] Tesink, K. and R. Fox, "A Uniform Resource Name (URN)
Namespace for the Common Language Equipment Identifier
(CLEI) Code", RFC 4152, August 2005.
[RFC4188] Norseth, K., Ed., and E. Bell, Ed., "Definitions of
Managed Objects for Bridges", RFC 4188, September 2005.
[T1.213] ATIS T1.213-2001, "Coded Identification of Equipment
Entities in the North American Telecommunications
System for Information Exchange", 2001, <www.ansi.org>.
[T1.213a] ATIS T1.213a, "Supplement to T1.213-2001, Coded
Identification of Equipment Entities in the North
American Telecommunications System for Information
Exchange, to Correct the Representation of the Basic
Code in Figure B.1", 2001, <www.ansi.org>.
Authors' Addresses 💌
These are the lovely humans who wrote this spec, so if you have questions, go ask them nicely 🫶🌸
Andy Bierman 🦋
Andy Bierman
YumaWorks, Inc.
274 Redwood Shores Parkway, #133
Redwood City, CA 94065
USA
Phone: +1 408-716-0466
EMail: andy@yumaworks.com
Dan Romascanu 💜
Dan Romascanu
Avaya
Park Atidim, Bldg. #3
Tel Aviv, 61581
Israel
Phone: +972-3-6458414
EMail: dromasca@avaya.com
Juergen Quittek 🌈
Juergen Quittek
NEC Europe Ltd.
Network Research Division
Kurfuersten-Anlage 36
Heidelberg 69115
Germany
Phone: +49 6221 4342-115
EMail: quittek@neclab.eu
Mouli Chandramouli 🧚
Mouli Chandramouli
Cisco Systems, Inc.
Sarjapur Outer Ring Road
Bangalore 560103
India
Phone: +91 80 4429 2409
EMail: moulchan@cisco.com
📦 where this page comes from
- ietf: rfc6933 2013-05
- 💖 girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms