RFC 1516

Definitions of Managed Objects for IEEE 802.3 Repeater Devices

πŸ“… published September 1993, from ietf

Definitions of Managed Objects for IEEE 802.3 Repeater Devices ✨

RFC 1516 πŸŽ€ is a Standards Track doc from the Network Working Group, dated September 1993. It was written by D. McMaster (SynOptics Communications, Inc.) and K. McCloghrie (Hughes LAN Systems, Inc.) 🫢. It obsoletes RFC 1368, so that's the one it replaces πŸ’….

Status of This Memo

okay so this part is the official "what kind of doc is this" bit πŸ“‹. It's an Internet standards track protocol for the Internet community, and it's basically asking everyone to talk about it and suggest improvements πŸ’¬. For the current standardization state, check the "Internet Official Protocol Standards" πŸ”. And distribution is unlimited, so share away 🌸.

Abstract

this memo defines a chunk of the Management Information Base (MIB) 🧩, which is what network management protocols use in the Internet community. specifically, it's for managing IEEE 802.3 10 Mb/second baseband repeaters, aka the ones people call "hubs" πŸ”Œβœ¨.

Table of Contents

   1. The Network Management Framework ......................    2
   1.1 Object Definitions ...................................    2
   2. Overview ..............................................    2
   2.1 Terminology ..........................................    3
   2.1.1 Repeaters, Hubs and Concentrators ..................    3
   2.1.2 Repeaters, Ports, and MAUs .........................    3
   2.1.3 Ports and Groups ...................................    5
   2.1.4 Internal Ports and MAUs ............................    6
   2.2 Supporting Functions .................................    7
   2.3 Structure of MIB .....................................    9
   2.3.1 The Basic Group Definitions ........................   10
   2.3.2 The Monitor Group Definitions ......................   10
    2.3.3 The Address Tracking Group Definitions ............   10
   2.4 Relationship to Other MIBs ...........................   10
   2.4.1 Relationship to the 'system' group .................   10
   2.4.2 Relationship to the 'interfaces' group .............   10
   2.5 Textual Conventions ..................................   11
   3. Definitions ...........................................   11
   3.1 MIB Groups in the Repeater MIB .......................   12
   3.2 The Basic Group Definitions ..........................   13
   3.3 The Monitor Group Definitions ........................   23
   3.4 The Address Tracking Group Definitions ...............   34
   3.5 Traps for use by Repeaters ...........................   36
   4. Changes from RFC 1368 .................................   38
   5. Acknowledgments .......................................   39
   6. References ............................................   39
   7. Security Considerations ...............................   40
   8. Authors' Addresses ....................................   40

1. The Network Management Framework ✨

the Internet-standard Network Management Framework has three components 🧁. Here they are:

  • STD 16, RFC 1155 defines the SMI πŸ“, which is the set of mechanisms for describing and naming objects so they can be managed. STD 16, RFC 1212 defines a more concise description mechanism, and it's totally consistent with the SMI πŸ’―.
  • STD 17, RFC 1213 defines MIB-II, which is the core set of managed objects for the Internet suite of protocols 🌈.
  • STD 15, RFC 1157 defines SNMP, the protocol used for network access to managed objects πŸ¦‹.

the Framework also lets people define new objects for experimentation and evaluation πŸ§ͺ. ngl that's iconic πŸ”₯.

1.1. Object Definitions

managed objects are accessed through a virtual information store called the Management Information Base, or MIB πŸ—‚οΈ. Objects in the MIB are defined using the subset of Abstract Syntax Notation One (ASN.1) that the SMI defines 🧠. Each object type gets named by an OBJECT IDENTIFIER, which is an administratively assigned name 🏷️. The object type plus an object instance uniquely identifies one specific instantiation of the object ✨. For human convenience, we often use a text string called the descriptor to refer to the object type πŸ’œ.

2. Overview 🌸

the object types in this memo represent attributes of an IEEE 802.3 (Ethernet-like) repeater πŸ”. These are defined by Section 9, "Repeater Unit for 10 Mb/s Baseband Networks," in the IEEE 802.3/ISO 8802-3 CSMA/CD standard [7] πŸ“˜.

these Repeater MIB objects can be used to manage non-standard repeater-like devices. BUT defining objects for implementation-specific properties of those non-standard devices is outside the scope of this memo πŸ™ˆ.

the definitions here are based on the IEEE draft standard P802.3K, "Layer Management for 10 Mb/s Baseband Repeaters" [8] πŸŽ€. If you're implementing these MIB objects, note that [8] explicitly describes when, where, and how various repeater attributes are measured πŸ“. That IEEE document also describes the effects of repeater actions that you can trigger by manipulating the MIB objects defined here ⚑.

the counters in this document are defined to be the same as the counters in the IEEE 802.3 Repeater Management draft πŸ”’. The goal is that the same instrumentation can implement both the IEEE and IETF management standards 🫢. iykyk.

2.1. Terminology πŸ“–

2.1.1. Repeaters, Hubs and Concentrators

okay history time πŸ•°οΈ. In late 1988, the IEEE 802.3 Hub Management task force got chartered to define managed objects for both 802.3 repeaters and the proposed 10BASE-FA synchronous active stars ⭐. The word "hub" was used to cover both repeaters and active stars 🌟.

in March, 1991, the active star proposal got dropped from the 10BASE-F draft πŸ’€. After that, the 802.3 group renamed the task force to the IEEE 802.3 Repeater Management Task Force, and they renamed their draft to match πŸ”„.

the term "hub" has caused some confusion, because "hub," "intelligent hub," and "concentrator" are often used to mean a modular chassis πŸ—„οΈ. That chassis has plug-in modules that give generalized LAN/WAN connectivity, often mixing 802.3 repeater, token ring, and FDDI connectivity, all internetworked by bridges, routers, and terminal servers 🌐.

so to be super clear that this work only covers managing IEEE 802.3 repeaters, the editors chose to call it a "Repeater MIB" instead of a "Hub MIB" πŸ’…βœ¨.

2.1.2. Repeaters, Ports, and MAUs

this text roughly defines "repeater," "port," and "MAU" as they're used in this memo πŸ“. Heads up, it's imprecise and skips lots of technical details πŸ™ƒ. For the full, precise definitions, check Section 9 of [7] πŸ”.

an IEEE 802.3 repeater connects "Ethernet-like" media segments together, which extends the network length and topology past what a single coax segment can do 🧡. You can picture it as a star structure with two or more input/output ports ⭐. The diagram below shows a 6-port repeater πŸ‘‘:

                       ^      ^
                       |      |
                      \ \   / /
                       \ \ / /
                   _____\ v /_____
                -> ______   ______ ->
                        / ^ \
                       / / \ \
                      / /   \ \
                       |      |
                       v      v

                Figure 1.  Repeater Unit

all the stations on the media segments connected to a given repeater's ports are in a single collision domain πŸ’₯. A packet sent by any of those stations is seen by all of them πŸ‘€.

data coming in on any port gets transmitted out through each of the remaining n-1 ports πŸ”€. If data comes in on two or more ports at the same time, or the repeater detects a collision on the incoming port, the repeater sends a jamming signal out on all ports for the duration of the collision 🚨.

a repeater is a bit-wise store-and-forward device πŸ§ƒ. It's different from a bridge (which is a frame store-and-forward device) because it mainly cares about carrier sense and data bits πŸ“‘. It doesn't make data-handling decisions based on the legality or contents of a packet πŸ™…β€β™€οΈ. A repeater retransmits data bits as they come in πŸƒβ€β™€οΈ. Its data FIFO only holds enough bits to make sure it doesn't underflow when incoming bits arrive a bit slower than the repeater's transmission rate 🌊.

a repeater is not an end-station on the network, so it doesn't count toward the overall limit of 1024 stations 🚫. A repeater has no MAC address, so packets can't be addressed to the repeater or to its ports πŸ™…. (Packets CAN be addressed to the MAC address of a management entity monitoring a repeater πŸ“¬. That management entity may or may not be connected to the network through one of the repeater's ports. How it gets info about the repeater's activity is an implementation issue and isn't discussed here πŸ€·β€β™€οΈ.)

a repeater connects to the network with Medium Attachment Units (MAUs), and sometimes through Attachment Unit Interfaces (AUIs) too πŸ”—. MAUs are also called transceivers, and an AUI is the same thing as a 15-pin Ethernet or DIX connector πŸ”Œ.

the 802.3 standard defines a "repeater set" as the "repeater unit" plus its associated MAUs (and AUIs, if present) πŸ“¦. The "repeater unit" is the part of the repeater set that's inboard of the physical media interfaces 🧠. The MAUs might be physically separate from the repeater unit, or they might be built into the same physical package 🧩.

                    (MAU)   (MAU)
                      \ \   / /
                       \ \ / /
                   _____\ v /_____
             (MAU) ______   ______ (MAU)
                        / ^ \
                       / / \ \
                      / /   \ \
                    (MAU)   (MAU)

                Figure 2.  Repeater Set

the most common MAUs are the 10BASE-5 (AUI to thick "yellow" coax), 10BASE-2 (BNC to thin coax), 10BASE-T (unshielded twisted-pair), and FOIRL (asynchronous fiber optic inter-repeater link, which is being folded into the 10BASE-F standard as 10BASE-FL) 🧡✨. The draft 10BASE-F standard also includes a new synchronous fiber optic attachment called 10BASE-FB 🌈.

it's worth stressing that the repeater MIB being defined by the IEEE only covers repeater unit management 🎯. It does NOT include management of the MAUs that form the repeater set πŸ™…β€β™€οΈ. The IEEE recognizes that MAU management should be the same whether the MAUs are connected to end-stations (DTEs) or to repeaters 🀝. This memo follows the same strategy, and the definition of management information for MAUs is being handled in a separate memo πŸ“š. more parts coming, bestie πŸ«ΆπŸ’–

2.1.3. Ports and Groups πŸŽ€

Okay so repeaters are often built into modular "concentrators" 🧚, where a card cage holds a bunch of field-replaceable cards. Several cards can team up to form one single repeater unit, and each card holds one or more of the repeater's ports. Because of that modular setup, people usually identify repeater ports by card number plus the port number relative to the card, e.g., Card 3, Port 11. ✨

To support this numbering vibe, this document follows the example of the IEEE Repeater Management draft [8] and lets an implementor split the ports in a repeater into "groups", if they want. For example, an implementor might represent field-replaceable units as groups of ports so the port numbering matches the modular hardware. πŸ’…

This group mapping is recommended but optional. An implementor can put all of a modular repeater's ports into a single group, or divide the ports into groups that don't match physical divisions. 🌸

The object rptrGroupCapacity, which has a maximum value of 1024, tells you the maximum number of groups that a given repeater may contain. The value of rptrGroupCapacity must remain constant from one management restart to the next. πŸ”’

Each group within the repeater is uniquely identified by a group number in the range 1..rptrGroupCapacity. Groups can come and go without causing a management reset, and they may be sparsely numbered within the repeater. For example, in a 12-card cage, cards 3, 5, 6, and 7 may together form a single repeater, and the implementor may choose to number them as groups 3, 5, 6, and 7, respectively. πŸ¦‹

The object rptrGroupPortCapacity, which also has a maximum value of 1024, tells you the maximum number of ports that a given group may contain. The value of rptrGroupPortCapacity must not change for a given group. However, a group may be deleted from the repeater and replaced with a group containing a different number of ports. The value of rptrGroupLastOperStatusChange will indicate that a change took place. πŸ‘€

Each port within the repeater is uniquely identified by a combination of group number and port number, where port number is an integer in the range 1..rptrGroupPortCapacity. Just like groups, ports within a group may be sparsely numbered. Ports can also come and go within a group without causing a management reset. 🧸

2.1.4. Internal Ports and MAUs πŸ“

Repeater ports can be thought of as sources of traffic into the repeater. Besides the externally visible ports mentioned above, like those with 10BASE-T MAUs or AUI ports with external transceivers, some implementations have internal ports that aren't obvious to the end-user but are still sources of traffic into the repeater. Examples include internal management ports, which an agent uses to communicate, and ports connecting to a backplane internal to the implementation. πŸ”Œ

Some implementations may not manage all of a repeater's ports. For managed ports, there must be entries in the port table. Unmanaged ports will not show up in the table. πŸ“‹

It is up to the implementor to select the appropriate group(s) in which to place internal ports. GroupCapacity for a given group always reflects the number of MANAGED ports in that group. 🫢

If some ports are unmanaged such that not all packet sources are represented by managed ports, then the sum of the input counters for the repeater will not equal the actual output of the repeater. πŸ’€

2.2. Supporting Functions πŸ’œ

The IEEE 802.3 Hub Management draft [8] defines the following seven functions and seven signals, which are used to describe precisely when port counters are incremented. The relationship between the functions and signals is shown in Figure 3. 🧠

The CollisionEvent, ActivityDuration, CarrierEvent, FramingError, OctetCount, FCSError, and SourceAddress output signals defined here are not retrievable MIB objects. They're concepts used to define the MIB objects. The inputs are defined in Section 9 of the IEEE 802.3 standard [7]. πŸ“š

          +---------+
          |Collision|--------------------->CollisionEvent
CollIn(X)+>|Event    |
         | |Funct    |          +--------+
         | +---------+          |Activity|
         | +-------+            |Timing  |->ActivityDuration
         +>|Carrier|      +---->|Funct   |
           |Event  |      |     +--------+
DataIn(X)->|Funct  |+-----+---------------->CarrierEvent
           +-------+|
                    | +-------+
                    +>|Framing|------------>FramingError
                      |Funct  |  +-------+
decodedData---------->|       |+>|Octet  |
                      +-------+| |Count  |->OctetCount
                               | |Funct  |
                               | +-------+
                               | +-------+
                        Octet  | |Cyclic |
                        Stream +>|Redund.|
                               | |Check  |->FCSError
                               | |Funct  |
                               | +-------+
                               | +-------+
                               | |Source |
                               +>|Address|->SourceAddress
                                 |Funct  |
                                 +-------+

          Figure 3.  Port Functions Relationship

Collision Event Function: The collision event function asserts the CollisionEvent signal when the CollIn(X) variable has the value SQE. The CollisionEvent signal remains asserted until the assertion of any CarrierEvent signal due to the reception of the following event. πŸ’₯

Carrier Event Function: The carrier event function asserts the CarrierEvent signal when the repeater exits the IDLE state, Fig 9-2 [7], and the port has been determined to be port N. It deasserts the CarrierEvent signal when, for a duration of at least Carrier Recovery Time (Ref: 9.5.6.5 [7]), both the DataIn(N) variable has the value II and the CollIn(N) variable has the value -SQE. The value N is the port assigned at the time of transition from the IDLE state. πŸ“‘

Framing Function: The framing function recognizes the boundaries of an incoming frame by monitoring the CarrierEvent signal and the decoded data stream. Data bits are accepted while the CarrierEvent signal is asserted. The framing function strips the preamble and start of frame delimiter from the received data stream. The remaining bits are aligned along octet boundaries. If there is not an integral number of octets, then FramingError shall be asserted. The FramingError signal is cleared upon the assertion of the CarrierEvent signal due to the reception of the following event. 🧩

Activity Timing Function: The activity timing function measures the duration of the assertion of the CarrierEvent signal. This duration value must be adjusted by removing the value of Carrier Recovery Time (Ref: 9.5.6.5 [7]) to obtain the true duration of activity on the network. The output of the Activity Timing function is the ActivityDuration value, which represents the duration of the CarrierEvent signal as expressed in units of bit times. ⏱️

Octet Counting Function: The octet counting function counts the number of complete octets received from the output of the framing function. The output of the octet counting function is the OctetCount value. The OctetCount value is reset to zero upon the assertion of the CarrierEvent signal due to the reception of the following event. πŸ”’

Cyclic Redundancy Check Function: The cyclic redundancy check function verifies that the sequence of octets output by the framing function contains a valid frame check sequence field. The frame check sequence field is the last four octets received from the output of the framing function. The algorithm for generating an FCS from the octet stream is specified in 3.2.8 [7]. If the FCS generated according to this algorithm is not the same as the last four octets received from the framing function, then the FCSError signal is asserted. The FCSError signal is cleared upon the assertion of the CarrierEvent signal due to the reception of the following event. πŸ”

Source Address Function: The source address function extracts octets from the stream output by the framing function. The seventh through twelfth octets shall be extracted from the octet stream and output as the SourceAddress variable. The SourceAddress variable is set to an invalid state upon the assertion of the CarrierEvent signal due to the reception of the following event. 🏷️

2.3. Structure of MIB 🌈

Objects in this MIB are arranged into MIB groups. Each MIB group is organized as a set of related objects. πŸ—‚οΈ

2.3.1. The Basic Group Definitions

This mandatory group contains the objects that are applicable to all repeaters. It contains status, parameter, and control objects for the repeater as a whole, the port groups within the repeater, as well as for the individual ports themselves. πŸ‘‘

2.3.2. The Monitor Group Definitions

This optional group contains monitoring statistics for the repeater as a whole and for individual ports. πŸ“Š

2.3.3. The Address Tracking Group Definitions

This optional group contains objects for tracking the MAC addresses of the DTEs attached to the ports of the repeater. πŸ•΅οΈβ€β™€οΈ

2.4. Relationship to Other MIBs πŸ¦‹

It is assumed that a repeater implementing this MIB will also implement (at least) the 'system' group defined in MIB-II [3]. 🫧

2.4.1. Relationship to the 'system' group

In MIB-II, the 'system' group is defined as being mandatory for all systems, such that each managed entity contains one instance of each object in the 'system' group. Thus, those objects apply to the entity even if the entity's sole functionality is management of a repeater. πŸ–₯️

2.4.2. Relationship to the 'interfaces' group

In MIB-II, the 'interfaces' group is defined as being mandatory for all systems and contains information on an entity's interfaces, where each interface is thought of as being attached to a the Internet suite of protocols.)

This Repeater MIB uses the notion of ports on a repeater. The concept of a MIB-II interface has NO specific relationship to a repeater's port. Therefore, the 'interfaces' group applies only to the one (or more) network interfaces on which the entity managing the repeater sends and receives management protocol operations, and does not apply to the repeater's ports. πŸ™…β€β™€οΈ

This is consistent with the physical-layer nature of a repeater. A repeater is a bitwise store-and-forward device. It recognizes activity and bits, but does not process incoming data based on any packet-related information (such as checksum or addresses). A repeater has no MAC address, no MAC implementation, and does not pass packets up to higher-level protocol entities for processing. ⚑

(When a network management entity is observing the repeater, it may appear as though the repeater is passing packets to a higher-level protocol entity. However, this is only a means of implementing management, and this passing of management information is not part of the repeater functionality.) πŸ”

2.5. Textual Conventions πŸŽ€

okay so the datatype MacAddress is used as a textual convention in this doc, and this convention has NO effect on the syntax or the semantics of any managed object πŸ’…. Objects that use it still get encoded using the rules for their primitive type. So no changes to the SMI or the SNMP are needed. It's just here to make life easier for the humans reading it 🫢

3. Definitions ✨

here's the whole MIB module, copied exactly, because implementers need every single character 🧚

   SNMP-REPEATER-MIB DEFINITIONS ::= BEGIN

   IMPORTS
       Counter, TimeTicks, Gauge
                                           FROM RFC1155-SMI
       DisplayString                       FROM RFC1213-MIB
       TRAP-TYPE                           FROM RFC-1215
       OBJECT-TYPE                         FROM RFC-1212;


   snmpDot3RptrMgt OBJECT IDENTIFIER ::= { mib-2 22 }


   -- All representations of MAC addresses in this MIB Module use,
   -- as a textual convention (i.e., this convention does not affect
   -- their encoding), the data type:

   MacAddress ::= OCTET STRING (SIZE (6))    -- a 6 octet address in
                                             -- the "canonical" order
   -- defined by IEEE 802.1a, i.e., as if it were transmitted least
   -- significant bit first.


   --                      References
   --
   -- The following references are used throughout this MIB:
   --
   -- [IEEE 802.3 Std]
   --    refers to IEEE 802.3/ISO 8802-3 Information processing
   --    systems - Local area networks - Part 3: Carrier sense
   --    multiple access with collision detection (CSMA/CD)
   --    access method and physical layer specifications
   --    (2nd edition, September 21, 1990).
   --
   -- [IEEE 802.3 Rptr Mgt]
   --    refers to IEEE P802.3K, 'Layer Management for 10 Mb/s
   --    Baseband Repeaters, Section 19,' Draft Supplement to
   --    ANSI/IEEE 802.3, (Draft 8, April 9, 1992)


   --                      MIB Groups
   --
   -- The rptrBasicPackage group is mandatory.
   -- The rptrMonitorPackage and rptrAddrTrackPackage
   -- groups are optional.


   rptrBasicPackage
       OBJECT IDENTIFIER ::= { snmpDot3RptrMgt 1 }

   rptrMonitorPackage
       OBJECT IDENTIFIER ::= { snmpDot3RptrMgt 2 }

   rptrAddrTrackPackage
       OBJECT IDENTIFIER ::= { snmpDot3RptrMgt 3 }


   -- object identifiers for organizing the information
   -- in the groups by repeater, port-group, and port

   rptrRptrInfo
       OBJECT IDENTIFIER ::= { rptrBasicPackage 1 }
   rptrGroupInfo
       OBJECT IDENTIFIER ::= { rptrBasicPackage 2 }
   rptrPortInfo
       OBJECT IDENTIFIER ::= { rptrBasicPackage 3 }

   rptrMonitorRptrInfo
       OBJECT IDENTIFIER ::= { rptrMonitorPackage 1 }
   rptrMonitorGroupInfo
       OBJECT IDENTIFIER ::= { rptrMonitorPackage 2 }
   rptrMonitorPortInfo
       OBJECT IDENTIFIER ::= { rptrMonitorPackage 3 }

   rptrAddrTrackRptrInfo     -- this subtree is currently unused

       OBJECT IDENTIFIER ::= { rptrAddrTrackPackage 1 }
   rptrAddrTrackGroupInfo    -- this subtree is currently unused
       OBJECT IDENTIFIER ::= { rptrAddrTrackPackage 2 }
   rptrAddrTrackPortInfo
       OBJECT IDENTIFIER ::= { rptrAddrTrackPackage 3 }


   --
   --                    The BASIC GROUP
   --
   -- Implementation of the Basic Group is mandatory for all
   -- managed repeaters.

   --
   -- Basic Repeater Information
   --
   -- Configuration, status, and control objects for the overall
   -- repeater
   --

   rptrGroupCapacity OBJECT-TYPE
       SYNTAX    INTEGER (1..1024)
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "The rptrGroupCapacity is the number of groups
               that can be contained within the repeater.  Within
               each managed repeater, the groups are uniquely
               numbered in the range from 1 to rptrGroupCapacity.

               Some groups may not be present in the repeater, in
               which case the actual number of groups present
               will be less than rptrGroupCapacity.  The number
               of groups present will never be greater than
               rptrGroupCapacity.

               Note:  In practice, this will generally be the
               number of field-replaceable units (i.e., modules,
               cards, or boards) that can fit in the physical
               repeater enclosure, and the group numbers will
               correspond to numbers marked on the physical
               enclosure."
       REFERENCE
               "Reference IEEE 802.3 Rptr Mgt, 19.2.3.2,
               aRepeaterGroupCapacity."
       ::= { rptrRptrInfo 1 }

   rptrOperStatus OBJECT-TYPE

       SYNTAX  INTEGER {
                   other(1),            -- undefined or unknown status
                   ok(2),               -- no known failures
                   rptrFailure(3),      -- repeater-related failure
                   groupFailure(4),     -- group-related failure
                   portFailure(5),      -- port-related failure
                   generalFailure(6)    -- failure, unspecified type
               }
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "The rptrOperStatus object indicates the
               operational state of the repeater.  The
               rptrHealthText object may be consulted for more
               specific information about the state of the
               repeater's health.

               In the case of multiple kinds of failures (e.g.,
               repeater failure and port failure), the value of
               this attribute shall reflect the highest priority
               failure in the following order, listed highest
               priority first:

                   rptrFailure(3)
                   groupFailure(4)
                   portFailure(5)
                   generalFailure(6)."
       REFERENCE
               "Reference IEEE 802.3 Rptr Mgt, 19.2.3.2,
               aRepeaterHealthState."
       ::= { rptrRptrInfo 2 }

   rptrHealthText OBJECT-TYPE
       SYNTAX    DisplayString (SIZE (0..255))
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "The health text object is a text string that
               provides information relevant to the operational
               state of the repeater.  Agents may use this string
               to provide detailed information on current
               failures, including how they were detected, and/or
               instructions for problem resolution.  The contents
               are agent-specific."
       REFERENCE
               "Reference IEEE 802.3 Rptr Mgt, 19.2.3.2,
               aRepeaterHealthText."
       ::= { rptrRptrInfo 3 }

   rptrReset OBJECT-TYPE
       SYNTAX    INTEGER {
                     noReset(1),
                     reset(2)
                 }
       ACCESS    read-write
       STATUS    mandatory
       DESCRIPTION
               "Setting this object to reset(2) causes a
               transition to the START state of Fig 9-2 in
               section 9 [IEEE 802.3 Std].

               Setting this object to noReset(1) has no effect.
               The agent will always return the value noReset(1)
               when this object is read.

               After receiving a request to set this variable to
               reset(2), the agent is allowed to delay the reset
               for a short period.  For example, the implementor
               may choose to delay the reset long enough to allow
               the SNMP response to be transmitted.  In any
               event, the SNMP response must be transmitted.

               This action does not reset the management counters
               defined in this document nor does it affect the
               portAdminStatus parameters.  Included in this
               action is the execution of a disruptive Self-Test
               with the following characteristics:  a) The nature
               of the tests is not specified.  b) The test resets
               the repeater but without affecting management
               information about the repeater.  c) The test does
               not inject packets onto any segment.  d) Packets
               received during the test may or may not be
               transferred.  e) The test does not interfere with
               management functions.

               After performing this self-test, the agent will
               update the repeater health information (including
               rptrOperStatus and rptrHealthText), and send a
               rptrHealth trap."
       REFERENCE
               "Reference IEEE 802.3 Rptr Mgt, 19.2.3.3,
               acResetRepeater."
       ::= { rptrRptrInfo 4 }

   rptrNonDisruptTest OBJECT-TYPE
       SYNTAX    INTEGER {
                     noSelfTest(1),
                     selfTest(2)
                 }
       ACCESS    read-write
       STATUS    mandatory
       DESCRIPTION
               "Setting this object to selfTest(2) causes the
               repeater to perform a agent-specific, non-
               disruptive self-test that has the following
               characteristics:  a) The nature of the tests is
               not specified.  b) The test does not change the
               state of the repeater or management information
               about the repeater.  c) The test does not inject
               packets onto any segment.  d) The test does not
               prevent the relay of any packets.  e) The test
               does not interfere with management functions.

               After performing this test, the agent will update
               the repeater health information (including
               rptrOperStatus and rptrHealthText) and send a
               rptrHealth trap.

               Note that this definition allows returning an
               'okay' result after doing a trivial test.

               Setting this object to noSelfTest(1) has no
               effect.  The agent will always return the value
               noSelfTest(1) when this object is read."
       REFERENCE
               "Reference IEEE 802.3 Rptr Mgt, 19.2.3.3,
               acExecuteNonDisruptiveSelfTest."
       ::= { rptrRptrInfo 5 }

   rptrTotalPartitionedPorts OBJECT-TYPE
       SYNTAX    Gauge
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "This object returns the total number of ports in
               the repeater whose current state meets all three
               of the following criteria:  rptrPortOperStatus
               does not have the value notPresent(3),
               rptrPortAdminStatus is enabled(1), and
               rptrPortAutoPartitionState is autoPartitioned(2)."
       ::= { rptrRptrInfo 6 }

   --
   -- The Basic Port Group Table
   --

   rptrGroupTable OBJECT-TYPE
       SYNTAX    SEQUENCE OF RptrGroupEntry
       ACCESS    not-accessible
       STATUS    mandatory
       DESCRIPTION
               "Table of descriptive and status information about
               the groups of ports."
       ::= { rptrGroupInfo 1 }

   rptrGroupEntry OBJECT-TYPE
       SYNTAX    RptrGroupEntry
       ACCESS    not-accessible
       STATUS    mandatory
       DESCRIPTION
               "An entry in the table, containing information
               about a single group of ports."
       INDEX    { rptrGroupIndex }
       ::= { rptrGroupTable 1 }

   RptrGroupEntry ::=
       SEQUENCE {
           rptrGroupIndex
               INTEGER,
           rptrGroupDescr
               DisplayString,
           rptrGroupObjectID
               OBJECT IDENTIFIER,
           rptrGroupOperStatus
               INTEGER,
           rptrGroupLastOperStatusChange
               TimeTicks,
           rptrGroupPortCapacity
               INTEGER
       }

Okay bestie, the Definitions are where the MIB really comes alive 🧚 Groups, ports, and the monitor stats, all in one place. Let's get into it πŸ’…

   rptrGroupIndex OBJECT-TYPE
       SYNTAX    INTEGER (1..1024)
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "This object identifies the group within the
               repeater for which this entry contains
               information.  This value is never greater than
               rptrGroupCapacity."

       REFERENCE
               "Reference IEEE 802.3 Rptr Mgt, 19.2.5.2,
               aGroupID."
       ::= { rptrGroupEntry 1 }

   rptrGroupDescr OBJECT-TYPE
       SYNTAX    DisplayString (SIZE (0..255))
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "A textual description of the group.  This value
               should include the full name and version
               identification of the group's hardware type and
               indicate how the group is differentiated from
               other types of groups in the repeater.  Plug-in
               Module, Rev A' or 'Barney Rubble 10BASE-T 4-port
               SIMM socket Version 2.1' are examples of valid
               group descriptions.

               It is mandatory that this only contain printable
               ASCII characters."
       ::= { rptrGroupEntry 2 }

   rptrGroupObjectID OBJECT-TYPE
       SYNTAX    OBJECT IDENTIFIER
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "The vendor's authoritative identification of the
               group.  This value may be allocated within the SMI
               enterprises subtree (1.3.6.1.4.1) and provides a
               straight-forward and unambiguous means for
               determining what kind of group is being managed.

               For example, this object could take the value
               1.3.6.1.4.1.4242.1.2.14 if vendor 'Flintstones,
               Inc.' was assigned the subtree 1.3.6.1.4.1.4242,
               and had assigned the identifier
               1.3.6.1.4.1.4242.1.2.14 to its 'Wilma Flintstone
               6-Port FOIRL Plug-in Module.'"
       ::= { rptrGroupEntry 3 }

   rptrGroupOperStatus OBJECT-TYPE
       SYNTAX    INTEGER {
                     other(1),
                     operational(2),
                     malfunctioning(3),
                     notPresent(4),
                     underTest(5),
                     resetInProgress(6)
                 }
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "An object that indicates the operational status
               of the group.

               A status of notPresent(4) indicates that the group
               is temporarily or permanently physically and/or
               logically not a part of the repeater.  It is an
               implementation-specific matter as to whether the
               agent effectively removes notPresent entries from
               the table.

               A status of operational(2) indicates that the
               group is functioning, and a status of
               malfunctioning(3) indicates that the group is
               malfunctioning in some way."
       ::= { rptrGroupEntry 4 }

   rptrGroupLastOperStatusChange OBJECT-TYPE
       SYNTAX    TimeTicks
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "An object that contains the value of sysUpTime at
               the time that the value of the rptrGroupOperStatus
               object for this group last changed.

               A value of zero indicates that the group's
               operational status has not changed since the agent
               last restarted."
       ::= { rptrGroupEntry 5 }

   rptrGroupPortCapacity OBJECT-TYPE
       SYNTAX    INTEGER (1..1024)
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "The rptrGroupPortCapacity is the number of ports
               that can be contained within the group.  Valid
               range is 1-1024.  Within each group, the ports are
               uniquely numbered in the range from 1 to
               rptrGroupPortCapacity.

               Note:  In practice, this will generally be the
               number of ports on a module, card, or board, and
               the port numbers will correspond to numbers marked
               on the physical embodiment."
       REFERENCE
               "Reference IEEE 802.3 Rptr Mgt, 19.2.5.2,
               aGroupPortCapacity."
       ::= { rptrGroupEntry 6 }


   --
   -- The Basic Port Table
   --

   rptrPortTable OBJECT-TYPE
       SYNTAX    SEQUENCE OF RptrPortEntry
       ACCESS    not-accessible
       STATUS    mandatory
       DESCRIPTION
               "Table of descriptive and status information about
               the ports."
       ::= { rptrPortInfo 1 }

   rptrPortEntry OBJECT-TYPE
       SYNTAX    RptrPortEntry
       ACCESS    not-accessible
       STATUS    mandatory
       DESCRIPTION
               "An entry in the table, containing information
               about a single port."
       INDEX    { rptrPortGroupIndex, rptrPortIndex }
       ::= { rptrPortTable 1 }

   RptrPortEntry ::=
       SEQUENCE {
           rptrPortGroupIndex
               INTEGER,
           rptrPortIndex
               INTEGER,
           rptrPortAdminStatus
               INTEGER,
           rptrPortAutoPartitionState
               INTEGER,
           rptrPortOperStatus
               INTEGER
       }

   rptrPortGroupIndex OBJECT-TYPE
       SYNTAX    INTEGER (1..1024)
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "This object identifies the group containing the
               port for which this entry contains information."
       ::= { rptrPortEntry 1 }

   rptrPortIndex OBJECT-TYPE
       SYNTAX    INTEGER (1..1024)
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "This object identifies the port within the group
               for which this entry contains information.  This
               value can never be greater than
               rptrGroupPortCapacity for the associated group."
       REFERENCE
               "Reference IEEE 802.3 Rptr Mgt, 19.2.6.2,
               aPortID."
       ::= { rptrPortEntry 2 }

   rptrPortAdminStatus OBJECT-TYPE
       SYNTAX    INTEGER {
                     enabled(1),
                     disabled(2)
                 }
       ACCESS    read-write
       STATUS    mandatory
       DESCRIPTION
               "Setting this object to disabled(2) disables the
               port.  A disabled port neither transmits nor
               receives.  Once disabled, a port must be
               explicitly enabled to restore operation.  A port
               which is disabled when power is lost or when a
               reset is exerted shall remain disabled when normal
               operation resumes.

               The admin status takes precedence over auto-
               partition and functionally operates between the
               auto-partition mechanism and the AUI/PMA.

               Setting this object to enabled(1) enables the port
               and exerts a BEGIN on the port's auto-partition
               state machine.

               (In effect, when a port is disabled, the value of
               rptrPortAutoPartitionState for that port is frozen
               until the port is next enabled.  When the port
               becomes enabled, the rptrPortAutoPartitionState
               becomes notAutoPartitioned(1), regardless of its
               pre-disabling state.)"
       REFERENCE
               "Reference IEEE 802.3 Rptr Mgt, 19.2.6.2,
               aPortAdminState and 19.2.6.3, acPortAdminControl."
       ::= { rptrPortEntry 3 }

   rptrPortAutoPartitionState OBJECT-TYPE
       SYNTAX    INTEGER {
                     notAutoPartitioned(1),
                     autoPartitioned(2)
                 }
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "The autoPartitionState flag indicates whether the
               port is currently partitioned by the repeater's
               auto-partition protection.

               The conditions that cause port partitioning are
               specified in partition state machine in Section 9
               [IEEE 802.3 Std].  They are not differentiated
               here."
       REFERENCE
               "Reference IEEE 802.3 Rptr Mgt, 19.2.6.2,
               aAutoPartitionState."
       ::= { rptrPortEntry 4 }

   rptrPortOperStatus  OBJECT-TYPE
       SYNTAX    INTEGER {
                     operational(1),
                     notOperational(2),
                     notPresent(3)
                 }
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "This object indicates the port's operational
               status.  The notPresent(3) status indicates the
               port is physically removed (note this may or may
               not be possible depending on the type of port.)
               The operational(1) status indicates that the port
               is enabled (see rptrPortAdminStatus) and working,
               even though it might be auto-partitioned (see
               rptrPortAutoPartitionState).

               If this object has the value operational(1) and
               rptrPortAdminStatus is set to disabled(2), it is
               expected that this object's value will soon change
               to notOperational(2)."
       ::= { rptrPortEntry 5 }


   --
   --                    The MONITOR GROUP
   --
   -- Implementation of this group is optional, but within the
   -- group all elements are mandatory.  If a managed repeater
   -- implements any part of this group, the entire group shall
   -- be implemented.

   --
   -- Repeater Monitor Information
   --
   -- Performance monitoring statistics for the repeater
   --

   rptrMonitorTransmitCollisions OBJECT-TYPE
       SYNTAX    Counter
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "This counter is incremented every time the
               repeater state machine enters the TRANSMIT
               COLLISION state from any state other than ONE PORT
               LEFT (Ref: Fig 9-2, IEEE 802.3 Std).

               The approximate minimum time for rollover of this
               counter is 16 hours."
       REFERENCE
               "Reference IEEE 802.3 Rptr Mgt, 19.2.3.2,
               aTransmitCollisions."
       ::= { rptrMonitorRptrInfo 1 }


   --
   -- The Group Monitor Table
   --

   rptrMonitorGroupTable OBJECT-TYPE
       SYNTAX    SEQUENCE OF RptrMonitorGroupEntry
       ACCESS    not-accessible
       STATUS    mandatory
       DESCRIPTION
               "Table of performance and error statistics for the
               groups."
       ::= { rptrMonitorGroupInfo 1 }

   rptrMonitorGroupEntry OBJECT-TYPE
       SYNTAX    RptrMonitorGroupEntry
       ACCESS    not-accessible
       STATUS    mandatory
       DESCRIPTION
               "An entry in the table, containing total
               performance and error statistics for a single
               group.  Regular retrieval of the information in
               this table provides a means of tracking the
               performance and health of the networked devices
               attached to this group's ports.

               The counters in this table are redundant in the
               sense that they are the summations of information
               already available through other objects.  However,
               these sums provide a considerable optimization of
               network management traffic over the otherwise
               necessary retrieval of the individual counters
               included in each sum."
       INDEX    { rptrMonitorGroupIndex }
       ::= { rptrMonitorGroupTable 1 }

okay so we're in the monitor group now and it's giving spreadsheet energy πŸ“ŠπŸ’– each group gets its own little totals row ✨

   RptrMonitorGroupEntry ::=
       SEQUENCE {
           rptrMonitorGroupIndex
               INTEGER,
           rptrMonitorGroupTotalFrames
               Counter,
           rptrMonitorGroupTotalOctets
               Counter,
           rptrMonitorGroupTotalErrors
               Counter
       }

   rptrMonitorGroupIndex OBJECT-TYPE
       SYNTAX    INTEGER (1..1024)
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "This object identifies the group within the
               repeater for which this entry contains
               information."
       ::= { rptrMonitorGroupEntry 1 }

   rptrMonitorGroupTotalFrames OBJECT-TYPE

       SYNTAX    Counter
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "The total number of frames of valid frame length
               that have been received on the ports in this group
               and for which the FCSError and CollisionEvent
               signals were not asserted.  This counter is the
               summation of the values of the
               rptrMonitorPortReadableFrames counters for all of
               the ports in the group.

               This statistic provides one of the parameters
               necessary for obtaining the packet error rate.
               The approximate minimum time for rollover of this
               counter is 80 hours."
       ::= { rptrMonitorGroupEntry 2 }

   rptrMonitorGroupTotalOctets OBJECT-TYPE
       SYNTAX    Counter
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "The total number of octets contained in the valid
               frames that have been received on the ports in
               this group.  This counter is the summation of the
               values of the rptrMonitorPortReadableOctets
               counters for all of the ports in the group.

               This statistic provides an indicator of the total
               data transferred.  The approximate minimum time
               for rollover of this counter is 58 minutes."
       ::= { rptrMonitorGroupEntry 3 }

   rptrMonitorGroupTotalErrors OBJECT-TYPE
       SYNTAX    Counter
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "The total number of errors which have occurred on
               all of the ports in this group.  This counter is
               the summation of the values of the
               rptrMonitorPortTotalErrors counters for all of the
               ports in the group."
       ::= { rptrMonitorGroupEntry 4 }

ok now the port table, which is where the real detail lives πŸŽ€

   --
   -- The Port Monitor Table
   --

   rptrMonitorPortTable OBJECT-TYPE
       SYNTAX    SEQUENCE OF RptrMonitorPortEntry
       ACCESS    not-accessible
       STATUS    mandatory
       DESCRIPTION
               "Table of performance and error statistics for the
               ports."
       ::= { rptrMonitorPortInfo 1 }

   rptrMonitorPortEntry OBJECT-TYPE
       SYNTAX    RptrMonitorPortEntry
       ACCESS    not-accessible
       STATUS    mandatory
       DESCRIPTION
               "An entry in the table, containing performance and
               error statistics for a single port."
       INDEX    { rptrMonitorPortGroupIndex, rptrMonitorPortIndex }
       ::= { rptrMonitorPortTable 1 }

   RptrMonitorPortEntry ::=
       SEQUENCE {
           rptrMonitorPortGroupIndex
               INTEGER,
           rptrMonitorPortIndex
               INTEGER,
           rptrMonitorPortReadableFrames
               Counter,
           rptrMonitorPortReadableOctets
               Counter,
           rptrMonitorPortFCSErrors
               Counter,
           rptrMonitorPortAlignmentErrors
               Counter,
           rptrMonitorPortFrameTooLongs
               Counter,
           rptrMonitorPortShortEvents
               Counter,
           rptrMonitorPortRunts
               Counter,
           rptrMonitorPortCollisions
               Counter,
           rptrMonitorPortLateEvents
               Counter,
           rptrMonitorPortVeryLongEvents
               Counter,
           rptrMonitorPortDataRateMismatches

               Counter,
           rptrMonitorPortAutoPartitions
               Counter,
           rptrMonitorPortTotalErrors
               Counter
       }

   rptrMonitorPortGroupIndex OBJECT-TYPE
       SYNTAX    INTEGER (1..1024)
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "This object identifies the group containing the
               port for which this entry contains information."
       ::= { rptrMonitorPortEntry 1 }

   rptrMonitorPortIndex OBJECT-TYPE
       SYNTAX    INTEGER (1..1024)
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "This object identifies the port within the group
               for which this entry contains information."
       REFERENCE
               "Reference IEEE 802.3 Rptr Mgt, 19.2.6.2,
               aPortID."
       ::= { rptrMonitorPortEntry 2 }

   rptrMonitorPortReadableFrames OBJECT-TYPE
       SYNTAX    Counter
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "This object is the number of frames of valid
               frame length that have been received on this port.
               This counter is incremented by one for each frame
               received on this port whose OctetCount is greater
               than or equal to minFrameSize and less than or
               equal to maxFrameSize (Ref: IEEE 802.3 Std,
               4.4.2.1) and for which the FCSError and
               CollisionEvent signals are not asserted.

               This statistic provides one of the parameters
               necessary for obtaining the packet error rate.
               The approximate minimum time for rollover of this
               counter is 80 hours."
       REFERENCE
               "Reference IEEE 802.3 Rptr Mgt, 19.2.6.2,
               aReadableFrames."
       ::= { rptrMonitorPortEntry 3 }

   rptrMonitorPortReadableOctets OBJECT-TYPE
       SYNTAX    Counter
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "This object is the number of octets contained in
               valid frames that have been received on this port.
               This counter is incremented by OctetCount for each
               frame received on this port which has been
               determined to be a readable frame (i.e., including
               FCS octets but excluding framing bits and dribble
               bits).

               This statistic provides an indicator of the total
               data transferred.  The approximate minimum time
               for rollover of this counter is 58 minutes."
       REFERENCE
               "Reference IEEE 802.3 Rptr Mgt, 19.2.6.2,
               aReadableOctets."
       ::= { rptrMonitorPortEntry 4 }

   rptrMonitorPortFCSErrors OBJECT-TYPE
       SYNTAX    Counter
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "This counter is incremented by one for each frame
               received on this port with the FCSError signal
               asserted and the FramingError and CollisionEvent
               signals deasserted and whose OctetCount is greater
               than or equal to minFrameSize and less than or
               equal to maxFrameSize (Ref: 4.4.2.1, IEEE 802.3
               Std).

               The approximate minimum time for rollover of this
               counter is 80 hours."
       REFERENCE
               "Reference IEEE 802.3 Rptr Mgt, 19.2.6.2,
               aFrameCheckSequenceErrors."
       ::= { rptrMonitorPortEntry 5 }

   rptrMonitorPortAlignmentErrors OBJECT-TYPE
       SYNTAX    Counter
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "This counter is incremented by one for each frame
               received on this port with the FCSError and
               FramingError signals asserted and CollisionEvent
               signal deasserted and whose OctetCount is greater
               than or equal to minFrameSize and less than or
               equal to maxFrameSize (Ref: IEEE 802.3 Std,
               4.4.2.1).  If rptrMonitorPortAlignmentErrors is
               incremented then the rptrMonitorPortFCSErrors
               Counter shall not be incremented for the same
               frame.

               The approximate minimum time for rollover of this
               counter is 80 hours."
       REFERENCE
               "Reference IEEE 802.3 Rptr Mgt, 19.2.6.2,
               aAlignmentErrors."
       ::= { rptrMonitorPortEntry 6 }

   rptrMonitorPortFrameTooLongs OBJECT-TYPE
       SYNTAX    Counter
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "This counter is incremented by one for each frame
               received on this port whose OctetCount is greater
               than maxFrameSize (Ref: 4.4.2.1, IEEE 802.3 Std).
               If rptrMonitorPortFrameTooLongs is incremented
               then neither the rptrMonitorPortAlignmentErrors
               nor the rptrMonitorPortFCSErrors counter shall be
               incremented for the frame.

               The approximate minimum time for rollover of this
               counter is 61 days."
       REFERENCE
               "Reference IEEE 802.3 Rptr Mgt, 19.2.6.2,
               aFramesTooLong."
       ::= { rptrMonitorPortEntry 7 }

   rptrMonitorPortShortEvents OBJECT-TYPE
       SYNTAX    Counter
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "This counter is incremented by one for each
               CarrierEvent on this port with ActivityDuration
               less than ShortEventMaxTime.  ShortEventMaxTime is
               greater than 74 bit times and less than 82 bit
               times.  ShortEventMaxTime has tolerances included
               to provide for circuit losses between a
               conformance test point at the AUI and the
               measurement point within the state machine.

               Note:  shortEvents may indicate externally
               generated noise hits which will cause the repeater
               to transmit Runts to its other ports, or propagate
               a collision (which may be late) back to the
               transmitting DTE and damaged frames to the rest of
               the network.

               Implementors may wish to consider selecting the
               ShortEventMaxTime towards the lower end of the
               allowed tolerance range to accommodate bit losses
               suffered through physical channel devices not
               budgeted for within this standard.

               The approximate minimum time for rollover of this
               counter is 16 hours."
       REFERENCE
               "Reference IEEE 802.3 Rptr Mgt, 19.2.6.2,
               aShortEvents."
       ::= { rptrMonitorPortEntry 8 }

   rptrMonitorPortRunts OBJECT-TYPE
       SYNTAX    Counter
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "This counter is incremented by one for each
               CarrierEvent on this port that meets one of the
               following two conditions.  Only one test need be
               made.  a) The ActivityDuration is greater than
               ShortEventMaxTime and less than ValidPacketMinTime
               and the CollisionEvent signal is deasserted.  b)
               The OctetCount is less than 64, the
               ActivityDuration is greater than ShortEventMaxTime
               and the CollisionEvent signal is deasserted.
               ValidPacketMinTime is greater than or equal to 552
               bit times and less than 565 bit times.

that's the end of this chunk, bestie 🫢 the Runts description is cut right here, so we'll pick up mid-sentence in the next part 🧚

okay so we're picking up right in the middle of the runts counter's description πŸ‘€ the bit about how an event that's between 74 and 82 bit times has to land in shortEvents or runts, but not both. no double-counting, bestie πŸ’…

               An event whose length is greater than 74 bit times
               but less than 82 bit times shall increment either
               the shortEvents counter or the runts counter but
               not both.  A CarrierEvent greater than or equal to
               552 bit times but less than 565 bit times may or
               may not be counted as a runt.

               ValidPacketMinTime has tolerances included to
               provide for circuit losses between a conformance
               test point at the AUI and the measurement point
               within the state machine.

               Runts usually indicate collision fragments, a
               normal network event.  In certain situations
               associated with large diameter networks a
               percentage of collision fragments may exceed
               ValidPacketMinTime.

               The approximate minimum time for rollover of this
               counter is 16 hours."
       REFERENCE
               "Reference IEEE 802.3 Rptr Mgt, 19.2.6.2, aRunts."
       ::= { rptrMonitorPortEntry 9 }

   rptrMonitorPortCollisions OBJECT-TYPE
       SYNTAX    Counter
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "This counter is incremented by one for any
               CarrierEvent signal on any port for which the
               CollisionEvent signal on this port is also
               asserted.

               The approximate minimum time for rollover of this
               counter is 16 hours."
       REFERENCE
               "Reference IEEE 802.3 Rptr Mgt, 19.2.6.2,
               aCollisions."
       ::= { rptrMonitorPortEntry 10 }

the collisions counter is giving "I'm counting every time a carrier event and a collision event show up together" πŸ’₯ no notes 🫢

Next up is the late events counter, and this one is a whole vibe 😭 it only ticks when the CollIn(X) variable flips to SQE while the ActivityDuration is past the LateEventThreshold, and those events get counted twice (as a collision AND a late event). the threshold has to sit between 480 and 565 bit times, and it's allowed to double as the ValidPacketMinTime threshold, which is so efficient, iconic πŸ‘‘

   rptrMonitorPortLateEvents OBJECT-TYPE
       SYNTAX    Counter
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "This counter is incremented by one for each
               CarrierEvent on this port in which the CollIn(X)
               variable transitions to the value SQE (Ref:
               9.6.6.2, IEEE 802.3 Std) while the
               ActivityDuration is greater than the
               LateEventThreshold.  Such a CarrierEvent is
               counted twice, as both a collision and as a
               lateEvent.

               The LateEventThreshold is greater than 480 bit
               times and less than 565 bit times.
               LateEventThreshold has tolerances included to
               permit an implementation to build a single
               threshold to serve as both the LateEventThreshold
               and ValidPacketMinTime threshold.

               The approximate minimum time for rollover of this
               counter is 81 hours."
       REFERENCE
               "Reference IEEE 802.3 Rptr Mgt, 19.2.6.2,
               aLateEvents."
       ::= { rptrMonitorPortEntry 11 }

   rptrMonitorPortVeryLongEvents OBJECT-TYPE
       SYNTAX    Counter
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "This counter is incremented by one for each
               CarrierEvent on this port whose ActivityDuration
               is greater than the MAU Jabber Lockup Protection
               timer TW3 (Ref: 9.6.1 & 9.6.5, IEEE 802.3 Std).
               Other counters may be incremented as appropriate."
       REFERENCE
               "Reference IEEE 802.3 Rptr Mgt, 19.2.6.2,
               aVeryLongEvents."
       ::= { rptrMonitorPortEntry 12 }

   rptrMonitorPortDataRateMismatches OBJECT-TYPE
       SYNTAX    Counter
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "This counter is incremented by one for each frame
               received on this port that meets all of the
               following conditions:  a) The CollisionEvent
               signal is not asserted.  b) The ActivityDuration
               is greater than ValidPacketMinTime.  c) The
               frequency (data rate) is detectably mismatched
               from the local transmit frequency.  The exact
               degree of mismatch is vendor specific and is to be
               defined by the vendor for conformance testing.

               When this event occurs, other counters whose
               increment conditions were satisfied may or may not
               also be incremented, at the implementor's
               discretion.  Whether or not the repeater was able
               to maintain data integrity is beyond the scope of
               this standard."
       REFERENCE
               "Reference IEEE 802.3 Rptr Mgt, 19.2.6.2,
               aDataRateMismatches."
       ::= { rptrMonitorPortEntry 13 }

   rptrMonitorPortAutoPartitions OBJECT-TYPE
       SYNTAX    Counter
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "This counter is incremented by one for each time
               the repeater has automatically partitioned this
               port.  The conditions that cause port partitioning
               are specified in the partition state machine in
               Section 9 [IEEE 802.3 Std].  They are not
               differentiated here."
       REFERENCE
               "Reference IEEE 802.3 Rptr Mgt, 19.2.6.2,
               aAutoPartitions."
       ::= { rptrMonitorPortEntry 14 }

   rptrMonitorPortTotalErrors OBJECT-TYPE
       SYNTAX    Counter
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "The total number of errors which have occurred on
               this port.  This counter is the summation of the
               values of other error counters (for the same
               port), namely:

                   rptrMonitorPortFCSErrors,
                   rptrMonitorPortAlignmentErrors,
                   rptrMonitorPortFrameTooLongs,
                   rptrMonitorPortShortEvents,
                   rptrMonitorPortLateEvents,
                   rptrMonitorPortVeryLongEvents, and
                   rptrMonitorPortDataRateMismatches.

               This counter is redundant in the sense that it is
               the summation of information already available
               through other objects.  However, it is included
               specifically because the regular retrieval of this
               object as a means of tracking the health of a port
               provides a considerable optimization of network
               management traffic over the otherwise necessary
               retrieval of the summed counters."
       ::= { rptrMonitorPortEntry 15 }

the total errors counter is basically the group chat summary of all the other error counters 🧚 it's redundant on purpose, bc grabbing one number is way less traffic than pulling all of them. smart, efficient, slay πŸ’œ


now we're entering the ADDRESS TRACKING GROUP πŸ¦‹ the vibe here is that implementing it is optional, but if a managed repeater does implement any part of it, it has to do the whole thing. commitment era πŸŽ€

   --
   --                    The ADDRESS TRACKING GROUP
   --
   -- Implementation of this group is optional; it is appropriate
   -- for all systems which have the necessary instrumentation.  If a
   -- managed repeater implements any part of this group, the entire
   -- group shall be implemented.

   --
   -- The Port Address Tracking Table
   --

   rptrAddrTrackTable OBJECT-TYPE
       SYNTAX    SEQUENCE OF RptrAddrTrackEntry
       ACCESS    not-accessible
       STATUS    mandatory
       DESCRIPTION
               "Table of address mapping information about the
               ports."
       ::= { rptrAddrTrackPortInfo 1 }

   rptrAddrTrackEntry OBJECT-TYPE
       SYNTAX    RptrAddrTrackEntry
       ACCESS    not-accessible
       STATUS    mandatory
       DESCRIPTION
               "An entry in the table, containing address mapping
               information about a single port."
       INDEX    { rptrAddrTrackGroupIndex, rptrAddrTrackPortIndex }
       ::= { rptrAddrTrackTable 1 }

   RptrAddrTrackEntry ::=
       SEQUENCE {
           rptrAddrTrackGroupIndex
               INTEGER,
           rptrAddrTrackPortIndex
               INTEGER,
           rptrAddrTrackLastSourceAddress     -- DEPRECATED OBJECT
               MacAddress,
           rptrAddrTrackSourceAddrChanges
               Counter,
           rptrAddrTrackNewLastSrcAddress
               OCTET STRING
       }

   rptrAddrTrackGroupIndex OBJECT-TYPE
       SYNTAX    INTEGER (1..1024)
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "This object identifies the group containing the
               port for which this entry contains information."
       ::= { rptrAddrTrackEntry 1 }

   rptrAddrTrackPortIndex OBJECT-TYPE
       SYNTAX    INTEGER (1..1024)
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "This object identifies the port within the group
               for which this entry contains information."
       REFERENCE
               "Reference IEEE 802.3 Rptr Mgt, 19.2.6.2,
               aPortID."
       ::= { rptrAddrTrackEntry 2 }

   rptrAddrTrackLastSourceAddress OBJECT-TYPE
       SYNTAX    MacAddress
       ACCESS    read-only
       STATUS    deprecated
       DESCRIPTION
               "This object is the SourceAddress of the last
               readable frame (i.e., counted by
               rptrMonitorPortReadableFrames) received by this
               port.

               This object has been deprecated because its value
               is undefined when no frames have been observed on
               this port.  The replacement object is
               rptrAddrTrackNewLastSrcAddress."
       REFERENCE
               "Reference IEEE 802.3 Rptr Mgt, 19.2.6.2,
               aLastSourceAddress."
       ::= { rptrAddrTrackEntry 3 }

   rptrAddrTrackSourceAddrChanges OBJECT-TYPE
       SYNTAX    Counter
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "This counter is incremented by one for each time
               that the rptrAddrTrackLastSourceAddress attribute
               for this port has changed.

               This may indicate whether a link is connected to a
               single DTE or another multi-user segment.

               The approximate minimum time for rollover of this
               counter is 81 hours."
       REFERENCE
               "Reference IEEE 802.3 Rptr Mgt, 19.2.6.2,
               aSourceAddressChanges."
       ::= { rptrAddrTrackEntry 4 }

   rptrAddrTrackNewLastSrcAddress OBJECT-TYPE
       SYNTAX    OCTET STRING (SIZE(0 | 6))
       ACCESS    read-only
       STATUS    mandatory
       DESCRIPTION
               "This object is the SourceAddress of the last
               readable frame (i.e., counted by
               rptrMonitorPortReadableFrames) received by this
               port.  If no frames have been received by this
               port since the agent began monitoring the port
               activity, the agent shall return a string of
               length zero."
       REFERENCE
               "Reference IEEE 802.3 Rptr Mgt, 19.2.6.2,
               aLastSourceAddress."
       ::= { rptrAddrTrackEntry 5 }

ngl the deprecated object is kind of a cautionary tale πŸ’€ rptrAddrTrackLastSourceAddress got retired because its value is undefined when a port hasn't seen any frames, so the replacement, rptrAddrTrackNewLastSrcAddress, gets to be the main character now ✨ and when no frames have come in since the agent started watching, that one returns a zero-length string. no drama, just clean 🌸


last bit of this part is the traps 🚨 the rptrHealth trap is for repeater health, and it fires either when rptrOperStatus changes or when a non-disruptive test finishes. traps follow the conventions in RFC 1215 [6], so that's the rulebook πŸ“–

   -- Traps for use by Repeaters

   -- Traps are defined using the conventions in RFC 1215 [6].

   rptrHealth TRAP-TYPE
       ENTERPRISE  snmpDot3RptrMgt
       VARIABLES   { rptrOperStatus }
       DESCRIPTION
               "The rptrHealth trap conveys information related
               to the operational status of the repeater.  This
               trap is sent either when the value of
               rptrOperStatus changes, or upon completion of a
               non-disruptive test.

               The rptrHealth trap must contain the
               rptrOperStatus object.  The agent may optionally
               include the rptrHealthText object in the varBind
               list.  See the rptrOperStatus and rptrHealthText
               objects for descriptions of the information that
               is sent.

the trap gets to carry rptrOperStatus no matter what, and rptrHealthText is optional extra flair πŸ’– more trap details coming up, stay tuned 🧚✨

               The agent must throttle the generation of
               consecutive rptrHealth traps so that there is at
               least a five-second gap between traps of this
               type.  When traps are throttled, they are dropped,
               not queued for sending at a future time.  (Note
               that 'generating' a trap means sending to all
               configured recipients.)"
       REFERENCE
               "Reference IEEE 802.3 Rptr Mgt, 19.2.3.4,
               hubHealth notification."
       ::= 1

   rptrGroupChange TRAP-TYPE
       ENTERPRISE  snmpDot3RptrMgt
       VARIABLES   { rptrGroupIndex }
       DESCRIPTION
               "This trap is sent when a change occurs in the
               group structure of a repeater.  This occurs only
               when a group is logically or physically removed
               from or added to a repeater.  The varBind list
               contains the identifier of the group that was
               removed or added.

               The agent must throttle the generation of
               consecutive rptrGroupChange traps for the same
               group so that there is at least a five-second gap
               between traps of this type.  When traps are
               throttled, they are dropped, not queued for
               sending at a future time.  (Note that 'generating'
               a trap means sending to all configured
               recipients.)"
       REFERENCE
               "Reference IEEE 802.3 Rptr Mgt, 19.2.3.4,
               groupMapChange notification."
       ::= 2

   rptrResetEvent TRAP-TYPE
       ENTERPRISE  snmpDot3RptrMgt
       VARIABLES   { rptrOperStatus }
       DESCRIPTION
               "The rptrResetEvent trap conveys information
               related to the operational status of the repeater.
               This trap is sent on completion of a repeater
               reset action.  A repeater reset action is defined
               as an a transition to the START state of Fig 9-2
               in section 9 [IEEE 802.3 Std], when triggered by a
               management command (e.g., an SNMP Set on the
               rptrReset object).

               The agent must throttle the generation of
               consecutive rptrResetEvent traps so that there is
               at least a five-second gap between traps of this
               type.  When traps are throttled, they are dropped,
               not queued for sending at a future time.  (Note
               that 'generating' a trap means sending to all
               configured recipients.)

               The rptrResetEvent trap is not sent when the agent
               restarts and sends an SNMP coldStart or warmStart
               trap.  However, it is recommended that a repeater
               agent send the rptrOperStatus object as an
               optional object with its coldStart and warmStart
               trap PDUs.

               The rptrOperStatus object must be included in the
               varbind list sent with this trap.  The agent may
               optionally include the rptrHealthText object as
               well."
       REFERENCE
               "Reference IEEE 802.3 Rptr Mgt, 19.2.3.4, hubReset
               notification."
       ::= 3

   END

4. Changes from RFC 1368 πŸ¦‹

(1) okay first up, they added section 2.1.4, "Internal Ports and MAUs" 🧚, which defines internal ports and spells out how they may or may not be managed πŸ”Œ.

(2) they noticed the failure list for rptrOperStatus goes highest priority first πŸ“‹.

(3) the rptrReset description got a glow-up πŸ’…: the agent may briefly delay the reset action ⏳.

(4) for rptrReset, they cleared up what the agent should take care of after doing the reset and self-test 🧼.

(5) rptrNonDisruptTest got the same kind of tweak as (3) πŸŽ€.

(6) the rptrNonDisruptTest description now says it's totally fine to return "ok" after only a trivial test πŸ™ˆ.

(7) rptrAddrTrackLastSourceAddress is deprecated πŸ’”, and there's a replacement object with a zero-length value until the first frame is seen on the port 🌸.

(8) the rptrHealth trap is sent after rptrNonDisruptTest even if the repeater health info doesn't change from the test 🩺.

(9) and the throttling-traps text got clarified 🚦.

5. Acknowledgments 🫢

This document is the work of the IETF Hub MIB Working Group. It is based on drafts of the IEEE 802.3 Repeater Management Task Force.

6. References πŸ“š

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

[2] Case, J., Fedor, M., Schoffstall, M., and J. Davin, "Simple Network Management Protocol", STD 15, RFC 1157, SNMP Research, Performance Systems International, Performance Systems International, MIT Laboratory for Computer Science, May 1990.

[3] McCloghrie K., and M. Rose, Editors, "Management Information Base for Network Management of TCP/IP-based internets", STD 17, RFC 1213, Performance Systems International, March 1991.

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

[5] Rose, M., and K. McCloghrie, Editors, "Concise MIB Definitions", STD 16, RFC 1212, Performance Systems International, Hughes LAN Systems, March 1991.

[6] Rose, M., Editor, "A Convention for Defining Traps for use with the SNMP", RFC 1215, Performance Systems International, March 1991.

[7] IEEE 802.3/ISO 8802-3 - Information processing systems - Local area networks - Part 3: Carrier sense multiple access with collision detection (CSMA/CD) access method and physical layer specifications, 2nd edition, 21 September 1990.

[8] IEEE P802.3K - Layer Management for 10 Mb/s Baseband Repeaters, Section 19, Draft Supplement to ANSI/IEEE 802.3, Draft 8, 9 April 1992.

7. Security Considerations πŸ”

Okay, serious moment πŸ’€: this memo does not discuss security issues. Security issues are not discussed in this memo.

8. Authors' Addresses πŸ’Œ

   Donna McMaster
   SynOptics Communications, Inc.
   4401 Great America Parkway
   P.O. Box 58185
   Santa Clara, CA 95052-8185

   Phone: (408) 764-1206
   EMail: mcmaster@synoptics.com


   Keith McCloghrie
   Hughes LAN Systems, Inc.
   1225 Charleston Road
   Mountain View, CA 94043

   Phone: (415) 966-7934
   EMail: kzm@hls.com

And that's a wrap, bestie 🌈✨

πŸ“¦ where this page comes from