RFC 2662

Definitions of Managed Objects for the ADSL Lines

πŸ“… published August 1999, from ietf

RFC 2662: Definitions of Managed Objects for the ADSL Lines πŸ¦‹

Okay bestie, let's get into it! πŸ’– This one is from August 1999 and it's a Standards Track doc from the Network Working Group. The authors are G. Bathrick (AG Communication Systems) and F. Ly (Copper Mountain Networks). The title block doesn't list anything it obsoletes or updates, so it's just vibing on its own. 🌸

Status of This Memo πŸ“œ

This doc specifies an Internet standards track protocol for the Internet community, and it's asking for discussion and suggestions for improvements. 🫢 For the current standardization state and status of this protocol, check the "Internet Official Protocol Standards" (STD 1). Distribution of this memo is unlimited. ✨

Copyright (C) The Internet Society (1999). All Rights Reserved. πŸ’œ

Table of Contents πŸ“š

    1.  Abstract  ..............................................   1
    2.  The SNMP Network Management Framework  .................   2
    3.  Object Definitions .....................................   3
    4.  Relationship of the ADSL LINE MIB with standard MIBs ...   3
    5.  Conventions used in the MIB ............................   7
    6.  Conformance and Compliance .............................  17
    7.  Definitions ............................................  17
    8.  Acknowledgments ........................................ 110
    9.  References ............................................. 111
   10.  Security Considerations ................................ 113
   11.  Intellectual Property Notice ........................... 114
   12.  Authors' Addresses ..................................... 114
   13.  Full Copyright Statement ............................... 115

1. Abstract 🌈

Okay so this doc defines a standard SNMP MIB for ADSL lines, and it's built on the ADSL Forum standard data model [9]. πŸ’… The ADSL standard calls ATU-C and ATU-R the two sides of the ADSL line. This MIB covers both the ATU-C and ATU-R agent's perspectives, and each instance defined in the MIB represents a single ADSL line. ✨

It should be noted that the ADSL Forum Network Management Working Group gave input on the content of this document. πŸ™ˆ Check out the Acknowledgement Section for a list of the individuals who made this doc possible. 🫢

2. The SNMP Network Management Framework 🧚

The SNMP Management Framework currently has five major components: πŸ”₯

  • An overall architecture, described in RFC 2571 [13].
  • Mechanisms for describing and naming objects and events for the purpose of management. The first version of this Structure of Management Information (SMI) is called SMIv1 and it's described in STD 16, RFC 1155 [14], STD 16, RFC 1212 [15] and RFC 1215 [16]. The second version, SMIv2, is described in STD 58, RFC 2578 [1], STD 58, RFC 2579 [2] and STD 58, RFC 2580 [17]. πŸ‘‘
  • Message protocols for transferring management information. The first version of the SNMP message protocol is SNMPv1, described in STD 15, RFC 1157 [7]. A second version, SNMPv2c, which is not an Internet standards track protocol, is described in RFC 1901 [18] and RFC 1906 [19]. The third version, SNMPv3, is described in RFC 1906 [19], RFC 2572 [20] and RFC 2574 [21]. πŸ“
  • Protocol operations for accessing management information. The first set of protocol operations and associated PDU formats is described in STD 15, RFC 1157 [7]. A second set of protocol operations and associated PDU formats is described in RFC 1905 [8]. πŸ’œ
  • A set of fundamental applications described in RFC 2573 [22], plus the view-based access control mechanism described in RFC 2575 [23]. πŸ¦‹

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

3. Object Definitions πŸŽ€

Managed objects are accessed via a virtual information store, termed the Management Information Base or MIB. Objects in the MIB are defined using the extended subset of Abstract Syntax Notation One (ASN.1) defined in the SMI. In particular, each object type is named by an OBJECT IDENTIFIER, an administratively assigned name. The object type together with an object instance serves to uniquely identify a specific instantiation of the object. For human convenience, we often use a textual string, termed the descriptor, to also refer to the object type. 🧠

4. Relationship of the ADSL LINE MIB with standard MIBs πŸ”—

This section outlines the relationship of the ADSL Line MIB with other MIBs described in RFCs, and with their various degrees of "standardization". ✨

4.1. Use of the IfTable πŸ› οΈ

The ADSL LINE MIB specifies the detailed attributes of a data interface, so it needs to integrate with IF-MIB [5]. The IANA has assigned the following ifType(s) relative to ADSL:

    IANAifType ::= TEXTUAL-CONVENTION

        . . .

    SYNTAX INTEGER {

             . . .

        adsl(94),    -- Asymmetric Digital Subscriber Loop

             . . .

        adslInterleave(124),    -- ADSL Interleaved Channel
        adslFast(125),          -- ADSL Fast Channel

             . . .          }

Interfaces of each of these types are modeled by this doc. Most MIB tables in this doc represent information for one of these interface types and are indexed by ifIndex. The remaining ones are profile tables, which may be accessed by the profileIndex. This is explained in more detail in section 5.4 Profiles. πŸ’–

4.1.1. ADSL Interface Types πŸ’«

As shown below, three ADSL interface types are defined in this doc: physical, interleaved channel, and fast channel. The physical interface represents the characteristics of the physical media associated with both the ATUC and ATUR. The interleaved and fast channel interfaces represent the characteristics of the two types of ADSL channels. 🌈

For each ADSL Line, a physical interface always exists. Depending on which ADSL operational configuration is present (as listed in Figure 5), the channel interfaces (fast or interleaved) may or may not exist. πŸ€·β€β™€οΈ

            ______                      ______
           |      |____________________|      |
           | ATUC |                    | ATUR |
           |      |____________________|      |
           |______|                    |______|

              | <----- physical --------> |

              | <--- fast channel ------> |

              | <- interleaved channel -> |

                   Figure 1: ADSL Model

4.1.2. Use of IF-MIB (Interface MIB RFC 2233) [5] πŸ“‹

The following attributes are part of the required ifGeneralInformationGroup object group specified in RFC 2233 [5], and they're not duplicated in the ADSL MIB. Keep in mind that these objects apply to the agent's view of the line. πŸ‘€

           ifTable Object    Use for ADSL
==================================================================
           ifIndex           Interface index.

           ifDescr           See interfaces MIB [5]

           ifType            physical    - adsl(94)
                             fast        - adslFast(125)
                             interleaved - adslInterleave(124)

           ifSpeed           Transmit rate from the perspective
                             of the agent.

                             physical      - line rate
                             fast          - channel rate
                             interleaved   - channel rate

           ifPhysAddress     This object should have an octet string
                             with zero length.

           ifAdminStatus     See interfaces MIB [5]

           ifOperStatus      See interfaces MIB [5]

                             Supplemented by adslAturCurrStatus and
                             adslAturCurrStatus

           ifLastChange      See interfaces MIB [5]

           ifName            See interfaces MIB [5]

           ifLinkUpDownTrapEnable   See interfaces MIB [5]

                             Default set as follows:

                             physical      - enabled(1)
                             fast          - disabled(2)
                             interleaved   - disabled(2)

           ifHighSpeed       Speed of line in Mega-bits per second
                             (ifSpeed/1,000,000)

           ifConnectorPresent See interfaces MIB [5]

                             Default set as follows:

                             physical      - true(1)
                             fast          - false(2)
                             interleaved   - false(2)

           ifAlias           See interfaces MIB [5]

           ifTableLastChange See interfaces MIB [5]

==================================================================

     Figure 2: Use of ifTable Objects: ifGeneralInformationGroup

Use of the ifStackTable to associate the entries for physical, fast, and interleaved channels, and higher layers (e.g., ATM), is shown below in Figure 3. Use of ifStackTable is necessary, because configuration information is stored in profile tables associated with the physical-layer ifEntry only. The channels' ifEntrys need the ifStackTable to find their associated physical-layer entry and thus their configuration parameters. (See Profile section, 5.4). 🧁

            ______       (ifEntry=j)        ______
           |      |      fast channel      |      |
           |      |________________________|      |
           |      |        and/or          |      |
           |      |                        |      |
           |      |     (ifEntry=k)        |      |
           |      |   interleaved channel  |      |
           |      |________________________|      |
           | ATUC |                        | ATUR |
           |      |                        |      |
           |      |     (ifEntry=i)        |      |
           |      |      physical          |      |
           |      |________________________|      |
           |______|                        |______|

            Figure 3: Use of ifStackTable (part 1)

The ifStackTable is then used to show the relationships between the various ADSL interfaces, as illustrated below in Figure 4. πŸ•ΈοΈ

                  HigherLayer   LowerLayer
                 --------------------------
                      j             i
                      k             i

               Figure 4: Use of ifStackTable (part 2)

The ifRcvAddressTable is not applicable for ADSL interfaces. πŸ™…β€β™€οΈ

4.2. Relationship with RFC 2037 [25] ✨

okay so implementing the Entity MIB [25] is totally optional πŸ’… and it does NOT change the info the adslLineMib needs, or how it relates to IF-MIB 🫢

the Entity MIB is the standardized way to show off the parts of a complex system, like a DSLAM (Digital Subscriber Line Access Multiplexer) that might have racks, shelves, line cards, and/or ports 🧚 its main goal is showing those components, how they contain each other, and how they map to other MIBs like the Interface MIB and the adslLineMib πŸ’–

if an ATU-C agent is implemented, the Entity MIB should include entities for the ATU-C in the entPhysicalTable 🌸 the entAliasMappingTable would then hold the mapping that identifies the ifIndex object tied to each ATU-C. but if an ATU-R agent is implemented, the Entity MIB should include entities for the ATU-R in the entPhysicalTable instead πŸ¦‹ and the entAliasMappingTable would hold the mapping for the ifIndex object tied to each ATU-R πŸ“

also, to connect the ifTable and the Entity MIB, the entPhysicalTable has an entPhysicalName object that roughly matches the meaning of the ifName object from the Interface MIB πŸŽ€


5. Conventions used in the MIB πŸ’œ

5.1. Naming Conventions πŸ“

A. Atuc/Atur are the names for the ATU-C and ATU-R 🫢 other RFCs sometimes call these the Near End (Ne) and Far End (Fe) respectively, but this document does not πŸ™ˆ

B. "Transmit" and "receive" are seen from the point of view of the corresponding table's end of the line πŸ’… so for Fast channels, adslAtucChanConfFastMaxTxRate defines the "downstream" rate, while adslAturChanConfFastMaxTxRate defines the "upstream" rate for a particular channel ✨

C. There are two possible channels: fast, and interleaved 🌈 none, one, or both may be implemented on a particular ADSL Line 🧚 Figure 5 shows every possible operational configuration πŸ’–

D. Lof, Lol, Los, Lpr mean Loss of Framing, Link, Signal, and Power, respectively πŸ”₯ Lpr is used by T1E1, so it gets used for consistency (instead of Lop) 🫢

A Loss of Link condition is declared at the ATU-C if a Loss of Signal is not preceded by a dying-gasp message from the ATU-R 😭 and note that Loss of Link is only supported by the ATU-C πŸ’€

E. ES means errored second πŸ“ an Errored Second is any second that contains one or more CRC anomaly, or one or more Los(s) or Severely Errored Frame (Sef) defect(s) ⭐

F. A "block" is a physical-layer data buffer that CRCs are calculated over πŸ¦‹ in DMT, the block is defined as the ADSL superframe 🌸 the block duration is 250 micro-seconds, so the block length in bytes (as defined in adslAtu*ChanCrcBlockLength) changes with data rate πŸ‘‘ see Line Code Specific MIBs [11] [12] for more line-code-specific info πŸŽ€

G. Atn means Attenuation, Psd is Power Spectral Density and Snr is Signal to Noise Ratio πŸ’…

H. LCS means line code specific, e.g.,

  • DMT = Discrete MultiTone
  • CAP = Carrierless Amplitude and Phase modulation and
  • QAM = Quadrature Amplitude Modulation

I. Vendor (in the Inventory objects) refers to the manufacturer of the ATU-C or ATU-R assembly, NOT the modem chip vendor πŸ™ˆ when you're unsure, use the manufacturer of the smallest field replaceable unit (e.g., stand-alone modem box, plug-in board) 🧚

J. RADSL - Rate Adaptive Asymmetric Digital Subscriber Loop 🌈

5.2. Structure πŸ—οΈ

the MIB has multiple parallel tables πŸ’– there are tables for:

  • line - common attributes
  • atuc and atur status
  • atuc and atur performance
    • Current and up to 96 buckets of 15 min performance history
    • Current and Previous 1-day bucket performance history
  • profiles - configuration parameters and alarm parameters

there are separate tables for the Physical and Channel layers 🫢 since their attributes are similar, only one set of "channel" tables is defined, used for both fast and interleaved channels πŸ¦‹ the corresponding ifType gives the proper interpretation for that ifEntry ✨

Line Code Specific MIBs are meant to live under adslLCSMib 🌸 these MIBs will be defined in separate modules πŸ“

there could have been fewer tables by combining the ATU-C and ATU-R info into shared tables πŸ€” but the tables are way easier to read when there are two identical sets of data πŸ’…

the figure below lists the five possible ADSL operational configurations (indicated by the value of the adslLineType) 😭 in every configuration, the physical line interface entry will exist 🫢 but whether the ADSL channel exists varies in each case, as shown below πŸ‘‘

    Table                         Phys     Fast  Interleaved
___________________________________________________________
  No Channels (1)               |  Y    |        |        |
  Fast Only (2)                 |  Y    |   Y    |        |
  Interleaved Only (3)          |  Y    |        |   Y    |
  Fast or Interleaved (4)       |  Y    |   Y    |   Y    |
  Fast and Interleaved (5)      |  Y    |   Y    |   Y    |

Figure 5: ADSL Operational configurations

NOTE: In (4), channel exists of either Fast or Interleaved type, but not both. The Manager may select the type of channel to be used. πŸŽ€

depending on which operational configuration exists, some or all ADSL MIB tables could be supported, as shown below 🌈 see the Conformance Statements for more info on which objects are mandatory πŸ’œ

    Table                         Phys     Fast  Interleaved
___________________________________________________________
  adslLineTable                  |  Y    |        |        |
  adslAtucPhysTable              |  Y    |        |        |
  adslAturPhysTable              |  Y    |        |        |
  adslAtucChanTable              |       |   Y    |   Y    |
  adslAturChanTable              |       |   Y    |   Y    |
  adslAtucPerfDataTable          |  Y    |        |        |
  adslAturPerfDataTable          |  Y    |        |        |
  adslAtucIntervalTable          |  Y    |        |        |
  adslAturIntervalTable          |  Y    |        |        |
  adslAtucChanPerfDataTable      |       |   Y    |   Y    |
  adslAturChanPerfDataTable      |       |   Y    |   Y    |
  adslAtucChanIntervalTable      |       |   Y    |   Y    |
  adslAturChanIntervalTable      |       |   Y    |   Y    |

Figure 6: Use of ADSL MIB Tables with various ifIndex values

NOTE: The adslLineConfProfileTable and adslLineAlarmConfProfileTable will be present for all scenarios 🧚 see the Profile Section of this document for implementation details such as profile creation, assignment, and indexing ✨

5.2.1. Structure of Conformance Groups πŸŽ€

the MIB covers both ends of the ADSL line, ATU-C and ATU-R 🫢 the objects can be sorted into two groups: the ATU-C group, which has objects supported by ATU-C agents, and the ATU-R group, which has objects supported by ATU-R agents πŸ’… these two groups are defined by the conformance section of the MIB 🌸 every object defined in the MIB module is supported by the ATU-C agent, and only portions of the objects are supported by the ATU-R agent 😭 Figure 7 lists all the tables and objects that the ATU-R agent supports πŸ‘‘

          Table                         Objects
_______________________________________________________
          adslLineTable                 adslLineCoding
          adslAtucPhysTable             adslAtucInvVendorID
                                        adslAtucInvVersionNumber
                                        adslAtucCurrStatus (Partial)
                                        adslAtucCurrOutputPwr
                                        adslAtucCurrAttainableRate
          adslAturPhysTable             all are supported
          adslAtucChanTable             all except
                                        adslAtucChanCrcBlockLength
                                        are supported
          adslAtucPerfDataTable         all except
                                        adslAtucPerfLols,
adslAtucPerfLprs
                                        adslAtucPerfCurr15MinLols,
                                        adslAtucPerfCurr15MinLprs,
                                        adslAtucPerfCurr1DayLols,
                                        adslAtucPerfCurr1DayLprs,
                                        adslAtucPerfPrev1DayLols and
                                        adslAtucPerfPrev1DayLprs
                                        are supported
          adslAturPerfDataTable         all are supported
          adslAtucIntervalTable         adslAtucIntervalLofs
                                        adslAtucIntervalLoss
                                        adslAtucIntervalESs
                                        adslAtucIntervalInits
                                        adslAtucIntervalValidData
          adslAturIntervalTable         all are supported
          adslAtucChanPerfDataTable     all are supported
          adslAturChanPerfDataTable     all are supported
          adslAtucChanIntervalTable     all are supported
          adslAturChanIntervalTable     all are supported
          adslLineConfProfileTable      not supported
          adslLineAlarmConfProfileTable all are supported except
                                        adslAtucThresh15MinLols
                                        and adslAtucThresh15MinLprs
--------------------------------------------------------------------

Figure 7: MIB Tables and Objects Supported by the ATU-R Agent

all the traps supported by the ATU-R agent are listed here too 🧚

             adslAtucPerfLofsThreshTrap
             adslAtucPerfLossThreshTrap
             adslAtucPerfESsThreshTrap
             adslAtucRateChangeTrap
             adslAturPerfLofsThreshTrap
             adslAturPerfLossThreshTrap
             adslAturPerfLprsThreshTrap
             adslAturPerfESsThreshTrap
             adslAturRateChangeTrap

5.3. Counters, Interval Buckets and Thresholds ✨

okay so for the physical-level stuff (ES, Los, Lof, Lol, Lpr and line initialization attempts), you get event counters πŸ’… plus a current 15-minute bucket, one (up to 96) 15-minute history bucket(s) of "interval-counters", and current and previous 1-day interval-counters. Each physical-layer current 15-minute event bucket has a threshold trap πŸ”₯

at the channel level, there are counters for total received blocks, received-and-corrected blocks, received-but-uncorrectable blocks, and transmitted blocks. same 15-minute and 1-day buckets as the physical layer, so it's giving consistency 🫢

there's no requirement for an agent to keep a fixed relationship between the start of a fifteen minute interval and any wall clock. some implementations might line the fifteen minute intervals up with quarter hours though. likewise, an implementation may choose to align one day intervals with the start of a day πŸ•

separate tables are provided for the 96 interval-counters. they're indexed by {ifIndex, AdslAtu*IntervalNumber} 🧚

counters aren't reset when an ATU-C or ATU-R gets reinitialized. they only get reset when the agent is reset or reinitialized (or under specific request outside the scope of this MIB) πŸ”„

the 15-minute event counters are of type PerfCurrentCount and PerfIntervalCount. the 1-day event counters are of type AdslPerfCurrDayCount and AdslPerfPrevDayCount. both the 15-minute and 1-day time elapsed counters are of type AdslPerfTimeElapsed ⏱️

5.4. Profiles πŸŽ€

okay, so a managed node can handle a huge number of ATU-Cs (e.g., hundreds or perhaps thousands of ADSL lines), and provisioning every single parameter on every ATU-C can get seriously burdensome 😭 so two MIB tables were created to define ADSL equipment configuration data profiles, plus a mechanism to link the equipment to those profiles πŸ’–

profile tables can be implemented in one of two ways, but not at the same time:

  • MODE-I: Dynamic Profiles - one profile shared by one or multiple ADSL lines.
  • MODE-II: Static Profiles - one profile per ADSL physical line, always.

5.4.1. MODE-I : Dynamic Profiles 🌸

implementations using this mode let the manager dynamically create and delete profiles as needed. the index of the profile is a locally-unique, administratively assigned name for the profile, with the textual convention `SnmpAdminString' (RFC2571 [13]).

one or more ADSL lines can be configured to share the parameters of a single profile (e.g., adslLineConfProfileName = `silver') by setting their adslLineConfProfile objects to the index value of that profile. if a change is made to the profile, every line that refers to it gets reconfigured to the changed parameters. before a profile can be deleted or taken out of service, it has to be unreferenced from all associated lines first. no drama, just order πŸ’…

this figure below shows an example of how this mode can be implemented. in the example, ADSL lines 1' and x' share the configuration of the silver' profile, while line 2' uses the platinum' profile. the gold' profile has no lines associated with it πŸ‘‘

   ADSL    ifIndex      ifTable                       Configuration Line
   Profile Table
   __________________________________________________________________

   1         i1         ADSL Line --           ---> Platinum Profile
             j1         Fast Chan    |        |
             k1         Int Chan     |        |
                                     |        ^
                                     v        |     Gold Profile

   2         i2         ADSL Line ------->----
             j2         Fast Chan    |
             k2         Int Chan     |
                                     |
                                     |
                                     |
                                     v

   x         ix         ADSL Line    ------>------> Silver Profile
             jx         Fast Chan  --------------->
             kx         Int Chan
   __________________________________________________________________

               Figure 8: Use of Dynamic Profiles: MODE-I

in the figure above, note that the three interface entries of an ADSL line (physical, fast channel, and interleaved channel) are represented by i', j', and k'. only the physical-layer entry i' contains an adslLineTable entry, so only those entries contain pointers to the adslLineConfProfileTable. the ifStackTable (see rfc2233 [5]) can be used to link the channel entries to the corresponding physical-layer entry, so you can get the channel's configuration parameters. see figure 4 for use of the ifStackTable 🧠

the same characteristics and mechanisms are present for the alarm profile type. there is no requirement that its index be the same as the configuration profile's index, so no need to match them πŸ™ƒ

implementations of this mode must provide a default profile whose name is DEFVAL' for each profile type: Configuration and Alarm. the values of the associated parameters will be vendor specific unless otherwise indicated in this document. before a line's profiles have been set, these profiles are automatically used by setting adslLineConfProfile and adslLineAlarmConfProfile to DEFVAL' 🫢

in this mode, profiles are created, assigned, and deleted dynamically using these four objects: adslLineConfProfile, adslLineConfProfileRowStatus, adslLineAlarmConfProfile, and adslLineAlarmConfProfileRowStatus ✨

5.4.2. MODE-II : Static Profiles πŸ¦‹

implementations with this mode will automatically create a profile one-for-one with each ADSL line physical entry. the name of this profile is a system generated, read-only object whose value is equivalent to the index of the physical line. the agent will not allow a manager to create or delete profiles in this mode. so adslLineConfProfile, adslLineConfProfileRowStatus, adslLineAlarmConfProfile, and adslLineAlarmConfProfileRowStatus objects have minimal value here and are read-only πŸ™ˆ

the figure below shows an example of this mode. in the example, ADSL lines 1', 2', and `x' each have their own profiles πŸ“

   ADSL    ifIndex      ifTable                       Configuration Line
   Profile Table
   __________________________________________________________________

   1         i1         ADSL Line      ------------>  Profile
             j1         Fast Chan
             k1         Int Chan

   2         i2         ADSL Line      ------------>  Profile
             j2         Fast Chan

             k2         Int Chan

   x         ix         ADSL Line      ------------>  Profile
             jx         Fast Chan
             kx         Int Chan
   __________________________________________________________________

                Figure 9: Use of Static Profiles: MODE II

5.5. Traps 🚨

these SNMP traps are required: coldStart / warmStart (per [6]), which are per agent (e.g., per DSLAM in such a device), and linkUp / linkDown (per [5]), which are per interface (i.e., per ADSL line). note: RFC 2233 [5] recommends that linkUp / linkDown only be used at a physical-layer ifEntry, as discussed above πŸ“‘

a linkDown trap is generated whenever any of Lof, Los, Lol, Loss of Signal Quality, or Lpr events occurs. at this operational point, a manager can use adslAtu*CurrStatus for additional detailed information. the corresponding linkUp trap is sent when all link failure conditions are cleared πŸ’€

the traps defined in this MIB cover initialization failure, rate change, and threshold crossings associated with the following events: Lofs, Lols, Loss, Lprs, and ESs. each threshold has its own enable/threshold value. when that value is 0, the trap is disabled πŸ”•

the current status objects (adslAtu*CurrStatus) indicate, through a bitmask, all outstanding error conditions or that the line is operational. note that each object claims to represent the status of the modem at that end of the line. however, since the SNMP agent likely co-resides with only one end of the line, the corresponding far-end current status object may be incomplete. for example, when there are errors on the line, the far-end ATU may not be able to correctly report this condition. therefore, not all conditions are included in its current status πŸ€·β€β™€οΈ

a threshold trap occurs whenever the corresponding current 15-minute interval error counter becomes equal to and/or exceeds the threshold value. one trap is sent per interval per interface. since the current 15-minute counters are reset to 0 every 15 minutes, if the condition persists, the trap may recur as often as every 15 minutes. for example, to get a trap whenever a "loss of" event occurs (but at most once every 15 minutes), set the corresponding Thresh15Min to 1. the agent will generate a trap when the event originally occurs πŸ””

note that the NMS will get a linkDown trap as well, if enabled. at the beginning of the next 15 minute interval, the counter is reset. when the first second goes by and the event occurs, the current interval bucket will be 1, which equals the threshold, and the trap will be sent again πŸ”

the rate change trap is invoked when the transmit rate on a channel either increases by adsl(x)Thresh(y)RateUp or decreases by adsl(x)Thresh(y)RateDown. the trap is per direction, (x) being Atuc or Atur, and per channel, (y) being Fast or Interleave. in other words, the trap is sent whenever the rate changes in either direction on either channel and:

            CurrTxRate >= PrevTxRate plus ThreshRateUp

                                or

           CurrTxRate <= PrevTxRate minus ThreshRateDown

no trap is sent on initialization. it can be disabled by setting the Up (and/or) Down threshold rates to 0 πŸ™…β€β™€οΈ

the PrevTxRate object is set to the current value at initialization and whenever a trap is sent. thus, rate changes are cumulative until the total change reaches the threshold πŸ“ˆ

6. Conformance and Compliance πŸ’œ

see the conformance and compliance statements within the information module πŸ“‹

7. Definitions 🧚

here's the module itself, the actual MIB definitions in all their glory. the ADSL Line Coding Textual Convention is what this part kicks off with πŸŽ€

   ADSL-TC-MIB DEFINITIONS ::= BEGIN

   IMPORTS
       transmission,
       MODULE-IDENTITY, Gauge32            FROM SNMPv2-SMI
       TEXTUAL-CONVENTION                  FROM SNMPv2-TC;

   adsltcmib MODULE-IDENTITY

   LAST-UPDATED "9908190000Z"

   ORGANIZATION "IETF ADSL MIB Working Group"

   CONTACT-INFO
       "
       Gregory Bathrick
       AG Communication Systems
       A Subsidiary of Lucent Technologies
       2500 W Utopia Rd.
       Phoenix, AZ 85027 USA
       Tel: +1 602-582-7679
       Fax: +1 602-582-7697
       E-mail: bathricg@agcs.com

       Faye Ly
       Copper Mountain Networks
       Norcal Office
       2470 Embarcadero Way
       Palo Alto, CA 94303
       Tel: +1 650-858-8500
       Fax: +1 650-858-8085
       E-Mail: faye@coppermountain.com
       IETF ADSL MIB Working Group (adsl@xlist.agcs.com)
       "
       DESCRIPTION
           "The MIB module which provides a ADSL
           Line Coding Textual Convention to be used
           by ADSL Lines."

       --  Revision history
       REVISION     "9908190000Z"  -- 19 August 1999, midnight
       DESCRIPTION  "Initial Version, published as RFC 2662"

       ::= { transmission 94 2 } -- adslMIB 2

   AdslLineCodingType ::= TEXTUAL-CONVENTION
       STATUS       current
       DESCRIPTION
           "This data type is used as the syntax for the ADSL
           Line Code."
       SYNTAX  INTEGER {
           other(1),-- none of the following
           dmt (2), -- Discrete MultiTone
           cap (3), -- Carrierless Amplitude & Phase modulation
           qam (4)  -- Quadrature Amplitude Modulation
       }

Okay bestie, we're still deep in the MIB module zone πŸ’œ The first bit wraps up the ADSL-TC-MIB textual conventions for the 1-day counters and the elapsed-time value, and then the ADSL-LINE-MIB module starts ✨

       AdslPerfCurrDayCount ::= TEXTUAL-CONVENTION
           STATUS  current
           DESCRIPTION
               "A counter associated with interface performance
               measurements in a current 1-day (24 hour) measurement
               interval.

               The value of this counter starts at zero at the
               beginning of an interval and is increased when
               associated events occur, until the end of the
               1-day interval.  At that time the value of the
               counter is stored in the previous 1-day history
               interval, if available, and the current interval
               counter is restarted at zero.

               In the case where the agent has no valid data available
               for this interval the corresponding object
               instance is not available and upon a retrieval
               request a corresponding error message shall be
               returned to indicate that this instance does
               not exist (for example, a noSuchName error for
               SNMPv1 and a noSuchInstance for SNMPv2 GET
               operation)."

            SYNTAX  Gauge32

       AdslPerfPrevDayCount ::= TEXTUAL-CONVENTION
           STATUS  current
           DESCRIPTION
               "A counter associated with interface performance
               measurements during the most previous 1-day (24 hour)
               measurement interval.  The value of this counter is
               equal to the value of the current day counter at
               the end of its most recent interval.

               In the case where the agent has no valid data available
               for this interval the corresponding object
               instance is not available and upon a retrieval
               request a corresponding error message shall be
               returned to indicate that this instance does
               not exist (for example, a noSuchName error for
               SNMPv1 and a noSuchInstance for SNMPv2 GET
               operation)."
           SYNTAX  Gauge32

       AdslPerfTimeElapsed ::= TEXTUAL-CONVENTION
           STATUS current
           DESCRIPTION
               "The number of seconds that have elapsed since
               the beginning of the current measurement period.
               If, for some reason, such as an adjustment in the
               system's time-of-day clock, the current interval
               exceeds the maximum value, the agent will return
               the maximum value."
           SYNTAX  Gauge32

   END

So the two "current day" counters are basically a 24-hour scoreboard πŸ“Š The current one ticks up until the 1-day interval ends, then it gets saved into the previous-day slot and starts over at zero πŸ”„ If the agent doesn't have valid data for that window, the object just doesn't exist, and asking for it gets you a noSuchName (SNMPv1) or noSuchInstance (SNMPv2 GET) error πŸ™ˆ And the elapsed-time one is giving "how long has this been running" vibes ⏱️, with a max value if the clock does something weird πŸ’…

Now the big one: the ADSL-LINE-MIB module itself πŸŽ€

   ADSL-LINE-MIB DEFINITIONS ::= BEGIN

   IMPORTS
       MODULE-IDENTITY, OBJECT-TYPE,
       Counter32, Gauge32,
       NOTIFICATION-TYPE,
       transmission, Unsigned32          FROM SNMPv2-SMI
       RowStatus,
       TruthValue, VariablePointer       FROM SNMPv2-TC
       MODULE-COMPLIANCE, OBJECT-GROUP,
       NOTIFICATION-GROUP                FROM SNMPv2-CONF
       ifIndex                           FROM IF-MIB
       PerfCurrentCount,
       PerfIntervalCount                 FROM PerfHist-TC-MIB
       SnmpAdminString                   FROM SNMP-FRAMEWORK-MIB
       AdslPerfCurrDayCount,
       AdslPerfPrevDayCount,
       AdslPerfTimeElapsed,
       AdslLineCodingType                FROM ADSL-TC-MIB
       ;

   adslMIB MODULE-IDENTITY

   LAST-UPDATED "9908190000Z"

   ORGANIZATION "IETF ADSL MIB Working Group"

   CONTACT-INFO
       "
       Gregory Bathrick
       AG Communication Systems
       A Subsidiary of Lucent Technologies
       2500 W Utopia Rd.
       Phoenix, AZ 85027 USA
       Tel: +1 602-582-7679
       Fax: +1 602-582-7697
       E-mail: bathricg@agcs.com

       Faye Ly
       Copper Mountain Networks
       Norcal Office
       2470 Embarcadero Way
       Palo Alto, CA 94303
       Tel: +1 650-858-8500
       Fax: +1 650-858-8085
       E-Mail: faye@coppermountain.com

       (ADSL Forum input only)
       John Burgess
       Predictive Systems, Inc.
       25A Vreeland Rd.
       Florham Park, NJ 07932 USA
       Tel: +1 973-301-5610
       Fax: +1 973-301-5699
       E-mail: jtburgess@predictive.com

       IETF ADSL MIB Working Group (adsl@xlist.agcs.com)
       "

   DESCRIPTION
       "The MIB module defining objects for the management of a pair of
       ADSL modems at each end of the ADSL line.  Each such line has
       an entry in an ifTable which may include multiple modem lines.
       An agent may reside at either end of the ADSL line however the
       MIB is designed to require no management communication between
       them beyond that inherent in the low-level ADSL line protocol.
       The agent may monitor and control this protocol for its needs.

       ADSL lines may support optional Fast or Interleaved channels.
       If these are supported, additional entries corresponding to the
       supported channels must be created in the ifTable. Thus an ADSL
       line that supports both channels will have three entries in the
       ifTable, one for each physical, fast, and interleaved, whose
       ifType values are equal to adsl(94), fast(125), and
       interleaved(124), respectively. The ifStackTable is used to
       represent the relationship between the entries.

       Naming Conventions:
                 Atuc -- (ATUC) modem at near (Central) end of line
                 Atur -- (ATUR) modem at Remote end of line
                 Curr -- Current
                 Prev -- Previous
                 Atn -- Attenuation
                 ES  -- Errored Second.
                 LCS -- Line Code Specific
                 Lof -- Loss of Frame
                 Lol -- Loss of Link
                 Los -- Loss of Signal
                 Lpr -- Loss of Power
                 xxxs-- interval of Seconds in which xxx occurs
                         (e.g., xxx=Lof, Los, Lpr)
                 Max -- Maximum
                 Mgn -- Margin
                 Min -- Minimum
                 Psd -- Power Spectral Density
                 Snr -- Signal to Noise Ratio
                 Tx  -- Transmit
                 Blks-- Blocks, a data unit, see
                        adslAtuXChanCrcBlockLength
         "
         --  Revision history
         REVISION     "9908190000Z"  -- 19 August 1999, midnight
         DESCRIPTION  "Initial Version, published as RFC 2662"

   ::= { transmission 94 }

Quick vibe check on the header πŸ’– This module is all about managing a pair of ADSL modems, one at each end of the line 🧚 The agent can sit on either end, and the MIB is built so the two ends don't need to chat over management traffic beyond what the ADSL line protocol already does 🫢 Also, a line can have optional Fast or Interleaved channels, and if it does, extra ifTable entries get created, with the ifType values adsl(94), fast(125), and interleaved(124) 🌈 The ifStackTable is what ties all those entries together πŸ”— The naming-conventions list is the glossary you'll want open for the rest of this, iykyk πŸ“–

Next up, the MIB object tree and the first table, adslLineTable πŸ¦‹

   adslLineMib OBJECT IDENTIFIER ::= { adslMIB 1 }

   adslMibObjects OBJECT IDENTIFIER ::= { adslLineMib 1 }
   -- objects
         adslLineTable   OBJECT-TYPE
             SYNTAX          SEQUENCE OF AdslLineEntry
             MAX-ACCESS      not-accessible
             STATUS          current
             DESCRIPTION
                 "This table includes common attributes describing
                 both ends of the line.  It is required for all ADSL
                 physical interfaces.  ADSL physical interfaces are
                 those ifEntries where ifType is equal to adsl(94)."
         ::= { adslMibObjects 1 }

         adslLineEntry   OBJECT-TYPE
             SYNTAX          AdslLineEntry
             MAX-ACCESS      not-accessible
             STATUS          current
             DESCRIPTION     "An entry in adslLineTable."
             INDEX           { ifIndex }
         ::= { adslLineTable 1 }

         AdslLineEntry ::=
             SEQUENCE {
             adslLineCoding           AdslLineCodingType,
             adslLineType             INTEGER,
             adslLineSpecific         VariablePointer,
             adslLineConfProfile      SnmpAdminString,
             adslLineAlarmConfProfile SnmpAdminString
             }

         adslLineCoding OBJECT-TYPE
             SYNTAX      AdslLineCodingType
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Specifies the ADSL coding type used on this
                 line."
         ::= { adslLineEntry 1 }

        adslLineType OBJECT-TYPE
             SYNTAX      INTEGER {
                 noChannel (1),        -- no channels exist
                 fastOnly (2),         -- fast channel exists only
                 interleavedOnly (3),  -- interleaved channel exists
                                       -- only
                 fastOrInterleaved (4),-- either fast or interleaved
                                       -- channels can exist, but
                                       -- only one at any time
                 fastAndInterleaved (5)-- both fast or interleaved

                                       -- channels exist
             }
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Defines the type of ADSL physical line
                 entity that exists, by defining whether and how
                 the line is channelized.  If the line is channelized,
                 the value will be other than noChannel(1).  This
                 object defines which channel type(s) are supported.

                 In the case that the line is channelized, the manager
                 can use the ifStackTable to determine the ifIndex for
                 the associated channel(s)."
         ::= { adslLineEntry 2 }

         adslLineSpecific OBJECT-TYPE
             SYNTAX      VariablePointer
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "OID instance in vendor-specific MIB. The Instance may
                 be used to determine shelf/slot/port of the ATUC
                 interface in a DSLAM."
         ::= { adslLineEntry 3 }

        adslLineConfProfile OBJECT-TYPE
             SYNTAX      SnmpAdminString (SIZE (1..32))
             MAX-ACCESS  read-write
             STATUS      current
             DESCRIPTION
                 "The value of this object identifies the row
                 in the ADSL Line Configuration Profile Table,
                 (adslLineConfProfileTable), which applies for this
                 ADSL line, and channels if applicable.

                 For `dynamic' mode, in the case which the
                 configuration profile has not been set, the
                 value will be set to `DEFVAL'.

                 If the implementator of this MIB has chosen not
                 to implement `dynamic assignment' of profiles, this
                 object's MIN-ACCESS is read-only."
         ::= { adslLineEntry 4 }

        adslLineAlarmConfProfile OBJECT-TYPE
             SYNTAX      SnmpAdminString (SIZE (1..32))
             MAX-ACCESS  read-write
             STATUS      current
             DESCRIPTION
                 "The value of this object identifies the row
                 in the ADSL Line Alarm Configuration Profile Table,
                 (adslLineAlarmConfProfileTable), which applies to this
                 ADSL line, and channels if applicable.

                 For `dynamic' mode, in the case which the
                 alarm profile has not been set, the
                 value will be set to `DEFVAL'.

                 If the implementator of this MIB has chosen not
                 to implement `dynamic assignment' of profiles, this
                 object's MIN-ACCESS is read-only."
         ::= { adslLineEntry 5 }

         adslAtucPhysTable       OBJECT-TYPE
             SYNTAX          SEQUENCE OF AdslAtucPhysEntry
             MAX-ACCESS      not-accessible
             STATUS          current
             DESCRIPTION
                 "This table provides one row for each ATUC.
                 Each row contains the Physical Layer Parameters
                 table for that ATUC. ADSL physical interfaces are
                 those ifEntries where ifType is equal to adsl(94)."
         ::= { adslMibObjects 2 }

So adslLineTable is the "common stuff about both ends of the line" table 🧁 Every ADSL physical interface gets a row, and each row carries the coding type, the channelization type (noChannel(1) through fastAndInterleaved(5)) 🧩, and two profile-pointer columns that point at config and alarm profile rows πŸ“Œ Those profile pointers have a little DEFVAL moment in dynamic mode, and if the implementer skipped dynamic assignment, they're read-only, no drama πŸ™ƒ The adslLineSpecific one is a VariablePointer into vendor land, so it's giving "go look at the vendor MIB for shelf/slot/port" 🏒 And adslAtucPhysTable is the next stop, one row per ATUC, with the physical layer params πŸš€

okay bestie, we're deep in the ADSL tables now πŸ’– Every object here is a column in a table, and each one has its own little ID number after ::=.

         adslAtucPhysEntry       OBJECT-TYPE
             SYNTAX          AdslAtucPhysEntry
             MAX-ACCESS      not-accessible
             STATUS          current
             DESCRIPTION     "An entry in the adslAtucPhysTable."
             INDEX           { ifIndex }
         ::= { adslAtucPhysTable 1 }

         AdslAtucPhysEntry ::=
             SEQUENCE {
             adslAtucInvSerialNumber         SnmpAdminString,
             adslAtucInvVendorID             SnmpAdminString,
             adslAtucInvVersionNumber        SnmpAdminString,
             adslAtucCurrSnrMgn              INTEGER,
             adslAtucCurrAtn                 Gauge32,
             adslAtucCurrStatus              BITS,
             adslAtucCurrOutputPwr           INTEGER,
             adslAtucCurrAttainableRate      Gauge32
             }

         -- inventory group
         --
         -- These items should describe the lowest level identifiable
         -- component, be it a stand-alone modem, a card in a rack,
         -- a child-board, etc.
         --
         adslAtucInvSerialNumber OBJECT-TYPE
             SYNTAX      SnmpAdminString (SIZE (0..32))
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "The vendor specific string that identifies the
                 vendor equipment."
         ::= { adslAtucPhysEntry 1 }

         adslAtucInvVendorID OBJECT-TYPE
             SYNTAX      SnmpAdminString (SIZE (0..16))
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "The vendor ID code is a copy of the binary
                 vendor identification field defined by the
                 PHY[10] and expressed as readable characters."

             REFERENCE "ANSI T1.413[10]"
         ::= { adslAtucPhysEntry 2 }

         adslAtucInvVersionNumber OBJECT-TYPE
             SYNTAX      SnmpAdminString (SIZE (0..16))
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "The vendor specific version number sent by this ATU
                 as part of the initialization messages.  It is a copy
                 of the binary version number field defined by the
                 PHY[10] and expressed as readable characters."
             REFERENCE "ANSI T1.413[10]"
         ::= { adslAtucPhysEntry 3 }

         -- current status group
         --
         adslAtucCurrSnrMgn OBJECT-TYPE
             SYNTAX      INTEGER (-640..640)
             UNITS       "tenth dB"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Noise Margin as seen by this ATU with respect to its
                 received signal in tenth dB."

         ::= { adslAtucPhysEntry 4 }

         adslAtucCurrAtn OBJECT-TYPE
             SYNTAX      Gauge32(0..630)
             UNITS       "tenth dB"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Measured difference in the total power transmitted by
                 the peer ATU and the total power received by this ATU."
         ::= { adslAtucPhysEntry 5 }

        adslAtucCurrStatus OBJECT-TYPE
             SYNTAX      BITS {
                               noDefect(0),
                               lossOfFraming(1),
                               lossOfSignal(2),
                               lossOfPower(3),
                               lossOfSignalQuality(4),
                               lossOfLink(5),
                               dataInitFailure(6),
                               configInitFailure(7),
                               protocolInitFailure(8),
                               noPeerAtuPresent(9)
                              }
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Indicates current state of the ATUC line.  This is a
                 bit-map of possible conditions.  The various bit
                 positions are:

          0      noDefect             There no defects on the line

          1      lossOfFraming        ATUC failure due to not
                                      receiving valid frame.

          2      lossOfSignal         ATUC failure due to not
                                      receiving signal.

          3      lossOfPower          ATUC failure due to loss of
                                      power.
                                      Note: the Agent may still
                                      function.

          4      lossOfSignalQuality  Loss of Signal Quality is
                                      declared when the Noise Margin
                                      falls below the Minimum Noise
                                      Margin, or the bit-error-rate
                                      exceeds 10^-7.

          5      lossOfLink           ATUC failure due to inability
                                      to link with ATUR.

          6      dataInitFailure      ATUC failure during
                                      initialization due to bit
                                      errors corrupting startup
                                      exchange data.

          7      configInitFailure    ATUC failure during
                                      initialization due to peer
                                      ATU not able to support
                                      requested configuration

          8      protocolInitFailure  ATUC failure during
                                      initialization due to
                                      incompatible protocol used by
                                      the peer ATU.

          9      noPeerAtuPresent     ATUC failure during
                                      initialization due to no
                                      activation sequence detected
                                      from peer ATU.

                 This is intended to supplement ifOperStatus."
         ::= { adslAtucPhysEntry 6 }

         adslAtucCurrOutputPwr OBJECT-TYPE
             SYNTAX      INTEGER (-310..310)
             UNITS       "tenth dBm"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Measured total output power transmitted by this ATU.
                 This is the measurement that was reported during
                 the last activation sequence."
         ::= { adslAtucPhysEntry 7 }

         adslAtucCurrAttainableRate OBJECT-TYPE
             SYNTAX      Gauge32
             UNITS       "bps"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Indicates the maximum currently attainable data rate
                 by the ATU.  This value will be equal or greater than
                 the current line rate."
         ::= { adslAtucPhysEntry 8 }

         adslAturPhysTable        OBJECT-TYPE
             SYNTAX          SEQUENCE OF AdslAturPhysEntry
             MAX-ACCESS      not-accessible
             STATUS          current
             DESCRIPTION
                 "This table provides one row for each ATUR
                 Each row contains the Physical Layer Parameters
                 table for that ATUR. ADSL physical interfaces are
                 those ifEntries where ifType is equal to adsl(94)."
         ::= { adslMibObjects 3 }

         adslAturPhysEntry       OBJECT-TYPE
             SYNTAX          AdslAturPhysEntry
             MAX-ACCESS      not-accessible
             STATUS          current
             DESCRIPTION     "An entry in the adslAturPhysTable."
             INDEX           { ifIndex }
         ::= { adslAturPhysTable 1 }

         AdslAturPhysEntry ::=
             SEQUENCE {
             adslAturInvSerialNumber         SnmpAdminString,
             adslAturInvVendorID             SnmpAdminString,
             adslAturInvVersionNumber        SnmpAdminString,
             adslAturCurrSnrMgn              INTEGER,
             adslAturCurrAtn                 Gauge32,
             adslAturCurrStatus              BITS,
             adslAturCurrOutputPwr           INTEGER,
             adslAturCurrAttainableRate      Gauge32
             }

         -- inventory group
         --
         adslAturInvSerialNumber OBJECT-TYPE
             SYNTAX      SnmpAdminString (SIZE (0..32))
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "The vendor specific string that identifies the
                 vendor equipment."
         ::= { adslAturPhysEntry 1 }

         adslAturInvVendorID OBJECT-TYPE
             SYNTAX      SnmpAdminString (SIZE (0..16))
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "The vendor ID code is a copy of the binary
                 vendor identification field defined by the
                 PHY[10] and expressed as readable characters."
             REFERENCE "ANSI T1.413"
         ::= { adslAturPhysEntry 2 }

         adslAturInvVersionNumber OBJECT-TYPE
             SYNTAX      SnmpAdminString (SIZE (0..16))
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "The vendor specific version number sent by this ATU
                 as part of the initialization messages.  It is a copy
                 of the binary version number field defined by the
                 PHY[10] and expressed as readable characters."
             REFERENCE "ANSI T1.413"
         ::= { adslAturPhysEntry 3 }

         -- current status group
         --
         adslAturCurrSnrMgn OBJECT-TYPE
             SYNTAX      INTEGER (-640..640)
             UNITS       "tenth dB"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Noise Margin as seen by this ATU with respect to its
                 received signal in tenth dB."
         ::= { adslAturPhysEntry 4 }

         adslAturCurrAtn OBJECT-TYPE
             SYNTAX      Gauge32(0..630)
             UNITS       "tenth dB"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Measured difference in the total power transmitted by
                 the peer ATU and the total power received by this ATU."
         ::= { adslAturPhysEntry 5 }

        adslAturCurrStatus OBJECT-TYPE
             SYNTAX     BITS {
                              noDefect(0),
                              lossOfFraming(1),
                              lossOfSignal(2),
                              lossOfPower(3),
                              lossOfSignalQuality(4)
                             }
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Indicates current state of the ATUR line.  This is a
                 bit-map of possible conditions.  Due to the isolation
                 of the ATUR when line problems occur, many state
                 conditions like loss of power, loss of quality signal,
                 and initialization errors,  can not be determined.
                 While trouble shooting ATUR, also use object,
                 adslAtucCurrStatus.  The various bit positions are:

          0      noDefect             There no defects on the line

          1      lossOfFraming        ATUR failure due to not
                                      receiving valid frame

          2      lossOfSignal         ATUR failure due to not
                                      receiving signal

          3      lossOfPower          ATUR failure due to loss of
                                      power

Okay, the MIB definitions keep rolling and this bit is all about the ATU-R line status and channel tables πŸŽ€ Here's the code, exactly as it's written. Every field, index, and trap-threshold detail stays put πŸ’…

          4      lossOfSignalQuality  Loss of Signal Quality is
                                      declared when the Noise Margin
                                      falls below the Minimum Noise
                                      Margin, or the
                                      bit-error-rate exceeds 10^-7.

                 This is intended to supplement ifOperStatus."
         ::= { adslAturPhysEntry 6 }

         adslAturCurrOutputPwr OBJECT-TYPE
             SYNTAX      INTEGER (-310..310)
             UNITS       "tenth dBm"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Measured total output power transmitted by this ATU.
                 This is the measurement that was reported during
                 the last activation sequence."
         ::= { adslAturPhysEntry 7 }

         adslAturCurrAttainableRate OBJECT-TYPE
             SYNTAX      Gauge32
             UNITS       "bps"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Indicates the maximum currently attainable data rate
                 by the ATU.  This value will be equal or greater than
                 the current line rate."
         ::= { adslAturPhysEntry 8 }

         adslAtucChanTable       OBJECT-TYPE
             SYNTAX          SEQUENCE OF AdslAtucChanEntry
             MAX-ACCESS      not-accessible
             STATUS          current
             DESCRIPTION
                 "This table provides one row for each ATUC channel.
                 ADSL channel interfaces are those ifEntries
                 where ifType is equal to adslInterleave(124)
                 or adslFast(125)."
         ::= { adslMibObjects 4 }

         adslAtucChanEntry       OBJECT-TYPE
             SYNTAX          AdslAtucChanEntry
             MAX-ACCESS      not-accessible
             STATUS          current
             DESCRIPTION     "An entry in the adslAtucChanTable."
             INDEX           { ifIndex }
         ::= { adslAtucChanTable 1 }

         AdslAtucChanEntry ::=
             SEQUENCE {
             adslAtucChanInterleaveDelay     Gauge32,
             adslAtucChanCurrTxRate          Gauge32,
             adslAtucChanPrevTxRate          Gauge32,
             adslAtucChanCrcBlockLength      Gauge32
             }

         -- current group
         --
         adslAtucChanInterleaveDelay OBJECT-TYPE
             SYNTAX      Gauge32
             UNITS       "milli-seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Interleave Delay for this channel.

                 Interleave delay applies only to the
                 interleave channel and defines the mapping
                 (relative spacing) between subsequent input
                 bytes at the interleaver input and their placement
                 in the bit stream at the interleaver output.
                 Larger numbers provide greater separation between
                 consecutive input bytes in the output bit stream
                 allowing for improved impulse noise immunity at
                 the expense of payload latency.

                 In the case where the ifType is Fast(125), use
                 noSuchObject."
         ::= { adslAtucChanEntry 1 }

         adslAtucChanCurrTxRate  OBJECT-TYPE
             SYNTAX      Gauge32
             UNITS       "bps"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Actual transmit rate on this channel."
         ::= { adslAtucChanEntry 2 }

         adslAtucChanPrevTxRate OBJECT-TYPE
             SYNTAX      Gauge32
             UNITS        "bps"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "The rate at the time of the last
                 adslAtucRateChangeTrap event. It is also set at
                 initialization to prevent a trap being sent.

                 Rate changes less than adslAtucThresh(*)RateDown
                 or less than adslAtucThresh(*)RateUp will not
                 cause a trap or cause this object to change.
                 (*) == Fast or Interleave.
                 See AdslLineAlarmConfProfileEntry."
         ::= { adslAtucChanEntry 3 }

         adslAtucChanCrcBlockLength OBJECT-TYPE
             SYNTAX      Gauge32
             UNITS        "byte"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Indicates the length of the channel data-block
                 on which the CRC operates.  Refer to Line Code
                 Specific MIBs, [11] and [12] for more
                 information."
         ::= { adslAtucChanEntry 4 }

        adslAturChanTable       OBJECT-TYPE
             SYNTAX          SEQUENCE OF AdslAturChanEntry
             MAX-ACCESS      not-accessible
             STATUS          current
             DESCRIPTION
                 "This table provides one row for each ATUR channel.
                 ADSL channel interfaces are those ifEntries
                 where ifType is equal to adslInterleave(124)
                 or adslFast(125)."
         ::= { adslMibObjects 5 }

         adslAturChanEntry       OBJECT-TYPE
             SYNTAX          AdslAturChanEntry
             MAX-ACCESS      not-accessible
             STATUS          current
             DESCRIPTION     "An entry in the adslAturChanTable."
             INDEX           { ifIndex }
         ::= { adslAturChanTable 1 }

         AdslAturChanEntry ::=
             SEQUENCE {
             adslAturChanInterleaveDelay     Gauge32,
             adslAturChanCurrTxRate          Gauge32,
             adslAturChanPrevTxRate          Gauge32,
             adslAturChanCrcBlockLength      Gauge32
             }

         -- current group
         --
         adslAturChanInterleaveDelay OBJECT-TYPE
             SYNTAX      Gauge32
             UNITS       "milli-seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Interleave Delay for this channel.

                 Interleave delay applies only to the
                 interleave channel and defines the mapping
                 (relative spacing) between subsequent input
                 bytes at the interleaver input and their placement
                 in the bit stream at the interleaver output.
                 Larger numbers provide greater separation between
                 consecutive input bytes in the output bit stream
                 allowing for improved impulse noise immunity at
                 the expense of payload latency.

                 In the case where the ifType is Fast(125), use
                 noSuchObject."
         ::= { adslAturChanEntry 1 }

         adslAturChanCurrTxRate  OBJECT-TYPE
             SYNTAX      Gauge32
             UNITS       "bps"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Actual transmit rate on this channel."
         ::= { adslAturChanEntry 2 }

         adslAturChanPrevTxRate OBJECT-TYPE
             SYNTAX      Gauge32
             UNITS       "bps"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                "The rate at the time of the last
                 adslAturRateChangeTrap event. It is also set at
                 initialization to prevent a trap being sent.
                 Rate changes less than adslAturThresh(*)RateDown
                 or less than adslAturThresh(*)RateUp will not
                 cause a trap or cause this object to change.
                 (*) == Fast or Interleave.
                 See AdslLineAlarmConfProfileEntry."
         ::= { adslAturChanEntry 3 }

         adslAturChanCrcBlockLength OBJECT-TYPE
             SYNTAX      Gauge32
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Indicates the length of the channel data-block
                 on which the CRC operates.  Refer to Line Code
                 Specific MIBs, [11] and [12] for more
                 information."
         ::= { adslAturChanEntry 4 }

         adslAtucPerfDataTable   OBJECT-TYPE
             SYNTAX          SEQUENCE OF AdslAtucPerfDataEntry
             MAX-ACCESS      not-accessible
             STATUS          current
             DESCRIPTION
                 "This table provides one row for each ATUC.
                 ADSL physical interfaces are
                 those ifEntries where ifType is equal to adsl(94)."
         ::= { adslMibObjects 6 }
         adslAtucPerfDataEntry       OBJECT-TYPE
             SYNTAX          AdslAtucPerfDataEntry
             MAX-ACCESS      not-accessible
             STATUS          current
             DESCRIPTION     "An entry in adslAtucPerfDataTable."
             INDEX           { ifIndex }
         ::= { adslAtucPerfDataTable 1 }

         AdslAtucPerfDataEntry ::=
             SEQUENCE {
             adslAtucPerfLofs                 Counter32,
             adslAtucPerfLoss                 Counter32,
             adslAtucPerfLols                 Counter32,
             adslAtucPerfLprs                 Counter32,
             adslAtucPerfESs                  Counter32,
             adslAtucPerfInits                Counter32,
             adslAtucPerfValidIntervals       INTEGER,
             adslAtucPerfInvalidIntervals     INTEGER,
             adslAtucPerfCurr15MinTimeElapsed AdslPerfTimeElapsed,
             adslAtucPerfCurr15MinLofs        PerfCurrentCount,
             adslAtucPerfCurr15MinLoss        PerfCurrentCount,
             adslAtucPerfCurr15MinLols        PerfCurrentCount,
             adslAtucPerfCurr15MinLprs        PerfCurrentCount,
             adslAtucPerfCurr15MinESs         PerfCurrentCount,
             adslAtucPerfCurr15MinInits       PerfCurrentCount,
             adslAtucPerfCurr1DayTimeElapsed  AdslPerfTimeElapsed,
             adslAtucPerfCurr1DayLofs         AdslPerfCurrDayCount,
             adslAtucPerfCurr1DayLoss         AdslPerfCurrDayCount,
             adslAtucPerfCurr1DayLols         AdslPerfCurrDayCount,
             adslAtucPerfCurr1DayLprs         AdslPerfCurrDayCount,
             adslAtucPerfCurr1DayESs          AdslPerfCurrDayCount,
             adslAtucPerfCurr1DayInits        AdslPerfCurrDayCount,
             adslAtucPerfPrev1DayMoniSecs     INTEGER,
             adslAtucPerfPrev1DayLofs         AdslPerfPrevDayCount,
             adslAtucPerfPrev1DayLoss         AdslPerfPrevDayCount,
             adslAtucPerfPrev1DayLols         AdslPerfPrevDayCount,
             adslAtucPerfPrev1DayLprs         AdslPerfPrevDayCount,
             adslAtucPerfPrev1DayESs          AdslPerfPrevDayCount,
             adslAtucPerfPrev1DayInits        AdslPerfPrevDayCount
             }

         -- Event Counters
         --
         -- Also see adslAtucIntervalTable for 15 minute interval
         -- elapsed counters.
         --
         adslAtucPerfLofs OBJECT-TYPE
             SYNTAX      Counter32
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of the number of Loss of Framing failures since
                 agent reset."
         ::= { adslAtucPerfDataEntry 1 }

         adslAtucPerfLoss  OBJECT-TYPE
             SYNTAX      Counter32
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of the number of Loss of Signal failures since
                 agent reset."
         ::= { adslAtucPerfDataEntry 2 }

okay bestie, the counters keep going and they're giving main character energy πŸ’–

         adslAtucPerfLols OBJECT-TYPE
             SYNTAX      Counter32
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of the number of Loss of Link failures since
                 agent reset."
         ::= { adslAtucPerfDataEntry 3 }

         adslAtucPerfLprs OBJECT-TYPE
             SYNTAX      Counter32
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of the number of Loss of Power failures since
                 agent reset."
         ::= { adslAtucPerfDataEntry 4 }

         adslAtucPerfESs OBJECT-TYPE
             SYNTAX      Counter32
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of the number of Errored Seconds since agent
                 reset.  The errored second parameter is a count of
                 one-second intervals containing one or more crc
                 anomalies, or one or more los or sef defects."
         ::= { adslAtucPerfDataEntry 5 }

         adslAtucPerfInits OBJECT-TYPE
             SYNTAX      Counter32
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of the line initialization attempts since
                 agent reset. Includes both successful and failed
                 attempts."
         ::= { adslAtucPerfDataEntry 6 }

Lols and Lprs count Loss of Link and Loss of Power failures since agent reset πŸ”Œβœ¨ ESs counts errored seconds, where a second counts if it has one or more crc anomalies or one or more los or sef defects 🫢 and Inits counts line initialization attempts, successful and failed both πŸ¦‹


next up: the general 15 min interval info πŸŽ€

         -- general 15 min interval information
         --

         adslAtucPerfValidIntervals OBJECT-TYPE
             SYNTAX      INTEGER(0..96)
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "The number of previous 15-minute intervals in the
                 interval table for which data was collected.  Given
                 that <n> is the maximum # of intervals supported.
                 The value will be <n> unless the measurement was
                 (re-)started within the last (<n>*15) minutes, in which
                 case the value will be the number of complete 15
                 minute intervals for which the agent has at least
                 some data. In certain cases (e.g., in the case
                 where the agent is a proxy) it is possible that some
                 intervals are unavailable.  In this case, this
                 interval is the maximum interval number for
                 which data is available."
         ::= { adslAtucPerfDataEntry 7 }

         adslAtucPerfInvalidIntervals OBJECT-TYPE
             SYNTAX      INTEGER(0..96)
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "The number of intervals in the range from
                 0 to the value of adslAtucPerfValidIntervals
                 for which no data is available. This object
                 will typically be zero except in cases where
                 the data for some intervals are not available
                 (e.g., in proxy situations)."
         ::= { adslAtucPerfDataEntry 8 }

ValidIntervals tells you how many previous 15-minute intervals have data, and InvalidIntervals counts the ones in that range where there's none 🌸 the proxy situations get a special shout-out πŸ™ˆ


now the 15 min current performance group πŸ“

         -- 15 min current performance group
         --
         adslAtucPerfCurr15MinTimeElapsed OBJECT-TYPE
             SYNTAX      AdslPerfTimeElapsed(0..899)
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Total elapsed seconds in this interval."
         ::= { adslAtucPerfDataEntry 9 }

         adslAtucPerfCurr15MinLofs OBJECT-TYPE
             SYNTAX      PerfCurrentCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of seconds in the current 15 minute interval
                 when there was Loss of Framing."
         ::= { adslAtucPerfDataEntry 10 }

         adslAtucPerfCurr15MinLoss  OBJECT-TYPE
             SYNTAX      PerfCurrentCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of seconds in the current 15 minute interval
                 when there was Loss of Signal."
         ::= { adslAtucPerfDataEntry 11 }

         adslAtucPerfCurr15MinLols  OBJECT-TYPE
             SYNTAX      PerfCurrentCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of seconds in the current 15 minute interval
                 when there was Loss of Link."
         ::= { adslAtucPerfDataEntry 12 }

         adslAtucPerfCurr15MinLprs  OBJECT-TYPE
             SYNTAX      PerfCurrentCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of seconds in the current 15 minute interval
                 when there was Loss of Power."
         ::= { adslAtucPerfDataEntry 13 }

         adslAtucPerfCurr15MinESs OBJECT-TYPE
             SYNTAX      PerfCurrentCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of Errored Seconds in the current 15 minute
                 interval.  The errored second parameter is a count of
                 one-second intervals containing one or more crc
                 anomalies, or one or more los or sef defects."
         ::= { adslAtucPerfDataEntry 14 }

         adslAtucPerfCurr15MinInits  OBJECT-TYPE
             SYNTAX      PerfCurrentCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of the line initialization attempts in the
                 current 15 minute interval. Includes both successful
                 and failed attempts."
         ::= { adslAtucPerfDataEntry 15 }

This group is the current 15-minute snapshot πŸ“Š TimeElapsed tracks the seconds so far in this interval, and then you get the same Lofs, Loss, Lols, Lprs, ESs and Inits vibes, but counted only inside this current window πŸ’…


and the 1-day current and previous performance group 🧚

         -- 1-day current and previous performance group
         --
         adslAtucPerfCurr1DayTimeElapsed OBJECT-TYPE
             SYNTAX      AdslPerfTimeElapsed(0..86399)
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Number of seconds that have elapsed since the
                 beginning of the current 1-day interval."
         ::= { adslAtucPerfDataEntry 16 }

         adslAtucPerfCurr1DayLofs  OBJECT-TYPE
             SYNTAX      AdslPerfCurrDayCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of the number of seconds when there was Loss of
                 Framing during the current day as measured by
                 adslAtucPerfCurr1DayTimeElapsed."
         ::= { adslAtucPerfDataEntry 17 }

         adslAtucPerfCurr1DayLoss  OBJECT-TYPE
             SYNTAX      AdslPerfCurrDayCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION

                 "Count of the number of seconds when there was Loss of
                 Signal during the current day as measured by
                 adslAtucPerfCurr1DayTimeElapsed."
         ::= { adslAtucPerfDataEntry 18 }

         adslAtucPerfCurr1DayLols  OBJECT-TYPE
             SYNTAX      AdslPerfCurrDayCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of the number of seconds when there was Loss of
                 Link during the current day as measured by
                 adslAtucPerfCurr1DayTimeElapsed."
         ::= { adslAtucPerfDataEntry 19 }

         adslAtucPerfCurr1DayLprs  OBJECT-TYPE
             SYNTAX      AdslPerfCurrDayCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of the number of seconds when there was Loss of
                 Power during the current day as measured by
                 adslAtucPerfCurr1DayTimeElapsed."
         ::= { adslAtucPerfDataEntry 20 }

         adslAtucPerfCurr1DayESs OBJECT-TYPE
             SYNTAX      AdslPerfCurrDayCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of Errored Seconds during the current day as
                 measured by adslAtucPerfCurr1DayTimeElapsed.
                 The errored second parameter is a count of
                 one-second intervals containing one or more crc
                 anomalies, or one or more los or sef defects."
         ::= { adslAtucPerfDataEntry 21 }

         adslAtucPerfCurr1DayInits  OBJECT-TYPE
             SYNTAX      AdslPerfCurrDayCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of the line initialization attempts in the
                 day as measured by adslAtucPerfCurr1DayTimeElapsed.
                 Includes both successful and failed attempts."

         ::= { adslAtucPerfDataEntry 22 }

         adslAtucPerfPrev1DayMoniSecs OBJECT-TYPE
             SYNTAX      INTEGER(0..86400)
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "The amount of time in the previous 1-day interval
                 over which the performance monitoring information
                 is actually counted. This value will be the same as
                 the interval duration except in a situation where
                 performance monitoring data could not be collected
                 for any reason."
         ::= { adslAtucPerfDataEntry 23 }

         adslAtucPerfPrev1DayLofs  OBJECT-TYPE
             SYNTAX      AdslPerfPrevDayCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of seconds in the interval when there was
                 Loss of Framing within the most recent previous
                 1-day period."
         ::= { adslAtucPerfDataEntry 24 }

         adslAtucPerfPrev1DayLoss  OBJECT-TYPE
             SYNTAX      AdslPerfPrevDayCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of seconds in the interval when there was
                 Loss of Signal within the most recent previous
                 1-day period."
         ::= { adslAtucPerfDataEntry 25 }

         adslAtucPerfPrev1DayLols  OBJECT-TYPE
             SYNTAX      AdslPerfPrevDayCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of seconds in the interval when there was
                 Loss of Link within the most recent previous
                 1-day period."
         ::= { adslAtucPerfDataEntry 26 }
         adslAtucPerfPrev1DayLprs  OBJECT-TYPE
             SYNTAX      AdslPerfPrevDayCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of seconds in the interval when there was
                 Loss of Power within the most recent previous
                 1-day period."
         ::= { adslAtucPerfDataEntry 27 }

The 1-day current group counts the same kinds of events, but across the current day, with Curr1DayTimeElapsed as the clock πŸ•°οΈ then the previous-day group adds Prev1DayMoniSecs, which tells you how long performance monitoring actually ran in the previous 1-day interval, plus the Lofs, Loss, Lols and Lprs counts for that period 🌈 it's giving organised, periodt πŸ‘‘

okay so the first bit is the ATUC's previous-day counters πŸŽ€ ESs means errored seconds, and Inits counts line initialization attempts, successful or not πŸ’…

         adslAtucPerfPrev1DayESs OBJECT-TYPE
             SYNTAX      AdslPerfPrevDayCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of Errored Seconds within the most recent
                 previous 1-day period. The errored second parameter is
                 a count of one-second intervals containing one or more
                 crc anomalies, or one or more los or sef defects."
         ::= { adslAtucPerfDataEntry 28 }

         adslAtucPerfPrev1DayInits  OBJECT-TYPE
             SYNTAX      AdslPerfPrevDayCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of the line initialization attempts in the most
                 recent previous 1-day period. Includes both successful
                 and failed attempts."
         ::= { adslAtucPerfDataEntry 29 }

next up: the ATUR side! πŸ¦‹ This table gets one row for each ATUR, and the rows live under the ifEntries whose ifType is adsl(94) ✨

         adslAturPerfDataTable   OBJECT-TYPE
             SYNTAX          SEQUENCE OF AdslAturPerfDataEntry
             MAX-ACCESS      not-accessible
             STATUS          current
             DESCRIPTION
                 "This table provides one row for each ATUR.
                 ADSL physical interfaces are
                 those ifEntries where ifType is equal to adsl(94)."
         ::= { adslMibObjects 7 }

         adslAturPerfDataEntry       OBJECT-TYPE
             SYNTAX          AdslAturPerfDataEntry
             MAX-ACCESS      not-accessible
             STATUS          current
             DESCRIPTION     "An entry in adslAturPerfDataTable."
             INDEX           { ifIndex }
         ::= { adslAturPerfDataTable 1 }

         AdslAturPerfDataEntry ::=
             SEQUENCE {
             adslAturPerfLofs                 Counter32,
             adslAturPerfLoss                 Counter32,
             adslAturPerfLprs                 Counter32,
             adslAturPerfESs                  Counter32,
             adslAturPerfValidIntervals       INTEGER,
             adslAturPerfInvalidIntervals     INTEGER,
             adslAturPerfCurr15MinTimeElapsed AdslPerfTimeElapsed,
             adslAturPerfCurr15MinLofs        PerfCurrentCount,
             adslAturPerfCurr15MinLoss        PerfCurrentCount,
             adslAturPerfCurr15MinLprs        PerfCurrentCount,
             adslAturPerfCurr15MinESs         PerfCurrentCount,
             adslAturPerfCurr1DayTimeElapsed  AdslPerfTimeElapsed,
             adslAturPerfCurr1DayLofs         AdslPerfCurrDayCount,
             adslAturPerfCurr1DayLoss         AdslPerfCurrDayCount,
             adslAturPerfCurr1DayLprs         AdslPerfCurrDayCount,
             adslAturPerfCurr1DayESs          AdslPerfCurrDayCount,
             adslAturPerfPrev1DayMoniSecs     INTEGER,
             adslAturPerfPrev1DayLofs         AdslPerfPrevDayCount,
             adslAturPerfPrev1DayLoss         AdslPerfPrevDayCount,
             adslAturPerfPrev1DayLprs         AdslPerfPrevDayCount,
             adslAturPerfPrev1DayESs          AdslPerfPrevDayCount
             }

these are the raw event counters, the ones that just keep counting since the agent reset 🌸 (the 15 minute interval stuff lives in adslAturIntervalTable, so peek there too!) πŸ’–

         -- Event (Raw) Counters
         --
         -- Also see adslAturIntervalTable for 15 minute interval
         -- elapsed counters.
         --
         adslAturPerfLofs OBJECT-TYPE
             SYNTAX      Counter32
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of the number of Loss of Framing failures since
                 agent reset."
         ::= { adslAturPerfDataEntry 1 }

         adslAturPerfLoss  OBJECT-TYPE
             SYNTAX      Counter32
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of the number of Loss of Signal failures since
                 agent reset."
         ::= { adslAturPerfDataEntry 2 }

        adslAturPerfLprs  OBJECT-TYPE
             SYNTAX      Counter32
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of the number of Loss of Power failures since
                 agent reset."
         ::= { adslAturPerfDataEntry 3 }

         adslAturPerfESs  OBJECT-TYPE
             SYNTAX      Counter32
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of the number of Errored Seconds since agent
                 reset.  The errored second parameter is a count of
                 one-second intervals containing one or more crc
                 anomalies, or one or more los or sef defects."
         ::= { adslAturPerfDataEntry 4 }

general 15 min interval info time 🧚 these two tell you how many intervals have data, and how many are missing (proxies, I'm looking at you) πŸ™ˆ

         -- general 15 min interval information
         --
         adslAturPerfValidIntervals OBJECT-TYPE
             SYNTAX      INTEGER(0..96)
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "The number of previous 15-minute intervals in the
                 interval table for which data was collected.  Given
                 that <n> is the maximum # of intervals supported.
                 The value will be <n> unless the measurement was
                 (re-)started within the last (<n>*15) minutes, in which
                 case the value will be the number of complete 15
                 minute intervals for which the agent has at least
                 some data. In certain cases (e.g., in the case
                 where the agent is a proxy) it is possible that some
                 intervals are unavailable.  In this case, this
                 interval is the maximum interval number for
                 which data is available."
         ::= { adslAturPerfDataEntry 5 }
         adslAturPerfInvalidIntervals OBJECT-TYPE
             SYNTAX      INTEGER(0..96)
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "The number of intervals in the range from
                 0 to the value of adslAturPerfValidIntervals
                 for which no data is available. This object
                 will typically be zero except in cases where
                 the data for some intervals are not available
                 (e.g., in proxy situations)."
         ::= { adslAturPerfDataEntry 6 }

current 15 minute group πŸ“ this is the live bucket that's still filling up ✨

         -- 15 min current performance group
         --
         adslAturPerfCurr15MinTimeElapsed OBJECT-TYPE
             SYNTAX      AdslPerfTimeElapsed(0..899)
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Total elapsed seconds in this interval."
         ::= { adslAturPerfDataEntry 7 }

         adslAturPerfCurr15MinLofs OBJECT-TYPE
             SYNTAX      PerfCurrentCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of seconds in the current 15 minute interval
                 when there was Loss of Framing."
         ::= { adslAturPerfDataEntry 8 }

         adslAturPerfCurr15MinLoss  OBJECT-TYPE
             SYNTAX      PerfCurrentCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of seconds in the current 15 minute interval
                 when there was Loss of Signal."
         ::= { adslAturPerfDataEntry 9 }

         adslAturPerfCurr15MinLprs  OBJECT-TYPE
             SYNTAX      PerfCurrentCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of seconds in the current 15 minute interval
                 when there was Loss of Power."
         ::= { adslAturPerfDataEntry 10 }

         adslAturPerfCurr15MinESs OBJECT-TYPE
             SYNTAX      PerfCurrentCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                "Count of Errored Seconds in the current 15 minute
                interval.  The errored second parameter is a count of
                one-second intervals containing one or more crc
                anomalies, or one or more los or sef defects."

         ::= { adslAturPerfDataEntry 11 }

the 1-day current and previous groups are next, and yes, the day counters have their own whole vibe πŸ‘‘ πŸ”₯

         -- 1-day current and previous performance group
         --
         adslAturPerfCurr1DayTimeElapsed OBJECT-TYPE
             SYNTAX      AdslPerfTimeElapsed(0..86399)
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Number of seconds that have elapsed since the
                 beginning of the current 1-day interval."
         ::= { adslAturPerfDataEntry 12 }

         adslAturPerfCurr1DayLofs  OBJECT-TYPE
             SYNTAX      AdslPerfCurrDayCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of the number of seconds when there was Loss
                 of Framing during the current day as measured by
                 adslAturPerfCurr1DayTimeElapsed."
         ::= { adslAturPerfDataEntry 13 }

         adslAturPerfCurr1DayLoss  OBJECT-TYPE
             SYNTAX      AdslPerfCurrDayCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION

                 "Count of the number of seconds when there was Loss
                 of Signal during the current day as measured by
                 adslAturPerfCurr1DayTimeElapsed."
         ::= { adslAturPerfDataEntry 14 }

         adslAturPerfCurr1DayLprs  OBJECT-TYPE
             SYNTAX      AdslPerfCurrDayCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of the number of seconds when there was Loss
                 of Power during the current day as measured by
                 adslAturPerfCurr1DayTimeElapsed."
         ::= { adslAturPerfDataEntry 15 }

    adslAturPerfCurr1DayESs OBJECT-TYPE
             SYNTAX      AdslPerfCurrDayCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of Errored Seconds during the current day as
                 measured by adslAturPerfCurr1DayTimeElapsed.
                 The errored second parameter is a count of
                 one-second intervals containing one or more crc
                 anomalies, or one or more los or sef defects."
         ::= { adslAturPerfDataEntry 16 }

         adslAturPerfPrev1DayMoniSecs OBJECT-TYPE
             SYNTAX      INTEGER(0..86400)
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "The amount of time in the previous 1-day interval
                 over which the performance monitoring information
                 is actually counted. This value will be the same as
                 the interval duration except in a situation where
                 performance monitoring data could not be collected
                 for any reason."
         ::= { adslAturPerfDataEntry 17 }

         adslAturPerfPrev1DayLofs  OBJECT-TYPE
             SYNTAX      AdslPerfPrevDayCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of seconds in the interval when there was
                 Loss of Framing within the most recent previous
                 1-day period."
         ::= { adslAturPerfDataEntry 18 }

okay so this next bit is all about the performance counters bestie, the stuff that keeps track of what your line has been up to πŸ’…πŸŽ€ we've got the previous-1-day counts for the ATUR side, then the ATUC and ATUR interval tables (96 buckets, up to 24 hours back πŸ•), then the ATUC channel table kicking things off πŸ¦‹

         adslAturPerfPrev1DayLoss  OBJECT-TYPE
             SYNTAX      AdslPerfPrevDayCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of seconds in the interval when there was
                 Loss of Signal within the most recent previous
                 1-day period."
         ::= { adslAturPerfDataEntry 19 }

         adslAturPerfPrev1DayLprs  OBJECT-TYPE
             SYNTAX      AdslPerfPrevDayCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of seconds in the interval when there was
                 Loss of Power within the most recent previous
                 1-day period."
         ::= { adslAturPerfDataEntry 20 }

         adslAturPerfPrev1DayESs OBJECT-TYPE
             SYNTAX      AdslPerfPrevDayCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of Errored Seconds within the most recent
                 previous 1-day period. The errored second parameter is
                 a count of one-second intervals containing one or more
                 crc anomalies, or one or more los or sef defects."
         ::= { adslAturPerfDataEntry 21 }

         adslAtucIntervalTable   OBJECT-TYPE
             SYNTAX          SEQUENCE OF AdslAtucIntervalEntry
             MAX-ACCESS      not-accessible
             STATUS          current
             DESCRIPTION
                 "This table provides one row for each ATUC
                 performance data collection interval.
                 ADSL physical interfaces are
                 those ifEntries where ifType is equal to adsl(94)."
         ::= { adslMibObjects 8 }

         adslAtucIntervalEntry   OBJECT-TYPE
             SYNTAX          AdslAtucIntervalEntry
             MAX-ACCESS      not-accessible
             STATUS          current
             DESCRIPTION     "An entry in the adslAtucIntervalTable."
             INDEX           { ifIndex, adslAtucIntervalNumber }
         ::= { adslAtucIntervalTable 1 }

         AdslAtucIntervalEntry ::=
             SEQUENCE {
             adslAtucIntervalNumber          INTEGER,
             adslAtucIntervalLofs            PerfIntervalCount,
             adslAtucIntervalLoss            PerfIntervalCount,
             adslAtucIntervalLols            PerfIntervalCount,
             adslAtucIntervalLprs            PerfIntervalCount,
             adslAtucIntervalESs             PerfIntervalCount,
             adslAtucIntervalInits           PerfIntervalCount,
             adslAtucIntervalValidData       TruthValue
             }

         adslAtucIntervalNumber OBJECT-TYPE
             SYNTAX      INTEGER(1..96)
             MAX-ACCESS  not-accessible
             STATUS      current
             DESCRIPTION
                 "Performance Data Interval number 1 is the
                 the most recent previous interval; interval
                 96 is 24 hours ago.  Intervals 2..96 are
                 optional."
         ::= { adslAtucIntervalEntry 1 }

         adslAtucIntervalLofs OBJECT-TYPE
             SYNTAX      PerfIntervalCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of seconds in the interval when there was Loss
                 of Framing."
         ::= { adslAtucIntervalEntry 2 }

         adslAtucIntervalLoss  OBJECT-TYPE
             SYNTAX      PerfIntervalCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of seconds in the interval when there was Loss
                 of Signal."
         ::= { adslAtucIntervalEntry 3 }

         adslAtucIntervalLols  OBJECT-TYPE
             SYNTAX      PerfIntervalCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of seconds in the interval when there was Loss
                 of Link."
         ::= { adslAtucIntervalEntry 4 }

         adslAtucIntervalLprs  OBJECT-TYPE
             SYNTAX      PerfIntervalCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of seconds in the interval when there was Loss
                 of Power."
         ::= { adslAtucIntervalEntry 5 }

         adslAtucIntervalESs OBJECT-TYPE
             SYNTAX      PerfIntervalCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of Errored Seconds in the interval.
                 The errored second parameter is a count of
                 one-second intervals containing one or more crc
                 anomalies, or one or more los or sef defects."
         ::= { adslAtucIntervalEntry 6 }

         adslAtucIntervalInits  OBJECT-TYPE
             SYNTAX      PerfIntervalCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of the line initialization attempts
                 during the interval. Includes both successful
                 and failed attempts."
         ::= { adslAtucIntervalEntry 7 }
         adslAtucIntervalValidData OBJECT-TYPE
             SYNTAX TruthValue
             MAX-ACCESS read-only
             STATUS current
             DESCRIPTION
                 "This variable indicates if the data for this
                 interval is valid."
         ::= { adslAtucIntervalEntry 8 }

         adslAturIntervalTable   OBJECT-TYPE
             SYNTAX          SEQUENCE OF AdslAturIntervalEntry
             MAX-ACCESS      not-accessible
             STATUS          current
             DESCRIPTION
                 "This table provides one row for each ATUR
                 performance data collection interval.
                 ADSL physical interfaces are those
                 ifEntries where ifType is equal to adsl(94)."
         ::= { adslMibObjects 9 }

         adslAturIntervalEntry   OBJECT-TYPE
             SYNTAX          AdslAturIntervalEntry
             MAX-ACCESS      not-accessible
             STATUS          current
             DESCRIPTION     "An entry in the adslAturIntervalTable."
             INDEX           { ifIndex, adslAturIntervalNumber }
         ::= { adslAturIntervalTable 1 }

         AdslAturIntervalEntry ::=
             SEQUENCE {
             adslAturIntervalNumber          INTEGER,
             adslAturIntervalLofs            PerfIntervalCount,
             adslAturIntervalLoss            PerfIntervalCount,
             adslAturIntervalLprs            PerfIntervalCount,
             adslAturIntervalESs             PerfIntervalCount,
             adslAturIntervalValidData       TruthValue
             }

         adslAturIntervalNumber OBJECT-TYPE
             SYNTAX      INTEGER(1..96)
             MAX-ACCESS  not-accessible
             STATUS      current
             DESCRIPTION
                 "Performance Data Interval number 1 is the
                 the most recent previous interval; interval
                 96 is 24 hours ago.  Intervals 2..96 are
                 optional."
         ::= { adslAturIntervalEntry 1 }
         adslAturIntervalLofs OBJECT-TYPE
             SYNTAX      PerfIntervalCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of seconds in the interval when there was
                 Loss of Framing."
         ::= { adslAturIntervalEntry 2 }

         adslAturIntervalLoss  OBJECT-TYPE
             SYNTAX      PerfIntervalCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of seconds in the interval when there was
                 Loss of Signal."
         ::= { adslAturIntervalEntry 3 }

         adslAturIntervalLprs  OBJECT-TYPE
             SYNTAX      PerfIntervalCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of seconds in the interval when there was
                 Loss of Power."
         ::= { adslAturIntervalEntry 4 }

         adslAturIntervalESs OBJECT-TYPE
             SYNTAX      PerfIntervalCount
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of Errored Seconds in the interval.
                 The errored second parameter is a count of
                 one-second intervals containing one or more crc
                 anomalies, or one or more los or sef defects."
         ::= { adslAturIntervalEntry 5 }

         adslAturIntervalValidData OBJECT-TYPE
             SYNTAX TruthValue
             MAX-ACCESS read-only
             STATUS current
             DESCRIPTION
                 "This variable indicates if the data for this
                 interval is valid."
         ::= { adslAturIntervalEntry 6 }

         adslAtucChanPerfDataTable       OBJECT-TYPE
             SYNTAX          SEQUENCE OF AdslAtucChanPerfDataEntry
             MAX-ACCESS      not-accessible
             STATUS          current
             DESCRIPTION
                 "This table provides one row for each ATUC channel.
                 ADSL channel interfaces are those ifEntries
                 where ifType is equal to adslInterleave(124)
                 or adslFast(125)."
         ::= { adslMibObjects 10 }

         adslAtucChanPerfDataEntry       OBJECT-TYPE

             SYNTAX          AdslAtucChanPerfDataEntry
             MAX-ACCESS      not-accessible
             STATUS          current
             DESCRIPTION     "An entry in adslAtucChanPerfDataTable."
             INDEX           { ifIndex }
         ::= { adslAtucChanPerfDataTable 1 }

Okay bestie, this is where the ATUC channel gets its whole performance report card πŸ“Šβœ¨ The Entry is the row, and every column in it is a counter or a timer, so let's go through it step by step πŸ’…

         AdslAtucChanPerfDataEntry ::=
          SEQUENCE {
          adslAtucChanReceivedBlks                 Counter32,
          adslAtucChanTransmittedBlks              Counter32,
          adslAtucChanCorrectedBlks                Counter32,
          adslAtucChanUncorrectBlks                Counter32,
          adslAtucChanPerfValidIntervals           INTEGER,
          adslAtucChanPerfInvalidIntervals         INTEGER,
          adslAtucChanPerfCurr15MinTimeElapsed     AdslPerfTimeElapsed,
          adslAtucChanPerfCurr15MinReceivedBlks    PerfCurrentCount,
          adslAtucChanPerfCurr15MinTransmittedBlks PerfCurrentCount,
          adslAtucChanPerfCurr15MinCorrectedBlks   PerfCurrentCount,
          adslAtucChanPerfCurr15MinUncorrectBlks   PerfCurrentCount,
          adslAtucChanPerfCurr1DayTimeElapsed      AdslPerfTimeElapsed,
          adslAtucChanPerfCurr1DayReceivedBlks     AdslPerfCurrDayCount,
          adslAtucChanPerfCurr1DayTransmittedBlks  AdslPerfCurrDayCount,
          adslAtucChanPerfCurr1DayCorrectedBlks    AdslPerfCurrDayCount,
          adslAtucChanPerfCurr1DayUncorrectBlks    AdslPerfCurrDayCount,
          adslAtucChanPerfPrev1DayMoniSecs         INTEGER,
          adslAtucChanPerfPrev1DayReceivedBlks     AdslPerfPrevDayCount,
          adslAtucChanPerfPrev1DayTransmittedBlks  AdslPerfPrevDayCount,
          adslAtucChanPerfPrev1DayCorrectedBlks    AdslPerfPrevDayCount,
          adslAtucChanPerfPrev1DayUncorrectBlks    AdslPerfPrevDayCount
         }
         -- performance group
         --
         -- Note: block is intended to be the length of the channel
         --       data-block on which the CRC operates. See
         --       adslAtucChanCrcBlockLength for more information.
         --
         adslAtucChanReceivedBlks OBJECT-TYPE
             SYNTAX      Counter32
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all encoded blocks received on this channel
                 since agent reset."
         ::= { adslAtucChanPerfDataEntry 1 }

         adslAtucChanTransmittedBlks  OBJECT-TYPE
             SYNTAX      Counter32
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all encoded blocks transmitted on this
                 channel since agent reset."
         ::= { adslAtucChanPerfDataEntry 2 }

         adslAtucChanCorrectedBlks  OBJECT-TYPE
             SYNTAX      Counter32
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all blocks received with errors that were
                 corrected since agent reset.  These blocks are passed
                 on as good data."
         ::= { adslAtucChanPerfDataEntry 3 }

         adslAtucChanUncorrectBlks  OBJECT-TYPE
             SYNTAX      Counter32
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all blocks received with uncorrectable
                 errors since agent reset."
         ::= { adslAtucChanPerfDataEntry 4 }

So the first four columns are the lifetime totals since the agent was reset 🌸 Received, transmitted, corrected and uncorrectable blocks, all counted up from the reset. Corrected blocks are the ones that had errors but got fixed, and they're passed on as good data 🫢

         -- general 15 min interval information
         --
         adslAtucChanPerfValidIntervals OBJECT-TYPE
             SYNTAX      INTEGER(0..96)
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "The number of previous 15-minute intervals in the
                 interval table for which data was collected.  Given
                 that <n> is the maximum # of intervals supported.
                 The value will be <n> unless the measurement was
                 (re-)started within the last (<n>*15) minutes, in which
                 case the value will be the number of complete 15
                 minute intervals for which the agent has at least
                 some data. In certain cases (e.g., in the case
                 where the agent is a proxy) it is possible that some
                 intervals are unavailable.  In this case, this
                 interval is the maximum interval number for
                 which data is available."
         ::= { adslAtucChanPerfDataEntry 5 }

         adslAtucChanPerfInvalidIntervals OBJECT-TYPE
             SYNTAX      INTEGER(0..96)
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "The number of intervals in the range from
                 0 to the value of adslAtucChanPerfValidIntervals
                 for which no data is available. This object
                 will typically be zero except in cases where
                 the data for some intervals are not available
                 (e.g., in proxy situations)."
         ::= { adslAtucChanPerfDataEntry 6 }

Now the 15-minute interval stuff πŸ•’ The valid intervals column is a 0 to 96 count, which makes sense because 96 quarter-hours is a full day 🧚 The invalid one counts the intervals in that range that have no data, and it's usually zero unless something like a proxy is hiding some of them πŸ‘€

         -- 15 min current performance group
         --
         adslAtucChanPerfCurr15MinTimeElapsed OBJECT-TYPE
             SYNTAX      AdslPerfTimeElapsed(0..899)
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Total elapsed seconds in this interval."
         ::= { adslAtucChanPerfDataEntry 7 }

         adslAtucChanPerfCurr15MinReceivedBlks OBJECT-TYPE
             SYNTAX      PerfCurrentCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all encoded blocks received on this channel
                 within the current 15 minute interval."
         ::= { adslAtucChanPerfDataEntry 8 }
         adslAtucChanPerfCurr15MinTransmittedBlks OBJECT-TYPE
             SYNTAX      PerfCurrentCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all encoded blocks transmitted on this
                 channel within the current 15 minute interval."
         ::= { adslAtucChanPerfDataEntry 9 }

         adslAtucChanPerfCurr15MinCorrectedBlks  OBJECT-TYPE
             SYNTAX      PerfCurrentCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all blocks received with errors that were
                 corrected on this channel within the current 15 minute
                 interval."
         ::= { adslAtucChanPerfDataEntry 10 }

         adslAtucChanPerfCurr15MinUncorrectBlks  OBJECT-TYPE
             SYNTAX      PerfCurrentCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all blocks received with uncorrectable
                 errors on this channel within the current 15 minute
                 interval."
         ::= { adslAtucChanPerfDataEntry 11 }

Next up is the current 15-minute group, which is the live scoreboard for the interval you're in right now πŸ”₯ It has its own elapsed-seconds timer that tops out at 899, plus the same four block counters, just scoped to this one quarter-hour πŸ’–

         -- 1-day current and previous performance group
         --
         adslAtucChanPerfCurr1DayTimeElapsed OBJECT-TYPE
             SYNTAX      AdslPerfTimeElapsed(0..86399)
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Number of seconds that have elapsed since the
                 beginning of the current 1-day interval."
         ::= { adslAtucChanPerfDataEntry 12 }

         adslAtucChanPerfCurr1DayReceivedBlks  OBJECT-TYPE
             SYNTAX      AdslPerfCurrDayCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all encoded blocks received on this
                 channel during the current day as measured by
                 adslAtucChanPerfCurr1DayTimeElapsed."
         ::= { adslAtucChanPerfDataEntry 13 }

         adslAtucChanPerfCurr1DayTransmittedBlks  OBJECT-TYPE
             SYNTAX      AdslPerfCurrDayCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all encoded blocks transmitted on this
                 channel during the current day as measured by
                 adslAtucChanPerfCurr1DayTimeElapsed."
         ::= { adslAtucChanPerfDataEntry 14 }

         adslAtucChanPerfCurr1DayCorrectedBlks  OBJECT-TYPE
             SYNTAX      AdslPerfCurrDayCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all blocks received with errors that were
                 corrected on this channel during the current day as
                 measured by adslAtucChanPerfCurr1DayTimeElapsed."
         ::= { adslAtucChanPerfDataEntry 15 }

         adslAtucChanPerfCurr1DayUncorrectBlks  OBJECT-TYPE
             SYNTAX      AdslPerfCurrDayCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all blocks received with uncorrectable
                 errors on this channel during the current day as
                 measured by adslAtucChanPerfCurr1DayTimeElapsed."
         ::= { adslAtucChanPerfDataEntry 16 }

         adslAtucChanPerfPrev1DayMoniSecs OBJECT-TYPE
             SYNTAX      INTEGER(0..86400)
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "The amount of time in the previous 1-day interval
                 over which the performance monitoring information
                 is actually counted. This value will be the same as
                 the interval duration except in a situation where
                 performance monitoring data could not be collected
                 for any reason."
         ::= { adslAtucChanPerfDataEntry 17 }

         adslAtucChanPerfPrev1DayReceivedBlks  OBJECT-TYPE

             SYNTAX      AdslPerfPrevDayCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all encoded blocks received on this
                 channel within the most recent previous 1-day
                 period."
         ::= { adslAtucChanPerfDataEntry 18 }

         adslAtucChanPerfPrev1DayTransmittedBlks  OBJECT-TYPE
             SYNTAX      AdslPerfPrevDayCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all encoded blocks transmitted on this
                 channel within the most recent previous 1-day
                 period."
         ::= { adslAtucChanPerfDataEntry 19 }

         adslAtucChanPerfPrev1DayCorrectedBlks  OBJECT-TYPE
             SYNTAX      AdslPerfPrevDayCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all blocks received with errors that were
                 corrected on this channel within the most recent
                 previous 1-day period."
         ::= { adslAtucChanPerfDataEntry 20 }

         adslAtucChanPerfPrev1DayUncorrectBlks  OBJECT-TYPE
             SYNTAX      AdslPerfPrevDayCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all blocks received with uncorrectable
                 errors on this channel within the most recent previous
                 1-day period."
         ::= { adslAtucChanPerfDataEntry 21 }

And then we've got the day-sized views 🌈 There's a current-day group with its own seconds timer (counting up to 86399, so basically a whole day), and a previous-day group that adds a monitored-seconds column so you can see how long the data was actually collected for πŸ¦‹ Same four counters in each, just on a bigger timeline πŸ’…

         adslAturChanPerfDataTable       OBJECT-TYPE
             SYNTAX          SEQUENCE OF AdslAturChanPerfDataEntry
             MAX-ACCESS      not-accessible
             STATUS          current
             DESCRIPTION
                 "This table provides one row for each ATUR channel.
                 ADSL channel interfaces are those ifEntries
                 where ifType is equal to adslInterleave(124)
                 or adslFast(125)."

         ::= { adslMibObjects 11 }

Okay bestie, this is the ATU-R channel performance row πŸ’… Every counter here is indexed by ifIndex, and each one is tracked for the current 15-minute interval, the current day, and the previous day πŸ¦‹

         adslAturChanPerfDataEntry       OBJECT-TYPE
             SYNTAX          AdslAturChanPerfDataEntry
             MAX-ACCESS      not-accessible
             STATUS          current
             DESCRIPTION     "An entry in adslAturChanPerfDataTable."
             INDEX           { ifIndex }
         ::= { adslAturChanPerfDataTable 1 }

         AdslAturChanPerfDataEntry ::=
          SEQUENCE {
          adslAturChanReceivedBlks                 Counter32,
          adslAturChanTransmittedBlks              Counter32,
          adslAturChanCorrectedBlks                Counter32,
          adslAturChanUncorrectBlks                Counter32,
          adslAturChanPerfValidIntervals           INTEGER,
          adslAturChanPerfInvalidIntervals         INTEGER,
          adslAturChanPerfCurr15MinTimeElapsed     AdslPerfTimeElapsed,
          adslAturChanPerfCurr15MinReceivedBlks    PerfCurrentCount,
          adslAturChanPerfCurr15MinTransmittedBlks PerfCurrentCount,
          adslAturChanPerfCurr15MinCorrectedBlks   PerfCurrentCount,
          adslAturChanPerfCurr15MinUncorrectBlks   PerfCurrentCount,
          adslAturChanPerfCurr1DayTimeElapsed      AdslPerfTimeElapsed,
          adslAturChanPerfCurr1DayReceivedBlks     AdslPerfCurrDayCount,
          adslAturChanPerfCurr1DayTransmittedBlks  AdslPerfCurrDayCount,
          adslAturChanPerfCurr1DayCorrectedBlks    AdslPerfCurrDayCount,
          adslAturChanPerfCurr1DayUncorrectBlks    AdslPerfCurrDayCount,
          adslAturChanPerfPrev1DayMoniSecs         INTEGER,
          adslAturChanPerfPrev1DayReceivedBlks     AdslPerfPrevDayCount,
          adslAturChanPerfPrev1DayTransmittedBlks  AdslPerfPrevDayCount,
          adslAturChanPerfPrev1DayCorrectedBlks    AdslPerfPrevDayCount,
          adslAturChanPerfPrev1DayUncorrectBlks    AdslPerfPrevDayCount
          }
         -- performance group
         --
         -- Note: block is intended to be the length of the channel
         --       data-block on which the CRC operates. See
         --       adslAturChanCrcBlockLength for more information.
         --

Okay so the block-count stuff comes first, and there's a little note saying "block" means the channel data-block the CRC runs over, so go look at adslAturChanCrcBlockLength if you want the details 🧚

         adslAturChanReceivedBlks OBJECT-TYPE
             SYNTAX      Counter32
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all encoded blocks received on this channel
                 since agent reset."
         ::= { adslAturChanPerfDataEntry 1 }
         adslAturChanTransmittedBlks  OBJECT-TYPE
             SYNTAX      Counter32
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all encoded blocks transmitted on this
                 channel since agent reset."
         ::= { adslAturChanPerfDataEntry 2 }

         adslAturChanCorrectedBlks  OBJECT-TYPE
             SYNTAX      Counter32
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all blocks received with errors that were
                 corrected since agent reset.  These blocks are passed
                 on as good data."
         ::= { adslAturChanPerfDataEntry 3 }

         adslAturChanUncorrectBlks  OBJECT-TYPE
             SYNTAX      Counter32
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all blocks received with uncorrectable
                 errors since agent reset."
         ::= { adslAturChanPerfDataEntry 4 }

These four are the lifetime totals, all counted from the last agent reset. Received, transmitted, corrected, and uncorrectable πŸŽ€ The corrected ones are the fixed-up blocks that get passed on as good data, which is kind of iconic ngl ✨

         -- general 15 min interval information
         --
         adslAturChanPerfValidIntervals OBJECT-TYPE
             SYNTAX      INTEGER(0..96)
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "The number of previous 15-minute intervals in the
                 interval table for which data was collected.  Given
                 that <n> is the maximum # of intervals supported.
                 The value will be <n> unless the measurement was
                 (re-)started within the last (<n>*15) minutes, in which
                 case the value will be the number of complete 15
                 minute intervals for which the agent has at least
                 some data. In certain cases (e.g., in the case
                 where the agent is a proxy) it is possible that some
                 intervals are unavailable.  In this case, this
                 interval is the maximum interval number for
                 which data is available."
         ::= { adslAturChanPerfDataEntry 5 }
         adslAturChanPerfInvalidIntervals OBJECT-TYPE
             SYNTAX      INTEGER(0..96)
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "The number of intervals in the range from
                 0 to the value of adslAturChanPerfValidIntervals
                 for which no data is available. This object
                 will typically be zero except in cases where
                 the data for some intervals are not available
                 (e.g., in proxy situations)."
         ::= { adslAturChanPerfDataEntry 6 }

Now the interval bookkeeping, which is lowkey the most dramatic part 😭 adslAturChanPerfValidIntervals tells you how many previous 15-minute intervals have data, and it can be less than the max if the measurement was (re-)started recently. It can also be a bit weird in proxy setups where some intervals just aren't there. adslAturChanPerfInvalidIntervals counts the gaps inside that range where there's no data, and it's usually zero 🌸

         -- 15 min current performance group
         --
         adslAturChanPerfCurr15MinTimeElapsed OBJECT-TYPE
             SYNTAX      AdslPerfTimeElapsed(0..899)
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Total elapsed seconds in this interval.
                 A full interval is 900 seconds."
         ::= { adslAturChanPerfDataEntry 7 }

         adslAturChanPerfCurr15MinReceivedBlks OBJECT-TYPE
             SYNTAX      PerfCurrentCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all encoded blocks received on this
                 channel within the current 15 minute interval."
         ::= { adslAturChanPerfDataEntry 8 }

         adslAturChanPerfCurr15MinTransmittedBlks OBJECT-TYPE
             SYNTAX      PerfCurrentCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all encoded blocks transmitted on this
                 channel within the current 15 minute interval."
         ::= { adslAturChanPerfDataEntry 9 }

         adslAturChanPerfCurr15MinCorrectedBlks  OBJECT-TYPE
             SYNTAX      PerfCurrentCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION

                 "Count of all blocks received with errors that were
                 corrected on this channel within the current 15 minute
                 interval."
         ::= { adslAturChanPerfDataEntry 10 }

         adslAturChanPerfCurr15MinUncorrectBlks  OBJECT-TYPE
             SYNTAX      PerfCurrentCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all blocks received with uncorrectable
                 errors on this channel within the current 15 minute
                 interval."
         ::= { adslAturChanPerfDataEntry 11 }

Here's the live 15-minute view πŸ’œ The elapsed-seconds object goes from 0 to 899, and a full interval is 900 seconds. The other four track received, transmitted, corrected, and uncorrectable blocks, but only inside the current window ✨

         -- 1-day current and previous performance group
         --
         adslAturChanPerfCurr1DayTimeElapsed OBJECT-TYPE
             SYNTAX      AdslPerfTimeElapsed(0..86399)
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Number of seconds that have elapsed since the
                 beginning of the current 1-day interval."
         ::= { adslAturChanPerfDataEntry 12 }

         adslAturChanPerfCurr1DayReceivedBlks  OBJECT-TYPE
             SYNTAX      AdslPerfCurrDayCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all encoded blocks received on this
                 channel during the current day as measured by
                 adslAturChanPerfCurr1DayTimeElapsed."
         ::= { adslAturChanPerfDataEntry 13 }

         adslAturChanPerfCurr1DayTransmittedBlks  OBJECT-TYPE
             SYNTAX      AdslPerfCurrDayCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all encoded blocks transmitted on this
                 channel during the current day as measured by
                 adslAturChanPerfCurr1DayTimeElapsed."

         ::= { adslAturChanPerfDataEntry 14 }
         adslAturChanPerfCurr1DayCorrectedBlks  OBJECT-TYPE
             SYNTAX      AdslPerfCurrDayCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all blocks received with errors that were
                 corrected on this channel during the current day as
                 measured by adslAturChanPerfCurr1DayTimeElapsed."
         ::= { adslAturChanPerfDataEntry 15 }

         adslAturChanPerfCurr1DayUncorrectBlks  OBJECT-TYPE
             SYNTAX      AdslPerfCurrDayCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all blocks received with uncorrectable
                 errors on this channel during the current day as
                 measured by adslAturChanPerfCurr1DayTimeElapsed."
         ::= { adslAturChanPerfDataEntry 16 }

Zooming out to the current day 🌈 adslAturChanPerfCurr1DayTimeElapsed is the clock for this section, counting seconds since the day started, from 0 up to 86399. All four day counters are measured against that clock, so they stay in sync with it 🫢

         adslAturChanPerfPrev1DayMoniSecs OBJECT-TYPE
             SYNTAX      INTEGER(0..86400)
             UNITS       "seconds"
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "The amount of time in the previous 1-day interval
                 over which the performance monitoring information
                 is actually counted. This value will be the same as
                 the interval duration except in a situation where
                 performance monitoring data could not be collected
                 for any reason."
         ::= { adslAturChanPerfDataEntry 17 }

         adslAturChanPerfPrev1DayReceivedBlks  OBJECT-TYPE
             SYNTAX      AdslPerfPrevDayCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all encoded blocks received on this
                 channel within the most recent previous 1-day
                 period."
         ::= { adslAturChanPerfDataEntry 18 }

         adslAturChanPerfPrev1DayTransmittedBlks  OBJECT-TYPE
             SYNTAX      AdslPerfPrevDayCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all encoded blocks transmitted on this
                 channel within the most recent previous 1-day
                 period."
         ::= { adslAturChanPerfDataEntry 19 }

         adslAturChanPerfPrev1DayCorrectedBlks  OBJECT-TYPE
             SYNTAX      AdslPerfPrevDayCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all blocks received with errors that were
                 corrected on this channel within the most recent
                 previous 1-day period."
         ::= { adslAturChanPerfDataEntry 20 }

         adslAturChanPerfPrev1DayUncorrectBlks  OBJECT-TYPE
             SYNTAX      AdslPerfPrevDayCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all blocks received with uncorrectable
                 errors on this channel within the most recent previous
                 1-day period."
         ::= { adslAturChanPerfDataEntry 21 }

Last but not least, the previous-day snapshot πŸ“ adslAturChanPerfPrev1DayMoniSecs says how many seconds actually got monitored in that day. It's usually the full 86400, but it can come in lower if monitoring couldn't run for some reason. The four previous-day counters cover the most recent full day, and that's the whole row, bestie πŸ’–πŸ¦‹

Okay so the ATUC and ATUR channel interval tables are giving full data-collection energy πŸ“Šβœ¨ Each one tracks blocks per interval, and it's all indexed by ifIndex and an interval number πŸ’…

         adslAtucChanIntervalTable   OBJECT-TYPE
             SYNTAX          SEQUENCE OF AdslAtucChanIntervalEntry
             MAX-ACCESS      not-accessible
             STATUS          current
             DESCRIPTION
                 "This table provides one row for each ATUC channel's
                 performance data collection interval.
                 ADSL channel interfaces are those ifEntries
                 where ifType is equal to adslInterleave(124)
                 or adslFast(125)."
         ::= { adslMibObjects 12 }

         adslAtucChanIntervalEntry   OBJECT-TYPE
             SYNTAX          AdslAtucChanIntervalEntry
             MAX-ACCESS      not-accessible
             STATUS          current
             DESCRIPTION     "An entry in the adslAtucIntervalTable."
             INDEX           { ifIndex, adslAtucChanIntervalNumber }
         ::= { adslAtucChanIntervalTable 1 }

         AdslAtucChanIntervalEntry ::=
             SEQUENCE {
             adslAtucChanIntervalNumber          INTEGER,
             adslAtucChanIntervalReceivedBlks    PerfIntervalCount,
             adslAtucChanIntervalTransmittedBlks PerfIntervalCount,
             adslAtucChanIntervalCorrectedBlks   PerfIntervalCount,
             adslAtucChanIntervalUncorrectBlks   PerfIntervalCount,
             adslAtucChanIntervalValidData       TruthValue
             }
         adslAtucChanIntervalNumber OBJECT-TYPE
             SYNTAX      INTEGER(1..96)
             MAX-ACCESS  not-accessible
             STATUS      current
             DESCRIPTION
                 "Performance Data Interval number 1 is the
                 the most recent previous interval; interval
                 96 is 24 hours ago.  Intervals 2..96 are
                 optional."
         ::= { adslAtucChanIntervalEntry 1 }

         adslAtucChanIntervalReceivedBlks OBJECT-TYPE
             SYNTAX      PerfIntervalCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all encoded blocks received on this channel
                 during this interval."
         ::= { adslAtucChanIntervalEntry 2 }

         adslAtucChanIntervalTransmittedBlks  OBJECT-TYPE
             SYNTAX      PerfIntervalCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all encoded blocks transmitted on this
                 channel during this interval."
         ::= { adslAtucChanIntervalEntry 3 }

         adslAtucChanIntervalCorrectedBlks  OBJECT-TYPE
             SYNTAX      PerfIntervalCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all blocks received with errors that were
                 corrected on this channel during this interval."
         ::= { adslAtucChanIntervalEntry 4 }

         adslAtucChanIntervalUncorrectBlks  OBJECT-TYPE
             SYNTAX      PerfIntervalCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all blocks received with uncorrectable
                 errors on this channel during this interval."
         ::= { adslAtucChanIntervalEntry 5 }

         adslAtucChanIntervalValidData OBJECT-TYPE
             SYNTAX TruthValue
             MAX-ACCESS read-only
             STATUS current
             DESCRIPTION
                 "This variable indicates if the data for this
                 interval is valid."
         ::= { adslAtucChanIntervalEntry 6 }

         adslAturChanIntervalTable   OBJECT-TYPE
             SYNTAX          SEQUENCE OF AdslAturChanIntervalEntry
             MAX-ACCESS      not-accessible
             STATUS          current
             DESCRIPTION
                 "This table provides one row for each ATUR channel's
                 performance data collection interval.
                 ADSL channel interfaces are those ifEntries
                 where ifType is equal to adslInterleave(124)
                 or adslFast(125)."
         ::= { adslMibObjects 13 }

         adslAturChanIntervalEntry   OBJECT-TYPE
             SYNTAX          AdslAturChanIntervalEntry
             MAX-ACCESS      not-accessible
             STATUS          current
             DESCRIPTION     "An entry in the adslAturIntervalTable."
             INDEX           { ifIndex, adslAturChanIntervalNumber }
         ::= { adslAturChanIntervalTable 1 }

         AdslAturChanIntervalEntry ::=
             SEQUENCE {
             adslAturChanIntervalNumber               INTEGER,
             adslAturChanIntervalReceivedBlks         PerfIntervalCount,
             adslAturChanIntervalTransmittedBlks      PerfIntervalCount,
             adslAturChanIntervalCorrectedBlks        PerfIntervalCount,
             adslAturChanIntervalUncorrectBlks        PerfIntervalCount,
             adslAturChanIntervalValidData            TruthValue
             }
         adslAturChanIntervalNumber OBJECT-TYPE
             SYNTAX      INTEGER(1..96)
             MAX-ACCESS  not-accessible
             STATUS      current
             DESCRIPTION
                 "Performance Data Interval number 1 is the
                 the most recent previous interval; interval
                 96 is 24 hours ago.  Intervals 2..96 are
                 optional."
         ::= { adslAturChanIntervalEntry 1 }

         adslAturChanIntervalReceivedBlks OBJECT-TYPE
             SYNTAX      PerfIntervalCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all encoded blocks received on this channel
                 during this interval."
         ::= { adslAturChanIntervalEntry 2 }

         adslAturChanIntervalTransmittedBlks  OBJECT-TYPE
             SYNTAX      PerfIntervalCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all encoded blocks transmitted on this
                 channel during this interval."
         ::= { adslAturChanIntervalEntry 3 }

         adslAturChanIntervalCorrectedBlks  OBJECT-TYPE
             SYNTAX      PerfIntervalCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all blocks received with errors that were
                 corrected on this channel during this interval."
         ::= { adslAturChanIntervalEntry 4 }

         adslAturChanIntervalUncorrectBlks  OBJECT-TYPE
             SYNTAX      PerfIntervalCount
             MAX-ACCESS  read-only
             STATUS      current
             DESCRIPTION
                 "Count of all blocks received with uncorrectable
                 errors on this channel during this interval."
         ::= { adslAturChanIntervalEntry 5 }

         adslAturChanIntervalValidData OBJECT-TYPE
             SYNTAX TruthValue
             MAX-ACCESS read-only
             STATUS current
             DESCRIPTION

                 "This variable indicates if the data for this
                 interval is valid."
         ::= { adslAturChanIntervalEntry 6 }

Next up is the profile group πŸŽ€ The line configuration profile table is where the managers' presets live, and it's honestly so iconic. There's a whole default profile story with DEFVAL and naming rules that depend on whether the profiles are dynamic or static 🫢

         -- Profile Group
         --

         adslLineConfProfileTable    OBJECT-TYPE
             SYNTAX          SEQUENCE OF AdslLineConfProfileEntry
             MAX-ACCESS      not-accessible
             STATUS          current
             DESCRIPTION
                 "This table contains information on the ADSL line
                 configuration.  One entry in this table reflects a
                 profile defined by a manager which can be used to
                 configure the ADSL line."
         ::= { adslMibObjects 14}

         adslLineConfProfileEntry    OBJECT-TYPE
             SYNTAX          AdslLineConfProfileEntry
             MAX-ACCESS      not-accessible
             STATUS          current
             DESCRIPTION
                 "Each entry consists of a list of parameters that
                 represents the configuration of an ADSL modem.

                 When `dynamic' profiles are implemented, a default
                 profile will always exist.  This profile's name will
                 be set to `DEFVAL' and its parameters will be set
                 to vendor specific values, unless otherwise specified
                 in this document.

                 When `static' profiles are implemented, profiles
                 are automaticly created or destroyed as ADSL
                 physical lines are discovered and removed by
                 the system.  The name of the profile will be
                 equivalent to the decimal value of the line's
                 interface index.
                 "
             INDEX { IMPLIED adslLineConfProfileName}
         ::= { adslLineConfProfileTable 1}

         AdslLineConfProfileEntry ::=
             SEQUENCE {
             adslLineConfProfileName               SnmpAdminString,
             adslAtucConfRateMode                  INTEGER,
             adslAtucConfRateChanRatio             INTEGER,
             adslAtucConfTargetSnrMgn              INTEGER,
             adslAtucConfMaxSnrMgn                 INTEGER,
             adslAtucConfMinSnrMgn                 INTEGER,
             adslAtucConfDownshiftSnrMgn           INTEGER,
             adslAtucConfUpshiftSnrMgn             INTEGER,
             adslAtucConfMinUpshiftTime            INTEGER,
             adslAtucConfMinDownshiftTime          INTEGER,
             adslAtucChanConfFastMinTxRate         Unsigned32,
             adslAtucChanConfInterleaveMinTxRate   Unsigned32,
             adslAtucChanConfFastMaxTxRate         Unsigned32,
             adslAtucChanConfInterleaveMaxTxRate   Unsigned32,
             adslAtucChanConfMaxInterleaveDelay    INTEGER,
             adslAturConfRateMode                  INTEGER,
             adslAturConfRateChanRatio             INTEGER,
             adslAturConfTargetSnrMgn              INTEGER,
             adslAturConfMaxSnrMgn                 INTEGER,
             adslAturConfMinSnrMgn                 INTEGER,
             adslAturConfDownshiftSnrMgn           INTEGER,
             adslAturConfUpshiftSnrMgn             INTEGER,
             adslAturConfMinUpshiftTime            INTEGER,
             adslAturConfMinDownshiftTime          INTEGER,
             adslAturChanConfFastMinTxRate         Unsigned32,
             adslAturChanConfInterleaveMinTxRate   Unsigned32,
             adslAturChanConfFastMaxTxRate         Unsigned32,
             adslAturChanConfInterleaveMaxTxRate   Unsigned32,
             adslAturChanConfMaxInterleaveDelay    INTEGER,
             adslLineConfProfileRowStatus          RowStatus
         }

         adslLineConfProfileName    OBJECT-TYPE
                 SYNTAX          SnmpAdminString (SIZE (1..32))
                 MAX-ACCESS      not-accessible
                 STATUS          current
                 DESCRIPTION
                 "This object is used by the line configuration table
                 in order to identify a row of this table.

                 When `dynamic' profiles are implemented, the profile
                 name is user specified.  Also, the system will always
                 provide a default profile whose name is `DEFVAL'.

                 When `static' profiles are implemented, there is an
                 one-to-one relationship between each line and its
                 profile.  In which case, the profile name will
                 need to algorithmicly represent the Line's ifIndex.
                 Therefore, the profile's name is a decimalized string
                 of the ifIndex that is fixed-length (i.e., 10) with
                 leading zero(s).  For example, the profile name for
                 ifIndex which equals '15' will be '0000000015'."

         ::= { adslLineConfProfileEntry 1 }

okay so bestie, this is the part where we get into the actual knobs πŸŽ€ Every object below is a read-create setting, which means you can configure it, and each one gets its own little slot in the profile entry. The numbers after ::= are the exact positions, so they don't move. πŸ’…

         adslAtucConfRateMode OBJECT-TYPE
             SYNTAX      INTEGER {
                 fixed (1),              -- no rate adaptation
                 adaptAtStartup (2),     -- perform rate adaptation
                                         -- only at initialization
                 adaptAtRuntime (3)      -- perform rate adaptation at
                                         -- any time
             }
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Defines what form of transmit rate adaptation is
                 configured on this modem.  See ADSL Forum TR-005 [3]
                 for more information."
         ::= { adslLineConfProfileEntry 2 }

         adslAtucConfRateChanRatio OBJECT-TYPE
             SYNTAX      INTEGER(0..100)
             UNITS        "%"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Configured allocation ratio of excess transmit
                 bandwidth between fast and interleaved channels.  Only
                 applies when two channel mode and RADSL are supported.
                 Distribute bandwidth on each channel in excess of the
                 corresponding ChanConfMinTxRate so that:
                 adslAtucConfRateChanRatio =

                         [Fast / (Fast + Interleaved)] * 100

                 In other words this value is the fast channel
                 percentage."
         ::= { adslLineConfProfileEntry 3 }

       adslAtucConfTargetSnrMgn OBJECT-TYPE
             SYNTAX      INTEGER (0..310)
             UNITS       "tenth dB"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Configured Target Signal/Noise Margin.
                 This is the Noise Margin the modem must achieve
                 with a BER of 10-7 or better to successfully complete
                 initialization."
         ::= { adslLineConfProfileEntry 4 }

       adslAtucConfMaxSnrMgn OBJECT-TYPE
             SYNTAX      INTEGER (0..310)
             UNITS       "tenth dB"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Configured Maximum acceptable Signal/Noise Margin.
                 If the Noise Margin is above this the modem should
                 attempt to reduce its power output to optimize its
                 operation."
         ::= { adslLineConfProfileEntry 5 }

         adslAtucConfMinSnrMgn  OBJECT-TYPE
             SYNTAX      INTEGER (0..310)
             UNITS       "tenth dB"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Configured Minimum acceptable Signal/Noise Margin.
                 If the noise margin falls below this level, the modem
                 should attempt to increase its power output.  If that
                 is not possible the modem will attempt to
                 re-initialize or shut down."
         ::= { adslLineConfProfileEntry 6 }

         adslAtucConfDownshiftSnrMgn  OBJECT-TYPE
             SYNTAX      INTEGER (0..310)
             UNITS       "tenth dB"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Configured Signal/Noise Margin for rate downshift.
                 If the noise margin falls below this level, the modem
                 should attempt to decrease its transmit rate.  In
                 the case that RADSL mode is not present,
                 the value will be `0'."
         ::= { adslLineConfProfileEntry 7 }

         adslAtucConfUpshiftSnrMgn  OBJECT-TYPE
             SYNTAX      INTEGER (0..310)
             UNITS       "tenth dB"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Configured Signal/Noise Margin for rate upshift.
                 If the noise margin rises above this level, the modem
                 should attempt to increase its transmit rate.    In
                 the case that RADSL is not present, the value will
                 be `0'."
         ::= { adslLineConfProfileEntry 8 }

         adslAtucConfMinUpshiftTime OBJECT-TYPE
             SYNTAX      INTEGER(0..16383)
             UNITS       "seconds"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Minimum time that the current margin is above
                 UpshiftSnrMgn before an upshift occurs.
                 In the case that RADSL is not present, the value will
                 be `0'."
         ::= { adslLineConfProfileEntry 9 }
        adslAtucConfMinDownshiftTime OBJECT-TYPE
             SYNTAX      INTEGER(0..16383)
             UNITS       "seconds"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Minimum time that the current margin is below
                 DownshiftSnrMgn before a downshift occurs.
                 In the case that RADSL mode is not present,
                 the value will be `0'."
         ::= { adslLineConfProfileEntry 10 }

         adslAtucChanConfFastMinTxRate  OBJECT-TYPE
             SYNTAX      Unsigned32
             UNITS       "bps"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Configured Minimum Transmit rate for `Fast' channels,
                 in bps.  See adslAtucConfRateChanRatio for information
                 regarding RADSL mode and ATUR transmit rate for
                 ATUC receive rates."
         ::= { adslLineConfProfileEntry 11 }

         adslAtucChanConfInterleaveMinTxRate OBJECT-TYPE
             SYNTAX      Unsigned32
             UNITS       "bps"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Configured Minimum Transmit rate for `Interleave'
                 channels, in bps.  See adslAtucConfRateChanRatio for
                 information regarding RADSL mode and see
                 ATUR transmit rate for receive rates."

         ::= { adslLineConfProfileEntry 12 }

         adslAtucChanConfFastMaxTxRate  OBJECT-TYPE
             SYNTAX      Unsigned32
             UNITS       "bps"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Configured Maximum Transmit rate for `Fast' channels,
                 in bps.  See adslAtucConfRateChanRatio for information
                 regarding RADSL mode and see ATUR transmit rate for
                 ATUC receive rates."
         ::= { adslLineConfProfileEntry 13 }

         adslAtucChanConfInterleaveMaxTxRate OBJECT-TYPE
             SYNTAX      Unsigned32
             UNITS       "bps"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Configured Maximum Transmit rate for `Interleave'
                 channels, in bps.  See adslAtucConfRateChanRatio for
                 information regarding RADSL mode and ATUR transmit
                 rate for ATUC receive rates."
         ::= { adslLineConfProfileEntry 14 }

         adslAtucChanConfMaxInterleaveDelay OBJECT-TYPE
             SYNTAX      INTEGER(0..255)
             UNITS        "milli-seconds"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Configured maximum Interleave Delay for this channel.

                 Interleave delay applies only to the interleave channel
                 and defines the mapping (relative spacing) between
                 subsequent input bytes at the interleaver input and
                 their placement in the bit stream at the interleaver
                 output.  Larger numbers provide greater separation
                 between consecutive input bytes in the output bit
                 stream allowing for improved impulse noise immunity
                 at the expense of payload latency."
         ::= { adslLineConfProfileEntry 15 }

okay the ATUR side is next and it's basically the same vibe πŸ¦‹ Same knobs, same descriptions, just a different set of object names and slot numbers starting at 16. Lowkey iconic that they're mirrored like that ✨

         adslAturConfRateMode OBJECT-TYPE
             SYNTAX      INTEGER {
                 fixed (1),              -- no rate adaptation
                 adaptAtStartup (2),     -- perform rate adaptation

                                         -- only at initialization
                 adaptAtRuntime (3)      -- perform rate adaptation at
                                         -- any time
             }
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Defines what form of transmit rate adaptation is
                 configured on this modem.  See ADSL Forum TR-005 [3]
                 for more information."
         ::= { adslLineConfProfileEntry 16 }

         adslAturConfRateChanRatio OBJECT-TYPE
             SYNTAX      INTEGER(0..100)
             UNITS        "%"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Configured allocation ratio of excess transmit
                 bandwidth between fast and interleaved channels.  Only
                 applies when two channel mode and RADSL are supported.
                 Distribute bandwidth on each channel in excess of the
                 corresponding ChanConfMinTxRate so that:
                 adslAturConfRateChanRatio =

                         [Fast / (Fast + Interleaved)] * 100

                 In other words this value is the fast channel
                 percentage."
         ::= { adslLineConfProfileEntry 17 }

       adslAturConfTargetSnrMgn OBJECT-TYPE
             SYNTAX      INTEGER (0..310)
             UNITS       "tenth dB"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Configured Target Signal/Noise Margin.
                 This is the Noise Margin the modem must achieve
                 with a BER of 10-7 or better to successfully complete
                 initialization."
         ::= { adslLineConfProfileEntry 18 }

       adslAturConfMaxSnrMgn OBJECT-TYPE
             SYNTAX      INTEGER (0..310)
             UNITS       "tenth dB"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Configured Maximum acceptable Signal/Noise Margin.
                 If the Noise Margin is above this the modem should
                 attempt to reduce its power output to optimize its
                 operation."
         ::= { adslLineConfProfileEntry 19 }

        adslAturConfMinSnrMgn  OBJECT-TYPE
             SYNTAX      INTEGER (0..310)
             UNITS       "tenth dB"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Configured Minimum acceptable Signal/Noise Margin.
                 If the noise margin falls below this level, the modem
                 should attempt to increase its power output.  If that
                 is not possible the modem will attempt to
                 re-initialize or shut down."
         ::= { adslLineConfProfileEntry 20 }

         adslAturConfDownshiftSnrMgn  OBJECT-TYPE
             SYNTAX      INTEGER (0..310)
             UNITS       "tenth dB"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Configured Signal/Noise Margin for rate downshift.
                 If the noise margin falls below this level, the modem
                 should attempt to decrease its transmit rate.
                 In the case that RADSL mode is not present,
                 the value will be `0'."
         ::= { adslLineConfProfileEntry 21 }

Okay bestie, we're still in the MIB definitions and this chunk is giving rate-and-margin drama πŸ’–βœ¨

         adslAturConfUpshiftSnrMgn  OBJECT-TYPE
             SYNTAX      INTEGER (0..310)
             UNITS       "tenth dB"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Configured Signal/Noise Margin for rate upshift.
                 If the noise margin rises above this level, the modem
                 should attempt to increase its transmit rate.
                 In the case that RADSL is not present,
                 the value will be `0'."
         ::= { adslLineConfProfileEntry 22 }

         adslAturConfMinUpshiftTime OBJECT-TYPE
             SYNTAX      INTEGER(0..16383)
             UNITS       "seconds"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Minimum time that the current margin is above
                 UpshiftSnrMgn before an upshift occurs.
                 In the case that RADSL is not present, the value will
                 be `0'."
         ::= { adslLineConfProfileEntry 23 }

        adslAturConfMinDownshiftTime OBJECT-TYPE
             SYNTAX      INTEGER(0..16383)
             UNITS       "seconds"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Minimum time that the current margin is below
                 DownshiftSnrMgn before a downshift occurs.
                 In the case that RADSL mode is not present,
                 the value will be `0'."
         ::= { adslLineConfProfileEntry 24 }

So the upshift stuff is basically the modem saying "okay, the margin has been high long enough, time to speed up," and the downshift timer is the mirror image for slowing down πŸ¦‹ The 0 thing when RADSL isn't around is a total "not applicable, babe" moment πŸ™ˆ

         adslAturChanConfFastMinTxRate  OBJECT-TYPE
             SYNTAX      Unsigned32
             UNITS       "bps"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Configured Minimum Transmit rate for `Fast' channels,
                 in bps.  See adslAturConfRateChanRatio for information
                 regarding RADSL mode and ATUC transmit rate
                 for ATUR receive rates."
         ::= { adslLineConfProfileEntry 25 }

         adslAturChanConfInterleaveMinTxRate OBJECT-TYPE
             SYNTAX      Unsigned32
             UNITS       "bps"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Configured Minimum Transmit rate for `Interleave'
                 channels, in bps.  See adslAturConfRateChanRatio for
                 information regarding RADSL mode and ATUC transmit rate
                 for ATUR receive rates."
         ::= { adslLineConfProfileEntry 26 }

         adslAturChanConfFastMaxTxRate  OBJECT-TYPE
             SYNTAX      Unsigned32
             UNITS       "bps"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Configured Maximum Transmit rate for `Fast' channels,
                 in bps.  See adslAturConfRateChanRatio for information
                 regarding RADSL mode and ATUC transmit rate
                 for ATUR receive rates."
         ::= { adslLineConfProfileEntry 27 }

         adslAturChanConfInterleaveMaxTxRate OBJECT-TYPE
             SYNTAX      Unsigned32
             UNITS       "bps"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Configured Maximum Transmit rate for `Interleave'
                 channels, in bps.  See adslAturConfRateChanRatio for
                 information regarding RADSL mode and see
                 ATUC transmit rate for ATUR receive rates."
         ::= { adslLineConfProfileEntry 28 }

Now the four rate knobs: min and max for both the Fast and Interleave channels πŸ’œ They all point back at adslAturConfRateChanRatio, so that one's basically the main character of this whole section πŸ‘‘

         adslAturChanConfMaxInterleaveDelay OBJECT-TYPE
             SYNTAX      INTEGER(0..255)
             UNITS        "milli-seconds"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Configured maximum Interleave Delay for this channel.

                 Interleave delay applies only to the interleave channel
                 and defines the mapping (relative spacing) between
                 subsequent input bytes at the interleaver input and
                 their placement in the bit stream at the interleaver
                 output.  Larger numbers provide greater separation
                 between consecutive input bytes in the output bit
                 stream allowing for improved impulse noise immunity
                 at the expense of payload latency."
         ::= { adslLineConfProfileEntry 29 }

         adslLineConfProfileRowStatus OBJECT-TYPE
             SYNTAX          RowStatus
             MAX-ACCESS      read-create
             STATUS          current
             DESCRIPTION
                 "This object is used to create a new row or modify or
                 delete an existing row in this table.

                 A profile activated by setting this object to
                 `active'.  When `active' is set, the system
                 will validate the profile.

                 Before a profile can be deleted or taken out of
                 service, (by setting this object to `destroy' or
                 `outOfService') it must be first unreferenced
                 from all associated lines.

                 If the implementator of this MIB has chosen not
                 to implement `dynamic assignment' of profiles, this
                 object's MIN-ACCESS is read-only and its value
                 is always to be `active'."
         ::= { adslLineConfProfileEntry 30 }
The interleave delay one is a trade-off, babe. More spacing between bytes gets you better impulse noise immunity, but the payload pays for it in latency πŸ™ˆ And the RowStatus thing is how you create, activate, or kill a profile, but you can't delete one while lines are still using it 🚫

Next up: the whole alarm profile table, which is where the trap thresholds live πŸ””

         adslLineAlarmConfProfileTable    OBJECT-TYPE
             SYNTAX          SEQUENCE OF AdslLineAlarmConfProfileEntry
             MAX-ACCESS      not-accessible
             STATUS          current
             DESCRIPTION
                 "This table contains information on the ADSL line
                 configuration.  One entry in this table reflects a
                 profile defined by a manager which can be used to
                 configure the modem for a physical line"
         ::= { adslMibObjects 15}

         adslLineAlarmConfProfileEntry    OBJECT-TYPE
             SYNTAX          AdslLineAlarmConfProfileEntry
             MAX-ACCESS      not-accessible
             STATUS          current
             DESCRIPTION
                 "Each entry consists of a list of parameters that
                 represents the configuration of an ADSL modem.

                 When `dynamic' profiles are implemented, a default
                 profile will always exist.  This profile's name will
                 be set to `DEFVAL' and its parameters will be set to
                 vendor specific values, unless otherwise specified
                 in this document.

                 When `static' profiles are implemented, profiles
                 are automaticly created or destroyed as ADSL
                 physical lines are discovered and removed by
                 the system.  The name of the profile will be
                 equivalent to the decimal value of the line's
                 interface index.
                 "
             INDEX { IMPLIED adslLineAlarmConfProfileName}

         ::= { adslLineAlarmConfProfileTable 1}

         AdslLineAlarmConfProfileEntry ::=
             SEQUENCE {
             adslLineAlarmConfProfileName          SnmpAdminString,
             adslAtucThresh15MinLofs               INTEGER,
             adslAtucThresh15MinLoss               INTEGER,
             adslAtucThresh15MinLols               INTEGER,
             adslAtucThresh15MinLprs               INTEGER,
             adslAtucThresh15MinESs                INTEGER,
             adslAtucThreshFastRateUp              Unsigned32,
             adslAtucThreshInterleaveRateUp        Unsigned32,
             adslAtucThreshFastRateDown            Unsigned32,
             adslAtucThreshInterleaveRateDown      Unsigned32,
             adslAtucInitFailureTrapEnable         INTEGER,
             adslAturThresh15MinLofs               INTEGER,
             adslAturThresh15MinLoss               INTEGER,
             adslAturThresh15MinLprs               INTEGER,
             adslAturThresh15MinESs                INTEGER,
             adslAturThreshFastRateUp              Unsigned32,
             adslAturThreshInterleaveRateUp        Unsigned32,
             adslAturThreshFastRateDown            Unsigned32,
             adslAturThreshInterleaveRateDown      Unsigned32,
             adslLineAlarmConfProfileRowStatus     RowStatus
             }

         adslLineAlarmConfProfileName    OBJECT-TYPE
             SYNTAX          SnmpAdminString (SIZE (1..32))
             MAX-ACCESS      not-accessible
             STATUS          current
             DESCRIPTION
                 "This object is used by the line alarm configuration
                 table in order to identify a row of this table.

                 When `dynamic' profiles are implemented, the profile
                 name is user specified.  Also, the system will always
                 provide a default profile whose name is `DEFVAL'.

                 When `static' profiles are implemented, there is an
                 one-to-one relationship between each line and its
                 profile.  In which case, the profile name will
                 need to algorithmicly represent the Line's ifIndex.
                 Therefore, the profile's name is a decimalized string
                 of the ifIndex that is fixed-length (i.e., 10) with
                 leading zero(s).  For example, the profile name for
                 ifIndex which equals '15' will be '0000000015'."
         ::= { adslLineAlarmConfProfileEntry 1}

Okay so the table is the wardrobe, and each entry is an outfit with its own alarm settings πŸ‘— The name is the key that picks which outfit you're wearing, and with static profiles it's literally the ifIndex padded out to ten digits 🧚

         adslAtucThresh15MinLofs OBJECT-TYPE
             SYNTAX      INTEGER(0..900)
             UNITS       "seconds"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "The number of Loss of Frame Seconds
                 encountered by an ADSL interface within any given 15
                 minutes performance data collection period, which
                 causes the SNMP agent to send an
                 adslAtucPerfLofsThreshTrap.
                 One trap will be sent per interval per interface.
                 A value of `0' will disable the trap."
         ::= { adslLineAlarmConfProfileEntry 2}

         adslAtucThresh15MinLoss  OBJECT-TYPE
             SYNTAX      INTEGER(0..900)
             UNITS       "seconds"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "The number of Loss of Signal Seconds
                 encountered by an ADSL interface within any given 15
                 minutes performance data collection period, which
                 causes the SNMP agent to send an
                 adslAtucPerfLossThreshTrap.
                 One trap will be sent per interval per interface.
                 A value of `0' will disable the trap."
         ::= { adslLineAlarmConfProfileEntry 3}

         adslAtucThresh15MinLols  OBJECT-TYPE
             SYNTAX      INTEGER(0..900)
             UNITS       "seconds"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "The number of Loss of Link Seconds
                 encountered by an ADSL interface within any given 15
                 minutes performance data collection period, which
                 causes the SNMP agent to send an
                 adslAtucPerfLolsThreshTrap.
                 One trap will be sent per interval per interface.
                 A value of `0' will disable the trap."
         ::= { adslLineAlarmConfProfileEntry 4}

And that's where we're at, bestie: the 15-minute threshold trio for LOF, LOSS, and LOLS, each one armed to send a trap per interval per interface, with 0 as the off switch πŸ”₯ Lots more threshold drama is coming next, so stay tuned πŸ‘€πŸ’…

okay so we're still in the MIB definitions πŸŽ€ and the thresholds are getting spicy now πŸ”₯ each one is basically a little alarm you can set per 15-minute window, and a value of 0 just turns it off πŸ’…

         adslAtucThresh15MinLprs  OBJECT-TYPE
             SYNTAX      INTEGER(0..900)
             UNITS       "seconds"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "The number of Loss of Power Seconds
                 encountered by an ADSL interface within any given 15
                 minutes performance data collection period, which
                 causes the SNMP agent to send an
                 adslAtucPerfLprsThreshTrap.
                 One trap will be sent per interval per interface.
                 A value of `0' will disable the trap."
         ::= { adslLineAlarmConfProfileEntry 5}

         adslAtucThresh15MinESs  OBJECT-TYPE
             SYNTAX      INTEGER(0..900)
             UNITS       "seconds"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "The number of Errored Seconds
                 encountered by an ADSL interface within any given 15
                 minutes performance data collection period, which
                 causes the SNMP agent to send an
                 adslAtucPerfESsThreshTrap.
                 One trap will be sent per interval per interface.
                 A value of `0' will disable the trap."
         ::= { adslLineAlarmConfProfileEntry 6}

         adslAtucThreshFastRateUp OBJECT-TYPE
             SYNTAX      Unsigned32
             UNITS       "bps"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Applies to `Fast' channels only.
                 Configured change in rate causing an
                 adslAtucRateChangeTrap. A trap is produced when:
                 ChanCurrTxRate >= ChanPrevTxRate plus the value of
                 this object. A value of `0' will disable the trap."
         ::= { adslLineAlarmConfProfileEntry 7}

         adslAtucThreshInterleaveRateUp OBJECT-TYPE
             SYNTAX      Unsigned32
             UNITS       "bps"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Applies to `Interleave' channels only.
                 Configured change in rate causing an
                 adslAtucRateChangeTrap.  A trap is produced when:
                 ChanCurrTxRate >= ChanPrevTxRate plus the value of
                 this object. A value of `0' will disable the trap."
         ::= { adslLineAlarmConfProfileEntry 8}

         adslAtucThreshFastRateDown OBJECT-TYPE
             SYNTAX      Unsigned32
             UNITS       "bps"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Applies to `Fast' channels only.
                 Configured change in rate causing an
                 adslAtucRateChangeTrap.  A trap is produced when:
                 ChanCurrTxRate <= ChanPrevTxRate minus the value of
                 this object. A value of `0' will disable the trap."
         ::= { adslLineAlarmConfProfileEntry 9 }

         adslAtucThreshInterleaveRateDown OBJECT-TYPE
             SYNTAX      Unsigned32
             UNITS       "bps"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Applies to `Interleave' channels only.
                 Configured change in rate causing an
                 adslAtucRateChangeTrap.  A trap is produced when:
                 ChanCurrTxRate <= ChanPrevTxRate minus the value of
                 this object. A value of `0' will disable the trap."
         ::= { adslLineAlarmConfProfileEntry 10 }

         adslAtucInitFailureTrapEnable OBJECT-TYPE
             SYNTAX      INTEGER {
                 enable (1),
                 disable (2)
             }
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Enables and disables the InitFailureTrap.  This
                 object is defaulted disable(2)."
         DEFVAL { disable }
         ::= { adslLineAlarmConfProfileEntry 11 }

         adslAturThresh15MinLofs OBJECT-TYPE
             SYNTAX      INTEGER(0..900)
             UNITS       "seconds"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "The number of Loss of Frame Seconds
                 encountered by an ADSL interface within any given 15
                 minutes performance data collection period, which
                 causes the SNMP agent to send an
                 adslAturPerfLofsThreshTrap.
                 One trap will be sent per interval per interface.
                 A value of `0' will disable the trap."
         ::= { adslLineAlarmConfProfileEntry 12 }

         adslAturThresh15MinLoss  OBJECT-TYPE
             SYNTAX      INTEGER(0..900)
             UNITS       "seconds"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "The number of Loss of Signal Seconds
                 encountered by an ADSL interface within any given 15
                 minutes performance data collection period, which
                 causes the SNMP agent to send an
                 adslAturPerfLossThreshTrap.
                 One trap will be sent per interval per interface.
                 A value of `0' will disable the trap."
         ::= { adslLineAlarmConfProfileEntry 13 }

         adslAturThresh15MinLprs  OBJECT-TYPE
             SYNTAX      INTEGER(0..900)
             UNITS       "seconds"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "The number of Loss of Power Seconds
                 encountered by an ADSL interface within any given 15
                 minutes performance data collection period, which
                 causes the SNMP agent to send an
                 adslAturPerfLprsThreshTrap.
                 One trap will be sent per interval per interface.
                 A value of `0' will disable the trap."
         ::= { adslLineAlarmConfProfileEntry 14 }

         adslAturThresh15MinESs  OBJECT-TYPE
             SYNTAX      INTEGER(0..900)
             UNITS       "seconds"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "The number of Errored Seconds
                 encountered by an ADSL interface within any given 15
                 minutes performance data collection period, which
                 causes the SNMP agent to send an
                 adslAturPerfESsThreshTrap.
                 One trap will be sent per interval per interface.
                 A value of `0' will disable the trap."
         ::= { adslLineAlarmConfProfileEntry 15 }

         adslAturThreshFastRateUp OBJECT-TYPE
             SYNTAX      Unsigned32
             UNITS       "bps"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Applies to `Fast' channels only.
                 Configured change in rate causing an
                 adslAturRateChangeTrap.  A trap is produced when:
                 ChanCurrTxRate >= ChanPrevTxRate plus the value of
                 this object. A value of `0' will disable the trap."
         ::= { adslLineAlarmConfProfileEntry 16 }

         adslAturThreshInterleaveRateUp OBJECT-TYPE
             SYNTAX      Unsigned32
             UNITS       "bps"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Applies to `Interleave' channels only.
                 configured change in rate causing an
                 adslAturRateChangeTrap.  A trap is produced when:
                 ChanCurrTxRate >= ChanPrevTxRate plus the value of
                 this object. A value of `0' will disable the trap."
         ::= { adslLineAlarmConfProfileEntry 17 }

         adslAturThreshFastRateDown OBJECT-TYPE
             SYNTAX      Unsigned32
             UNITS       "bps"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Applies to `Fast' channels only.
                 Configured change in rate causing an
                 adslAturRateChangeTrap.  A trap is produced when:
                 ChanCurrTxRate <= ChanPrevTxRate minus the value of
                 this object. A value of `0' will disable the trap."
         ::= { adslLineAlarmConfProfileEntry 18 }

         adslAturThreshInterleaveRateDown OBJECT-TYPE

             SYNTAX      Unsigned32
             UNITS       "bps"
             MAX-ACCESS  read-create
             STATUS      current
             DESCRIPTION
                 "Applies to `Interleave' channels only.
                 Configured change in rate causing an
                 adslAturRateChangeTrap.  A trap is produced when:
                 ChanCurrTxRate <= ChanPrevTxRate minus the value of
                 this object. A value of `0' will disable the trap."
         ::= { adslLineAlarmConfProfileEntry 19 }

         adslLineAlarmConfProfileRowStatus OBJECT-TYPE
             SYNTAX          RowStatus
             MAX-ACCESS      read-create
             STATUS          current
             DESCRIPTION
                 "This object is used to create a new row or modify or
                 delete an existing row in this table.

                 A profile activated by setting this object to
                 `active'.  When `active' is set, the system
                 will validate the profile.

                 Before a profile can be deleted or taken out of
                 service, (by setting this object to `destroy' or
                 `outOfService') it must be first unreferenced
                 from all associated lines.

                 If the implementator of this MIB has chosen not
                 to implement `dynamic assignment' of profiles, this
                 object's MIN-ACCESS is read-only and its value
                 is always to be `active'."
         ::= { adslLineAlarmConfProfileEntry 20 }

         -- Line Code Specific Tables

         -- These are place holders for the Line Code Specific MIBs
         -- once they become available.

         adslLCSMib  OBJECT IDENTIFIER ::= { adslMibObjects 16 }

   -- trap definitions

   adslTraps OBJECT IDENTIFIER ::= { adslLineMib 2 }

   adslAtucTraps OBJECT IDENTIFIER ::= { adslTraps 1 }

         adslAtucPerfLofsThreshTrap      NOTIFICATION-TYPE
             OBJECTS { adslAtucPerfCurr15MinLofs,
                       adslAtucThresh15MinLofs }
             STATUS  current
             DESCRIPTION
                 "Loss of Framing 15-minute interval threshold reached."
         ::= { adslAtucTraps 0 1 }

         adslAtucPerfLossThreshTrap      NOTIFICATION-TYPE
             OBJECTS { adslAtucPerfCurr15MinLoss,
                       adslAtucThresh15MinLoss }
             STATUS  current
             DESCRIPTION
                 "Loss of Signal 15-minute interval threshold reached."
         ::= { adslAtucTraps 0 2 }

         adslAtucPerfLprsThreshTrap      NOTIFICATION-TYPE
             OBJECTS { adslAtucPerfCurr15MinLprs,
                       adslAtucThresh15MinLprs }
             STATUS  current
             DESCRIPTION
                 "Loss of Power 15-minute interval threshold reached."
         ::= { adslAtucTraps 0 3 }

         adslAtucPerfESsThreshTrap       NOTIFICATION-TYPE
             OBJECTS { adslAtucPerfCurr15MinESs,
                       adslAtucThresh15MinESs }
             STATUS  current
             DESCRIPTION
                 "Errored Second 15-minute interval threshold reached."
         ::= { adslAtucTraps 0 4 }

okay bestie, the trap list is still going πŸ¦‹ and the big thing to know is that some traps only exist for certain modes. the ATUC rate change one only happens in RADSL mode πŸ’…

         adslAtucRateChangeTrap  NOTIFICATION-TYPE
             OBJECTS { adslAtucChanCurrTxRate,
                       adslAtucChanPrevTxRate }
             STATUS  current
             DESCRIPTION
                 "The ATUCs transmit rate has changed (RADSL mode only)"
         ::= { adslAtucTraps 0 5 }

         adslAtucPerfLolsThreshTrap      NOTIFICATION-TYPE
             OBJECTS { adslAtucPerfCurr15MinLols,
                       adslAtucThresh15MinLols }
             STATUS  current
             DESCRIPTION
                 "Loss of Link 15-minute interval threshold reached."
         ::= { adslAtucTraps 0 6 }
         adslAtucInitFailureTrap NOTIFICATION-TYPE
             OBJECTS { adslAtucCurrStatus }
             STATUS  current
             DESCRIPTION
                 "ATUC initialization failed. See adslAtucCurrStatus
                 for potential reasons."
         ::= { adslAtucTraps 0 7 }

   adslAturTraps OBJECT IDENTIFIER ::= { adslTraps 2 }

         adslAturPerfLofsThreshTrap      NOTIFICATION-TYPE
             OBJECTS { adslAturPerfCurr15MinLofs,
                       adslAturThresh15MinLofs }
             STATUS  current
             DESCRIPTION
                 "Loss of Framing 15-minute interval threshold reached."
         ::= { adslAturTraps 0 1 }

         adslAturPerfLossThreshTrap      NOTIFICATION-TYPE
             OBJECTS { adslAturPerfCurr15MinLoss,
                       adslAturThresh15MinLoss }
             STATUS  current
             DESCRIPTION
                 "Loss of Signal 15-minute interval threshold reached."
         ::= { adslAturTraps 0 2 }

         adslAturPerfLprsThreshTrap      NOTIFICATION-TYPE
             OBJECTS { adslAturPerfCurr15MinLprs,
                       adslAturThresh15MinLprs }
             STATUS  current
             DESCRIPTION
                 "Loss of Power 15-minute interval threshold reached."
         ::= { adslAturTraps 0 3 }

         adslAturPerfESsThreshTrap       NOTIFICATION-TYPE
             OBJECTS { adslAturPerfCurr15MinESs,
                       adslAturThresh15MinESs }
             STATUS  current
             DESCRIPTION
                 "Errored Second 15-minute interval threshold reached."
         ::= { adslAturTraps 0 4 }

         adslAturRateChangeTrap  NOTIFICATION-TYPE
             OBJECTS { adslAturChanCurrTxRate,
                       adslAturChanPrevTxRate }
             STATUS  current
             DESCRIPTION
                 "The ATURs transmit rate has changed (RADSL mode only)"

         ::= { adslAturTraps 0 5 }

         -- no adslAturPerfLolsThreshTrap possible { 0 6 }

         -- no adslAturInitFailureTrap possible { 0 7 }

the ATU-R side has its own set of traps, and the LOLS and init failure ones are straight up not possible there πŸ™ˆ (the comments say so, no cap πŸ’€)


next up is the conformance info, which is basically the filing system for the whole MIB πŸ—‚οΈβœ¨ the groups and compliances both hang off adslLineMib 3 🌸

   -- conformance information

   adslConformance OBJECT IDENTIFIER ::= { adslLineMib 3 }

   adslGroups OBJECT IDENTIFIER ::= { adslConformance 1 }
   adslCompliances OBJECT IDENTIFIER ::= { adslConformance 2 }

and now the ATU-C compliance statement, which is the big one πŸ‘‘ it lists the mandatory groups first, then the optional ones, then a whole bunch of objects that flip to read-write when static profiles are in use πŸ’–

         -- ATU-C agent compliance statements

         adslLineMibAtucCompliance MODULE-COMPLIANCE
             STATUS  current
             DESCRIPTION
                 "The compliance statement for SNMP entities
                  which manage ADSL ATU-C interfaces."

             MODULE  -- this module
             MANDATORY-GROUPS
                {
                adslLineGroup, adslPhysicalGroup, adslChannelGroup,
                adslAtucPhysPerfIntervalGroup,
                adslAturPhysPerfIntervalGroup, adslLineConfProfileGroup,
                adslLineAlarmConfProfileGroup,
                adslLineConfProfileControlGroup
                }

             GROUP       adslAtucPhysPerfRawCounterGroup
             DESCRIPTION
                 "This group is optional.  Implementations which
                  require continuous ATU-C physical event counters
                  should implement this group."

             GROUP       adslAturPhysPerfRawCounterGroup
             DESCRIPTION
                 "This group is optional.  Implementations which
                  require continuous ATU-R physical event counters
                  should implement this group."

             GROUP       adslAtucChanPerformanceGroup
             DESCRIPTION
                 "This group is optional.  Implementations which
                  require ATU-C channel block event counters should
                  implement this group."

             GROUP       adslAturChanPerformanceGroup
             DESCRIPTION
                 "This group is optional.  Implementations which
                  require ATU-R channel block event counters should
                  implement this group."

             OBJECT      adslLineConfProfile
             MIN-ACCESS  read-only
             DESCRIPTION
                 "Read-only access is applicable when static
                  profiles are implemented."

             OBJECT      adslAtucConfRateMode
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAtucConfRateChanRatio
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAtucConfTargetSnrMgn
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAtucConfMaxSnrMgn
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAtucConfMinSnrMgn
             MIN-ACCESS  read-wr
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAtucConfDownshiftSnrMgn
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAtucConfUpshiftSnrMgn
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAtucConfMinUpshiftTime
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAtucConfMinDownshiftTime
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAtucChanConfFastMinTxRate
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAtucChanConfInterleaveMinTxRate
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAtucChanConfFastMaxTxRate
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAtucChanConfInterleaveMaxTxRate
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAtucChanConfMaxInterleaveDelay
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAturConfRateMode
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAturConfRateChanRatio
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAturConfTargetSnrMgn
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAturConfMaxSnrMgn
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAturConfMinSnrMgn
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAturConfDownshiftSnrMgn
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAturConfUpshiftSnrMgn
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAturConfMinUpshiftTime
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAturConfMinDownshiftTime
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAturChanConfFastMinTxRate
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAturChanConfInterleaveMinTxRate
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAturChanConfFastMaxTxRate
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAturChanConfInterleaveMaxTxRate
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAturChanConfMaxInterleaveDelay
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslLineConfProfileRowStatus
             MIN-ACCESS  read-only
             DESCRIPTION
                 "Read-only access is applicable only when static
                  profiles are implemented."

             OBJECT      adslLineAlarmConfProfile
             MIN-ACCESS  read-only
             DESCRIPTION
                 "Read-only access is applicable only when static
                  profiles are implemented."

             OBJECT      adslAtucThresh15MinLofs
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAtucThresh15MinLoss
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

🌈 the read-only vs read-write stuff is the main plot twist here: the same object can be read-only in one setup and read-write in another, depending on whether static profiles are running. iykyk 🫢

             OBJECT      adslAtucThresh15MinLols
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAtucThresh15MinLprs
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAtucThresh15MinESs
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAtucThreshFastRateUp
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAtucThreshInterleaveRateUp
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAtucThreshFastRateDown
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAtucThreshInterleaveRateDown
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAtucInitFailureTrapEnable
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAturThresh15MinLofs
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAturThresh15MinLoss
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAturThresh15MinLprs
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAturThresh15MinESs
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAturThreshFastRateUp
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAturThreshInterleaveRateUp
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAturThreshFastRateDown
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAturThreshInterleaveRateDown
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslLineAlarmConfProfileRowStatus
             MIN-ACCESS  read-only
             DESCRIPTION
                 "Read-only access is applicable only when static
                  profiles are implemented."

         ::= { adslCompliances 1 }

okay bestie, next up is the ATU-R agent compliance statements πŸŽ€ this one has its own little checklist of mandatory groups and some optional ones that are giving "only if you need it" energy πŸ’…

         -- ATU-R agent compliance statements

         adslLineMibAturCompliance MODULE-COMPLIANCE
             STATUS  current
             DESCRIPTION
                 "The compliance statement for SNMP entities
                  which manage ADSL ATU-R interfaces."

             MODULE  -- this module
             MANDATORY-GROUPS
                 {
                 adslAturLineGroup, adslAturPhysicalGroup,
                 adslAturChannelGroup,
                 adslAturAtucPhysPerfIntervalGroup,
                 adslAturAturPhysPerfIntervalGroup,
                 adslAturLineAlarmConfProfileGroup,
                 adslAturLineConfProfileControlGroup
                 }

             GROUP       adslAturAtucPhysPerfRawCounterGroup
             DESCRIPTION
                 "This group is optional.  Implementations which
                  require continuous ATU-C physical event counters
                  should implement this group."

             GROUP       adslAturAturPhysPerfRawCounterGroup
             DESCRIPTION
                 "This group is optional.  Implementations which

                  require continuous ATU-R physical event counters
                  should implement this group."

             GROUP       adslAturAtucChanPerformanceGroup
             DESCRIPTION
                 "This group is optional.  Implementations which
                  require ATU-C channel block event counters should
                  implement this group."

             GROUP       adslAturAturChanPerformanceGroup
             DESCRIPTION
                 "This group is optional.  Implementations which
                  require ATU-R channel block event counters should
                  implement this group."

             OBJECT      adslLineAlarmConfProfile
             MIN-ACCESS  read-only
             DESCRIPTION
                 "Read-only access is applicable only when static
                  profiles are implemented."

             OBJECT      adslAtucThresh15MinLofs
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAtucThresh15MinLoss
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAtucThresh15MinESs
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAtucThreshFastRateUp
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAtucThreshInterleaveRateUp
             MIN-ACCESS  read-write
             DESCRIPTION

                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAtucThreshFastRateDown
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAtucInitFailureTrapEnable
             MIN-ACCESS  read-write

             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAturThresh15MinLofs
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAturThresh15MinLoss
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAturThresh15MinLprs
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAturThresh15MinESs
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAturThreshFastRateUp
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAturThreshInterleaveRateUp
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAturThreshFastRateDown
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslAturThreshInterleaveRateDown
             MIN-ACCESS  read-write
             DESCRIPTION
                 "Read-write access is applicable when
                  static profiles are implemented."

             OBJECT      adslLineAlarmConfProfileRowStatus
             MIN-ACCESS  read-only
             DESCRIPTION
                 "Read-only access is applicable only when static
                  profiles are implemented."

             OBJECT     adslAtucCurrStatus
             SYNTAX   BITS {
                            noDefect(0),
                            lossOfFraming(1),
                            lossOfSignal(2)
                           }
             DESCRIPTION
                 "It is allowable to implement only noDefect(0),
                 lossOfFraming(1) and lossOfSignal(2) by the ATU-R
                 agent."

        ::= { adslCompliances 2 }

ngl the next bit is where the units of conformance live, aka the groups that bundle objects together like a squad 🫢 each one gets its own group number, so don't mix them up πŸ¦‹

         -- units of conformance
         adslLineGroup    OBJECT-GROUP
             OBJECTS {
                adslLineCoding, adslLineType, adslLineSpecific
                }
             STATUS     current
             DESCRIPTION
                 "A collection of objects providing configuration
                 information about an ADSL Line."
         ::= { adslGroups 1 }

         adslPhysicalGroup    OBJECT-GROUP
             OBJECTS {

                adslAtucInvSerialNumber, adslAtucInvVendorID,
                adslAtucInvVersionNumber, adslAtucCurrSnrMgn,
                adslAtucCurrAtn, adslAtucCurrStatus,
                adslAtucCurrOutputPwr, adslAtucCurrAttainableRate,
                adslAturInvSerialNumber, adslAturInvVendorID,
                adslAturInvVersionNumber, adslAturCurrSnrMgn,
                adslAturCurrAtn, adslAturCurrStatus,
                adslAturCurrOutputPwr, adslAturCurrAttainableRate
                }
             STATUS     current
             DESCRIPTION
                 "A collection of objects providing physical
                 configuration information of the ADSL Line."
         ::= { adslGroups 2 }

         adslChannelGroup    OBJECT-GROUP
             OBJECTS {
                adslAtucChanInterleaveDelay, adslAtucChanCurrTxRate,
                adslAtucChanPrevTxRate, adslAtucChanCrcBlockLength,
                adslAturChanInterleaveDelay, adslAturChanCurrTxRate,
                adslAturChanPrevTxRate, adslAturChanCrcBlockLength
                }
             STATUS     current
             DESCRIPTION
                 "A collection of objects providing configuration
                 information about an ADSL channel."
         ::= { adslGroups 3 }

         adslAtucPhysPerfRawCounterGroup OBJECT-GROUP
             OBJECTS {
                adslAtucPerfLofs, adslAtucPerfLoss,
                adslAtucPerfLols, adslAtucPerfLprs,
                adslAtucPerfESs, adslAtucPerfInits
                }
             STATUS     current
             DESCRIPTION
                 "A collection of objects providing raw performance
                 counts on an ADSL Line (ATU-C end)."
         ::= { adslGroups 4 }

that's the compliance block wrapped up for this part 🌈✨

okay bestie, we're still deep in the MIB and these are the object groups that bundle up all the ADSL counters, settings, and alarms 🧚✨

         adslAtucPhysPerfIntervalGroup OBJECT-GROUP
             OBJECTS {
                adslAtucPerfValidIntervals,
                adslAtucPerfInvalidIntervals,
                adslAtucPerfCurr15MinTimeElapsed,
                adslAtucPerfCurr15MinLofs, adslAtucPerfCurr15MinLoss,
                adslAtucPerfCurr15MinLols, adslAtucPerfCurr15MinLprs,
                adslAtucPerfCurr15MinESs, adslAtucPerfCurr15MinInits,
                adslAtucPerfCurr1DayLofs, adslAtucPerfCurr1DayLoss,
                adslAtucPerfCurr1DayLols, adslAtucPerfCurr1DayLprs,
                adslAtucPerfCurr1DayESs, adslAtucPerfCurr1DayInits,
                adslAtucPerfPrev1DayMoniSecs,
                adslAtucPerfPrev1DayLofs, adslAtucPerfPrev1DayLoss,
                adslAtucPerfPrev1DayLols, adslAtucPerfPrev1DayLprs,
                adslAtucPerfPrev1DayESs, adslAtucPerfPrev1DayInits,
                adslAtucIntervalLofs, adslAtucIntervalLoss,
                adslAtucIntervalLols, adslAtucIntervalLprs,
                adslAtucIntervalESs, adslAtucIntervalInits,
                adslAtucIntervalValidData
                }

             STATUS     current
             DESCRIPTION
                 "A collection of objects providing current 15-minute,
                 1-day; and previous 1-day performance counts on
                 ADSL Line (ATU-C end) ."
         ::= { adslGroups 5 }

         adslAturPhysPerfRawCounterGroup OBJECT-GROUP
             OBJECTS {
                adslAturPerfLofs, adslAturPerfLoss,
                adslAturPerfLprs, adslAturPerfESs
                }
             STATUS     current
             DESCRIPTION
                 "A collection of objects providing raw performance
                 counts on an ADSL Line (ATU-R end)."
         ::= { adslGroups 6 }

         adslAturPhysPerfIntervalGroup OBJECT-GROUP
             OBJECTS {
                adslAturPerfValidIntervals,
                adslAturPerfInvalidIntervals,
                adslAturPerfCurr15MinTimeElapsed,
                adslAturPerfCurr15MinLofs, adslAturPerfCurr15MinLoss,
                adslAturPerfCurr15MinLprs, adslAturPerfCurr15MinESs,
                adslAturPerfCurr1DayTimeElapsed,
                adslAturPerfCurr1DayLofs, adslAturPerfCurr1DayLoss,
                adslAturPerfCurr1DayLprs, adslAturPerfCurr1DayESs,
                adslAturPerfPrev1DayMoniSecs,
                adslAturPerfPrev1DayLofs, adslAturPerfPrev1DayLoss,
                adslAturPerfPrev1DayLprs, adslAturPerfPrev1DayESs,
                adslAturIntervalLofs,
                adslAturIntervalLoss, adslAturIntervalLprs,
                adslAturIntervalESs, adslAturIntervalValidData
                }

             STATUS     current
             DESCRIPTION
                 "A collection of objects providing current 15-minute,
                 1-day; and previous 1-day performance counts on
                 ADSL Line (ATU-R end)."
         ::= { adslGroups 7 }

         adslAtucChanPerformanceGroup OBJECT-GROUP
             OBJECTS {
                adslAtucChanReceivedBlks,
                adslAtucChanTransmittedBlks,
                adslAtucChanCorrectedBlks,
                adslAtucChanUncorrectBlks,
                adslAtucChanPerfValidIntervals,
                adslAtucChanPerfInvalidIntervals,
                adslAtucChanPerfCurr15MinTimeElapsed,
                adslAtucChanPerfCurr15MinReceivedBlks,
                adslAtucChanPerfCurr15MinTransmittedBlks,
                adslAtucChanPerfCurr15MinCorrectedBlks,
                adslAtucChanPerfCurr15MinUncorrectBlks,
                adslAtucChanPerfCurr1DayTimeElapsed,
                adslAtucChanPerfCurr1DayReceivedBlks,
                adslAtucChanPerfCurr1DayTransmittedBlks,
                adslAtucChanPerfCurr1DayCorrectedBlks,
                adslAtucChanPerfCurr1DayUncorrectBlks,
                adslAtucChanPerfPrev1DayMoniSecs,
                adslAtucChanPerfPrev1DayReceivedBlks,
                adslAtucChanPerfPrev1DayTransmittedBlks,
                adslAtucChanPerfPrev1DayCorrectedBlks,
                adslAtucChanPerfPrev1DayUncorrectBlks,
                adslAtucChanIntervalReceivedBlks,
                adslAtucChanIntervalTransmittedBlks,
                adslAtucChanIntervalCorrectedBlks,
                adslAtucChanIntervalUncorrectBlks,
                adslAtucChanIntervalValidData
                }
             STATUS     current
             DESCRIPTION
                 "A collection of objects providing channel block
                 performance information on an ADSL channel
                 (ATU-C end)."
         ::= { adslGroups 8 }

         adslAturChanPerformanceGroup OBJECT-GROUP
             OBJECTS {
                adslAturChanReceivedBlks,
                adslAturChanTransmittedBlks,
                adslAturChanCorrectedBlks,
                adslAturChanUncorrectBlks,
                adslAturChanPerfValidIntervals,
                adslAturChanPerfInvalidIntervals,
                adslAturChanPerfCurr15MinTimeElapsed,
                adslAturChanPerfCurr15MinReceivedBlks,
                adslAturChanPerfCurr15MinTransmittedBlks,
                adslAturChanPerfCurr15MinCorrectedBlks,
                adslAturChanPerfCurr15MinUncorrectBlks,
                adslAturChanPerfCurr1DayTimeElapsed,
                adslAturChanPerfCurr1DayReceivedBlks,
                adslAturChanPerfCurr1DayTransmittedBlks,
                adslAturChanPerfCurr1DayCorrectedBlks,
                adslAturChanPerfCurr1DayUncorrectBlks,
                adslAturChanPerfPrev1DayMoniSecs,
                adslAturChanPerfPrev1DayReceivedBlks,
                adslAturChanPerfPrev1DayTransmittedBlks,
                adslAturChanPerfPrev1DayCorrectedBlks,
                adslAturChanPerfPrev1DayUncorrectBlks,
                adslAturChanIntervalReceivedBlks,
                adslAturChanIntervalTransmittedBlks,
                adslAturChanIntervalCorrectedBlks,
                adslAturChanIntervalUncorrectBlks,
                adslAturChanIntervalValidData
                }
             STATUS     current
             DESCRIPTION
                 "A collection of objects providing channel block
                 performance information on an ADSL channel
                 (ATU-C end)."
         ::= { adslGroups 9 }

         adslLineConfProfileGroup OBJECT-GROUP
             OBJECTS {
                adslAtucConfRateMode, adslAtucConfRateChanRatio,
                adslAtucConfTargetSnrMgn, adslAtucConfMaxSnrMgn,
                adslAtucConfMinSnrMgn,
                adslAtucConfDownshiftSnrMgn,
                adslAtucConfUpshiftSnrMgn,
                adslAtucConfMinUpshiftTime,
                adslAtucConfMinDownshiftTime,
                adslAtucChanConfFastMinTxRate,
                adslAtucChanConfInterleaveMinTxRate,
                adslAtucChanConfFastMaxTxRate,
                adslAtucChanConfInterleaveMaxTxRate,
                adslAtucChanConfMaxInterleaveDelay,
                adslAturConfRateMode, adslAturConfRateChanRatio,
                adslAturConfTargetSnrMgn, adslAturConfMaxSnrMgn,
                adslAturConfMinSnrMgn, adslAturConfDownshiftSnrMgn,
                adslAturConfUpshiftSnrMgn,
                adslAturConfMinUpshiftTime,
                adslAturConfMinDownshiftTime,
                adslAturChanConfFastMinTxRate,
                adslAturChanConfInterleaveMinTxRate,
                adslAturChanConfFastMaxTxRate,
                adslAturChanConfInterleaveMaxTxRate,
                adslAturChanConfMaxInterleaveDelay
                }
             STATUS     current
             DESCRIPTION
                 "A collection of objects providing provisioning
                 information about an ADSL Line."
         ::= { adslGroups 10 }

         adslLineAlarmConfProfileGroup OBJECT-GROUP
             OBJECTS {
                adslAtucThresh15MinLofs, adslAtucThresh15MinLoss,
                adslAtucThresh15MinLols, adslAtucThresh15MinLprs,
                adslAtucThresh15MinESs, adslAtucThreshFastRateUp,
                adslAtucThreshInterleaveRateUp,
                adslAtucThreshFastRateDown,
                adslAtucThreshInterleaveRateDown,
                adslAtucInitFailureTrapEnable,
                adslAturThresh15MinLofs, adslAturThresh15MinLoss,
                adslAturThresh15MinLprs, adslAturThresh15MinESs,
                adslAturThreshFastRateUp,
                adslAturThreshInterleaveRateUp,
                adslAturThreshFastRateDown,
                adslAturThreshInterleaveRateDown
                }
             STATUS     current
             DESCRIPTION
                 "A collection of objects providing alarm provisioning
                 information about an ADSL Line."
         ::= { adslGroups 11 }

         adslLineConfProfileControlGroup OBJECT-GROUP
             OBJECTS {
                adslLineConfProfile, adslLineAlarmConfProfile,
                adslLineConfProfileRowStatus,
                adslLineAlarmConfProfileRowStatus
                }
             STATUS     current
             DESCRIPTION
                 "A collection of objects providing profile
                 control for the ADSL system."
         ::= { adslGroups 12 }
         adslNotificationsGroup NOTIFICATION-GROUP
             NOTIFICATIONS {
                adslAtucPerfLofsThreshTrap,
                adslAtucPerfLossThreshTrap,
                adslAtucPerfLprsThreshTrap,
                adslAtucPerfESsThreshTrap,
                adslAtucRateChangeTrap,
                adslAtucPerfLolsThreshTrap,
                adslAtucInitFailureTrap,
                adslAturPerfLofsThreshTrap,
                adslAturPerfLossThreshTrap,
                adslAturPerfLprsThreshTrap,
                adslAturPerfESsThreshTrap,
                adslAturRateChangeTrap
                }
             STATUS        current
             DESCRIPTION
                 "The collection of adsl notifications."
         ::= { adslGroups 13 }

   -- units of conformance for ATU-R agent

            adslAturLineGroup    OBJECT-GROUP
                OBJECTS {
                   adslLineCoding
                   }
                STATUS     current
                DESCRIPTION
                    "A collection of objects providing configuration
                    information about an ADSL Line on the ATU-R side."
            ::= { adslGroups 14 }

            adslAturPhysicalGroup    OBJECT-GROUP
                OBJECTS {
                   adslAtucInvVendorID,
                   adslAtucInvVersionNumber,
                   adslAtucCurrOutputPwr, adslAtucCurrAttainableRate,
                   adslAturInvSerialNumber, adslAturInvVendorID,
                   adslAturInvVersionNumber, adslAturCurrSnrMgn,
                   adslAturCurrAtn, adslAturCurrStatus,
                   adslAturCurrOutputPwr, adslAturCurrAttainableRate,
                   adslAtucCurrStatus
                   }
                STATUS     current
                DESCRIPTION
                    "A collection of objects providing physical
                    configuration information of the ADSL Line on the
                    ATU-R side."

            ::= { adslGroups 15 }

            adslAturChannelGroup    OBJECT-GROUP
                OBJECTS {
                   adslAtucChanInterleaveDelay, adslAtucChanCurrTxRate,
                   adslAtucChanPrevTxRate,
                   adslAturChanInterleaveDelay, adslAturChanCurrTxRate,
                   adslAturChanPrevTxRate, adslAturChanCrcBlockLength
                   }
                STATUS     current
                DESCRIPTION
                    "A collection of objects providing configuration
                   information about an ADSL channel on the ATU-R
                   side."
            ::= { adslGroups 16 }
            adslAturAtucPhysPerfRawCounterGroup OBJECT-GROUP
                OBJECTS {
                   adslAtucPerfLofs, adslAtucPerfLoss,
                   adslAtucPerfESs, adslAtucPerfInits
                   }
                STATUS     current
                DESCRIPTION
                    "A collection of objects providing raw performance
                   counts on an ADSL Line (ATU-C end) provided by the
                   ATU-R agent."
            ::= { adslGroups 17 }

            adslAturAtucPhysPerfIntervalGroup OBJECT-GROUP
                OBJECTS {
                   adslAtucPerfValidIntervals,
                   adslAtucPerfInvalidIntervals,
                   adslAtucPerfCurr15MinTimeElapsed,
                   adslAtucPerfCurr15MinLofs, adslAtucPerfCurr15MinLoss,
                   adslAtucPerfCurr15MinESs, adslAtucPerfCurr15MinInits,
                   adslAtucPerfCurr1DayTimeElapsed,
                   adslAtucPerfCurr1DayLofs, adslAtucPerfCurr1DayLoss,
                   adslAtucPerfCurr1DayESs, adslAtucPerfCurr1DayInits,
                   adslAtucPerfPrev1DayMoniSecs,
                   adslAtucPerfPrev1DayLofs, adslAtucPerfPrev1DayLoss,
                   adslAtucPerfPrev1DayESs, adslAtucPerfPrev1DayInits,
                   adslAtucIntervalLofs, adslAtucIntervalLoss,
                   adslAtucIntervalESs, adslAtucIntervalInits,
                   adslAtucIntervalValidData
                   }
                STATUS     current
                DESCRIPTION
                    "A collection of objects providing current

                   15-minute, 1-day; and previous 1-day performance
                   counts on ADSL Line (ATU-C end) provided by the
                   ATU-R agent."
            ::= { adslGroups 18 }

            adslAturAturPhysPerfRawCounterGroup OBJECT-GROUP
                OBJECTS {
                   adslAturPerfLofs, adslAturPerfLoss,
                   adslAturPerfLprs, adslAturPerfESs
                   }
                STATUS     current
                DESCRIPTION
                    "A collection of objects providing raw performance
                   counts on an ADSL Line (ATU-R end) provided by the
                   ATU-R agent."
            ::= { adslGroups 19 }

            adslAturAturPhysPerfIntervalGroup OBJECT-GROUP
                OBJECTS {
                   adslAturPerfValidIntervals,
                   adslAturPerfInvalidIntervals,
                   adslAturPerfCurr15MinTimeElapsed,
                   adslAturPerfCurr15MinLofs, adslAturPerfCurr15MinLoss,
                   adslAturPerfCurr15MinLprs, adslAturPerfCurr15MinESs,
                   adslAturPerfCurr1DayTimeElapsed,
                   adslAturPerfCurr1DayLofs, adslAturPerfCurr1DayLoss,
                   adslAturPerfCurr1DayLprs, adslAturPerfCurr1DayESs,
                   adslAturPerfPrev1DayMoniSecs,
                   adslAturPerfPrev1DayLofs, adslAturPerfPrev1DayLoss,
                   adslAturPerfPrev1DayLprs, adslAturPerfPrev1DayESs,
                   adslAturIntervalLofs,
                   adslAturIntervalLoss, adslAturIntervalLprs,
                   adslAturIntervalESs, adslAturIntervalValidData
                   }
                STATUS     current
                DESCRIPTION
                    "A collection of objects providing current
                   15-minute, 1-day; and previous 1-day performance
                   counts on ADSL Line (ATU-R end) provided by the
                   ATU-R agent."
            ::= { adslGroups 20 }

            adslAturAtucChanPerformanceGroup OBJECT-GROUP
                OBJECTS {
                   adslAtucChanReceivedBlks,
                   adslAtucChanTransmittedBlks,
                   adslAtucChanCorrectedBlks,
                   adslAtucChanUncorrectBlks,
                   adslAtucChanPerfCurr15MinTimeElapsed,
                   adslAtucChanPerfCurr15MinReceivedBlks,
                   adslAtucChanPerfCurr15MinTransmittedBlks,
                   adslAtucChanPerfCurr15MinCorrectedBlks,
                   adslAtucChanPerfCurr15MinUncorrectBlks,
                   adslAtucChanPerfCurr1DayTimeElapsed,
                   adslAtucChanPerfCurr1DayReceivedBlks,
                   adslAtucChanPerfCurr1DayTransmittedBlks,
                   adslAtucChanPerfCurr1DayCorrectedBlks,
                   adslAtucChanPerfCurr1DayUncorrectBlks,
                   adslAtucChanPerfPrev1DayMoniSecs,
                   adslAtucChanPerfPrev1DayReceivedBlks,
                   adslAtucChanPerfPrev1DayTransmittedBlks,
                   adslAtucChanPerfPrev1DayCorrectedBlks,
                   adslAtucChanPerfPrev1DayUncorrectBlks,
                   adslAtucChanPerfValidIntervals,
                   adslAtucChanPerfInvalidIntervals,
                   adslAtucChanIntervalReceivedBlks,
                   adslAtucChanIntervalTransmittedBlks,
                   adslAtucChanIntervalCorrectedBlks,
                   adslAtucChanIntervalUncorrectBlks,
                   adslAtucChanIntervalValidData
                   }
                STATUS     current
                DESCRIPTION
                    "A collection of objects providing channel block
                    performance information on an ADSL channel
                    (ATU-C end) provided by the ATU-R agent."
            ::= { adslGroups 21 }

            adslAturAturChanPerformanceGroup OBJECT-GROUP
                OBJECTS {
                   adslAturChanReceivedBlks,
                   adslAturChanTransmittedBlks,
                   adslAturChanCorrectedBlks,
                   adslAturChanUncorrectBlks,
                   adslAturChanPerfValidIntervals,
                   adslAturChanPerfInvalidIntervals,
                   adslAturChanPerfCurr15MinTimeElapsed,
                   adslAturChanPerfCurr15MinReceivedBlks,
                   adslAturChanPerfCurr15MinTransmittedBlks,
                   adslAturChanPerfCurr15MinCorrectedBlks,
                   adslAturChanPerfCurr15MinUncorrectBlks,
                   adslAturChanPerfCurr1DayTimeElapsed,
                   adslAturChanPerfCurr1DayReceivedBlks,
                   adslAturChanPerfCurr1DayTransmittedBlks,
                   adslAturChanPerfCurr1DayCorrectedBlks,
                   adslAturChanPerfCurr1DayUncorrectBlks,
                   adslAturChanPerfPrev1DayMoniSecs,
                   adslAturChanPerfPrev1DayReceivedBlks,
                   adslAturChanPerfPrev1DayTransmittedBlks,
                   adslAturChanPerfPrev1DayCorrectedBlks,
                   adslAturChanPerfPrev1DayUncorrectBlks,
                   adslAturChanIntervalReceivedBlks,
                   adslAturChanIntervalTransmittedBlks,
                   adslAturChanIntervalCorrectedBlks,
                   adslAturChanIntervalUncorrectBlks,
                   adslAturChanIntervalValidData
                   }
                STATUS     current
                DESCRIPTION
                    "A collection of objects providing channel block
                    performance information on an ADSL channel
                    (ATU-R end) provided by the ATU-R agent."
            ::= { adslGroups 22 }

            adslAturLineAlarmConfProfileGroup OBJECT-GROUP
                OBJECTS {
                   adslAtucThresh15MinLofs, adslAtucThresh15MinLoss,
                   adslAtucThresh15MinESs, adslAtucThreshFastRateUp,
                   adslAtucThreshInterleaveRateUp,
                   adslAtucThreshFastRateDown,
                   adslAtucThreshInterleaveRateDown,
                   adslAtucInitFailureTrapEnable,
                   adslAturThresh15MinLofs, adslAturThresh15MinLoss,
                   adslAturThresh15MinLprs, adslAturThresh15MinESs,
                   adslAturThreshFastRateUp,
                   adslAturThreshInterleaveRateUp,
                   adslAturThreshFastRateDown,
                   adslAturThreshInterleaveRateDown
                   }
                STATUS     current
                DESCRIPTION
                    "A collection of objects providing alarm
   provisioning
                    information about an ADSL Line provided by the
                    ATU-R agent."
            ::= { adslGroups 23 }

            adslAturLineConfProfileControlGroup OBJECT-GROUP
                OBJECTS {
                   adslLineAlarmConfProfile,
                   adslLineAlarmConfProfileRowStatus
                   }
                STATUS     current
                DESCRIPTION

                    "A collection of objects providing profile
                    control for the ADSL system by the ATU-R agent."
            ::= { adslGroups 24 }

            adslAturNotificationsGroup NOTIFICATION-GROUP
                NOTIFICATIONS {
                    adslAtucPerfLofsThreshTrap,
                    adslAtucPerfLossThreshTrap,
                    adslAtucPerfESsThreshTrap,
                    adslAtucRateChangeTrap,
                    adslAturPerfLofsThreshTrap,
                    adslAturPerfLossThreshTrap,
                    adslAturPerfLprsThreshTrap,
                    adslAturPerfESsThreshTrap,
                    adslAturRateChangeTrap
                    }
                STATUS        current
                DESCRIPTION
                    "The collection of ADSL notifications implemented by
                    the ATU-R agent."
            ::= { adslGroups 25 }

   END

8. Acknowledgments πŸ’–

Okay bestie, time for the shoutouts! 🫢 The current authors/editors are:

  • Gregory Bathrick (AG Communication Systems)
  • Faye Ly (Copper Mountain Networks)

Input from the ADSL Forum was edited by:

  • Gregory Bathrick (AG Communication Systems)
  • John Burgess (Predictive Systems)

Contributions have been received from, but not limited to the following (in alphabetical order) 🌸 so this squad is literally iconic:

  • David Allen (Nortel)
  • Rajesh Abbi (Alcatel)
  • Gregory Bathrick (AG Communication Systems)
  • Umberto Bonollo (NEC)
  • John Burgess (Predictive Systems)
  • Gail Cone (Amati)
  • Andrew Cheers (NEC)
  • Peter Duffy (Atlantech)
  • Kevin Godfrey (Motorola)
  • Bill Hong (Diamond Lane)
  • Bob Jenness (Siemens)
  • Lars Johansson (Ericsson)
  • Jeff Johnson (RedBack Network)
  • Tsu Kai Lu (DSC)
  • Faye Ly (Copper Mountain Networks)
  • Gigi Karmous-Edwards (Pulsecom)
  • Ron Knipper (Diamond Lane)
  • Adil Masood (AG Communication Systems)
  • Padmore Peterson (BT)
  • Anna Salguero (SBC)
  • Donald Simon (Motorola)
  • Mike Sneed (Pulsecom)
  • Ted Soo-Hoo (Pulsecom)
  • John Stehman (Diamond Lane)
  • Chuck Storry (Newbridge)
  • Chi-Lin Tom (AFC)
  • Frank Van der Putten (Alcatel)
  • Marc Van Vlimmeren (Alcatel)
  • Bert Wijnen (IBM)

9. References πŸ“š

okay bestie, the reference list is a whole vibe πŸ“š every source this spec leans on, all 26 of them, untouched:

  • [1] McCloghrie K., Perkins D. and J. Schoenwaelder, "Structure of Management Information Version 2 (SMIv2)", STD 58, RFC 2578, April 1999.
  • [2] McCloghrie K., Perkins D. and J. Schoenwaelder, "Textual Conventions for SMIv2", STD 58, RFC 2579, April 1999.
  • [3] ADSL Forum TR-005, "Network Management Element Management", March 1998.
  • [4] McCloghrie, K. and M. Rose, Editors, "Management Information Base for Network Management of TCP/IP-based internets: MIB-II", STD 17, RFC 1213, March 1991.
  • [5] McCloghrie, K. and F. Kastenholz, "The Interfaces Group MIB using SMIv2", RFC 2233, November 1997.
  • [6] Case, J., McCloghrie, K., Rose, M. and S. Waldbusser, "Management Information Base for version 2 of the Simple Network Management Protocol (SNMPv2)", RFC 1907, January 1996.
  • [7] Case, J., Fedor, M., Schoffstall, M. and J. Davin. " A Simple Network Management Protocol (SNMP)", STD 15, RFC 1157, May 1990.
  • [8] Case, J., McCloghrie, K., Rose, M. and S. Waldbusser, "Protocol Operations for Version 2 of the Simple Network Management Protocol (SNMPv2)", RFC 1905, January 1996.
  • [9] ADSL Forum TR-006, "SNMP-based ADSL Line MIB", March 1998.
  • [10] American National Standards Institute, ANSI T1.413-1995, August 1995.
  • [11] ADSL Forum WT-014, "DMT Line Code Specific MIB", February 1999.
  • [12] ADSL Forum WT-015, "CAP Line Code Specific MIB", February 1999.
  • [13] Wijnen, B., Harrington, D. and R. Presuhn, "An Architecture for Describing SNMP Management Frameworks", RFC 2571, April 1999.
  • [14] Rose, M. and K. McCloghrie, "Structure and Identification of Management Information for TCP/IP-based Internets", STD 16, RFC 1155, May 1990.
  • [15] Rose, M. and K. McCloghrie, "Concise MIB Definitions", STD 16, RFC 1212, March 1991.
  • [16] Rose, M., "A Convention for Defining Traps for use with the SNMP", RFC 1215, March 1991.
  • [17] McCloghrie K., Perkins D. and J. Schoenwaelder, "Conformance Statements for SMIv2", RFC 2580, April 1999.
  • [18] Case, J., McCloghrie, K., Rose, M. and S. Waldbusser, "Introduction to Community-based SNMPv2", RFC 1901, January 1996.
  • [19] Case, J., McCloghrie, K., Rose, M. and S. Waldbusser, "Transport Mappings for Version 2 of the Simple Network Management Protocol (SNMPv2)", RFC 1906, January 1996.
  • [20] Case, J., Harrington D., Presuhn R. and B. Wijnen, "Message Processing and Dispatching for the Simple Network Management Protocol (SNMP)", RFC 2572, April 1999.
  • [21] Blumenthal, U. and B. Wijnen, "User-based Security Model (USM) for version 3 of the Simple Network Management Protocol (SNMPv3)", RFC 2574, April 1999.
  • [22] Levi, D., Meyer, P. and B. Stewart, "SNMP Applications", RFC 2573, April 1999.
  • [23] Wijnen, B., Presuhn, R. and K. McCloghrie, "View-based Access Control Model (VACM) for the Simple Network Management Protocol (SNMP)", RFC 2575, April 1999.
  • [24] Ahmed, M. and K. Tesink, Editors, "Definitions of Managed Objects for ATM Management Version 8.0 using SMIv2", RFC 1695, August 1994.
  • [25] McCloghrie, K. and A. Bierman, "Entity MIB", RFC 2037, October 1996.
  • [26] Yergeau, F., "UTF-8, a transformation format of ISO 10646", RFC 2279, January 1998.

10. Security Considerations πŸ”

this part is serious, bestie πŸ’€ no cap, read every word of it.
  1. Locking out unauthorized access to the ADSL MIB through the element management system is outside the scope of this document πŸ™… that's not this doc's job. But it's worth noting that access to the MIB lets the unauthorized entity modify the profiles (sect 6.4), so both subscriber service and network operations can get interfered with 😭. Subscriber service can be altered by changing service characteristics like rate partitioning and maximum transmission rates. Network operations can be impacted by changing trap thresholds, like SNR margins.
  2. There are a bunch of managed objects in this MIB that may be considered to contain sensitive information πŸ‘€. In particular, the certain objects may be considered sensitive in many environments, since they would let an intruder find out which vendor's equipment is in use on the network. So in some environments it may be important to control read access to these objects, and possibly even encrypt their values when sending them over the network via SNMP πŸ”’. Not all versions of SNMP provide features for such a secure environment.

SNMPv1 by itself is such an insecure environment πŸ’€. Even if the network itself is secure (for example by using IPSec), there's still no control over who on that secure network is allowed to access and GET (read) the objects in this MIB. It is recommended that the implementors consider the security features provided by the SNMPv3 framework 🧁. Specifically, the User-based Security Model in RFC 2574 [21] and the View-based Access Control Model in RFC 2575 [23] is recommended.

It is then a customer/user responsibility to make sure the SNMP entity giving access to an instance of this MIB is properly configured to give access to those objects only to the principals (users) that have legitimate rights to access them 🫢.

  1. ADSL layer connectivity from the ATU-R will let the subscriber manipulate both the ADSL link directly and the AOC/EOC channels for their own loop 😬. For example, unchecked or unfiltered fluctuations initiated by the subscriber could generate enough traps to potentially overwhelm either the management interface to the network or the element manager 🚨. Other attacks affecting the ATU-R portions of the MIB may also be possible.

11. Intellectual Property Notice 🧾

the IETF takes no position on the validity or scope of any intellectual property or other rights that might be claimed to pertain to the implementation or use of the technology described in this document, or on the extent to which any license under such rights might or might not be available. It also doesn't represent that it has made any effort to identify any such rights. Info on the IETF's procedures for rights in standards-track and standards-related documentation can be found in BCP-11. Copies of claims of rights made available for publication, and any assurances of licenses to be made available, or the result of an attempt to get a general license or permission for implementers or users of this specification to use such proprietary rights, can be obtained from the IETF Secretariat.

The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights which may cover technology that may be required to practice this standard. Please send that information to the IETF Executive Director πŸ’Œ.


12. Authors' Addresses πŸ’Œ

the two authors, with their contact details exactly as they appear πŸŽ€:

Gregory Bathrick
AG Communication Systems
[A Subsidiary of Lucent Technologies]
2500 W Utopia Rd.
Phoenix, AZ 85027 USA

Phone: +1 602-582-7679
Fax:   +1 602-582-7697
EMail: bathricg@agcs.com

Faye Ly
Copper Mountain Networks
Norcal Office
2470 Embarcadero Way
Palo Alto, CA 94303

Phone: +1 650-858-8500
Fax:   +1 650-858-8085
EMail: faye@coppermountain.com

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

you can copy and share this document and translations of it, and make derivative works that comment on or explain it or help implement it. You can prepare, copy, publish and distribute those works, in whole or in part, without restriction of any kind, as long as the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations. The one exceptions are developing Internet standards, where the procedures for copyrights defined in the Internet Standards process must be followed, and translating it into languages other than English.

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

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


Acknowledgement 🫢

funding for the RFC Editor function is currently provided by the Internet Society πŸ’–

πŸ“¦ where this page comes from