RFC 2665

Definitions of Managed Objects for the Ethernet-like Interface Types

πŸ“… published August 1999, from ietf

RFC 2665 πŸŽ€ Definitions of Managed Objects for the Ethernet-like Interface Types

okay bestie, this one is a Standards Track doc from the Network Working Group, dated August 1999 πŸ“… Its authors are J. Flick (Hewlett-Packard Company) and J. Johnson (RedBack Networks) 🫢 The title block says it obsoletes RFC 2358 and lists no Updates, so RFC 2358 is the one getting replaced here πŸ’…


Status of this Memo ✨

This document specifies an Internet standards track protocol for the Internet community, and requests discussion and suggestions for improvements. Please refer to the current edition of the "Internet Official Protocol Standards" (STD 1) for the standardization state and status of this protocol. Distribution of this memo is unlimited.

Copyright (C) The Internet Society (1999). All Rights Reserved.

Abstract 🌸

This memo defines a portion of the Management Information Base (MIB) for use with network management protocols in the Internet community. This memo obsoletes RFC 2358, "Definitions of Managed Objects for the Ethernet-like Interface Types". This memo extends that specification by including management information useful for the management of 1000 Mb/s and full-duplex Ethernet interfaces.

Ethernet technology, as defined by the 802.3 Working Group of the IEEE, continues to evolve πŸš€ with scalable increases in speed, new types of cabling and interfaces, and new features. This evolution may require changes in the managed objects in order to reflect this new functionality. This document, as with other documents issued by this working group, reflects a certain stage in the evolution of Ethernet technology. In the future, this document might be revised, or new documents might be issued by the Ethernet Interfaces and Hub MIB Working Group, in order to reflect the evolution of Ethernet technology.

Table of Contents 🧚

1. Introduction ................................................    2
2.  The SNMP Management Framework ..............................    3
3.  Overview ...................................................    4
3.1.  Relation to MIB-2 ........................................    4
3.2.  Relation to the Interfaces MIB ...........................    5
3.2.1.  Layering Model .........................................    5
3.2.2.  Virtual Circuits .......................................    5
3.2.3.  ifTestTable ............................................    5
3.2.4.  ifRcvAddressTable ......................................    6
3.2.5.  ifPhysAddress ..........................................    6
3.2.6.  ifType .................................................    6
3.2.7.  Specific Interface MIB Objects .........................    7
3.3.  Relation to the 802.3 MAU MIB ............................   11
3.4.  dot3StatsEtherChipSet ....................................   11
3.5.  Mapping of IEEE 802.3 Managed Objects ....................   12
4.  Definitions ................................................   16
5.  Intellectual Property ......................................   39
6.  Acknowledgements ...........................................   40
7.  References .................................................   41
8.  Security Considerations ....................................   43
9.  Authors' Addresses .........................................   44
A.  Change Log .................................................   45
A.1.  Changes since RFC 2358 ...................................   45
A.2.  Changes between RFC 1650 and RFC 2358 ....................   46
B.  Full Copyright Statement ...................................   47

1. Introduction ✨

This memo defines a portion of the Management Information Base (MIB) for use with network management protocols in the Internet community. In particular, it defines objects for managing Ethernet-like interfaces.

This memo also includes a MIB module. This MIB module extends the list of managed objects specified in the earlier version of this MIB: RFC 2358 [23].

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [26].

2. The SNMP Management Framework πŸ¦‹

The SNMP Management Framework presently consists of five major components:

  • An overall architecture, described in RFC 2571 [1].
  • Mechanisms for describing and naming objects and events for the purpose of management. The first version of this Structure of Management Information (SMI) is called SMIv1 and described in STD 16, RFC 1155 [2], STD 16, RFC 1212 [3] and RFC 1215 [4]. The second version, called SMIv2, is described in STD 58, RFC 2578 [5], STD 58, RFC 2579 [6] and STD 58, RFC 2580 [7].
  • Message protocols for transferring management information. The first version of the SNMP message protocol is called SNMPv1 and described in STD 15, RFC 1157 [8]. A second version of the SNMP message protocol, which is not an Internet standards track protocol, is called SNMPv2c and described in RFC 1901 [9] and RFC 1906 [10]. The third version of the message protocol is called SNMPv3 and described in RFC 1906 [10], RFC 2572 [11] and RFC 2574 [12].
  • Protocol operations for accessing management information. The first set of protocol operations and associated PDU formats is described in STD 15, RFC 1157 [8]. A second set of protocol operations and associated PDU formats is described in RFC 1905 [13].
  • A set of fundamental applications described in RFC 2573 [14] and the view-based access control mechanism described in RFC 2575 [15].

Managed objects are accessed via a virtual information store, termed the Management Information Base or MIB. Objects in the MIB are defined using the mechanisms defined in the SMI.

This memo specifies a MIB module that is compliant to the SMIv2. A MIB conforming to the SMIv1 can be produced through the appropriate translations. The resulting translated MIB must be semantically equivalent, except where objects or events are omitted because no translation is possible (use of Counter64). Some machine readable information in SMIv2 will be converted into textual descriptions in SMIv1 during the translation process. However, this loss of machine readable information is not considered to change the semantics of the MIB.

3. Overview πŸ’–

Instances of these object types represent attributes of an interface to an ethernet-like communications medium. At present, ethernet-like media are identified by the following values of the ifType object in the Interfaces MIB [25]:

         ethernetCsmacd(6)
         iso88023Csmacd(7)
         starLan(11)

The definitions presented here are based on Section 30, "10 Mb/s, 100 Mb/s and 1000 Mb/s Management", and Annex 30A, "GDMO Specification for 802.3 managed object classes" of IEEE Std. 802.3, 1998 Edition [16], as originally interpreted by Frank Kastenholz then of Interlan in [17]. Implementors of these MIB objects should note that IEEE Std. 802.3 [16] explicitly describes (in the form of Pascal pseudocode) when, where, and how various MAC attributes are measured. The IEEE document also describes the effects of MAC actions that may be invoked by manipulating instances of the MIB objects defined here.

To the extent that some of the attributes defined in [16] are represented by previously defined objects in MIB-2 [24] or in the Interfaces MIB [25], such attributes are not redundantly represented by objects defined in this memo. Among the attributes represented by objects defined in other memos are the number of octets transmitted or received on a particular interface, the number of frames transmitted or received on a particular interface, the promiscuous status of an interface, the MAC address of an interface, and multicast information associated with an interface.

3.1. Relation to MIB-2 🌈

This section applies only when this MIB is used in conjunction with the "old" (RFC 1213) [24] interface group.

The relationship between an ethernet-like interface and an interface in the context of MIB-2 is one-to-one. As such, the value of an ifIndex object instance can be directly used to identify corresponding instances of the objects defined herein.

For agents which implement the (now deprecated) ifSpecific object, an instance of that object that is associated with an ethernet-like interface has the OBJECT IDENTIFIER value:

      dot3    OBJECT IDENTIFER ::= { transmission 7 }

3.2. Relation to the Interfaces MIB πŸ“

The Interface MIB [25] requires that any MIB which is an adjunct of the Interface MIB clarify specific areas within the Interface MIB. These areas were intentionally left vague in the Interface MIB to avoid over constraining the MIB, thereby precluding management of certain media-types.

Section 3.3 of [25] enumerates several areas which a media-specific MIB must clarify. Each of these areas is addressed in a following subsection. The implementor is referred to [25] in order to understand the general intent of these areas.

3.2.1. Layering Model 🧁

This MIB does not provide for layering. There are no sublayers.

EDITOR'S NOTE:

One could foresee the development of an 802.2 and enet-transceiver MIB. They could be higher and lower sublayers, respectively. All that THIS document should do is allude to the possibilities and urge the implementor to be aware of the possibility and that they may have requirements which supersede the requirements in this document.

3.2.2. Virtual Circuits πŸ¦„

This medium does not support virtual circuits and this area is not applicable to this MIB.

3.2.3. ifTestTable πŸ§ͺ

This MIB defines two tests for media which are instrumented with this MIB; TDR and Loopback. Implementation of these tests is not required. Many common interface chips do not support one or both of these tests.

These two tests are provided as a convenience, allowing a common method to invoke the test.

Standard MIBs do not include objects in which to return the results of the TDR test. Any needed objects MUST be provided in the vendor specific MIB.

Note that the ifTestTable is now deprecated. Work is underway to define a replacement MIB for system and interface testing. It is expected that the tests defined in this document will be usable in this replacement MIB.

3.2.4. ifRcvAddressTable πŸ’œ

This table contains all IEEE 802.3 addresses, unicast, multicast, and broadcast, for which this interface will receive packets and forward them up to a higher layer entity for local consumption. The format of the address, contained in ifRcvAddressAddress, is the same as for ifPhysAddress.

In the event that the interface is part of a MAC bridge, this table does not include unicast addresses which are accepted for possible forwarding out some other port. This table is explicitly not intended to provide a bridge address filtering mechanism.

3.2.5. ifPhysAddress ✨

okay bestie, this one is all about the MAC address πŸ¦‹. This object holds the IEEE 802.3 address that gets stuck in the source-address field of any Ethernet, Starlan, or IEEE 802.3 frames that leave this interface πŸ’–. Usually it's burned into ROM on the interface hardware, but some systems let software set it 🫢.

okay so when a system has several of these addresses, the designer has a tougher choice 😭. The one to pick is whichever is most likely to actually help network management, like the address that goes in ARP responses on systems that are mostly IP systems 🌸.

if the designer truly can not chose, using the factory-provided ROM address is suggested πŸ“.

if the address can not be determined, the object should return an octet string of zero length πŸ™ˆ.

the address is stored in binary, in "canonical" bit order πŸ’…. That means the Group Bit sits as the low-order bit of the first octet, so the first byte of a multicast address has the bit 0x01 set πŸ”₯.

3.2.6. ifType πŸŽ€

this MIB applies to interfaces that have any of these ifType values πŸ‘‘:

         ethernetCsmacd(6)
         iso88023Csmacd(7)
         starLan(11)

it is RECOMMENDED that all Ethernet-like interfaces use an ifType of ethernetCsmacd(6) πŸ’œ, no matter what speed the interface runs at or which link-layer encapsulation it's using ✨. iso88023Csmacd(7) and starLan(11) are still supported for backwards compatability 🧚.

there are three other interface types defined in the IANAifType-MIB for Ethernet, and they're fastEther(62), fastEtherFX(69), and gigabitEthernet(117) 🌈. This document takes the position that an Ethernet is an Ethernet, so Ethernet interfaces SHOULD always have the same value of ifType πŸ’…. You can find out which flavor of Ethernet an interface is running from ifSpeed in the Interfaces MIB, and from ifMauType in the 802.3 MAU MIB πŸ¦‹. An Ethernet-like interface SHOULD NOT use the fastEther(62), fastEtherFX(69), or gigabitEthernet(117) ifTypes πŸ™…β€β™€οΈ.

interfaces with any of the supported ifType values map to the EtherLike-MIB in the same manner. there are no implementation differences πŸ«ΆπŸ’–

3.2.7. Specific Interface MIB Objects ✨

okay so this next bit is the ultimate cheat sheet for how the interface group objects work on ethernet-like media 🫢 it's giving "field guide," and I've kept the table exactly as written so nothing gets lost in translation πŸ’…

Object                     Guidelines

ifIndex                    Each ethernet-like interface is
                           represented by an ifEntry.  The
                           dot3StatsTable in this MIB module is
                           indexed by dot3StatsIndex. The interface
                           identified by a particular value of
                           dot3StatsIndex is the same interface as
                           identified by the same value of ifIndex.

ifDescr                    Refer to [25].

ifType                     Refer to section 3.2.6.

ifMtu                      1500 octets.  NOTE: This is the MTU as
                           seen by the MAC client.  When a higher
                           layer protocol, like IP, is running over
                           Ethernet, this is the MTU that will be
                           seen by that higher layer protocol.
                           However, when using the IEEE 802.2 LLC
                           protocol, higher layer protocols will
                           see a different MTU.  In particular, an
                           LLC type 1 client protocol will see
                           an MTU of 1497 octets, and a protocol
                           running over SNAP will see an MTU of
                           1492 octets.

ifSpeed                    The current operational speed of the
                           interface in bits per second. For
                           current ethernet-like interfaces, this
                           will be equal to 1,000,000 (1 million),
                           10,000,000 (10 million), 100,000,000
                           (100 million), or 1,000,000,000 (1
                           billion). If the interface implements
                           auto-negotiation, auto-negotiation is
                           enabled for this interface, and the
                           interface has not yet negotiated to an
                           operational speed, this object SHOULD
                           reflect the maximum speed supported by
                           the interface.  Note that this object
                           MUST NOT indicate a doubled value when
                           operating in full-duplex mode.  It MUST
                           indicate the correct line speed
                           regardless of the current duplex mode.
                           The duplex mode of the interface may
                           be determined by examining either the
                           dot3StatsDuplexStatus object in this
                           MIBmodule, or the ifMauType object in
                           the 802.3 MAU MIB.

ifPhysAddress              Refer to section 3.2.5.

ifAdminStatus              Write access is not required.  Support
                           for 'testing' is not required.

ifOperStatus               The operational state of the interface.
                           Support for 'testing' is not required.
                           The value 'dormant' has no meaning for
                           an ethernet-like interface.

ifLastChange               Refer to [25].

ifInOctets                 The number of octets in valid MAC
                           frames received on this interface,
                           including the MAC header and FCS.
                           This does include the number of octets
                           in valid MAC Control frames received on
                           this interface.

ifInUcastPkts              Refer to [25].  Note that this does
                           not include MAC Control frames, since
                           MAC Control frames are consumed by the
                           interface layer and are not passed to
                           any higher layer protocol.

ifInDiscards               Refer to [25].

ifInErrors                 The sum for this interface of
                           dot3StatsAlignmentErrors,
                           dot3StatsFCSErrors,
                           dot3StatsFrameTooLongs,
                           dot3StatsInternalMacReceiveErrors and
                           dot3StatsSymbolErrors.

ifInUnknownProtos          Refer to [25].

ifOutOctets                The number of octets transmitted in
                           valid MAC frames on this interface,
                           including the MAC header and FCS.
                           This does include the number of octets
                           in valid MAC Control frames transmitted
                           on this interface.

ifOutUcastPkts             Refer to [25].  Note that this does
                           not include MAC Control frames, since
                           MAC Control frames are generated by the
                           interface layer, and are not passed
                           from any higher layer protocol.

ifOutDiscards              Refer to [25].

ifOutErrors                The sum for this interface of:
                           dot3StatsSQETestErrors,
                           dot3StatsLateCollisions,
                           dot3StatsExcessiveCollisions,
                           dot3StatsInternalMacTransmitErrors and
                           dot3StatsCarrierSenseErrors.

ifName                     Locally-significant textual name for
                           the interface (e.g. lan0).

ifInMulticastPkts          Refer to [25].  Note that this does
                           not include MAC Control frames, since
                           MAC Control frames are consumed by the
                           interface layer and are not passed to
                           any higher layer protocol.

ifInBroadcastPkts          Refer to [25].  Note that this does
                           not include MAC Control frames, since
                           MAC Control frames are generated by
                           the interface layer, and are not passed
                           from any higher layer protocol.

ifOutMulticastPkts         Refer to [25].  Note that this does
                           not include MAC Control frames, since
                           MAC Control frames are consumed by the
                           interface layer and are not passed to
                           any higher layer protocol.

ifOutBroadcastPkts         Refer to [25].  Note that this does
                           not include MAC Control frames, since
                           MAC Control frames are generated by
                           the interface layer, and are not passed
                           from any higher layer protocol.

ifHCInOctets               64-bit versions of counters.  Required
ifHCOutOctets              for ethernet-like interfaces that are
                           capable of operating at 20Mbit/sec or
                           faster, even if the interface is
                           currently operating at less than
                           20Mbit/sec.

ifHCInUcastPkts            64-bit versions of packet counters.
ifHCInMulticastPkts        Required for ethernet-like interfaces
ifHCInBroadcastPkts        that are capable of operating at
ifHCOutUcastPkts           640Mbit/sec or faster, even if the
ifHCOutMulticastPkts       interface is currently operating at
ifHCOutBroadcastPkts       less than 640Mbit/sec.

ifLinkUpDownTrapEnable     Refer to [25].  Default is 'enabled'

ifHighSpeed                The current operational speed of the
                           interface in millions of bits per
                           second. For current ethernet-like
                           interfaces, this will be equal to 1,
                           10, 100, or 1,000.  If the interface
                           implements auto-negotiation,
                           auto-negotiation is enabled for this
                           interface, and the interface has not
                           yet negotiated to an operational speed,
                           this object SHOULD reflect the maximum
                           speed supported by the interface. Note
                           that this object MUST NOT indicate a
                           doubled value when operating in full-
                           duplex mode.  It MUST indicate the
                           correct line speed regardless of the
                           current duplex mode. The duplex mode
                           of the interface may be determined
                           by examining either the
                           dot3StatsDuplexStatus object in this
                           MIB module, or the ifMauType object in
                           the 802.3 MAU MIB.

ifPromiscuousMode          Refer to [25].

ifConnectorPresent         This will normally be 'true'.

ifAlias                    Refer to [25].

ifCounterDiscontinuityTime Refer to [25].  Note that a
                           discontinuity in the Interface MIB
                           counters may also indicate a
                           discontinuity in some or all of the
                           counters in this MIB that are
                           associated with that interface.

ifStackHigherLayer         Refer to section 3.2.1.
ifStackLowerLayer
ifStackStatus

ifRcvAddressAddress        Refer to section 3.2.4.
ifRcvAddressStatus
ifRcvAddressType

3.3. Relation to the 802.3 MAU MIB πŸŽ€

bestie, this part is giving "you need this one, no exceptions" 😭 Support for the mauModIfCompl2 compliance statement of the MAU-MIB [27] is REQUIRED for Ethernet-like interfaces. πŸ”₯ The reason is that this MIB is what lets apps figure out which MAU type the interface is currently using, and lets them control autonegotiation and duplex mode. πŸ’œ

ngl, if you implement this MIB module but skip the MAU-MIB, apps are left with no standard way to tell what media type is in use, and no standard way to control the duplex mode. πŸ’€

3.4. dot3StatsEtherChipSet πŸ’…

Okay so this object is called dot3StatsEtherChipSet 🧚, and it's used to figure out which MAC hardware is doing the talking on an interface. Earlier versions of this doc had a whole pile of OID assignments for existing Ethernet chipsets right in the text, but keeping that list here was a total hassle 😩, so those assignments got moved out to a separate document [28] ✨.

The dot3StatsEtherChipSet object is now deprecated πŸ’€. Implementation feedback says it's way more useful in theory than in practice πŸ™ˆ. Its usefulness for debugging network problems in the field seems pretty limited. And in the cases where it might help, it isn't enough, because it only names the MAC chip and not the PHY, PMD, or driver. Keeping a central registry of chipset OIDs just isn't worth the admin overhead for something whose usefulness is questionable at best 😭.

Implementations that still support this object for backwards compatibility can keep using the values defined in [28]. For chipsets that aren't listed in [28], implementors should assign OBJECT IDENTIFIERS within the part of the registration tree delegated to individual enterprises 🌸.

3.5. Mapping of IEEE 802.3 Managed Objects πŸ¦‹

Here's the big mapping table, bestie πŸŽ€. The IEEE 802.3 managed objects are on the left, and the SNMP objects they correspond to are on the right.

IEEE 802.3 Managed Object         Corresponding SNMP Object

oMacEntity
 .aMACID                          dot3StatsIndex or
                                  IF-MIB - ifIndex
 .aFramesTransmittedOK            IF-MIB - ifOutUCastPkts +
                                           ifOutMulticastPkts +
                                           ifOutBroadcastPkts*
 .aSingleCollisionFrames          dot3StatsSingleCollisionFrames
 .aMultipleCollisionFrames        dot3StatsMultipleCollisionFrames
 .aFramesReceivedOK               IF-MIB - ifInUcastPkts +
                                           ifInMulticastPkts +
                                           ifInBroadcastPkts*
 .aFrameCheckSequenceErrors       dot3StatsFCSErrors
 .aAlignmentErrors                dot3StatsAlignmentErrors
 .aOctetsTransmittedOK            IF-MIB - ifOutOctets*
 .aFramesWithDeferredXmissions    dot3StatsDeferredTransmissions
 .aLateCollisions                 dot3StatsLateCollisions
 .aFramesAbortedDueToXSColls      dot3StatsExcessiveCollisions
 .aFramesLostDueToIntMACXmitError dot3StatsInternalMacTransmitErrors
 .aCarrierSenseErrors             dot3StatsCarrierSenseErrors
 .aOctetsReceivedOK               IF-MIB - ifInOctets*
 .aFramesLostDueToIntMACRcvError  dot3StatsInternalMacReceiveErrors
 .aPromiscuousStatus              IF-MIB - ifPromiscuousMode
 .aReadMulticastAddressList       IF-MIB - ifRcvAddressTable
 .aMulticastFramesXmittedOK       IF-MIB - ifOutMulticastPkts*
 .aBroadcastFramesXmittedOK       IF-MIB - ifOutBroadcastPkts*
 .aMulticastFramesReceivedOK      IF-MIB - ifInMulticastPkts*
 .aBroadcastFramesReceivedOK      IF-MIB - ifInBroadcastPkts*
 .aFrameTooLongErrors             dot3StatsFrameTooLongs
 .aReadWriteMACAddress            IF-MIB - ifPhysAddress
 .aCollisionFrames                dot3CollFrequencies
 .aDuplexStatus                   dot3StatsDuplexStatus
 .acAddGroupAddress               IF-MIB - ifRcvAddressTable
 .acDeleteGroupAddress            IF-MIB - ifRcvAddressTable
 .acExecuteSelfTest               dot3TestLoopBack

oPHYEntity
 .aPHYID                          dot3StatsIndex or
                                  IF-MIB - ifIndex
 .aSQETestErrors                  dot3StatsSQETestErrors
 .aSymbolErrorDuringCarrier       dot3StatsSymbolErrors

oMACControlEntity
 .aMACControlID                   dot3StatsIndex or
                                  IF-MIB - ifIndex
 .aMACControlFunctionsSupported   dot3ControlFunctionsSupported and
                                  dot3ControlFunctionsEnabled
 .aUnsupportedOpcodesReceived     dot3ControlInUnknownOpcodes

oPAUSEEntity
 .aPAUSEMACCtrlFramesTransmitted  dot3OutPauseFrames
 .aPAUSEMACCtrlFramesReceived     dot3InPauseFrames

Quick note on the * ones 🧐: the octet counters in IF-MIB don't exactly match the IEEE 802.3 octet counters. aOctetsTransmittedOK and aOctetsReceivedOK only count the octets in the clientData and Pad fields, while ifInOctets and ifOutOctets include the entire MAC frame, MAC header and FCS included. But you can derive the IF-MIB counters from the IEEE 802.3 ones like this ✨:

ifInOctets = aOctetsReceivedOK + (18 * aFramesReceivedOK)

ifOutOctets = aOctetsTransmittedOK + (18 * aFramesTransmittedOK)

The packet counters are a little messy too πŸŒ€. aFramesTransmittedOK counts the frames successfully transmitted on the interface. But ifOutUcastPkts, ifOutMulticastPkts and ifOutBroadcastPkts count the transmit requests made from a higher layer, whether or not the attempt worked. So packets counted by ifOutErrors or ifOutDiscards are also counted by ifOut*castPkts, but they are not counted by aFramesTransmittedOK. And since MAC Control frames are generated by a sublayer inside the interface layer (not by a higher layer), they're not counted by ifOut*castPkts, but they are counted by aFramesTransmittedOK 🫢.

It's the same vibe on the receive side πŸ‘€. aFramesReceivedOK counts the frames the interface received successfully, whether or not they get passed up to a higher layer. ifInUcastPkts, ifInMulticastPkts and ifInBroadcastPkts only count the packets that are passed to a higher layer. So packets counted by ifInDiscards or ifInUnknownProtos are also counted by aFramesReceivedOK, but not by ifIn*castPkts. Also, MAC Control frames get consumed by a sublayer inside the interface layer and never reach a higher layer, so they're not counted by ifIn*castPkts, but they are counted by aFramesReceivedOK πŸ’œ.

One more difference to keep in mind 🧠: in IEEE 802.3, the frame counters and octet counters always go up together. aOctetsTransmittedOK counts the octets in frames that were counted by aFramesTransmittedOK, and aOctetsReceivedOK counts the octets in frames that were counted by aFramesReceivedOK. That is not true for the IF-MIB counters πŸ™…β€β™€οΈ. The IF-MIB octet counters count the octets sent to or received from the layer below this interface, while the packet counters count the packets sent to or received from the layer above. So received MAC Control frames, ifInDiscards, and ifInUnknownProtos are counted by ifInOctets but not by ifIn*castPkts. Transmitted MAC Control frames are counted by ifOutOctets but not by ifOut*castPkts. And ifOutDiscards and ifOutErrors are counted by ifOut*castPkts but not by ifOutOctets.

The following IEEE 802.3 managed objects were removed from this MIB module because of implementation feedback πŸ—‘οΈ:

oMacEntity
  .aFramesWithExcessiveDeferral
  .aInRangeLengthErrors
  .aOutOfRangeLengthField
  .aMACEnableStatus
  .aTransmitEnableStatus
  .aMulticastReceiveStatus
  .acInitializeMAC

If you want the full tea on why these got cut, check out [19] 🍡.

And then there are the IEEE 802.3 managed objects that didn't make it into this MIB for the reasons below πŸ“‹.

IEEE 802.3 Managed Object         Disposition

oMACEntity
 .aMACCapabilities                Can be derived from
                                  MAU-MIB - ifMauTypeListBits

oPHYEntity
 .aPhyType                        Can be derived from
                                  MAU-MIB - ifMauType

 .aPhyTypeList                    Can be derived from
                                  MAU-MIB - ifMauTypeListBits

 .aMIIDetect                      Not considered useful.

 .aPhyAdminState                  Can already obtain interface
                                  state from IF-MIB - ifOperStatus
                                  and MAU state from MAU-MIB -
                                  ifMauStatus.  Providing an
                                  additional state for the PHY
                                  was not considered useful.

 .acPhyAdminControl               Can already control interface
                                  state from IF-MIB - ifAdminStatus
                                  and MAU state from MAU-MIB -
                                  ifMauStatus.  Providing separate
                                  admin control of the PHY was not
                                  considered useful.

oMACControlEntity
 .aMACControlFramesTransmitted    Can be determined by summing the
                                  OutFrames counters for the
                                  individual control functions

 .aMACControlFramesReceived       Can be determined by summing the
                                  InFrames counters for the
                                  individual control functions

oPAUSEEntity
 .aPAUSELinkDelayAllowance        Not considered useful.

4. Definitions ✨

Time for the actual MIB module πŸŽ€. It starts like this:

EtherLike-MIB DEFINITIONS ::= BEGIN

    IMPORTS
        MODULE-IDENTITY, OBJECT-TYPE, OBJECT-IDENTITY,
        Counter32, mib-2, transmission
            FROM SNMPv2-SMI
        MODULE-COMPLIANCE, OBJECT-GROUP
            FROM SNMPv2-CONF
        ifIndex, InterfaceIndex
            FROM IF-MIB;

    etherMIB MODULE-IDENTITY
        LAST-UPDATED "9908240400Z"  -- August 24, 1999
        ORGANIZATION "IETF Ethernet Interfaces and Hub MIB
                     Working Group"
        CONTACT-INFO
            "WG E-mail: hubmib@hprnd.rose.hp.com
          To subscribe: hubmib-request@hprnd.rose.hp.com

                 Chair: Dan Romascanu
                 Postal: Lucent Technologies
                        Atidum Technology Park, Bldg. 3
                        Tel Aviv 61131
                        Israel
                   Tel: +972 3 645 8414
                E-mail: dromasca@lucent.com

               Editor: John Flick
               Postal: Hewlett-Packard Company
                       8000 Foothills Blvd. M/S 5557
                       Roseville, CA 95747-5557
                       USA
                  Tel: +1 916 785 4018
                  Fax: +1 916 785 1199
               E-mail: johnf@rose.hp.com

               Editor: Jeffrey Johnson
               Postal: RedBack Networks
                       2570 North First Street, Suite 410
                       San Jose, CA, 95131
                       USA
                  Tel: +1 408 571 2699
                  Fax: +1 408 571 2698
               E-Mail: jeff@redbacknetworks.com"

        DESCRIPTION "The MIB module to describe generic objects for

                    Ethernet-like network interfaces.

                    The following reference is used throughout this
                    MIB module:
                       [IEEE 802.3 Std] refers to:
                          IEEE Std 802.3, 1998 Edition: 'Information
                          technology - Telecommunications and
                          information exchange between systems -
                          Local and metropolitan area networks -
                          Specific requirements - Part 3: Carrier
                          sense multiple access with collision
                          detection (CSMA/CD) access method and
                          physical layer specifications',
                          September 1998.

                       Of particular interest is Clause 30, '10Mb/s,
                       100Mb/s and 1000Mb/s Management'."

           REVISION    "9908240400Z"  -- August 24, 1999
           DESCRIPTION "Updated to include support for 1000 Mb/sec
                        interfaces and full-duplex interfaces.
                        This version published as RFC 2665."

           REVISION    "9806032150Z"
           DESCRIPTION "Updated to include support for 100 Mb/sec
                        interfaces.
                        This version published as RFC 2358."

           REVISION    "9402030400Z"
           DESCRIPTION "Initial version, published as RFC 1650."

           ::= { mib-2 35 }


       etherMIBObjects OBJECT IDENTIFIER ::= { etherMIB 1 }

       dot3    OBJECT IDENTIFIER ::= { transmission 7 }

       -- the Ethernet-like Statistics group

       dot3StatsTable OBJECT-TYPE
           SYNTAX     SEQUENCE OF Dot3StatsEntry
           MAX-ACCESS not-accessible
           STATUS     current
           DESCRIPTION "Statistics for a collection of ethernet-like
                       interfaces attached to a particular system.
                       There will be one row in this table for each
                       ethernet-like interface in the system."
           ::= { dot3 2 }

       dot3StatsEntry OBJECT-TYPE
           SYNTAX     Dot3StatsEntry
           MAX-ACCESS not-accessible
           STATUS     current
           DESCRIPTION "Statistics for a particular interface to an
                       ethernet-like medium."
           INDEX       { dot3StatsIndex }
           ::= { dot3StatsTable 1 }

       Dot3StatsEntry ::=
           SEQUENCE {
               dot3StatsIndex                      InterfaceIndex,
               dot3StatsAlignmentErrors            Counter32,
               dot3StatsFCSErrors                  Counter32,
               dot3StatsSingleCollisionFrames      Counter32,
               dot3StatsMultipleCollisionFrames    Counter32,
               dot3StatsSQETestErrors              Counter32,
               dot3StatsDeferredTransmissions      Counter32,
               dot3StatsLateCollisions             Counter32,
               dot3StatsExcessiveCollisions        Counter32,
               dot3StatsInternalMacTransmitErrors  Counter32,
               dot3StatsCarrierSenseErrors         Counter32,
               dot3StatsFrameTooLongs              Counter32,
               dot3StatsInternalMacReceiveErrors   Counter32,
               dot3StatsEtherChipSet               OBJECT IDENTIFIER,
               dot3StatsSymbolErrors               Counter32,
               dot3StatsDuplexStatus               INTEGER
           }

       dot3StatsIndex OBJECT-TYPE
           SYNTAX      InterfaceIndex
           MAX-ACCESS  read-only
           STATUS      current
           DESCRIPTION "An index value that uniquely identifies an
                       interface to an ethernet-like medium.  The
                       interface identified by a particular value of
                       this index is the same interface as identified
                       by the same value of ifIndex."
           REFERENCE   "RFC 2233, ifIndex"
           ::= { dot3StatsEntry 1 }

       dot3StatsAlignmentErrors OBJECT-TYPE
           SYNTAX      Counter32
           MAX-ACCESS  read-only
           STATUS      current
           DESCRIPTION "A count of frames received on a particular
                       interface that are not an integral number of
                       octets in length and do not pass the FCS check.

                       The count represented by an instance of this
                       object is incremented when the alignmentError
                       status is returned by the MAC service to the
                       LLC (or other MAC user). Received frames for
                       which multiple error conditions obtain are,
                       according to the conventions of IEEE 802.3
                       Layer Management, counted exclusively according
                       to the error status presented to the LLC.

                       This counter does not increment for 8-bit wide
                       group encoding schemes.

                       Discontinuities in the value of this counter can
                       occur at re-initialization of the management
                       system, and at other times as indicated by the
                       value of ifCounterDiscontinuityTime."
           REFERENCE   "[IEEE 802.3 Std.], 30.3.1.1.7,
                       aAlignmentErrors"
           ::= { dot3StatsEntry 2 }

       dot3StatsFCSErrors OBJECT-TYPE
           SYNTAX      Counter32
           MAX-ACCESS  read-only
           STATUS      current
           DESCRIPTION "A count of frames received on a particular
                       interface that are an integral number of octets
                       in length but do not pass the FCS check.  This
                       count does not include frames received with
                       frame-too-long or frame-too-short error.

                       The count represented by an instance of this
                       object is incremented when the frameCheckError
                       status is returned by the MAC service to the
                       LLC (or other MAC user). Received frames for
                       which multiple error conditions obtain are,
                       according to the conventions of IEEE 802.3
                       Layer Management, counted exclusively according
                       to the error status presented to the LLC.

                       Note:  Coding errors detected by the physical
                       layer for speeds above 10 Mb/s will cause the
                       frame to fail the FCS check.
                       Discontinuities in the value of this counter can
                       occur at re-initialization of the management
                       system, and at other times as indicated by the
                       value of ifCounterDiscontinuityTime."
           REFERENCE   "[IEEE 802.3 Std.], 30.3.1.1.6,
                       aFrameCheckSequenceErrors."
           ::= { dot3StatsEntry 3 }

       dot3StatsSingleCollisionFrames OBJECT-TYPE
           SYNTAX      Counter32
           MAX-ACCESS  read-only
           STATUS      current
           DESCRIPTION "A count of successfully transmitted frames on
                       a particular interface for which transmission
                       is inhibited by exactly one collision.

                       A frame that is counted by an instance of this
                       object is also counted by the corresponding
                       instance of either the ifOutUcastPkts,
                       ifOutMulticastPkts, or ifOutBroadcastPkts,
                       and is not counted by the corresponding
                       instance of the dot3StatsMultipleCollisionFrames
                       object.

                       This counter does not increment when the
                       interface is operating in full-duplex mode.

                       Discontinuities in the value of this counter can
                       occur at re-initialization of the management
                       system, and at other times as indicated by the
                       value of ifCounterDiscontinuityTime."
           REFERENCE   "[IEEE 802.3 Std.], 30.3.1.1.3,
                       aSingleCollisionFrames."
           ::= { dot3StatsEntry 4 }

       dot3StatsMultipleCollisionFrames OBJECT-TYPE
           SYNTAX      Counter32
           MAX-ACCESS  read-only
           STATUS      current
           DESCRIPTION "A count of successfully transmitted frames on
                       a particular interface for which transmission
                       is inhibited by more than one collision.

                       A frame that is counted by an instance of this
                       object is also counted by the corresponding
                       instance of either the ifOutUcastPkts,
                       ifOutMulticastPkts, or ifOutBroadcastPkts,
                       and is not counted by the corresponding
                       instance of the dot3StatsSingleCollisionFrames
                       object.

                       This counter does not increment when the
                       interface is operating in full-duplex mode.

                       Discontinuities in the value of this counter can
                       occur at re-initialization of the management
                       system, and at other times as indicated by the
                       value of ifCounterDiscontinuityTime."
           REFERENCE   "[IEEE 802.3 Std.], 30.3.1.1.4,
                       aMultipleCollisionFrames."
           ::= { dot3StatsEntry 5 }

       dot3StatsSQETestErrors OBJECT-TYPE
           SYNTAX      Counter32
           MAX-ACCESS  read-only
           STATUS      current
           DESCRIPTION "A count of times that the SQE TEST ERROR
                       message is generated by the PLS sublayer for a
                       particular interface. The SQE TEST ERROR
                       is set in accordance with the rules for
                       verification of the SQE detection mechanism in
                       the PLS Carrier Sense Function as described in
                       IEEE Std. 802.3, 1998 Edition, section 7.2.4.6.

                       This counter does not increment on interfaces
                       operating at speeds greater than 10 Mb/s, or on
                       interfaces operating in full-duplex mode.

                       Discontinuities in the value of this counter can
                       occur at re-initialization of the management
                       system, and at other times as indicated by the
                       value of ifCounterDiscontinuityTime."
           REFERENCE   "[IEEE 802.3 Std.], 7.2.4.6, also 30.3.2.1.4,
                       aSQETestErrors."
           ::= { dot3StatsEntry 6 }

       dot3StatsDeferredTransmissions OBJECT-TYPE
           SYNTAX      Counter32
           MAX-ACCESS  read-only
           STATUS      current
           DESCRIPTION "A count of frames for which the first
                       transmission attempt on a particular interface
                       is delayed because the medium is busy.
                       The count represented by an instance of this
                       object does not include frames involved in
                       collisions.

                       This counter does not increment when the
                       interface is operating in full-duplex mode.

                       Discontinuities in the value of this counter can
                       occur at re-initialization of the management
                       system, and at other times as indicated by the
                       value of ifCounterDiscontinuityTime."
           REFERENCE   "[IEEE 802.3 Std.], 30.3.1.1.9,
                       aFramesWithDeferredXmissions."
           ::= { dot3StatsEntry 7 }

okay so this part is all about the dot3 statistics table πŸ’…πŸŽ€ it's basically a little scoreboard that counts every weird thing an ethernet interface runs into, like the sad frames that don't pass the check πŸ₯Ί

dot3StatsTable is the big table, and dot3StatsEntry is one row per ethernet-like interface on the box. the index is dot3StatsIndex, and it points to the same interface as ifIndex. so bestie, it's literally the same interface, no cap ✨

the counters are where it gets spicy πŸ”₯ dot3StatsAlignmentErrors counts frames that aren't a whole number of octets AND fail the FCS check. dot3StatsFCSErrors is the sibling: whole octets, but still failing FCS, and it skips the frame-too-long and frame-too-short ones. iconic separation of duties πŸ‘‘

the collision counters are giving main character energy πŸ’€ single collision frames and multiple collision frames both count frames that got sent successfully, but they're split by how many collisions happened. and they both stop counting when the interface is in full-duplex mode πŸ™ˆ which makes sense bc full-duplex has no collisions lol

dot3StatsSQETestErrors is a whole mood 🧚 it counts SQE TEST ERROR messages from the PLS sublayer, and it doesn't increment on anything faster than 10 Mb/s or on full-duplex interfaces. periodt πŸ’…

last but not least, dot3StatsDeferredTransmissions counts frames whose first try got delayed because the medium was busy, and it leaves out the ones that ran into collisions. so the drama stays separate πŸ“

okay that's the whole group of counters for this chunk, and every single detail stays exactly how the spec wrote it, bestie πŸŒˆπŸ’–

Okay so this part is where the MIB objects really get going, bestie πŸ’œ We're still in the πŸŽ€ Definitions πŸŽ€ zone, and these are all the dot3Stats counters that track collisions, carrier sense problems, frame size issues, and the duplex status of an interface. Every line is copied exactly, typos included, because implementers need the exact text 🫢

       dot3StatsLateCollisions OBJECT-TYPE
           SYNTAX      Counter32
           MAX-ACCESS  read-only
           STATUS      current
           DESCRIPTION "The number of times that a collision is
                       detected on a particular interface later than
                       one slotTime into the transmission of a packet.

                       A (late) collision included in a count
                       represented by an instance of this object is
                       also considered as a (generic) collision for
                       purposes of other collision-related
                       statistics.

                       This counter does not increment when the
                       interface is operating in full-duplex mode.

                       Discontinuities in the value of this counter can
                       occur at re-initialization of the management
                       system, and at other times as indicated by the
                       value of ifCounterDiscontinuityTime."
           REFERENCE   "[IEEE 802.3 Std.], 30.3.1.1.10,
                       aLateCollisions."
           ::= { dot3StatsEntry 8 }

       dot3StatsExcessiveCollisions OBJECT-TYPE
           SYNTAX      Counter32
           MAX-ACCESS  read-only
           STATUS      current
           DESCRIPTION "A count of frames for which transmission on a
                       particular interface fails due to excessive
                       collisions.
                       This counter does not increment when the
                       interface is operating in full-duplex mode.

                       Discontinuities in the value of this counter can
                       occur at re-initialization of the management
                       system, and at other times as indicated by the
                       value of ifCounterDiscontinuityTime."
           REFERENCE   "[IEEE 802.3 Std.], 30.3.1.1.11,

                       aFramesAbortedDueToXSColls."
           ::= { dot3StatsEntry 9 }

       dot3StatsInternalMacTransmitErrors OBJECT-TYPE
           SYNTAX      Counter32
           MAX-ACCESS  read-only
           STATUS      current
           DESCRIPTION "A count of frames for which transmission on a
                       particular interface fails due to an internal
                       MAC sublayer transmit error. A frame is only
                       counted by an instance of this object if it is
                       not counted by the corresponding instance of
                       either the dot3StatsLateCollisions object, the
                       dot3StatsExcessiveCollisions object, or the
                       dot3StatsCarrierSenseErrors object.

                       The precise meaning of the count represented by
                       an instance of this object is implementation-
                       specific.  In particular, an instance of this
                       object may represent a count of transmission
                       errors on a particular interface that are not
                       otherwise counted.

                       Discontinuities in the value of this counter can
                       occur at re-initialization of the management
                       system, and at other times as indicated by the
                       value of ifCounterDiscontinuityTime."
           REFERENCE   "[IEEE 802.3 Std.], 30.3.1.1.12,
                       aFramesLostDueToIntMACXmitError."
           ::= { dot3StatsEntry 10 }

       dot3StatsCarrierSenseErrors OBJECT-TYPE
           SYNTAX      Counter32
           MAX-ACCESS  read-only
           STATUS      current
           DESCRIPTION "The number of times that the carrier sense
                       condition was lost or never asserted when
                       attempting to transmit a frame on a particular
                       interface.

                       The count represented by an instance of this
                       object is incremented at most once per
                       transmission attempt, even if the carrier sense
                       condition fluctuates during a transmission
                       attempt.

                       This counter does not increment when the
                       interface is operating in full-duplex mode.

                       Discontinuities in the value of this counter can
                       occur at re-initialization of the management
                       system, and at other times as indicated by the
                       value of ifCounterDiscontinuityTime."
           REFERENCE   "[IEEE 802.3 Std.], 30.3.1.1.13,
                       aCarrierSenseErrors."
           ::= { dot3StatsEntry 11 }

       -- { dot3StatsEntry 12 } is not assigned

       dot3StatsFrameTooLongs OBJECT-TYPE
           SYNTAX      Counter32
           MAX-ACCESS  read-only
           STATUS      current
           DESCRIPTION "A count of frames received on a particular
                       interface that exceed the maximum permitted
                       frame size.

                       The count represented by an instance of this
                       object is incremented when the frameTooLong
                       status is returned by the MAC service to the
                       LLC (or other MAC user). Received frames for
                       which multiple error conditions obtain are,
                       according to the conventions of IEEE 802.3
                       Layer Management, counted exclusively according
                       to the error status presented to the LLC.

                       Discontinuities in the value of this counter can
                       occur at re-initialization of the management
                       system, and at other times as indicated by the
                       value of ifCounterDiscontinuityTime."
           REFERENCE   "[IEEE 802.3 Std.], 30.3.1.1.25,
                       aFrameTooLongErrors."
           ::= { dot3StatsEntry 13 }

       -- { dot3StatsEntry 14 } is not assigned

       -- { dot3StatsEntry 15 } is not assigned

       dot3StatsInternalMacReceiveErrors OBJECT-TYPE
           SYNTAX      Counter32
           MAX-ACCESS  read-only
           STATUS      current
           DESCRIPTION "A count of frames for which reception on a
                       particular interface fails due to an internal
                       MAC sublayer receive error. A frame is only
                       counted by an instance of this object if it is
                       not counted by the corresponding instance of
                       either the dot3StatsFrameTooLongs object, the
                       dot3StatsAlignmentErrors object, or the
                       dot3StatsFCSErrors object.

                       The precise meaning of the count represented by
                       an instance of this object is implementation-
                       specific.  In particular, an instance of this
                       object may represent a count of receive errors
                       on a particular interface that are not
                       otherwise counted.

                       Discontinuities in the value of this counter can
                       occur at re-initialization of the management
                       system, and at other times as indicated by the
                       value of ifCounterDiscontinuityTime."
           REFERENCE   "[IEEE 802.3 Std.], 30.3.1.1.15,
                       aFramesLostDueToIntMACRcvError."
           ::= { dot3StatsEntry 16 }

       dot3StatsEtherChipSet OBJECT-TYPE
           SYNTAX      OBJECT IDENTIFIER
           MAX-ACCESS  read-only
           STATUS      deprecated
           DESCRIPTION "******** THIS OBJECT IS DEPRECATED ********

                       This object contains an OBJECT IDENTIFIER
                       which identifies the chipset used to
                       realize the interface. Ethernet-like
                       interfaces are typically built out of
                       several different chips. The MIB implementor
                       is presented with a decision of which chip
                       to identify via this object. The implementor
                       should identify the chip which is usually
                       called the Medium Access Control chip.
                       If no such chip is easily identifiable,
                       the implementor should identify the chip
                       which actually gathers the transmit
                       and receive statistics and error
                       indications. This would allow a
                       manager station to correlate the
                       statistics and the chip generating
                       them, giving it the ability to take
                       into account any known anomalies
                       in the chip."
           ::= { dot3StatsEntry 17 }

       dot3StatsSymbolErrors OBJECT-TYPE
           SYNTAX      Counter32
           MAX-ACCESS  read-only
           STATUS      current
           DESCRIPTION "For an interface operating at 100 Mb/s, the
                       number of times there was an invalid data symbol
                       when a valid carrier was present.

                       For an interface operating in half-duplex mode
                       at 1000 Mb/s, the number of times the receiving
                       media is non-idle (a carrier event) for a period
                       of time equal to or greater than slotTime, and
                       during which there was at least one occurrence
                       of an event that causes the PHY to indicate
                       'Data reception error' or 'carrier extend error'
                       on the GMII.

                       For an interface operating in full-duplex mode
                       at 1000 Mb/s, the number of times the receiving
                       media is non-idle a carrier event) for a period
                       of time equal to or greater than minFrameSize,
                       and during which there was at least one
                       occurrence of an event that causes the PHY to
                       indicate 'Data reception error' on the GMII.

                       The count represented by an instance of this
                       object is incremented at most once per carrier
                       event, even if multiple symbol errors occur
                       during the carrier event.  This count does
                       not increment if a collision is present.

                       Discontinuities in the value of this counter can
                       occur at re-initialization of the management
                       system, and at other times as indicated by the
                       value of ifCounterDiscontinuityTime."
           REFERENCE   "[IEEE 802.3 Std.], 30.3.2.1.5,
                       aSymbolErrorDuringCarrier."
           ::= { dot3StatsEntry 18 }

       dot3StatsDuplexStatus OBJECT-TYPE
           SYNTAX      INTEGER {
                           unknown(1),
                           halfDuplex(2),
                           fullDuplex(3)
                       }
           MAX-ACCESS  read-only
           STATUS      current
           DESCRIPTION "The current mode of operation of the MAC
                       entity.  'unknown' indicates that the current
                       duplex mode could not be determined.

okay so we're still in the MIB definitions and this bit is all about duplex drama πŸŽ€βœ¨

                       Management control of the duplex mode is
                       accomplished through the MAU MIB.  When
                       an interface does not support autonegotiation,
                       or when autonegotiation is not enabled, the
                       duplex mode is controlled using
                       ifMauDefaultType.  When autonegotiation is
                       supported and enabled, duplex mode is controlled
                       using ifMauAutoNegAdvertisedBits.  In either
                       case, the currently operating duplex mode is
                       reflected both in this object and in ifMauType.

                       Note that this object provides redundant
                       information with ifMauType.  Normally, redundant
                       objects are discouraged.  However, in this
                       instance, it allows a management application to
                       determine the duplex status of an interface
                       without having to know every possible value of
                       ifMauType.  This was felt to be sufficiently
                       valuable to justify the redundancy."
           REFERENCE   "[IEEE 802.3 Std.], 30.3.1.1.32,
                       aDuplexStatus."
           ::= { dot3StatsEntry 19 }

       -- the Ethernet-like Collision Statistics group

       -- Implementation of this group is optional; it is appropriate
       -- for all systems which have the necessary metering

       dot3CollTable OBJECT-TYPE
           SYNTAX      SEQUENCE OF Dot3CollEntry
           MAX-ACCESS  not-accessible
           STATUS      current
           DESCRIPTION "A collection of collision histograms for a
                       particular set of interfaces."
           REFERENCE   "[IEEE 802.3 Std.], 30.3.1.1.30,
                       aCollisionFrames."
           ::= { dot3 5 }

       dot3CollEntry OBJECT-TYPE
           SYNTAX      Dot3CollEntry
           MAX-ACCESS  not-accessible
           STATUS      current
           DESCRIPTION "A cell in the histogram of per-frame
                       collisions for a particular interface.  An
                       instance of this object represents the
                       frequency of individual MAC frames for which
                       the transmission (successful or otherwise) on a
                       particular interface is accompanied by a
                       particular number of media collisions."
           INDEX       { ifIndex, dot3CollCount }
           ::= { dot3CollTable 1 }

       Dot3CollEntry ::=
           SEQUENCE {
               dot3CollCount        INTEGER,
               dot3CollFrequencies  Counter32
           }

       -- { dot3CollEntry 1 } is no longer in use

       dot3CollCount OBJECT-TYPE
           SYNTAX      INTEGER (1..16)
           MAX-ACCESS  not-accessible
           STATUS      current
           DESCRIPTION "The number of per-frame media collisions for
                       which a particular collision histogram cell
                       represents the frequency on a particular
                       interface."
           ::= { dot3CollEntry 2 }

       dot3CollFrequencies OBJECT-TYPE
           SYNTAX      Counter32
           MAX-ACCESS  read-only
           STATUS      current
           DESCRIPTION "A count of individual MAC frames for which the
                       transmission (successful or otherwise) on a
                       particular interface occurs after the
                       frame has experienced exactly the number
                       of collisions in the associated
                       dot3CollCount object.

                       For example, a frame which is transmitted
                       on interface 77 after experiencing
                       exactly 4 collisions would be indicated
                       by incrementing only dot3CollFrequencies.77.4.
                       No other instance of dot3CollFrequencies would
                       be incremented in this example.

                       This counter does not increment when the
                       interface is operating in full-duplex mode.

                       Discontinuities in the value of this counter can
                       occur at re-initialization of the management
                       system, and at other times as indicated by the
                       value of ifCounterDiscontinuityTime."
           ::= { dot3CollEntry 3 }

       dot3ControlTable OBJECT-TYPE
           SYNTAX      SEQUENCE OF Dot3ControlEntry
           MAX-ACCESS  not-accessible
           STATUS      current
           DESCRIPTION "A table of descriptive and status information
                       about the MAC Control sublayer on the
                       ethernet-like interfaces attached to a
                       particular system.  There will be one row in
                       this table for each ethernet-like interface in
                       the system which implements the MAC Control
                       sublayer.  If some, but not all, of the
                       ethernet-like interfaces in the system implement
                       the MAC Control sublayer, there will be fewer
                       rows in this table than in the dot3StatsTable."
           ::= { dot3 9 }

       dot3ControlEntry OBJECT-TYPE
           SYNTAX      Dot3ControlEntry
           MAX-ACCESS  not-accessible
           STATUS      current
           DESCRIPTION "An entry in the table, containing information
                       about the MAC Control sublayer on a single
                       ethernet-like interface."
           INDEX       { dot3StatsIndex }
           ::= { dot3ControlTable 1 }

       Dot3ControlEntry ::=
           SEQUENCE {
               dot3ControlFunctionsSupported       BITS,
               dot3ControlInUnknownOpcodes         Counter32
           }

       dot3ControlFunctionsSupported OBJECT-TYPE
           SYNTAX      BITS {
                           pause(0)   -- 802.3x flow control
                       }
           MAX-ACCESS  read-only
           STATUS      current
           DESCRIPTION "A list of the possible MAC Control functions
                       implemented for this interface."
           REFERENCE   "[IEEE 802.3 Std.], 30.3.3.2,
                       aMACControlFunctionsSupported."
           ::= { dot3ControlEntry 1 }

       dot3ControlInUnknownOpcodes OBJECT-TYPE
           SYNTAX      Counter32
           MAX-ACCESS  read-only
           STATUS      current
           DESCRIPTION "A count of MAC Control frames received on this
                       interface that contain an opcode that is not
                       supported by this device.

                       Discontinuities in the value of this counter can
                       occur at re-initialization of the management
                       system, and at other times as indicated by the
                       value of ifCounterDiscontinuityTime."
           REFERENCE   "[IEEE 802.3 Std.], 30.3.3.5,
                       aUnsupportedOpcodesReceived"
           ::= { dot3ControlEntry 2 }

       dot3PauseTable OBJECT-TYPE
           SYNTAX      SEQUENCE OF Dot3PauseEntry
           MAX-ACCESS  not-accessible
           STATUS      current
           DESCRIPTION "A table of descriptive and status information
                       about the MAC Control PAUSE function on the
                       ethernet-like interfaces attached to a
                       particular system. There will be one row in
                       this table for each ethernet-like interface in
                       the system which supports the MAC Control PAUSE
                       function (i.e., the 'pause' bit in the
                       corresponding instance of
                       dot3ControlFunctionsSupported is set).  If some,
                       but not all, of the ethernet-like interfaces in
                       the system implement the MAC Control PAUSE
                       function (for example, if some interfaces only
                       support half-duplex), there will be fewer rows
                       in this table than in the dot3StatsTable."
           ::= { dot3 10 }

       dot3PauseEntry OBJECT-TYPE
           SYNTAX      Dot3PauseEntry
           MAX-ACCESS  not-accessible
           STATUS      current
           DESCRIPTION "An entry in the table, containing information
                       about the MAC Control PAUSE function on a single
                       ethernet-like interface."
           INDEX       { dot3StatsIndex }
           ::= { dot3PauseTable 1 }

       Dot3PauseEntry ::=
           SEQUENCE {
               dot3PauseAdminMode                  INTEGER,
               dot3PauseOperMode                   INTEGER,
               dot3InPauseFrames                   Counter32,
               dot3OutPauseFrames                  Counter32

           }

       dot3PauseAdminMode OBJECT-TYPE
           SYNTAX      INTEGER {
                           disabled(1),
                           enabledXmit(2),
                           enabledRcv(3),
                           enabledXmitAndRcv(4)
                       }
           MAX-ACCESS  read-write
           STATUS      current
           DESCRIPTION "This object is used to configure the default
                       administrative PAUSE mode for this interface.

                       This object represents the
                       administratively-configured PAUSE mode for this
                       interface.  If auto-negotiation is not enabled
                       or is not implemented for the active MAU
                       attached to this interface, the value of this
                       object determines the operational PAUSE mode
                       of the interface whenever it is operating in
                       full-duplex mode.  In this case, a set to this
                       object will force the interface into the
                       specified mode.

                       If auto-negotiation is implemented and enabled
                       for the MAU attached to this interface, the
                       PAUSE mode for this interface is determined by
                       auto-negotiation, and the value of this object
                       denotes the mode to which the interface will
                       automatically revert if/when auto-negotiation is
                       later disabled.  Note that when auto-negotiation
                       is running, administrative control of the PAUSE
                       mode may be accomplished using the
                       ifMauAutoNegCapAdvertisedBits object in the
                       MAU-MIB.

                       Note that the value of this object is ignored
                       when the interface is not operating in
                       full-duplex mode.

                       An attempt to set this object to
                       'enabledXmit(2)' or 'enabledRcv(3)' will fail
                       on interfaces that do not support operation
                       at greater than 100 Mb/s."
           ::= { dot3PauseEntry 1 }

       dot3PauseOperMode OBJECT-TYPE

Okay bestie, the PAUSE stuff is next and it's giving flow control πŸŽ€βœ¨

           SYNTAX      INTEGER {
                           disabled(1),
                           enabledXmit(2),
                           enabledRcv(3),
                           enabledXmitAndRcv(4)
                       }
           MAX-ACCESS  read-only
           STATUS      current
           DESCRIPTION "This object reflects the PAUSE mode currently
                       in use on this interface, as determined by
                       either (1) the result of the auto-negotiation
                       function or (2) if auto-negotiation is not
                       enabled or is not implemented for the active MAU
                       attached to this interface, by the value of
                       dot3PauseAdminMode.  Interfaces operating at
                       100 Mb/s or less will never return
                       'enabledXmit(2)' or 'enabledRcv(3)'.  Interfaces
                       operating in half-duplex mode will always return
                       'disabled(1)'.  Interfaces on which
                       auto-negotiation is enabled but not yet
                       completed should return the value
                       'disabled(1)'."
           ::= { dot3PauseEntry 2 }

Okay so this one is the read-only PAUSE mode status, and the 100 Mb/s rule is a big deal πŸ’… It only ever shows disabled(1) in half-duplex, and while auto-negotiation is still in progress it's also disabled(1). No cap, it's very particular πŸ™ˆ


       dot3InPauseFrames OBJECT-TYPE
           SYNTAX      Counter32
           MAX-ACCESS  read-only
           STATUS      current
           DESCRIPTION "A count of MAC Control frames received on this
                       interface with an opcode indicating the PAUSE
                       operation.

                       This counter does not increment when the
                       interface is operating in half-duplex mode.
                       Discontinuities in the value of this counter can
                       occur at re-initialization of the management
                       system, and at other times as indicated by the
                       value of ifCounterDiscontinuityTime."
           REFERENCE   "[IEEE 802.3 Std.], 30.3.4.3,
                       aPAUSEMACCtrlFramesReceived."
           ::= { dot3PauseEntry 3 }

       dot3OutPauseFrames OBJECT-TYPE
           SYNTAX      Counter32
           MAX-ACCESS  read-only
           STATUS      current
           DESCRIPTION "A count of MAC Control frames transmitted on
                       this interface with an opcode indicating the
                       PAUSE operation.

                       This counter does not increment when the
                       interface is operating in half-duplex mode.

                       Discontinuities in the value of this counter can
                       occur at re-initialization of the management
                       system, and at other times as indicated by the
                       value of ifCounterDiscontinuityTime."
           REFERENCE   "[IEEE 802.3 Std.], 30.3.4.2,
                       aPAUSEMACCtrlFramesTransmitted."
           ::= { dot3PauseEntry 4 }

These two are the inbound and outbound PAUSE frame counters πŸ¦‹ Same vibe as each other: both are Counter32, both stay still in half-duplex, and both can get discontinuities at re-initialization or whenever ifCounterDiscontinuityTime says so. They also point back to the IEEE 802.3 sections, so go look if you want the full story 🌸


       --  802.3 Tests

       dot3Tests   OBJECT IDENTIFIER ::= { dot3 6 }

       dot3Errors  OBJECT IDENTIFIER ::= { dot3 7 }

       --  TDR Test

       dot3TestTdr OBJECT-IDENTITY
           STATUS      current
           DESCRIPTION "The Time-Domain Reflectometry (TDR) test is
                       specific to ethernet-like interfaces of type
                       10Base5 and 10Base2.  The TDR value may be
                       useful in determining the approximate distance
                       to a cable fault.  It is advisable to repeat
                       this test to check for a consistent resulting
                       TDR value, to verify that there is a fault.

                       A TDR test returns as its result the time
                       interval, measured in 10 MHz ticks or 100 nsec
                       units, between the start of TDR test
                       transmission and the subsequent detection of a
                       collision or deassertion of carrier.  On
                       successful completion of a TDR test, the result
                       is stored as the value of an appropriate
                       instance of an appropriate vendor specific MIB
                       object, and the OBJECT IDENTIFIER of that
                       instance is stored in the appropriate instance
                       of the appropriate test result code object
                       (thereby indicating where the result has been
                       stored)."
           ::= { dot3Tests 1 }

       -- Loopback Test
       dot3TestLoopBack OBJECT-IDENTITY
           STATUS      current
           DESCRIPTION "This test configures the MAC chip and executes
                       an internal loopback test of memory, data paths,
                       and the MAC chip logic.  This loopback test can
                       only be executed if the interface is offline.
                       Once the test has completed, the MAC chip should
                       be reinitialized for network operation, but it
                       should remain offline.

                       If an error occurs during a test, the
                       appropriate test result object will be set
                       to indicate a failure.  The two OBJECT
                       IDENTIFIER values dot3ErrorInitError and
                       dot3ErrorLoopbackError may be used to provided
                       more information as values for an appropriate
                       test result code object."
           ::= { dot3Tests 2 }

       dot3ErrorInitError OBJECT-IDENTITY
           STATUS      current
           DESCRIPTION "Couldn't initialize MAC chip for test."
           ::= { dot3Errors 1 }

       dot3ErrorLoopbackError OBJECT-IDENTITY
           STATUS      current
           DESCRIPTION "Expected data not received (or not received
                       correctly) in loopback test."
           ::= { dot3Errors 2 }

       -- { dot3 8 }, the dot3ChipSets tree, is defined in [28]

Now we're in the test zone πŸ§ͺ The TDR test is the cable-fault detective: it's only for 10Base5 and 10Base2, and you're supposed to repeat it to check the result is consistent πŸ”₯ The loopback test is the internal check, and it can only run while the interface is offline. Then the MAC chip gets reinitialized but stays offline. The two error identities, dot3ErrorInitError and dot3ErrorLoopbackError, are just the extra detail you can use to say what went wrong πŸ’€

And the { dot3 8 } tree is defined over in [28], so it's not here, bestie πŸ“


       -- conformance information

       etherConformance OBJECT IDENTIFIER ::= { etherMIB 2 }

       etherGroups      OBJECT IDENTIFIER ::= { etherConformance 1 }
       etherCompliances OBJECT IDENTIFIER ::= { etherConformance 2 }

       -- compliance statements

       etherCompliance MODULE-COMPLIANCE
           STATUS      deprecated
           DESCRIPTION "******** THIS COMPLIANCE IS DEPRECATED ********

                       The compliance statement for managed network
                       entities which have ethernet-like network
                       interfaces.

                       This compliance is deprecated and replaced by
                       dot3Compliance."

           MODULE  -- this module
               MANDATORY-GROUPS { etherStatsGroup }

               GROUP       etherCollisionTableGroup
               DESCRIPTION "This group is optional. It is appropriate
                           for all systems which have the necessary
                           metering. Implementation in such systems is
                           highly recommended."
           ::= { etherCompliances 1 }

       ether100MbsCompliance MODULE-COMPLIANCE
           STATUS      deprecated
           DESCRIPTION "******** THIS COMPLIANCE IS DEPRECATED ********

                       The compliance statement for managed network
                       entities which have 100 Mb/sec ethernet-like
                       network interfaces.

                       This compliance is deprecated and replaced by
                       dot3Compliance."

           MODULE  -- this module
               MANDATORY-GROUPS { etherStats100MbsGroup }

               GROUP       etherCollisionTableGroup
               DESCRIPTION "This group is optional. It is appropriate
                           for all systems which have the necessary
                           metering. Implementation in such systems is
                           highly recommended."
           ::= { etherCompliances 2 }

       dot3Compliance MODULE-COMPLIANCE
           STATUS      current
           DESCRIPTION "The compliance statement for managed network
                       entities which have ethernet-like network
                       interfaces."

           MODULE  -- this module
               MANDATORY-GROUPS { etherStatsBaseGroup }

               GROUP       etherDuplexGroup
               DESCRIPTION "This group is mandatory for all
                           ethernet-like network interfaces which are
                           capable of operating in full-duplex mode.
                           It is highly recommended for all
                           ethernet-like network interfaces."

               GROUP       etherStatsLowSpeedGroup
               DESCRIPTION "This group is mandatory for all
                           ethernet-like network interfaces which are
                           capable of operating at 10 Mb/s or slower in
                           half-duplex mode."

               GROUP       etherStatsHighSpeedGroup
               DESCRIPTION "This group is mandatory for all
                           ethernet-like network interfaces which are
                           capable of operating at 100 Mb/s or faster."

               GROUP       etherControlGroup
               DESCRIPTION "This group is mandatory for all
                           ethernet-like network interfaces that
                           support the MAC Control sublayer."

               GROUP       etherControlPauseGroup
               DESCRIPTION "This group is mandatory for all
                           ethernet-like network interfaces that
                           support the MAC Control PAUSE function."

               GROUP       etherCollisionTableGroup
               DESCRIPTION "This group is optional. It is appropriate
                           for all ethernet-like network interfaces
                           which are capable of operating in
                           half-duplex mode and have the necessary
                           metering. Implementation in systems with
                           such interfaces is highly recommended."

           ::= { etherCompliances 3 }

Compliance time, the rulebook zone πŸ“œ etherCompliance and ether100MbsCompliance are both deprecated and both point you to dot3Compliance, which is the current one πŸ‘‘ dot3Compliance is where the group requirements live: etherStatsBaseGroup is the mandatory base, and then the duplex, low-speed, high-speed, control and PAUSE groups each come with their own "mandatory for all…" rules. The collision table group is the optional one, though they do say it's highly recommended 🫢


       -- units of conformance

       etherStatsGroup OBJECT-GROUP
           OBJECTS     { dot3StatsIndex,
                         dot3StatsAlignmentErrors,
                         dot3StatsFCSErrors,
                         dot3StatsSingleCollisionFrames,
                         dot3StatsMultipleCollisionFrames,
                         dot3StatsSQETestErrors,
                         dot3StatsDeferredTransmissions,
                         dot3StatsLateCollisions,
                         dot3StatsExcessiveCollisions,
                         dot3StatsInternalMacTransmitErrors,
                         dot3StatsCarrierSenseErrors,
                         dot3StatsFrameTooLongs,
                         dot3StatsInternalMacReceiveErrors,
                         dot3StatsEtherChipSet
                       }
           STATUS      deprecated
           DESCRIPTION "********* THIS GROUP IS DEPRECATED **********

                       A collection of objects providing information
                       applicable to all ethernet-like network
                       interfaces.

                       This object group has been deprecated and
                       replaced by etherStatsBaseGroup and
                       etherStatsLowSpeedGroup."
           ::= { etherGroups 1 }

       etherCollisionTableGroup OBJECT-GROUP
           OBJECTS     { dot3CollFrequencies
                       }
           STATUS      current
           DESCRIPTION "A collection of objects providing a histogram
                       of packets successfully transmitted after
                       experiencing exactly N collisions."
           ::= { etherGroups 2 }

The object groups are the bundles of objects, and etherStatsGroup is the old one that got deprecated and replaced by etherStatsBaseGroup and etherStatsLowSpeedGroup 🌈 The collision table group is still current, and it's the histogram of packets that got through after exactly N collisions πŸ’œ

       etherStats100MbsGroup OBJECT-GROUP
           OBJECTS     { dot3StatsIndex,
                         dot3StatsAlignmentErrors,
                         dot3StatsFCSErrors,
                         dot3StatsSingleCollisionFrames,
                         dot3StatsMultipleCollisionFrames,
                         dot3StatsDeferredTransmissions,
                         dot3StatsLateCollisions,
                         dot3StatsExcessiveCollisions,
                         dot3StatsInternalMacTransmitErrors,
                         dot3StatsCarrierSenseErrors,
                         dot3StatsFrameTooLongs,
                         dot3StatsInternalMacReceiveErrors,
                         dot3StatsEtherChipSet,
                         dot3StatsSymbolErrors
                       }
           STATUS      deprecated
           DESCRIPTION "********* THIS GROUP IS DEPRECATED **********

                       A collection of objects providing information
                       applicable to 100 Mb/sec ethernet-like network
                       interfaces.

                       This object group has been deprecated and
                       replaced by etherStatsBaseGroup and
                       etherStatsHighSpeedGroup."
           ::= { etherGroups 3 }

       etherStatsBaseGroup OBJECT-GROUP
           OBJECTS     { dot3StatsIndex,
                         dot3StatsAlignmentErrors,
                         dot3StatsFCSErrors,
                         dot3StatsSingleCollisionFrames,
                         dot3StatsMultipleCollisionFrames,
                         dot3StatsDeferredTransmissions,
                         dot3StatsLateCollisions,
                         dot3StatsExcessiveCollisions,
                         dot3StatsInternalMacTransmitErrors,
                         dot3StatsCarrierSenseErrors,
                         dot3StatsFrameTooLongs,
                         dot3StatsInternalMacReceiveErrors
                       }
           STATUS      current
           DESCRIPTION "A collection of objects providing information
                       applicable to all ethernet-like network
                       interfaces."
           ::= { etherGroups 4 }

       etherStatsLowSpeedGroup OBJECT-GROUP
           OBJECTS     { dot3StatsSQETestErrors }
           STATUS      current
           DESCRIPTION "A collection of objects providing information
                       applicable to ethernet-like network interfaces
                       capable of operating at 10 Mb/s or slower in
                       half-duplex mode."

           ::= { etherGroups 5 }

       etherStatsHighSpeedGroup OBJECT-GROUP
           OBJECTS     { dot3StatsSymbolErrors }
           STATUS      current
           DESCRIPTION "A collection of objects providing information
                       applicable to ethernet-like network interfaces
                       capable of operating at 100 Mb/s or faster."
           ::= { etherGroups 6 }

       etherDuplexGroup OBJECT-GROUP
           OBJECTS     { dot3StatsDuplexStatus }
           STATUS      current
           DESCRIPTION "A collection of objects providing information
                       about the duplex mode of an ethernet-like
                       network interface."

           ::= { etherGroups 7 }

       etherControlGroup OBJECT-GROUP
           OBJECTS     { dot3ControlFunctionsSupported,
                         dot3ControlInUnknownOpcodes
                       }
           STATUS      current
           DESCRIPTION "A collection of objects providing information
                       about the MAC Control sublayer on ethernet-like
                       network interfaces."
           ::= { etherGroups 8 }

       etherControlPauseGroup OBJECT-GROUP
           OBJECTS     { dot3PauseAdminMode,
                         dot3PauseOperMode,
                         dot3InPauseFrames,
                         dot3OutPauseFrames
                       }
           STATUS      current
           DESCRIPTION "A collection of objects providing information
                       about and control of the MAC Control PAUSE
                       function on ethernet-like network interfaces."
           ::= { etherGroups 9 }

   END

5. Intellectual Property ✨

okay so the IETF is basically saying "we're not picking a side" πŸ™ˆ πŸ¦‹ They take no position on whether any intellectual property or other rights that someone might claim about the tech in this doc are valid, how far those rights reach, or whether you can even get a license for them. They also don't say they've gone looking for any of those rights, so no promises there, bestie. πŸ’…

If you want the details on how the IETF handles rights for standards-track and standards-related docs, that's written up in BCP-11. Copies of any claims of rights that were submitted for publication, any assurances that licenses will be made available, or the results of any attempt to get a general license or permission for implementers or users to use proprietary rights in this spec can all be requested from the IETF Secretariat. πŸ“©

The IETF also invites anyone to tell them about any copyrights, patents, patent applications, or other proprietary rights that might cover technology you'd need in order to practice this standard. Send that info to the IETF Executive Director. 🫢


6. Acknowledgements πŸŽ€

this doc was made by the IETF Ethernet Interfaces and Hub MIB Working Group, and their work got a huge boost from these amazing people 😭🫢

  • Lynn Kubinec
  • Steve McRobert
  • Dan Romascanu
  • Andrew Smith
  • Geoff Thompson

okay now the family tree, because it's honestly iconic 🌳✨ This doc is based on the Proposed Standard Ethernet MIB, RFC 2358 [23], which was edited by John Flick of Hewlett-Packard and Jeffrey Johnson of RedBack Networks and produced by the 802.3 Hub MIB Working Group. It extends that one by adding support for full-duplex Ethernet interfaces and 1000 Mb/sec Ethernet interfaces, as outlined in [16]. Slay. πŸ”₯

RFC 2358, in turn, is almost completely based on two docs: the Standard Ethernet MIB, RFC 1643 [21], and the Proposed Standard Ethernet MIB using the SNMPv2 SMI, RFC 1650 [22]. Both were edited by Frank Kastenholz of FTP Software and produced by the Interfaces MIB Working Group. RFC 2358 extends them by adding support for 100 Mb/sec ethernet interfaces. 🌈

RFC 1643 and RFC 1650, in turn, are based on the Draft Standard Ethernet MIB, RFC 1398 [20], also edited by Frank Kastenholz and produced by the Ethernet MIB Working Group. πŸ’œ

RFC 1398, in turn, is based on the Proposed Standard Ethernet MIB, RFC 1284 [18], which was edited by John Cook of Chipcom and produced by the Transmission MIB Working Group. The Ethernet MIB Working Group collected implementation experience on the variables specified in RFC 1284, wrote that experience up in RFC 1369 [19], and used it to develop this revised MIB. That's the glow-up arc we love to see. ✨

RFC 1284, in turn, is based on a document written by Frank Kastenholz, then of Interlan, called IEEE 802.3 Layer Management Draft M compatible MIB for TCP/IP Networks [17]. That document was modestly reworked, first by the SNMP Working Group and then by the Transmission Working Group, so it matched the current conventions for defining objects for MIB interfaces. James Davin of the MIT Laboratory for Computer Science and Keith McCloghrie of Hughes LAN Systems contributed to later drafts of this memo. Marshall Rose of Performance Systems International, Inc. converted the document into RFC 1212 [3] concise format. Anil Rijsinghani of DEC contributed text that describes the TDR test more adequately. And a big thank you to Frank Kastenholz of Interlan and Louis Steinberg of IBM for their experimentation. πŸ™πŸ¦‹

7. References ✨

okay bestie, here's the reading list πŸ“š every single one of these is cited somewhere above, so keep them handy 🫢

   [1]  Harrington, D., Presuhn, R. and B. Wijnen, "An Architecture for
        Describing SNMP Management Frameworks", RFC 2571, May 1999.

   [2]  Rose, M. and K. McCloghrie, "Structure and Identification of
        Management Information for TCP/IP-based Internets", STD 16, RFC
        1155, May 1990.

   [3]  Rose, M. and K. McCloghrie, "Concise MIB Definitions", STD 16,
        RFC 1212, March 1991.

   [4]  Rose, M., "A Convention for Defining Traps for use with the
        SNMP", RFC 1215, March 1991.

   [5]  McCloghrie, K., Perkins, D., Schoenwaelder, J., Case, J., Rose,
        M. and S. Waldbusser, "Structure of Management Information
        Version 2 (SMIv2)", STD 58, RFC 2578, April 1999.

   [6]  McCloghrie, K., Perkins, D., Schoenwaelder, J., Case, J., Rose,
        M. and S. Waldbusser, "Textual Conventions for SMIv2", STD 58,
        RFC 2579, April 1999.

   [7]  McCloghrie, K., Perkins, D., Schoenwaelder, J., Case, J., Rose,
        M. and S Waldbusser, "Conformance Statements for SMIv2", STD 58,
        RFC 2580, April 1999.

   [8]  Case, J., Fedor, M., Schoffstall, M. and J. Davin, "Simple
        Network Management Protocol", STD 15, RFC 1157, May 1990.

   [9]  Case, J., McCloghrie, K., Rose, M. and S. Waldbusser,
        "Introduction to Community-based SNMPv2", RFC 1901, January
        1996.

   [10] Case, J., McCloghrie, K., Rose, M. and S. Waldbusser, "Transport
        Mappings for Version 2 of the Simple Network Management Protocol
        (SNMPv2)", RFC 1906, January 1996.

   [11] Case, J., Harrington D., Presuhn R. and B. Wijnen, "Message
        Processing and Dispatching for the Simple Network Management
        Protocol (SNMP)", RFC 2572, May 1999.

   [12] Blumenthal, U. and B. Wijnen, "User-based Security Model (USM)
        for version 3 of the Simple Network Management Protocol
        (SNMPv3)", RFC 2574, May 1999.

   [13] Case, J., McCloghrie, K., Rose, M. and S. Waldbusser, "Protocol
        Operations for Version 2 of the Simple Network Management
        Protocol (SNMPv2)", RFC 1905, January 1996.

   [14] Levi, D., Meyer, P. and B. Stewart, "SNMPv3 Applications", RFC
        2573, May 1999.

   [15] Wijnen, B., Presuhn, R. and K. McCloghrie, "View-based Access
        Control Model (VACM) for the Simple Network Management Protocol
        (SNMP)", RFC 2575, May 1999.

   [16] IEEE, IEEE Std 802.3, 1998 Edition: "Information technology -
        Telecommunications and information exchange between systems -
        Local and metropolitan area networks - Specific requirements -
        Part 3: Carrier sense multiple access with collision detection
        (CSMA/CD) access method and physical layer specifications"
        (incorporating ANSI/IEEE Std. 802.3, 1996 Edition, IEEE Std.
        802.3r-1996, 802.3u-1995, 802.3x&y-1997, 802.3z-1998, and
        802.3aa-1998), September 1998.

   [17] Kastenholz, F., "IEEE 802.3 Layer Management Draft compatible
        MIB for TCP/IP Networks", electronic mail message to mib-
        wg@nnsc.nsf.net, 9 June 1989.

   [18] Cook, J., "Definitions of Managed Objects for Ethernet-Like
        Interface Types", RFC 1284, December 1991.

   [19] Kastenholz, F., "Implementation Notes and Experience for The
        Internet Ethernet MIB", RFC 1369, October 1992.

   [20] Kastenholz, F., "Definitions of Managed Objects for the
        Ethernet-like Interface Types", RFC 1398, January 1993.

   [21] Kastenholz, F., "Definitions of Managed Objects for the
        Ethernet-like Interface Types", STD 50, RFC 1643, July 1994.

   [22] Kastenholz, F., "Definitions of Managed Objects for the
        Ethernet-like Interface Types using SMIv2", RFC 1650, August
        1994.

   [23] Flick, J. and J. Johnson, "Definitions of Managed Objects for
        the Ethernet-like Interface Types", RFC 2358, June 1998.

   [24] McCloghrie, K. and M. Rose, Editors, "Management Information
        Base for Network Management of TCP/IP-based internets: MIB-II",
        STD 17, RFC 1213, March 1991.

   [25] McCloghrie, K., and F. Kastenholz, "The Interfaces Group MIB
        using SMIv2", RFC 2233, November 1997.

   [26] Bradner, S., "Key words for use in RFCs to Indicate Requirements
        Levels", BCP 14, RFC 2119, March 1997.

   [27] Smith, A., Flick, J., deGraaf, K., Romascanu, D., McMaster, D.,
        McCloghrie, K. and S. Roberts, "Definitions of Managed Objects
        for IEEE 802.3 Medium Attachment Units (MAUs)", RFC 2668, August
        1999.

   [28] Flick, J., "Definitions of Object Identifiers for Identifying
        Ethernet Chip Sets", RFC 2666, August 1999.

8. Security Considerations πŸ”

okay this section is serious, so listen up πŸ‘€ two management objects in this MIB are marked MAX-ACCESS read-write, and those can be sensitive or vulnerable in some network setups. Turning on SET operations in a non-secure environment, without proper protection, can seriously mess with network operations πŸ’€

a bunch of managed objects in this MIB might hold sensitive info too. The big one is dot3StatsEtherChipSet, because it could let an intruder figure out which vendor's gear is running on the network πŸ‘€ it's deprecated now, but some implementors may still build it in for backwards compatability.

so in some environments it really matters to control read access to these objects, and maybe even encrypt their values when they travel over the network via SNMP. Not every version of SNMP has the features for a secure setup 🫣

SNMPv1 by itself is that insecure environment, no cap πŸ™…β€β™€οΈ even if the network is secure (say, by using IPSec), there's still no control over who on that secure network can access and GET (read) the objects in this MIB.

the implementors should think about the security features that come with the SNMPv3 framework πŸ’– specifically, the User-based Security Model in RFC 2574 [12] and the View-based Access Control Model in RFC 2575 [15] are recommended.

and last but not least, it's a customer/user responsibility to make sure the SNMP entity giving access to an instance of this MIB is set up to hand those objects only to principals (users) who actually have the rights to see them πŸ”’ protect your stuff, bestie 🫢


9. Authors' Addresses πŸ–ŠοΈ

   John Flick
   Hewlett-Packard Company
   8000 Foothills Blvd. M/S 5557
   Roseville, CA 95747-5557

   Phone: +1 916 785 4018
   EMail: johnf@rose.hp.com


   Jeffrey Johnson
   RedBack Networks
   2570 North First Street, Suite 410
   San Jose, CA, 95131, USA

   Phone: +1 408 571 2699
   EMail: jeff@redbacknetworks.com

A. Change Log πŸ“

A.1. Changes since RFC 2358

okay so this is the glow-up history πŸ’… here's what changed from RFC 2358 to produce this document:

  • (1) Section 2 got a fresh look and now uses the current SNMP Management Framework boilerplate ✨
  • (2) The ifMtu mapping got clarified πŸŽ€
  • (3) The relationship between the IEEE 802.3 octet counters and the IF-MIB octet counters got clarified πŸ¦‹
  • (4) REFERENCE clauses were updated so they point at the actual IEEE 802.3 managed object each MIB object is based on πŸ”
  • (5) These object DESCRIPTION clauses now say they don't increment in full-duplex mode: dot3StatsSingleCollisionFrames, dot3StatsMultipleCollisionFrames, dot3StatsSQETestErrors, dot3StatsDeferredTransmissions, dot3StatsLateCollisions, dot3StatsExcessiveCollisions, dot3StatsCarrierSenseErrors, dot3CollFrequencies πŸ™ˆ
  • (6) These object DESCRIPTION clauses now reflect behaviour on full-duplex and 1000 Mb/s interfaces: dot3StatsAlignmentErrors, dot3StatsFCSErrors, dot3StatsSQETestErrors, dot3StatsLateCollisions, dot3StatsSymbolErrors πŸ”₯
  • (7) Two new tables joined the party: dot3ControlTable and dot3PauseTable 🧚
  • (8) A new object, dot3StatsDuplexStatus, was added πŸ’œ
  • (9) The object groups and compliances got restructured 🌈
  • (10) The dot3StatsEtherChipSet object has been deprecated πŸ₯€
  • (11) The dot3ChipSets moved to a separate document πŸ“

A.2. Changes between RFC 1650 and RFC 2358

this section covers the changes made to RFC 1650 to produce RFC 2358 🌸

  • (1) The MODULE-IDENTITY got updated to match the changes in the MIB πŸ‘‘
  • (2) A new object, dot3StatsSymbolErrors, was added ⭐
  • (3) The definition of the object dot3StatsIndex was converted to use the SMIv2 OBJECT-TYPE macro πŸ’…
  • (4) A new conformance group, etherStats100MbsGroup, was added 🫢
  • (5) A new compliance statement, ether100MbsCompliance, was added πŸ’–
  • (6) The Acknowledgements were extended to give a more complete history of where this document came from πŸŽ€
  • (7) The discussion of ifType got expanded πŸ¦‹
  • (8) A section on mapping of Interfaces MIB objects was added 🌸
  • (9) A section defining how this MIB relates to the MAU MIB was added 🧚
  • (10) A section on mapping IEEE 802.3 managed objects to this MIB and the Interfaces MIB was added πŸ“
  • (11) The dot3Tests, dot3Errors, and dot3ChipSets OIDs were converted to use the OBJECT-IDENTITY macro πŸ’œ
  • (12) More registered dot3ChipSets were added to the list 🌈
  • (13) An intellectual property notice and copyright notice were added, as required by RFC 2026 πŸ”

Copyright (C) The Internet Society (1999). All Rights Reserved.

This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English.

The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns.

This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Acknowledgement πŸ™Œ

Funding for the RFC Editor function is currently provided by the Internet Society. ✨

πŸ“¦ where this page comes from