RFC 1214

OSI internet management: Management Information Base

πŸ“… published April 1991, from ietf

1. Introduction ✨

Okay bestie, let's talk about this RFC πŸŽ€ It's RFC 1214, titled OSI Internet Management: Management Information Base. It's from the Network Working Group, edited by L. Labarre at MITRE, dated April 1991 πŸ¦‹ The Status section says it's an IAB standards track protocol, and the title block doesn't list anything it obsoletes or updates. (Section 2 does talk about proposed changes to RFC 1158, though, so keep that in mind πŸ‘€)

Here's the vibe of the whole thing: it's a MIB (Management Information Base) for managing TCP/IP internets using the OSI management protocol πŸ’… It takes MIB-II and reshapes it into OSI templates so it fits the OSI way of structuring management info. Iconic glow-up 🌸

Here's the full doc in its table of contents πŸ’–

1. Introduction................................................    2
2. Additions to MIB-II.........................................    3
2.1 Structure of the OIM Subtree...............................    3
2.2 Supporting ISO Definitions.................................    3
2.3 Additions for Object Instance Identification...............    4
2.3.1 Distinguished Names......................................    4
2.4 Events.....................................................    5
2.5 Containment (Naming) Tree Definition.......................    5
2.6 Changes from RFC 1158......................................    6
3. Format of OSI Templates.....................................    7
4. Object Class Definitions....................................    7
5. Attribute Definitions.......................................   16
6. Notifications...............................................   44
7. The Containment Hierarchy...................................   45
8. ASN.1 Definitions...........................................   49
9. Acknowledgements............................................   54
References.....................................................   55
Appendix 1: Notational Tools for Managed Object Definition.....   57
A1.1 Overview of Notational Tools..............................   57
A1.2 Conventions Used in Template Definitions..................   58
A1.3  Managed Object Class Template............................   60
A1.4  Package Template.........................................   63
A1.5 Parameter Template........................................   67
A1.6  Name Binding Template....................................   67
A1.7 Attribute Template........................................   70
A1.8  Notification Template....................................   73
Appendix 2: New Objects: Internet SMI Object Type Macros.......   76
Appendix 3: Supporting Definitions.............................   81
Security Considerations........................................   82
Author's Address...............................................   83

The intro explains the background. The memo is an OSI version of the MIB, and it's an incremental refinement of MIB-II. The design follows this policy, in order: first, keep compatibility with MIB-II by including its objects without changing their registered identifiers, syntax, and behaviour; second, format MIB-II using OSI templates; third, add attributes needed for identification with the OSI management protocol; fourth, identify object instances in a way that's compatible with building a common API for both CMIP and SNMP; and finally, define notifications (events), including the ones SNMP defines (RFC 1157 [14]), which are deemed necessary for management ✨

The MIB is also expected to grow over time to keep up with the Internet's changing needs 🌈

Some history, because it's kinda juicy πŸ“ RFC 1109 [13] reported that the SNMP and OSI frameworks had way more differences than people expected. So the requirement for the SMI/MIB to be compatible across both frameworks got suspended, which let each framework define its MIB separately. SNMP's answer was MIB-II, and the OSI answer is this document, which builds on MIB-II's work and adds the attributes needed to map into the OSI SMI πŸ¦‹

The full OIM framework is made of: the OSI Structure of Management Information, Parts 1-4, ISO/IEC DIS 10165 [4,5,6], with slight changes to stay compatible with RFC 1155 [11]; this memo, OSI Internet Management: Management Information Base; plus the OSI Common Management Information Service (CMIS) [7] and Common Management Information Protocol (CMIP) [8] πŸ’œ

2. Additions to MIB-II 🌸

Additions to MIB-II come in a few flavours: the managed object class "top", which every other object class derives from; object instance identification according to the OSI SMI; asynchronous events; name bindings that define how objects bind to each other in the containment (naming) hierarchy; and proposed changes to RFC 1158 that are expected to be accepted by the IETF [16] πŸŽ€

2.1 Structure of the OIM Subtree 🧚

Here's how the oim subtree is set up. Note that the "cmot" subtree has been relabeled to "oim" πŸ‘‘

     cmot            OBJECT IDENTIFIER ::= {mib 9}
     oim             OBJECT IDENTIFIER ::= {cmot}
     cmotVersion     OBJECT IDENTIFIER ::= {oim 1}
     cmotACSEInfo    OBJECT IDENTIFIER ::= {oim 2}
     cmotSystemId    OBJECT IDENTIFIER ::= {oim 3}
     misc            OBJECT IDENTIFIER ::= {oim 4}
     objects         OBJECT IDENTIFIER ::= {oim 5}
     attributes      OBJECT IDENTIFIER ::= {oim 6}
     events          OBJECT IDENTIFIER ::= {oim 7}
     nameforms       OBJECT IDENTIFIER ::= {oim 8}
     actions         OBJECT IDENTIFIER ::= {oim 9}

2.2 Supporting ISO Definitions πŸ’…

The OSI defined managed object class "top" [5] has been added to the MIB. It's the root of the inheritance hierarchy, and it holds attributes that every object in the MIB inherits. Until ISO/IEC DIS 10165 becomes an International Standard, "top" and its associated attributes are registered in Appendix 3 πŸ“

2.3 Additions for Object Instance Identification πŸ”₯

This is where the conventions for identifying objects in the OIM MIB-II for use with CMIP get defined ✨

2.3.1 Distinguished Names πŸ¦‹

The distinguished name of an object shall consist of a sequence of relative distinguished names, one for each object on the containment path from the root to the object. Each relative distinguished name shall contain exactly one attribute, which is the "naming" attribute for the corresponding class, as specified by a NAME BINDING template. The CMIP ObjectInstance shall be encoded using the distinguishedName choice πŸ’–

Object classes that have only a single instance normally implemented in a managed system, other than the "system" managed object class, shall use an empty string for their naming attribute value, meaning a string of length zero 🌈

The format of the naming attribute for the "system" managed object class, and for object classes that normally have multiple instances (like table entries), is defined in the attribute templates for those classes' naming attributes. The formats for naming attributes of table entries are compatible with the instance identification conventions SNMP uses, which makes it easier to build a common API that can talk to either protocol 🫢

Here's an example. A distinguished name pointing at a particular routing table entry (of class ipRouteEntry) might look like this:

     {
             { sysName  = "troi.mitre.org"}
             { ipId = ""}
             { ipRoutingTableId = "" }
             { ipRouteEntryId = "129.83.2.17" }
     }.

The naming attributes for each OIM MIB-II managed object class listed in section 5 may be determined by looking at the NAME BINDING templates listed in section 8. The naming attribute definitions can be found in the alphabetical listing of all attributes in section 6 🧚

The following attributes have been defined for MIB-II object classes for purposes of object instance identification πŸ‘‘

      Attribute           Identifier              Object

ifTableId               {attributes 1}         ifTable
atTableId               {attributes 2}         atTable
atEntryId               {attributes 3}         atEntry
ipId                    {attributes 4}         ip
ipAddrTableId           {attributes 5}         ipAddrTable
ipRoutingTableId        {attributes 6}         ipRoutingtable
ipNetToMediaTableId     {attributes 7}         ipNetToMediaTable
ipNetToMediaEntryId     (attributes 8}         ipNetToMediaEntry
icmpId                  {attributes 9}         icmp
tcpId                   {attributes 10}        tcp
tcpConnTableId          {attributes 11}        tcpConnTable
tcpConnId               {attributes 12}        tcpConnEntry
udpId                   {attributes 13}        udp
udpTable
udpEntryId              {attributes 15}        udpEntry
egpId                   {attributes 16}        egp
egpNeighTableId         {attributes 17}        egpneighTable
snmpId                  {attributes 18}        snmp
ipAdEntryId             {attributes 19}        ipAddrEntry
ipRouteEntryId          {attributes 20}        ipRouteEntry
ifEntryId               {attributes 21}        ifEntry
egpNeighEntryId         {attributes 22}        egpNeighEntry
ifId                    {attributes 23}        interfaces

2.4 Events πŸŽ€

Events have been defined in accordance with the OSI SMI, and they include the ones defined for SNMP 🌸 The OSI SMI requires that events (notifications) be part of a specific managed object class definition, so the SNMP-defined events have been assigned to specific objects within the MIB πŸ’…

        Event                   Identifier              Object

coldStartEvent                  {events 0}              system
warmStartEvent                  {events 1}              system
linkDownEvent                   {events 2}              ifEntry
linkUpEvent                     {events 3}              ifEntry
snmpAuthentFailureEvent         {events 4}              snmp
egpNeighborLossEvent            {events 5}              egpNeighEntry
entSpecificEvent                {events 6}              system

2.5 Containment (Naming) Tree Definition 🌳

okay so the OSI SMI needs every object class to be bound into the containment hierarchy so it can be named πŸ’…. The binding has to spell out two things for the managed object class: a) which object sits directly above it in that hierarchy (its superior) πŸ‘‘, and b) which attribute in the class is used to tell instances apart at a given level. The containment tree starts at "root" 🌸. Agents in managed systems treat root as sitting immediately above the "system" object, and they may ignore any relative distinguished names that come before the one for "system" 🫢.

Want the name bindings for the OIM MIB-II objects? Those are in section 8 πŸ—ΊοΈ

2.6 Changes from RFC 1158 ✨

the proposed successor to RFC 1158 [16] has a bunch of small glow-ups, and they've all been folded into this document πŸ’– Here's the tea:

  • The sysLocation attribute of the system managed object class is changed to GET-REPLACE.
  • The ipRouteMetric5 and ipRouteInfo attributes are added to the ipRouteEntry managed object class.
  • The textual descriptor of the snmpEnableAuthTraps is changed to snmpEnableAuthenTraps.
  • The PhysAddress textual convention is introduced to represent media addresses.
  • The definition of sysServices is clarified.
  • New ifType values (29-32) are defined. In addition, the textual-descriptor for the DS1 and E1 interface types is corrected.
  • The definition of ipForwarding is clarified.
  • The definition of ipRouteType is clarified.
  • The tcpConnState attribute is now GET-REPLACE, to support deletion of the TCB associated with a TCP connection. The definition of this object is clarified to explain this usage.
  • The definition of egpNeighEventTrigger is clarified.
  • The definition of several of the variables in the new snmp group is clarified. In addition, the snmpInBadTypes and snmpOutReadOnlys objects are no longer present. (However, the object identifiers associated with those objects are reserved to prevent future use. πŸ”’)
  • The definition of snmpInReadOnlys is clarified.
  • The ipRoutingDiscards attribute is added to the ip object.
  • The optional use of an implementation-dependent, small positive integer is disallowed when identifying instances of the IP address and routing tables. 🚫

3. Format of OSI Templates 🧩

The format of OSI templates is defined in ISO/IEC DIS 10165-4 [6], Open Systems Interconnection - Structure of Management Information - Part 4: Guidelines for Managed Object Definition.

The template definitions relevant to this document are included in Appendix 1 πŸ“Ž

4. Object Class Definitions πŸŽ€

The Internet SMI objects get recast into OSI template form using these conventions:

  • MIB II groups become OSI object classes, except for the "at" group, which has no attributes.
  • Tables become OSI object classes.
  • Table entries become OSI object classes.
  • All other object types become OSI attributes, and they're assigned to object classes according to their association in MIB II.

The templates for the OIM MIB-II object classes are listed in alphabetical order below πŸ¦‹

   atEntry  MANAGED OBJECT CLASS
            DERIVED FROM  top;
            CHARACTERIZED BY
               atEntryPkg PACKAGE
                   -- see MIB II [16] for attribute semantics
               ATTRIBUTES
                            atEntryId              GET,

                               atIfIndex           GET-REPLACE,
                               atPhysAddress       GET-REPLACE,
                               atNetAddress        GET-REPLACE;;;
               REGISTERED AS  { atTable 1};

   atTable  MANAGED OBJECT CLASS
            DERIVED FROM  top;
            CHARACTERIZED BY
               atTablePkg PACKAGE
                           -- see MIB II [16] for attribute semantics
               ATTRIBUTES
                    atTableId                      GET;;;
               REGISTERED AS  { at 1};

   egp MANAGED OBJECT CLASS
            DERIVED FROM  top;
            CHARACTERIZED BY
               egpPkg PACKAGE
                   -- see MIB II [16] for attribute semantics
               ATTRIBUTES
                               egpId               GET,
                               egpInMsgs           GET,
                               egpInErrors         GET,
                               egpOutMsgs          GET,
                               egpOutErrors        GET,
                            egpAs                  GET;;;
               REGISTERED AS  { mib 8};

   egpNeighEntry MANAGED OBJECT CLASS
            DERIVED FROM  top;
            CHARACTERIZED BY
               egpNeighEntryPkg PACKAGE
                   -- see MIB II [16] for attribute semantics
               ATTRIBUTES
                            egpNeighEntryId        GET,
                            egpNeighState          GET,
                            egpNeighAddr           GET,
                            egpNeighAs             GET,
                            egpNeighInMsgs         GET,
                            egpNeighInErrs         GET,
                            egpNeighOutMsgs        GET,
                            egpNeighOutErrs        GET,
                            egpNeighInErrMsgs      GET,
                            egpNeighOutErrMsgs     GET,
                            egpNeighStateUps       GET,
                            egpNeighStateDowns     GET,
                            egpNeighIntervalHello  GET,
                            egpNeighIntervalPoll   GET,
                            egpNeighMode           GET,
                            egpNeighEventTrigger   GET-REPLACE;
              NOTIFICATIONS
                            egpNeighborLossEvent;;;
            REGISTERED AS  { egpNeighTable 1};

   egpNeighTable MANAGED OBJECT CLASS
            DERIVED FROM   top;
            CHARACTERIZED BY
               egpNeighTablePkg PACKAGE
                   -- see MIB II [16] for attribute semantics
               ATTRIBUTES
                               egpNeighTableId     GET;;;
               REGISTERED AS  { egp 5};

   icmp MANAGED OBJECT CLASS
            DERIVED FROM  top;
            CHARACTERIZED BY
               icmpPkg PACKAGE
                   -- see MIB II [16] for attribute semantics
               ATTRIBUTES
                               icmpId GET,
                               icmpInMsgs          GET,
                               icmpInErrors        GET,
                               icmpInDestUnreachs  GET,
                               icmpInTimeExcds     GET,
                               icmpInParmProbs     GET,
                               icmpInSrcQuenchs    GET,
                               icmpInRedirects     GET,
                               icmpInEchos         GET,
                               icmpInEchoReps      GET,
                               icmpInTimestamps    GET,
                               icmpInTimestampReps GET,
                               icmpInAddrMasks     GET,
                               icmpInAddrMaskReps  GET,
                               icmpOutMsgs         GET,
                               icmpOutErrors       GET,
                               icmpOutDestUnreachs GET,
                               icmpOutTimeExcds    GET,
                               icmpOutParmProbs    GET,
                               icmpOutSrcQuenchs   GET,
                               icmpOutRedirects    GET,
                               icmpOutEchos        GET,
                               icmpOutEchoReps     GET,
                               icmpOutTimestamps   GET,
                               icmpOutTimestampReps GET,
                               icmpOutAddrMasks    GET,
                               icmpOutAddrMaskReps GET;;;

               REGISTERED AS  { mib 5};

   ifEntry   MANAGED OBJECT CLASS
            DERIVED FROM  top;
            CHARACTERIZED BY
               ifEntryPkg PACKAGE
                   -- see MIB II [16] for attribute semantics
               ATTRIBUTES
                            ifEntryId              GET,
                               ifIndex             GET,
                               ifDescr             GET,
                               ifType              GET,
                               ifMtu               GET,
                               ifSpeed             GET,
                               ifPhysAddress       GET,
                               ifAdminStatus       GET-REPLACE,
                               ifOperStatus        GET,
                               ifLastChange        GET,
                               ifInOctets          GET,
                               ifInUcastPkts       GET,
                               ifInNUcastPkts      GET,
                               ifInDiscards        GET,
                               ifInErrors          GET,
                               ifInUnknownProtos   GET,
                               ifOutOctets         GET,
                               ifOutUcastPkts      GET,
                               ifOutNUcastPkts     GET,
                               ifOutDiscards       GET,
                               ifOutErrors         GET,
                               ifOutQLen           GET,
                               ifSpecific          GET;
               NOTIFICATIONS
                                           linkUpEvent,
                                           linkDownEvent;;;
               REGISTERED AS  { ifTable 1};

   ifTable MANAGED OBJECT CLASS
            DERIVED FROM  top;
            CHARACTERIZED BY
               ifTablePkg PACKAGE
                   -- see MIB II [16] for attribute semantics
               ATTRIBUTES
                           ifTableId               GET;;;
                REGISTERED AS  { interface 2};

   interfaces MANAGED OBJECT CLASS
            DERIVED FROM  top;
            CHARACTERIZED BY

               interfacesPkg PACKAGE
                   -- see MIB II [16] for attribute semantics
               ATTRIBUTES
                               ifId                GET,
                               ifNumber            GET;;;
               REGISTERED AS  { mib 2};

okay bestie, the object class templates keep going, and they're giving very organized energy πŸ’…πŸŽ€

   ip MANAGED OBJECT CLASS
            DERIVED FROM  top;
            CHARACTERIZED BY
               ipPkg PACKAGE
                   -- see MIB II [16] for attribute semantics
               ATTRIBUTES
                               ipId                GET,
                               ipForwarding        GET-REPLACE,
                               ipDefaultTTL        GET-REPLACE,
                               ipInReceives        GET,
                               ipInHdrErrors       GET,
                               ipInAddrErrors      GET,
                               ipForwDatagrams     GET,
                               ipInUnknownProtos   GET,
                               ipInDiscards        GET,
                               ipInDelivers        GET,
                               ipOutRequests       GET,
                               ipOutDiscards       GET,
                               ipOutNoRoutes       GET,
                               ipReasmTimeout      GET,
                               ipReasmReqds        GET,
                               ipReasmOKs          GET,
                               ipReasmFails        GET,
                               ipFragOKs           GET,
                               ipFragFails         GET,
                               ipFragCreates       GET,
                               ipRoutingDiscards   GET;;;
               REGISTERED AS  { mib 4};

   ipAddrEntry MANAGED OBJECT CLASS
            DERIVED FROM  top;
            CHARACTERIZED BY
               ipAddrEntryPkg PACKAGE
                   -- see MIB II [16] for attribute semantics
               ATTRIBUTES
                               ipAdEntryId         GET,
                               ipAdEntAddr         GET,
                               ipAdEntIfIndex      GET,
                               ipAdEntNetMask      GET,
                               ipAdEntBcastAddr    GET,
                               ipAdEntReasmMaxSize GET;;;

           REGISTERED AS  { ipAddrTable 1};

   ipAddrTable MANAGED OBJECT CLASS
            DERIVED FROM  top;
            CHARACTERIZED BY
               ipAddrTablePkg PACKAGE
                   -- see MIB II [16] for attribute semantics
               ATTRIBUTES
                                   ipAddrTableId           GET;;;
               REGISTERED AS  { ip 20};

   ipNetToMediaEntry       MANAGED OBJECT CLASS
            DERIVED FROM  top;
            CHARACTERIZED BY
               ipNetToMediaEntryPkg PACKAGE
                   -- see MIB II [16] for attribute semantics
               ATTRIBUTES
                               ipNetToMediaEntryId       GET,
                               ipNetToMediaIfIndex       GET-REPLACE,
                               ipNetToMediaPhysAddress   GET-REPLACE,
                               ipNetToMediaNetAddress    GET-REPLACE,
                               ipNetToMediaType          GET-REPLACE;;;
               REGISTERED AS  { ipNetToMediaTable 1};

   ipNetToMediaTable MANAGED OBJECT CLASS
            DERIVED FROM  top;
            CHARACTERIZED BY
               ipNetToMediaTablePkg PACKAGE
                   -- see MIB II [16] for attribute semantics
               ATTRIBUTES
                           ipNetToMediaTableId     GET;;;
               REGISTERED AS  { ip 22};

   ipRouteEntry MANAGED OBJECT CLASS
            DERIVED FROM  top;
            CHARACTERIZED BY
               ipRouteEntryPkg PACKAGE
                   -- see MIB II [16] for attribute semantics
               ATTRIBUTES
                               ipRouteEntryId      GET,
                               ipRouteDest         GET-REPLACE,
                               ipRouteIfIndex      GET-REPLACE,
                               ipRouteMetric1      GET-REPLACE,
                               ipRouteMetric2      GET-REPLACE,
                               ipRouteMetric3      GET-REPLACE,
                               ipRouteMetric4      GET-REPLACE,
                               ipRouteMetric5      GET-REPLACE,
                               ipRouteNextHop      GET-REPLACE,
                               ipRouteType         GET-REPLACE,
                               ipRouteProto        GET,
                               ipRouteAge          GET-REPLACE,
                               ipRouteMask         GET-REPLACE,
                               ipRouteInfo         GET-REPLACE;;;
               REGISTERED AS  { ipRoutingTable 1};

   ipRoutingTable MANAGED OBJECT CLASS
            DERIVED FROM  top;
            CHARACTERIZED BY
               ipRoutingTablePkg PACKAGE
                   -- see MIB II [16] for attribute semantics
               ATTRIBUTES
                           ipRoutingTableId        GET;;;
               REGISTERED AS  { ip 21};

   snmp MANAGED OBJECT CLASS
            DERIVED FROM   top;
            CHARACTERIZED BY
               snmpPkg PACKAGE
                   -- see MIB II [16] for attribute semantics
               ATTRIBUTES
                           snmpId                  GET,
                           snmpInPkts              GET,
                           snmpInBadVersions       GET,
                           snmpInBadCommunityNames GET,
                           snmpInBadCommunityUses  GET,
                           snmpInASNParseErrs      GET,
                           snmpInTooBigs           GET,
                           snmpInNoSuchNames       GET,
                           snmpInBadValues         GET,
                           snmpInReadOnlys         GET,
                           snmpInGenErrs           GET,
                           snmpInTotalReqVars      GET,
                           snmpInTotalSetVars      GET,
                           snmpInGetRequests       GET,
                           snmpInGetNexts          GET,
                           snmpInSetRequests       GET,
                           snmpInGetResponses      GET,
                           snmpInTraps             GET,
                           snmpOutPkts             GET,
                           snmpOutTooBigs          GET,
                           snmpOutNoSuchNames      GET,
                           snmpOutBadValues        GET,
                           snmpOutGenErrs          GET,
                           snmpOutGetRequests      GET,
                           snmpOutGetNexts         GET,
                           snmpOutSetRequests      GET,
                           snmpOutGetResponses     GET,
                           snmpOutTraps            GET,
                           snmpEnableAuthenTraps   GET-REPLACE;
           NOTIFICATIONS
                           snmpAuthentFailureEvent;;;
               REGISTERED AS  {mib 11};

   system MANAGED OBJECT CLASS
           DERIVED FROM top;
           CHARACTERIZED BY
               systemPkg PACKAGE
                           -- SEE MIB II [16] for attribute semantics
                   ATTRIBUTES
                           sysDescr        GET,
                           sysObjectId     GET,
                           sysUpTime       GET,
                           sysContact      GET-REPLACE,
                           sysName         GET-REPLACE,
                           -- MAJOR HEALTH WARNING sysName is the
                           -- naming attribute and should not be
                           -- modified via remote management without
                           -- coordinated local system changes
                           sysLocation     GET-REPLACE,
                           sysServices     GET;
                   NOTIFICATIONS
                           coldStartEvent,
                           warmStartEvent,
                           entSpecificEvent;;;
   REGISTERED AS   {mib 1};

   tcp MANAGED OBJECT CLASS
            DERIVED FROM   top;
            CHARACTERIZED BY
               tcpPkg PACKAGE
                   -- see MIB II [16] for attribute semantics
               ATTRIBUTES
                               tcpId               GET,
                               tcpRtoAlgorithm     GET,
                               tcpRtoMin           GET,
                               tcpRtoMax           GET,
                               tcpMaxConn          GET,
                               tcpActiveOpens      GET,
                               tcpPassiveOpens     GET,
                               tcpAttemptFails     GET,
                               tcpEstabResets      GET,
                               tcpCurrEstab        GET,
                               tcpInSegs           GET,
                               tcpOutSegs          GET,
                               tcpRetransSegs      GET,
                               tcpInErrs           GET,
                               tcpOutRsts          GET;;;
               REGISTERED AS { mib 6};

   tcpConnEntry MANAGED OBJECT CLASS
            DERIVED FROM  top;
            CHARACTERIZED BY
               tcpConnEntryPkg PACKAGE
                   -- see MIB II [16] for attribute semantics
               ATTRIBUTES
                               tcpConnId           GET,
                               tcpConnState        GET-REPLACE,
                               tcpConnLocalAddress GET,
                               tcpConnLocalPort    GET,
                               tcpConnRemAddress   GET,
                               tcpConnRemPort      GET;;;
               REGISTERED AS { tcpConnTable 1 };


   tcpConnTable MANAGED OBJECT CLASS
            DERIVED FROM   top;
            CHARACTERIZED BY
               tcpConnTablePkg PACKAGE
                   -- see MIB II [16] for attribute semantics
               ATTRIBUTES
                               tcpConnTableId      GET;;;
               REGISTERED AS { tcp 13 };

   udp MANAGED OBJECT CLASS
            DERIVED FROM   top;
            CHARACTERIZED BY
               udpPkg PACKAGE
                   -- see MIB II [16] for attribute semantics
               ATTRIBUTES
                               udpId               GET,
                               udpInDatagrams      GET,
                               udpNoPorts          GET,
                               udpInErrors         GET,
                               udpOutDatagrams     GET;;;
               REGISTERED AS  { mib 7};

    udpEntry MANAGED OBJECT CLASS
            DERIVED FROM  top;
            CHARACTERIZED BY
               udpEntryPkg PACKAGE
                   -- see MIB II [16] for attribute semantics
               ATTRIBUTES

                               udpEntryId          GET,
                               udpLocalAddress     GET,
                               udpLocalPort        GET;;;
               REGISTERED AS { udpTable 1 };


   udpTable MANAGED OBJECT CLASS
            DERIVED FROM   top;
            CHARACTERIZED BY
               udpTablePkg PACKAGE
                   -- see MIB II [16] for semantics
               ATTRIBUTES
                               udpTableId          GET;;;
               REGISTERED AS { udp 5 };

5. Attribute Definitions ✨

Okay, now we're in the attribute templates, and these are the little building blocks that the object classes above keep referring back to. 🧚 Everything is lined up in alphabetical order, so you can totally find what you're looking for without a whole scavenger hunt.

atEntryId ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                OIM-Module.PrintString;
              MATCHES FOR      Equality;
        -- identifies the atEntry instance
        -- <index>".1." <address>, where <index is the decimal
        -- representation of atIfIndex and <address> is atNetAddress
        -- represented in "dot notation".  The "1" subidentifier
        -- indicates that the address is an IP address.
           REGISTERED AS {attributes 3};

Okay so this is where the attribute list gets really juicy πŸ’… Every one of these is basically a little name tag for a piece of MIB-II data, and they're all sorted into their own little groups: atEntry, egp, egpNeighEntry, icmp, and attributes.

atIfIndex ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  OIM-Module.Integer;
              MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {atEntry 1};

atNetAddress ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.NetworkAddress;
              MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {atEntry 3};

atPhysAddress ATTRIBUTE
             WITH ATTRIBUTE SYNTAX  OIM-Module.PhysAddress;
              MATCHES FOR      Equality;

                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {atEntry 2};

atTableId  ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                OIM-Module.PrintString;
              MATCHES FOR      Equality;
                -- This attribute identifies the instance of
                -- the address table  which is being used.
                -- An empty string is used for a single
                -- instance.
           REGISTERED AS {attributes 2};

Now the egp ones 🫢 egpAs, egpId, and the egpIn/egpOut counters are all pulled straight from MIB II, so the vibe is "see MIB II, it's handled there, bestie" πŸ“š

egpAs   ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  OIM-Module.Integer;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {egp 6};

egpId      ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                OIM-Module.PrintString;
              MATCHES FOR      Equality;
                -- EGP entity naming attribute.
                -- An empty string is used for a single instance.
           REGISTERED AS {attributes 16};

egpInErrors ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {egp 2};

egpInMsgs  ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {egp 1};

egpOutErrors ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {egp 4};

egpOutMsgs  ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {egp 3};

Next up is the whole egpNeighEntry crew πŸ‘‘ These describe each neighbour in the EGP neighbour table, and honestly it's giving organised. egpNeighEntryId and egpNeighTableId are the ones that actually name things, and the rest just sit under the entry.

egpNeighAddr    ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.IpAddress;
              MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {egpNeighEntry 2};

egpNeighAs      ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  OIM-Module.Integer;
              MATCHES FOR      Equality, Ordering;

                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {egpNeighEntry 3};

egpNeighEntryId  ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                 OIM-Module.PrintString;
              MATCHES FOR      Equality;
                -- identifies the egp neighbor table entry.
                -- egpNeighAddr encoded in "dot notation".
                   REGISTERED AS {attributes 22};

egpNeighEventTrigger    ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                 OIM-Module.EgpNeighEventTrigger;
              MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {egpNeighEntry 15};

egpNeighInErrMsgs       ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {egpNeighEntry 8};

egpNeighInErrs  ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {egpNeighEntry  5};

egpNeighInMsgs  ATTRIBUTE
              WITH ATTRIBUTE SYNTAX RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {egpNeighEntry 4};

egpNeighIntervalHello   ATTRIBUTE
         WITH ATTRIBUTE SYNTAX
                  OIM-Module.Integer;
         MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
       REGISTERED AS {egpNeighEntry 12};

egpNeighIntervalPoll    ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                 OIM-Module.Integer;
              MATCHES FOR      Equality, Ordering;

                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {egpNeighEntry 13};

egpNeighMode    ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  OIM-Module.EgpNeighMode;
              MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {egpNeighEntry 14};

egpNeighOutErrMsgs      ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {egpNeighEntry 9};

egpNeighOutErrs ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {egpNeighEntry 7};

egpNeighOutMsgs ATTRIBUTE
           WITH ATTRIBUTE SYNTAX RFC1065-SMI.Counter;
           MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
REGISTERED AS {egpNeighEntry 6};

egpNeighState ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  OIM-Module.EgpNeighState;
              MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {egpNeighEntry 1};

egpNeighStateDowns      ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                 RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {egpNeighEntry 11};

egpNeighStateUps        ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {egpNeighEntry 10};

egpNeighTableId ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                 OIM-Module.PrintString;
              MATCHES FOR      Equality;
                -- This attribute uniquely identifies the
                -- egp neighbor table
                -- An empty string is used for a single instance.
           REGISTERED AS {attributes 17};

Last stop: the icmp family 🌈 These are all the ICMP counters and identifiers. icmpId is the one that uniquely names the ICMP object instance, and everything else is a counter from MIB II ✨

icmpId     ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                OIM-Module.PrintString;
              MATCHES FOR      Equality;
                -- This attribute uniquely identifies the
                -- ICMP object instance
                -- An empty string is used for a single instance.
           REGISTERED AS {attributes 9};

icmpInAddrMaskReps ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {icmp 13};

icmpInAddrMasks ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {icmp 12};

icmpInDestUnreachs ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;

                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {icmp 3};

icmpInEchoReps ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {icmp 9};

icmpInEchos  ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {icmp 8};

icmpInErrors ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {icmp 2};

icmpInMsgs ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {icmp 1};

icmpInParmProbs ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {icmp 5};

icmpInRedirects ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {icmp 7};

icmpInSrcQuenchs ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                 RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {icmp 6};

icmpInTimeExcds ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {icmp 4};

icmpInTimestampReps ATTRIBUTE
       WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
       MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
    REGISTERED AS {icmp 11};

icmpInTimestamps ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {icmp 10};

icmpOutAddrMaskReps ATTRIBUTE
          WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
          MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
       REGISTERED AS {icmp 26};

icmpOutAddrMasks ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {icmp 25};

icmpOutDestUnreachs ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                 RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {icmp 16};

icmpOutEchoReps  ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {icmp 22};

icmpOutEchos ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {icmp 21};

icmpOutErrors ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {icmp 15};

okay bestie, the icmp counters are done and now we're into the interface and IP attributes πŸ¦‹ here's the next chunk πŸ’…

icmpOutMsgs ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {icmp 14};

icmpOutParmProbs ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {icmp 18};

icmpOutRedirects ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {icmp 20};

icmpOutSrcQuenchs ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                 RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {icmp 19};

icmpOutTimeExcds ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {icmp 17};

icmpOutTimestampReps ATTRIBUTE
      WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
      MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
   REGISTERED AS {icmp 24};

icmpOutTimestamps ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                 RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {icmp 23};

The interface group is next, and it's a big one, so get your snacks πŸ“πŸ§š

ifAdminStatus ATTRIBUTE
             WITH ATTRIBUTE SYNTAX  OIM-Module.IfAdminStatus;
              MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ifEntry 7};

ifDescr ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                OIM-Module.PrintString;
              MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ifEntry 2};

ifEntryId  ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                 OIM-Module.PrintString;
              MATCHES FOR      Equality;
                -- The decimal representation of ifIndex.
           REGISTERED AS {attributes 21};

ifId         ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  OIM-Module.PrintString;
              MATCHES FOR      Equality;
                -- An empty string is used for a single instance.
           REGISTERED AS {attributes 23};

ifIndex    ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  OIM-Module.Integer;
              MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ifEntry 1};

ifInDiscards ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ifEntry 13};

ifInErrors ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ifEntry 14};

ifInNUcastPkts ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ifEntry 12};

ifInOctets ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ifEntry 10};

ifInUcastPkts ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ifEntry 11};

ifInUnknownProtos ATTRIBUTE
     WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
     MATCHES FOR      Equality, Ordering;
        -- SEE MIB II [16] for attribute semantics
  REGISTERED AS {ifEntry 15};

ifLastChange ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.TimeTicks;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ifEntry 9};

ifMtu ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  OIM-Module.Integer;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ifEntry 4};

ifNumber  ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  OIM-Module.Integer;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {interfaces 1};

ifOperStatus ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  OIM-Module.IfOperStatus;
              MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ifEntry 8};

ifOutDiscards ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ifEntry 19};

ifOutErrors ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;

              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ifEntry 20};

ifOutNUcastPkts ATTRIBUTE
        WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
        MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
     REGISTERED AS {ifEntry 18};

ifOutOctets ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;

              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ifEntry 16};

ifOutQLen ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Gauge;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ifEntry 21};

ifOutUcastPkts ATTRIBUTE
         WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
         MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
      REGISTERED AS {ifEntry 17};

ifPhysAddress ATTRIBUTE
         WITH ATTRIBUTE SYNTAX  OIM-Module.PhysAddress;
         MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
      REGISTERED AS {ifEntry 6};

ifSpecific ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  OIM-Module.ObjectId;
              MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ifEntry 22};

ifSpeed ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Gauge;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ifEntry 5};

ifTableId  ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                OIM-Module.PrintString;
              MATCHES FOR      Equality;
                -- an empty string
           REGISTERED AS {attributes 1};

ifType ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  OIM-Module.IfType;
             MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
          REGISTERED AS {ifEntry 3};

Last stretch: the IP attributes! We're almost at the finish line of this part πŸŒˆπŸ‘‘

ipAddrTableId ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                OIM-Module.PrintString;
              MATCHES FOR      Equality;
                -- This attribute provides a unique id
                -- which identifies the address table.
                -- An empty string is used for a single instance.
           REGISTERED AS {attributes 5};

ipAdEntAddr ATTRIBUTE
              WITH ATTRIBUTE SYNTAX   RFC1065-SMI.IpAddress;
              MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ipAddrEntry 1};

ipAdEntBcastAddr ATTRIBUTE
          WITH ATTRIBUTE SYNTAX  OIM-Module.Integer;

           MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
         REGISTERED AS {ipAddrEntry 4};

ipAdEntIfIndex ATTRIBUTE
              WITH ATTRIBUTE SYNTAX   OIM-Module.Integer;
              MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ipAddrEntry 2};

ipAdEntNetMask ATTRIBUTE
           WITH ATTRIBUTE SYNTAX   RFC1065-SMI.IpAddress;
           MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
         REGISTERED AS {ipAddrEntry 3};

ipAdEntReasmMaxSize ATTRIBUTE
   WITH ATTRIBUTE SYNTAX  OIM-Module.Integer64k;
    MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
  REGISTERED AS {ipAddrEntry 5};

ipAdEntryId  ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                OIM-Module.PrintString;
              MATCHES FOR      Equality;
                -- This attribute uniquely identifies the ip address
                -- table entry.  The format is:
                -- <addr> , where <addr> is ipAdEntAddr
                -- represented in "dot notation".
           REGISTERED AS {attributes 19};

ipDefaultTTL ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  OIM-Module.Integer;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ip 2};

ipForwarding ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  OIM-Module.IpForwarding;
              MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ip 1};

ipForwDatagrams ATTRIBUTE
       WITH ATTRIBUTE SYNTAX   RFC1065-SMI.Counter;
       MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics

     REGISTERED AS {ip 6};

ipFragCreates ATTRIBUTE
              WITH ATTRIBUTE SYNTAX   RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ip 19};

ipFragFails ATTRIBUTE
              WITH ATTRIBUTE SYNTAX   RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ip 18};

ipFragOKs ATTRIBUTE
              WITH ATTRIBUTE SYNTAX   RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ip 17};

ipId ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                OIM-Module.PrintString;
              MATCHES FOR      Equality;
                -- identifies the Ip entity.
                -- An empty string is used for a single instance
           REGISTERED AS {attributes 4};

ipInAddrErrors ATTRIBUTE
             WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ip 5};

ipInDelivers ATTRIBUTE
              WITH ATTRIBUTE SYNTAX   RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ip 9};

ipInDiscards ATTRIBUTE
              WITH ATTRIBUTE SYNTAX   RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ip 8};

ipInHdrErrors ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ip 4};

okay bestie, we're picking up right where the ip attributes left off πŸŽ€βœ¨

ipInReceives ATTRIBUTE
              WITH ATTRIBUTE SYNTAX RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ip 3};

ipInUnknownProtos ATTRIBUTE
     WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
     MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
   REGISTERED AS {ip 7};

ipNetToMediaEntryId ATTRIBUTE
       WITH ATTRIBUTE SYNTAX
                OIM-Module.PrintString;
        MATCHES FOR      Equality;
                -- identifies an instance of IpNetToMediaEntry
                -- <interface> "." <address>, where <interface> is the
                -- decimal representation of ipNetToMediaIfIndex and
                -- <address> is ipNetToMediaNetAddress in
                -- "dot notation".
    REGISTERED AS {attributes 8};

ipNetToMediaIfIndex ATTRIBUTE
       WITH ATTRIBUTE SYNTAX    OIM-Module.Integer;
        MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
    REGISTERED AS {ipNetToMediaEntry 1};

ipNetToMediaNetAddress ATTRIBUTE
     WITH ATTRIBUTE SYNTAX
        RFC1065-SMI.IpAddress;
     MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
    REGISTERED AS {ipNetToMediaEntry 3};

ipNetToMediaPhysAddress ATTRIBUTE
     WITH ATTRIBUTE SYNTAX
        OIM-Module.PhysAddress;
     MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
    REGISTERED AS {ipNetToMediaEntry 2};

ipNetToMediaTableId  ATTRIBUTE
     WITH ATTRIBUTE SYNTAX
                OIM-Module.PrintString;
      MATCHES FOR      Equality;
                -- This is the distinguishing attribute for the
                -- Ip Net to Media Table.
                -- An empty string is used for a single instance.
   REGISTERED AS {attributes 7};

ipNetToMediaType ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                          OIM-Module.IpNetToMediaType;
              MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ipNetToMediaEntry 4};

ipOutDiscards ATTRIBUTE
              WITH ATTRIBUTE SYNTAX   RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ip 11};

ipOutNoRoutes ATTRIBUTE
              WITH ATTRIBUTE SYNTAX   RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ip 12};

ipOutRequests ATTRIBUTE
              WITH ATTRIBUTE SYNTAX   RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ip 10};

ipReasmFails ATTRIBUTE
              WITH ATTRIBUTE SYNTAX   RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ip 16};

ipReasmOKs ATTRIBUTE
              WITH ATTRIBUTE SYNTAX   RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ip 15};

ipReasmReqds ATTRIBUTE
              WITH ATTRIBUTE SYNTAX   RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ip 14};

ipReasmTimeout ATTRIBUTE
          WITH ATTRIBUTE SYNTAX   OIM-Module.Integer;
           MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
         REGISTERED AS {ip 13};

 ipRouteAge ATTRIBUTE
              WITH ATTRIBUTE SYNTAX   OIM-Module.Integer;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ipRouteEntry 10};

ipRouteDest ATTRIBUTE
              WITH ATTRIBUTE SYNTAX   RFC1065-SMI.IpAddress;
              MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ipRouteEntry 1};

ipRouteEntryId  ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                OIM-Module.PrintString;
              MATCHES FOR      Equality;
                -- This attribute identifies the ip route table entry.
                -- The format is <dest>, where <dest> is
                -- ipRouteDest represented in "dot notation.
REGISTERED AS {attributes 20};

ipRouteIfIndex ATTRIBUTE
              WITH ATTRIBUTE SYNTAX   OIM-Module.Integer;
              MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ipRouteEntry 2};

ipRouteInfo ATTRIBUTE
             WITH ATTRIBUTE SYNTAX   OIM-Module.ObjectId;
              MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ipRouteEntry 13};

ipRouteMask ATTRIBUTE
              WITH ATTRIBUTE SYNTAX   RFC1065-SMI.IpAddress;
              MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ipRouteEntry 11};

ipRouteMetric1 ATTRIBUTE
            WITH ATTRIBUTE SYNTAX   OIM-Module.Integer;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ipRouteEntry 3};

ipRouteMetric2 ATTRIBUTE
             WITH ATTRIBUTE SYNTAX   OIM-Module.Integer;
             MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ipRouteEntry 4};

ipRouteMetric3 ATTRIBUTE
             WITH ATTRIBUTE SYNTAX   OIM-Module.Integer;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ipRouteEntry 5};

ipRouteMetric4 ATTRIBUTE
             WITH ATTRIBUTE SYNTAX   OIM-Module.Integer;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ipRouteEntry 6};

ipRouteMetric5 ATTRIBUTE
             WITH ATTRIBUTE SYNTAX   OIM-Module.Integer;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ipRouteEntry 12};

ipRouteNextHop ATTRIBUTE
            WITH ATTRIBUTE SYNTAX   RFC1065-SMI.IpAddress;
             MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ipRouteEntry 7};

ipRouteProto ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  OIM-Module.IpRouteProto;
              MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ipRouteEntry 9};

ipRouteType ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  OIM-Module.IpRouteType;
              MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ipRouteEntry 8};

ipRoutingDiscards ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {ip 23};

ipRoutingTableId  ATTRIBUTE
          WITH ATTRIBUTE SYNTAX
                OIM-Module.PrintString;
          MATCHES FOR      Equality;
                -- unique id which identifies the
                -- Ip Routing Table instance.
                -- An empty string is used for a single instance.
        REGISTERED AS {attributes 6};

snmpEnableAuthenTraps   ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                         OIM-Module.SnmpEnableAuthenTraps;
              MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {snmp 30};

snmpId  ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                 OIM-Module.PrintString;
              MATCHES FOR      Equality;
                        -- naming attribute for snmp
                        -- An empty string is used for a single instance.
           REGISTERED AS {attributes 18};

snmpInASNParseErrs      ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {snmp 6};

snmpInBadCommunityNames ATTRIBUTE
    WITH ATTRIBUTE SYNTAX
          RFC1065-SMI.Counter;
    MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
  REGISTERED AS {snmp 4};

snmpInBadCommunityUses  ATTRIBUTE
    WITH ATTRIBUTE SYNTAX
                 RFC1065-SMI.Counter;
    MATCHES FOR      Equality, Ordering;

                -- SEE MIB II [16] for attribute semantics
  REGISTERED AS {snmp 5};

snmpInBadValues ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                          RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {snmp 10};

snmpInBadVersions       ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {snmp 3};

snmpInGenErrs   ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {snmp 12};

snmpInGetNexts  ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {snmp 16};

snmpInGetRequests       ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {snmp 15};

snmpInGetResponses      ATTRIBUTE
       WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
       MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
    REGISTERED AS {snmp 18};

snmpInNoSuchNames       ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;

                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {snmp 9};

snmpInPkts      ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {snmp 1};

that's the whole batch of attributes for this part, bestie πŸ¦‹πŸ’œ

okay bestie, the snmp counters are up next, then the sys and tcp attributes πŸ’…πŸ§š

snmpInReadOnlys ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                         RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {snmp 11};

snmpInSetRequests       ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {snmp 17};

snmpInTooBigs   ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {snmp 8};

snmpInTotalReqVars      ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {snmp 13};

snmpInTotalSetVars      ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {snmp 14};

snmpInTraps     ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {snmp 19};

snmpOutBadValues        ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                          RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {snmp 22};

snmpOutGenErrs  ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                          RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {snmp 24};

snmpOutGetNexts ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {snmp 26};

snmpOutGetRequests      ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {snmp 25};

snmpOutGetResponses     ATTRIBUTE
       WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
       MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
    REGISTERED AS {snmp 28};

snmpOutNoSuchNames      ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {snmp 21};

snmpOutPkts     ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {snmp 2};

snmpOutSetRequests      ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {snmp 27};

snmpOutTooBigs  ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                         RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {snmp 20};

snmpOutTraps    ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {snmp 29};

sysContact ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                OIM-Module.PrintString;
             MATCHES FOR                 Equality;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {system 4};

sysDescr ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                OIM-Module.PrintString;
             MATCHES FOR                 Equality;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {system 1};

sysLocation     ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                OIM-Module.PrintString;
             MATCHES FOR                 Equality;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {system 6};

sysName         ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                OIM-Module.PrintString;
             MATCHES FOR                 Equality;
                -- SEE MIB II [16] for attribute semantics
                -- The nodes domain name.
           REGISTERED AS {system 5};

sysObjectId     ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  OIM-Module.ObjectId;
             MATCHES FOR                 Equality;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {system 2};

sysServices     ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  OIM-Module.Integer128;
             MATCHES FOR                 Equality;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {system 7};

sysUpTime       ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.TimeTicks;
             MATCHES FOR                 Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {system 3};

tcpActiveOpens ATTRIBUTE
              WITH ATTRIBUTE SYNTAX RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {tcp 5};

tcpAttemptFails  ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {tcp 7};

tcpConnId ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                OIM-Module.PrintString;
              MATCHES FOR      Equality;
                -- identifies an instance of tcpConnEntry
                -- <laddr> "." <lport> "." <raddr> "." <rport>, where
                -- <laddr> is the "dot notation" representation of
                -- tcpConnLocalAddress,
                -- <lport> is the decimal representation of
                -- tcpConnLocalPort,
                -- <raddr> is the "dot notation" representation of
                -- tcpConnRemAddress, and
                --<rport> is the decimal representation of
                -- tcpConnRemPort.
           REGISTERED AS {attributes 12};

tcpConnLocalAddress ATTRIBUTE
     WITH ATTRIBUTE SYNTAX RFC1065-SMI.IpAddress;
     MATCHES FOR      Equality;
        -- SEE MIB II [16] for attribute semantics
REGISTERED AS {tcpConnEntry 2};

tcpConnLocalPort ATTRIBUTE
    WITH ATTRIBUTE SYNTAX       OIM-Module.Integer64k;
    MATCHES FOR      Equality, Ordering;
        -- SEE MIB II [16] for attribute semantics
REGISTERED AS {tcpConnEntry 3};

tcpConnRemAddress ATTRIBUTE
    WITH ATTRIBUTE SYNTAX  RFC1065-SMI.IpAddress;
    MATCHES FOR      Equality;
        -- SEE MIB II [16] for attribute semantics
REGISTERED AS {tcpConnEntry 4};

tcpConnRemPort  ATTRIBUTE
            WITH ATTRIBUTE SYNTAX       OIM-Module.Integer64k;
            MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
REGISTERED AS {tcpConnEntry 5};

tcpConnState ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  OIM-Module.TcpConnState;
              MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {tcpConnEntry 1};

tcpConnTableId ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                OIM-Module.PrintString;
              MATCHES FOR      Equality;
                -- This attribute defines a unique index of
                -- tcpConnEntry in the TCP Connection Table
                -- An empty string is used for a single instance.
           REGISTERED AS {attributes 11};

tcpCurrEstab ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Gauge;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {tcp 9};

tcpEstabResets ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;

                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {tcp 8};

tcpId      ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                 OIM-Module.PrintString;
              MATCHES FOR      Equality;
                -- This attribute uniquely identified a tcp
                -- object instance
                -- An empty string is used for a single instance.
           REGISTERED AS {attributes 10};

tcpInErrs ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                 RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {tcp 14};

tcpInSegs ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {tcp 10};

tcpMaxConn ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  OIM-Module.Integer;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {tcp 4};

tcpOutRsts ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                 RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {tcp 15};

tcpOutSegs ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {tcp 11};

tcpPassiveOpens  ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;

                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {tcp 6};

tcpRetransSegs ATTRIBUTE
              WITH ATTRIBUTE SYNTAX RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {tcp 12};

tcpRtoAlgorithm ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  OIM-Module.TcpRtoAlgorithm;
              MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {tcp 1};

tcpRtoMax  ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  OIM-Module.Integer;
              MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
        REGISTERED AS {tcp 3};

tcpRtoMin ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  OIM-Module.Integer;
              MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {tcp 2};

okay bestie, we're picking up right where the attributes left off πŸ’… these UDP ones are giving clean, consistent vibes ✨

udpEntryId ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                OIM-Module.PrintString;
              MATCHES FOR      Equality;
                -- This attribute defines an entry
                -- for the UDP Listener Table
                -- <port> "." <address>, where <port> is the decimal
                -- representation of udpLocalPort and <address> is
                -- udpLocalAddress represented in "dot notation".
           REGISTERED AS {attributes 15};

udpId      ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                OIM-Module.PrintString;
              MATCHES FOR      Equality;
                -- This attribute provides a unique id to
                -- identify the UDP entity.
                -- An empty string is used for a single instance.
           REGISTERED AS {attributes 13};

udpInDatagrams ATTRIBUTE
              WITH ATTRIBUTE SYNTAX RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {udp 1};

udpInErrors ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {udp 3};

udpLocalAddress ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  RFC1065-SMI.IpAddress;
              MATCHES FOR      Equality;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {udpEntry 1};

udpLocalPort ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                  OIM-Module.Integer64k;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {udpEntry 2};

udpNoPorts ATTRIBUTE
              WITH ATTRIBUTE SYNTAX  RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {udp 2};

udpOutDatagrams ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                 RFC1065-SMI.Counter;
              MATCHES FOR      Equality, Ordering;
                -- SEE MIB II [16] for attribute semantics
           REGISTERED AS {udp 4};

udpTableId ATTRIBUTE
              WITH ATTRIBUTE SYNTAX
                OIM-Module.PrintString;
              MATCHES FOR      Equality;
                -- This attribute defines a unique id
                -- for the UDP Listener Table
                -- An empty string is used for a single instance.
           REGISTERED AS {attributes 14};

6. Notifications ✨

Okay so this part is the notification templates, the little "hey, something happened!" pings πŸ””. They're referenced by the managed object class templates back in section 5, and they're all listed alphabetically, because we love an organized girlie πŸ—‚οΈπŸ’–

coldStartEvent NOTIFICATION
                -- clause 4.1.6.1 of RFC1157
                -- emitted by system
        MODE    NON-CONFIRMED;
        WITH INFORMATION SYNTAX OIM-Module.SnmpTrapInfo
REGISTERED AS {events 0};

egpNeighborLossEvent NOTIFICATION
                -- clause 4.1.6.6 of RFC1157
                                -- with generic-trap = 5
                                -- The first VarBindList element
                                -- contains the name and value of the
                                -- egpNeighAddr of the affected
                                -- neighbor.
                                -- emitted by egpNeighEntry
        MODE    NON-CONFIRMED;
        WITH INFORMATION SYNTAX OIM-Module.SnmpTrapInfo;
REGISTERED AS {events 5};

linkDownEvent NOTIFICATION
                -- clause 4.1.6.3 of RFC1157
                -- emitted by ifEntry
                -- with generic-trap = 2
        MODE    NON-CONFIRMED;
        WITH INFORMATION SYNTAX OIM-Module.SnmpTrapInfo;
REGISTERED AS {events 2};

linkUpEvent NOTIFICATION
                -- clause 4.1.6.4 of RFC1157
                -- emitted by ifEntry
                -- with generic-trap = 3
        MODE    NON-CONFIRMED;
        WITH INFORMATION SYNTAX OIM-Module.SnmpTrapInfo;
REGISTERED AS {events 3};

snmpAuthentFailureEvent NOTIFICATION
                -- clause 4.1.6.5 of RFC1157
                -- emitted by snmp
        MODE    NON-CONFIRMED;
        WITH INFORMATION SYNTAX OIM-Module.SnmpTrapInfo;
REGISTERED AS {events 4};
entSpecificEvent NOTIFICATION
                -- clause 4.1.6.7 of RFC1157
                -- emitted by system
        MODE    NON-CONFIRMED;
        WITH INFORMATION SYNTAX OIM-Module.SnmpTrapInfo;
REGISTERED AS {events 6};

warmStartEvent NOTIFICATION
                -- clause 4.1.6.2 of RFC1157
                -- emitted by system
        MODE    NON-CONFIRMED;
        WITH INFORMATION SYNTAX OIM-Module.SnmpTrapInfo;
REGISTERED AS {events 1};

7. The Containment Hierarchy 🌳

Here's the family tree 🧚 These Name Binding templates spell out who's whose parent in the OIM MIB-II, also listed alphabetically. Everything in a managed system traces back to the "system" managed object, so that's the root of the whole vibe πŸ‘‘

atEntry-nf  NAME BINDING
           SUBORDINATE OBJECT CLASS     atEntry;
           NAMED BY SUPERIOR OBJECT CLASS   atTable;
           WITH ATTRIBUTE        atEntryId;
          CREATE;
          DELETE        only-if-no-contained-objects;
           REGISTERED AS { nameForms 5};

atTable-nf  NAME BINDING
           SUBORDINATE OBJECT CLASS     atTable;
           NAMED BY SUPERIOR OBJECT CLASS   system;
           WITH ATTRIBUTE        atTableId;
           REGISTERED AS { nameForms 4};

egp-nf  NAME BINDING
           SUBORDINATE OBJECT CLASS     egp;
           NAMED BY SUPERIOR OBJECT CLASS      system;
           WITH ATTRIBUTE        egpId;
           REGISTERED AS { nameForms 20};

egpNeighEntry-nf  NAME BINDING
           SUBORDINATE OBJECT CLASS     egpNeighEntry;
           NAMED BY SUPERIOR OBJECT CLASS      egpNeighTable;
           WITH ATTRIBUTE        egpNeighEntryId;
          CREATE;
          DELETE        only-if-no-contained-objects;

           REGISTERED AS { nameForms 22};

egpNeighTable-nf  NAME BINDING
           SUBORDINATE OBJECT CLASS     egpNeighTable;
           NAMED BY SUPERIOR OBJECT CLASS      egp;
           WITH ATTRIBUTE        egpNeighTableId;
           REGISTERED AS { nameForms 21};

icmp-nf  NAME BINDING
           SUBORDINATE OBJECT CLASS     icmp;
           NAMED BY SUPERIOR OBJECT CLASS      system;
           WITH ATTRIBUTE        icmpId;
           REGISTERED AS { nameForms 13};

interfaces-nf  NAME BINDING
           SUBORDINATE OBJECT CLASS     interfaces;
           NAMED BY SUPERIOR OBJECT CLASS   system;
           WITH ATTRIBUTE        ifId;
           REGISTERED AS { nameForms 24};


ifEntry-nf  NAME BINDING
           SUBORDINATE OBJECT CLASS     ifEntry;
           NAMED BY SUPERIOR OBJECT CLASS   ifTable;
           WITH ATTRIBUTE        ifEntryId;
          CREATE;
          DELETE        only-if-no-contained-objects;
           REGISTERED AS { nameForms 3};

ifTable-nf  NAME BINDING
           SUBORDINATE OBJECT CLASS     ifTable;
           NAMED BY SUPERIOR OBJECT CLASS  interfaces;
           WITH ATTRIBUTE   ifTableId;
           REGISTERED AS { nameForms 2};

ip-nf  NAME BINDING
           SUBORDINATE OBJECT CLASS     ip;
           NAMED BY SUPERIOR OBJECT CLASS   system;
           WITH ATTRIBUTE        ipId;
           REGISTERED AS        { nameForms 6};

ipAddrEntry-nf  NAME BINDING
           SUBORDINATE OBJECT CLASS     ipAddrEntry;
           NAMED BY SUPERIOR OBJECT CLASS  ipAddrTable;
           WITH ATTRIBUTE        ipAdEntryId;
          CREATE;
          DELETE        only-if-no-contained-objects;
           REGISTERED AS { nameForms 8};

ipAddrTable-nf  NAME BINDING
           SUBORDINATE OBJECT CLASS     ipAddrTable;
           NAMED BY SUPERIOR OBJECT CLASS   ip;
           WITH ATTRIBUTE        ipAddrTableId;
           REGISTERED AS { nameForms 7};

ipNetToMediaEntry-nf  NAME BINDING
           SUBORDINATE OBJECT CLASS     ipNetToMediaEntry;
           NAMED BY SUPERIOR OBJECT CLASS  ipNetToMediaTable;
           WITH ATTRIBUTE        ipNetToMediaEntryId;
          CREATE;
          DELETE        only-if-no-contained-objects;
           REGISTERED AS { nameForms 12};

ipNetToMediaTable-nf  NAME BINDING
           SUBORDINATE OBJECT CLASS     ipNetToMediaTable;
           NAMED BY SUPERIOR OBJECT CLASS  ip;
           WITH ATTRIBUTE        ipNetToMediaTableId;
           REGISTERED AS { nameForms 11};


ipRouteEntry-nf  NAME BINDING
           SUBORDINATE OBJECT CLASS     ipRouteEntry;
           NAMED BY SUPERIOR OBJECT CLASS  ipRoutingTable;
           WITH ATTRIBUTE        ipRouteEntryId;
          CREATE;
          DELETE        only-if-no-contained-objects;
           REGISTERED AS { nameForms 10};

ipRoutingTable-nf  NAME BINDING
           SUBORDINATE OBJECT CLASS     ipRoutingTable;
           NAMED BY SUPERIOR OBJECT CLASS   ip;
           WITH ATTRIBUTE        ipRoutingTableId;
           REGISTERED AS { nameForms 9};

snmp-nf  NAME BINDING
           SUBORDINATE OBJECT CLASS     snmp;
           NAMED BY SUPERIOR OBJECT CLASS      system;
           WITH ATTRIBUTE        snmpId;
           REGISTERED AS { nameForms 23};

system-nf  NAME BINDING
           SUBORDINATE OBJECT CLASS     system;
           NAMED BY SUPERIOR OBJECT CLASS  root;
           WITH ATTRIBUTE   sysName;
           REGISTERED AS { nameForms 1 };

tcp-nf  NAME BINDING
           SUBORDINATE OBJECT CLASS     tcp;
           NAMED BY SUPERIOR OBJECT CLASS      system;
           WITH ATTRIBUTE        tcpid;
           REGISTERED AS { nameForms 14};

tcpConnEntry-nf  NAME BINDING
           SUBORDINATE OBJECT CLASS     tcpConnEntry;
           NAMED BY SUPERIOR OBJECT CLASS      tcpConnTable;
           WITH ATTRIBUTE       tcpConnId;
           REGISTERED AS { nameForms 16};

tcpConnTable-nf  NAME BINDING
           SUBORDINATE OBJECT CLASS     tcpConnTable;
           NAMED BY SUPERIOR OBJECT CLASS      tcp;
           WITH ATTRIBUTE        tcpConnTableId;
           REGISTERED AS { nameForms 15};

udp-nf  NAME BINDING
           SUBORDINATE OBJECT CLASS     udp;
           NAMED BY SUPERIOR OBJECT CLASS      system;
           WITH ATTRIBUTE        udpId;
           REGISTERED AS { nameForms 17};

udpEntry-nf  NAME BINDING
           SUBORDINATE OBJECT CLASS     udpEntry;
           NAMED BY SUPERIOR OBJECT CLASS      udpTable;
           WITH ATTRIBUTE        udpEntryId;
           REGISTERED AS { nameForms 19};

udpTable-nf  NAME BINDING
           SUBORDINATE OBJECT CLASS     udpTable;
           NAMED BY SUPERIOR OBJECT CLASS      udp;
           WITH ATTRIBUTE        udpTableId;
           REGISTERED AS { nameForms 18};

8. ASN.1 Definitions 🧾

Last stop on this part, the ASN.1 syntax πŸ€“ Every attribute template in section 6 leans on one of three places for its definitions: RFC1065-SMI, the Attribute-ASN1Module of ISO/IEC DIS 10165-2, or the OIM-Module that's defined right here in this section. The OIM-Module also pulls in some syntax taken from RFC1158, because those definitions weren't put inside an ASN.1 module in that document, which meant nothing could reference them externally πŸ™ˆ

OIM-Module      {iso org(3) dod(6) internet(1) mgmt(2) mib(1)
                        oim(9) misc(4) 1}
DEFINITIONS ::=
BEGIN
-- EXPORTS      Everything

okay so the ASN.1 module keeps going, and it's still giving structure πŸ’…

IMPORTS ObjectClass, ObjectInstance
                FROM CMIP-1{joint-iso-ccitt ms(9) cmip(1)
                                 modules(0) protocol(3)}
                ObjectName, ObjectSyntax
                FROM RFC1065-SMI;

mib                     OBJECT IDENTIFIER ::= {iso org(3) dod(6)
                                        internet(1) mgmt(2) 1}
at                      OBJECT IDENTIFIER ::= {mib 3}
oim                     OBJECT IDENTIFIER ::= {mib 9}
cmotVersion     OBJECT IDENTIFIER ::= {oim 1}
cmotACSEInfo    OBJECT IDENTIFIER ::= {oim 2}
cmotSystemId    OBJECT IDENTIFIER ::= {oim 3}
misc                    OBJECT IDENTIFIER ::= {oim 4}
objects         OBJECT IDENTIFIER ::= {oim 5}
attributes              OBJECT IDENTIFIER ::= {oim 6}
events          OBJECT IDENTIFIER ::= {oim 7}
nameforms       OBJECT IDENTIFIER ::= {oim 8}
actions         OBJECT IDENTIFIER ::= {oim 9}

--  Generic and MIB specific syntax

EgpNeighEventTrigger    ::= INTEGER {
                                                start(1),
                                                stop(2)
                                                }

EgpNeighMode    ::= INTEGER {
                                        active(1),
                                        passive(2)
                                        }

EgpNeighState   ::= INTEGER {

                                        idle(1),
                                        acquisition(2),
                                        down(3),
                                        up(4),
                                        cease(5)
                                        }

Integer         ::= INTEGER

Integer128      ::= INTEGER (0..127)

Integer64k      ::= INTEGER (0..65535)

IfAdminStatus   ::= INTEGER {
                                        up(1),  -- ready to pass packets
                                        down(2),
                                        testing(3)  -- in some test mode
                                        }

IfOperStatus    ::= INTEGER {
                                        up(1),  -- ready to pass packets
                                        down(2),
                                        testing(3)  -- in some test mode
                                        }

IfType INTEGER {
                                   other(1),  -- none of the following
                                   regular1822(2),
                                   hdh1822(3),
                                   ddn-x25(4),
                                   rfc877-x25(5),
                                   ethernet-csmacd(6),
                                   iso88023-csmacd(7),
                                   iso88024-tokenBus(8),
                                   iso88025-tokenRing(9),
                                   iso88026-man(10),
                                   starLan(11),
                                   proteon-10Mbit(12),
                                   proteon-80Mbit(13),
                                   hyperchannel(14),
                                   fddi(15),
                                   lapb(16),
                                   sdlc(17),
                                   ds1(18),
                                   e1(19),  -- european equivalent
                                            -- of T-1
                                   basicISDN(20),
                                   primaryISDN(21),

                                            -- proprietary serial
                                   propPointToPointSerial(22),
                                   ppp(23),
                                   softwareLoopback(24),
                                   eon(25),  -- CLNP over IP
                                   ethernet-3Mbit(26),
                                   nsip(27),  -- XNS over IP
                                   slip(28),  -- generic SLIP
                                ultra(29),  -- ULTRA technologies
                                ds3(30),  -- T-3
                                sip(31),  -- SMDS
                                frame-relay(32)
                           }

IpForwarding    ::= INTEGER {
                                forwarding(1),  -- acting as a gateway
                                not-forwarding(2)  -- NOT acting as
                                                   -- a gateway
                                        }

IpNetToMediaType ::= INTEGER {
                                        other(1),  -- none of the
                                                   -- following
                                        invalid(2),  -- an invalidated
                                                     -- mapping
                                        dynamic(3),
                                        static(4)  }

IpRouteProto    ::= INTEGER {
                                        other(1),  -- none of the
                                                   -- following
                                        local(2),  -- configured entries
                                        netmgmt(3),  -- mgmt protocol
                                        icmp(4),  -- obtained via ICMP,
                                                  -- e.g., redirect
                                        egp(5),
                                        ggp(6),
                                        hello(7),
                                        rip(8),
                                        is-is(9),
                                        es-is(10),
                                        ciscoIgrp(11),
                                        bbnSpfIgp(12),
                                        ospf(13),
                                        bgp(14)
                                        }

IpRouteType     ::= INTEGER {
                                        other(1),  -- none of the
                                                   -- following
                                        invalid(2),  -- an invalidated
                                                     -- route
                                        direct(3),  -- route to directly
                                                    -- connected
                                                    -- subnetwork
                                        indirect(4)  -- route to a
                                                     -- non-local
                                                     -- host/network/
                                                     -- subnet
                                        }

ObjectId        ::= OBJECT IDENTIFIER

OctetString     ::= OCTET STRING

PhysAddress     ::= OCTET STRING

PrintString     ::= DisplayString (SIZE (0..255))

DisplayString   ::= OCTET STRING
--
-- DisplayString is restricted to the NVT ASCII character set as
-- defined in pages 10-11 of RFC 854 "TELNET Protocol
-- Specification", May 1983 [15].
--
--  SNMP trap syntax

SnmpEnableAuthenTraps   ::= INTEGER {
                                                enabled(1),
                                                disabled(2)
                                                }

SnmpTrapInfo ::= SEQUENCE {
        enterprise                      -- type of device generating
                                        -- event
                                        -- see sysObjectId
                                        OBJECT IDENTIFIER,
        agent-addr              -- address of device generating
                                        -- the event
                                        NetworkAddress,
        generic-trap INTEGER {coldStart (0),
                                        warmStart (1),
                                        linkDown (2),
                                        linkUp (3),
                                        authenticationFailure (4),
                                        egpNeighborLoss (5),
                                        enterpriseSpecific (6) },
        specific-trap INTEGER   OPTIONAL, -- enterprise specific
        variable-bindings   VarBindList OPTIONAL}

VarBindList ::= SEQUENCE OF VarBind

VarBind ::=     SEQUENCE {
                                name    ObjectName,
                                ovalue  ObjectSyntax}

TcpConnState    ::= INTEGER {
                                        closed(1),
                                        listen(2),
                                        synSent(3),
                                        synReceived(4),
                                        established(5),
                                        finWait1(6),
                                        finWait2(7),
                                        closeWait(8),
                                        lastAck(9),
                                        closing(10),
                                        timeWait(11),
                                        deleteTCP(12) }

TcpRtoAlgorithm  ::= INTEGER {
                                        other(1),  -- none of the
                                                   -- following
                                        constant(2),  -- a constant rto
                                        rsre(3),  -- MIL-STD-1778,
                                                  -- Appendix B
                                        vanj(4)  -- Van Jacobsons alg.
                                          }

END

9. Acknowledgements ✨

The editor is so grateful to everyone in the OIM working group 🫢 They helped out with comments and assistance, and these three people deserve a huge shoutout:

  • Marvin Solomon, University of Wisconsin
  • Nancy Hall, University of Wisconsin
  • Subhendu Ghatak, University of Tennessee at Knoxville

Thank you all, you're literally the reason this came together πŸ’œ

References πŸ“š

  1. ISO 8824: Information Processing - Open System Interconnection - Specification of Abstract Syntax Notation One (ASN.1), February 1989. 🧠
  2. ISO/IEC 7498-4, Information Processing Systems- Open Systems Interconnection - Basic Reference Model Part 4 - OSI Management Framework. πŸ—‚οΈ
  3. Warrier, U., Besaw, L., and LaBarre, L., and B. Handspicker, "The Common Management Information Services and Protocol for the Internet (CMOT and CMIP)", RFC 1189, Netlabs, Hewlett-Packard, The Mitre Corporation, Digital Equipment Corporation, October 1990. πŸŽ€
  4. ISO/IEC DIS 10165-1, Information Processing Systems - Open Systems Interconnection-Structure of Management Information - Part 1: Management Information Model, July 1990. 🌸
  5. ISO/IEC DIS 10165-2 (ISO/IEC JTC1/SC21 N4072), Information Processing Systems -Open Systems Interconnection - Structure of Management Information - Part 2: Definition of Management Information, July 1990. πŸ¦‹
  6. ISO/IEC DIS 10165-4 (ISO/IEC JTC1/SC21 N4065), Information Processing Systems - Open Systems Interconnection - Structure of Management Information - Part 4: Guidelines for the Definition of Managed Objects, June 1990. πŸ’œ
  7. ISO 9595, Information Processing Systems - Open Systems Interconnection - Management Information Service Definition - Common Management Information Service, November 1990. ✨
  8. ISO 9596, Information Processing Systems - Open Systems Interconnection - Management Information Protocol Specification - Common Management Information Protocol, November 1990. 🫢
  9. ISO 8649, Information Processing Systems - Open Systems Interconnection, Service Definition for the Association Control Service Element. πŸ“
  10. ISO 9072-1, Information Processing Systems - Text Communication, Remote Operations: Model, Notation and Service Definition, Gloucester, Nov 1987. 🧚
  11. Rose, M., and K. McCloghrie, "Structure and Identification of Management Information for TCP/IP-based internets", RFC 1155, Performance Systems International, Hughes LAN Systems, May 1990. 🌈
  12. Rose, M., Editor, "Management Information Base for Network Management of TCP/IP-based internets: MIB-II", RFC 1158, Performance Systems International, May 1990. πŸ‘‘
  13. Cerf, V., "Report of the Second Ad Hoc Network Management Review Group", RFC 1109, NRI, August 1989. πŸ”₯
  14. Case, J., Fedor, M., Schoffstall, M., and J. Davin, "Simple Network Management Protocol (SNMP)", RFC 1157, SNMP Research, Performance Systems International, Performance Systems International, MIT Laboratory for Computer Science, May 1990. πŸ™ˆ
  15. Postel, J., and J. Reynolds, "Telnet Protocol Specification", RFC 854, USC/Information Sciences Institute, May 1983. πŸ’–
  16. McCloghrie, K., and M. Rose, "Management Information Base for Network Management of TCP/IP-based internets: MIB-II", RFC 1213, Hughes LAN Systems, Performance Systems International, March 1991. 🌟
  17. Working Implementation Agreements for Open Systems Interconnection Protocols, December 1990. πŸ’…

Appendix 1: Notational Tools for Managed Object Definition πŸŽ€

okay so this appendix is basically the cheat sheet for the templates used to define managed objects πŸ“– It's excerpted and paraphrased from reference 6, and only the templates used in this document are included here. If you want the full picture of the notational tools for OSI management, go read reference 6 bestie 🫢

A1.1 Overview of Notational Tools

the "Templates" in this clause give everyone a shared toolkit and a shared format for describing the different parts of a managed object class definition and its naming structure ✨ The formal definitions of each template live in clauses A1.3 -A1.11 inclusive, and the syntax conventions used in those definitions are explained in clause A1.2 πŸ“š You can find examples of these tools in Annex A (of 10165-4) too πŸ’œ

the structure and behaviour of a managed object class is mainly defined by the Managed Object Class Template πŸ‘‘ This one spells out the inheritance relationships between the class and other managed object classes, the packages of class-specific behaviour, the attributes linked to the class, the notifications the class may issue, and the operations that may be performed on the class. To allow parts of this specification to be reused in other managed object class definitions, there are extra templates for attributes (individual and group), behaviour, actions, notifications and conditional packages πŸ¦‹ The Managed Object Class template "calls up" these other templates through the referencing mechanism defined in clause A1.2. That mechanism lets one standard point at specifications contained in other standards, which means "generic" specifications can be used in managed object class definitions alongside local ones 🌈 Templates can also be included "in-line" if you'd rather do it that way 🧚

the naming of a managed object class is defined with the Name Binding template πŸŽ€ This template names the managed object class being named and defines the relative distinguished name used to name instances of the class in the context of a particular superior class. It also lets you specify relationships between two object classes that come from a particular name binding πŸ’–

A1.2 Conventions Used in Template Definitions

okay this is the grammar of the templates, so pay attention πŸ’… The template definitions in this clause follow these syntactic conventions:

  • Strings surrounded by [ ] delimit parts of the template that may either be present or absent in each instance of use of the template. If the closing brace is followed by an asterisk, e.g., [ ]*, the contents of the braces may appear zero or more times. The circumstances under which these parts of the definition may be omitted or repeated are dependent upon the template type;
  • Strings surrounded by < > delimit strings that must be replaced in each instance of use of the template. The structure and meaning of the replacement string is dependent upon the string type;
  • Upper case strings denote Keywords which are required to be present in each instance of use of the template, unless they are enclosed in [ ];
  • The solidus, |, is used to separate alternative strings in the template;
  • Spaces and carriage returns are significant only as string delimiters;
  • In order to simplify the structure of the templates, particularly where the same syntactic structure is repeated in the template definitions, supporting syntactic definitions may be defined. If any such supporting syntactic definitions are required in order to complete the template definition, these appear following the keywords "supporting productions" at the end of the template definition. These supporting definitions take the general form:
definition-label-> syntactic-definition

where definition-label allows the definition to be referenced by the template definition and syntactic-definition gives the expansion of the definition, using the above notational rules;

  • Further definitions, such as the nature of the element definitions, follow the syntactic definition of the template;
  • The templates themselves have the general structure:
            <template-label>TEMPLATE NAME

    [ELEMENT NAME [<element-definition>] ;]*

    [REGISTERED AS <object-identifier> ;]
    [supporting productions

    [<definition-label> -> <syntactic-definition >]*]

Each instance of use of a template therefore declares a template-label by which that instance may be referenced from other templates. If the REGISTERED AS clause is present, it assigns a value of an ASN.1 OBJECT IDENTIFIER under which the instance has been registered;

  • Semicolons are used to mark the end of each distinct element in the template. In an instance of use of the template, any text inserted between a semicolon and the next valid keyword is assumed to be a comment;
  • The notation used for representing object identifiers is the normal notation defined in ASN.1 for object identifier values; i.e., the production:
object-identifier-> <ASN.l ObjectIdentifierValue notation>

is assumed to be a supporting production for all template definitions in this document;

  • Further definitions, such as the nature of the element definitions, follow the syntactic definition of the template;
  • Template labels shall be unique within the standard or document in which they are declared. Where a template-label is declared in document A and referenced in document B, the reference in document B shall be prefixed by the globally unique name of document A. In the case of documents named by an internationally recognized naming authority such as [CCITT|ISO/IEC], the registered name of the document shall be used as the identifier, such as [Recommendation X.722|ISO/IEC 10165-4]. Where a globally unique name is not already available, it is permissible to assign the value of an OBJECT IDENTIFIER to the referenced document, and use this value as a globally unique document name. The syntax of a template-label, defined using the above notation, is defined as follows:
[<document-identifier> :] < label-string>

document-identifier-> "<standard-name>" | <object-identifier>

A label-string may include any number of the following characters:

  • upper or lower case alphabetic characters;
  • the digits 0-9;
  • the hyphen character (-);

in any order, commencing with a lower case character. For example, the following template-label:

"ISO/IEC 10165/4":exampleObjectClass

constitutes a globally unique label for the definition of exampleObjectClass contained in Annex A of 10165-4.

Label references that are not prefixed by a document-identifier are assumed to refer to labels declared in the document in which the reference appears.

  • Whenever a template-label is present in a template as a pointer to another template, it may be replaced by the entire text of the referenced template itself (including the template's label).

A1.3 Managed Object Class Template 🌸

A1.3.1 Overview πŸŽ€

okay so the Managed Object Class template is the base of the whole formal definition of a managed object πŸ’… It's where the class gets placed on the right node of the inheritance tree, where its attributes get specified, and where its behaviour gets defined ✨ The main pieces are:

  • Inheritance. Each managed object class defines the superclass(es) it was derived from. The subclass inherits all the characteristics of its superclass(es), and it can add to them (refinement) but it may not remove any of them. In the end, every class is a subclass of TOP πŸ‘‘
  • Allomorphs. If the class supports allomorphism, the set of classes that count as legit allomorphic views of it must be defined. All of those classes must be superclasses of the class being defined πŸ¦‹
  • Mandatory Packages. The class definition includes the packages of behaviour, attributes, operations and notifications that give a complete spec of the behaviour every instance of the class shares 🫢
  • Conditional Packages. The class definition also includes packages of behaviour, attributes, operations and notifications that are present or absent in instances of the class depending on a specified condition 🌸

Note: Attributes, Operations and Notifications that form part of a class definition may only be omitted from an instance of that class if they are defined as features of a Conditional Package and are omitted in accordance with the condition defined for that package.

⚠️ bestie, this is the big one: you can only leave stuff out of an instance if it's part of a Conditional Package AND the condition for that package says it's allowed πŸ™ˆ
  • Class Naming. The class definition must include a class name that can be used to refer to the class in CMIP. You get that by registering an Object Identifier value for the class 🧚

A1.3.2 Template Structure 🧩

here's the template layout, copied exactly:

<class-label> MANAGED OBJECT CLASS

        [DERIVED FROM   <class-label>
                [, <class-label>]*;
        ]
        [ALLOMORPHIC SET        <class-label>
        [, < class-label > ] *;
        ]
 [CHARACTERIZED BY <package-label>[,<package-label>]*;
 ]
 [CONDITIONAL PACKAGES <package-label> PRESENT IF
                                        <condition-definition>
                                        [,<package-label> PRESENT IF
                                         <condition-definition>]*;
 ]
 [PARAMETERS <parameter-label> [,<parameter-label>]*;
 ]

REGISTERED AS < object-identifier>;

A1.3.3 Supporting Definitions πŸ“š

the DERIVED FROM clause:

DERIVED FROM <class-label>[,<class-label>]*

ok this one is so important 😭 The DERIVED FROM clause shall be present in all managed object class definitions other than "top". That means "top" is a superclass of every class except itself πŸ‘‘

The class-label points at a managed object class the class was derived from. In other words, it's one of the object class's parents in the inheritance hierarchy. Multiple inheritance is allowed, so a managed object class can have one or more parent classes πŸ’œ

Inheritance (specialization) means every characteristic of the superclass(es), apart from DERIVED FROM and ALLOMORPHIC SET, has to show up in the subclass definition. If the subclass is meant to be allomorphic, its definition shall include an ALLOMORPHIC SET clause that explicitly lists the classes it's allomorphic to πŸ¦‹

If multiple inheritance brings in the same element definition more than once (this could happen if two parent superclasses both contain the same attribute, for example), the subclass is assumed to contain just one copy of that definition 🌈

Characteristics inherited from a superclass shall not be repeated in the documentation of the subclass, unless one of the techniques described in ISO/IEC 10165-4 for extending or modifying an element of the superclass is being used. So the DERIVED FROM clause is presumed to automatically import all inheritable elements of definition from the superclass definition(s). Elements defined within the CHARACTERISED BY, CONDITIONAL PACKAGES, and PARAMETER constructs may augment or modify them 🧁

The ALLOMORPHIC SET clause:

ALLOMORPHIC SET <class-label>[,<class-label>]*

the Allomorphic Set lets you name a set of superclasses that are "backwards compatible" with the managed object class. So if managed object class A lists classes B and C in its allomorphic set, you can operate on an instance of class A as if it were an instance of class B or C 🫧 That makes it possible to define enhanced versions of a class that still play nicely with older versions. The class label shall identify the class-label of a managed object class definition that is a superclass of the managed object class being defined ✨

The CHARACTERIZED BY clause:

CHARACTERIZED BY <package-label>[,<package-label]*

this one, if it's there, lets you bring one or more mandatory packages of behaviour, attributes, operations, and notifications into the class definition. This is on top of whatever comes in through the DERIVED FROM construct πŸ“

The CONDITIONAL PACKAGES clause:

CONDITIONAL PACKAGES <package-label>  PRESENT IF <condition-
definition>[, <package-label>  PRESENT IF <condition-definition>]*

this shows up when one or more conditional packages should be included in the class definition. The package-label names the package definition that applies. The condition-definition describes a condition which, if true, means the package must be included in an instance of the class. The condition shall refer to a documented feature of the definition of the underlying resource, or of a related standard, that is allowed to be present or absent in an implementation πŸ’…

The PARAMETERS clause:

PARAMETERS <parameter-label>[,<parameter-label>]*

if this is present, it lets you define parameters for the object class definition, in addition to any inherited parameters πŸŽ€

The REGISTERED AS clause:

REGISTERED AS <object-identifier>

the object identifier value gives the object class definition a globally unique identifier. The management protocol uses this value whenever it needs to identify the object class πŸ”₯

A1.4 Package Template 🌸

this template lets you define a package of behaviour definitions, attributes, operations and notifications, so it can be slotted into a managed object class template later through the Characterized By and Conditional Packages constructs πŸ’– The major elements are:

  • Behaviour. The managed object class definition gives a complete specification of the object's behaviour. That includes:
    • The effect of the Operations upon the managed object;
    • Any constraints that are placed on operations in order to satisfy consistency rules, and in particular, the rules under which Creation and Deletion of managed objects may be performed and the consequences of these operations;
    • A specification of how instances of a managed object class interact with each other, related, managed objects of the same or different classes.
    • A complete definition of any other aspects of the behaviour of the managed object class.
    • Contained attributes. The set of attributes that the package contains must be defined;
    • Operations and Notifications. The package definition specifies which notifications instances of the class that make use of this package shall be able to generate, which operations instance of the class shall be capable of performing, and in the case of attribute related operations, which attributes shall be available to be operated upon.

Note: The operations identified in the package definition are the operation types defined in the Information Model (Get, Replace, Set to Default,...etc). In the case of Actions and Notifications, further definitions are required in order to characterise their functionality, as described in clauses A1.10, A1.11. The create and delete operations are defined as part of the Name Binding template described in clause A1.6, a creation and deletion of an object is closely bound to the containment relationship between superior and subordinate objects, rather than to all instances of a managed object class.

A1.4.1 Template Structure 🧩

< package-label> PACKAGE

[BEHAVIOUR DEFINITIONS  < behaviour-definition-label>
        [, < behaviour-definition-label > ] *;
]
[ATTRIBUTES<attribute-label> <propertylist>[<parameter-label>]
        [,< attribute-label> < propertylist> [< parameter-label> ]*]*;
]
[ATTRIBUTE GROUPS       <group-label> [<attribute-label>]*
                          [, < group-label > [ < attribute-label > ]*]*;
]
[ACTIONS        <action-label>[<parameter-label>]*
                          [, < action-label > [ < parameter-label > ]*]*;
]
[NOTIFICATIONS             <notification-label> [<parameter-label>]*
                    [, < notification-label > [< parameter-label >]*]*;
]
[REGISTERED AS < object-identifier>];

supporting productions, the propertylist bit, which is where the fun stuff lives πŸ¦„:

supporting productions

propertylist -> [REPLACE WITH DEFAULT]
        [DEFAULT VALUE < value-definition > ]
        [PERMITTED VALUES <value-set-syntax-label>]
        [REQUIRED VALUES        <value-set-syntax-label>]
        [GET | REPLACE | GET-REPLACE]
        [ADD | REMOVE | ADD-REMOVE]

A1.4.2 Supporting Definitions πŸ’…

Okay bestie, this is where the package template gets its supporting cast. First up is the BEHAVIOUR DEFINITIONS line πŸŽ€

BEHAVIOUR DEFINITIONS < definition-label> [,<definition-label>]*

Behaviour Definitions let you completely describe the behaviour (semantics) of the managed object class ✨. They connect the external view of the object (its operations and notifications) to what's happening on the inside 🧚. Each definition-label is one instance of use of the Behaviour template.

Note: Don't assume the behaviour described in this clause can be tested with the conformance test tech that exists today πŸ™ˆ

Next, ATTRIBUTES 🌸

ATTRIBUTES.  <attribute-label><propertylist> [<parameter-label>]*
        [,<attribute-label><propertylist> [<parameter-label>]*]*

This is how attributes get slotted into the package definition πŸ’–. The propertylist after each attribute label spells out which operations you're allowed to run on the managed object for that attribute, plus any default, permitted or required values attached to it. The Replace With Default property shows up if the attribute has a default value that can be set using the Replace With Default Value operation πŸ“. The value-definition for that default has to be a value reference name, written with the Externaltypereference notation from ISO 8824 πŸ¦‹.

If the PERMITTED VALUES property is there, the value-set-syntax-label puts restrictions on what values the attribute can take πŸ‘‘. That value-set-syntax-label has to be a type reference name, using the ExternaltypeReference notation from ISO 8824. The thing it points to has to be a subtype of the attribute syntax type, written with ASN.1 subtype notation.

Note: The Permitted Values construct is only needed where you have to restrict the value set that the Attribute Syntax already allows, like when you're modifying an existing attribute specification πŸ’…

If the REQUIRED VALUES property is there, the value-set-syntax-label again limits what values the attribute can take πŸ”₯. Same rules apply: a type reference name using the ExternaltypeReference notation from ISO 8824, pointing to a subtype of the attribute syntax type, written in ASN.1 subtype notation.

Note: This property defines the value set you need for conformance βœ…

The parameter-labels let you attach parameters to the operations that are allowed on the attribute πŸ’œ.

Now ATTRIBUTE GROUPS 🧁

ATTRIBUTE GROUPS <group-label> [<attribute-label>]*[,<group-label>
                [<attribute-label>]*]*

This lets you identify a set of attribute groups as part of the package 🌈. You can extend the original definition of an attribute group by adding more attribute-labels to it, which is very cute for building on what's already there.

Then ACTIONS ⭐

ACTIONS <action-label>[<parameter-label>]*
        [,<action-label>[<parameter-label>]*]*

If this shows up, the action-labels pick out the action definitions included in the package πŸŽ€. The behaviour definitions have to say what these Actions actually do to managed objects. The parameter-labels let you attach parameters to the Action too.

And NOTIFICATIONS πŸ””

NOTIFICATIONS <notification-label>[<parameter-label>]*
                [,<notification-label>[<parameter-label>]*]*

This one is present if any Notifications are part of the package πŸ¦‹. The notification labels point to the applicable Notification definitions. The behaviour definitions must say when a managed object generates those Notifications. Parameter-labels can be attached to the Notification as well.

Last one in this section: REGISTERED AS πŸ†

REGISTERED AS <object-identifier>

If the object identifier value is there, it gives the package definition a globally unique identifier and registers the groupings of behaviour definitions, attributes, attribute groups, actions and notifications that the package defines πŸ’–. It's required when a conditional packages construct in an object class template points at the package AND the package has a behaviour construct or more than one element. In that case, the object identifier value gets included in the conditional packages attribute of any instances of the object class that get created with the package present 🫢.


A1.5 Parameter Template 🧚

This template lets you specify and register parameter syntaxes, and the behaviour that goes with them, for particular operations and notifications inside the managed object class and conditional package templates from clauses A1.3 and A1.4 πŸ’…. The OIM MIB-II doesn't use this mechanism, so you can skip it if that's your vibe πŸ™ˆ.


A1.6 Name Binding Template 🌸

A1.6.1 Overview ✨

This template lets you define alternative naming structures for managed objects of a given managed object class, using name bindings πŸ¦‹. A name binding selects an attribute to act as the naming attribute for a given subordinate class/superior class pair πŸ‘‘.

The attribute you pick has to be an attribute of the subordinate object, and it has to be present in every instance of the specified managed object class πŸ’œ. That attribute gets used to build the relative distinguished name (RDN) of subordinate objects of that class. An RDN is built from the OBJECT IDENTIFIER assigned to the attribute type plus the value of the attribute instance πŸ“. The Distinguished Name of the subordinate object comes from appending its RDN to the Distinguished Name of its superior object 🌈.

Name bindings aren't considered part of the definition of either managed object class they reference πŸ’…. A managed object class can have more than one name binding attached to it πŸŽ€. The whole set of name bindings defines every possible naming relationship with superior managed objects, plus the set of managed object classes that subordinate object classes can be instantiated from ⭐.

Note: Name Bindings can be specified for a managed object class after the managed object class itself has been specified 🧁

A1.6.2 Template Structure πŸŽ€

   <name-binding-label> NAME BINDING

   SUBORDINATE OBJECT CLASS <class-label>;
   NAMED BY
   SUPERIOR OBJECT CLASS    <class-label>;
   WITH ATTRIBUTE       <attribute-label>;
   [BEHAVIOUR     <behaviour-definition-label>
                                   [,<behaviour-definition-label>]*;
   ]

    [CREATE [<create-modifier>[,<create-modifier>]]
                                                   [<parameter-label>]*;
    ]
    [DELETE                <delete-modifier>[<parameter-label>]*;
    ]

   REGISTERED AS < object-identifier>;

   supporting productions

   create-modifier->       with-reference-object |
                           with-automatic-instance-naming

   delete-modifier ->      only-if-no-contained-objects |
                                   deletes-contained-objects

A1.6.3 Supporting Definitions 🧚

SUBORDINATE OBJECT CLASS <class-label>

This defines the managed object class being named πŸ¦‹. The name of an instance of the subordinate managed object class gets built by concatenating the distinguished name of the superior managed object class with the relative distinguished name of the subordinate managed object class.

NAMED BY SUPERIOR OBJECT CLASS <class-label>

This defines a managed object class that can contain instances of the subordinate managed object class πŸ†.

WITH ATTRIBUTE <attribute label>

This defines the attribute that shall be used, in the context of this name binding, to build the relative distinguished name for the subordinate managed object class πŸ’–. Values of this attribute shall be represented by single-valued data types, following the restrictions in ISO 10165-1. If there's no naturally suitable attribute to use as a naming attribute, object designers are encouraged to provide a naming attribute of type Graphic String 🌸.

BEHAVIOUR <behaviour-definition-label>

If present, this clause lets you define any behavioural impact that comes from the name binding πŸ”₯. The behaviour-definition-label identifies the constraint definition concerned, so the constraint gets expressed using the behaviour template πŸ’….

CREATE [<create-modifier>[,<create-modifier>]][<parameter-label>]*

This one's present if it's permitted to create new instances of the managed object class referenced by the SUBORDINATE OBJECT CLASS construct, in the context of this name binding, through systems management operations πŸš€. The create-modifier values set the options available on creation. The permitted create-modifiers are:

  • with reference-object. If present, a reference object can be specified on creation as a source of default values and to specify the choice of Conditional Packages πŸŽ€.
  • with automatic instance naming. If present, the CREATE request can leave out the instance name of the new object instance 🧁. The behaviour definitions shall specify what course of action is taken when there's a choice of Name Forms that may be applied to the new object instance ✨.

If neither create-modifier is specified, the instance name and all necessary default values shall be specified in the CREATE request πŸ’œ.

The parameter-labels let you attach parameters to the CREATE operation 🌈.

DELETE <delete-modifier> [<parameter-label>]*

This is present if it's permitted to delete instances of the managed object class referenced by the SUBORDINATE OBJECT CLASS construct in the context of this name binding πŸ“. The delete-modifier tells you what a managed object of that class does when it gets deleted. The permitted delete-modifiers are:

  • only-if-no-contained-objects. If specified, any contained managed objects must be explicitly deleted before the containing managed object is deleted. In other words, a DELETE request causes an error if there are contained managed objects πŸ™ˆ.
  • delete-contained-objects. If specified, a DELETE request applied to an instance of the managed object class also deletes the contained objects πŸ’₯.

If there are constraints on deletion relative to other relationships or conditions, those get specified as part of the behaviour of the managed object class 🫢.

The parameter-labels let you attach parameters to the DELETE operation πŸ¦‹.


A1.7 Attribute Template πŸ’–

A1.7.1 Overview ✨

okay so this template is where we make up individual attribute types πŸ’… and if we need groups of them, the Attribute Group template can bundle them together πŸŽ€ there are five main pieces you need to know about:

  • Derivation 🌱: an attribute type can modify or constrain another attribute type's definition, kind of like a remix 🎢
  • Attribute Syntax πŸ“¦: every attribute type has to define the syntax that carries its values in CMIP. You point to an ASN.l Type Definition for this. The syntax also tells you whether the attribute is single-valued or set-valued. If the base type is SET OF, it's set-valued. Otherwise it's single-valued 🫢
  • Value Matching πŸ”: this says how you're allowed to test an attribute's value, like checking for equality, magnitude, and so on, etc.. Some attributes need a matching rule spelled out as part of their behaviour definition πŸ™ˆ and if there are no matching rules at all, matching is undefined. no cap, that's a whole vibe πŸ’€
  • Behaviour 🧠: this is attribute-specific behaviour, meaning it applies to the attribute type no matter which managed object class holds instances of it πŸ‘‘
  • Attribute type name 🏷️: every attribute that goes into a managed object class definition gets an Object Identifier value. CMIP uses that value to identify the attribute πŸ¦‹

A1.7.2 Template Structure πŸŽ€

      <attribute-label> ATTRIBUTE

      derived-from-construct | with attribute-syntax-construct
      [MATCHES FOR    <qualifier>[,<qualifier>]* ;]
      [BEHAVIOUR      <behaviour-definition-label>
                      [,<behaviour-definition-label>]* ;

      ]
      [PARAMETERS     <parameter-label>
                      [,<parameter-label>]*
      ]

      [REGISTERED AS < object-identifier> ;]

      supporting productions

      qualifier -> Equality | Ordering | Substrings
                   | Set Comparison | Set Intersection

      derived-from-construct -> DERIVED FROM  <attribute-label > ;

      with-attribute-syntax-construct -> WITH ATTRIBUTE SYNTAX
                                      <syntax-label> ;

A1.7.3 Supporting Definitions 🌸

DERIVED FROM <attribute-label> 🧬

If this element shows up, the attribute definition starts from everything in the definition referenced by attribute-label. That includes anything that referenced definition derived from other attribute definitions too πŸ•°οΈ Here's how the other elements behave when this happens:

  • WITH ATTRIBUTE SYNTAX is not permitted to be present 🚫. The attribute syntax shall be the attribute syntax of the attribute from which this attribute has been derived.;
  • MATCHES FOR: the resultant set of matching rules shall be the logical OR of the matching rules specified by this construct with any derived matching rules πŸ”€
  • BEHAVIOUR is assumed to extend any derived behaviour definitions πŸ“ˆ
  • REGISTERED AS is assumed to replace any registration derived from other definitions πŸ”„

This derivation mechanism lets you do two things:

  • define a new attribute based on an existing attribute definition 🌱
  • add further constraints to an existing attribute definition πŸ”’

WITH ATTRIBUTE SYNTAX <syntax label> πŸ“¦

this one is only present when DERIVED FROM is absent πŸ™…β€β™€οΈ. It names the ASN.1 data type that describes how attribute values are carried in the protocol. The syntax-label shall be an ASN.l Externaltypereference.

The ASN.1 data type also defines the data type of the attribute itself. If the base type of the syntax is set-of, the attribute is set-valued. Every other ASN.l data type, including set, sequence of, and sequence type, gives you a single-valued attribute type 🎯

MATCHES FOR <qualifier>[,<qualifier>]* πŸ”

this element defines what kinds of test can be run on an attribute value as part of a Filter operation. Checking whether an attribute is present is implicitly allowed for every attribute πŸ₯°. For any other kind of matching, if this clause isn't there, matching is undefined and not permitted on that attribute. The options are:

  • Equality 🟰: if present, the value can be tested for equality against a given value
  • Ordering πŸ“: if present, the value can be tested against a given value to figure out which one is greater
  • Substrings 🧡: if present, the value can be tested against a given substring to see whether it's present or absent in the attribute value
  • Set Comparison 🫧: if present, the value can be tested against a given value to determine set equality or subset/superset relationships
  • Set Intersection 🀝: if present, the value can be tested against a given value to check for the presence or absence of a non-null set intersection between the two

BEHAVIOUR <behaviour-definition-label> [,<behaviour-definition-label>]* 🧠

any behaviour that's generic to this attribute type can go in this clause πŸ’«. The behaviour definition shall include any extra specification needed to show how the chosen matching rules get applied to the attribute definition. Behaviour that's specific to a managed object class goes in the behaviour clause of the managed object class template instead 🏠

Note: it should not be assumed that the behaviour defined by this clause is testable using existing conformance test technology πŸ™ˆ

REGISTERED AS <object-identifier> 🏷️

If this is present, the object-identifier gives a globally unique identifier for the attribute definition ✨. That covers every element referenced directly or indirectly through the Derived From, With Attribute Syntax, Matches For and Behaviour constructs, wherever they show up. The management protocol uses this value whenever it needs to identify the attribute type πŸ“‘. If this construct is left out, the attribute definition shall not be referenced in a managed object class definition unless another attribute definition adds further constraints 🚧

A1.8 Notification Template πŸ””

A1.8.1 Overview πŸ’Œ

this template defines the behaviour and syntax for a particular Notification type 🫢 the main features are:

  • Behaviour 🎭: the definition of a Notification type must specify the circumstances in which a notification of that type is generated
  • Mode of operation πŸ”€: the definition of a notification type shall indicate whether the notification may be confirmed, unconfirmed or both
  • Syntax Definitions πŸ“¦: the definition must specify any syntax used to carry the CMIS Event Information and Event Reply parameters in CMIP. These syntaxes are defined with ASN.1 data types. The template also lets you assign attribute values to fields in the syntax 🧩
  • Notification naming 🏷️: the value of the Object Identifier associated with the Notification definition is what identifies the Event type in CMIP

A1.8.2 Template Structure πŸŽ€

      <notification-label> NOTIFICATION

      BEHAVIOUR       <behaviour-definition-label>
                                      [,<behaviour-definition-label>]*;
      MODE    <confirmation-mode>;
      [PARAMETERS  <parameter-label>[,<parameter-label]*;
      ]
      [WITH INFORMATION SYNTAX <syntax-label>
                      [AND ATTRIBUTE IDS <field-name><attribute-label>
                                      [,<field-name><attribute-label]*];
      ]
      [WITH REPLY SYNTAX <syntax-label>;]

      REGISTERED AS <object-identifier>;

      supporting productions

      confirmation-mode -> CONFIRMED | NON-CONFIRMED | CONFIRMED AND
      NON-CONFIRMED

A1.8.3 Supporting Definitions πŸ¦‹

BEHAVIOUR <behaviour-definition-label> 🧠

this defines how the notification behaves, the data that has to come with the notification, the results it may produce, and what those results mean ✨. The behaviour-definition-label points to a behaviour description defined using the Behaviour Template πŸ“–

Note: it should not be assumed that the behaviour defined by this clause is testable using existing conformance test technology πŸ™ˆ

MODE CONFIRMED | NON-CONFIRMED | CONFIRMED AND NON-CONFIRMED πŸ”€

this sets the allowed mode of operation for the notification type, like so:

  • CONFIRMED: the notification type shall operate in the confirmed mode only 🀝
  • NON-CONFIRMED: the notification type shall operate in the non-confirmed mode only πŸ“¨
  • CONFIRMED AND NON-CONFIRMED: the notification type may operate in either the confirmed mode or the non-confirmed mode 🌈

PARAMETERS <parameter-label>[,<parameter-label>]* βš™οΈ

the parameter-labels let you attach parameters to the behaviour of the attribute type 🫧

WITH INFORMATION SYNTAX <syntax-label> [AND ATTRIBUTE IDS <field-name><attribute-label> [,<field-name><attribute-label>]*;] πŸ“¦

this construct names the ASN.1 data type that describes the structure of the notification information carried in the management protocol. It also lets you link attribute identifiers to named fields in the abstract syntax 🧡 The syntax-label shall be a type reference name, using the Externaltypereference notation defined in ISO 8824. If it's absent, there's no information attached to the notification invocation. If you use the AND ATTRIBUTE IDS option, the field-name label shall be a label defined within the abstract syntax referenced by the syntax in the construct. The data type labelled by the field-name carries the values of the attribute referenced by attribute-label. The ASN.1 data type of the attribute shall be the same as the data type referenced by field-name 🎯

WITH REPLY SYNTAX <syntax-label> πŸ’¬

if a syntax-label is present, it names the ASN.1 data type that describes the structure of the notification reply carried in the management protocol. The syntax-label shall be a type reference name, using the Externaltypereference notation defined in ISO 8824. If it's absent, there's no information attached to the notification reply 🫢

Appendix 2: New Objects: Internet SMI Object Type Macros ✨

okay bestie, this is the big list of brand-new attribute objects πŸŽ€ every one is a DisplayString that's read-only and mandatory, and the only real difference between them is the id number at the end. some are "An empty string." (very minimal, iconic πŸ’…) and some actually spell out how to build the id from the table's fields 🧚

   atEntryId OBJECT-TYPE
                 SYNTAX  DisplayString
                 ACCESS  read-only
                 STATUS  mandatory
                DESCRIPTION
       "<index>.1.<address>, where <index is the decimal representation
        of atIfIndex and <address> is atNetAddress represented in
        dot notation.  The 1 is a subidentifier indicating that an IP
        address follows. "
                 ::= { attributes 3}

   atTableId OBJECT-TYPE
                 SYNTAX  DisplayString
                 ACCESS  read-only
                 STATUS  mandatory
                DESCRIPTION
                   "An empty string."
                 ::= { attributes 2}


   egpId OBJECT-TYPE
                 SYNTAX  DisplayString
                 ACCESS  read-only
                 STATUS  mandatory
                DESCRIPTION
                   "An empty string."
                 ::= { attributes 16}

   egpNeighEntryId OBJECT-TYPE
                 SYNTAX  DisplayString
                 ACCESS  read-only
                 STATUS  mandatory
                DESCRIPTION
                        "egpNeighAddr encoded in dot notation."
                 ::= { attributes 22}

   egpNeighTableId OBJECT-TYPE
                 SYNTAX  DisplayString
                 ACCESS  read-only
                 STATUS  mandatory
                DESCRIPTION
                   "An empty string."
                 ::= { attributes 17}

   icmpId OBJECT-TYPE
                 SYNTAX  DisplayString
                 ACCESS  read-only
                 STATUS  mandatory
                DESCRIPTION
                   "An empty string."
                 ::= { attributes 9}

   ifId OBJECT-TYPE
                 SYNTAX  DisplayString
                 ACCESS  read-only
                 STATUS  mandatory
                DESCRIPTION
                   "An empty string."
                 ::= { attributes 23}

   ifEntryId OBJECT-TYPE
                 SYNTAX  DisplayString
                 ACCESS  read-only
                 STATUS  mandatory
                DESCRIPTION
                   "The decimal representation of ifIndex."
                 ::= { attributes  21}

   ifTableId OBJECT-TYPE
                 SYNTAX  DisplayString
                 ACCESS  read-only
                 STATUS  mandatory
                DESCRIPTION
                   "An empty string."
                 ::= { attributes 1}

   ipAdEntryId OBJECT-TYPE
                 SYNTAX  DisplayString
                 ACCESS  read-only
                 STATUS  mandatory
                DESCRIPTION
                   "ipAdEntAddr encoded in dot notation."
                 ::= { attributes 19}

   ipAddrTableId OBJECT-TYPE
                 SYNTAX  DisplayString
                 ACCESS  read-only
                 STATUS  mandatory
                DESCRIPTION
                   "An empty string."
                 ::= { attributes 5}

   ipId OBJECT-TYPE
                 SYNTAX  DisplayString
                 ACCESS  read-only
                 STATUS  mandatory
                DESCRIPTION
                   "An empty string."
                 ::= { attributes 4}

   ipNetToMediaEntryId OBJECT-TYPE
                 SYNTAX  DisplayString
                 ACCESS  read-only
                 STATUS  mandatory
                DESCRIPTION
        "<interface>.<address>, where <interface> is the decimal
        representation of ipNetToMediaIndex and <address> is
        ipNetToMediaNetAddress in dot notation."
                 ::= { attributes 8}

   ipNetToMediaTableId OBJECT-TYPE
                 SYNTAX  DisplayString
                 ACCESS  read-only
                 STATUS  mandatory
                DESCRIPTION
                   "An empty string."
                 ::= { attributes 7}

   ipRouteEntryId OBJECT-TYPE
                 SYNTAX  DisplayString
                 ACCESS  read-only
                 STATUS  mandatory
                DESCRIPTION
           "<dest> , where <dest> is ipRouteDest represented in dot
           notation."
                 ::= { attributes 20}

   ipRoutingTableId OBJECT-TYPE
                 SYNTAX  DisplayString
                 ACCESS  read-only
                 STATUS  mandatory
                DESCRIPTION
                   "An empty string."
                 ::= { attributes 6}

   snmpId OBJECT-TYPE
                 SYNTAX  DisplayString
                 ACCESS  read-only
                 STATUS  mandatory
                DESCRIPTION

                   "An empty string."
                 ::= { attributes 18}

   tcpConnId OBJECT-TYPE
                 SYNTAX  DisplayString
                 ACCESS  read-only
                 STATUS  mandatory
                DESCRIPTION
            "<laddr> . <lport> . <raddr> . <rport>, where
            <laddr> is the dot notation representation of
                   tcpConnLocalAddress,
            <lport> is the decimal representation of tcpConnLocalPort,
            <raddr> is the dot notation representation of
                   tcpConnRemAddress, and
            <rport> is the decimal representation of tcpConnRemPort."
                 ::= { attributes 12}

   tcpConnTableId OBJECT-TYPE
                 SYNTAX  DisplayString
                 ACCESS  read-only
                 STATUS  mandatory
                DESCRIPTION
                   "An empty string."
                 ::= { attributes 11}

   tcpId OBJECT-TYPE
                 SYNTAX  DisplayString
                 ACCESS  read-only
                 STATUS  mandatory
                DESCRIPTION
                   "An empty string."
                 ::= { attributes 10}

   updEntryId OBJECT-TYPE
                 SYNTAX  DisplayString
                 ACCESS  read-only
                 STATUS  mandatory
                DESCRIPTION
           "<index> . <address>, where <index> is the decimal
           representation of atIfIndex and <address> is atNetAddress
           represented in dot notation."
                 ::= { attributes 15}

   udpId OBJECT-TYPE
                 SYNTAX  DisplayString
                 ACCESS  read-only
                 STATUS  mandatory
                DESCRIPTION

                   "An empty string."
                 ::= { attributes 13}

   udpTableId OBJECT-TYPE
                 SYNTAX  DisplayString
                 ACCESS  read-only
                 STATUS  mandatory
                DESCRIPTION
                   "An empty string."
                 ::= { attributes 14}

Appendix 3: Supporting Definitions πŸ¦‹

okay so this appendix is where the object class "top" lives πŸ‘‘ it's the parent of every managed object class, basically the main character of the whole hierarchy. the definition is taken from ISO/IEC DIS 10165-2: Definition of Management Information [5], but since that doc hasn't been progressed to an International Standard yet, "top" and its attributes got registered here under the oim registration arc instead 🌸

   top     MANAGED OBJECT CLASS
           CHARACTERIZED BY
               topPackage PACKAGE
           BEHAVIOUR DEFINITIONS topBehaviour;
           ATTRIBUTES
                   objectClass     GET,
                   name            GET,
                   allomorphs      GET,
                   nameBindings    GET,
                   packages        GET;;;
   REGISTERED AS {objects 1};

   topBehaviour    BEHAVIOUR
           DEFINED AS
   This is the top level of managed object class hierarchy and
   every other managed object class is a specialization of either
   this generic class (top) or a specialization of a subclass of top.;

   allomorphs ATTRIBUTE
           WITH ATTRIBUTE SYNTAX
                   Top-Syntax.Allomorphs;
                   -- A set of allormorphic superclass identifiers
           MATCHES FOR  Set Comparison, Set Intersection;
   REGISTERED AS {attributes 30};

   name ATTRIBUTE
           WITH ATTRIBUTE SYNTAX InformationFramework.
                                   RelativeDistinguishedName;
                   -- defined in Directory standards
           MATCHES FOR Equality;
   REGISTERED AS {attributes 31};

   nameBindings ATTRIBUTE
           WITH ATTRIBUTE SYNTAX
                   Top-Syntax.NameBindings;
                   -- A set of valid namebindings for this object.
           MATCHES FOR     Set Comparison, Set Intersection;
   REGISTERED AS {attributes 32};
   objectClass     ATTRIBUTE
           WITH ATTRIBUTE SYNTAX CMIP-1.ObjectClass;
           MATCHES FOR Equality, Ordering;
   REGISTERED AS {attributes 33};

   packages ATTRIBUTE
           WITH ATTRIBUTE SYNTAX
                   Top-Syntax.Packages;
                   -- The set of optional packages defined for the
                   -- class that are included in this instantiation of
                   -- the object.
           MATCHES FOR Set Comparison, Set Intersection;
   REGISTERED AS {attributes 34};


   Top-Syntax {iso(1) org(3) dod(6) internet(1) mgmt(1) mib(1)
                   oim(9) misc(4) 2}
   DEFINITIONS ::=
   BEGIN

   -- from ISO/IEC DIS 10165-2:Definition of Management Information

   Allomorphs ::=  SET OF OBJECT IDENTIFIER

   NameBindings ::=        SET OF OBJECT IDENTIFIER

   Packages ::=    SET OF OBJECT IDENTIFIER

   -- From Directory InformationFramework

   RelativeDistinguishedName ::= SET OF AttributeValueAssertion

   AttributeValueAssertion ::= SEQUENCE {AttributeType,
                                         AttributeValue}

   AttributeType ::= OBJECT IDENTIFIER

   AttributeValue ::= ANY

   -- From CMIP-1

   ObjectClass ::= CHOICE {globalForm      [0] OBJECT IDENTIFIER,
                                      localForm    [1] INTEGER }
   END

Security Considerations πŸ”’

okay, real talk bestie 😭 this memo says "Security issues are not discussed in this memo." so no security stuff is covered here at all. zero. nada. not a single word πŸ’€ please don't go looking for hidden security tips in these pages, they just aren't here πŸ™ˆ


Author's Address πŸ–ŠοΈ

this is who wrote it, and how to reach them 🫢

   Lee LaBarre
   The MITRE Corporation
   Burlington Road
   Bedford, MA 01730

   Phone: (617) 271-8507

   EMail: cel@mbunix.mitre.org
πŸ“¦ where this page comes from