RFC 1231

IEEE 802.5 Token Ring MIB

πŸ“… published May 1991, from ietf

RFC 1231: IEEE 802.5 Token Ring MIB πŸŽ€

okay so this is RFC 1231 (Request for Comments: 1231), and it's called IEEE 802.5 Token Ring MIB πŸ’… It came out of the Network Working Group in May 1991 ✨ Three authors wrote it: K. McCloghrie from Hughes LAN Systems, Inc., R. Fox from Synoptics, Inc., and E. Decker from cisco Systems, Inc. 🫢 The Status section calls it an IAB standards track protocol, and the header doesn't list anything it obsoletes or updates, so no drama there 🌈


Status of This Memo ✨

so this memo defines a MIB for 805.5 networks to use with the SNMP protocol 🧚 It's a product of the Transmission Working Group of the Internet Engineering Task Force (IETF) πŸ’œ This RFC specifies an IAB standards track protocol for the Internet community, and it's asking for discussion and suggestions for improvements πŸ”₯ For the standardization state and status of this protocol, check the current edition of the "IAB Official Protocol Standards" πŸ“š Distribution of this memo is unlimited 🌸

Table of Contents πŸ“œ

1. Abstract ..............................................    1
2. The Network Management Framework.......................    2
3. Objects ...............................................    2
3.1 Format of Definitions ...............................     3
4. Overview ..............................................    3
4.1 Scope of Definitions ................................     3
4.2 Textual Conventions .................................     3
5. Definitions ...........................................    4
6. Acknowledgements ......................................   21
7. References ............................................   22
8. Security Considerations................................   23
9. Authors' Addresses.....................................   23

1. Abstract πŸ¦‹

okay so this memo defines an experimental piece of the Management Information Base (MIB) for network management protocols in TCP/IP-based internets πŸ’– Specifically, it defines managed objects for managing subnetworks that use the IEEE 802.5 Token Ring technology from 802.5 Token Ring Access Method and Physical Layer Specifications, IEEE Standard 802.5-1989 πŸŽ€

2. The Network Management Framework πŸ’…

the Internet-standard Network Management Framework is made up of three components ✨

  • RFC 1155 defines the SMI, which covers the mechanisms for describing and naming objects for management purposes. RFC 1212 gives a more concise description mechanism, and it's totally consistent with the SMI 🧠
  • RFC 1156 defines MIB-I, the core set of managed objects for the Internet suite of protocols. RFC 1213 defines MIB-II, which evolved from MIB-I thanks to implementation experience and new operational requirements πŸ“ˆ
  • RFC 1157 defines SNMP, the protocol used for network access to managed objects πŸ“‘

the Framework also lets people define new objects for experimenting and evaluating stuff πŸ§ͺ

3. Objects 🌸

managed objects get accessed through a virtual information store called the Management Information Base, or MIB πŸ—‚οΈ Objects in the MIB are defined using a subset of Abstract Syntax Notation One (ASN.1) [7] that the SMI defines πŸ’œ Each object has a name, a syntax, and an encoding. The name is an object identifier, an administratively assigned name that specifies an object type. The object type plus an object instance uniquely identifies one specific instantiation of the object πŸ” For human convenience, we often use a textual string, called the OBJECT DESCRIPTOR, to refer to the object type too 🫢

the syntax of an object type defines the abstract data structure for that object type, and it uses ASN.1 for this purpose. The SMI [3] deliberately restricts which ASN.1 constructs can be used, and that's explicitly done for simplicity πŸ“

the encoding of an object type is basically how that object type gets represented using its syntax. Tied right into the idea of syntax and encoding is how the object type is represented when it's sent over the network 🌐

the SMI specifies using the basic encoding rules of ASN.1 [8], with the extra requirements that SNMP imposes πŸ”₯

3.1. Format of Definitions ✨

Section 5 contains the specification of all object types in this MIB module πŸ“‹ The object types are defined using the conventions from the SMI, as amended by the extensions specified in [9,10] πŸŽ€

4. Overview 🧚

this memo defines three tables, and they're the main event πŸ’–

  • 802.5 Interface Table: state and parameter info that's specific to 802.5 interfaces
  • 802.5 Statistics Table: 802.5 interface statistics
  • 802.5 Timer Table: the values of 802.5-defined timers

every managed system gets one entry in the 802.5 Interface Table and one entry in the 802.5 Statistics Table for each of its 802.5 interfaces ✨ Implementation of the 802.5 Timer Table is optional πŸ¦‹

this memo also defines OBJECT IDENTIFIERs. Some identify 802.5 tests, for use with the ifExtnsTestTable defined in [11], and some identify Token Ring interface Chip Sets, for use with the ifExtnsChipSet object defined in [11] 🌈

4.1. Scope of Definitions πŸ’–

all the objects in this memo are registered in one subtree inside the experimental namespace [3], and they're for use with every interface that follows the IEEE 802.5 Token Ring Access Method and Physical Layer Specifications [10] 🫢 Right now, that means interfaces where the ifType variable in the Internet-standard MIB [4,6] has the value:

iso88025-tokenRing(9)

For these interfaces, the ifSpecific variable in MIB-II [6] has the OBJECT IDENTIFIER value:

dot5    OBJECT IDENTIFIER ::= { experimental 4 }

as defined below πŸ‘‘

4.2. Textual Conventions πŸ“

okay so a new datatype, MacAddress, is introduced here as a textual convention πŸ’… This convention has NO effect on the syntax or the semantics of any managed object. Objects that use it are always encoded using the rules that define their primitive type 🧁 So no changes to the SMI or SNMP are needed to make room for it. It's only adopted for the convenience of readers 🀍

5. Definitions πŸ‘‘

ok the main event 😭 Here's the MIB module itself, character for character:

RFC1231-MIB DEFINITIONS ::= BEGIN

--                 IEEE 802.5 Token Ring MIB

IMPORTS
        experimental
                FROM RFC1155-SMI
        OBJECT-TYPE
                FROM RFC-1212;

--  This MIB Module uses the extended OBJECT-TYPE macro as
--  defined in [9].



dot5    OBJECT IDENTIFIER ::= { experimental 4 }

-- 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
-- defined by IEEE 802.1a, i.e., as if it were transmitted
-- least significant bit first, even though 802.5 (in
-- contrast to other 802.x protocols) requires MAC addresses
-- to be transmitted most significant bit first.
--
-- 16-bit addresses, if needed, are represented by setting
-- their upper 4 octets to all 0's, i.e., AAFF would be
-- represented as 00000000AAFF.



-- The Interface Table

-- This table contains state and parameter information which
-- is specific to 802.5 interfaces.  It is mandatory that
-- systems having 802.5 interfaces implement this table in
-- addition to the generic interfaces table [4,6] and its
-- generic extensions [11].

dot5Table  OBJECT-TYPE
           SYNTAX  SEQUENCE OF Dot5Entry
           ACCESS  not-accessible
           STATUS  mandatory
           DESCRIPTION
                   "This table contains Token Ring interface
                   parameters and state variables, one entry
                   per 802.5 interface."
           ::= { dot5 1 }

dot5Entry  OBJECT-TYPE
           SYNTAX  Dot5Entry
           ACCESS  not-accessible
           STATUS  mandatory
           DESCRIPTION
                   "A list of Token Ring status and parameter
                    values for an 802.5 interface."
           INDEX   { dot5IfIndex }
           ::= { dot5Table 1 }

Dot5Entry
    ::= SEQUENCE {
            dot5IfIndex
                INTEGER,
            dot5Commands
                INTEGER,
            dot5RingStatus
                INTEGER,
            dot5RingState
                INTEGER,
            dot5RingOpenStatus
                INTEGER,
            dot5RingSpeed
                INTEGER,
            dot5UpStream
                MacAddress,
            dot5ActMonParticipate
                INTEGER,
            dot5Functional
                MacAddress
        }

dot5IfIndex  OBJECT-TYPE
           SYNTAX  INTEGER
           ACCESS  read-only
           STATUS  mandatory
           DESCRIPTION
                   "The value of this object identifies the

                    802.5 interface for which this entry
                    contains management information.  The
                    value of this object for a particular
                    interface has the same value as the
                    ifIndex object, defined in [4,6],
                    for the same interface."
           ::= { dot5Entry 1 }
to be continued in part 2 🫢✨

okay so we're picking right back up in the token ring stuff πŸŽ€ and dot5Commands is giving remote control energy πŸ•ΉοΈ. You tell the station to open, reset, or close, and no-op is the chill option that does nothing. Reading it back always gives no-op, periodt πŸ’…

          dot5Commands  OBJECT-TYPE
                     SYNTAX  INTEGER {
                                   no-op(1),
                                   open(2),
                                   reset(3),
                                   close(4)
                             }
                     ACCESS  read-write
                     STATUS  mandatory
                     DESCRIPTION
                             "When this object is set to the value of
                              open(2), the station should go into the
                              open state.  The progress and success of
                              the open is given by the values of the
                              objects dot5RingState and
                              dot5RingOpenStatus.
                                  When this object is set to the value
                              of reset(3), then the station should do
                              a reset.  On a reset, all MIB counters
                              should retain their values, if possible.
                              Other side affects are dependent on the
                              hardware chip set.
                                  When this object is set to the value
                              of close(4), the station should go into
                              the stopped state by removing itself
                              from the ring.
                                  Setting this object to a value of
                              no-op(1) has no effect.
                                  When read, this object always has a
                              value of no-op(1)."
                     ::= { dot5Entry 2 }

dot5RingStatus is the diagnostic vibe check πŸ”. It's a sum of values, one for each condition that's currently happening, so you add up everything that applies. 0 means no problems, and 131072 means no status yet because the open hasn't finished. Before the open is done, this is the value you'll see. It's also the object to watch when the station keeps flickering in and out of the ring 🫢

          dot5RingStatus OBJECT-TYPE
                     SYNTAX  INTEGER
                     ACCESS  read-only
                     STATUS  mandatory
                     DESCRIPTION
                             "The current interface status which can
                             be used to diagnose fluctuating problems
                             that can occur on token rings, after a
                             station has successfully been added to
                             the ring.
                                Before an open is completed, this
                             object has the value for the 'no status'
                             condition.  The dot5RingState and
                             dot5RingOpenStatus objects provide for
                             debugging problems when the station
                             can not even enter the ring.
                                 The object's value is a sum of
                             values, one for each currently applicable
                             condition.  The following values are
                             defined for various conditions:

                                     0 = No Problems detected
                                    32 = Ring Recovery
                                    64 = Single Station
                                   256 = Remove Received
                                   512 = reserved
                                  1024 = Auto-Removal Error
                                  2048 = Lobe Wire Fault
                                  4096 = Transmit Beacon
                                  8192 = Soft Error
                                 16384 = Hard Error
                                 32768 = Signal Loss
                                131072 = no status, open not completed."
                     ::= { dot5Entry 3 }

dot5RingState is the station's entering-or-leaving-the-ring status 🌸. The six options are opened, closed, opening, closing, openFailure, and ringFailure, so you can see if it's mid-entry, mid-exit, or stuck somewhere sad.

          dot5RingState  OBJECT-TYPE
                     SYNTAX  INTEGER {
                                   opened(1),
                                   closed(2),
                                   opening(3),
                                   closing(4),
                                   openFailure(5),
                                   ringFailure(6)
                             }
                     ACCESS  read-only
                     STATUS  mandatory
                     DESCRIPTION
                             "The current interface state with respect
                             to entering or leaving the ring."
                     ::= { dot5Entry 4 }

dot5RingOpenStatus is the story of the station's most recent attempt to get in πŸ’–. It tells you whether it worked, or the reason it flopped. noOpen(1) means no open was tried at all, and open(11) means the last open was successful.

          dot5RingOpenStatus  OBJECT-TYPE
                     SYNTAX  INTEGER {
                                   noOpen(1),     -- no open attempted
                                   badParam(2),
                                   lobeFailed(3),
                                   signalLoss(4),
                                   insertionTimeout(5),
                                   ringFailed(6),
                                   beaconing(7),
                                   duplicateMAC(8),
                                   requestFailed(9),
                                   removeReceived(10),
                                   open(11)      -- last open successful
                             }
                     ACCESS  read-only
                     STATUS  mandatory
                     DESCRIPTION
                             "This object indicates the success, or the
                             reason for failure, of the station's most
                             recent attempt to enter the ring."
                     ::= { dot5Entry 5 }

dot5RingSpeed is the ring's bandwidth πŸ¦‹. It can be unknown, one megabit, four megabit, or sixteen megabit, and it's read-write, so you can set it too.

          dot5RingSpeed  OBJECT-TYPE
                     SYNTAX  INTEGER {
                                   unknown(1),
                                   oneMegabit(2),
                                   fourMegabit(3),
                                   sixteenMegabit(4)
                             }
                     ACCESS  read-write
                     STATUS  mandatory
                     DESCRIPTION
                             "The ring's bandwidth."
                     ::= { dot5Entry 6 }

dot5UpStream gives you the MAC address of the upstream neighbor in the ring πŸ‘‘. It's read-only, so think of it as the station's little gossip source for who's right before it.

          dot5UpStream  OBJECT-TYPE
                     SYNTAX  MacAddress
                     ACCESS  read-only
                     STATUS  mandatory
                     DESCRIPTION
                             "The MAC-address of the up stream neighbor
                              station in the ring."
                     ::= { dot5Entry 7 }

dot5ActMonParticipate is a yes-or-no for joining the active monitor selection process 🌈. true(1) means the interface takes part, and false(2) means it sits it out. Heads up, changing it might not do anything until the interface is opened again, so don't panic if nothing happens right away πŸ™ˆ

          dot5ActMonParticipate OBJECT-TYPE
                     SYNTAX  INTEGER {
                                   true(1),
                                   false(2)
                             }
                     ACCESS  read-write
                     STATUS  mandatory
                     DESCRIPTION
                             "If this object has a value of true(1) then
                             this interface will participate in the
                             active monitor selection process.  If the
                             value is false(2) then it will not.
                             Setting this object might not have an
                             effect until the next time the interface
                             is opened."
                     ::= { dot5Entry 8 }

dot5Functional is a bit mask of all the Token Ring functional addresses this interface will accept frames for πŸ’œ. It's read-write, so you can tune which functional addresses it listens to.

          dot5Functional OBJECT-TYPE
                     SYNTAX  MacAddress
                     ACCESS  read-write
                     STATUS  mandatory
                     DESCRIPTION
                             "The bit mask of all Token Ring functional
                             addresses for which this interface will
                             accept frames."
                     ::= { dot5Entry 9 }



          --   The Statistics Table

          -- This table contains statistics and error counter which are
          -- specific to 802.5 interfaces.  It is mandatory that systems
          -- having 802.5 interfaces implement this table.

          dot5StatsTable  OBJECT-TYPE
                     SYNTAX  SEQUENCE OF Dot5StatsEntry
                     ACCESS  not-accessible
                     STATUS  mandatory
                     DESCRIPTION
                             "A table containing Token Ring statistics,
                             one entry per 802.5 interface.
                                 All the statistics are defined using
                             the syntax Counter as 32-bit wrap around
                             counters.  Thus, if an interface's
                             hardware maintains these statistics in
                             16-bit counters, then the agent must read
                             the hardware's counters frequently enough
                             to prevent loss of significance, in order
                             to maintain 32-bit counters in software."
                     ::= { dot5 2 }

          dot5StatsEntry  OBJECT-TYPE
                     SYNTAX  Dot5StatsEntry
                     ACCESS  not-accessible
                     STATUS  mandatory
                     DESCRIPTION

                             "An entry contains the 802.5 statistics
                              for a particular interface."
                     INDEX   { dot5StatsIfIndex }
                     ::= { dot5StatsTable 1 }

The statistics table is the error-counter hall of fame πŸ“Š. It's mandatory for any system with 802.5 interfaces, no cap 🧚 The counters are 32-bit wrap-arounds, so if the hardware only has 16-bit counters, the agent has to keep reading them often enough to avoid losing significance while it builds the 32-bit versions in software. One row goes in per interface, and dot5StatsIfIndex is the key.

Dot5StatsEntry
    ::= SEQUENCE {
            dot5StatsIfIndex
                INTEGER,
            dot5StatsLineErrors
                Counter,
            dot5StatsBurstErrors
                Counter,
            dot5StatsACErrors
                Counter,
            dot5StatsAbortTransErrors
                Counter,
            dot5StatsInternalErrors
                Counter,
            dot5StatsLostFrameErrors
                Counter,
            dot5StatsReceiveCongestions
                Counter,
            dot5StatsFrameCopiedErrors
                Counter,
            dot5StatsTokenErrors
                Counter,
            dot5StatsSoftErrors
                Counter,
            dot5StatsHardErrors
                Counter,
            dot5StatsSignalLoss
                Counter,
            dot5StatsTransmitBeacons
                Counter,
            dot5StatsRecoverys
                Counter,
            dot5StatsLobeWires
                Counter,
            dot5StatsRemoves
                Counter,
            dot5StatsSingles
                Counter,
            dot5StatsFreqErrors
                Counter
        }

dot5StatsIfIndex is the row's ID card πŸŽ€ It holds the same value as the ifIndex for the same interface, which is defined in [4,6].

          dot5StatsIfIndex  OBJECT-TYPE
                     SYNTAX  INTEGER
                     ACCESS  read-only
                     STATUS  mandatory
                     DESCRIPTION
                             "The value of this object identifies the
                             802.5 interface for which this entry
                             contains management information.  The
                             value of this object for a particular
                             interface has the same value as the
                             ifIndex object, defined in [4,6], for
                             the same interface."
                     ::= { dot5StatsEntry 1 }

Okay bestie, this part is all about the Token Ring error and event counters, the dot5Stats ones that tally up everything that goes sideways on the ring πŸ§΅πŸ’€. We're also starting the timer table at the end πŸ•°οΈβœ¨

dot5StatsLineErrors is the counter for when a frame or token gets copied or repeated by a station, the E bit is zero, and one of two things happens: there's a J or K non-data bit between SD and ED, or there's an FCS error in the frame 🫠

          dot5StatsLineErrors OBJECT-TYPE
                     SYNTAX  Counter
                     ACCESS  read-only
                     STATUS  mandatory
                     DESCRIPTION
                             "This counter is incremented when a frame
                             or token is copied or repeated by a
                             station, the E bit is zero in the frame
                             or token and one of the following
                             conditions exists: 1) there is a
                             non-data bit (J or K bit) between the SD
                             and the ED of the frame or token, or
                             2) there is an FCS error in the frame."
                     ::= { dot5StatsEntry 2 }

dot5StatsBurstErrors ticks up when a station notices no transitions for five half-bit timers. That's the burst-five error, and it's giving signal drama 🌊

          dot5StatsBurstErrors OBJECT-TYPE
                     SYNTAX  Counter
                     ACCESS  read-only
                     STATUS  mandatory
                     DESCRIPTION
                             "This counter is incremented when a station
                             detects the absence of transitions for five
                             half-bit timers (burst-five error)."
                     ::= { dot5StatsEntry 3 }

dot5StatsACErrors is kind of a "this station can't set its AC bits" confession πŸ™ˆ. It goes up when a station gets an AMP or SMP frame where A and C are both 0, and then gets another SMP frame with A and C both 0 without an AMP frame coming first 😭

          dot5StatsACErrors OBJECT-TYPE
                     SYNTAX  Counter
                     ACCESS  read-only
                     STATUS  mandatory
                     DESCRIPTION
                             "This counter is incremented when a station
                             receives an AMP or SMP frame in which A is
                             equal to C is equal to 0, and then receives
                             another SMP frame with A is equal to C is
                             equal to 0 without first receiving an AMP
                             frame. It denotes a station that cannot set
                             the AC bits properly."
                     ::= { dot5StatsEntry 4 }

dot5StatsAbortTransErrors counts the times a station sends an abort delimiter while it's already transmitting. Honestly, a station doing two things at once and getting caught πŸ’…

          dot5StatsAbortTransErrors OBJECT-TYPE
                     SYNTAX  Counter
                     ACCESS  read-only
                     STATUS  mandatory
                     DESCRIPTION
                             "This counter is incremented when a station
                             transmits an abort delimiter while
                             transmitting."
                     ::= { dot5StatsEntry 5 }

dot5StatsInternalErrors goes up whenever a station recognizes an internal error. Simple, but it still hits different πŸ”§

          dot5StatsInternalErrors OBJECT-TYPE
                     SYNTAX  Counter
                     ACCESS  read-only
                     STATUS  mandatory
                     DESCRIPTION
                             "This counter is incremented when a station
                             recognizes an internal error."
                     ::= { dot5StatsEntry 6 }

dot5StatsLostFrameErrors is the TRR timer story 😩. It increments when a station is transmitting and its TRR timer expires. That happens when a transmitting station in strip mode doesn't get the trailer of its frame back before the TRR timer goes off. Major "I left the room and the timer didn't wait" energy ⏰

          dot5StatsLostFrameErrors OBJECT-TYPE
                     SYNTAX  Counter
                     ACCESS  read-only
                     STATUS  mandatory
                     DESCRIPTION
                             "This counter is incremented when a station
                             is transmitting and its TRR timer expires.
                             This condition denotes a condition where a
                             transmitting station in strip mode does not
                             receive the trailer of the frame before the
                             TRR timer goes off."
                     ::= { dot5StatsEntry 7 }

dot5StatsReceiveCongestions tracks the moment a station gets a frame addressed to its own specific address but has no buffer space left to hold it. That's a congested station, bestie, and it needs a little breather πŸ‘

          dot5StatsReceiveCongestions OBJECT-TYPE
                     SYNTAX  Counter
                     ACCESS  read-only
                     STATUS  mandatory
                     DESCRIPTION
                             "This counter is incremented when a station
                             recognizes a frame addressed to its
                             specific address, but has no available
                             buffer space indicating that the station
                             is congested."
                     ::= { dot5StatsEntry 8 }

dot5StatsFrameCopiedErrors is for frames addressed to a station's specific address where the FS field A bits are set to 1. That signals a possible line hit or a duplicate address, so someone's got a twin on the ring πŸ‘―β€β™€οΈ

          dot5StatsFrameCopiedErrors OBJECT-TYPE
                     SYNTAX  Counter
                     ACCESS  read-only
                     STATUS  mandatory
                     DESCRIPTION
                             "This counter is incremented when a station
                             recognizes a frame addressed to its
                             specific address and detects that the FS
                             field A bits are set to 1 indicating a
                             possible line hit or duplicate address."
                     ::= { dot5StatsEntry 9 }

dot5StatsTokenErrors goes up when a station acting as the active monitor recognizes an error condition that needs a token transmitted. The active monitor is the one keeping the whole ring in check, so this is its main character moment πŸ‘‘

          dot5StatsTokenErrors OBJECT-TYPE
                     SYNTAX  Counter
                     ACCESS  read-only
                     STATUS  mandatory
                     DESCRIPTION
                             "This counter is incremented when a station
                             acting as the active monitor recognizes an
                             error condition that needs a token
                             transmitted."
                     ::= { dot5StatsEntry 10 }

dot5StatsSoftErrors is the count of Soft Errors this interface has detected. It lines up exactly with the number of Report Error MAC frames it has transmitted. Soft Errors are the ones the MAC layer protocols can recover from on their own, so they're the "oops, I've got this" errors 🩹

          dot5StatsSoftErrors OBJECT-TYPE
                     SYNTAX  Counter
                     ACCESS  read-only
                     STATUS  mandatory
                     DESCRIPTION
                             "The number of Soft Errors the interface
                             has detected. It directly corresponds to
                             the number of Report Error MAC frames
                             that this interface has transmitted.
                             Soft Errors are those which are
                             recoverable by the MAC layer protocols."
                     ::= { dot5StatsEntry 11 }

dot5StatsHardErrors is the serious one 🚨. It counts how many times the interface has detected an immediately recoverable fatal error, which is the same as the number of times it's either transmitting or receiving beacon MAC frames. Fatal but recoverable is a whole mood, honestly 😭

          dot5StatsHardErrors OBJECT-TYPE
                     SYNTAX  Counter
                     ACCESS  read-only
                     STATUS  mandatory
                     DESCRIPTION
                             "The number of times this interface has
                             detected an immediately recoverable
                             fatal error.  It denotes the number of
                             times this interface is either
                             transmitting or receiving beacon MAC
                             frames."
                     ::= { dot5StatsEntry 12 }

dot5StatsSignalLoss counts the times the interface has detected a loss of signal from the ring. The ring went quiet on it πŸ“‘

          dot5StatsSignalLoss OBJECT-TYPE
                     SYNTAX  Counter
                     ACCESS  read-only
                     STATUS  mandatory
                     DESCRIPTION
                             "The number of times this interface has
                             detected the loss of signal condition from
                             the ring."
                     ::= { dot5StatsEntry 13 }

dot5StatsTransmitBeacons is simple: it counts how many times this interface has transmitted a beacon frame πŸ“£

          dot5StatsTransmitBeacons OBJECT-TYPE
                     SYNTAX  Counter
                     ACCESS  read-only
                     STATUS  mandatory
                     DESCRIPTION
                             "The number of times this interface has
                             transmitted a beacon frame."
                     ::= { dot5StatsEntry 14 }

dot5StatsRecoverys counts Claim Token MAC frames that get received or transmitted after the interface has received a Ring Purge MAC frame. Each one is a sign that the ring got purged and is being brought back to normal operation. Glow-up arc, bestie 🌸

          dot5StatsRecoverys OBJECT-TYPE
                     SYNTAX  Counter
                     ACCESS  read-only
                     STATUS  mandatory
                     DESCRIPTION
                             "The number of Claim Token MAC frames
                             received or transmitted after the interface
                             has received a Ring Purge MAC frame.  This
                             counter signifies the number of times the
                             ring has been purged and is being recovered
                             back into a normal operating state."
                     ::= { dot5StatsEntry 15 }

dot5StatsLobeWires goes up when the interface detects an open or short circuit in the lobe data path. When that happens the adapter gets closed, and dot5RingState shows that condition πŸ”Œ

          dot5StatsLobeWires OBJECT-TYPE
                     SYNTAX  Counter
                     ACCESS  read-only
                     STATUS  mandatory
                     DESCRIPTION
                             "The number of times the interface has
                             detected an open or short circuit in the
                             lobe data path.  The adapter will be closed
                             and dot5RingState will signify this
                             condition."
                     ::= { dot5StatsEntry 16 }

dot5StatsRemoves counts the times the interface has received a Remove Ring Station MAC frame request. Once that frame arrives, the interface enters the close state and dot5RingState shows it. Being removed from the party, iykyk πŸšͺ

          dot5StatsRemoves OBJECT-TYPE
                     SYNTAX  Counter
                     ACCESS  read-only
                     STATUS  mandatory
                     DESCRIPTION
                             "The number of times the interface has
                             received a Remove Ring Station MAC frame
                             request.  When this frame is received
                             the interface will enter the close state
                             and dot5RingState will signify this
                             condition."
                     ::= { dot5StatsEntry 17 }

dot5StatsSingles counts the times the interface has sensed that it's the only station on the ring. That happens if it's the first one up on a ring, or if there's a hardware problem. Being alone is either a vibe or a crisis πŸ₯²

          dot5StatsSingles OBJECT-TYPE
                     SYNTAX  Counter
                     ACCESS  read-only
                     STATUS  mandatory
                     DESCRIPTION
                             "The number of times the interface has
                             sensed that it is the only station on the
                             ring.  This will happen if the interface
                             is the first one up on a ring, or if
                             there is a hardware problem."
                     ::= { dot5StatsEntry 18 }

dot5StatsFreqErrors is the optional one 🌈. It counts the times the interface has detected that the frequency of the incoming signal is off from the expected frequency by more than the IEEE 802.5 standard allows, which you can read about in chapter 7 of [10]. It's marked optional, so an implementation can skip it and still be totally valid ✨

          dot5StatsFreqErrors OBJECT-TYPE
                     SYNTAX  Counter
                     ACCESS  read-only
                     STATUS  optional
                     DESCRIPTION
                             "The number of times the interface has
                             detected that the frequency of the
                             incoming signal differs from the expected
                             frequency by more than that specified by
                             the IEEE 802.5 standard, see chapter 7
                             in [10]."
                     ::= { dot5StatsEntry 19 }

Time for the timer table πŸ•°οΈπŸŒˆ This group holds the values of the timers defined in [10] for 802.5 interfaces. Systems with 802.5 interfaces may implement this group, and the text says that implementing it is optional for them 🫢

          -- The Timer Table

          -- This group contains the values of the timers defined in
          -- [10] for 802.5 interfaces.  It is optional that systems
          -- having 802.5 interfaces implement this group.

          dot5TimerTable  OBJECT-TYPE
                     SYNTAX  SEQUENCE OF Dot5TimerEntry
                     ACCESS  not-accessible
                     STATUS  mandatory
                     DESCRIPTION
                             "This table contains Token Ring interface
                             timer values, one entry per 802.5
                             interface."
                     ::= { dot5 5 }

          dot5TimerEntry  OBJECT-TYPE
                     SYNTAX  Dot5TimerEntry
                     ACCESS  not-accessible
                     STATUS  mandatory
                     DESCRIPTION
                             "A list of Token Ring timer values for an
                             802.5 interface."
                     INDEX   { dot5TimerIfIndex }
                     ::= { dot5TimerTable 1 }

okay so we're back in the MIB, and the first thing on the menu is the timer table row shape πŸŽ€ each one of these is an INTEGER, and the rest of this section is basically the ring's timers getting their own little labels πŸ’…

          Dot5TimerEntry
              ::= SEQUENCE {
                     dot5TimerIfIndex
                         INTEGER,
                     dot5TimerReturnRepeat
                         INTEGER,
                     dot5TimerHolding
                         INTEGER,
                     dot5TimerQueuePDU
                         INTEGER,
                     dot5TimerValidTransmit
                         INTEGER,
                     dot5TimerNoToken
                         INTEGER,
                     dot5TimerActiveMon
                         INTEGER,
                     dot5TimerStandbyMon
                         INTEGER,
                     dot5TimerErrorReport
                         INTEGER,
                     dot5TimerBeaconTransmit
                         INTEGER,
                     dot5TimerBeaconReceive
                         INTEGER
                 }

ok first up is dot5TimerIfIndex πŸ¦‹ it's the bestie key that lines the row up with the interface. it has the same value as the ifIndex object from [4,6] for that same interface, so it's giving matchmaker energy πŸ’–

          dot5TimerIfIndex  OBJECT-TYPE
                     SYNTAX  INTEGER
                     ACCESS  read-only
                     STATUS  mandatory
                     DESCRIPTION
                             "The value of this object identifies the
                              802.5 interface for which this entry
                              contains timer values.  The value of
                              this object for a particular interface
                              has the same value as the ifIndex
                              object, defined in [4,6], for the same
                              interface."
                     ::= { dot5TimerEntry 1 }

next is dot5TimerReturnRepeat ⏱️ this one is the timeout that makes sure the interface gets back to Repeat State, counted in units of 100 micro-seconds 🌸 it should be bigger than the maximum ring latency, and the doc also encourages implementors to offer read-write access if that's possible and useful for their system, while keeping the dangers of writable timers in mind πŸ™ˆ

          dot5TimerReturnRepeat  OBJECT-TYPE
                     SYNTAX  INTEGER
                     ACCESS  read-only
                     STATUS  mandatory
                     DESCRIPTION
                             "The time-out value used to ensure the
                             interface will return to Repeat State, in
                             units of 100 micro-seconds.  The value
                             should be greater than the maximum ring
                             latency.
                                 Implementors are encouraged to provide
                             read-write access to this object if that is
                             possible/useful in their system, but giving
                             due consideration to the dangers of
                             write-able timers."
                     ::= { dot5TimerEntry 2 }

dot5TimerHolding is next πŸ“ it's the maximum amount of time a station is allowed to keep transmitting frames after it grabs a token, measured in 100 micro-second units. same read-write encouragement and same "be careful with writable timers" warning as the last one πŸ‘‘

          dot5TimerHolding  OBJECT-TYPE
                     SYNTAX  INTEGER
                     ACCESS  read-only
                     STATUS  mandatory
                     DESCRIPTION
                             "Maximum period of time a station is
                             permitted to transmit frames after capturing
                             a token, in units of 100 micro-seconds.
                                 Implementors are encouraged to provide
                             read-write access to this object if that is
                             possible/useful in their system, but giving
                             due consideration to the dangers of
                             write-able timers."
                     ::= { dot5TimerEntry 3 }

dot5TimerQueuePDU 🧚 this is the timeout for enqueuing an SMP PDU after an AMP or SMP frame shows up with the A and C bits both equal to 0. again in 100 micro-second units, and the same read-write note sits at the bottom. (there's a little blank line in the middle of the note, so don't be confused by that, it's just how the doc is formatted πŸ™ƒ)

          dot5TimerQueuePDU  OBJECT-TYPE
                     SYNTAX  INTEGER
                     ACCESS  read-only
                     STATUS  mandatory
                     DESCRIPTION
                             "The time-out value for enqueuing of an SMP
                             PDU after reception of an AMP or SMP
                             frame in which the A and C bits were
                             equal to 0, in units of 100
                             micro-seconds.
                                 Implementors are encouraged to provide

                             read-write access to this object if that is
                             possible/useful in their system, but giving
                             due consideration to the dangers of
                             write-able timers."
                     ::= { dot5TimerEntry 4 }

dot5TimerValidTransmit πŸ’œ this is the active monitor's timeout for spotting the absence of valid transmissions, in 100 micro-second units. the same read-write encouragement and warning come along for the ride ✨

          dot5TimerValidTransmit OBJECT-TYPE
                     SYNTAX  INTEGER
                     ACCESS  read-only
                     STATUS  mandatory
                     DESCRIPTION
                             "The time-out value used by the active
                             monitor to detect the absence of valid
                             transmissions, in units of 100
                             micro-seconds.
                                 Implementors are encouraged to provide
                             read-write access to this object if that is
                             possible/useful in their system, but giving
                             due consideration to the dangers of
                             write-able timers."
                     ::= { dot5TimerEntry 5 }

dot5TimerNoToken is the one that helps the ring recover from various error situations, and it's a whole vibe 🌈 the doc says that if N is the maximum number of stations on the ring, this timer is normally dot5TimerReturnRepeat + N*dot5TimerHolding. it also cites [9] for the error-recovery stuff, so that's where you'd go for the deeper dive πŸ“š

          dot5TimerNoToken  OBJECT-TYPE
                     SYNTAX  INTEGER
                     ACCESS  read-only
                     STATUS  mandatory
                     DESCRIPTION
                             "The time-out value used to recover from
                             various-related error situations [9].
                             If N is the maximum number of stations on
                             the ring, the value of this timer is
                             normally:
                             dot5TimerReturnRepeat + N*dot5TimerHolding.
                                 Implementors are encouraged to provide
                             read-write access to this object if that is
                             possible/useful in their system, but giving
                             due consideration to the dangers of
                             write-able timers."
                     ::= { dot5TimerEntry 6 }

dot5TimerActiveMon πŸ”₯ this is the active monitor's timeout for stimulating the enqueuing of an AMP PDU for transmission, in 100 micro-second units. read-write encouragement + writable-timer warning, as usual 🫢

          dot5TimerActiveMon  OBJECT-TYPE
                     SYNTAX  INTEGER
                     ACCESS  read-only
                     STATUS  mandatory
                     DESCRIPTION
                             "The time-out value used by the active
                             monitor to stimulate the enqueuing of an
                             AMP PDU for transmission, in units of
                             100 micro-seconds.
                                 Implementors are encouraged to provide
                             read-write access to this object if that is
                             possible/useful in their system, but giving
                             due consideration to the dangers of
                             write-able timers."
                     ::= { dot5TimerEntry 7 }

dot5TimerStandbyMon πŸŒ™ this one belongs to the stand-by monitors. it makes sure there's an active monitor on the ring and helps detect a continuous stream of tokens, measured in 100 micro-second units. same deal with the read-write note ✨

          dot5TimerStandbyMon  OBJECT-TYPE
                     SYNTAX  INTEGER
                     ACCESS  read-only
                     STATUS  mandatory
                     DESCRIPTION
                             "The time-out value used by the stand-by
                             monitors to ensure that there is an active
                             monitor on the ring and to detect a
                             continuous stream of tokens, in units of
                             100 micro-seconds.
                                 Implementors are encouraged to provide
                             read-write access to this object if that is
                             possible/useful in their system, but giving
                             due consideration to the dangers of
                             write-able timers."
                     ::= { dot5TimerEntry 8 }

dot5TimerErrorReport πŸ“£ this is the timeout that decides how often a station has to send a Report Error MAC frame to report its error counters, in 100 micro-second units. read-write note, same as always πŸ’…

          dot5TimerErrorReport  OBJECT-TYPE
                     SYNTAX  INTEGER
                     ACCESS  read-only
                     STATUS  mandatory
                     DESCRIPTION
                             "The time-out value which determines how
                             often a station shall send a Report Error
                             MAC frame to report its error counters,
                             in units of 100 micro-seconds.
                                 Implementors are encouraged to provide
                             read-write access to this object if that is
                             possible/useful in their system, but giving
                             due consideration to the dangers of
                             write-able timers."
                     ::= { dot5TimerEntry 9 }

dot5TimerBeaconTransmit 🚨 this one covers how long a station stays in the state of transmitting Beacon frames before it enters the Bypass state, again in 100 micro-second units. the read-write encouragement and the warning are still here too πŸ₯Ή

          dot5TimerBeaconTransmit  OBJECT-TYPE
                     SYNTAX  INTEGER
                     ACCESS  read-only
                     STATUS  mandatory
                     DESCRIPTION
                             "The time-out value which determines how
                             long a station shall remain in the state
                             of transmitting Beacon frames before
                             entering the Bypass state, in units of
                             100 micro-seconds.
                                 Implementors are encouraged to provide
                             read-write access to this object if that is
                             possible/useful in their system, but giving
                             due consideration to the dangers of
                             write-able timers."
                     ::= { dot5TimerEntry 10 }

last timer in the row is dot5TimerBeaconReceive πŸ¦‹ this is how long a station keeps receiving Beacon frames from its downstream neighbor before it enters the Bypass state, in 100 micro-second units. and yep, the read-write note is back for one more round πŸŽ€

          dot5TimerBeaconReceive  OBJECT-TYPE
                     SYNTAX  INTEGER
                     ACCESS  read-only
                     STATUS  mandatory
                     DESCRIPTION
                             "The time-out value which determines how
                             long a station shall receive Beacon
                             frames from its downstream neighbor
                             before entering the Bypass state, in
                             units of 100 micro-seconds.
                                 Implementors are encouraged to provide
                             read-write access to this object if that is
                             possible/useful in their system, but giving
                             due consideration to the dangers of
                             write-able timers."
                     ::= { dot5TimerEntry 11 }


          --                      802.5 Interface Tests

          dot5Tests         OBJECT IDENTIFIER ::= { dot5 3 }

          -- The extensions to the interfaces table proposed in [11]
          -- define a table object, ifExtnsTestTable, through which a
          -- network manager can instruct an agent to test an interface
          -- for various faults.  A test to be performed is identified
          -- (as the value of ifExtnsTestType) via an OBJECT IDENTIFIER.
          --
          -- The Full-Duplex Loop Back Test is a common test, defined
          -- in [11] as:
          --
          --    testFullDuplexLoopBack
          --
          -- Invoking this test on a 802.5 interface causes the
          -- interface to check the path from memory through the
          -- chip set's internal logic and back to memory, thus
          -- checking the proper functioning of the systems's
          -- interface to the chip set.

          -- The Insert Function test is defined by:

          testInsertFunc    OBJECT IDENTIFIER ::= { dot5Tests 1 }

          -- Invoking this test causes the station to test the insert
          -- ring logic of the hardware if the station's lobe media
          -- cable is connected to a wiring concentrator.  Note that
          -- this command inserts the station into the network, and
          -- thus, could cause problems if the station is connected
          -- to a operational network.

          --                 802.5 Hardware Chip Sets

          dot5ChipSets   OBJECT IDENTIFIER ::= { dot5 4 }
          -- The extensions to the interfaces table proposed in [11]
          -- define an object, ifExtnsChipSet, with the syntax of
          -- OBJECT IDENTIFIER, to identify the hardware chip set in
          -- use by an interface.  That definition specifies just
          -- one applicable object identifier:
          --
          --    unknownChipSet
          --
          -- for use as the value of ifExtnsChipSet when the specific
          -- chip set is unknown.
          --
          -- This MIB defines the following for use as values of
          -- ifExtnsChipSet:

             -- IBM 16/4 Mb/s
          chipSetIBM16       OBJECT IDENTIFIER ::= { dot5ChipSets 1 }

             -- TI 4Mb/s
          chipSetTItms380    OBJECT IDENTIFIER ::= { dot5ChipSets 2 }

             -- TI 16/4 Mb/s
          chipSetTItms380c16 OBJECT IDENTIFIER ::= { dot5ChipSets 3 }

          END

6. Acknowledgements 🫢

Okay bestie, this whole doc was cooked up under the IETF's Transmission Working Group πŸ¦‹, and these three legends gave comments that got acknowledged πŸ’–:

  • Tom Benkart, Advanced Computer Communications
  • Stan Froyd, Advanced Computer Communications
  • Marshall T. Rose, Performance Systems International, Inc.

7. References πŸ“š

Here's the full reading list, every single source, no cap πŸ’…:

  • [1] Cerf, V., "IAB Recommendations for the Development of Internet Network Management Standards", RFC 1052, NRI, April 1988.
  • [2] Cerf, V., "Report of the Second Ad Hoc Network Management Review Group", RFC 1109, NRI, August 1989.
  • [3] Rose M., and K. McCloghrie, "Structure and Identification of Management Information for TCP/IP-based internets", RFC 1155, Performance Systems International, Hughes LAN Systems, May 1990.
  • [4] McCloghrie K., and M. Rose, "Management Information Base for Network Management of TCP/IP-based internets", RFC 1156, Hughes LAN Systems, Performance Systems International, May 1990.
  • [5] Case, J., Fedor, M., Schoffstall, M., and J. Davin, "Simple Network Management Protocol (SNMP), RFC 1157, SNMP Research, Performance Systems International, Performance Systems International, MIT Laboratory for Computer Science, May 1990.
  • [6] McCloghrie K., and M. Rose, Editors, "Management Information Base for Network Management of TCP/IP-based internets", RFC 1213, Performance Systems International, March 1991.
  • [7] Information processing systems - Open Systems Interconnection - Specification of Abstract Syntax Notation One (ASN.1), International Organization for Standardization, International Standard 8824, December 1987.
  • [8] Information processing systems - Open Systems Interconnection - Specification of Basic Encoding Rules for Abstract Notation One (ASN.1), International Organization for Standardization, International Standard 8825, December 1987.
  • [9] Rose, M., and K. McCloghrie, Editors, "Concise MIB Definitions", RFC 1212, Performance Systems International, Hughes LAN Systems, March 1991.
  • [10] Token Ring Access Method and Physical Layer Specifications, Institute of Electrical and Electronic Engineers, IEEE Standard 802.5-1989, 1989.
  • [11] McCloghrie, K., Editor, "Extensions to the Generic-Interface MIB", RFC 1229, Hughes LAN Systems, May 1991.

8. Security Considerations πŸ”

Okay, real talk, this section is short but it's a big deal. Security issues are not discussed in this memo. πŸ’€ So if you came here looking for the security tea, it's not in this doc, bestie. Go look somewhere else for that. πŸ™ˆ

9. Authors' Addresses πŸ’Œ

Meet the squad behind the doc ✨:

Keith McCloghrie, Hughes LAN Systems, Inc., 1225 Charleston Road, Mountain View, CA 94043. Phone: (415) 966-7934. EMail: kzm@hls.com

Richard Fox, Synoptics, Inc., 4401 Great America Pkwy, PO Box 58185, Santa Clara, Cal. 95052. Phone: (408) 764-1372. EMail: rfox@synoptics.com

Eric Decker, cisco Systems, Inc., 1525 O'Brien Dr., Menlo Park, CA 94025. Phone: (415) 688-8241. EMail: cire@cisco.com 🌈

πŸ“¦ where this page comes from