RFC 1156

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

πŸ“… published May 1990, from ietf

Bestie, RFC 1156 is literally the blueprint for how TCP/IP networks get monitored and managed, and it's giving main character energy πŸ’–βœ¨

Title block tea β˜•

This one is Management Information Base for Network Management of TCP/IP-based internets πŸ¦‹. It came from K. McCloghrie at Hughes LAN Systems and M. Rose at Performance Systems International, dated May 1990 🌸. It's part of the Network Working Group, and it obsoletes RFC 1066 πŸ’…, which makes sense because this is basically a re-release of that one with a glow-up πŸ”.

   1. Status of this Memo ...................................   1
   2. IAB Policy Statement ..................................   2
   3. Introduction ..........................................   2
   4. Objects ...............................................   6
   4.1 Object Groups ........................................   6
   4.2 Format of Definitions ................................   7
   5. Object Definitions ....................................   8
   5.1 The System Group .....................................   9
   5.2 The Interfaces Group .................................  11
   5.2.1 The Interfaces Table ...............................  11
   5.3 The Address Translation Group ........................  23
   5.4 The IP Group .........................................  26
   5.4.1 The IP Address Table ...............................  34
   5.4.2 The IP Routing Table ...............................  36
   5.5 The ICMP Group .......................................  43
   5.6 The TCP Group ........................................  53
   5.7 The UDP Group ........................................  62
   5.8 The EGP Group ........................................  64
   5.8.1 The EGP Neighbor Table .............................  65
   6. Definitions ...........................................  68
   7. Acknowledgements ......................................  89
   8. References ............................................  90
   9. Security Considerations................................  91
   10. Authors' Addresses....................................  91

1. Status of this Memo ✨

Okay so this RFC is a re-release of RFC 1066 πŸ”. The technical content is unchanged. The only real changes are to the "Status of this Memo", "IAB Policy Statement", and "Introduction" sections, plus a few minor typo fixes πŸ™ˆ. Same brain, new outfit πŸ’….

This memo gives us the first version of the Management Information Base (MIB) for network management protocols in TCP/IP-based internets, for the short term 🧚. Together with its companion memos (one on how management information is structured, one on the first network management protocol), it gives us a simple, workable architecture and system for managing TCP/IP-based internets and especially the Internet 🌈.

This memo specifies a Standard Protocol for the Internet community. TCP/IP implementations on the Internet that are network manageable are expected to adopt and implement this spec 🫢.

The Internet Activities Board recommends that all IP and TCP implementations be network manageable. That implies implementing the Internet MIB (RFC-1156) and at least one of the two recommended management protocols, which are SNMP (RFC-1157) or CMOT (RFC-1095). Heads up, though: at this time SNMP is a full Internet standard and CMOT is a draft standard ⭐. For more specific info on where this standard applies, check the Host and Gateway Requirements RFCs πŸ”.

Please refer to the latest edition of the "IAB Official Protocol Standards" RFC for current info on the state and status of standard Internet protocols πŸ“œ.

Distribution of this memo is unlimited πŸ¦‹.

2. IAB Policy Statement πŸ’œ

This MIB spec is the first edition of an evolving document that defines the variables needed for monitoring and controlling different parts of the Internet. Not every group of variables is mandatory for every Internet component πŸ™ˆ.

For example, the EGP group is mandatory for gateways using EGP, but not for hosts that aren't supposed to be running EGP. Similarly, the TCP group is mandatory for hosts running TCP, but not for gateways that aren't running it. What IS mandatory, however, is that all variables of a group be supported if any element of the group is supported. πŸ”₯

More groups and variables are expected to be defined over time, so we can keep up with the monitoring and control needs of new or changing Internet components 🌸. The responsible working group(s) will keep refining this spec 🫢.

3. Introduction πŸŽ€

Okay, the backstory is so good. As reported in RFC 1052, IAB Recommendations for the Development of Internet Network Management Standards [1], the Internet Activities Board told the Internet Engineering Task Force (IETF) to create two new working groups for network management πŸ‘‘. One was in charge of further specifying and defining what goes into the Management Information Base. The other was in charge of defining changes to the Simple Network Management Protocol (SNMP) so it could handle the short-term needs of vendors and operators. For the long term, the OSI network management framework was going to be examined, using the ISO CMIS/CMIP [2,3] framework as a basis 🧠.

Two documents came out of this. RFC 1065 defined the Structure of Management Information (SMI) [4], and RFC 1066 defined the Management Information Base (MIB) [5]. Both were designed to be compatible with both SNMP and the OSI network management framework πŸ¦‹.

This strategy was a total hit in the short term πŸ”₯. Internet-based network management tech was fielded by both the research and commercial communities within a few months, so parts of the Internet community became network manageable in a timely fashion πŸŽ‰.

Then, as RFC 1109, Report of the Second Ad Hoc Network Management Review Group [6], reported, the requirements of the SNMP and OSI network management frameworks turned out to be more different than anyone expected 😭. So the requirement for compatibility between the SMI/MIB and both frameworks was suspended πŸ’€.

The IAB has designated SNMP, SMI, and the initial Internet MIB as full "Standard Protocols" with "Recommended" status πŸ‘‘. With that move, the IAB recommends that all IP and TCP implementations be network manageable, and that the ones that are network manageable are expected to adopt and implement the SMI, MIB, and SNMP 🫢.

So the current network management framework for TCP/IP-based internets has three pieces 🧚:

  • Structure and Identification of Management Information for TCP/IP-based Internets, which describes how managed objects in the MIB are defined, as set forth in RFC 1155 [7].
  • Management Information Base for Network Management of TCP/IP-based Internets, which describes the managed objects in the MIB, as set forth in this memo.
  • The Simple Network Management Protocol, which defines the protocol used to manage these objects, as set forth in RFC 1157 [8].

The IAB also urged the working groups to be "extremely sensitive to the need to keep SNMP simple" πŸ™ˆ. It also recommends that the MIB working group use the MIB definitions in the High-Level Entity Management Systems (HEMS) RFC 1024 [9], the initial SNMP specification [10], and the CMIS/CMIP memos [11,12] as its starting inputs πŸ“œ.

So the list of managed objects defined here was built by taking only the elements considered essential πŸ’…. Since they're essential, there's no need to make individual objects optional. Instead, all compliant implementations will contain all applicable objects defined in this memo (see below) 🫢.

This essentials-only approach is NOT restrictive ✨, since the SMI in the companion memo gives us three extensibility mechanisms 🌈. One is adding new standard objects through new versions of the MIB. Two is adding widely-available but non-standard objects through the multilateral subtree. Three is adding private objects through the enterprises subtree. These additional objects can be used for vendor-specific elements, and also for experimentation to help figure out which other objects are essential πŸ§ͺ.

The main criterion for being considered essential was for an object to be contained in all of the above referenced MIB definitions. A few other objects were included, but only if the MIB working group believed they were truly essential πŸ‘‘. The detailed list of criteria used to consider potential inclusions in this (initial) MIB was:

  1. An object needed to be essential for either fault or configuration management.
  2. Only weak control objects were permitted. By weak, it is meant that tampering with them can do only limited damage. This criterion reflects the fact that the current management protocols are not sufficiently secure to do more powerful control operations πŸ”’.
  3. Evidence of current use and utility was required πŸ“Š.
  4. An attempt was made to limit the number of objects to about 100, to make it easier for vendors to fully instrument their software πŸ“.
  5. To avoid redundant variables, it was required that no object be included that can be derived from others in the MIB 🧩.
  6. Implementation-specific objects (e.g., for BSD UNIX) were excluded πŸ™….
  7. It was agreed to avoid heavily instrumenting critical sections of code. The general guideline was one counter per critical section per layer πŸ’œ.

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) [13] πŸŽ€.

The mechanisms for describing these objects are specified in the companion memo. In particular, 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 serves to uniquely identify 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 that corresponds to that object type, and the ASN.1 language is used for this purpose. However, the companion memo purposely restricts which ASN.1 constructs may be used. These restrictions are made explicitly for simplicity 🫢.

The encoding of an object type is simply how that object type is represented using the object type's syntax. Implicitly tied to the notion of an object type's 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 of ASN.1 [14] πŸ’….

4.1. Object Groups ✨

okay so the managed objects list is already super lean πŸ¦‹ every object is essential, so nothing is optional. no "maybe you get this one" situations. instead, the objects get sorted into groups:

  • System
  • Interfaces
  • Address Translation
  • IP
  • ICMP
  • TCP
  • UDP
  • EGP

there are two reasons for these groups πŸ’… first, they give object identifiers a neat place to live. second, they tell agent implementers which objects they have to build. the rule is: if a group's meaning applies to your implementation, then you must implement every object in that group. for example, an implementation must implement the EGP group if and only if it implements the EGP protocol. so basically EGP is a package deal πŸŽ€

4.2. Format of Definitions 🌸

the next section has every object type in the MIB πŸ“– following the conventions of the companion memo, each object type gets these fields:

  • OBJECT: a textual name (the OBJECT DESCRIPTOR) plus its matching OBJECT IDENTIFIER
  • Syntax: the abstract syntax, written in ASN.1. this must resolve to an instance of the ASN.1 type ObjectSyntax defined in the SMI
  • Definition: a text description of what the object type means. implementations should make sure their interpretation matches this definition, because this MIB is meant for multi-vendor environments. so consistent meaning across every machine is vital 🫢
  • Access: one of read-only, read-write, write-only, or not-accessible
  • Status: one of mandatory, optional, or obsolete

5. Object Definitions πŸ‘‘

here's the full MIB module, copied exactly:

RFC1156-MIB

DEFINITIONS ::= BEGIN

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

mib        OBJECT IDENTIFIER ::= { mgmt 1 }

system     OBJECT IDENTIFIER ::= { mib 1 }
interfaces OBJECT IDENTIFIER ::= { mib 2 }
at         OBJECT IDENTIFIER ::= { mib 3 }
ip         OBJECT IDENTIFIER ::= { mib 4 }
icmp       OBJECT IDENTIFIER ::= { mib 5 }
tcp        OBJECT IDENTIFIER ::= { mib 6 }
udp        OBJECT IDENTIFIER ::= { mib 7 }
egp        OBJECT IDENTIFIER ::= { mib 8 }

END

5.1. The System Group πŸ’–

implementing the System group is mandatory for every system. no exceptions bestie πŸ™ˆ

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

Syntax:
     OCTET STRING

this is a text description of the entity πŸ“ it should include the full name and version of the system's hardware type, operating-system software, and networking software. and it is mandatory that this only contains printable ASCII characters.

Access: read-only. Status: mandatory.

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

Syntax:
     OBJECT IDENTIFIER

this is the vendor's official ID for the network management subsystem inside the entity 🧚 it's allocated inside the SMI enterprises subtree (1.3.6.1.4.1), so you can tell at a glance "what kind of box" is being managed. for example, if vendor "Flintstones, Inc." got the subtree 1.3.6.1.4.1.42, it could give its "Fred Router" the identifier 1.3.6.1.4.1.42.1.1 πŸͺ¨

Access: read-only. Status: mandatory.

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

Syntax:
     TimeTicks

this is how long, in hundredths of a second, it has been since the network management portion of the system was last re-initialized ⏰

Access: read-only. Status: mandatory.

5.2. The Interfaces Group πŸ¦‹

implementing the Interfaces group is also mandatory for every system. literally everyone has to do this one πŸ’…

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

Syntax:
     INTEGER

this is the number of network interfaces (no matter their current state) that this system can send and receive IP datagrams on πŸ”Œ

Access: read-only. Status: mandatory.

5.2.1. The Interfaces Table πŸŽ€

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

Syntax:
     SEQUENCE OF IfEntry

this is a list of interface entries. the number of entries is given by the value of ifNumber πŸ“‹

Access: read-write. Status: mandatory.

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

Syntax:
     IfEntry ::= SEQUENCE {

          ifIndex
              INTEGER,
          ifDescr
              OCTET STRING,
          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
     }

each interface entry holds objects from the subnetwork layer and below, for one particular interface 🧩

Access: read-write. Status: mandatory.

okay now we break down each piece of an interface entry, bestie πŸ”

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

Syntax:
     INTEGER

this is a unique value for each interface. it ranges from 1 up to the value of ifNumber. each interface's value has to stay constant at least from one re-initialization of the entity's network management system to the next one πŸ”’

Access: read-only. Status: mandatory.

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

Syntax:
     OCTET STRING

this is a text string with info about the interface 🏷️ it should include the manufacturer's name, the product name, and the version of the hardware interface. the string is meant to be shown to a human, so it must not contain anything but printable ASCII characters ✨

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)
     }

this is the type of interface, sorted by the physical/link/network protocol(s) sitting "below" IP in the protocol stack πŸ₯ž

Access: read-only. Status: mandatory.

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

Syntax:
     INTEGER

this is the size of the biggest IP datagram that can be sent or received on the interface, measured in octets πŸ“¦

Access: read-only. Status: mandatory.

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

Syntax:
     Gauge

this is an estimate of the interface's current bandwidth, in bits per second πŸš€ for interfaces whose bandwidth doesn't vary, or where no accurate estimate is possible, this object should contain the nominal bandwidth.

Access: read-only. Status: mandatory.

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

Syntax:
     OCTET STRING

this is the interface's address at the protocol layer sitting "below" IP in the stack πŸ“ for interfaces without such an address (like a serial line), this object should contain an octet string of zero length 🫧

Access: read-only. Status: mandatory.

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

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

this is the desired state of the interface πŸŽ›οΈ the testing(3) state means no operational packets can be passed ⚠️

Access:
     read-write.

Status:
     mandatory.

Okay, so the ifOperStatus object is the interface's current vibe check πŸ’… Its state can be up(1) (ready to pass packets ✨), down(2), or testing(3) (in some test mode πŸ§ͺ). When it's testing(3), no operational packets can get through, so it's basically on a little time-out πŸ™ˆ

OBJECT:
-------
     ifOperStatus { ifEntry 8 }

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

The current operational state of the interface, bestie. Remember that testing(3) means no operational packets can be passed. πŸ§ͺ

Access:
     read-only.

Status:
     mandatory.

Next up is ifLastChange πŸ•°οΈ This one is a TimeTicks value that records the sysUpTime at the moment the interface entered its current operational state. Now here's the tea β˜• If that state was entered before the local network management subsystem last re-initialized, this object just holds a zero value. Zero means "it's been a whole thing, but I can't really say when" 😭

OBJECT:
-------
     ifLastChange { ifEntry 9 }

Syntax:
     TimeTicks

The value of sysUpTime at the time the interface entered its current operational state. If the current state was entered prior to the last re-initialization of the local network management subsystem, then this object contains a zero value. πŸ•°οΈ

Access:
     read-only.

Status:
     mandatory.

Now we're in the counter era πŸ”’ ifInOctets tracks the total number of octets received on the interface, and that includes the framing characters too. Every single byte, even the wrapper ✨

OBJECT:
-------
     ifInOctets { ifEntry 10 }

Syntax:
     Counter

The total number of octets received on the interface, including framing characters. πŸ“¦

Access:
     read-only.

Status:
     mandatory.

ifInUcastPkts counts the (subnet) unicast packets that got delivered up to a higher-layer protocol. Think of it as the packets that were like "this one's for you" and actually made it πŸ’Œ

OBJECT:
-------
     ifInUcastPkts  { ifEntry 11 }

Syntax:
     Counter

The number of (subnet) unicast packets delivered to a higher-layer protocol. πŸ’Œ

Access:
     read-only.

Status:
     mandatory.

ifInNUcastPkts is the non-unicast crew πŸ“’ That means subnet broadcast or subnet multicast packets that got delivered up to a higher-layer protocol. Group chat energy, fr fr πŸ’¬

OBJECT:
-------
     ifInNUcastPkts { ifEntry 12 }

Syntax:
     Counter

The number of non-unicast (i.e., subnet broadcast or subnet multicast) packets delivered to a higher-layer protocol. πŸ“’

Access:
     read-only.

Status:
     mandatory.

ifInDiscards is for the inbound packets that got deliberately dropped πŸ—‘οΈ Not because anything was broken, mind you. No errors were detected, but they got chosen to be discarded anyway, which means they never reached a higher-layer protocol. One possible reason is freeing up buffer space, which is honestly a very mature move πŸ§˜β€β™€οΈ

OBJECT:
-------
     ifInDiscards { ifEntry 13 }

Syntax:
     Counter

The number of inbound packets which were chosen to be discarded even though no errors had been detected to prevent their being deliverable to a higher-layer protocol. One possible reason for discarding such a packet could be to free up buffer space. πŸ§˜β€β™€οΈ

Access:
     read-only.

Status:
     mandatory.

ifInErrors counts the inbound packets that were actually broken πŸ’€ They had errors that stopped them from being deliverable to a higher-layer protocol. Oof, not the vibe ✨

OBJECT:
-------
     ifInErrors { ifEntry 14 }

Syntax:
     Counter

The number of inbound packets that contained errors preventing them from being deliverable to a higher-layer protocol. πŸ’€

Access:
     read-only.

Status:
     mandatory.

ifInUnknownProtos is for the packets that showed up at the interface and got tossed because the protocol was unknown or unsupported πŸ™…β€β™€οΈ Not everyone speaks your language, and that's okay 🌈

OBJECT:
-------
     ifInUnknownProtos { ifEntry 15 }

Syntax:
     Counter

The number of packets received via the interface which were discarded because of an unknown or unsupported protocol. πŸ™…β€β™€οΈ

Access:
     read-only.

Status:
    mandatory.

Time to flip to the outbound side πŸš€ ifOutOctets is the total number of octets transmitted out of the interface, framing characters included. Everything that left the building πŸ“€

OBJECT:
-------
     ifOutOctets { ifEntry 16 }

Syntax:
     Counter

The total number of octets transmitted out of the interface, including framing characters. πŸ“€

Access:
     read-only.

Status:
     mandatory.

ifOutUcastPkts counts every packet that higher-level protocols asked to be sent to a subnet-unicast address. That includes the ones that got discarded or never actually sent, so it's all about the request, not the outcome 🫢

OBJECT:
-------
     ifOutUcastPkts { ifEntry 17 }

Syntax:
     Counter

The total number of packets that higher-level protocols requested be transmitted to a subnet-unicast address, including those that were discarded or not sent. 🫢

Access:
     read-only.

Status:
     mandatory.

ifOutNUcastPkts is the same deal, just for the non-unicast crew πŸ“£ Subnet broadcast and subnet multicast addresses, and yes, that still includes the ones that got discarded or never sent πŸ’…

OBJECT:
-------
    ifOutNUcastPkts { ifEntry 18 }

Syntax:
     Counter

The total number of packets that higher-level protocols requested be transmitted to a non-unicast (i.e., a subnet broadcast or subnet multicast) address, including those that were discarded or not sent. πŸ“£

Access:
     read-only.

Status:
     mandatory.

ifOutDiscards is the outbound version of ifInDiscards πŸ—‘οΈ These are the outbound packets that got chosen to be discarded even though no errors were detected to stop them from being transmitted. Again, one possible reason is freeing up buffer space πŸ§˜β€β™€οΈ

OBJECT:
-------
     ifOutDiscards { ifEntry 19 }

Syntax:
     Counter

The number of outbound packets which were chosen to be discarded even though no errors had been detected to prevent their being transmitted. One possible reason for discarding such a packet could be to free up buffer space. πŸ§˜β€β™€οΈ

Access:
     read-only.

Status:
     mandatory.

ifOutErrors counts the outbound packets that couldn't be transmitted because of errors 😭 Sad, but at least it's tracked πŸ’œ

OBJECT:
-------
     ifOutErrors { ifEntry 20 }

Syntax:
     Counter

The number of outbound packets that could not be transmitted because of errors. 😭

Access:
     read-only.

Status:
     mandatory.

Last one in this group: ifOutQLen is a Gauge showing the length of the output packet queue, measured in packets πŸ“š It's basically the line outside the club πŸͺ©

OBJECT:
-------
     ifOutQLen { ifEntry 21 }

Syntax:
     Gauge

The length of the output packet queue (in packets). πŸ“š

Access:
     read-only.

Status:
     mandatory.

5.3. The Address Translation Group ✨

Implementation of the Address Translation group is mandatory for all systems. No skipping this one, bestie 🫢

The Address Translation group has one table, and it's the union across all interfaces of the translation tables that convert a NetworkAddress (for example, an IP address) into a subnetwork-specific address πŸ—ΊοΈ The document doesn't have a better word for that subnetwork-specific address, so it just calls it a "physical" address. Not the most glamorous name, but it gets the job done πŸ’…

Here are a couple of examples of what those translation tables look like πŸ‘€ For broadcast media where ARP is in use, the translation table is basically the ARP cache. Or on an X.25 network where you need non-algorithmic translation to X.121 addresses, the table holds the NetworkAddress to X.121 address equivalences. Iykyk 🧚

atTable is the big table itself πŸ“‹ It holds the NetworkAddress to "physical" address equivalences. Some interfaces don't use translation tables at all, because DDN-X.25 has an algorithmic method instead. So if every interface is that kind, the Address Translation table is empty, meaning zero entries. Empty, but make it make sense 🌸

OBJECT:
-------
     atTable { at 1 }

Syntax:
     SEQUENCE OF AtEntry

The Address Translation tables contain the NetworkAddress to "physical" address equivalences. Some interfaces do not use translation tables for determining address equivalences (e.g., DDN-X.25 has an algorithmic method); if all interfaces are of this type, then the Address Translation table is empty, i.e., has zero entries. πŸ“‹

Access:
     read-write.

Status:
     mandatory.

Now for atEntry, which is one row in that table πŸ“ Each entry is one NetworkAddress to "physical" address equivalence. Here's how the entry is structured:

OBJECT:
-------
     atEntry { atTable 1 }

Syntax:
     AtEntry ::= SEQUENCE {
          atIfIndex

              INTEGER,
          atPhysAddress
              OCTET STRING,
          atNetAddress
              NetworkAddress
     }

Each entry contains one NetworkAddress to "physical" address equivalence. πŸ“

Access:
     read-write.

Status:
     mandatory.

Okay, so every entry has three pieces, and we're going to look at each one individually πŸ”

OBJECT:
-------
     atIfIndex { atEntry 1 }

Syntax:
     INTEGER

atIfIndex tells you which interface this equivalence is effective on πŸ”Œ The interface with that index value is the same one identified by the same value of ifIndex. Matching IDs, no drama 🫢

Access:
     read-write.

Status:
     mandatory.

Here's the atPhysAddress, which is the media-dependent "physical" address 🧩 It depends on the medium, so it's going to look different depending on what network you're on.

OBJECT:
-------
     atPhysAddress { atEntry 2 }

Syntax:
     OCTET STRING

The media-dependent "physical" address. 🧩

Access:
     read-write.

Status:
     mandatory.

Last but definitely not least is atNetAddress 🌐 This is the NetworkAddress, like an IP address, that corresponds to that media-dependent "physical" address. It's the matchmaker of the whole entry πŸ’–

OBJECT:
-------
     atNetAddress { atEntry 3 }

Syntax:
     NetworkAddress

The NetworkAddress (e.g., the IP address) corresponding to the media-dependent "physical" address. πŸ’–

Access:
     read-write.

Status:
     mandatory.

5.4. The IP Group 🌸

Okay bestie, this is the big one πŸ’… Every system has to implement the IP group, no exceptions. Here's the full lineup, so grab your snacks πŸ“

ipForwarding is the "are you a gateway or a host?" switch 🧚

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

          Syntax:
               INTEGER {
                    gateway(1),   -- entity forwards datagrams
                    host(2)       -- entity does NOT forward datagrams
               }

          Definition:
               The indication of whether this entity is acting as an IP
               gateway in respect to the forwarding of datagrams
               received by, but not addressed to, this entity.  IP
               gateways forward datagrams; Hosts do not (except those
               Source-Routed via the host).

          Access:
               read-only.

          Status:
               mandatory.

ipDefaultTTL is the default Time-To-Live stamped on datagrams this entity starts itself, for when the transport layer doesn't hand over a TTL πŸ¦‹

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

          Syntax:
               INTEGER

          Definition:
               The default value inserted into the Time-To-Live field of
               the IP header of datagrams originated at this entity,
               whenever a TTL value is not supplied by the transport
               layer protocol.

          Access:
               read-write.

          Status:
               mandatory.

ipInReceives counts every input datagram that arrives from an interface, errors and all πŸ“₯

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

          Syntax:
               Counter

          Definition:
               The total number of input datagrams received from
               interfaces, including those received in error.

          Access:
               read-only.

          Status:
               mandatory.

ipInHdrErrors is the drama queen counter for datagrams tossed because of header problems πŸ’€

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

          Syntax:
               Counter

          Definition:
               The number of input datagrams discarded due to errors in
               their IP headers, including bad checksums, version number
               mismatch, other format errors, time-to-live exceeded,
               errors discovered in processing their IP options, etc.

          Access:
               read-only.

          Status:
               mandatory.

ipInAddrErrors keeps track of datagrams with a destination address this entity isn't allowed to receive πŸ™ˆ That includes invalid addresses (like 0.0.0.0) and unsupported Classes (like Class E). Non-gateways get extra credit here too, since a datagram with a destination that isn't local gets counted as well.

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

          Syntax:
               Counter

          Definition:
               The number of input datagrams discarded because the IP
               address in their IP header's destination field was not a
               valid address to be received at this entity.  This count
               includes invalid addresses (e.g., 0.0.0.0) and addresses
               of unsupported Classes (e.g., Class E).  For entities
               which are not IP Gateways and therefore do not forward
               datagrams, this counter includes datagrams discarded
               because the destination address was not a local address.

          Access:
               read-only.

          Status:
               mandatory.

ipForwDatagrams counts the datagrams this entity wasn't the final stop for, where it went looking for a route to pass them along πŸš€

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

          Syntax:
               Counter

          Definition:
               The number of input datagrams for which this entity was
               not their final IP destination, as a result of which an
               attempt was made to find a route to forward them to that
               final destination.  In entities which do not act as IP
               Gateways, this counter will include only those packets
               which were Source-Routed via this entity, and the
               Source-Route option processing was successful.

          Access:
               read-only.

          Status:
               mandatory.

ipInUnknownProtos is for locally addressed datagrams that arrive fine but speak a protocol nobody here recognises πŸ€·β€β™€οΈ

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

          Syntax:
               Counter

          Definition:
               The number of locally-addressed datagrams received
               successfully but discarded because of an unknown or
               unsupported protocol.

           Access:
               read-only.

          Status:
               mandatory.

ipInDiscards covers datagrams that were fine to process but got dropped anyway, like when buffer space runs out 🫧 It doesn't count datagrams dropped while waiting for reassembly.

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

          Syntax:
               Counter

          Definition:
               The number of input IP datagrams for which no problems
               were encountered to prevent their continued processing,
               but which were discarded (e.g. for lack of buffer space).
               Note that this counter does not include any datagrams
               discarded while awaiting re-assembly.

          Access:
               read-only.

          Status:
               mandatory.

ipInDelivers is the victory lap πŸ† It counts input datagrams that were successfully handed up to IP user-protocols, ICMP included.

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

          Syntax:
               Counter

          Definition:
               The total number of input datagrams successfully
               delivered to IP user-protocols (including ICMP).

          Access:
               read-only.

          Status:
               mandatory.

ipOutRequests counts the outgoing datagrams that local IP user-protocols (ICMP included) asked IP to send πŸ“€ Forwarded datagrams are NOT part of this count, they live in ipForwDatagrams.

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

          Syntax:
               Counter

          Definition:
               The total number of IP datagrams which local IP user-
               protocols (including ICMP) supplied to IP in requests for
               transmission.  Note that this counter does not include
               any datagrams counted in ipForwDatagrams.

          Access:
               read-only.

          Status:
               mandatory.

ipOutDiscards is the outgoing version of the discard counter πŸ—‘οΈ Here, a datagram that was fine to send but got dropped anyway (like for lack of buffer space) lands in this count. Heads up, this one also picks up forwarded datagrams if they get discarded under that same discretionary criterion.

          OBJECT:
          -------
               ipOutDiscards { ip 11 }

          Syntax:
               Counter

          Definition:
               The number of output IP datagrams for which no problem
               was encountered to prevent their transmission to their
               destination, but which were discarded (e.g., for lack of
               buffer space).  Note that this counter would include
               datagrams counted in ipForwDatagrams if any such packets
               met this (discretionary) discard criterion.

          Access:
               read-only.

          Status:
               mandatory.

ipOutNoRoutes counts datagrams that got binned because there was no route to their destination πŸ—ΊοΈβœ¨ Forwarded datagrams that hit this "no-route" wall are included too.

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

          Syntax:
               Counter

          Definition:
               The number of IP datagrams discarded because no route
               could be found to transmit them to their destination.
               Note that this counter includes any packets counted in
               ipForwDatagrams which meet this "no-route" criterion.

          Access:
               read-only.

          Status:
               mandatory.

ipReasmTimeout tells you the maximum number of seconds received fragments get to hang out while waiting to be reassembled ⏳

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

          Syntax:
               INTEGER

          Definition:
               The maximum number of seconds which received fragments
               are held while they are awaiting reassembly at this
               entity.

          Access:
               read-only.

          Status:
               mandatory.

ipReasmReqds counts the IP fragments that showed up needing reassembly at this entity 🧩

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

          Syntax:
               Counter

          Definition:
               The number of IP fragments received which needed to be
               reassembled at this entity.

          Access:
               read-only.

          Status:
               mandatory.

ipReasmOKs is the glow-up count: IP datagrams that were successfully re-assembled 🌟

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

          Syntax:
               Counter

          Definition:
               The number of IP datagrams successfully re-assembled.

          Access:
               read-only.

          Status:
               mandatory.

ipReasmFails counts reassembly failures 😭 It's whatever went wrong, timeouts and errors included. Also, heads up: it's NOT always a count of discarded fragments, because some reassembly algorithms (notably the one in RFC 815) can lose track of how many fragments there are once they start combining them as they arrive.

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

          Syntax:
               Counter

          Definition:
               The number of failures detected by the IP re-assembly
               algorithm (for whatever reason:  timed out, errors, etc).

               Note that this is not necessarily a count of discarded IP
               fragments since some algorithms (notably RFC 815's) can
               lose track of the number of fragments by combining them
               as they are received.

          Access:
               read-only.

          Status:
               mandatory.

ipFragOKs counts the datagrams that got fragmented successfully at this entity βœ‚οΈπŸ’–

          OBJECT:
          -------
               ipFragOKs { ip 17 }

          Syntax:
              Counter

          Definition:
               The number of IP datagrams that have been successfully
               fragmented at this entity.

          Access:
               read-only.

          Status:
               mandatory.

ipFragFails is for datagrams that needed fragmenting here but couldn't be, like when their "Don't Fragment" flag was set 🚫 Those get discarded and counted here.

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

          Syntax:
               Counter

          Definition:
               The number of IP datagrams that have been discarded
               because they needed to be fragmented at this entity but
               could not be, e.g., because their "Don't Fragment" flag
               was set.

          Access:
               read-only.

          Status:
               mandatory.

ipFragCreates is the final one in the group πŸ‘‘ It counts the datagram fragments generated by fragmentation at this entity.

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

          Syntax:
               Counter

          Definition:
               The number of IP datagram fragments that have been
               generated as a result of fragmentation at this entity.

          Access:
               read-only.

          Status:
               mandatory.

5.4.1. The IP Address Table πŸŽ€

okay so the Ip Address table is where this entity keeps all its IP addressing info, and it's giving main character energy πŸ’…

          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.
          OBJECT:
          -------
               ipAddrEntry { ipAddrTable 1 }

          Syntax:
               IpAddrEntry ::= SEQUENCE {
                    ipAdEntAddr
                        IpAddress,
                    ipAdEntIfIndex
                        INTEGER,
                    ipAdEntNetMask
                        IpAddress,
                    ipAdEntBcastAddr
                        INTEGER
               }

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

          Access:
               read-only.

          Status:
               mandatory.
          OBJECT:
          -------
               ipAdEntAddr  { ipAddrEntry 1 }

          Syntax:
               IpAddress

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

          Access:
               read-only.

          Status:
               mandatory.
          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.
          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.
          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.

          Access:
               read-only.

          Status:
               mandatory.

5.4.2. The IP Routing Table πŸ¦‹

the IP Routing Table has an entry for every route this entity currently knows about πŸ—ΊοΈ heads up though: what happens when you try to read an entry that doesn't exist depends on which network management protocol you're using, ngl πŸ™ˆ

          OBJECT:
          -------
               ipRoutingTable { ip 21 }

          Syntax:
               SEQUENCE OF IpRouteEntry

          Definition:
               This entity's IP Routing table.

          Access:
               read-write.

          Status:
               mandatory.
          OBJECT:
          -------
               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
               }

          Definition:
               A route to a particular destination.

          Access:
               read-write.

          Status:
               mandatory.

We now consider the individual components of each route in the IP Routing Table:

          OBJECT:
          -------
               ipRouteDest { ipRouteEntry 1 }

          Syntax:
               IpAddress

          Definition:
               The destination IP address of this route.  An entry with
               a value of 0.0.0.0 is considered a default route.
               Multiple such default routes can appear in the table, but
               access to such multiple entries is dependent on the
               table-access mechanisms defined by the network management
               protocol in use.

          Access:
               read-write.

          Status:
               mandatory.
          OBJECT:
          -------
               ipRouteIfIndex  { ipRouteEntry 2 }

          Syntax:
               INTEGER

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

          Access:
               read-write.

          Status:
               mandatory.
          OBJECT:
          -------
               ipRouteMetric1 { ipRouteEntry 3 }

          Syntax:
               INTEGER

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

          Access:
               read-write.

          Status:
               mandatory.
          OBJECT:
          -------
               ipRouteMetric2 { ipRouteEntry 4 }

          Syntax:
               INTEGER

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

          Access:
               read-write.

          Status:
               mandatory.
          OBJECT:
          -------
               ipRouteMetric3 { ipRouteEntry 5 }

          Syntax:
               INTEGER

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

           Access:
               read-write.

           Status:
               mandatory.
          OBJECT:
          -------
               ipRouteMetric4 { ipRouteEntry 6 }

          Syntax:
               INTEGER

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

          Access:
               read-write.

          Status:
               mandatory.
          OBJECT:
          -------
               ipRouteNextHop { ipRouteEntry 7 }

          Syntax:
               IpAddress

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

          Access:
               read-write.

          Status:
               mandatory.
          OBJECT:
          -------
               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
               }

          Definition:
               The type of route.

          Access:
               read-write.

          Status:
               mandatory.
          OBJECT:
          -------
               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),
                    oigp(13)
               }

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

          Access:
               read-only.

          Status:
               mandatory.
          OBJECT:
          -------
               ipRouteAge { ipRouteEntry 10 }

          Syntax:
               INTEGER

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

          Access:
               read-write.

          Status:
               mandatory.

5.5. The ICMP Group πŸ¦‹

okay so the ICMP group is where we keep the receipts for all the ICMP traffic 🧾. bestie, implementing this group is mandatory for every system, no exceptions πŸ’…. it holds the ICMP input and output statistics, so basically every message that comes in or goes out gets tallied up here ✨

ngl, individual counters for ICMP message (sub-)codes got left out of this version of the MIB. it was for simplicity, not because they're not important πŸ™ˆ

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

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

this one is the big total πŸ’–. it's the number of ICMP messages the entity received, and it also counts everything that icmpInErrors counts, so it's the main umbrella number πŸ‘‘

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

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

the broken ones πŸ’€. this counts the ICMP messages the entity got but decided had errors, like bad ICMP checksums, bad lengths, and so on πŸ”§

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

Syntax:
    Counter

Access:
    read-only.

Status:
    mandatory.

how many Destination Unreachable messages came in 🚫 ✨

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

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

tracks the Time Exceeded messages that were received ⏰🌸

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

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

the Parameter Problem messages received 🧩

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

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

the Source Quench messages received 🌊

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

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

the Redirect messages received 🧭

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

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

the Echo (request) messages received, aka the pings coming in πŸ“

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

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

the Echo Reply messages received, which are the answers to pings πŸŽ€

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

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

the Timestamp (request) messages received ⏱️

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

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

the Timestamp Reply messages received πŸ’œ

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

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

the Address Mask Request messages received 🎭

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

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

the Address Mask Reply messages received πŸ“

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

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

now we flip to the outbound side πŸ“€. this is the total number of ICMP messages this entity tried to send. it also includes everything icmpOutErrors counts ✨

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

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

this one is for the ICMP messages the entity didn't send because of problems found inside ICMP itself, like running out of buffers 🫠. errors found outside the ICMP layer don't count here, such as IP being unable to route the resulting datagram. in some implementations there might not be any error types that feed into this counter at all πŸ€·β€β™€οΈ

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

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

the Destination Unreachable messages sent πŸš€

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

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

the Time Exceeded messages sent βŒ›

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

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

the Parameter Problem messages sent πŸͺ„

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

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

the Source Quench messages sent 🌧️

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

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

the Redirect messages sent πŸ—ΊοΈ

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

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

the Echo (request) messages sent, so the pings this entity launched πŸ“πŸ’…

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

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

the Echo Reply messages sent 🌷

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

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

the Timestamp (request) messages sent πŸ•°οΈ

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

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

the Timestamp Reply messages sent πŸ’–

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

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

the Address Mask Request messages sent 🎟️

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

Syntax:
     Counter

Access:
     read-only.

Status:
     mandatory.

the Address Mask Reply messages sent, and that's the outbound side wrapped up πŸ¦‹πŸ‘‘

5.6. The TCP Group πŸŽ€

Okay bestie, if your system implements TCP, the TCP group is mandatory. No cap, it's not optional πŸ’…

🫢 Heads up: objects that describe one specific TCP connection are transient. They only exist for as long as that connection does, so don't be shocked when they vanish πŸ¦‹
             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 [15]
                  }

             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.


             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.

             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.7. The UDP Group 🌸

Same energy for UDP! If your system implements the UDP protocol, this group is mandatory for you 🧚

             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.8. The EGP Group ✨

okay bestie, the EGP group is mandatory for literally every system that implements the EGP protocol 🫢 no exceptions, no cap.

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

             Syntax:
                  Counter

             Definition:
                  The number of EGP messages received without error.

             Access:
                  read-only.

             Status:
                  mandatory.


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

             Syntax:
                  Counter

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

             Access:
                  read-only.

             Status:
                  mandatory.


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

             Syntax:
                  Counter

             Definition:
                  The total number of locally generated EGP messages.

             Access:
                  read-only.

             Status:
                  mandatory.


             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.

5.8.1. The EGP Neighbor Table 🌸

so the EGP Neighbor table is where this entity keeps track of its EGP neighbors 🧚 it's giving neighborhood watch, lowkey iconic.

             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
                  }

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

             Access:
                  read-only.

             Status:
                  mandatory.

okay now let's go through each piece of an EGP neighbor entry, one at a time πŸ’…

             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.


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

             Syntax:
                  IpAddress

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

             Access:
                  read-only.

             Status:
                  mandatory.

6. Definitions πŸŽ€

bestie, this is the big MIB module where everything gets officially defined πŸ’– main character energy.

                RFC1156-MIB

                DEFINITIONS ::= BEGIN

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

                  mib        OBJECT IDENTIFIER ::= { mgmt 1 }

                  system     OBJECT IDENTIFIER ::= { mib 1 }
                  interfaces OBJECT IDENTIFIER ::= { mib 2 }
                  at         OBJECT IDENTIFIER ::= { mib 3 }
                  ip         OBJECT IDENTIFIER ::= { mib 4 }
                  icmp       OBJECT IDENTIFIER ::= { mib 5 }
                  tcp        OBJECT IDENTIFIER ::= { mib 6 }
                  udp        OBJECT IDENTIFIER ::= { mib 7 }
                  egp        OBJECT IDENTIFIER ::= { mib 8 }

                  -- object types

                  -- the System group

                  sysDescr OBJECT-TYPE
                          SYNTAX  OCTET STRING
                          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 }

                  -- 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-write
                          STATUS  mandatory
                          ::= { interfaces 2 }

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

                  IfEntry ::= SEQUENCE {
                      ifIndex
                          INTEGER,
                      ifDescr
                          OCTET STRING,
                      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
                  }

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

                  ifDescr OBJECT-TYPE
                          SYNTAX  OCTET STRING
                          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),
                                  basicIsdn(20),
                                  primaryIsdn(21),
                                                   -- proprietary serial
                                  propPointToPointSerial(22)
                              }
                          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 }

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 }

-- the Address Translation group

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

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

AtEntry ::= SEQUENCE { atIfIndex INTEGER, atPhysAddress OCTET STRING,

atNetAddress NetworkAddress }

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

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

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

-- the IP group

ipForwarding OBJECT-TYPE SYNTAX INTEGER { gateway(1), -- entity forwards datagrams host(2) -- entity does NOT forward datagrams } ACCESS read-only 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 }

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 }

-- 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 }

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

-- 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), oigp(13) } ACCESS read-only STATUS mandatory ::= { ipRouteEntry 9 }

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

-- 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 }

-- 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 [15] } 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 }

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 }

                  -- 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 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
                  }

                  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 }

                  END

7. Acknowledgements ✨

Huge thanks to the HEMS [9] and SNMP [10] MIBs, because the very first draft of this memo was heavily shaped by them πŸ’–

The final version is the result of suggestions, discussions, and compromises from the members of the IETF MIB working group 🫢

  • Karl Auerbach, Epilogue Technology
  • K. Ramesh Babu, Excelan
  • Lawrence Besaw, Hewlett-Packard
  • Jeffrey D. Case, University of Tennessee at Knoxville
  • James R. Davin, Proteon
  • Mark S. Fedor, NYSERNet
  • Robb Foster, BBN
  • Phill Gross, The MITRE Corporation
  • Bent Torp Jensen, Convergent Technology
  • Lee Labarre, The MITRE Corporation
  • Dan Lynch, Advanced Computing Environments
  • Keith McCloghrie, The Wollongong Group
  • Dave Mackie, 3Com/Bridge
  • Craig Partridge, BBN (chair)
  • Jim Robertson, 3Com/Bridge
  • Marshall T. Rose, The Wollongong Group
  • Greg Satz, cisco
  • Martin Lee Schoffstall, Rensselaer Polytechnic Institute
  • Lou Steinberg, IBM
  • Dean Throop, Data General
  • Unni Warrier, Unisys

8. References πŸ“š

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

[2] Information processing systems - Open Systems Interconnection, "Management Information Services Definition", International Organization for Standardization, Draft Proposal 9595/2, December 1987.

[3] Information processing systems - Open Systems Interconnection, "Management Information Protocol Specification", International Organization for Standardization, Draft Proposal 9596/2, December 1987.

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

[5] Partridge C., and G. Trewitt, "The High-Level Entity Management System (HEMS)", RFCs 1021-1024, BBN and Stanford, October 1987.

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

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

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

[9] Partridge C., and G. Trewitt, "HEMS Variable Definitions", RFC 1024, BBN and Stanford, October 1987.

[10] Case, J., M. Fedor, M. Schoffstall, and J. Davin, "A Simple Network Management Protocol", RFC 1067, University of Tennessee At Knoxville, NYSERNet, Rensselaer Polytechnic, Proteon, August 1988.

[11] LaBarre, L., "Structure and Identification of Management Information for the Internet", Internet Engineering Task Force working note, Network Information Center, SRI International, Menlo Park, California, April 1988.

[12] LaBarre, L., "Transport Layer Management Information: TCP", Internet Engineering Task Force working note in preparation. Network Information Center, SRI International, Menlo Park, California, (unpublished).

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

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

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


Security Considerations πŸ”’

Security issues are not discussed in this memo. πŸ™ˆ No cap, this one is a big deal for anyone thinking about deploying these MIBs, so keep it in mind!

Authors' Addresses πŸ’Œ

Keith McCloghrie
The Wollongong Group
1129 San Antonio Road
Palo Alto, CA 04303

Phone: (415) 962-7160

EMail: sytek!kzm@HPLABS.HP.COM
Marshall T. Rose
PSI, Inc.
PSI California Office
P.O. Box 391776
Mountain View, CA 94039

Phone: (415) 961-3380

EMail: mrose@PSI.COM
πŸ“¦ where this page comes from