RFC 1162

Connectionless Network Protocol (ISO 8473) and End System to Intermediate System (ISO 9542) Management Information Base

๐Ÿ“… published June 1990, from ietf

RFC 1162: Connectionless Network Protocol (ISO 8473) and End System to Intermediate System (ISO 9542) Management Information Base ๐Ÿ’–

okay bestie, we're getting into RFC 1162 today and it's giving network management realness ๐Ÿฆ‹

Written by: Greg Satz, cisco Systems, Inc. ๐Ÿ‘‘ Date: June 1990 ๐Ÿ“… Stream: Network Working Group Status: experimental, as the memo says itself in Section 1 ๐Ÿงช Obsoletes / Updates: the title block doesn't list anything it obsoletes or updates ๐ŸŒธ

This doc defines MIB objects for the ISO Connectionless Network Protocol (CLNP, ISO 8473) and the End System to Intermediate System protocol (ES-IS, ISO 9542), so you can manage them with SNMP. The text is super specific because implementers rely on every single word. ๐ŸŽ€

Table of Contents โœจ

   1. Status of this Memo ..................................    1
   2. Historical Perspective................................    2
   3. Objects ..............................................    3
   3.1 Format of Definitions ...............................    3
   4. Object Definitions ...................................    4
   4.1 The CLNP Group ......................................    5
   4.1.1 The CLNP Interfaces table .........................   14
   4.1.2 The CLNP Routing table ............................   16
   4.1.3 The CLNP Address Translation Tables ...............   22
   4.2 The CLNP Error Group ................................   30
   4.3 The ESIS Group ......................................   47
   5. Definitions ..........................................   50
   6. Identification of OBJECT instances for use with  the
      SNMP .................................................   66
   6.1 clnpAddrTable Object Type Names .....................   67
   6.2 clnpRoutingTable Object Type Names ..................   67
   6.3 clnpNetToMediaTable Object Type Names ...............   68
   6.4 clnpMediaToNetTable Object Type Names ...............   68
   7. References ...........................................   69
   8. Security Considerations...............................   70
   9. Author's Address......................................   70

1. Status of this Memo โœจ

okay so this memo defines an experimental chunk of the Management Information Base (MIB) ๐Ÿงš for network management protocols in TCP/IP-based internets.

It is NOT a standard for the Internet community, lowkey. However, after experimentation, if the Internet community reaches sufficient consensus, a later revision of this document may be placed in the Internet-standard MIB. ๐ŸŒˆ

Distribution of this memo is unlimited. ๐Ÿ’…

2. Historical Perspective ๐Ÿ“œ

So, the history is giving main character energy. RFC 1052, the IAB Recommendations for the Development of Internet Network Management Standards [1], laid out a two-prong strategy for managing TCP/IP-based internets. ๐Ÿซถ

In the short term, the Simple Network Management Protocol (SNMP), defined in RFC 1067, was used to manage nodes in the Internet community. In the long term, the OSI network management framework was going to be examined. Two documents defined the management information: RFC 1065, which defined the Structure of Management Information (SMI), and RFC 1066, which defined the Management Information Base (MIB). Both were designed to be compatible with SNMP and the OSI framework. โœจ

The short-term plan was a total success: Internet-based network management tech was fielded by both the research and commercial communities within a few months, so parts of the Internet became network manageable in a timely way. ๐Ÿ”ฅ

Then RFC 1109, the Report of the Second Ad Hoc Network Management Review Group [2], found that the SNMP and OSI frameworks were more different than anyone expected. ๐Ÿ’€ So the requirement for compatibility between the SMI/MIB and both frameworks was suspended. That let the operational framework, based on SNMP, keep up with new needs in the Internet community by producing MIB-II. ๐Ÿฆ‹

In May of 1990, the core documents were elevated to "Standard Protocols" with "Recommended" status. So the Internet-standard network management framework is made up of three pieces: ๐ŸŽ€

  • Structure and Identification of Management Information for TCP/IP-based internets, RFC 1155 [3], which describes how managed objects in the MIB are defined.
  • Management Information Base for Network Management of TCP/IP-based internets, RFC 1156 [4], which describes the managed objects in the MIB.
  • the Simple Network Management Protocol, RFC 1157 [5], which defines the protocol used to manage these objects.

The IAB wanted simple, workable systems in the short term, so the list of managed objects in the Internet-standard MIB only included the elements considered essential. ๐Ÿ“ The SMI, though, defined three extensibility mechanisms: ๐Ÿงš

  1. Adding new standard objects by defining new versions of the MIB.
  2. Adding widely available but non-standard objects through the experimental subtree.
  3. Adding private objects through the enterprises subtree.

These extra objects can be used for vendor-specific elements, and also for experiments that help figure out which other objects are essential. ๐Ÿงช

Since the Internet-standard MIB came out, experience has led to a new document, MIB-II [6]. ๐Ÿ’…

This memo uses the second method. It defines extensions to the MIB containing managed objects used for experimentation. After experimentation, if the Internet community reaches sufficient consensus, a later revision of this memo may be placed in the Internet-standard MIB. ๐ŸŒธ

3. Objects ๐ŸŽ€

Managed objects are accessed via a virtual information store called the Management Information Base, or MIB. Objects in the MIB are defined using the subset of Abstract Syntax Notation One (ASN.1) [7] defined in the SMI. ๐Ÿซถ

Each object has a name, a syntax, and an encoding. The name is an object identifier, an administratively assigned name that specifies an object type. The object type together with an object instance uniquely identifies one specific instantiation of the object. For human convenience, we often use a textual string, called the OBJECT DESCRIPTOR, to refer to the object type too. โœจ

The syntax of an object type defines the abstract data structure for that object type, and the ASN.1 language is used for this. The SMI [3] purposely restricts which ASN.1 constructs can be used, and it does this explicitly for simplicity. ๐Ÿ’–

The encoding of an object type is just how that object type is represented using its syntax. Tied to the syntax and encoding is how the object type is represented when it's sent over the network. ๐Ÿฆ‹

This SMI specifies the use of the basic encoding rules of ASN.1 [8], subject to the additional requirements imposed by SNMP. ๐Ÿ”ฅ

3.1. Format of Definitions ๐Ÿ’…

The next section has the specification of all object types in the MIB. Following the conventions of the companion memo, each object type is defined using these fields: ๐ŸŒˆ

  • OBJECT:: a textual name, called the OBJECT DESCRIPTOR, for the object type, along with its corresponding OBJECT IDENTIFIER.
  • Syntax:: the abstract syntax for the object type, presented in ASN.1. This must resolve to an instance of the ASN.1 type ObjectSyntax defined in the SMI.
  • Definition:: a textual description of the object type's semantics. Implementations should make sure their interpretation of the object type fulfills this definition, since this MIB is meant for multi-vendor environments. Because of that, it's vital that object types have consistent meaning across all machines. ๐Ÿซถ
  • Access:: one of read-only, read-write, write-only, or not-accessible. This sets the minimum level of support required. Locally, implementations may support other access types (e.g., an implementation may elect to permit writing a variable marked here as read-only). Protocol-specific "views" (like the ones implied by an SNMP community) may restrict access to a variable even further. ๐Ÿงš
  • Status:: one of mandatory, optional, obsolete, or deprecated. Using deprecated implies mandatory status. ๐Ÿ“

4. Object Definitions ๐Ÿงš

Here's the module, bestie. Look at how clean it is ๐Ÿ˜ญ

               CLNS-MIB DEFINITIONS ::= BEGIN

               IMPORTS
                       experimental,  OBJECT-TYPE, Counter
                               FROM RFC1155-SMI;

               -- new type of NetworkAddress

               ClnpAddress ::=
                   [APPLICATION 5]
                       IMPLICIT OCTET STRING (SIZE (1..21))

               clns    OBJECT IDENTIFIER ::=   { experimental 1 }

               clnp    OBJECT IDENTIFIER ::=   { clns 1 }
               error   OBJECT IDENTIFIER ::=   { clns 2 }
               echo    OBJECT IDENTIFIER ::=   { clns 3 }
               es-is   OBJECT IDENTIFIER ::=   { clns 4 }

               END

These objects can be used when the ISO Connectionless-mode Network Protocol [9] and the End System to Intermediate System [10] protocols are present. No assumptions are made about which underlying protocol is used to carry the SNMP. ๐ŸŒธ

This memo uses the string encoding of [11] to describe OSI addresses in text. ๐Ÿ’–

The ASN.1 type ClnpAddress is used to denote an OSI address. It's a string of octets. The first octet contains a binary value in the range of 0..20, and it tells you the length in octets of the NSAP. After that first octet comes the NSAP, written in concrete binary notation, starting with the most significant octet. โœจ

โš ๏ธ A zero-length NSAP is a "special" address meaning "the default NSAP" (analogous to the IP address of 0.0.0.0). That NSAP is encoded as a single octet containing the value 0. Not a typo, it's just iconic ๐Ÿ’€

All other NSAPs are encoded in at least 2 octets. ๐Ÿฆ‹


to be continued in part 2โ€ฆ stay tuned, bestie ๐Ÿ’œโญ

4.1. The CLNP Group โœจ

Okay, bestie, first things first: the CLNP group is experimental ๐Ÿงช. It's still recommended for every system that supports CLNP, so if your box speaks CLNP, this is your group ๐Ÿ’…

OBJECT:
-------
     clnpForwarding { clnp 1 }

Syntax:
     INTEGER {
          is(1),   -- entity is an intermediate system
          es(2),   -- entity is an end system and does not
                      forward PDUs
     }

Access:
     read-write.

Status:
     mandatory.

So this one tells you whether the entity is running as an intermediate system or an end system ๐Ÿ”€. Only intermediate systems forward PDUs that aren't addressed to them. End systems don't forward, period ๐Ÿ™…โ€โ™€๏ธ

OBJECT:
-------
     clnpDefaultLifeTime { clnp 2 }

Syntax:
     INTEGER

Access:
     read-write.

Status:
     mandatory.

This is the default value that goes into the Lifetime field of the CLNP PDU header for anything this entity sends out. Simple, but iconic โณ

OBJECT:
-------
     clnpInReceives { clnp 3 }

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

This counter is the total of every input PDU received from all connected network interfaces running CLNP. Errors count too, so it's the full tally ๐Ÿ“ฅ

OBJECT:
-------
     clnpInHdrErrors { clnp 4 }

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

Here we're counting input PDUs that got tossed because of problems in the CLNP header ๐Ÿšซ. That includes bad checksums, version mismatches, lifetime exceeded, and errors found while processing options, etc. Yikes, the header really has to be on point ๐Ÿ˜ญ

OBJECT:
-------
     clnpInAddrErrors { clnp 5 }

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

This one counts input PDUs thrown out because the NSAP address in the destination field wasn't a valid NSAP for this entity to receive ๐Ÿ“. Addresses it doesn't understand get counted here too. For end systems, it's specifically the PDUs that showed up with a destination NSAP that wasn't local ๐Ÿ 

OBJECT:
-------
     clnpForwPDUs { clnp 6 }

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

This counts input PDUs where this entity wasn't the final destination, and where it actually tried to forward them onward ๐Ÿƒโ€โ™€๏ธ๐Ÿ’จ

OBJECT:
-------
     clnpInUnknownNLPs { clnp 7 }

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

Okay, this is the count of locally-addressed PDUs that were received just fine but then discarded because the network layer protocol was unknown or unsupported (for example, not CLNP or ES-IS) ๐Ÿคทโ€โ™€๏ธ

OBJECT:
-------
     clnpInUnknownULPs { clnp 8 }

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

Same vibe, but for the upper layer. These are locally-addressed PDUs that were received successfully and then dropped because the upper layer protocol was unknown or unsupported (for example, not TP4) ๐Ÿซ 

OBJECT:
-------
     clnpInDiscards { clnp 9 }

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

These are input CLNP PDUs that had no problems stopping them from being processed, but got discarded anyway (for example, for lack of buffer space) ๐Ÿ—‘๏ธ. Heads up: this counter does not include PDUs discarded while they were waiting for re-assembly ๐Ÿ‘€

OBJECT:
-------
     clnpInDelivers { clnp 10 }

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

The total number of input PDUs that were successfully delivered to the CLNS transport user ๐ŸŽ‰ That's the success story right there ๐Ÿ†

OBJECT:
-------
     clnpOutRequests { clnp 11 }

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

This counts every CLNP PDU that local CLNS user protocols handed to CLNP as a transmission request ๐Ÿ“ค. It does not include anything already counted in clnpForwPDUs, so no double-dipping ๐Ÿ™…โ€โ™€๏ธ

OBJECT:
-------
     clnpOutDiscards { clnp 12 }

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

Here we're counting output CLNP PDUs that had no other problem stopping their transmission, but still got discarded (for example, for lack of buffer space) ๐Ÿ’”. Note that this counter does include the PDUs counted in clnpForwPDUs, so it's a different vibe from the input side ๐Ÿ”

OBJECT:
-------
     clnpOutNoRoutes { clnp 13 }

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

These are CLNP PDUs discarded because no route could be found to get them to their destination ๐Ÿ—บ๏ธโŒ. This counter also includes any PDUs counted in clnpForwPDUs ๐Ÿ’…

OBJECT:
-------
     clnpReasmTimeout { clnp 14 }

Syntax:
     INTEGER

Access:
     read-only.

Status:
     mandatory.

This is the maximum number of seconds that received segments get held while they wait to be reassembled at this entity โฑ๏ธ. Patience, bestie ๐Ÿซถ

OBJECT:
-------
     clnpReasmReqds { clnp 15 }

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

This counts the CLNP segments received that needed to be reassembled at this entity ๐Ÿงฉ

OBJECT:
-------
     clnpReasmOKs { clnp 16 }

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

The number of CLNP PDUs that were successfully re-assembled at this entity ๐ŸŽ€ Go, reassembly, go โœจ

OBJECT:
-------
     clnpReasmFails { clnp 17 }

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

This is the number of failures the CLNP reassembly algorithm detected, for any reason at all: timed out, buffer size, etc. ๐Ÿ’€ Rough day for the reassembler

OBJECT:
-------
     clnpSegOKs { clnp 18 }

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

The number of CLNP PDUs that were successfully segmented at this entity ๐Ÿ”ชโœ… Clean cuts, no notes

OBJECT:
-------
     clnpSegFails { clnp 19 }

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

These are CLNP PDUs that got discarded because they needed to be fragmented at this entity but couldn't be ๐Ÿ˜ค

OBJECT:
-------
     clnpSegCreates { clnp 20 }

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

This counts the CLNP PDU segments that were generated as a result of segmentation at this entity ๐Ÿง

OBJECT:
-------
     clnpInOpts { clnp 25 }

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

The number of CLNP PDU segments that were input with options at this entity ๐Ÿ“ฆ

OBJECT:
-------
     clnpOutOpts { clnp 26 }

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

And the output side: the number of CLNP PDU segments generated with options by this entity ๐Ÿ“คโœจ


4.1.1. The CLNP Interfaces table ๐Ÿ—‚๏ธ

Okay, this table is the rundown of the entity's interfaces that are running CLNP ๐ŸŒ

OBJECT:
-------
     clnpAddrTable { clnp 21 }

Syntax:
     SEQUENCE OF ClnpAddrEntry

Access:
     not-accessible.

Status:
     mandatory.

This is the table of addressing information for this entity's CLNP addresses ๐Ÿ“’. Not directly accessible, so you go through its entries ๐Ÿšช

OBJECT:
-------
     clnpAddrEntry { clnpAddrTable 1 }

Syntax:
     ClnpAddrEntry :: = SEQUENCE {
          clnpAdEntAddr
              ClnpAddress,
          clnpAdEntIfIndex
              INTEGER,
          clnpAdEntReasmMaxSize
              INTEGER (0..65535)
     }

Access:
     not-accessible.

Status:
     mandatory.

Each entry is the addressing info for one of this entity's CLNP addresses ๐Ÿท๏ธ. Think of it as one row per address, with three columns of info ๐Ÿ’–

OBJECT:
-------
     clnpAdEntAddr { clnpAddrEntry 1 }

Syntax:
     ClnpAddress

Access:
     read-only.

Status:
     mandatory.

This is the CLNP address that the entry's addressing information is about ๐Ÿ“ฌ

OBJECT:
-------
     clnpAdEntIfIndex { clnpAddrEntry 2 }

Syntax:
     INTEGER

Access:
     read-only.

Status:
     mandatory.

This index value uniquely identifies the interface the entry applies to ๐Ÿ”—. The interface you get from this value is the same interface you'd get from the same value of ifIndex, so the two line up perfectly ๐Ÿ’•

OBJECT:
-------
     clnpAdEntReasmMaxSize { clnpAddrEntry 3 }

Syntax:
     INTEGER (0..65535)

Access:
     read-only.

Status:
     mandatory.

Last but not least: this is the size of the largest CLNP PDU that this entity can reassemble from incoming segmented PDUs received on this interface ๐Ÿงฉ๐ŸŒˆ

4.1.2. The CLNP Routing table โœจ

okay so the CLNP Routing table is basically this entity's little black book of routes ๐Ÿ“–๐Ÿ’– it's got an entry for every single route the entity knows about. no cap, this is the table everything else in the CLNP group is vibing off of.

          OBJECT:
          -------
               clnpRoutingTable { clnp 22 }

          Syntax:
               SEQUENCE OF ClnpRouteEntry

          Definition:
               This entity's CLNP routing table.

          Access:
               not-accessible.

          Status:
               mandatory.

the whole table is a SEQUENCE OF ClnpRouteEntry, so each row is one route ๐ŸŽ€ it's marked not-accessible, which means you can't grab the table as one object. you go through the rows instead ๐Ÿฆ‹

          OBJECT:
          -------
               clnpRouteEntry { clnpRoutingTable 1 }

          Syntax:
               ClnpRouteEntry ::= SEQUENCE {
                    clnpRouteDest
                        ClnpAddress,
                    clnpRouteIfIndex
                        INTEGER,
                    clnpRouteMetric1
                        INTEGER,
                    clnpRouteMetric2
                        INTEGER,
                    clnpRouteMetric3
                        INTEGER,
                    clnpRouteMetric4
                        INTEGER,
                    clnpRouteNextHop
                        ClnpAddress,
                    clnpRouteType
                        INTEGER,
                    clnpRouteProto
                        INTEGER,
                    clnpRouteAge
                        INTEGER
               }

          Definition:
               A route to a particular destination.

          Access:
               not-accessible.

          Status:
               mandatory.

this is the row itself, and it's the main character of the whole section ๐Ÿ’… each route is a bundle of ten fields: where it's going, which interface to use, four metrics, the next hop, the type, the protocol, and how old it is. same row, same story, every time ๐ŸŒธ

          OBJECT:
          -------
               clnpRouteDest { clnpRouteEntry 1 }

          Syntax:
               ClnpAddress

          Definition:
               The destination CLNP address of this route.

          Access:
               read-write.

          Status:
               mandatory.

clnpRouteDest is the destination, the place this route is trying to get to ๐Ÿงš it's a ClnpAddress and it's read-write, so it can be changed. mandatory, so every implementation has to have it ๐Ÿซถ

          OBJECT:
          -------
               clnpRouteIfIndex { clnpRouteEntry 2 }

          Syntax:
               INTEGER

          Definition:
               The index value which uniquely identifies the local
               interface through which the next hop of this route should
               be reached. The interface identified by a particular
               value of this index is the same as identified by the same
               value of ifIndex.

          Access:
               read-write.

          Status:
               mandatory.

clnpRouteIfIndex is the local interface you go out through to reach the next hop ๐Ÿฆ‹ it's an INTEGER that matches the same value of ifIndex, so the two stay in sync. the wording says should, not MUST, so keep that in mind when you're reading it, bestie ๐Ÿ’œ

          OBJECT:
          -------
               clnpRouteMetric1 { clnpRouteEntry 3 }

          Syntax:
               INTEGER

          Definition:
               The primary routing metric for this route. The semantics
               of this metric are determined by the routing-protocol
               specified in the route's clnpRouteProto value. If this
               metric is not used, its value should be set to -1.

          Access:
               read-write.

          Status:
               mandatory.

clnpRouteMetric1 is the main metric, the big one ๐Ÿ‘‘ what it actually means depends on whichever routing protocol the route came from (that's what clnpRouteProto is for). if you're not using it, just set it to -1 ๐Ÿ™ˆ

          OBJECT:
          -------
               clnpRouteMetric2 { clnpRouteEntry 4 }

          Syntax:
               INTEGER

          Definition:
               An alternate routing metric for this route.  The
               semantics of this metric are determined by the routing-
               protocol specified in the route's clnpRouteProto value.
               If this metric is not used, its value should be set to
               -1.

          Access:
               read-write.

          Status:
               mandatory.

clnpRouteMetric2 is an alternate metric, a sidekick to Metric1 ๐ŸŽ€ same rules apply: the routing protocol decides what it means, and if you don't need it, -1 is your friend โœจ

          OBJECT:
          -------
               clnpRouteMetric3 { clnpRouteEntry 5 }

          Syntax:
               INTEGER

          Definition:
               An alternate routing metric for this route.  The
               semantics of this metric are determined by the routing-
               protocol specified in the route's clnpRouteProto value.
               If this metric is not used, its value should be set to
               -1.

          Access:
               read-write.

          Status:
               mandatory.

clnpRouteMetric3 is another alternate metric, same energy as Metric2 ๐Ÿ’… protocol decides the meaning, -1 if it's not used. it's giving repetition, but that's literally how the spec is written ๐Ÿ˜ญ

          OBJECT:
          -------
               clnpRouteMetric4 { clnpRouteEntry 6 }

          Syntax:
               INTEGER

          Definition:
               An alternate routing metric for this route.  The
               semantics of this metric are determined by the routing-
               protocol specified in the route's clnpRouteProto value.
               If this metric is not used, its value should be set to
               -1.

          Access:
               read-write.

          Status:
               mandatory.

and the last metric, clnpRouteMetric4 ๐ŸŒˆ same deal, one more alternate metric where the protocol sets the meaning and -1 means unused. four metrics total, and that's the whole squad ๐Ÿงš

          OBJECT:
          -------
               clnpRouteNextHop { clnpRouteEntry 7 }

          Syntax:
               ClnpAddress

          Definition:
               The CLNP address of the next hop of this route.

          Access:
               read-write.

          Status:
               mandatory.

clnpRouteNextHop is the CLNP address of the next hop on the way ๐Ÿซถ it's the very next stop before the destination, and it's a ClnpAddress, read-write, mandatory.

          OBJECT:
          -------
               clnpRouteType { clnpRouteEntry 8 }

          Syntax:
               INTEGER {
                    other(1),      -- none of the following

                    invalid(2),    -- an invalidated route

                                   -- route to directly
                    direct(3),     -- connected (sub-)network

                                   -- route to a non-local
                    remote(4)      -- host/network/sub-network
               }

          Definition:
               The type of route.

          Setting this object to the value invalid(2) has the effect of
          invaliding the corresponding entry in the clnpRoutingTable.
          That is, it effectively dissasociates the destination
          identified with said entry from the route identified with said
          entry.  It is an implementation-specific matter as to whether
          the agent removes an invalidated entry from the table.
          Accordingly, management stations must be prepared to receive
          tabular information from agents that corresponds to entries
          not currently in use.  Proper interpretation of such entries
          requires examination of the relevant clnpRouteType object.

          Access:
               read-write.

          Status:
               mandatory.

clnpRouteType tells you what kind of route this is, and it's a whole vibe ๐Ÿ“ other(1) is the catch-all for anything that doesn't fit the rest. invalid(2) is an invalidated route. direct(3) goes to a directly connected (sub-)network, and remote(4) goes to a non-local host, network or sub-network.

here's the tea ๐Ÿ™ˆ setting this to invalid(2) doesn't delete the row. it just breaks the link between the destination and the route, which is kind of the whole point. whether the agent actually removes the entry is up to the implementation. so management stations need to be ready to see entries that aren't in use, and the only way to tell is by checking clnpRouteType ๐Ÿ”ฅ

          OBJECT:
          -------
               clnpRouteProto { clnpRouteEntry 9 }

          Syntax:
               INTEGER {
                    other(1),     -- none of the following

                                  -- non-protocol information
                                  --   e.g., manually
                    local(2),     --   configured entries

                                  -- set via a network
                    netmgmt(3),   --   management protocol

                                  -- similar to ipRouteProto
                                  -- but omits several IP-specific
                                  -- protocols

                    is-is(9),
                    ciscoIgrp(11),
                    bbnSpfIgp(12),
                    ospf(13),
                    bgp(14)
               }

          Definition:
               The routing mechanism via which this route was learned.
               Inclusion of values for gateway routing protocols is not
               intended to imply that hosts should support those
               protocols.

          Access:
               read-write.

          Status:
               mandatory.

clnpRouteProto is the "how did we find out about this route?" field ๐Ÿ•ต๏ธโ€โ™€๏ธ other(1) covers anything not listed. local(2) is for non-protocol stuff like manually configured entries. netmgmt(3) is for routes set through a network management protocol, and it's similar to ipRouteProto but leaves out a bunch of the IP-only protocols. then you've got is-is(9), ciscoIgrp(11), bbnSpfIgp(12), ospf(13) and bgp(14) ๐ŸŒธ

the definition also says that listing gateway routing protocols doesn't mean hosts are expected to run them. so don't go assuming your laptop has to speak BGP just because it's in the enum, bestie ๐Ÿ’€

          OBJECT:
          -------
               clnpRouteAge { clnpRouteEntry 10 }

          Syntax:
               INTEGER

          Definition:
               The number of seconds since this route was last updated
               or otherwise determined to be correct.   Note that no
               semantics of "too old" can be implied except through
               knowledge of the routing protocol by which the route was
               learned.

          Access:
               read-write.

          Status:
               mandatory.

last one, clnpRouteAge ๐Ÿงš it's just the number of seconds since the route was last updated or confirmed to be correct. and here's the important bit: there's no universal definition of "too old". you only know that by understanding the routing protocol the route came from ๐Ÿซถ

4.1.3. The CLNP Address Translation Tables โœจ

okay bestie, these tables are where CLNP addresses get matched up with their physical addresses ๐Ÿฆ‹ Some interfaces don't use translation tables for this at all. If every interface is like that, the Address Translation table is empty, meaning zero entries ๐Ÿ’€

OBJECT:
-------
     clnpNetToMediaTable { clnp 23 }

Syntax:
     SEQUENCE OF ClnpNetToMediaEntry

Access:
     not-accessible

Status:
     mandatory.

This is the CLNP Address Translation table for mapping from CLNP addresses to physical addresses ๐Ÿ—บ๏ธ

OBJECT:
-------
     clnpNetToMediaEntry { clnpNetToMediaTable 1 }

Syntax:
     ClnpNetToMediaEntry ::= SEQUENCE {
          clnpNetToMediaIfIndex
              INTEGER,
          clnpNetToMediaPhysAddress
              OCTET STRING,
          clnpNetToMediaNetAddress
              ClnpAddress,
          clnpNetToMediaType
              INTEGER,
          clnpNetToMediaAge
              INTEGER,
          clnpNetToMediaHoldTime
              INTEGER
     }

Access:
     not-accessible.

Status:
     mandatory.

Each entry is one CLNP address to "physical" address equivalence ๐Ÿ’–

OBJECT:
-------
     clnpNetToMediaIfIndex { clnpNetToMediaEntry 1 }

Syntax:
     INTEGER

Access:
     read-write.

Status:
     mandatory.

This is the interface where the entry's equivalence is effective. Whatever interface has a given value here is the same interface that has that same value in ifIndex ๐Ÿงš

OBJECT:
-------
     clnpNetToMediaPhysAddress { clnpNetToMediaEntry 2 }

Syntax:
     OCTET STRING

Access:
     read-write.

Status:
     mandatory.

This is the media-dependent "physical" address ๐Ÿ”Œ

OBJECT:
-------
     clnpNetToMediaNetAddress { clnpNetToMediaEntry 3 }

Syntax:
     ClnpAddress

Access:
     read-write.

Status:
     mandatory.

This is the CLNP address that goes with the media-dependent "physical" address ๐ŸŽ€

OBJECT:
-------
     clnpNetToMediaType { clnpNetToMediaEntry 4 }

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

Access:
     read-write.

Status:
     mandatory.

This one tells you what kind of mapping it is ๐Ÿ‘‘ Setting this object to invalid(2) invalidates the matching entry in the clnpNetToMediaTable. Basically it disassociates the interface from the mapping for that entry ๐Ÿ’… Whether the agent actually deletes an invalidated entry is up to the implementation, so management stations must be prepared to receive table info about entries that aren't in use anymore. To make sense of those, you have to look at the relevant clnpNetToMediaType object ๐Ÿ™ˆ

OBJECT:
-------
     clnpNetToMediaAge { clnpNetToMediaEntry 5 }

Syntax:
     INTEGER

Access:
     read-write.

Status:
     mandatory.

This is the number of seconds since the entry was last updated or confirmed as correct โฐ Heads up though: you can't call something "too old" unless you know what type of entry it is ๐Ÿซถ

OBJECT:
-------
     clnpNetToMediaHoldTime { clnpNetToMediaEntry 6 }

Syntax:
     INTEGER

Access:
     read-write.

Status:
     mandatory.

This is how many seconds the entry will stay valid โณ Static entries should always report this field as -1 ๐ŸงŠ

OBJECT:
-------
     clnpMediaToNetTable { clnp 24 }

Syntax:
     SEQUENCE OF ClnpMediaToNetEntry

Access:
     not-accessible.

Status:
     mandatory.

This is the CLNP Address Translation table for going the other way, from physical addresses back to CLNP addresses ๐Ÿ”„

OBJECT:
-------
     clnpMediaToNetEntry { clnpMediaToNetTable 1 }

Syntax:
     ClnpMediaToNetEntry ::= SEQUENCE {
          clnpMediaToNetIfIndex
              INTEGER,
          clnpMediaToNetNetAddress
              ClnpAddress,
          clnpMediaToNetPhysAddress
              OCTET STRING,
          clnpMediaToNetType
              INTEGER,
          clnpMediaToNetAge
              INTEGER,
          clnpMediaToNetHoldTime
              INTEGER
     }

Access:
     not-accessible.

Status:
     mandatory.

Each entry is one ClnpAddress to "physical" address equivalence ๐ŸŒธ

OBJECT:
-------
     clnpMediaToNetIfIndex { clnpMediaToNetEntry 1 }

Syntax:
     INTEGER

Access:
     read-write.

Status:
     mandatory.

Same deal as before: this is the interface where the equivalence works, and it's the same interface as the matching ifIndex value ๐Ÿงš

OBJECT:
-------
     clnpMediaToNetAddress { clnpMediaToNetEntry 2 }

Syntax:
     ClnpAddress

Access:
     read-write.

Status:
     mandatory.

This is the ClnpAddress that goes with the media-dependent "physical" address ๐Ÿ’œ

OBJECT:
-------
     clnpMediaToNetPhysAddress { clnpMediaToNetEntry 3 }

Syntax:
     OCTET STRING

Access:
     read-write.

Status:
     mandatory.

This is the media-dependent "physical" address ๐Ÿ”Œ

OBJECT:
-------
     clnpMediaToNetType { clnpMediaToNetEntry 4 }

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

Access:
     read-write.

Status:
     mandatory.

The type of mapping ๐Ÿ‘‘ Setting this object to invalid(2) invalidates the matching entry in the clnpMediaToNetTable, which disassociates the interface from the mapping for that entry ๐Ÿ’… Deleting invalidated entries is up to the implementation, so management stations must be prepared to receive info about entries that aren't in use. To read those correctly, check the relevant clnpMediaToNetType object ๐Ÿ™ˆ

OBJECT:
-------
     clnpMediaToNetAge { clnpMediaToNetEntry 5 }

Syntax:
     INTEGER

Access:
     read-write.

Status:
     mandatory.

Seconds since the entry was last updated or confirmed as correct โฐ Same tea as before: "too old" only makes sense once you know the entry type ๐Ÿซถ

OBJECT:
-------
     clnpMediaToNetHoldTime { clnpMediaToNetEntry 6 }

Syntax:
     INTEGER

Access:
     read-write.

Status:
     mandatory.

How many seconds the entry will be valid โณ Static entries should always report this as -1 ๐ŸงŠ


4.2. The CLNP Error Group ๐Ÿ’€

This group records the CLNP Error protocol and is recommended for all systems which support CLNP ๐Ÿซถ Let's count those errors ๐Ÿ“Š

OBJECT:
-------
     clnpInErrors { error 1 }

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

The number of CLNP Error PDUs received by this entity ๐Ÿ“ฅ

OBJECT:
-------
     clnpOutErrors { error 2 }

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

The number of CLNP Error PDUs sent by this entity ๐Ÿ“ค

OBJECT:
-------
     clnpInErrUnspecs { error 3 }

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

The number of unspecified CLNP Error PDUs received by this entity ๐Ÿคทโ€โ™€๏ธ

OBJECT:
-------
     clnpInErrProcs { error 4 }

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

The number of protocol procedure CLNP Error PDUs received by this entity ๐Ÿ“‹

OBJECT:
-------
     clnpInErrCksums { error 5 }

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

The number of checksum CLNP Error PDUs received by this entity ๐Ÿงฎ

OBJECT:
-------
     clnpInErrCongests { error 6 }

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

The number of congestion drop CLNP Error PDUs received by this entity ๐ŸŒŠ

OBJECT:
-------
     clnpInErrHdrs { error 7 }

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

The number of header syntax CLNP Error PDUs received by this entity ๐Ÿ“ฆ

OBJECT:
-------
     clnpInErrSegs { error 8 }

Syntax:
     Counter

The first count here is about segmentation-disallowed Error PDUs that this entity received ๐Ÿ“ฅ Access is read-only and Status is mandatory, so it's a counter you can only peek at, not mess with ๐Ÿ‘€

OBJECT:
-------
     clnpInErrIncomps { error 9 }

Syntax:
     Counter

This one tracks incomplete PDU CLNP Error PDUs received by this entity ๐Ÿงฉ Access is read-only and Status is mandatory ๐ŸŽ€

OBJECT:
-------
     clnpInErrDups { error 10 }

Syntax:
     Counter

Next up are the duplicate option CLNP Error PDUs received by this entity ๐Ÿ‘ฏโ€โ™€๏ธ Access is read-only and Status is mandatory โœจ

OBJECT:
-------
     clnpInErrUnreachDsts { error 11 }

Syntax:
     Counter

Unreachable destination Error PDUs received by this entity get counted here ๐Ÿšซ Access is read-only and Status is mandatory ๐Ÿ’–

OBJECT:
-------
     clnpInErrUnknownDsts { error 12 }

Syntax:
     Counter

This counts unknown destination CLNP Error PDUs received by this entity ๐Ÿ•ต๏ธโ€โ™€๏ธ Access is read-only and Status is mandatory ๐ŸŒธ

OBJECT:
-------
     clnpInErrSRUnspecs { error 13 }

Syntax:
     Counter

Unspecified source route CLNP Error PDUs received by this entity are tallied here ๐Ÿ—บ๏ธ Access is read-only and Status is mandatory ๐Ÿฆ‹

OBJECT:
-------
     clnpInErrSRSyntaxes { error 14 }

Syntax:
     Counter

Source route syntax CLNP Error PDUs received by this entity go in this counter ๐Ÿ“ Access is read-only and Status is mandatory ๐Ÿ’…

OBJECT:
-------
     clnpInErrSRUnkAddrs { error 15 }

Syntax:
     Counter

This one covers source route unknown address CLNP Error PDUs received by this entity ๐Ÿ  Access is read-only and Status is mandatory ๐Ÿซถ

OBJECT:
-------
     clnpInErrSRBadPaths { error 16 }

Syntax:
     Counter

Source route bad path CLNP Error PDUs received by this entity are counted here ๐Ÿ›ค๏ธ Access is read-only and Status is mandatory ๐Ÿ˜ญ

OBJECT:
-------
     clnpInErrHops { error 17 }

Syntax:
     Counter

Hop count exceeded CLNP Error PDUs received by this entity get their tally here ๐Ÿฆ˜ Access is read-only and Status is mandatory ๐Ÿ”ฅ

OBJECT:
-------
     clnpInErrHopReassms { error 18 }

Syntax:
     Counter

This counts the hop count exceeded while reassembling CLNP Error PDUs received by this entity ๐Ÿงฉ Access is read-only and Status is mandatory ๐Ÿ’œ

OBJECT:
-------
     clnpInErrUnsOptions { error 19 }

Syntax:
     Counter

Unsupported option CLNP Error PDUs received by this entity are counted here ๐Ÿ™…โ€โ™€๏ธ Access is read-only and Status is mandatory ๐ŸŒˆ

OBJECT:
-------
     clnpInErrUnsVersions { error 20 }

Syntax:
     Counter

Version mismatch CLNP Error PDUs received by this entity show up in this counter ๐Ÿ”€ Access is read-only and Status is mandatory โญ

OBJECT:
-------
     clnpInErrUnsSecurities { error 21 }

Syntax:
     Counter

Unsupported security option CLNP Error PDUs received by this entity get counted here ๐Ÿ” Access is read-only and Status is mandatory ๐Ÿ’€

OBJECT:
-------
     clnpInErrUnsSRs { error 22 }

Syntax:
     Counter

This one tracks unsupported source route option CLNP Error PDUs received by this entity ๐Ÿงญ Access is read-only and Status is mandatory ๐Ÿ“

OBJECT:
-------
     clnpInErrUnsRRs { error 23 }

Syntax:
     Counter

Unsupported record route option CLNP Error PDUs received by this entity are tallied here ๐Ÿ“œ Access is read-only and Status is mandatory ๐ŸŽ€

OBJECT:
-------
     clnpInErrInterferences { error 24 }

Syntax:
     Counter

Reassembly interference CLNP Error PDUs received by this entity get counted in this one ๐ŸŒ€ Access is read-only and Status is mandatory ๐Ÿฆ‹

OBJECT:
-------
     clnpOutErrUnspecs { error 25 }

Syntax:
     Counter

Now we're on the sent side ๐Ÿ“ค Unspecified CLNP Error PDUs sent by this entity are counted here ๐Ÿซง Access is read-only and Status is mandatory ๐Ÿ’–

OBJECT:
-------
     clnpOutErrProcs { error 26 }

Syntax:
     Counter

Protocol procedure CLNP Error PDUs sent by this entity show up here ๐Ÿ“‹ Access is read-only and Status is mandatory โœจ

OBJECT:
-------
     clnpOutErrCksums { error 27 }

Syntax:
     Counter

Checksum CLNP Error PDUs sent by this entity get counted in this one ๐Ÿงฎ Access is read-only and Status is mandatory ๐ŸŒธ

OBJECT:
-------
     clnpOutErrCongests { error 28 }

Syntax:
     Counter

Congestion drop CLNP Error PDUs sent by this entity are tallied here ๐ŸŒŠ Access is read-only and Status is mandatory ๐Ÿซถ

OBJECT:
-------
     clnpOutErrHdrs { error 29 }

Syntax:
     Counter

Header syntax CLNP Error PDUs sent by this entity get their count here ๐Ÿงพ Access is read-only and Status is mandatory ๐Ÿ’…

OBJECT:
-------
     clnpOutErrSegs { error 30 }

Syntax:
     Counter

This counts segmentation disallowed CLNP Error PDUs sent by this entity ๐Ÿšง Access is read-only and Status is mandatory ๐Ÿฆ„

OBJECT:
-------
     clnpOutErrIncomps { error 31 }

Syntax:
     Counter

Incomplete PDU CLNP Error PDUs sent by this entity are counted here ๐Ÿงฉ Access is read-only and Status is mandatory ๐ŸŽ€

OBJECT:
-------
     clnpOutErrDups { error 32 }

Syntax:
     Counter

Duplicate option CLNP Error PDUs sent by this entity get tallied in this counter ๐Ÿ‘ฏโ€โ™€๏ธ Access is read-only and Status is mandatory ๐ŸŒˆ

OBJECT:
-------
     clnpOutErrUnreachDsts { error 33 }

Syntax:
     Counter

Unreachable destination CLNP Error PDUs sent by this entity show up here ๐Ÿšซ Access is read-only and Status is mandatory ๐Ÿ“

OBJECT:
-------
     clnpOutErrUnknownDsts { error 34 }

Syntax:
     Counter

Unknown destination CLNP Error PDUs sent by this entity are counted here ๐Ÿ•ต๏ธโ€โ™€๏ธ Access is read-only and Status is mandatory ๐Ÿ’œ

OBJECT:
-------
     clnpOutErrSRUnspecs { error 35 }

Syntax:
     Counter

Unspecified source route CLNP Error PDUs sent by this entity get tallied here ๐Ÿ—บ๏ธ Access is read-only and Status is mandatory โญ

OBJECT:
-------
     clnpOutErrSRSyntaxes { error 36 }

Syntax:
     Counter

Source route syntax CLNP Error PDUs sent by this entity are counted in this one ๐Ÿ“ Access is read-only and Status is mandatory ๐Ÿ”ฅ

OBJECT:
-------
     clnpOutErrSRUnkAddrs { error 37 }

Syntax:
     Counter

Source route unknown address CLNP Error PDUs sent by this entity show up here ๐Ÿ  Access is read-only and Status is mandatory ๐Ÿฆ‹

OBJECT:
-------
     clnpOutErrSRBadPaths { error 38 }

Syntax:
     Counter

Source route bad path CLNP Error PDUs sent by this entity get counted here ๐Ÿ›ค๏ธ Access is read-only and Status is mandatory ๐Ÿ’–

OBJECT:
-------
     clnpOutErrHopss { error 39 }

Syntax:
     Counter

Hop count exceeded CLNP Error PDUs sent by this entity are tallied here ๐Ÿฆ˜ Access is read-only and Status is mandatory โœจ

OBJECT:
-------
     clnpOutErrHopReassms { error 40 }

Syntax:
     Counter

This counts the hop count exceeded while reassembling CLNP Error PDUs sent by this entity ๐Ÿงฉ Access is read-only and Status is mandatory ๐ŸŒธ

OBJECT:
-------
     clnpOutErrUnsOptions { error 41 }

Syntax:
     Counter

Unsupported option CLNP Error PDUs sent by this entity get counted here ๐Ÿ™…โ€โ™€๏ธ Access is read-only and Status is mandatory ๐Ÿซถ

OBJECT:
-------
     clnpOutErrUnsVersions { error 42 }

Syntax:
     Counter

Version mismatch CLNP Error PDUs sent by this entity are counted in this one ๐Ÿ”€ Access is read-only and Status is mandatory ๐Ÿ‘‘

okay bestie, the last few error counters are giving ๐ŸŽ€ Each one is a read-only Counter, and every one is mandatory ๐Ÿ’…

          OBJECT:
          -------
               clnpOutErrUnsSecurities { error 43 }

          Syntax:
               Counter

          Definition:
               The number of unsupported security option CLNP Error PDUs
               sent by this entity.

          Access:
               read-only.

          Status:
               mandatory.


          OBJECT:
          -------
               clnpOutErrUnsSRs { error 44 }

          Syntax:
               Counter

          Definition:
               The number of unsupported source route option CLNP Error
               PDUs sent by this entity.

          Access:
               read-only.

          Status:
               mandatory.


          OBJECT:
          -------
               clnpOutErrUnsRRs { error 45 }

          Syntax:
               Counter

          Definition:
               The number of unsupported record route option CLNP Error
               PDUs sent by this entity.

          Access:
               read-only.

          Status:
               mandatory.


          OBJECT:
          -------
               clnpOutErrInterferences { error 46 }

          Syntax:
               Counter

          Definition:
               The number of reassembly interference CLNP Error PDUs
               sent by this entity.

          Access:
               read-only.

          Status:
               mandatory.

4.3. The ESIS Group โœจ

The ESIS group is where the End System Intermediate System protocol lives ๐Ÿงš It's the bit that keeps track of neighbor reachability info, so it's basically the group chat that tells everyone who's still online ๐Ÿซถ ngl, both ESs and ISs are expected to implement this group, as long as they're running CLNP. Here are the six counters:

          OBJECT:
          -------
               esisESHin { es-is 1 }

          Syntax:
               Counter

          Definition:
               The number of ESH PDUs received by this entity.

          Access:
               read-only.

          Status:
               mandatory.


          OBJECT:
          -------
               esisESHout { es-is 2 }

          Syntax:
               Counter

          Definition:
               The number of ESH PDUs sent by this entity.

          Access:
               read-only.

          Status:
               mandatory.


          OBJECT:
          -------
               esisISHin { es-is 3 }

          Syntax:
               Counter

          Definition:
               The number of ISH PDUs received by this entity.

          Access:
               read-only.

          Status:
               mandatory.


          OBJECT:
          -------
               esisISHout { es-is 4 }

          Syntax:
               Counter

          Definition:
               The number of ISH PDUs sent by this entity.

          Access:
               read-only.

          Status:
               mandatory.


          OBJECT:
          -------
               esisRDUin { es-is 5 }

          Syntax:
               Counter

          Definition:
               The number of RDU PDUs received by this entity.

          Access:
               read-only.

          Status:
               mandatory.


          OBJECT:
          -------
               esisRDUout { es-is 6 }

          Syntax:
               Counter

          Definition:
               The number of RDU PDUs sent by this entity.

          Access:
               read-only.

          Status:
               mandatory.

5. Definitions ๐ŸŒˆ

Okay, this is the actual MIB module, the part where all the names get their official IDs ๐Ÿ‘‘ Everything below is copied exactly as the spec has it, so no touching ๐Ÿ™ˆ

               CLNS-MIB DEFINITIONS ::= BEGIN

               IMPORTS
                       experimental, OBJECT-TYPE, Counter
                               FROM RFC1155-SMI;

               -- new type of NetworkAddress

               ClnpAddress ::=
                   [APPLICATION 5]
                       IMPLICIT OCTET STRING (SIZE (1..21))


               clns    OBJECT IDENTIFIER ::=   { experimental 1 }

               clnp    OBJECT IDENTIFIER ::=   { clns 1 }
               error   OBJECT IDENTIFIER ::=   { clns 2 }
               echo    OBJECT IDENTIFIER ::=   { clns 3 }
               es-is   OBJECT IDENTIFIER ::=   { clns 4 }


               -- the General CLNP group

               clnpForwarding OBJECT-TYPE
                       SYNTAX  INTEGER {
                                   is(1),  -- entity is an
                                           -- intermediate system
                                   es(2)   -- entity is an end system
                                           -- and does not forward pdus
                               }
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { clnp 1 }

               clnpDefaultLifeTime OBJECT-TYPE
                       SYNTAX  INTEGER
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { clnp 2 }

               clnpInReceives OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { clnp 3 }

               clnpInHdrErrors OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { clnp 4 }

               clnpInAddrErrors OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { clnp 5 }

               clnpForwPDUs OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { clnp 6 }

               clnpInUnknownNLPs OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { clnp 7 }

               clnpInUnknownULPs OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { clnp 8 }

               clnpInDiscards OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { clnp 9 }

               clnpInDelivers OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { clnp 10 }

               clnpOutRequests OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { clnp 11 }

               clnpOutDiscards OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { clnp 12 }

               clnpOutNoRoutes OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { clnp 13 }

               clnpReasmTimeout OBJECT-TYPE
                       SYNTAX  INTEGER
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { clnp 14 }

               clnpReasmReqds  OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { clnp 15 }

               clnpReasmOKs    OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { clnp 16 }

               clnpReasmFails  OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { clnp 17 }

               clnpSegOKs      OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { clnp 18 }

               clnpSegFails    OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { clnp 19 }

               clnpSegCreates  OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { clnp 20 }

               clnpInOpts      OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { clnp 25 }

               clnpOutOpts     OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { clnp 26 }

               -- the CLNP Interface table

               clnpAddrTable   OBJECT-TYPE
                       SYNTAX  SEQUENCE OF ClnpAddrEntry
                       ACCESS  not-accessible
                       STATUS  mandatory
                       ::= { clnp 21 }

               clnpAddrEntry   OBJECT-TYPE
                       SYNTAX  ClnpAddrEntry
                       ACCESS  not-accessible
                       STATUS  mandatory
               --      INDEX   { clnpAdEntAddr }
                       ::= { clnpAddrTable 1 }

               ClnpAddrEntry ::= SEQUENCE {
                   clnpAdEntAddr
                       ClnpAddress,
                   clnpAdEntIfIndex
                       INTEGER,
                   clnpAdEntReasmMaxSize
                       INTEGER (0..65535)
               }

               clnpAdEntAddr OBJECT-TYPE
                       SYNTAX  ClnpAddress
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { clnpAddrEntry 1 }

               clnpAdEntIfIndex OBJECT-TYPE
                       SYNTAX  INTEGER
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { clnpAddrEntry 2 }

               clnpAdEntReasmMaxSize OBJECT-TYPE
                       SYNTAX  INTEGER (0..65535)
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { clnpAddrEntry 3 }

               -- the CLNP Routing table

               clnpRoutingTable OBJECT-TYPE
                       SYNTAX  SEQUENCE OF ClnpRouteEntry
                       ACCESS  not-accessible
                       STATUS  mandatory
                       ::= { clnp 22 }

               clnpRouteEntry OBJECT-TYPE
                       SYNTAX  ClnpRouteEntry
                       ACCESS  not-accessible
                       STATUS  mandatory
               --      INDEX   { clnpRouteDest }
                       ::= { clnpRoutingTable 1 }

               ClnpRouteEntry ::= SEQUENCE {
                   clnpRouteDest
                       ClnpAddress,
                   clnpRouteIfIndex
                       INTEGER,
                   clnpRouteMetric1
                       INTEGER,
                   clnpRouteMetric2
                       INTEGER,
                   clnpRouteMetric3
                       INTEGER,
                   clnpRouteMetric4
                       INTEGER,
                   clnpRouteNextHop
                       ClnpAddress,
                   clnpRouteType
                       INTEGER,
                   clnpRouteProto
                       INTEGER,
                   clnpRouteAge
                       INTEGER

               }

               clnpRouteDest OBJECT-TYPE
                       SYNTAX  ClnpAddress
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { clnpRouteEntry 1 }

and that's where we're at, bestie โœจ the routing table is just getting started ๐Ÿ’…

okay bestie, the routing table entries keep going ๐Ÿ›ฃ๏ธโœจ

               clnpRouteIfIndex  OBJECT-TYPE
                       SYNTAX  INTEGER
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { clnpRouteEntry 2 }

               clnpRouteMetric1 OBJECT-TYPE
                       SYNTAX  INTEGER
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { clnpRouteEntry 3 }

               clnpRouteMetric2 OBJECT-TYPE
                       SYNTAX  INTEGER
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { clnpRouteEntry 4 }

               clnpRouteMetric3 OBJECT-TYPE
                       SYNTAX  INTEGER
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { clnpRouteEntry 5 }

               clnpRouteMetric4 OBJECT-TYPE
                       SYNTAX  INTEGER
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { clnpRouteEntry 6 }

               clnpRouteNextHop OBJECT-TYPE
                       SYNTAX  ClnpAddress
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { clnpRouteEntry 7 }

               clnpRouteType OBJECT-TYPE
                       SYNTAX  INTEGER {
                                   other(1),      -- none of the
                                                  -- following

                                   invalid(2),    -- an invalidated
                                                  -- route

                                                  -- route to directly
                                   direct(3),     -- connected
                                                  -- (sub-)network

                                                  -- route to a
                                                  -- non-local
                                   remote(4)      -- host/network
                                                  -- /sub-network
                           }
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { clnpRouteEntry 8 }

               clnpRouteProto OBJECT-TYPE
                       SYNTAX  INTEGER {
                                   other(1),     -- none of the
                                                 -- following

                                                 -- non-protocol
                                                 -- information
                                                 --   e.g., manually
                                   local(2),     --   configured entries

                                                 -- set via a network
                                   netmgmt(3),   --   management
                                                 --   protocol

                                                 -- similar to
                                                 -- ipRouteProto
                                                 -- but omits several
                                                 -- IP-specific
                                                 -- protocols
                                   is-is(9),
                                   ciscoIgrp(11),
                                   bbnSpfIgp(12),
                                   ospf(13),
                                   bgp(14)
                           }
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { clnpRouteEntry 9 }

               clnpRouteAge OBJECT-TYPE
                       SYNTAX  INTEGER
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { clnpRouteEntry 10 }

               -- the CLNP Address Translation tables

               clnpNetToMediaTable OBJECT-TYPE
                       SYNTAX  SEQUENCE OF ClnpNetToMediaEntry
                       ACCESS  not-accessible
                       STATUS  mandatory
                       ::= { clnp 23 }

               clnpNetToMediaEntry OBJECT-TYPE
                       SYNTAX  ClnpNetToMediaEntry
                       ACCESS  not-accessible
                       STATUS  mandatory
               --      INDEX   { clnpNetToMediaIfIndex,
               --                clnpNetToMediaNetAddress }
                       ::= { clnpNetToMediaTable 1 }

               ClnpNetToMediaEntry ::= SEQUENCE {
                   clnpNetToMediaIfIndex
                       INTEGER,
                   clnpNetToMediaPhysAddress
                       OCTET STRING,
                   clnpNetToMediaNetAddress
                       ClnpAddress,
                   clnpNetToMediaType
                       INTEGER,
                   clnpNetToMediaAge
                       INTEGER,
                   clnpNetToMediaHoldTime
                       INTEGER
               }

               clnpNetToMediaIfIndex OBJECT-TYPE
                       SYNTAX  INTEGER
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { clnpNetToMediaEntry 1 }

               clnpNetToMediaPhysAddress OBJECT-TYPE
                       SYNTAX  OCTET STRING
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { clnpNetToMediaEntry 2 }

               clnpNetToMediaNetAddress OBJECT-TYPE
                       SYNTAX  ClnpAddress
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { clnpNetToMediaEntry 3 }

               clnpNetToMediaType OBJECT-TYPE
                       SYNTAX  INTEGER {
                                   other(1),       -- none of the
                                                   -- following
                                   invalid(2),     -- an invalidated
                                                   -- mapping
                                   dynamic(3),
                                   static(4)
                           }
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { clnpNetToMediaEntry 4 }

               clnpNetToMediaAge OBJECT-TYPE
                       SYNTAX  INTEGER
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { clnpNetToMediaEntry 5 }

               clnpNetToMediaHoldTime OBJECT-TYPE
                       SYNTAX  INTEGER
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { clnpNetToMediaEntry 6 }

               clnpMediaToNetTable OBJECT-TYPE
                       SYNTAX  SEQUENCE OF ClnpMediaToNetEntry
                       ACCESS  not-accessible
                       STATUS  mandatory
                       ::= { clnp 24 }

               clnpMediaToNetEntry OBJECT-TYPE
                       SYNTAX  ClnpMediaToNetEntry
                       ACCESS  not-accessible
                       STATUS  mandatory
               --      INDEX   { clnpMediaToNetIfIndex,
               --                clnpMediaToNetPhysAddress }
                       ::= { clnpMediaToNetTable 1 }

               ClnpMediaToNetEntry ::= SEQUENCE {
                   clnpMediaToNetIfIndex
                       INTEGER,
                   clnpMediaToNetNetAddress
                       ClnpAddress,

                   clnpMediaToNetPhysAddress
                       OCTET STRING,
                   clnpMediaToNetType
                       INTEGER,
                   clnpMediaToNetAge
                       INTEGER,
                   clnpMediaToNetHoldTime
                       INTEGER
               }

               clnpMediaToNetIfIndex OBJECT-TYPE
                       SYNTAX  INTEGER
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { clnpMediaToNetEntry 1 }

               clnpMediaToNetNetAddress OBJECT-TYPE
                       SYNTAX  ClnpAddress
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { clnpMediaToNetEntry 2 }

               clnpMediaToNetPhysAddress OBJECT-TYPE
                       SYNTAX  OCTET STRING
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { clnpMediaToNetEntry 3 }

               clnpMediaToNetType OBJECT-TYPE
                       SYNTAX  INTEGER {
                                   other(1),       -- none of the
                                                   -- following
                                   invalid(2),     -- an invalidated
                                                   -- mapping
                                   dynamic(3),
                                   static(4)
                           }
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { clnpMediaToNetEntry 4 }

               clnpMediaToNetAge OBJECT-TYPE
                       SYNTAX  INTEGER
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { clnpMediaToNetEntry 5 }

               clnpMediaToNetHoldTime OBJECT-TYPE

                       SYNTAX  INTEGER
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { clnpMediaToNetEntry 6 }

               -- the CLNP Error Group

               clnpInErrors    OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 1 }

               clnpOutErrors   OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 2 }

               clnpInErrUnspecs OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 3 }

               clnpInErrProcs  OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 4 }

               clnpInErrCksums OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 5 }

               clnpInErrCongests OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 6 }

               clnpInErrHdrs   OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 7 }

               clnpInErrSegs   OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 8 }

               clnpInErrIncomps OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 9 }

               clnpInErrDups   OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 10 }

               clnpInErrUnreachDsts OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 11 }

that's the whole routing table, the address translation tables and the error counters, all lined up like a runway ๐Ÿ’…๐Ÿฆ‹

Okay so this is where the error and ES-IS counters wrap up, bestie ๐ŸŽ€ Every one of these is a read-only Counter that's marked mandatory, and each one lives under its own OID number. Then the module hits its END ๐Ÿ’…

               clnpInErrUnknownDsts OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 12 }

               clnpInErrSRUnspecs OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 13 }

               clnpInErrSRSyntaxes OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 14 }

               clnpInErrSRUnkAddrs OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 15 }

               clnpInErrSRBadPaths OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 16 }

               clnpInErrHops   OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 17 }

               clnpInErrHopReassms OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 18 }

               clnpInErrUnsOptions OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 19 }

               clnpInErrUnsVersions OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 20 }

               clnpInErrUnsSecurities OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 21 }

               clnpInErrUnsSRs OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 22 }

               clnpInErrUnsRRs OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 23 }

               clnpInErrInterferences OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 24 }

               clnpOutErrUnspecs OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 25 }

               clnpOutErrProcs OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 26 }

               clnpOutErrCksums OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 27 }

               clnpOutErrCongests OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 28 }

               clnpOutErrHdrs OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 29 }

               clnpOutErrSegs  OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 30 }

               clnpOutErrIncomps OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 31 }

               clnpOutErrDups  OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 32 }

               clnpOutErrUnreachDsts OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 33 }

               clnpOutErrUnknownDsts OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 34 }

               clnpOutErrSRUnspecs OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 35 }

               clnpOutErrSRSyntaxes OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 36 }

               clnpOutErrSRUnkAddrs OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 37 }

               clnpOutErrSRBadPaths OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 38 }

               clnpOutErrHops  OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 39 }

               clnpOutErrHopReassms OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 40 }

               clnpOutErrUnsOptions OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 41 }

               clnpOutErrUnsVersions OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 42 }

               clnpOutErrUnsSecurities OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 43 }

               clnpOutErrUnsSRs OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 44 }

               clnpOutErrUnsRRs        OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 45 }

               clnpOutErrInterferences OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { error 46 }


               -- the CLNP Echo Group

               -- the ES-IS Group

               esisESHins      OBJECT-TYPE

                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { es-is 1 }

               esisESHouts     OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { es-is 2 }

               esisISHins      OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { es-is 3 }

               esisISHouts     OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { es-is 4 }

               esisRDUins      OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { es-is 5 }

               esisRDUouts     OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { es-is 6 }

               END

6. Identification of OBJECT instances for use with the SNMP โœจ

Every object type in the MIB gets its name spelled out, either in the Internet-standard MIB itself or in other docs that follow SMI naming rules. ๐ŸŽ€ The SMI also says that any conformant management protocol needs a way to point at individual instances of those types for one particular network element. Super important, obviously ๐Ÿ’–

Each instance is identified in SNMP operations by a unique name called its "variable name." ๐Ÿฆ‹ Usually that name is an OBJECT IDENTIFIER shaped like x.y. The x is the name of a non-aggregate object type from the MIB, and the y is an OBJECT IDENTIFIER fragment that picks out the exact instance, in a way that depends on the object type.

Why does this matter? It's what makes the SNMP get-next operator so powerful ๐Ÿ”ฅ Related variables get names that sit right next to each other when you sort every variable name in the MIB, so walking through them is smooth and easy.

Object types that follow one of the type-specific naming conventions below get names built that way. Anything that doesn't fit one of those conventions gets an OBJECT IDENTIFIER of the form x.0, where x is that object type's name in the MIB definition ๐ŸŒธ

For example, say you want the sysDescr instance from the Internet-standard MIB. The object class for sysDescr is:

   iso org dod internet mgmt mib system sysDescr
    1   3   6     1      2    1    1       1

So the object type, x, is 1.3.6.1.2.1.1.1, and then you append the instance sub-identifier 0. That makes 1.3.6.1.2.1.1.1.0 the one and only instance of sysDescr ๐Ÿ’…

6.1. clnpAddrTable Object Type Names

Now for the CLNP-addressable network element. The name of one, x, is the OBJECT IDENTIFIER z, where z is the value of that network element's clnpAdEntAddr instance. Each octet of the ClnpAddress type gets written as a sub-identifier of the OBJECT IDENTIFIER ๐Ÿงš

For any object type whose defined name, n, starts with clnpAddrEntry, an instance, i, of that type gets an OBJECT IDENTIFIER of the form n.y. Here, y is the name of the CLNP-addressable network element that i gives information about ๐Ÿฆ‹

Here's an example. Say you want the maximum reassembly size for an entry in the CLNP interface table that goes with the CLNP address NS+0504030201. The original text says the instance to use is:

clnpAdEntNetMask.5.5.4.3.2.1

Heads up, babe: the example describes the maximum reassembly size, but the name it uses is clnpAdEntNetMask. That's exactly how the original document words it, so it's written that way here too. ๐Ÿ‘‘

6.2. clnpRoutingTable Object Type Names โœจ

okay so, the name of a CLNP route, x, is the OBJECT IDENTIFIER z that you get by taking the value of that instance's clnpRouteDest object. Each octet of the ClnpAddress type becomes its own sub-identifier, so the destination turns into a dotted OBJECT IDENTIFIER ๐Ÿ’…

For each object type, t, whose defined name, n, starts with clnpRoutingEntry, an instance, i, of t gets named with an OBJECT IDENTIFIER of the form n.y. Here y is the name of the CLNP route that i is telling you about ๐Ÿฆ‹

Here's an example, bestie ๐ŸŽ€. Say you want the next hop of the routing table entry for the destination NS+0504030201. You'd look up clnpRouteNextHop.5.5.4.3.2.1 and boom, that's your instance ๐Ÿ”ฅ

Also, the agent gets to decide whether multiple routes to the same destination are visible ๐Ÿ‘€ To make that happen, the agent is required to return one entry for a CLNP route, x, in the form n.y. It may also return info about other routes to that same destination using the form n.y.v, where v is an implementation-dependent small, non-negative integer. So yeah, it's flexible but still structured ๐Ÿ’œ


6.3. clnpNetToMediaTable Object Type Names โœจ

ok so, a cached CLNP address, x, gets an OBJECT IDENTIFIER of the form s.z. Here's how the pieces fit together ๐Ÿงฉ

  • s is the value of that entry's clnpNetToMediaIfIndex object instance.
  • z is the value of the CLNP address in the clnpNetToMediaNetAddress object associated with x. Each octet of the ClnpAddress type is written as a sub-identifier of the OBJECT IDENTIFIER.

For each object type, t, whose defined name, n, starts with clnpNetToMediaEntry, an instance, i, of t gets named n.y. Here y is the name of the cached CLNP address that i describes ๐ŸŒธ

For example, imagine you want the media address of an entry in the address translation table for the CLNP address NS+0504030201 on interface 3. You'd use clnpNetToMediaPhysAddress.3.5.5.4.3.2.1 and you're set ๐Ÿซถ


6.4. clnpMediaToNetTable Object Type Names โœจ

this one's the mirror image, iykyk ๐Ÿ™ˆ A cached media address, x, gets an OBJECT IDENTIFIER of the form s.z.

  • s is the value of that entry's clnpMediaToNetIfIndex object instance.
  • z is the media address from the clnpMediaToNetMediaAddress object associated with x. Each octet of the media address is written as a sub-identifier of the OBJECT IDENTIFIER.

For each object type, t, whose defined name, n, starts with clnpMediaToNetEntry, an instance, i, of t is named n.y, where y is the name of the cached media address that i is about ๐Ÿ’–

Quick example: say you want the CLNP address of an entry in the address translation table for media address 08:00:20:00:38:ba on interface 3. The instance you want is clnpMediaToNetNetAddress.3.8.0.32.0.56.186 ๐Ÿงš


7. References โœจ

[1] Cerf, V., "IAB Recommendations for the Development of Internet Network Management Standards", RFC 1052, IAB, April 1988.

[2] Cerf, V., "Report of the Second Ad Hoc Network Management Review Group", RFC 1109, NRI, August 1989.

[3] Rose, M., and K. McCloghrie, "Structure and Identification of Management Information for TCP/IP-based Internets", RFC 1155, Performance Systems International and Hughes LAN Systems, May 1990.

[4] McCloghrie, K., and M. Rose, "Management Information Base for Network Management of TCP/IP-based Internets", RFC 1156, Hughes LAN Systems and Performance Systems International, May 1990.

[5] Case, J., M. Fedor, M. Schoffstall, and J. Davin, The Simple Network Management Protocol", RFC 1157, University of Tennessee at Knoxville, Performance Systems International, Performance Systems International, and the MIT Laboratory for Computer Science, May 1990.

[6] Rose, M., "Management Information Base for Network Management of TCP/IP-based internets: MIB-II", RFC 1158, Performance Systems International, May 1990.

[7] Information processing systems - Open Systems Interconnection, "Specification of Abstract Syntax Notation One (ASN.1)", International Organization for Standardization, International Standard 8824, December 1987.

[8] Information processing systems - Open Systems Interconnection, "Specification of Basic Encoding Rules for Abstract Notation One (ASN.1)", International Organization for Standardization, International Standard 8825, December 1987.

[9] Information processing systems - Data Communications - "Protocol for providing the Connectionless-mode Network Service and Provision of Underlying Service", International Organization for Standardization", International Standard 8473, May 1987.

[10] "End System to Intermediate System Routing Exchange Protocol for Use in Conjunction with the Protocol for the Provision of the Connectionless-mode Network Service (ISO 8473)", International Draft Proposal 9542.

[11] Kille, S., "A String Encoding of Presentation Address", Research Note RN/89/14, Department of Computer Science, University College London, February 1989.


8. Security Considerations โœจ

Security issues are not discussed in this memo. ๐Ÿ˜ญ Hold up, that's the whole security section, so if you're building on this, go find extra protection elsewhere ๐Ÿ”ฅ

9. Author's Address ๐Ÿ’…

Greg Satz
cisco Systems, Inc.
1350 Willow Road
Menlo Park, CA 94025

Phone: (415) 326-1941

Email: Satz@CISCO.COM

That's the whole RFC, bestie! ๐ŸŒˆโœจ

๐Ÿ“ฆ where this page comes from