RFC 1158

Management Information Base for network management of TCP/IP-based internets: MIB-II

๐Ÿ“… published May 1990, from ietf

RFC 1158 ๐ŸŽ€

This one is Management Information Base for Network Management of TCP/IP-based internets: MIB-II ๐Ÿ’œ It's from the Network Working Group, written by M. Rose, Editor, at Performance Systems International, dated May 1990. It's a Proposed Standard ๐ŸŒธ The text doesn't state an obsoletes or updates line. What it does say is that MIB-II builds on and extends RFC 1156 (MIB-I) without loss of compatibility, so it's basically MIB-I's glow-up โœจ

1. Status of this Memo โœจ

Okay so this memo defines the second version of the Management Information Base (MIB-II) for use with network management protocols in TCP/IP-based internets ๐Ÿฆ‹ It works together with its companion memos: RFC 1155 describes the structure of management information, and RFC 1157 is the network management protocol for TCP/IP-based internets. Bestie, these three together give you a simple, workable architecture for managing TCP/IP-based internets, and especially the Internet community ๐Ÿ’–

MIB-II includes everything technical from RFC 1156 on MIB-I and extends it without loss of compatibility ๐Ÿซถ But here's the tea: MIB-I as described in RFC 1156 is a full Standard Protocol of the Internet, while the MIB-II described here is a Proposed Standard Protocol of the Internet ๐Ÿ‘‘

This memo defines a mandatory extension to the base MIB (RFC 1156) and is a Proposed Standard for the Internet community ๐Ÿ’… The extensions here are currently Elective, but once they become a standard they'll have the same status as RFC 1156, which is Recommended ๐ŸŒˆ The Internet Activities Board (IAB) recommends that all IP and TCP implementations be network manageable. That means implementing the Internet MIB (RFC 1156 plus the extensions in RFC 1158) and at least one of the two recommended management protocols, SNMP (RFC 1157) or CMOT (RFC 1095) ๐Ÿ“

This version, MIB-II, is an incremental refinement of MIB-I ๐Ÿงš It was designed around two criteria. First, changes were made in response to new operational requirements in the Internet. Second, the changes are entirely upwards compatible, so the network's managed nodes can move from MIB-I to MIB-II without a big disruption ๐ŸŒธ

More MIB groups and variables are expected to be defined over time, so the monitoring and control needs of new or changing parts of the Internet can be covered โญ

Please check the latest edition of the "IAB Official Protocol Standards" RFC for the current state and status of standard Internet protocols ๐Ÿ”ฅ

Distribution of this memo is unlimited ๐Ÿฆ‹

Table of Contents โœจ

   1. Status of this Memo ..................................    1
   2. Introduction .........................................    3
   3. Changes from MIB-I ...................................    4
   3.1 Deprecated Objects ..................................    4
   3.2 Display Strings .....................................    5
   3.3 The System Group ....................................    5
   3.4 The Interfaces Group ................................    5
   3.5 The Address Translation Group .......................    6
   3.6 The IP Group ........................................    7
   3.7 The ICMP Group ......................................    7
   3.8 The TCP Group .......................................    7
   3.9 The UDP Group .......................................    7
   3.10 The EGP Group ......................................    8
   3.11 The Transmission Group .............................    8
   3.12 The SNMP Group .....................................    8
   4. Objects ..............................................    8
   4.1 Object Groups .......................................    9
   4.2 Format of Definitions ...............................   10
   5. Object Definitions ...................................   10
   5.1 The System Group ....................................   11
   5.2 The Interfaces Group ................................   14
   5.2.1 The Interfaces table ..............................   15
   5.3 The Address Translation Group .......................   27
   5.4 The IP Group ........................................   30
   5.4.1 The IP Address table ..............................   38
   5.4.2 The IP Routing table ..............................   41
   5.4.3 The IP Address Translation table ..................   48
   5.5 The ICMP Group ......................................   51
   5.6 The TCP Group .......................................   61
   5.6.1 The TCP Connection table ..........................   66
   5.6.2 Additional TCP Objects ............................   69
   5.7 The UDP Group .......................................   70
   5.7.1 The UDP Listener table ............................   72
   5.8 The EGP Group .......................................   73
   5.8.1 The EGP Neighbor table ............................   75
   5.8.2 Additional EGP variables ..........................   83
   5.9 The Transmission Group ..............................   83
   5.10 The SNMP Group .....................................   83
   6. Definitions ..........................................   95
   7. Identification of OBJECT instances for use with  the
      SNMP .................................................  126
   7.1 ifTable Object Type Names ...........................  127
   7.2 atTable Object Type Names ...........................  127
   7.3 ipAddrTable Object Type Names .......................  128
   7.4 ipRoutingTable Object Type Names ....................  128
   7.5 ipNetToMediaTable Object Type Names .................  129
   7.6 tcpConnTable Object Type Names ......................  129
   7.7 udpTable Object Type Names ..........................  130
   7.8 egpNeighTable Object Type Names .....................  130
   8.  Acknowledgements ....................................  130
   9.  References ..........................................  131
   10. Security Considerations..............................  133
   11. Author's Address.....................................  133

2. Introduction ๐ŸŒท

As reported in RFC 1052, IAB Recommendations for the Development of Internet Network Management Standards [1], there was a two-prong strategy for network management of TCP/IP-based internets ๐Ÿ’… In the short term, the Simple Network Management Protocol (SNMP) was to be used to manage nodes in the Internet community. In the long term, the use of the OSI network management framework was to be examined. Two documents were produced to define the management information: RFC 1065, which defined the Structure of Management Information (SMI) [2], and RFC 1066, which defined the Management Information Base (MIB) [3]. Both were designed to be compatible with both SNMP and the OSI network management framework ๐Ÿซถ

This strategy was a huge success in the short term ๐Ÿ”ฅ Internet-based network management technology was fielded by both the research and commercial communities within a few months. Because of this, parts of the Internet community became network manageable in a timely fashion ๐Ÿฆ‹

As reported in RFC 1109, Report of the Second Ad Hoc Network Management Review Group [4], the requirements of the SNMP and the OSI network management frameworks turned out to be more different than anyone anticipated ๐Ÿ™ˆ So the requirement for compatibility between the SMI/MIB and both frameworks was suspended. That let the operational network management framework, SNMP, respond to new operational needs in the Internet community by producing this document โœจ

So the current network management framework for TCP/IP-based internets is made of three pieces ๐Ÿงš First, Structure and Identification of Management Information for TCP/IP-based internets, RFC 1155 [13], which describes how managed objects in the MIB are defined. Second, this memo, Management Information Base for Network Management of TCP/IP-based internets (version 2), which describes the managed objects contained in the MIB. Third, the Simple Network Management Protocol, RFC 1157 [14], which defines the protocol used to manage these objects ๐Ÿ’œ

Consistent with the IAB directive to produce simple, workable systems in the short term, the list ofc objects (e.g., for BSD UNIX) were excluded.

  1. It was agreed to avoid heavily instrumenting critical sections of code. The general guideline was one counter per critical section per layer.
Heads up, bestie: the source text jumps straight from that sentence to item "7)" here, so the earlier items in that list seem to be missing from the document as provided. I've kept what's there exactly as it appears.

3. Changes from MIB-I ๐Ÿ“

Features of this MIB include:

  1. incremental additions to reflect new operational requirements;
  2. upwards compatibility with the SMI/MIB and the SNMP;
  3. improved support for multi-protocol entities; and,
  4. textual clean-up of the MIB to improve clarity and readability.

The objects defined in MIB-II have the OBJECT IDENTIFIER prefix:

               mib-2      OBJECT IDENTIFIER ::= { mgmt 1 }

3.1. Deprecated Objects ๐ŸŒธ

To better prepare implementors for future changes to the MIB, a new term, "deprecated", may be used when describing an object ๐Ÿงš A deprecated object in the MIB is one which must be supported, but which will most likely be removed from the next version of the MIB (e.g., MIB-III).

MIB-II marks one object as being deprecated: atTable ๐Ÿ’…

As a result of deprecating the atTable object, the entire Address Translation group is deprecated ๐Ÿฅ€

Note that no functionality is lost with the deprecation of these objects: new objects providing equivalent or superior functionality are defined in MIB-II โœจ

3.2. Display Strings ๐Ÿฆ‹

In the past there have been misinterpretations of the MIB about when a string of octets should contain printable characters meant to be displayed to a human ๐Ÿ™ˆ To fix that, a textual convention is introduced in the MIB, the datatype:

                  DisplayString ::= OCTET STRING

A DisplayString is restricted to the NVT ASCII character set, as defined on pages 10-11 of [7] ๐Ÿซถ

The following objects are now defined in terms of DisplayString:

  • sysDescr
  • ifDescr

It should be noted that this change has no effect on either the syntax or the semantics of these objects. Using the DisplayString notation is just an artifact of the explanatory method used in MIB-II and future MIBs ๐Ÿ’–

Further, it should be noted that any object defined in terms of OCTET STRING may contain arbitrary binary data, in which each octet may take any value from 0 to 255 (decimal) ๐ŸŒˆ

3.3. The System Group โญ

Four new objects are added to this group:

                  sysContact
                  sysName
                  sysLocation
                  sysServices

These provide contact, administrative, location, and service information about the managed node ๐ŸŽ€

3.4. The Interfaces Group ๐Ÿ”ฅ

The definition of the ifNumber object was incorrect, because it required all interfaces to support IP. For example, devices without IP, such as MAC-layer bridges, could not be managed if this definition was strictly followed. The description of the ifNumber object has been changed accordingly ๐Ÿ‘‘

The ifTable object was mistakenly marked as read-write. It has been (correctly) re-designated as read-only ๐Ÿ’… In addition, several new values have been added to the ifType column in the ifTable object:

                  ppp(23)
                  softwareLoopback(24)
                  eon(25)
                  ethernet-3Mbit(26)
                  nsip(27)
                  slip(28)

Finally, a new column has been added to the ifTable object:

                  ifSpecific

It provides information about the media being used to realize the interface ๐Ÿงš


3.5. The Address Translation Group ๐Ÿ—บ๏ธ

okay so in MIB-I, this group had a table that let you map network addresses (like IP addresses) to physical addresses (like MAC addresses) ๐ŸŒธ. Experience showed that efficient implementations of this table were quietly making two assumptions: there's only a single network protocol environment, and mappings only ever go from network address to physical address.

Those two assumptions got wrecked ๐Ÿ’€. Multi-protocol nodes (like ones running both IP and CLNP at once) and the need for the inverse mapping (like for ES-IS) both showed up, so the atTable object is now declared deprecated ๐Ÿฅ€.

So MIB-II and its successors will allocate up to two address translation tables inside each network protocol group ๐Ÿฆ‹. The IP group gets one table for going from IP addresses to physical addresses. Same deal for CLNP: when a document defining MIB objects for the CLNP is produced (e.g., [8]), it will contain two tables, one for each direction, because that's required for full functionality โœจ.

Also, choosing two tables (one per direction of mapping) is easier to implement in many cases, and it doesn't put undue burden on implementations that handle the address translation abstraction with a single internal table ๐Ÿ’….

3.6. The IP Group ๐ŸŒˆ

The access attribute of the variable ipForwarding has been changed from read-only to read-write ๐Ÿ”ฅ.

There's also a new column in the ipAddrTable object:

ipAdEntReasmMaxSize

which keeps track of the largest IP datagram that can be re-assembled on a particular interface ๐Ÿ“ฆ. And there's a new column in the ipRoutingTable object:

ipRouteMask

which is used by IP routing subsystems that support arbitrary subnet masks ๐ŸŽ€.

One new object is added to the IP group:

ipNetToMediaTable

It's the address translation table for the IP group, giving you identical functionality to the now deprecated atTable in the address translation group ๐Ÿซถ.

3.7. The ICMP Group ๐Ÿงš

There are no changes to this group ๐Ÿคทโ€โ™€๏ธ.

3.8. The TCP Group ๐Ÿ’œ

Two new variables are added:

tcpInErrs
tcpOutRsts

They keep track of the number of incoming TCP segments in error, and the number of resets generated by a TCP ๐Ÿšจ.

3.9. The UDP Group ๐Ÿ“

A new table:

udpTable

is added โœจ.

3.10. The EGP Group ๐Ÿ›ฐ๏ธ

Experience has shown a need for more objects that are useful in EGP monitoring ๐Ÿ‘€. On top of several additions to the egpNeighborTable object, a new variable is added:

egpAs

which gives the autonomous system associated with this EGP entity ๐Ÿ‘‘.

3.11. The Transmission Group ๐Ÿ“ก

MIB-I was lacking because it didn't distinguish between different types of transmission media ๐Ÿ˜ค. So a new group, the Transmission group, is allocated for this purpose:

transmission OBJECT IDENTIFIER ::= { mib-2 10 }

When Internet-standard definitions for managing transmission media are defined, the transmission group is used to provide a prefix for the names of those objects ๐Ÿ’–.

Typically, those definitions live in the experimental portion of the MIB until they're "proven." Then, as part of the Internet standardization process, they get elevated and a new object identifier under the transmission group is defined. By convention, the name assigned is:

type OBJECT IDENTIFIER    ::= { transmission number }

where "type" is the symbolic value used for the media in the ifType column of the ifTable object, and "number" is the actual integer value corresponding to that symbol ๐Ÿง .

3.12. The SNMP Group ๐Ÿ“Š

The application-oriented working groups of the IETF have been tasked with being receptive to defining MIB variables specific to their respective applications ๐Ÿ™Œ.

For SNMP, statistical information is useful, so a new group, the SNMP group, is allocated for this purpose:

snmp   OBJECT IDENTIFIER ::= { mib-2 11 }

4. Objects ๐Ÿงฉ

Managed objects are accessed via a virtual information store, called the Management Information Base, or MIB ๐Ÿ—‚๏ธ. Objects in the MIB are defined using Abstract Syntax Notation One (ASN.1) [9].

The mechanisms for describing these objects are specified in the companion memo, 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 a specific instantiation of the object. For human convenience, we often use a textual string, called the OBJECT DESCRIPTOR, to also refer to the object type ๐Ÿซถ.

The syntax of an object type defines the abstract data structure for that object type, and ASN.1 is used for this purpose. However, the companion memo purposely restricts which ASN.1 constructs may be used, and those restrictions are made explicitly for simplicity ๐Ÿ’….

The encoding of an object type is simply how that object type is represented using its syntax. Implicitly tied to the syntax and encoding is how the object type is represented when it's transmitted on the network. This memo specifies the use of the basic encoding rules (BER) of ASN.1 [10], subject to the additional requirements imposed by the SNMP [14] ๐Ÿ”.

4.1. Object Groups ๐Ÿ—ƒ๏ธ

Since this list of managed objects contains only the essential elements, there's no need to allow individual objects to be optional. Instead, the objects are arranged into the following groups:

  • System
  • Interfaces
  • Address Translation (deprecated)
  • IP
  • ICMP
  • TCP
  • UDP
  • EGP
  • Transmission
  • SNMP

There are two reasons for defining these groups. One is to provide a means of assigning object identifiers. The other is to give implementations of managed agents a method for knowing which objects they must implement ๐ŸŽฏ. That method works like this: if the semantics of a group are applicable to an implementation, then it must implement all objects in that group. For example, an implementation must implement the EGP group if and only if it implements the EGP ๐Ÿ™ˆ.

4.2. Format of Definitions ๐Ÿ“

The next section contains the specification of all object types in the MIB. Following the conventions of the companion memo, the object types are defined using the following 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 using ASN.1. This must resolve to an instance of the ASN.1 type ObjectSyntax defined in the SMI.

Definition: A textual description of the semantics of the object type. Implementations should ensure that their interpretation of the object type fulfills this definition, since this MIB is intended for use in multi-vendor environments. So it's vital that object types have consistent meaning across all machines ๐ŸŒ.

Access: A keyword, one of read-only, read-write, write-only, or not-accessible. This designation specifies the minimum level of support required. As a local matter, implementations may support other access types (e.g., an implementation may elect to permit writing a variable marked herein as read-only). Further, protocol-specific "views" (e.g., those implied by an SNMP community) may make further restrictions on access to a variable ๐Ÿ”’.

Status: A keyword, one of mandatory, optional, obsolete, or deprecated. Use of deprecated implies mandatory status ๐Ÿฅน.

5. Object Definitions ๐Ÿ“œ

               RFC1158-MIB

               DEFINITIONS ::= BEGIN
               IMPORTS
                       mgmt, OBJECT-TYPE, NetworkAddress, IpAddress,
                       Counter, Gauge, TimeTicks
                           FROM RFC1155-SMI;

               DisplayString ::=
                           OCTET STRING


               mib-2      OBJECT IDENTIFIER ::= { mgmt 1 }    -- MIB-II

               system     OBJECT IDENTIFIER ::= { mib-2 1 }
               interfaces OBJECT IDENTIFIER ::= { mib-2 2 }
               at         OBJECT IDENTIFIER ::= { mib-2 3 }
               ip         OBJECT IDENTIFIER ::= { mib-2 4 }
               icmp       OBJECT IDENTIFIER ::= { mib-2 5 }
               tcp        OBJECT IDENTIFIER ::= { mib-2 6 }
               udp        OBJECT IDENTIFIER ::= { mib-2 7 }
               egp        OBJECT IDENTIFIER ::= { mib-2 8 }
               -- cmot    OBJECT IDENTIFIER ::= { mib-2 9 }
               transmission OBJECT IDENTIFIER ::= { mib-2 10 }
               snmp       OBJECT IDENTIFIER ::= { mib-2 11 }
               END

5.1. The System Group

Okay bestie, the System group is mandatory for all systems ๐Ÿ’… so every box needs this one. ๐ŸŽ€

OBJECT:
-------
     sysDescr { system 1 }

Syntax:
     DisplayString (SIZE (0..255))

sysDescr is basically the box's bio โœจ It's a textual description of the entity, and it should spill the full name and version of the system's hardware type, operating system, and networking software. It is mandatory that this only contains printable ASCII characters ๐Ÿ™ˆ

Access: read-only Status: mandatory

OBJECT:
-------
     sysObjectID { system 2 }

Syntax:
     OBJECT IDENTIFIER

sysObjectID is the vendor's official ID for the network management subsystem inside the entity, and it's giving "what kind of box is this" ๐Ÿฆ‹ It's allocated within the SMI enterprises subtree (1.3.6.1.4.1), which makes it easy and unambiguous to tell what you're managing. For example, if the vendor "Flintstones, Inc." was assigned the subtree 1.3.6.1.4.1.4242, it could give its "Fred Router" the identifier 1.3.6.1.4.1.4242.1.1 ๐Ÿชจ

Access: read-only Status: mandatory

OBJECT:
-------
     sysUpTime { system 3 }

Syntax:
     TimeTicks

sysUpTime counts the time, in hundredths of a second, since the network management portion of the system was last re-initialized โฑ๏ธ Main character timer energy ๐Ÿ‘‘

Access: read-only Status: mandatory

OBJECT:
-------
     sysContact { system 4 }

Syntax:
     DisplayString (SIZE (0..255))

sysContact is the textual identification of the contact person for this managed node, plus info on how to reach them ๐Ÿ“ž Basically the "who do I text when this breaks" slot ๐Ÿซถ

Access: read-write Status: mandatory

OBJECT:
-------
     sysName { system 5 }

Syntax:
     DisplayString (SIZE (0..255))

sysName is an administratively-assigned name for this managed node. By convention, it's the node's fully-qualified domain name ๐ŸŒˆ Very organised, very iconic.

Access: read-write Status: mandatory

OBJECT:
-------
     sysLocation { system 6 }

Syntax:
     DisplayString (SIZE (0..255))

sysLocation is the physical location of the node, like "telephone closet, 3rd floor" ๐Ÿงš Honestly the most relatable one on this list.

Access: read-only Status: mandatory

OBJECT:
-------
     sysServices { system 7 }

Syntax:
     INTEGER (0..127)

okay this one is a little math, but I promise it's cute ๐Ÿงฎ sysServices is a value that shows the set of services this entity potentially offers. It's a sum! It starts at zero, and then for each layer, L, from 1 through 7 that the node does transactions for, you add 2 raised to (L - 1) ๐Ÿ’– For example, a node that only does routing would be 4 (2^(3-1)), and a host offering application services would be 72 (2^(4-1) + 2^(7-1)) ๐Ÿ˜ญ That's the kind of math I'm obsessed with.

When it comes to the Internet suite of protocols, you should calculate the values like this ๐ŸŒธ

    layer  functionality
    1      physical (e.g., repeaters)
    2      datalink/subnetwork (e.g., bridges)
    3      internet (e.g., supports the IP)
    4      end-to-end  (e.g., supports the TCP)
    7      applications (e.g., supports the SMTP)

And if the system includes OSI protocols, layers 5 and 6 may also be counted โœจ

Access: read-only Status: mandatory


5.2. The Interfaces Group

Implementation of the Interfaces group is mandatory for all systems, so no skipping this one ๐Ÿซถ

OBJECT:
-------
     ifNumber { interfaces 1 }

Syntax:
     INTEGER

ifNumber is the number of network interfaces on this system, and it counts them regardless of their current state ๐Ÿ”ข

Access: read-only Status: mandatory

5.2.1. The Interfaces table

Okay so the Interfaces table holds info on the entity's interfaces ๐ŸŽ€ Each interface is thought of as being attached to a "subnetwork". Quick heads up, don't mix this up with "subnet", which is an addressing partitioning scheme used in the Internet suite of protocols ๐Ÿ™ˆ Two very different vibes.

OBJECT:
-------
     ifTable { interfaces 2 }

Syntax:
     SEQUENCE OF IfEntry

ifTable is the list of interface entries. The number of entries is given by the value of ifNumber ๐Ÿ“‹

Access: read-only Status: mandatory

OBJECT:
-------
     ifEntry { ifTable 1 }

Syntax:
     IfEntry ::= SEQUENCE {
          ifIndex
              INTEGER,
          ifDescr
              DisplayString,
          ifType
              INTEGER,
          ifMtu
              INTEGER,
          ifSpeed
              Gauge,
          ifPhysAddress
              OCTET STRING,
          ifAdminStatus
              INTEGER,
          ifOperStatus
              INTEGER,
          ifLastChange
              TimeTicks,
          ifInOctets
              Counter,
          ifInUcastPkts
              Counter,
          ifInNUcastPkts
              Counter,
          ifInDiscards
              Counter,
          ifInErrors
              Counter,
          ifInUnknownProtos
              Counter,
          ifOutOctets
              Counter,
          ifOutUcastPkts
              Counter,
          ifOutNUcastPkts
              Counter,
          ifOutDiscards
              Counter,
          ifOutErrors
              Counter,
          ifOutQLen
              Gauge,
          ifSpecific
              OBJECT IDENTIFIER
     }

An ifEntry is an interface entry with objects at the subnetwork layer and below, for one particular interface ๐Ÿฆ‹

Access: read-only Status: mandatory

We now consider the individual components of each interface entry ๐Ÿ‘€

OBJECT:
-------
     ifIndex { ifEntry 1 }

Syntax:
     INTEGER

ifIndex is a unique value for each interface. It ranges between 1 and the value of ifNumber ๐Ÿ”‘ The value for each interface must stay constant, at least from one re-initialization of the entity's network management system to the next re-initialization. Stability is everything ๐Ÿ’…

Access: read-only Status: mandatory

OBJECT:
-------
     ifDescr { ifEntry 2 }

Syntax:
     DisplayString (SIZE (0..255))

ifDescr is a textual string with info about the interface. It should include the manufacturer's name, the product name, and the version of the hardware interface ๐Ÿท๏ธ

Access: read-only Status: mandatory

OBJECT:
-------
     ifType { ifEntry 3 }

Syntax:
     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),
          t1-carrier(18),
          cept(19),          -- european equivalent of T-1
          basicISDN(20),
          primaryISDN(21),
                              -- proprietary serial
          propPointToPointSerial(22),
          ppp(23),
          softwareLoopback(24),
          eon(25),            -- CLNP over IP [12]
          ethernet-3Mbit(26)
          nsip(27),           -- XNS over IP
          slip(28)            -- generic SLIP
     }

ifType is the type of interface, sorted by the physical or link protocol(s) sitting right "below" the network layer in the stack ๐Ÿงฉ So many flavours, it's giving buffet ๐Ÿ“

Access: read-only Status: mandatory

OBJECT:
-------
     ifMtu { ifEntry 4 }

Syntax:
     INTEGER

ifMtu is the size of the largest datagram that can be sent or received on the interface, in octets ๐Ÿ“ฆ For interfaces used to transmit network datagrams, it's the size of the biggest one that can go out on that interface ๐Ÿš€

Access: read-only Status: mandatory

OBJECT:
-------
     ifSpeed { ifEntry 5 }

Syntax:
     Gauge

ifSpeed is an estimate of the interface's current bandwidth in bits per second โšก For interfaces whose bandwidth doesn't change, or where no accurate estimate can be made, this should hold the nominal bandwidth ๐Ÿ’œ

Access: read-only Status: mandatory

OBJECT:
-------
     ifPhysAddress { ifEntry 6 }

Syntax:
     OCTET STRING

ifPhysAddress is the interface's address at the protocol layer right "below" the network layer ๐Ÿชช If the interface doesn't have an address like that (a serial line, for example), this should be an octet string of zero length ๐Ÿซง

Access: read-only Status: mandatory

OBJECT:
-------
     ifAdminStatus { ifEntry 7 }

Okay so picking up right where the ifAdminStatus stuff left off ๐Ÿ’–

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

Definition: This is the state the interface is supposed to be in โœจ. Also, testing(3) means no operational packets can pass, so keep that in mind ๐Ÿ™ˆ

Access: read-write. Status: mandatory. ๐Ÿซถ

ifOperStatus { ifEntry 8 } ๐Ÿฆ‹

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

Definition: This is the current operational state of the interface, aka what it's actually doing right now ๐Ÿ‘‘. Again, testing(3) means no operational packets can be passed.

Access: read-only. Status: mandatory. ๐Ÿ’…

ifLastChange { ifEntry 9 } โฑ๏ธ

Syntax:
     TimeTicks

Definition: This is the value of sysUpTime at the moment the interface entered its current operational state. Tea โ˜• If the current state was entered before the last re-initialization of the local network management subsystem, this object holds a zero value, so it's giving reset energy ๐ŸŒธ

Access: read-only. Status: mandatory. โœจ

ifInOctets { ifEntry 10 } ๐Ÿ“

Syntax:
     Counter

Definition: The total number of octets received on the interface, including framing characters. Literally every byte ๐Ÿงš

Access: read-only. Status: mandatory. ๐Ÿ’–

ifInUcastPkts { ifEntry 11 } ๐ŸŽ€

Syntax:
     Counter

Definition: The number of subnetwork-unicast packets that got delivered to a higher-layer protocol. Delivered = it made it, bestie ๐Ÿ’Œ

Access: read-only. Status: mandatory. ๐ŸŒˆ

ifInNUcastPkts { ifEntry 12 } ๐Ÿ“ฃ

Syntax:
     Counter

Definition: The number of non-unicast packets delivered to a higher-layer protocol. Non-unicast means (i.e., subnetwork-broadcast or subnetwork-multicast) ๐Ÿ”Š

Access: read-only. Status: mandatory. ๐Ÿฆ‹

ifInDiscards { ifEntry 13 } ๐Ÿ—‘๏ธ

Syntax:
     Counter

Definition: The number of inbound packets that were chosen to be discarded, even though no errors had been detected to stop them being deliverable to a higher-layer protocol. Why would you do that? One possible reason is to free up buffer space ๐Ÿงน Lowkey iconic of it ๐Ÿ™ˆ

Access: read-only. Status: mandatory. ๐Ÿ’…

ifInErrors { ifEntry 14 } ๐Ÿ’€

Syntax:
     Counter

Definition: The number of inbound packets that had errors preventing them from being deliverable to a higher-layer protocol. Big oof ๐Ÿ˜ญ

Access: read-only. Status: mandatory. โœจ

ifInUnknownProtos { ifEntry 15 } โ“

Syntax:
     Counter

Definition: The number of packets received via the interface that were discarded because of an unknown or unsupported protocol. Not it ๐Ÿ™…โ€โ™€๏ธ

Access: read-only. Status: mandatory. ๐Ÿซถ

ifOutOctets { ifEntry 16 } ๐Ÿ“ค

Syntax:
     Counter

Definition: The total number of octets transmitted out of the interface, including framing characters. Every single byte going out, periodt ๐Ÿ’…

Access: read-only. Status: mandatory. ๐ŸŒธ

ifOutUcastPkts { ifEntry 17 } ๐ŸŽ€

Syntax:
     Counter

Definition: The total number of packets that higher-level protocols asked to be transmitted to a subnetwork-unicast address, including the ones that were discarded or not sent. Asking counts, even if it didn't go through ๐Ÿฅบ

Access: read-only. Status: mandatory. ๐Ÿ’–

ifOutNUcastPkts { ifEntry 18 } ๐Ÿ“ข

Syntax:
     Counter

Definition: The total number of packets that higher-level protocols asked to be transmitted to a non-unicast address (i.e., a subnetwork-broadcast or subnetwork-multicast address), including the discarded or not-sent ones too ๐ŸŒˆ

Access: read-only. Status: mandatory. โœจ

ifOutDiscards { ifEntry 19 } ๐Ÿ—‘๏ธ

Syntax:
     Counter

Definition: The number of outbound packets that were chosen to be discarded, even though no errors had been detected to stop them being transmitted. Same energy as ifInDiscards: one possible reason is to free up buffer space ๐Ÿงน

Access: read-only. Status: mandatory. ๐Ÿ‘‘

ifOutErrors { ifEntry 20 } ๐Ÿ˜ญ

Syntax:
     Counter

Definition: The number of outbound packets that could not be transmitted because of errors. Rough day ๐Ÿ’€

Access: read-only. Status: mandatory. ๐Ÿซถ

ifOutQLen { ifEntry 21 } ๐Ÿ“

Syntax:
     Gauge

Definition: The length of the output packet queue, measured in packets. Basically how long the line is ๐Ÿงš

Access: read-only. Status: mandatory. ๐Ÿฆ‹

ifSpecific { ifEntry 22 } ๐Ÿ”

Syntax:
     OBJECT IDENTIFIER

Definition: This is a reference to the MIB definitions specific to whatever media is realizing the interface. For example, if the interface is realized by an ethernet, this object points to a document defining ethernet-specific objects ๐Ÿงƒ If an agent isn't configured with a value for any of these variables, the object identifier below gets returned:

nullSpecific OBJECT IDENTIFIER ::= { 0 0 }

Note that "nullSpecific" is syntactically valid (it's a legit OID, no cap). Any conformant implementation of ASN.1 and BER must be able to generate and recognize this value ๐ŸŽ€

Access: read-only. Status: mandatory. ๐Ÿ’…


5.3. The Address Translation Group โœจ

Implementation of the Address Translation group is mandatory for all systems. Note however that this group is deprecated by MIB-II. That is, it's only being included for compatibility with MIB-I nodes, and will most likely be excluded from MIB-III nodes. From MIB-II onward, each network protocol group has its own address translation tables ๐ŸŒธ

The Address Translation group contains one table, which is the union across all interfaces of the translation tables for converting a NetworkAddress (e.g., an IP address) into a subnetwork-specific address. For lack of a better term, this document calls such a subnetwork-specific address a "physical" address ๐Ÿซถ

Examples of these translation tables: for broadcast media where ARP is in use, the translation table is equivalent to the ARP cache. Or, on an X.25 network where non-algorithmic translation to X.121 addresses is required, the translation table holds the NetworkAddress to X.121 address equivalences ๐Ÿฆ‹

atTable { at 1 } ๐Ÿ—บ๏ธ

Syntax:
     SEQUENCE OF AtEntry

Definition: The Address Translation tables hold the NetworkAddress to "physical" address equivalences. Some interfaces don't use translation tables to determine address equivalences (e.g., DDN-X.25 has an algorithmic method). If all interfaces are this type, the Address Translation table is empty, i.e., has zero entries ๐Ÿ™ˆ

Access: read-write. Status: deprecated. ๐Ÿ’€

atEntry { atTable 1 } ๐Ÿงฉ

Syntax:
     AtEntry ::= SEQUENCE {
          atIfIndex
              INTEGER,
          atPhysAddress
              OCTET STRING,
          atNetAddress
              NetworkAddress
     }

Definition: Each entry holds one NetworkAddress to "physical" address equivalence ๐Ÿ’–

Access: read-write. Status: deprecated. โœจ

Now let's look at the individual pieces of each Address Translation table entry ๐Ÿ‘€

atIfIndex { atEntry 1 } ๐Ÿ”ข

Syntax:
     INTEGER

Definition: The interface where this entry's equivalence is effective. The interface identified by a particular value of this index is the same interface identified by the same value of ifIndex ๐ŸŽ€

Access: read-write. Status: deprecated. ๐ŸŒˆ

atPhysAddress { atEntry 2 } ๐Ÿ”Œ

Syntax:
     OCTET STRING

Definition: The media-dependent "physical" address.

Setting this object to a null string (one of zero length) has the effect of invalidating the corresponding entry in the atTable object. Basically it disassociates the interface from that entry's mapping ๐Ÿ’€ Whether the agent actually removes an invalidated entry from the table is an implementation-specific matter. So management stations must be prepared to receive tabular information from agents that corresponds to entries not currently in use. To properly interpret such entries, you have to check the relevant atPhysAddress object ๐Ÿ•ต๏ธโ€โ™€๏ธ

Access: read-write. Status: deprecated. ๐Ÿ˜ญ

atNetAddress { atEntry 3 } ๐ŸŒ

Syntax:
     NetworkAddress

Definition: The NetworkAddress (e.g., the IP address) corresponding to the media-dependent "physical" address ๐Ÿ’œ

Access: read-write. Status: deprecated. ๐Ÿซถ

5.4. The IP Group โœจ

bestie, the IP group is mandatory for all systems ๐Ÿ’… no exceptions, so every single box has to have it ๐Ÿซถ

ipForwarding ๐Ÿฆ‹

OBJECT:
-------
     ipForwarding { ip 1 }

Syntax:
     INTEGER {
          forwarding(1),    -- i.e., acting as a gateway
          not-forwarding(2) -- i.e., NOT acting as a gateway
     }

okay so this one tells you whether the entity is acting as an IP gateway, meaning whether it forwards the datagrams it receives that aren't addressed to it. gateways forward ๐Ÿš€ hosts don't, except for the ones that get source-routed through the host ๐Ÿ‘€

Access: read-write. Status: mandatory.

ipDefaultTTL ๐ŸŒธ

OBJECT:
-------
     ipDefaultTTL { ip 2 }

Syntax:
     INTEGER

this is the default value that goes into the Time-To-Live field of the IP header for datagrams this entity starts itself ๐Ÿ’– it only kicks in when the transport layer protocol doesn't hand over a TTL value of its own ๐Ÿงš

Access: read-write. Status: mandatory.

ipInReceives ๐Ÿ’œ

OBJECT:
-------
     ipInReceives { ip 3 }

Syntax:
     Counter

the total count of input datagrams that came in from the interfaces โœจ this includes the ones that showed up with errors too, so nothing gets quietly left out ๐Ÿ˜ญ

Access: read-only. Status: mandatory.

ipInHdrErrors ๐Ÿ“

OBJECT:
-------
     ipInHdrErrors { ip 4 }

Syntax:
     Counter

this one counts the input datagrams that got tossed because their IP headers were messed up ๐Ÿ’€ that covers bad checksums, a version number mismatch, other format errors, time-to-live exceeded, and errors found while processing their IP options, etc.

Access: read-only. Status: mandatory.

ipInAddrErrors ๐ŸŽ€

OBJECT:
-------
     ipInAddrErrors { ip 5 }

Syntax:
     Counter

these are the datagrams that got discarded because the destination address in their header wasn't a valid one to receive at this entity ๐Ÿ™ˆ invalid addresses like 0.0.0.0 count, and so do addresses from unsupported Classes like Class E. for entities that aren't IP Gateways, and so don't forward anything, this also counts datagrams whose destination wasn't a local address.

Access: read-only. Status: mandatory.

ipForwDatagrams ๐Ÿ”ฅ

OBJECT:
-------
     ipForwDatagrams { ip 6 }

Syntax:
     Counter

this counts the input datagrams where this entity wasn't the final IP destination, so it went looking for a route to forward them onward ๐Ÿ›ฃ๏ธ for entities that aren't acting as IP Gateways, only the packets that were Source-Routed through this entity count here, and only if the Source-Route option processing worked out.

Access: read-only. Status: mandatory.

ipInUnknownProtos ๐Ÿ‘‘

OBJECT:
-------
     ipInUnknownProtos { ip 7 }

Syntax:
     Counter

locally addressed datagrams that arrived successfully but got discarded because the protocol was unknown or unsupported ๐Ÿฅฒ they made it all the way here and still got bounced

Access: read-only. Status: mandatory.

ipInDiscards ๐ŸŒˆ

OBJECT:
-------
     ipInDiscards { ip 8 }

Syntax:
     Counter

these are input IP datagrams that had no problems stopping them from being processed, but got dropped anyway, for example because there wasn't enough buffer space ๐Ÿ˜ค quick note: this counter does not include anything thrown out while it was waiting for re-assembly.

Access: read-only. Status: mandatory.

ipInDelivers ๐Ÿงš

OBJECT:
-------
     ipInDelivers { ip 9 }

Syntax:
     Counter

the total number of input datagrams that were successfully delivered to the IP user-protocols, ICMP included ๐Ÿซถ the bestie delivery count โœจ

Access: read-only. Status: mandatory.

ipOutRequests ๐Ÿ’…

OBJECT:
-------
     ipOutRequests { ip 10 }

Syntax:
     Counter

this is the total of IP datagrams that the local IP user-protocols (ICMP included) handed to IP to be sent ๐Ÿ“ฎ heads up, it does not include anything already counted in ipForwDatagrams, so no double counting, periodt ๐Ÿ’–

Access: read-only. Status: mandatory.

ipOutDiscards ๐Ÿ“

OBJECT:
     ipOutDiscards { ip 11 }

Syntax:
     Counter

output IP datagrams that had no problem getting sent to their destination, but got discarded anyway, like when there's no buffer space left ๐Ÿฅบ fun twist: this counter would also include anything counted in ipForwDatagrams if those packets hit this (discretionary) discard criterion.

Access: read-only. Status: mandatory.

ipOutNoRoutes ๐ŸŽ€

OBJECT:
-------
     ipOutNoRoutes { ip 12 }

Syntax:
     Counter

the datagrams that got discarded because no route could be found to reach their destination ๐Ÿ—บ๏ธ this includes any packets counted in ipForwDatagrams that meet this "no-route" criterion. it also covers any datagrams a host can't route because all of its default gateways are down ๐Ÿ˜ฌ

Access: read-only. Status: mandatory.

ipReasmTimeout โณ

OBJECT:
-------
     ipReasmTimeout { ip 13 }

Syntax:
     INTEGER

this is the maximum number of seconds that received fragments get to hang out while they wait for reassembly at this entity ๐Ÿ•ฐ๏ธ

Access: read-only. Status: mandatory.

ipReasmReqds ๐Ÿงฉ

OBJECT:
-------
     ipReasmReqds { ip 14 }

Syntax:
     Counter

the number of IP fragments that came in and needed to be reassembled at this entity ๐Ÿซ 

Access: read-only. Status: mandatory.

ipReasmOKs ๐Ÿ†

OBJECT:
-------
     ipReasmOKs { ip 15 }

Syntax:
     Counter

the number of IP datagrams that got successfully re-assembled ๐Ÿฅณ the glow-up we love to see โœจ

Access: read-only. Status: mandatory.

ipReasmFails ๐Ÿ’”

OBJECT:
-------
     ipReasmFails { ip 16 }

Syntax:
     Counter

this counts the failures the IP re-assembly algorithm detected, for whatever reason, like timeouts or errors ๐Ÿ˜ฉ here's the tea: this isn't necessarily a count of discarded IP fragments, because some algorithms (notably the one in RFC 815) can lose track of how many fragments there are by combining them as they arrive. chaotic, I know ๐Ÿ™ƒ

Access: read-only. Status: mandatory.

ipFragOKs ๐ŸŒท

OBJECT:
     ipFragOKs { ip 17 }

Syntax:
     Counter

the number of IP datagrams that were successfully fragmented at this entity ๐Ÿง they got split up and still made it ๐Ÿ’–

Access: read-only. Status: mandatory.

ipFragFails ๐Ÿฅ€

OBJECT:
-------
     ipFragFails { ip 18 }

Syntax:
     Counter

these are the datagrams that got discarded because they needed fragmenting at this entity but couldn't be fragmented, like when their "Don't Fragment" flag was set ๐Ÿšซ sad, but it happens ๐Ÿ˜ญ

Access: read-only. Status: mandatory.

ipFragCreates โœ‚๏ธ

OBJECT:
-------
     ipFragCreates { ip 19 }

Syntax:
     Counter

the number of IP datagram fragments that were generated as a result of fragmentation at this entity ๐ŸŒˆ every little piece counts, bestie ๐Ÿซถ

Access: read-only. Status: mandatory.

5.4.1. The IP Address table โœจ

okay so this table is where the entity keeps track of its own IP addressing info, aka the whole "which addresses do I own" list ๐Ÿ’…

          OBJECT:
          -------
               ipAddrTable { ip 20 }

          Syntax:
               SEQUENCE OF IpAddrEntry

          Definition:
               The table of addressing information relevant to this
               entity's IP addresses.

          Access:
               read-only.

          Status:
               mandatory.

so ipAddrTable is the whole table, and it's read-only and mandatory ๐Ÿซถ each row is an IpAddrEntry, which is where the real tea is ๐Ÿ“

          OBJECT:
          -------
               ipAddrEntry { ipAddrTable 1 }

          Syntax:
               IpAddrEntry ::= SEQUENCE {
                    ipAdEntAddr
                        IpAddress,
                    ipAdEntIfIndex
                        INTEGER,
                    ipAdEntNetMask
                        IpAddress,
                    ipAdEntBcastAddr
                        INTEGER,
                    ipAdEntReasmMaxSize
                        INTEGER (0..65535)
               }

          Definition:
               The addressing information for one of this entity's IP
               addresses.

          Access:
               read-only.

          Status:
               mandatory.

ipAddrEntry is one row, and each row packs five fields together: the address, the interface index, the netmask, the broadcast bit, and the max reassembly size ๐ŸŽ€ it's giving very organized, bestie ๐Ÿฆ‹

          OBJECT:
          -------
               ipAdEntAddr  { ipAddrEntry 1 }

          Syntax:
               IpAddress

          Definition:
               The IP address to which this entry's addressing
               information pertains.

          Access:
               read-only.

          Status:
               mandatory.

ipAdEntAddr is the IP address itself, the main character of the row ๐Ÿ‘‘ read-only and mandatory, no notes ๐Ÿ’€

          OBJECT:
          -------
               ipAdEntIfIndex  { ipAddrEntry 2 }

          Syntax:
               INTEGER

          Definition:
               The index value which uniquely identifies the interface
               to which this entry is applicable.  The interface
               identified by a particular value of this index is the
               same interface as identified by the same value of
               ifIndex.

          Access:
               read-only.

          Status:
               mandatory.

ipAdEntIfIndex is the interface index, and it's the same number you'd see as ifIndex in the Interfaces group, so they match up perfectly ๐Ÿงšโœจ it's a unique ID for the interface this address belongs to, so no mix-ups allowed ๐Ÿ™ˆ

          OBJECT:
          -------
               ipAdEntNetMask  { ipAddrEntry 3 }

          Syntax:
               IpAddress

          Definition:
               The subnet mask associated with the IP address of this
               entry.  The value of the mask is an IP address with all
               the network bits set to 1 and all the hosts bits set to
               0.

          Access:
               read-only.

          Status:
               mandatory.

ipAdEntNetMask is the subnet mask, and it's formatted like an IP address where the network bits are all 1s and the host bits are all 0s ๐ŸŒธ it's literally the bit pattern that splits "network" from "host", so it's a whole vibe ๐ŸŒˆ

          OBJECT:
          -------
               ipAdEntBcastAddr { ipAddrEntry 4 }

          Syntax:
               INTEGER

          Definition:
               The value of the least-significant bit in the IP
               broadcast address used for sending datagrams on the
               (logical) interface associated with the IP address of
               this entry.  For example, when the Internet standard
               all-ones broadcast address is used, the value will be 1.
               This value applies to both the subnet and network
               broadcasts addresses used by the entity on this (logical)
               interface.

          Access:
               read-only.

          Status:
               mandatory.

ipAdEntBcastAddr is about the broadcast address, and it's a tiny integer that only looks at the least-significant bit ๐Ÿฆ‹ the example here is the Internet standard all-ones broadcast address, which gives a value of 1 ๐Ÿซถ and that same value covers both the subnet and network broadcast addresses on this logical interface, so it's one tidy setting for both ๐Ÿ’œ

          OBJECT:
          -------
               ipAdEntReasmMaxSize { ipAddrEntry 5 }

          Syntax:
               INTEGER (0..65535)

          Definition:
               The size of the largest IP datagram which this entity can
               re-assemble from incoming IP fragmented datagrams
               received on this interface.

          Access:
               read-only.

          Status:
               mandatory.

last but not least, ipAdEntReasmMaxSize is the biggest IP datagram this entity can put back together from fragments that come in on this interface ๐Ÿ”ฅ it's an integer from 0 to 65535, and yes, it's read-only and mandatory, because we love a consistent queen ๐Ÿ‘‘โœจ

5.4.2. The IP Routing table โœจ

okay so the IP Routing table is literally where this entity keeps a list of every route it currently knows about ๐Ÿ—บ๏ธ๐Ÿ’–

ipRoutingTable { ip 21 }

Syntax:
     SEQUENCE OF IpRouteEntry

It's this entity's IP Routing table ๐Ÿฆ‹. Access is read-write and the status is mandatory ๐Ÿ’….

ipRouteEntry { ipRoutingTable 1 }

Syntax:
     IpRouteEntry ::= SEQUENCE {
          ipRouteDest
              IpAddress,
          ipRouteIfIndex
              INTEGER,
          ipRouteMetric1
              INTEGER,
          ipRouteMetric2
              INTEGER,
          ipRouteMetric3
              INTEGER,
          ipRouteMetric4
              INTEGER,
          ipRouteNextHop
              IpAddress,
          ipRouteType
              INTEGER,
          ipRouteProto
              INTEGER,
          ipRouteAge
              INTEGER,
          ipRouteMask
              IpAddress
     }

Each row is one route to a particular destination ๐ŸŽ€. Access is read-write and it's mandatory ๐Ÿซถ.

Now let's look at the pieces of each route, one at a time ๐Ÿงš

ipRouteDest { ipRouteEntry 1 }

Syntax: IpAddress

This is the destination IP address for the route ๐ŸŒธ. If the value is 0.0.0.0, the route counts as a default route ๐Ÿ . You can have multiple routes pointing at the same destination in the table, but how you get to those extra entries depends on the table-access mechanism of whatever network management protocol you're using ๐Ÿ‘€. Access is read-write and it's mandatory โœจ.

ipRouteIfIndex { ipRouteEntry 2 }

Syntax: INTEGER

This is the index value that uniquely identifies the local interface the next hop of this route should be reached through ๐Ÿ”Œ. That index is the very same interface you'd get from the same value of ifIndex ๐Ÿ’œ. Access is read-write and it's mandatory ๐Ÿ“.

ipRouteMetric1 { ipRouteEntry 3 }

Syntax: INTEGER

This is the primary routing metric for the route ๐Ÿ“. What it actually means is decided by the routing protocol named in the route's ipRouteProto value ๐Ÿง . If this metric isn't used, set it to -1 ๐Ÿ™ˆ. Access is read-write and it's mandatory ๐Ÿ’–.

ipRouteMetric2 { ipRouteEntry 4 }

Syntax: INTEGER

This is an alternate routing metric for the route ๐Ÿฅˆ. Its meaning also comes from the routing protocol in ipRouteProto, and if it's not used, the value should be -1 ๐ŸŒˆ. Access is read-write and it's mandatory โœจ.

ipRouteMetric3 { ipRouteEntry 5 }

Syntax: INTEGER

Another alternate routing metric ๐Ÿฅ‰. Same deal: the semantics come from the routing protocol in ipRouteProto, and if it's not used, the value should be -1 ๐Ÿ’…. Access is read-write and it's mandatory ๐Ÿฆ‹.

ipRouteMetric4 { ipRouteEntry 6 }

Syntax: INTEGER

Yep, one more alternate metric ๐Ÿซง. Its meaning is set by the routing protocol in ipRouteProto, and if it isn't used, the value should be -1 ๐Ÿ’œ. Access is read-write and it's mandatory ๐ŸŒธ.

ipRouteNextHop { ipRouteEntry 7 }

Syntax: IpAddress

This is the IP address of the next hop for the route ๐Ÿš. For a route tied to an interface that runs over broadcast media, this field holds the agent's own IP address on that interface ๐Ÿ“ก. Access is read-write and it's mandatory ๐ŸŽ€.

ipRouteType { ipRouteEntry 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

}

This tells you what kind of route it is ๐Ÿ—‚๏ธ. There are four flavours: other, invalid, direct, and remote ๐Ÿญ.

Setting this object to invalid(2) invalidates the matching entry in the ipRoutingTable ๐Ÿšซ. Basically, it cuts the link between the destination in that entry and the route it's tied to ๐Ÿ’”. Whether the agent actually deletes an invalidated entry from the table is up to the implementation ๐Ÿคทโ€โ™€๏ธ. Because of that, management stations must be ready to receive table info about entries that aren't in use anymore ๐Ÿ™ƒ. To read those entries correctly, you have to check the relevant ipRouteType object ๐Ÿ”. Access is read-write and it's mandatory ๐Ÿ’….

ipRouteProto { ipRouteEntry 9 }

Syntax:

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

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

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

                     -- obtained via ICMP,
     icmp(4),        -- e.g., Redirect

                     -- the remaining values are
                     -- all gateway routing protocols
     egp(5),
     ggp(6),
     hello(7),
     rip(8),
     is-is(9),
     es-is(10),
     ciscoIgrp(11),
     bbnSpfIgp(12),
     ospf(13),
     bgp(14)
}

This says how the route was learned ๐ŸŽ“. The protocol values for gateway routing protocols don't mean hosts are supposed to run those protocols too ๐Ÿ™…โ€โ™€๏ธ. Access is read-only and it's mandatory ๐Ÿ”’.

ipRouteAge { ipRouteEntry 10 }

Syntax: INTEGER

This counts the seconds since the route was last updated or confirmed as correct โฐ. Don't read "too old" into it unless you know the routing protocol that taught you the route ๐Ÿ•ฐ๏ธ. Access is read-write and it's mandatory ๐Ÿ’ซ.

ipRouteMask { ipRouteEntry 11 }

Syntax: IpAddress

This is the mask that gets logical-ANDed with the destination address before it's compared to the ipRouteDest value ๐ŸŽญ. Systems that can't handle arbitrary subnet masks have the agent work out ipRouteMask by checking whether the ipRouteDest belongs to a class-A, B, or C network, then using one of these:

mask           network
255.0.0.0      class-A
255.255.0.0    class-B
255.255.255.0  class-C

If ipRouteDest is 0.0.0.0 (a default route), the mask is 0.0.0.0 too ๐Ÿ . It's worth noting that every IP routing subsystem uses this mechanism implicitly ๐Ÿง . Access is read-write and it's mandatory ๐ŸŽ€.

5.4.3. The IP Address Translation table ๐Ÿฆ‹

Okay so the Address Translation tables are where the IpAddress to "physical" address matches live, bestie ๐Ÿ’– Some interfaces don't need translation tables to figure out who's who. DDN-X.25 just uses an algorithm, which is iconic ๐Ÿ’… So if every interface works that way, the Address Translation table is totally fine being empty, aka zero entries ๐Ÿซถ

OBJECT:
-------
     ipNetToMediaTable { ip 22 }

Syntax:
     SEQUENCE OF IpNetToMediaEntry

This is the IP Address Translation table used for mapping IP addresses to physical addresses ๐ŸŒธ Access is read-write and status is mandatory โœจ

OBJECT:
-------
     IpNetToMediaEntry { ipNetToMediaTable 1 }

Syntax:
     IpNetToMediaEntry ::= SEQUENCE {
          ipNetToMediaIfIndex
              INTEGER,
          ipNetToMediaPhysAddress
              OCTET STRING,
          ipNetToMediaNetAddress
              IpAddress,
          ipNetToMediaType
              INTEGER
     }

Each entry holds one IpAddress to "physical" address equivalence, so it's like a little matchmaking card ๐Ÿ’œ Access is read-write and status is mandatory ๐ŸŽ€

We're gonna look at each piece of an IP Address Translation table entry now ๐Ÿ‘‘

OBJECT:
-------
     ipNetToMediaIfIndex { ipNetToMediaEntry 1 }

Syntax:
     INTEGER

This one is the interface where the entry's equivalence is effective ๐Ÿฆ‹ The interface with a particular value here is the same interface you'd get from that same value of ifIndex, so they line up perfectly ๐Ÿ’… Access is read-write and status is mandatory โœจ

OBJECT:
-------
     ipNetToMediaPhysAddress { ipNetToMediaEntry 2 }

Syntax:
     OCTET STRING

This is the media-dependent "physical" address ๐ŸŒˆ Access is read-write and status is mandatory ๐Ÿ’–

OBJECT:
-------
     ipNetToMediaNetAddress { ipNetToMediaEntry 3 }

Syntax:
     IpAddress

This is the IpAddress that goes with that media-dependent "physical" address, the other half of the couple ๐Ÿซถ Access is read-write and status is mandatory ๐ŸŒธ

OBJECT:
-------
     ipNetToMediaType { ipNetToMediaEntry 4 }

Syntax:
     INTEGER {

          other(1),        -- none of the following

          invalid(2),      -- an invalidated mapping

          dynamic(3),

          static(4)
     }

This is the type of mapping ๐Ÿ”ฅ Now the drama: setting this object to invalid(2) invalidates the matching entry in the ipNetToMediaTable ๐Ÿ’€ It basically breaks up the interface and the mapping, so they're no longer linked ๐Ÿ˜ญ Whether the agent actually removes an invalidated entry is up to the implementation, so it's not a fixed rule โœจ That means management stations must be prepared to receive table info about entries that aren't in use right now ๐Ÿ™ˆ To know what an entry means, you have to check its ipNetToMediaType object ๐Ÿงš Access is read-write and status is mandatory ๐Ÿ‘‘


5.5. The ICMP Group โœจ

okay so ICMP is the group that keeps score on all the ICMP traffic, and it's ๐Ÿ”ฅ mandatory for all systems, so every implementation has to have it. it's split into the stuff coming in and the stuff going out, and every single one of these is read-only and mandatory. no cap, the whole thing is giving organized ๐ŸŽ€

Here are the incoming ones first ๐Ÿ’…

          OBJECT:
          -------
               icmpInMsgs { icmp 1 }

          Syntax:
               Counter

          Definition:
               The total number of ICMP messages which the entity
               received.  Note that this counter includes all those
               counted by icmpInErrors.

          Access:
               read-only.

          Status:
               mandatory.


          OBJECT:
          -------
               icmpInErrors { icmp 2 }

          Syntax:
               Counter

          Definition:
               The number of ICMP messages which the entity received but
               determined as having ICMP-specific errors (bad ICMP
               checksums, bad length, etc.).

          Access:
               read-only.

          Status:
               mandatory.


          OBJECT:
          -------
               icmpInDestUnreachs { icmp 3 }

          Syntax:
               Counter

          Definition:
               The number of ICMP Destination Unreachable messages
               received.

          Access:
               read-only.

          Status:
               mandatory.


          OBJECT:
          -------
               icmpInTimeExcds { icmp 4 }

          Syntax:
               Counter

          Definition:
               The number of ICMP Time Exceeded messages received.

          Access:
               read-only.

          Status:
               mandatory.


          OBJECT:
          -------
               icmpInParmProbs { icmp 5 }

          Syntax:
               Counter

          Definition:
               The number of ICMP Parameter Problem messages received.

          Access:
               read-only.

          Status:
               mandatory.


          OBJECT:
          -------
               icmpInSrcQuenchs { icmp 6 }

          Syntax:
               Counter

          Definition:
               The number of ICMP Source Quench messages received.

          Access:
               read-only.

          Status:
               mandatory.

          OBJECT:
          -------
               icmpInRedirects { icmp 7 }

          Syntax:
               Counter

          Definition:
               The number of ICMP Redirect messages received.

          Access:
               read-only.

          Status:
               mandatory.


          OBJECT:
          -------
               icmpInEchos { icmp 8 }

          Syntax:
               Counter

          Definition:
               The number of ICMP Echo (request) messages received.

          Access:
               read-only.

          Status:
               mandatory.


          OBJECT:
          -------
               icmpInEchoReps { icmp 9 }

          Syntax:
               Counter

          Definition:
               The number of ICMP Echo Reply messages received.

          Access:
               read-only.

          Status:
               mandatory.


          OBJECT:
          -------
               icmpInTimestamps { icmp 10 }

          Syntax:
               Counter

          Definition:
               The number of ICMP Timestamp (request) messages received.

          Access:
               read-only.

          Status:
               mandatory.


          OBJECT:
          -------
               icmpInTimestampReps { icmp 11 }

          Syntax:
               Counter

          Definition:
               The number of ICMP Timestamp Reply messages received.

          Access:
               read-only.

          Status:
               mandatory.


          OBJECT:
          -------
               icmpInAddrMasks { icmp 12 }

          Syntax:
               Counter

          Definition:
               The number of ICMP Address Mask Request messages
               received.

          Access:
               read-only.

          Status:
               mandatory.


          OBJECT:
          -------
               icmpInAddrMaskReps { icmp 13 }

          Syntax:
               Counter

          Definition:
               The number of ICMP Address Mask Reply messages received.

          Access:
               read-only.

          Status:
               mandatory.

now the outgoing side ๐Ÿฆ‹ this is where the sending stats live, and yes, the bits about errors and hosts are super specific, so read them carefully bestie ๐Ÿ™ˆ

          OBJECT:
          -------
               icmpOutMsgs { icmp 14 }

          Syntax:
               Counter

          Definition:
               The total number of ICMP messages which this entity
               attempted to send.  Note that this counter includes all
               those counted by icmpOutErrors.

          Access:
               read-only.

          Status:
               mandatory.


          OBJECT:
          -------
               icmpOutErrors { icmp 15 }

          Syntax:
               Counter

          Definition:
               The number of ICMP messages which this entity did not
               send due to problems discovered within ICMP such as a
               lack of buffers.  This value should not include errors
               discovered outside the ICMP layer such as the inability
               of IP to route the resultant datagram.  In some
               implementations there may be no types of error which
               contribute to this counter's value.

          Access:
               read-only.

          Status:
               mandatory.


          OBJECT:
          -------
               icmpOutDestUnreachs { icmp 16 }

          Syntax:
               Counter

          Definition:
               The number of ICMP Destination Unreachable messages sent.

          Access:
               read-only.

          Status:
               mandatory.


          OBJECT:
          -------
               icmpOutTimeExcds { icmp 17 }

          Syntax:
               Counter

          Definition:
               The number of ICMP Time Exceeded messages sent.

          Access:
               read-only.

          Status:
               mandatory.


          OBJECT:
          -------
               icmpOutParmProbs { icmp 18 }

          Syntax:
               Counter

          Definition:
               The number of ICMP Parameter Problem messages sent.

          Access:
               read-only.

          Status:
               mandatory.


          OBJECT:
          -------
               icmpOutSrcQuenchs { icmp 19 }

          Syntax:
               Counter

          Definition:
               The number of ICMP Source Quench messages sent.

          Access:
               read-only.

          Status:
               mandatory.


          OBJECT:
          -------
               icmpOutRedirects { icmp 20 }

          Syntax:
               Counter

          Definition:
               The number of ICMP Redirect messages sent.  For a host,
               this object will always be zero, since hosts do not send
               redirects.

          Access:
               read-only.

          Status:
               mandatory.


          OBJECT:
          -------
               icmpOutEchos { icmp 21 }

          Syntax:
               Counter

          Definition:
               The number of ICMP Echo (request) messages sent.

          Access:
               read-only.

          Status:
               mandatory.


          OBJECT:
          -------
               icmpOutEchoReps { icmp 22 }

          Syntax:
               Counter

          Definition:
               The number of ICMP Echo Reply messages sent.

          Access:
               read-only.

          Status:
               mandatory.


          OBJECT:
          -------
               icmpOutTimestamps { icmp 23 }

          Syntax:
               Counter

          Definition:
               The number of ICMP Timestamp (request) messages sent.

          Access:
               read-only.

          Status:
               mandatory.


          OBJECT:
          -------
               icmpOutTimestampReps { icmp 24 }

          Syntax:
               Counter

          Definition:
               The number of ICMP Timestamp Reply messages sent.

          Access:
               read-only.

          Status:
               mandatory.


          OBJECT:
          -------
               icmpOutAddrMasks { icmp 25 }

          Syntax:
               Counter

          Definition:
               The number of ICMP Address Mask Request messages sent.

          Access:
               read-only.

          Status:
               mandatory.

          OBJECT:
          -------
               icmpOutAddrMaskReps { icmp 26 }

          Syntax:
               Counter

          Definition:
               The number of ICMP Address Mask Reply messages sent.

          Access:
               read-only.

          Status:
               mandatory.
ngl the icmpOutRedirects one is the cutest detail: for a host it's always zero, because hosts just don't send redirects ๐ŸŒธ

5.6. The TCP Group โœจ

Okay bestie, the TCP group is where the connection stats live ๐Ÿฆ‹ Implementing it is mandatory for any system that implements TCP, so no skipping it, no cap ๐Ÿ’…

Heads up: the objects that describe one particular TCP connection are transient. They only exist for as long as that connection does ๐Ÿซถ

OBJECT:
-------
     tcpRtoAlgorithm { tcp 1 }

Syntax:
     INTEGER {
          other(1),    -- none of the following
          constant(2), -- a constant rto
          rsre(3),     -- MIL-STD-1778, Appendix B
          vanj(4)      -- Van Jacobson's algorithm [11]
     }

Definition:
     The algorithm used to determine the timeout value used
     for retransmitting unacknowledged octets.

Access:
     read-only.

Status:
     mandatory.
OBJECT:
-------
     tcpRtoMin { tcp 2 }

Syntax:
     INTEGER

Definition:
     The minimum value permitted by a TCP implementation for
     the retransmission timeout, measured in milliseconds.
     More refined semantics for objects of this type depend
     upon the algorithm used to determine the retransmission
     timeout.  In particular, when the timeout algorithm is
     rsre(3), an object of this type has the semantics of the
     LBOUND quantity described in RFC 793.

Access:
     read-only.

Status:
     mandatory.
OBJECT:
-------
     tcpRtoMax { tcp 3 }

Syntax:
     INTEGER

Definition:
     The maximum value permitted by a TCP implementation for
     the retransmission timeout, measured in milliseconds.
     More refined semantics for objects of this type depend
     upon the algorithm used to determine the retransmission
     timeout.  In particular, when the timeout algorithm is
     rsre(3), an object of this type has the semantics of the
     UBOUND quantity described in RFC 793.

Access:
     read-only.

Status:
     mandatory.
OBJECT:
-------
     tcpMaxConn { tcp 4 }

Syntax:
     INTEGER

Definition:
     The limit on the total number of TCP connections the
     entity can support.  In entities where the maximum number
     of connections is dynamic, this object should contain the
     value "-1".

Access:
     read-only.

Status:
     mandatory.
OBJECT:
-------
     tcpActiveOpens { tcp 5 }

Syntax:
     Counter

Definition:
     The number of times TCP connections have made a direct
     transition to the SYN-SENT state from the CLOSED state.

Access:
     read-only.

Status:
     mandatory.
OBJECT:
-------
     tcpPassiveOpens { tcp 6 }

Syntax:
     Counter

Definition:
     The number of times TCP connections have made a direct
     transition to the SYN-RCVD state from the LISTEN state.

Access:
     read-only.

Status:
     mandatory.
OBJECT:
-------
     tcpAttemptFails { tcp 7 }

Syntax:
     Counter

Definition:
     The number of times TCP connections have made a direct
     transition to the CLOSED state from either the SYN-SENT
     state or the SYN-RCVD state, plus the number of times TCP
     connections have made a direct transition to the LISTEN
     state from the SYN-RCVD state.

Access:
     read-only.

Status:
     mandatory.
OBJECT:
-------
     tcpEstabResets { tcp 8 }

Syntax:
     Counter

Definition:
     The number of times TCP connections have made a direct
     transition to the CLOSED state from either the
     ESTABLISHED state or the CLOSE-WAIT state.

Access:
     read-only.

Status:
     mandatory.
OBJECT:
-------
     tcpCurrEstab { tcp 9 }

Syntax:
     Gauge

Definition:
     The number of TCP connections for which the current state
     is either ESTABLISHED or CLOSE-WAIT.

Access:
     read-only.

Status:
     mandatory.
OBJECT:
-------
     tcpInSegs { tcp 10 }

Syntax:
     Counter

Definition:
     The total number of segments received, including those
     received in error.  This count includes segments received
     on currently established connections.

Access:
     read-only.

Status:
     mandatory.
OBJECT:
-------
     tcpOutSegs { tcp 11 }

Syntax:
     Counter

Definition:
     The total number of segments sent, including those on
     current connections but excluding those containing only
     retransmitted octets.

Access:
     read-only.

Status:
     mandatory.
OBJECT:
-------
     tcpRetransSegs { tcp 12 }

Syntax:
     Counter

Definition:
     The total number of segments retransmitted - that is, the
     number of TCP segments transmitted containing one or more
     previously transmitted octets.

Access:
     read-only.

Status:
     mandatory.

5.6.1. The TCP Connection table ๐ŸŽ€

The TCP connection table is the guest list for this entity's current TCP connections, so it's where you go to see who's connected right now ๐Ÿ‘‘

OBJECT:
-------
     tcpConnTable { tcp 13 }

Syntax:
     SEQUENCE OF TcpConnEntry

Definition:
     A table containing TCP connection-specific information.

Access:
     read-only.

Status:
     mandatory.
OBJECT:
-------
     tcpConnEntry { tcpConnTable 1 }

Syntax:
     TcpConnEntry ::= SEQUENCE {
          tcpConnState
              INTEGER,
          tcpConnLocalAddress
              IpAddress,
          tcpConnLocalPort
              INTEGER (0..65535),
          tcpConnRemAddress
              IpAddress,
          tcpConnRemPort
              INTEGER (0..65535)
     }

Definition:
     Information about a particular current TCP connection.
     An object of this type is transient, in that it ceases to
     exist when (or soon after) the connection makes the
     transition to the CLOSED state.

Access:
     read-only.

Status:
     mandatory.
OBJECT:
-------
     tcpConnState { tcpConnEntry 1 }

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

     }

Definition:
     The state of this TCP connection.

Access:
     read-only.

Status:
     mandatory.
OBJECT:
-------
     tcpConnLocalAddress { tcpConnEntry 2 }

Syntax:
     IpAddress

Definition:
     The local IP address for this TCP connection.  In the
     case of a connection in the listen state which is willing
     to accept connections for any IP interface associated
     with the node, the value 0.0.0.0 is used.

Access:
     read-only.

Status:
     mandatory.
OBJECT:
-------
     tcpConnLocalPort { tcpConnEntry 3 }

Syntax:
     INTEGER (0..65535)

Definition:
     The local port number for this TCP connection.

Access:
     read-only.

Status:
     mandatory.
OBJECT:
-------
     tcpConnRemAddress { tcpConnEntry 4 }

Syntax:
     IpAddress

Definition:
     The remote IP address for this TCP connection.

Access:
     read-only.

Status:
     mandatory.
OBJECT:
-------
     tcpConnRemPort { tcpConnEntry 5 }

Syntax:
     INTEGER (0..65535)

Definition:
     The remote port number for this TCP connection.

Access:
     read-only.

Status:
     mandatory.

5.6.2. Additional TCP Objects ๐ŸŒธ

A few more TCP counters to round out the group ๐Ÿ’–

OBJECT:
-------
     tcpInErrs { tcp 14 }

Syntax:
     Counter

Definition:
     The total number of segments received in error (e.g., bad
     TCP checksums).

Access:
     read-only.

Status:
     mandatory.
OBJECT:
-------
     tcpOutRsts { tcp 15 }

Syntax:
     Counter

Definition:
     The number of TCP segments sent containing the RST flag.

Access:
     read-only.

Status:
     mandatory.

5.7. The UDP Group ๐Ÿฆ‹

UDP is the chill, no-handshake sibling of TCP, and its group is mandatory for any system that implements UDP ๐ŸŒˆ

OBJECT:
-------
     udpInDatagrams { udp 1 }

Syntax:
     Counter

Definition:
     The total number of UDP datagrams delivered to UDP users.

Access:
     read-only.

Status:
     mandatory.
OBJECT:
-------
     udpNoPorts { udp 2 }

Syntax:
     Counter

Definition:
     The total number of received UDP datagrams for which
     there was no application at the destination port.

Access:
     read-only.

Status:
     mandatory.
OBJECT:
-------
     udpInErrors { udp 3 }

Syntax:
     Counter

Definition:
     The number of received UDP datagrams that could not be
     delivered for reasons other than the lack of an
     application at the destination port.

Access:
     read-only.

Status:
     mandatory.
OBJECT:
-------
     udpOutDatagrams { udp 4 }

Syntax:
     Counter

Definition:
     The total number of UDP datagrams sent from this entity.

Access:
     read-only.

Status:
     mandatory.

5.7.1. The UDP Listener table โœจ

okay so the UDP listener table is basically the guest list ๐ŸŽ€ of this entity's UDP endpoints where a local application is actively waiting for datagrams to show up ๐Ÿฆ‹

OBJECT:
-------
     udpTable { udp 5 }

Syntax:
     SEQUENCE OF UdpEntry

Definition:
     A table containing UDP listener information.

Access:
     read-only.

Status:
     mandatory.
OBJECT:
-------
     udpEntry { udpTable 1 }

Syntax:
     UdpEntry ::= SEQUENCE {
          udpLocalAddress
              IpAddress,
          udpLocalPort
              INTEGER (0..65535)
     }

Definition:
     Information about a particular current UDP listener.

Access:
     read-only.

Status:
     mandatory.
OBJECT:
-------
     udpLocalAddress { udpEntry 1 }

Syntax:
     IpAddress

Definition:
     The local IP address for this UDP listener.  In the case
     of a UDP listener which is willing to accept datagrams
     for any IP interface associated with the node, the value
     0.0.0.0 is used.

Access:
     read-only.

Status:
     mandatory.

the local address is the IP address this listener is bound to ๐Ÿ’… and if it's happy to take datagrams for any IP interface on the node, the value 0.0.0.0 is the move ๐ŸŒˆ

OBJECT:
-------
     udpLocalPort { udpEntry 2 }

Syntax:
     INTEGER (0..65535)

Definition:
     The local port number for this UDP listener.

Access:
     read-only.

Status:
     mandatory.

the port is just the local port number for the listener, nothing more, nothing less ๐Ÿงš

5.8. The EGP Group ๐Ÿ’œ

okay the EGP group is mandatory for every system that implements EGP, so if you're doing EGP, this part is non-negotiable bestie ๐Ÿ˜ญ

OBJECT:
-------
     egpInMsgs { egp 1 }

Syntax:
     Counter

Definition:
     The number of EGP messages received without error.

Access:
     read-only.

Status:
     mandatory.

the counter tracks EGP messages that came in and were error-free โœจ

OBJECT:
-------
     egpInErrors { egp 2 }

Syntax:
     Counter

Definition:
     The number of EGP messages received that proved to be in
     error.

Access:
     read-only.

Status:
     mandatory.

this one counts the incoming EGP messages that turned out to be broken ๐Ÿ’€

OBJECT:
-------
     egpOutMsgs { egp 3 }

Syntax:
     Counter

Definition:
     The total number of locally generated EGP messages.

Access:
     read-only.

Status:
     mandatory.

outgoing side now ๐Ÿฆ‹ this is the total of EGP messages the local entity generated itself

OBJECT:
-------
     egpOutErrors { egp 4 }

Syntax:
     Counter

Definition:
     The number of locally generated EGP messages not sent due
     to resource limitations within an EGP entity.

Access:
     read-only.

Status:
     mandatory.

and this is the sad one ๐Ÿ™ˆ it counts the locally generated EGP messages that never got sent because the EGP entity ran out of resources

5.8.1. The EGP Neighbor table ๐Ÿซถ

the EGP Neighbor table is the place where this entity keeps tabs on all of its EGP neighbors, and it's very detailed bestie ๐Ÿ“

OBJECT:
-------
     egpNeighTable { egp 5 }

Syntax:
     SEQUENCE OF EgpNeighEntry

Definition:
     The EGP neighbor table.

Access:
     read-only.

Status:
     mandatory.
OBJECT:
-------
     egpNeighEntry { egpNeighTable 1 }

Syntax:
     EgpNeighEntry ::= SEQUENCE {
          egpNeighState
              INTEGER,
          egpNeighAddr
              IpAddress,
          egpNeighAs
              INTEGER,
          egpNeighInMsgs
              Counter,
          egpNeighInErrs
              Counter,
          egpNeighOutMsgs
              Counter,
          egpNeighOutErrs
              Counter,
          egpNeighInErrMsgs
              Counter,
          egpNeighOutErrMsgs
              Counter,
          egpNeighStateUps
              Counter,
          egpNeighStateDowns
              Counter,
          egpNeighIntervalHello
              INTEGER,
          egpNeighIntervalPoll
              INTEGER,
          egpNeighMode
              INTEGER,
          egpNeighEventTrigger
              INTEGER
     }

Definition:
     Information about this entity's relationship with a
     particular EGP neighbor.

Access:
     read-only.

Status:
     mandatory.

every row in this table is one neighbor relationship, so each entry is basically a little friendship profile ๐Ÿ‘‘ now let's look at each piece of it ๐ŸŒธ

OBJECT:
-------
     egpNeighState { egpNeighEntry 1 }

Syntax:
     INTEGER {
          idle(1),
          acquisition(2),
          down(3),
          up(4),
          cease(5)
     }

Definition:
     The EGP state of the local system with respect to this
     entry's EGP neighbor.  Each EGP state is represented by a
     value that is one greater than the numerical value
     associated with said state in RFC 904.

Access:
     read-only.

Status:
     mandatory.

this is the EGP state of the local system with respect to that neighbor ๐ŸŽ€ and the numbers are one bigger than the ones RFC 904 gives each state, so don't mix them up bestie ๐Ÿ™ˆ

OBJECT:
-------
     egpNeighAddr { egpNeighEntry 2 }

Syntax:
     IpAddress

Definition:
     The IP address of this entry's EGP neighbor.

Access:
     read-only.

Status:
     mandatory.

the neighbor's IP address, pretty straightforward ๐Ÿ’–

OBJECT:
-------
     egpNeighAs { egpNeighEntry 3 }

Syntax:
     INTEGER

Definition:
     The autonomous system of this EGP peer.  Zero should be
     specified if the autonomous system number of the neighbor
     is not yet known.

Access:
     read-only.

Status:
     mandatory.

this is the autonomous system of the EGP peer โœจ and if they haven't told us their AS number yet, zero is what should go in there ๐Ÿงš

OBJECT:
-------
     egpNeighInMsgs { egpNeighEntry 4 }

Syntax:
     Counter

Definition:
     The number of EGP messages received without error from
     this EGP peer.

Access:
     read-only.

Status:
     mandatory.

it's the error-free incoming messages, but just from this one peer ๐Ÿซถ

OBJECT:
-------
     egpNeighInErrs { egpNeighEntry 5 }

Syntax:
     Counter

Definition:
     The number of EGP messages received from this EGP peer
     that proved to be in error (e.g., bad EGP checksum).

Access:
     read-only.

Status:
     mandatory.

this one counts the broken incoming messages from this peer, and a bad EGP checksum is the classic example ๐Ÿ’€

OBJECT:
-------
     egpNeighOutMsgs { egpNeighEntry 6 }

Syntax:
     Counter

Definition:
     The number of locally generated EGP messages to this EGP
     peer.

Access:
     read-only.

Status:
     mandatory.

the outgoing messages the local system made and sent toward this peer ๐Ÿฆ‹

OBJECT:
-------
     egpNeighOutErrs { egpNeighEntry 7 }

Syntax:
     Counter

Definition:
     The number of locally generated EGP messages not sent to
     this EGP peer due to resource limitations within an EGP
     entity.

Access:
     read-only.

Status:
     mandatory.

the outgoing messages that didn't make it out to this peer because the EGP entity was short on resources ๐Ÿ˜ญ

OBJECT:
-------
     egpNeighInErrMsgs { egpNeighEntry 8 }

Syntax:
     Counter

Definition:
     The number of EGP-defined error messages received from
     this EGP peer.

Access:
     read-only.

Status:
     mandatory.

these are the EGP-defined error messages that this peer sent to us ๐Ÿ™ˆ

OBJECT:
-------
     egpNeighOutErrMsgs { egpNeighEntry 9 }

Syntax:
     Counter

Definition:
     The number of EGP-defined error messages sent to this EGP
     peer.

Access:
     read-only.

Status:
     mandatory.

and the reverse ๐ŸŒˆ the EGP-defined error messages we sent to this peer

OBJECT:
-------
     egpNeighStateUps { egpNeighEntry 10 }

Syntax:
     Counter

Definition:
     The number of EGP state transitions to the UP state with
     this EGP peer.

Access:
     read-only.

Status:
     mandatory.

this counts every time the relationship with this peer moved into the UP state โญ

OBJECT:
-------
     egpNeighStateDowns { egpNeighEntry 11 }

Syntax:
     Counter

Definition:
     The number of EGP state transitions from the UP state to
     any other state with this EGP peer.

Access:
     read-only.

Status:
     mandatory.

and this one counts the times it fell out of UP into any other state, so the drama is tracked too ๐Ÿ’…

OBJECT:
-------
     egpNeighIntervalHello { egpNeighEntry 12 }

Syntax:
     INTEGER

Definition:
     The interval between EGP Hello command retransmissions
     (in hundredths of a second).  This represents the t1
     timer as defined in RFC 904.

Access:
     read-only.

Status:
     mandatory.

this is the gap between EGP Hello retransmissions, measured in hundredths of a second โฑ๏ธ it's the t1 timer from RFC 904 ๐ŸŽ€

OBJECT:
-------
     egpNeighIntervalPoll { egpNeighEntry 13 }

Syntax:
     INTEGER

Definition:
     The interval between EGP poll command retransmissions (in
     hundredths of a second).  This represents the t3 timer as
     defined in RFC 904.

Access:
     read-only.

Status:
     mandatory.

same vibe but for polls ๐Ÿฆ‹ this gap is in hundredths of a second too, and it's the t3 timer from RFC 904

OBJECT:
-------
     egpNeighMode { egpNeighEntry 14 }

Syntax:
     INTEGER {
          active(1),
          passive(2)
     }

Definition:
     The polling mode of this EGP entity, either passive or
     active.

Access:
     read-only.

Status:
     mandatory.

this is the polling mode of the EGP entity, and it's either active or passive, no in-between ๐Ÿงš

OBJECT:
-------
     egpNeighEventTrigger { egpNeighEntry 15 }

Syntax:
     INTEGER {
          start(1),
          stop(2)
     }

Definition:
     A control variable used to trigger operator-initiated
     Start and Stop events.  When read, this variable always
     returns the most recent value that egpNeightEventTrigger
     was set to.  If it has not been set since the last
     initialization of the network management subsystem on the
     node, it returns a value of "stop".

Access:
     read-write

Status:
     mandatory.

this one is the control knob ๐ŸŽ›๏ธ the operator uses it to trigger Start and Stop events. reading it always gives back the last value that was set. if nobody has set it since the network management subsystem was last initialized on the node, it returns "stop" ๐Ÿ™ˆ (fun fact: the definition spells it egpNeightEventTrigger in one spot, and that's exactly how it's written in the original, so keep it as-is ๐Ÿง)

5.8.2. Additional EGP variables ๐ŸŒธ

last but not least, there's one extra EGP variable that's just the AS number of this EGP entity itself ๐Ÿ‘‘

OBJECT:
-------
     egpAs { egp 6 }

Syntax:
     INTEGER

Definition:
     The autonomous system number of this EGP entity.

Access:
     read-only.

Status:
     mandatory.

5.9. The Transmission Group โœจ

Okay so, every interface on a system sits on some kind of transmission media, and the matching piece of the Transmission group is mandatory for that system. No skipping it, bestie ๐Ÿซถ

When Internet-standard definitions for managing transmission media get written, the transmission group is what gives those objects their prefix ๐ŸŽ€

Usually these definitions start out in the experimental part of the MIB and hang out there until they're "proven" ๐Ÿงช Then, once they go through the Internet standardization process, they get promoted, and a new object identifier gets defined under the transmission group. The naming rule is:

type OBJECT IDENTIFIER    ::= { transmission number }

Here, "type" is the symbolic value used for the media in the ifType column of the ifTable object, and "number" is the actual integer that goes with that symbol. It's giving organized ๐Ÿ’…

5.10. The SNMP Group ๐Ÿฆ‹

Okay, the SNMP group is mandatory for every system that runs an SNMP protocol entity, no exceptions ๐Ÿ’œ Some of the objects below will be zero-valued in SNMP implementations that are optimized to do only the stuff a management agent or a management client needs. Efficient, but it means those counters will just sit at zero ๐Ÿ™ˆ

Let's go through the objects. Every one of them is read-only and mandatory, so I'm not going to repeat that every time ๐Ÿ’– Here's the exact stuff for each one:

snmpInPkts ๐ŸŒธ

OBJECT:
-------
     snmpInPkts { snmp 1 }

Syntax:
     Counter

Definition:
     The total number of PDUs delivered to the SNMP entity
     from the transport service.

Access:
     read-only.

Status:
     mandatory.

snmpOutPkts ๐ŸŒธ

OBJECT:
-------
     snmpOutPkts { snmp 2 }

Syntax:
     Counter

Definition:
     The total number of SNMP PDUs which were passed from the
     SNMP protocol entity to the transport service.

Access:
     read-only.

Status:
     mandatory.

snmpInBadVersions ๐Ÿ“

OBJECT:
-------
     snmpInBadVersions { snmp 3 }

Syntax:
     Counter

Definition:
     The total number of syntactically correct SNMP PDUs which
     were delivered to the SNMP protocol entity and were for
     an unsupported SNMP version.

Access:
     read-only.

Status:
     mandatory.

snmpInBadCommunityNames ๐Ÿงš

OBJECT:
-------
     snmpInBadCommunityNames { snmp 4 }

Syntax:
     Counter

Definition:
     The total number of SNMP PDUs delivered to the SNMP
     protocol entity which used a SNMP community name not
     known to said entity.

Access:
     read-only.

Status:
     mandatory.

snmpInBadCommunityUses ๐ŸŒˆ

OBJECT:
-------
     snmpInBadCommunityUses { snmp 5 }

Syntax:
     Counter

Definition:
     The total number of SNMP PDUs delivered to the SNMP
     protocol entity which represented an SNMP operation which
     was not allowed by the SNMP community named in the PDU.

Access:
     read-only.

Status:
     mandatory.

snmpInASNParseErrs ๐Ÿ’€

OBJECT:
-------
     snmpInASNParseErrs { snmp 6 }

Syntax:
     Counter

Definition:
     The total number of ASN.1 parsing errors (either in
     encoding or syntax) encountered by the SNMP protocol
     entity when decoding received SNMP PDUs.

Access:
     read-only.

Status:
     mandatory.

snmpInBadTypes ๐ŸŽ€

OBJECT:
-------
     snmpInBadTypes { snmp 7 }

Syntax:
     Counter

Definition:
     The total number of SNMP PDUs delivered to the SNMP
     protocol entity which had an unknown PDU type.

Access:
     read-only.

Status:
     mandatory.

snmpInTooBigs ๐Ÿ‘‘

OBJECT:
-------
     snmpInTooBigs { snmp 8 }

Syntax:
     Counter

Definition:
     The total number valid SNMP PDUs which were delivered to
     the SNMP protocol entity and for which the value of the
     "ErrorStatus" component is "tooBig."

Access:
     read-only.

Status:
     mandatory.

snmpInNoSuchNames ๐Ÿ™ˆ

OBJECT:
-------
     snmpInNoSuchNames { snmp 9 }

Syntax:
     Counter

Definition:
     The total number valid SNMP PDUs which were delivered to
     the SNMP protocol entity and for which the value of the
     "ErrorStatus" component is "noSuchName."

Access:
     read-only.

Status:
     mandatory.

snmpInBadValues โญ

OBJECT:
-------
     snmpInBadValues { snmp 10 }

Syntax:
     Counter

Definition:
     The total number valid SNMP PDUs which were delivered to
     the SNMP protocol entity and for which the value of the
     "ErrorStatus" component is "badValue."

Access:
     read-only.

Status:
     mandatory.

snmpInReadOnlys ๐Ÿ”ฅ

OBJECT:
-------
     snmpInReadOnlys { snmp 11 }

Syntax:
     Counter

Definition:
     The total number valid SNMP PDUs which were delivered to
     the SNMP protocol entity and for which the value of the
     "ErrorStatus" component is "readOnly."

Access:
     read-only.

Status:
     mandatory.

snmpInGenErrs ๐Ÿ˜ญ

OBJECT:
-------
     snmpInGenErrs { snmp 12 }

Syntax:
     Counter

Definition:
     The total number valid SNMP PDUs which were delivered to
     the SNMP protocol entity and for which the value of the
     "ErrorStatus" component is "genErr."

Access:
     read-only.

Status:
     mandatory.

snmpInTotalReqVars ๐Ÿ’œ

OBJECT:
-------
     snmpInTotalReqVars { snmp 13 }

Syntax:
     Counter

Definition:
     The total number of MIB objects which have been retrieved
     successfully by the SNMP protocol entity as the result of
     receiving valid SNMP Get-Request and Get-Next PDUs.

Access:
     read-only.

Status:
     mandatory.

snmpInTotalSetVars ๐ŸŒธ

OBJECT:
-------
     snmpInTotalSetVars { snmp 14 }

Syntax:
     Counter

Definition:
     The total number of MIB objects which have been altered
     successfully by the SNMP protocol entity as the result of
     receiving valid SNMP Set-Request PDUs.

Access:
     read-only.

Status:
     mandatory.

snmpInGetRequests ๐Ÿฆ‹

OBJECT:
-------
     snmpInGetRequests { snmp 15 }

Syntax:
     Counter

Definition:
     The total number of SNMP Get-Request PDUs which have been
     accepted and processed by the SNMP protocol entity.

Access:
     read-only.

Status:
     mandatory.

snmpInGetNexts ๐Ÿงš

OBJECT:
-------
     snmpInGetNexts { snmp 16 }

Syntax:
     Counter

Definition:
     The total number of SNMP Get-Next PDUs which have been
     accepted and processed by the SNMP protocol entity.

Access:
     read-only.

Status:
     mandatory.

snmpInSetRequests ๐Ÿ“

OBJECT:
-------
     snmpInSetRequests { snmp 17 }

Syntax:
     Counter

Definition:
     The total number of SNMP Set-Request PDUs which have been
     accepted and processed by the SNMP protocol entity.

Access:
     read-only.

Status:
     mandatory.

snmpInGetResponses ๐Ÿ’…

OBJECT:
-------
     snmpInGetResponses { snmp 18 }

Syntax:
     Counter

Definition:
     The total number of SNMP Get-Response PDUs which have
     been accepted and processed by the SNMP protocol entity.

Access:
     read-only.

Status:
     mandatory.

snmpInTraps โœจ

OBJECT:
-------
     snmpInTraps { snmp 19 }

Syntax:
     Counter

Definition:
     The total number of SNMP Trap PDUs which have been
     accepted and processed by the SNMP protocol entity.

Access:
     read-only.

Status:
     mandatory.

snmpOutTooBigs ๐ŸŒˆ

OBJECT:
-------
     snmpOutTooBigs { snmp 20 }

Syntax:
     Counter

Definition:
     The total number valid SNMP PDUs which were generated by
     the SNMP protocol entity and for which the value of the
     "ErrorStatus" component is "tooBig."

Access:
     read-only.

Status:
     mandatory.

snmpOutNoSuchNames ๐Ÿ”ฅ

OBJECT:
-------
     snmpOutNoSuchNames { snmp 21 }

Syntax:
     Counter

Definition:
     The total number valid SNMP PDUs which were generated by
     the SNMP protocol entity and for which the value of the
     "ErrorStatus" component is "noSuchName."

Access:
     read-only.

Status:
     mandatory.

snmpOutBadValues ๐Ÿ’–

OBJECT:
-------
     snmpOutBadValues { snmp 22 }

Syntax:
     Counter

Definition:
     The total number valid SNMP PDUs which were generated by
     the SNMP protocol entity and for which the value of the
     "ErrorStatus" component is "badValue."

Access:
     read-only.

Status:
     mandatory.

snmpOutReadOnlys ๐Ÿซถ

OBJECT:
-------
     snmpOutReadOnlys { snmp 23 }

Syntax:
     Counter

Definition:
     The total number valid SNMP PDUs which were generated by
     the SNMP protocol entity and for which the value of the
     "ErrorStatus" component is "readOnly."

Access:
     read-only.

Status:
     mandatory.

snmpOutGenErrs ๐Ÿ’€

OBJECT:
-------
     snmpOutGenErrs { snmp 24 }

Syntax:
     Counter

Definition:
     The total number valid SNMP PDUs which were generated by
     the SNMP protocol entity and for which the value of the
     "ErrorStatus" component is "genErr."

Access:
     read-only.

Status:
     mandatory.

snmpOutGetRequests ๐ŸŽ€

OBJECT:
-------
     snmpOutGetRequests { snmp 25 }

Syntax:
     Counter

Definition:
     The total number of SNMP Get-Request PDUs which have been
     generated by the SNMP protocol entity.

Access:
     read-only.

Status:
     mandatory.

snmpOutGetNexts ๐Ÿ‘‘

OBJECT:
-------
     snmpOutGetNexts { snmp 26 }

Syntax:
     Counter

Definition:
     The total number of SNMP Get-Next PDUs which have been
     generated by the SNMP protocol entity.

Access:
     read-only.

Status:
     mandatory.

snmpOutSetRequests ๐Ÿ™ˆ

OBJECT:
-------
     snmpOutSetRequests { snmp 27 }

Syntax:
     Counter

Okay bestie, picking up right where we left off ๐Ÿ’… The first one on the list is the total number of SNMP Set-Request PDUs that the SNMP protocol entity has generated. It's a Counter, it's read-only, and it's mandatory, so every device needs it. No cap ๐Ÿซถ

OBJECT: snmpOutGetResponses { snmp 28 }

Syntax: Counter

This one counts every SNMP Get-Response PDU the protocol entity has generated. It's read-only and mandatory, obviously iconic ๐ŸŒธ

OBJECT: snmpOutTraps { snmp 29 }

Syntax: Counter

Here we're counting all the SNMP Trap PDUs the protocol entity has generated. Read-only and mandatory, the way it's giving consistency ๐Ÿ”ฅ

OBJECT: snmpEnableAuthTraps { snmp 30 }

Syntax:

INTEGER {
     enabled(1),
     disabled(2)
}

This one tells you whether the SNMP agent process is configured to generate authentication-failure traps. It's read-write (so you can actually flip it ๐Ÿฆ‹) and mandatory.


6. Definitions ๐ŸŽ€

Now for the real MIB module, the actual spec code, copy-paste ready ๐Ÿ˜ญ Everything below is verbatim, so it's giving full accuracy.

RFC1158-MIB

DEFINITIONS ::= BEGIN

IMPORTS
        mgmt, OBJECT-TYPE, NetworkAddress, IpAddress,
        Counter, Gauge, TimeTicks
            FROM RFC1155-SMI;

mib-2      OBJECT IDENTIFIER ::= { mgmt 1 }    -- MIB-II
           -- (same prefix as MIB-I)

system     OBJECT IDENTIFIER ::= { mib-2 1 }
interfaces OBJECT IDENTIFIER ::= { mib-2 2 }
at         OBJECT IDENTIFIER ::= { mib-2 3 }
ip         OBJECT IDENTIFIER ::= { mib-2 4 }
icmp       OBJECT IDENTIFIER ::= { mib-2 5 }
tcp        OBJECT IDENTIFIER ::= { mib-2 6 }
udp        OBJECT IDENTIFIER ::= { mib-2 7 }
egp        OBJECT IDENTIFIER ::= { mib-2 8 }
-- cmot    OBJECT IDENTIFIER ::= { mib-2 9 }
transmission OBJECT IDENTIFIER ::= { mib-2 10 }
snmp       OBJECT IDENTIFIER ::= { mib-2 11 }


-- object types

-- the System group

sysDescr OBJECT-TYPE
        SYNTAX  DisplayString (SIZE (0..255))
        ACCESS  read-only
        STATUS  mandatory
        ::= { system 1 }

sysObjectID OBJECT-TYPE
        SYNTAX  OBJECT IDENTIFIER
        ACCESS  read-only
        STATUS  mandatory
        ::= { system 2 }

sysUpTime OBJECT-TYPE
        SYNTAX  TimeTicks
        ACCESS  read-only
        STATUS  mandatory
        ::= { system 3 }

sysContact OBJECT-TYPE
        SYNTAX  DisplayString (SIZE (0..255))
        ACCESS  read-write
        STATUS  mandatory
        ::= { system 4 }

sysName OBJECT-TYPE
        SYNTAX  DisplayString (SIZE (0..255))
        ACCESS  read-write
        STATUS  mandatory
        ::= { system 5 }

sysLocation OBJECT-TYPE
        SYNTAX  DisplayString (SIZE (0..255))
        ACCESS  read-only
        STATUS  mandatory
        ::= { system 6 }

sysServices OBJECT-TYPE
        SYNTAX  INTEGER (0..127)
        ACCESS  read-only
        STATUS  mandatory
        ::= { system 7 }


-- the Interfaces group

ifNumber OBJECT-TYPE
        SYNTAX  INTEGER
        ACCESS  read-only
        STATUS  mandatory
        ::= { interfaces 1 }

-- the Interfaces table

ifTable OBJECT-TYPE
        SYNTAX  SEQUENCE OF IfEntry
        ACCESS  read-only
        STATUS  mandatory
        ::= { interfaces 2 }

ifEntry OBJECT-TYPE
        SYNTAX  IfEntry
        ACCESS  read-only
        STATUS  mandatory
        ::= { ifTable 1 }

IfEntry ::= SEQUENCE {
    ifIndex
        INTEGER,
    ifDescr
        DisplayString,
    ifType
        INTEGER,
    ifMtu
        INTEGER,
    ifSpeed
        Gauge,
    ifPhysAddress
        OCTET STRING,
    ifAdminStatus
        INTEGER,
    ifOperStatus
        INTEGER,

    ifLastChange
        TimeTicks,
    ifInOctets
        Counter,
    ifInUcastPkts
        Counter,
    ifInNUcastPkts
        Counter,
    ifInDiscards
        Counter,
    ifInErrors
        Counter,
    ifInUnknownProtos
        Counter,
    ifOutOctets
        Counter,
    ifOutUcastPkts
        Counter,
    ifOutNUcastPkts
        Counter,
    ifOutDiscards
        Counter,
    ifOutErrors
        Counter,
    ifOutQLen
        Gauge,
    ifSpecific
        OBJECT IDENTIFIER
}

ifIndex OBJECT-TYPE
        SYNTAX  INTEGER
        ACCESS  read-only
        STATUS  mandatory
        ::= { ifEntry 1 }

ifDescr OBJECT-TYPE
        SYNTAX  DisplayString (SIZE (0..255))
        ACCESS  read-only
        STATUS  mandatory
        ::= { ifEntry 2 }

ifType OBJECT-TYPE
        SYNTAX  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),
                    t1-carrier(18),
                    cept(19),        -- european
                                     --equivalent of T-1
                    basicISDN(20),
                    primaryISDN(21),
                                          -- proprietary
                                          -- serial
                    propPointToPointSerial(22),
                    terminalServer-asyncPort(23),
                    softwareLoopback(24),
                    eon(25),              -- CLNP over IP
                    ethernet-3Mbit(26),
                    nsip(27),             -- XNS over IP
                    slip(28)              -- generic SLIP
            }
        ACCESS  read-only
        STATUS  mandatory
        ::= { ifEntry 3 }

ifMtu OBJECT-TYPE
        SYNTAX  INTEGER
        ACCESS  read-only
        STATUS  mandatory
        ::= { ifEntry 4 }

ifSpeed OBJECT-TYPE
        SYNTAX  Gauge
        ACCESS  read-only
        STATUS  mandatory
        ::= { ifEntry 5 }

ifPhysAddress OBJECT-TYPE
        SYNTAX  OCTET STRING
        ACCESS  read-only
        STATUS  mandatory
        ::= { ifEntry 6 }

ifAdminStatus OBJECT-TYPE
        SYNTAX  INTEGER {
                    up(1),     -- ready to pass packets
                    down(2),
                    testing(3) -- in some test mode
                }
        ACCESS  read-write
        STATUS  mandatory
        ::= { ifEntry 7 }

ifOperStatus OBJECT-TYPE
        SYNTAX  INTEGER {
                    up(1),     -- ready to pass packets
                    down(2),
                    testing(3) -- in some test mode
                }
        ACCESS  read-only
        STATUS  mandatory
        ::= { ifEntry 8 }

ifLastChange OBJECT-TYPE
        SYNTAX  TimeTicks
        ACCESS  read-only
        STATUS  mandatory
        ::= { ifEntry 9 }

ifInOctets OBJECT-TYPE
        SYNTAX  Counter
        ACCESS  read-only
        STATUS  mandatory
        ::= { ifEntry 10 }

ifInUcastPkts OBJECT-TYPE
        SYNTAX  Counter
        ACCESS  read-only
        STATUS  mandatory
        ::=  { ifEntry 11 }

ifInNUcastPkts OBJECT-TYPE
        SYNTAX  Counter
        ACCESS  read-only
        STATUS  mandatory
        ::= { ifEntry 12 }

ifInDiscards OBJECT-TYPE

        SYNTAX  Counter
        ACCESS  read-only
        STATUS  mandatory
        ::= { ifEntry 13 }

ifInErrors OBJECT-TYPE
        SYNTAX  Counter
        ACCESS  read-only
        STATUS  mandatory
        ::= { ifEntry 14 }

ifInUnknownProtos OBJECT-TYPE
        SYNTAX  Counter
        ACCESS  read-only
        STATUS  mandatory
        ::= { ifEntry 15 }

ifOutOctets OBJECT-TYPE
        SYNTAX  Counter
        ACCESS  read-only
        STATUS  mandatory
        ::= { ifEntry 16 }

ifOutUcastPkts OBJECT-TYPE
        SYNTAX  Counter
        ACCESS  read-only
        STATUS  mandatory
        ::= { ifEntry 17 }

okay bestie, the IP group is where the magic happens ๐Ÿ’…โœจ these are the counters and tables that keep track of what IP is doing ๐Ÿฆ‹

               ifOutNUcastPkts OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { ifEntry 18 }

               ifOutDiscards OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { ifEntry 19 }

               ifOutErrors OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { ifEntry 20 }

               ifOutQLen OBJECT-TYPE

                       SYNTAX  Gauge
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { ifEntry 21 }

               ifSpecific OBJECT-TYPE
                       SYNTAX  OBJECT IDENTIFIER
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { ifEntry 22 }

               nullSpecific OBJECT IDENTIFIER ::= { 0 0 }

               -- the Address Translation group (deprecated)

               atTable OBJECT-TYPE
                       SYNTAX  SEQUENCE OF AtEntry
                       ACCESS  read-write
                       STATUS  deprecated
                       ::= { at 1 }

               atEntry OBJECT-TYPE
                       SYNTAX  AtEntry
                       ACCESS  read-write
                       STATUS  deprecated
                       ::= { atTable 1 }

               AtEntry ::= SEQUENCE {
                   atIfIndex
                       INTEGER,
                   atPhysAddress
                       OCTET STRING,
                   atNetAddress
                       NetworkAddress
               }

               atIfIndex OBJECT-TYPE
                       SYNTAX  INTEGER
                       ACCESS  read-write
                       STATUS  deprecated
                       ::= { atEntry 1 }

               atPhysAddress OBJECT-TYPE
                       SYNTAX  OCTET STRING
                       ACCESS  read-write
                       STATUS  deprecated
                       ::= { atEntry 2 }

               atNetAddress OBJECT-TYPE
                       SYNTAX  NetworkAddress
                       ACCESS  read-write
                       STATUS  deprecated
                       ::= { atEntry 3 }


               -- the IP group

               ipForwarding OBJECT-TYPE
                       SYNTAX  INTEGER {
                                   gateway(1), -- entity forwards
                                               -- datagrams
                                   host(2)     -- entity does NOT
                                               -- forward datagrams
                               }
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { ip 1 }

               ipDefaultTTL OBJECT-TYPE
                       SYNTAX  INTEGER
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { ip 2 }

               ipInReceives OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { ip 3 }

               ipInHdrErrors OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { ip 4 }

               ipInAddrErrors OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { ip 5 }

               ipForwDatagrams OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { ip 6 }

               ipInUnknownProtos OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { ip 7 }

               ipInDiscards OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { ip 8 }

               ipInDelivers OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { ip 9 }

               ipOutRequests OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { ip 10 }

               ipOutDiscards OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { ip 11 }

               ipOutNoRoutes OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { ip 12 }

               ipReasmTimeout OBJECT-TYPE
                       SYNTAX  INTEGER
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { ip 13 }

               ipReasmReqds OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { ip 14 }

               ipReasmOKs OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { ip 15 }

               ipReasmFails OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { ip 16 }

               ipFragOKs OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { ip 17 }

               ipFragFails OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { ip 18 }

               ipFragCreates OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { ip 19 }

               -- the IP Interface table

               ipAddrTable OBJECT-TYPE
                       SYNTAX  SEQUENCE OF IpAddrEntry
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { ip 20 }

               ipAddrEntry OBJECT-TYPE
                       SYNTAX  IpAddrEntry
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { ipAddrTable 1 }

               IpAddrEntry ::= SEQUENCE {
                   ipAdEntAddr

                       IpAddress,
                   ipAdEntIfIndex
                       INTEGER,
                   ipAdEntNetMask
                       IpAddress,
                   ipAdEntBcastAddr
                       INTEGER,
                   ipAdEntReasmMaxSize
                       INTEGER (0..65535)
               }

               ipAdEntAddr OBJECT-TYPE
                       SYNTAX  IpAddress
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { ipAddrEntry 1 }

               ipAdEntIfIndex OBJECT-TYPE
                       SYNTAX  INTEGER
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { ipAddrEntry 2 }

               ipAdEntNetMask OBJECT-TYPE
                       SYNTAX  IpAddress
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { ipAddrEntry 3 }

               ipAdEntBcastAddr OBJECT-TYPE
                       SYNTAX  INTEGER
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { ipAddrEntry 4 }

               ipAdEntReasmMaxSiz OBJECT-TYPE
                       SYNTAX  INTEGER (0..65535)
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { ipAddrEntry 5 }

               -- the IP Routing table

               ipRoutingTable OBJECT-TYPE
                       SYNTAX  SEQUENCE OF IpRouteEntry
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { ip 21 }

               ipRouteEntry OBJECT-TYPE
                       SYNTAX  IpRouteEntry
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { ipRoutingTable 1 }

               IpRouteEntry ::= SEQUENCE {
                   ipRouteDest
                       IpAddress,
                   ipRouteIfIndex
                       INTEGER,
                   ipRouteMetric1
                       INTEGER,
                   ipRouteMetric2
                       INTEGER,
                   ipRouteMetric3
                       INTEGER,
                   ipRouteMetric4
                       INTEGER,
                   ipRouteNextHop
                       IpAddress,
                   ipRouteType
                       INTEGER,
                   ipRouteProto
                       INTEGER,
                   ipRouteAge
                       INTEGER,
                   ipRouteMask
                       IpAddress
               }

               ipRouteDest OBJECT-TYPE
                       SYNTAX  IpAddress
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { ipRouteEntry 1 }

               ipRouteIfIndex  OBJECT-TYPE
                       SYNTAX  INTEGER
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { ipRouteEntry 2 }

               ipRouteMetric1 OBJECT-TYPE
                       SYNTAX  INTEGER
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { ipRouteEntry 3 }

               ipRouteMetric2 OBJECT-TYPE
                       SYNTAX  INTEGER
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { ipRouteEntry 4 }

               ipRouteMetric3 OBJECT-TYPE
                       SYNTAX  INTEGER
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { ipRouteEntry 5 }

               ipRouteMetric4 OBJECT-TYPE
                       SYNTAX  INTEGER
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { ipRouteEntry 6 }

               ipRouteNextHop OBJECT-TYPE
                       SYNTAX  IpAddress
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { ipRouteEntry 7 }

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

                                   invalid(2),  -- an invalidated route

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

that's where we're cutting for now ๐Ÿซถ the ipRouteType enum is still cooking, so stay tuned ๐ŸŒธ

Okay so this is where ipRouteProto gets its whole personality ๐Ÿ’… It's basically the "who told this route to show up" tag, like, did I set it by hand, did a management tool add it, did ICMP Redirect slide in, or did a gateway routing protocol bring it in? ๐Ÿฆ‹

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

               ipRouteProto 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

                                                -- obtained via ICMP,
                                   icmp(4),     --   e.g., Redirect

                                                -- the following are
                                                -- gateway routing
                                                -- protocols
                                   egp(5),
                                   ggp(6),
                                   hello(7),
                                   rip(8),
                                   is-is(9),
                                   es-is(10),
                                   ciscoIgrp(11),
                                   bbnSpfIgp(12),
                                   ospf(13)
                                   bgp(14)
                           }
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { ipRouteEntry 9 }

               ipRouteAge OBJECT-TYPE
                       SYNTAX  INTEGER
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { ipRouteEntry 10 }

               ipRouteMask OBJECT-TYPE
                       SYNTAX  IpAddress
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { ipRouteEntry 11 }

Next up is the IP Address Translation tables ๐ŸŽ€ These are the mappings between IP addresses and physical addresses, and they're kinda the ultimate "who's who" of your local network ๐ŸŒธ

               -- the IP Address Translation tables

               ipNetToMediaTable OBJECT-TYPE
                       SYNTAX  SEQUENCE OF IpNetToMediaEntry
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { ip 22 }

               ipNetToMediaEntry OBJECT-TYPE

                       SYNTAX  IpNetToMediaEntry
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { ipNetToMediaTable 1 }

               IpNetToMediaEntry ::= SEQUENCE {
                   ipNetToMediaIfIndex
                       INTEGER,
                   ipNetToMediaPhysAddress
                       OCTET STRING,
                   ipNetToMediaNetAddress
                       IpAddress,
                   ipNetoToMediaType
                       INTEGER
               }

               ipNetToMediaIfIndex OBJECT-TYPE
                       SYNTAX  INTEGER
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { ipNetToMediaEntry 1 }

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

               ipNetToMediaNetAddress OBJECT-TYPE
                       SYNTAX  IpAddress
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { ipNetToMediaEntry 3 }

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

                                   invalid(2), -- an invalidated mapping
                                   dynamic(3), -- connected (sub-)network

                                   static(4)
                           }
                       ACCESS  read-write
                       STATUS  mandatory
                       ::= { ipNetToMediaEntry 4 }

Now the ICMP group ๐Ÿงš It's a whole stack of read-only Counter objects, one for each ICMP message type, split into "in" (received) and "out" (sent) ๐Ÿ“ฌ The numbers after icmp are the sub-identifiers, running 1 through 26, so it's super tidy and totally iconic ๐Ÿ’…

               -- the ICMP group

               icmpInMsgs OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { icmp 1 }

               icmpInErrors OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { icmp 2 }

               icmpInDestUnreachs OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { icmp 3 }

               icmpInTimeExcds OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { icmp 4 }

               icmpInParmProbs OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { icmp 5 }

               icmpInSrcQuenchs OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { icmp 6 }

               icmpInRedirects OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { icmp 7 }

               icmpInEchos OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { icmp 8 }

               icmpInEchoReps OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { icmp 9 }

               icmpInTimestamps OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { icmp 10 }

               icmpInTimestampReps OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { icmp 11 }

               icmpInAddrMasks OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { icmp 12 }

               icmpInAddrMaskReps OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { icmp 13 }

               icmpOutMsgs OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { icmp 14 }

               icmpOutErrors OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { icmp 15 }

               icmpOutDestUnreachs OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { icmp 16 }

               icmpOutTimeExcds OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { icmp 17 }

               icmpOutParmProbs OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { icmp 18 }

               icmpOutSrcQuenchs OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { icmp 19 }

               icmpOutRedirects OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { icmp 20 }

               icmpOutEchos OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { icmp 21 }

               icmpOutEchoReps OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { icmp 22 }

               icmpOutTimestamps OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { icmp 23 }

               icmpOutTimestampReps OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { icmp 24 }

               icmpOutAddrMasks OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { icmp 25 }

               icmpOutAddrMaskReps OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { icmp 26 }

And now the TCP group ๐ŸŒˆ This is where the TCP retransmission timeout settings live, plus the connection counters, so it's giving very "keeping score" energy ๐Ÿ“Šโœจ

               -- the TCP group

               tcpRtoAlgorithm OBJECT-TYPE
                       SYNTAX  INTEGER {
                                   other(1),    -- none of the following
                                   constant(2), -- a constant rto
                                   rsre(3),     -- MIL-STD-1778,
                                                -- Appendix B
                                   vanj(4)      -- Van Jacobson's
                                                -- algorithm
                               }
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { tcp 1 }

               tcpRtoMin OBJECT-TYPE
                       SYNTAX  INTEGER
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { tcp 2 }

               tcpRtoMax OBJECT-TYPE
                       SYNTAX  INTEGER
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { tcp 3 }

               tcpMaxConn OBJECT-TYPE
                       SYNTAX  INTEGER
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { tcp 4 }

               tcpActiveOpens OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { tcp 5 }

               tcpPassiveOpens OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { tcp 6 }

               tcpAttemptFails OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { tcp 7 }

               tcpEstabResets OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { tcp 8 }

               tcpCurrEstab OBJECT-TYPE
                       SYNTAX  Gauge
                       ACCESS  read-only
                       STATUS  mandatory
                       ::= { tcp 9 }

Ngl the tcpRtoAlgorithm one is my favourite, because it literally names the options: constant(2), rsre(3) from MIL-STD-1778 Appendix B, and vanj(4) for Van Jacobson's algorithm ๐Ÿ‘‘๐Ÿ”ฅ

tcpInSegs OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { tcp 10 }

tcpOutSegs OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { tcp 11 }

tcpRetransSegs OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { tcp 12 }

-- the TCP connections table

tcpConnTable OBJECT-TYPE SYNTAX SEQUENCE OF TcpConnEntry ACCESS read-only STATUS mandatory ::= { tcp 13 }

tcpConnEntry OBJECT-TYPE SYNTAX TcpConnEntry ACCESS read-only STATUS mandatory ::= { tcpConnTable 1 }

TcpConnEntry ::= SEQUENCE { tcpConnState INTEGER, tcpConnLocalAddress IpAddress, tcpConnLocalPort INTEGER (0..65535), tcpConnRemAddress IpAddress, tcpConnRemPort INTEGER (0..65535) }

tcpConnState OBJECT-TYPE SYNTAX INTEGER { closed(1), listen(2), synSent(3), synReceived(4), established(5), finWait1(6), finWait2(7), closeWait(8), lastAck(9), closing(10), timeWait(11) } ACCESS read-only STATUS mandatory ::= { tcpConnEntry 1 }

tcpConnLocalAddress OBJECT-TYPE SYNTAX IpAddress ACCESS read-only STATUS mandatory ::= { tcpConnEntry 2 }

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

tcpConnRemAddress OBJECT-TYPE SYNTAX IpAddress ACCESS read-only STATUS mandatory ::= { tcpConnEntry 4 }

tcpConnRemPort OBJECT-TYPE SYNTAX INTEGER (0..65535) ACCESS read-only STATUS mandatory ::= { tcpConnEntry 5 }

-- additional TCP variables

tcpInErrs OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { tcp 14 }

tcpOutRsts OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { tcp 15 }

-- the UDP group

udpInDatagrams OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { udp 1 }

udpNoPorts OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { udp 2 }

udpInErrors OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { udp 3 }

udpOutDatagrams OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { udp 4 }

-- the UDP listener table

udpTable OBJECT-TYPE SYNTAX SEQUENCE OF UdpEntry ACCESS read-only STATUS mandatory ::= { udp 5 }

udpEntry OBJECT-TYPE SYNTAX UdpEntry ACCESS read-only STATUS mandatory ::= { udpTable 1 }

UdpEntry ::= SEQUENCE { udpLocalAddress IpAddress, udpLocalPort INTEGER (0..65535) }

udpLocalAddress OBJECT-TYPE SYNTAX IpAddress ACCESS read-only STATUS mandatory ::= { udpEntry 1 }

udpLocalPort OBJECT-TYPE SYNTAX INTEGER (0..65535) ACCESS read-only STATUS mandatory ::= { udpEntry 2 }

-- the EGP group

egpInMsgs OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { egp 1 }

egpInErrors OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { egp 2 }

egpOutMsgs OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { egp 3 }

egpOutErrors OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { egp 4 }

-- the EGP Neighbor table

egpNeighTable OBJECT-TYPE SYNTAX SEQUENCE OF EgpNeighEntry ACCESS read-only STATUS mandatory ::= { egp 5 }

egpNeighEntry OBJECT-TYPE SYNTAX EgpNeighEntry ACCESS read-only STATUS mandatory ::= { egpNeighTable 1 }

EgpNeighEntry ::= SEQUENCE { egpNeighState INTEGER, egpNeighAddr IpAddress, egpNeighAs INTEGER, egpNeighInMsgs

Counter, egpNeighInErrs Counter, egpNeighOutMsgs Counter, egpNeighOutErrs Counter, egpNeighInErrMsgs Counter, egpNeighOutErrMsgs Counter, egpNeighStateUps Counter, egpNeighStateDowns Counter, egpNeighIntervalHello INTEGER, egpNeighIntervalPoll INTEGER, egpNeighMode INTEGER, egpNeighEventTrigger INTEGER }

egpNeighState OBJECT-TYPE SYNTAX INTEGER { idle(1), acquisition(2), down(3), up(4), cease(5) } ACCESS read-only STATUS mandatory ::= { egpNeighEntry 1 }

egpNeighAddr OBJECT-TYPE SYNTAX IpAddress ACCESS read-only STATUS mandatory ::= { egpNeighEntry 2 }

egpNeighAs OBJECT-TYPE SYNTAX INTEGER ACCESS read-only STATUS mandatory ::= { egpNeighEntry 3 }

egpNeighInMsgs OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { egpNeighEntry 4 }

egpNeighInErrs OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { egpNeighEntry 5 }

egpNeighOutMsgs OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { egpNeighEntry 6 }

egpNeighOutErrs OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { egpNeighEntry 7 }

egpNeighInErrMsgs OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { egpNeighEntry 8 }

egpNeighOutErrMsgs OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { egpNeighEntry 9 }

egpNeighStateUps OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { egpNeighEntry 10 }

egpNeighStateDowns OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { egpNeighEntry 11 }

egpNeighIntervalHello OBJECT-TYPE SYNTAX INTEGER ACCESS read-only STATUS mandatory ::= { egpNeighEntry 12 }

egpNeighIntervalPoll OBJECT-TYPE SYNTAX INTEGER ACCESS read-only STATUS mandatory ::= { egpNeighEntry 13 }

egpNeighMode OBJECT-TYPE SYNTAX INTEGER { active(1), passive(2) } ACCESS read-only STATUS mandatory ::= { egpNeighEntry 14 }

egpNeighEventTrigger OBJECT-TYPE SYNTAX INTEGER { start(1), stop(2) } ACCESS read-write STATUS mandatory ::= { egpNeighEntry 15 }

-- additional EGP variables

egpAs OBJECT-TYPE SYNTAX INTEGER ACCESS read-only STATUS mandatory ::= { egp 6 }

-- the Transmission group (empty at present)

-- the SNMP group

               snmpInPkts OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { snmp 1 }

               snmpOutPkts OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { snmp 2 }

               snmpInBadVersions OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { snmp 3 }

               snmpInBadCommunityNames OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { snmp 4 }

               snmpInBadCommunityUses OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { snmp 5 }

               snmpInASNParseErrs OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { snmp 6 }

               snmpInBadTypes OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { snmp 7 }

               snmpInTooBigs OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { snmp 8 }

               snmpInNoSuchNames OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { snmp 9 }

               snmpInBadValues OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { snmp 10 }

               snmpInReadOnlys OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { snmp 11 }

               snmpInGenErrs OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { snmp 12 }

               snmpInTotalReqVars OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { snmp 13 }

               snmpInTotalSetVars OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { snmp 14 }

               snmpInGetRequests OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { snmp 15 }

               snmpInGetNexts OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { snmp 16 }

               snmpInSetRequests OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { snmp 17 }

               snmpInGetResponses OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { snmp 18 }

               snmpInTraps OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { snmp 19 }

               snmpOutTooBigs OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { snmp 20 }

               snmpOutNoSuchNames OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { snmp 21 }

               snmpOutBadValues OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { snmp 22 }

               snmpOutReadOnlys OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { snmp 23 }

               snmpOutGenErrs OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { snmp 24 }

               snmpOutGetRequests OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { snmp 25 }

               snmpOutGetNexts OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { snmp 26 }

               snmpOutSetRequests OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { snmp 27 }

               snmpOutGetResponses OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { snmp 28 }

               snmpOutTraps OBJECT-TYPE
                       SYNTAX  Counter
                       ACCESS  read-only
                       STATUS  mandatory
                       ::=  { snmp 29 }

               snmpEnableAuthTraps OBJECT-TYPE
                       SYNTAX  INTEGER {
                                   enabled(1),
                                   disabled(2)
                               }
                       ACCESS  read-write
                       STATUS  mandatory
                       ::=  { snmp 30 }

               END

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

okay so, every object type in the MIB gets its name spelled out explicitly ๐ŸŽ€ either in the Internet-standard MIB itself or in other documents that follow the SMI naming conventions. The SMI also says that conformant management protocols have to come with mechanisms for pinpointing individual instances of those object types for one particular network element. Bestie, that's the whole point of this section ๐Ÿงš

Each instance of any object type in the MIB gets identified in SNMP operations by a unique name called its "variable name." ๐Ÿ’– Generally, the name of an SNMP variable is an OBJECT IDENTIFIER shaped like x.y. Here, x is the name of a non-aggregate object type defined in the MIB, and y is an OBJECT IDENTIFIER fragment that, in a way specific to that object type, picks out the instance you want ๐Ÿฆ‹

This naming strategy is giving the fullest use of the SNMP get-next operator ๐Ÿ˜ญ because related variables get names that sit right next to each other in the lexicographical ordering of all variable names known in the MIB. Iconic design, no cap.

The type-specific naming for instances is spelled out below for a bunch of object type classes ๐ŸŒธ Any instance of an object type where none of these naming conventions apply gets named by an OBJECT IDENTIFIER of the form x.0, where x is the name of that object type in the MIB definition.

Let's do an example so it clicks ๐Ÿ’… Say you want to identify an instance of the variable sysDescr. Its object class 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 we tack on an instance sub-identifier of 0. That means 1.3.6.1.2.1.1.1.0 identifies the one and only instance of sysDescr. Periodt ๐Ÿ‘‘

7.1. ifTable Object Type Names

okay bestie, the name of a subnetwork interface, s, is just the OBJECT IDENTIFIER value i, where i is the value of that instance of the ifIndex object type linked to s ๐Ÿ“ Now, for every object type t whose defined name n starts with the prefix ifEntry, an instance i of t is named n.s, where s is the name of the subnetwork interface that i is giving info about. It's so organized, I'm obsessed ๐Ÿ˜ญ

Example time ๐ŸŽ€ Want the instance of ifType tied to interface 2? Then ifType.2 is the one you're looking for โœจ

7.2. atTable Object Type Names

The name of an address translation entry, x, is an OBJECT IDENTIFIER of the form s.1.a.b.c.d. Here s is the value of that instance of the atIfIndex object type linked to x, the subidentifier 1 signifies the translation of an IP protocol address, and a.b.c.d is the IP address value (the familiar "dot" notation) of that instance of the atNetAddress object type linked to x ๐Ÿฆ‹

For each object type t whose defined name n has the prefix atEntry, an instance i of t is named n.y, where y is the name of the address translation entry that i is telling you about. Lowkey so clean ๐ŸŒˆ

Here's the example ๐Ÿ’… Imagine you want the physical address of an entry in the address translation table (ARP cache) for IP address 89.1.1.42 on interface 3. Then atPhysAddress.3.1.89.1.1.42 is the desired instance โœจ

7.3. ipAddrTable Object Type Names

The name of an IP-addressable network element, x, is the OBJECT IDENTIFIER of the form a.b.c.d, where a.b.c.d is the value (in the familiar "dot" notation) of that instance of the ipAdEntAddr object type linked to x ๐Ÿซถ

For each object type t whose defined name n has the prefix ipAddrEntry, an instance i of t is named by an OBJECT IDENTIFIER of the form n.y, where y is the name of the IP-addressable network element that i is describing ๐ŸŒธ

Example: say you want the network mask of an entry in the IP interface table for IP address 89.1.1.42. Then ipAdEntNetMask.89.1.1.42 is the desired instance ๐Ÿ’œ

Here's where it gets spicy ๐Ÿ™ˆ At the option of the agent, multiple entries for the same IP address may be visible. To make that happen, the agent is required to return a single entry for an IP address x of the form n.y, but it may also return info about other entries for that same IP address using the form n.y.z, where z is an implementation-dependent small, non-negative integer. It is strongly recommended that the value of z correspond to the value of ipAddrIfIndex for that entry. Bestie, that last bit is a total main character move ๐Ÿ‘‘๐ŸŽ€

Quick aside: the agent MUST NOT... wait, that's not in the original, so I'm not adding it. Just vibe with the n.y.z form and the ipAddrIfIndex hint โœจ

7.4. ipRoutingTable Object Type Names ๐Ÿ›ฃ๏ธ

okay so the name of an IP route, x, is an OBJECT IDENTIFIER shaped like a.b.c.d. The a.b.c.d part is just the destination address written in that familiar dot notation, taken from the ipRouteDest instance tied to that route ๐Ÿ’–

Every object type whose defined name starts with ipRoutingEntry gets an instance named n.y, where n is the object's name and y is the name of the IP route it's describing โœจ

For example, say you want the next hop for the routing table entry aimed at 89.1.1.42. You'd look up ipRouteNextHop.89.1.1.42 and that's your instance ๐ŸŽ€

Now the spicy bit ๐ŸŒถ๏ธ The agent gets to choose whether multiple routes to the same destination are visible. If it does, it still has to return a single entry for an IP route x of the form n.y, but it may also return info about the other routes to that destination using the form n.y.z, where z is an implementation-dependendent small, non-negative integer. Multiple routes, one destination, very layered ๐Ÿงš


7.5. ipNetToMediaTable Object Type Names ๐Ÿ—บ๏ธ

A cached IP address, x, is named by an OBJECT IDENTIFIER shaped like s.a.b.c.d. Here, s is the value of that instance of the ipNetToMediaIfIndex object type linked to the entry, and a.b.c.d is the ipNetToMediaNetAddress value in dot notation ๐Ÿ’…

Each object type whose defined name starts with ipNetToMediaEntry gets an instance named n.y, where y is the cached IP address that instance is about ๐Ÿฆ‹

Example time: say you want the media address for the address translation entry with IP 192.52.180.1 on interface 3. You'd use ipNetToMediaPhysAddress.3.192.52.180.1 and boom, you found it ๐Ÿ™Œ


7.6. tcpConnTable Object Type Names ๐Ÿ”Œ

This one is a whole vibe ๐Ÿ˜ญ The name of a TCP connection, x, is an OBJECT IDENTIFIER shaped like a.b.c.d.e.f.g.h.i.j, and every piece is pulled from a different field:

  • a.b.c.d is the tcpConnLocalAddress value, in dot notation.
  • f.g.h.i is the tcpConnRemoteAddress value, also in dot notation.
  • e is the tcpConnLocalPort value.
  • j is the tcpConnRemotePort value.

Every object type whose defined name starts with tcpConnEntry gets an instance named n.y, where y is the TCP connection that instance is about ๐ŸŒธ

Here's the example: a connection with local address 89.1.1.42 on TCP port 21 and remote address 10.0.0.51 on TCP port 2059. To check its state, you'd grab tcpConnState.89.1.1.42.21.10.0.0.51.2059 โœจ Ten numbers in one name, and honestly? Iconic ๐Ÿ‘‘


7.7. udpTable Object Type Names ๐ŸŽง

The name of a UDP listener, x, is an OBJECT IDENTIFIER shaped like a.b.c.d.e. The a.b.c.d part is the udpLocalAddress value in dot notation, and e is the udpLocalPort value ๐Ÿฃ

Object types whose defined name starts with udpEntry get instances named n.y, where y is the UDP listener that instance describes ๐Ÿ“

Say you wanted to know whether a UDP listener was running at local address 89.1.1.42 on UDP port 21. A successful retrieval of either udpLocalAddress.89.1.1.42.21 or udpLocalPort.89.1.1.42.21 would tell you it's there ๐Ÿ’œ


7.8. egpNeighTable Object Type Names ๐Ÿค

The name of an EGP neighbor, x, is an OBJECT IDENTIFIER shaped like a.b.c.d. That's the egpNeighAddr value in dot notation ๐Ÿซถ

Object types whose defined name starts with egpNeighEntry get instances named n.y, where y is the EGP neighbor that instance is about ๐ŸŒˆ

For example, if you want the neighbor state for IP address 89.1.1.42, you'd use egpNeighState.89.1.1.42 and you're set ๐Ÿฆ„


8. Acknowledgements ๐Ÿ’Œ

This document was produced by the SNMP Working Group, and the squad is huge ๐Ÿฅน

           Karl Auerbach, Epilogue Technology
           David Bridgham, Epilogue Technology
           Brian Brown, Synoptics
           John Burress, Wellfleet
           Jeffrey D. Case, University of Tennessee at Knoxville
           James R. Davin, MIT-LCS
           Mark S. Fedor, PSI, Inc.
           Stan Froyd, ACC
           Satish Joshi, Synoptics
           Ken Key, University of Tennessee at Knoxville
           Gary Malkin, Proteon
           Randy Mayhew, University of Tennessee at Knoxville
           Keith McCloghrie, Hughes LAN Systems
           Marshall T. Rose, PSI, Inc. (chair)
           Greg Satz, cisco
           Martin Lee Schoffstall, PSI, Inc.
           Bob Stewart, Xyplex
           Geoff Thompson, Synoptics
           Bill Versteeg, Network Research Corporation
           Wengyik Yeong, PSI, Inc.

On top of that, the comments of the following individuals were also acknowledged (the original has a typo here, "acknolwedged", and yes, I'm keeping the vibe but not judging it ๐Ÿ™ˆ):

           Craig A. Finseth, Minnesota Supercomputer Center, Inc.
           Jeffrey C. Honig, Cornell University Theory Center
           Philip R. Karn, Bellcore
           David Waitzman, BBN

9. References ๐Ÿ“š

Every single citation, stacked up like a reading list ๐Ÿงพ

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

[2] Rose, M., and K. McCloghrie, "Structure and Identification of
    Management Information for TCP/IP-based internets", RFC 1065,
    TWG, August 1988.

[3] McCloghrie K., and M. Rose,"Management Information Base for
    Network Management of TCP/IP-based internets", RFC 1066, TWG,
    August 1988.

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

[5] Case, J., Fedor, M., Schoffstall, M., and J. Davin, "A Simple
    Network Management Protocol (SNMP)", RFC 1098, University of
    Tennessee at Knoxville, NYSERNet, Inc., Rensselaer Polytechnic
    Institute, MIT Laboratory for Computer Science, April 1989.

[6] Warrier, U., and L. Besaw, "Common Management Information
    Services and Protocol over TCP/IP (CMOT)", RFC 1095, Unisys
    Corporation, Hewlett-Packard, April 1989.

[7] Postel, J., "Telnet Protocol Specification", RFC 854,
    USC/Information Sciences Institute, May 1983.

[8] Satz, G., "Experimental MIB Objects for the CLNP", Internet
    Working Group Request for Comments draft.  Network Information
    Center, SRI International, Menlo Park, California, (in
    preparation).

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

[10] 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.

[11] Jacobson, V., "Congestion Avoidance and Control", SIGCOMM 1988,
     Stanford, California.

[12] Hagens, R., Hall, N., and M. Rose, "Use of the Internet as a
     subnetwork for experimentation with the OSI network layer",
     February, 1989.

[13] 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.

[14] Case, J., Fedor, M.,  Schoffstall, M., 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.

10. Security Considerations ๐Ÿšจ

Plot twist: security issues are not discussed in this memo. ๐Ÿ’€ Read that again, bestie. Implementers should take this seriously and look for guidance elsewhere before deploying anything. This is not the place to get relaxed ๐Ÿ˜ญ๐Ÿ”ฅ


11. Author's Address ๐Ÿ“ฎ

   Marshall T. Rose
   PSI, Inc.
   PSI California Office
   P.O. Box 391776
   Mountain View, CA 94039

   Phone: (415) 961-3380

   Email: mrose@PSI.COM

And that's the whole RFC, bestie ๐ŸŽ€โœจ Thanks for reading all the way to the end ๐Ÿซถ๐Ÿ’–

๐Ÿ“ฆ where this page comes from