RFC 6766

xDSL Multi-Pair Bonding Using Time-Division Inverse Multiplexing (G.Bond/TDIM) MIB

πŸ“… published February 2013, from ietf

Part 1 of 9 πŸŽ€

RFC 6766: xDSL Multi-Pair Bonding Using Time-Division Inverse Multiplexing (G.Bond/TDIM) MIB ✨

Okay bestie, welcome to RFC 6766 πŸ’– It's a Standards Track document from the IETF, written by E. Beili of Actelis Networks, dated February 2013, with ISSN 2070-1721. Standards Track means this is a real Internet standard, not a suggestion πŸ’… The header doesn't list any RFCs it obsoletes or updates.

The title says it all: it's a MIB (a Management Information Base, basically a big organised menu of things you can read and configure on a device) for bonded xDSL lines that use TDIM. Think of it as a way to team up several DSL pairs so they act like one super-fast, mixed-traffic link πŸ¦‹

Internet Engineering Task Force (IETF)                          E. Beili
Request for Comments: 6766                              Actelis Networks
Category: Standards Track                                  February 2013
ISSN: 2070-1721

Abstract

Okay so the abstract says this document defines a MIB module for network management protocols in TCP/IP-based internets 🌸 It proposes an extension to the GBOND-MIB module with a set of objects for managing multi-pair bonded xDSL interfaces that use Time-Division Inverse Multiplexing (TDIM), as defined in ITU-T Recommendation G.998.3. Iconic, honestly πŸ”₯

Status of This Memo

Literally the official "this is a standard" section. This is an Internet Standards Track document πŸŽ€ It's a product of the IETF, it represents the consensus of the IETF community, it got public review, and the IESG approved it for publication. If you want more on Internet Standards, check Section 2 of RFC 5741.

For the current status, any errata, and how to send feedback, go to http://www.rfc-editor.org/info/rfc6766 ✨

Copyright (c) 2013 IETF Trust and the persons identified as the document authors. All rights reserved 🧚

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication. Please read these carefully, because they spell out your rights and restrictions. Code Components pulled out of this document must include the Simplified BSD License text, as described in Section 4.e of the Trust Legal Provisions, and they come without warranty as described in that license πŸ’œ

Table of Contents

   1. Introduction ....................................................2
   2. The Internet-Standard Management Framework ......................3
   3. The Broadband Forum Management Framework for xDSL Bonding .......3
   4. Relationship to Other MIB Modules ...............................3
      4.1. Relationship to the Interfaces Group MIB Module ............3
      4.2. Relationship to the G.Bond MIB Module ......................3
   5. MIB Structure ...................................................4
      5.1. Overview ...................................................4
      5.2. Link Protection Configuration ..............................4
      5.3. Service Configuration ......................................5
           5.3.1. Management of TDM Services and Service Drop
                  Priority during Bandwidth Degradation ...............6
           5.3.2. Service Notifications ...............................6
      5.4. Performance Monitoring .....................................7
      5.5. Mapping of Broadband Forum TR-159 and ITU-T G.998.3
           Managed Objects ............................................7
   6. G.Bond/TDIM MIB Definitions ....................................10
   7. Security Considerations ........................................51
   8. IANA Considerations ............................................53
   9. Acknowledgments ................................................53
   10. References ....................................................53
      10.1. Normative References .....................................53
      10.2. Informative References ...................................54

1. Introduction 🌈

Okay, so multi-pair bonding with Time-Division Inverse Multiplexing (TDIM), also known as G.Bond/TDIM, is specified in ITU-T Recommendation G.998.3 [G.998.3] πŸ¦‹ It's a method for bonding (or aggregating) several xDSL lines, or individual bearer channels inside those lines, into one bidirectional logical link. That link can carry a mix of traffic, like Ethernet, Asynchronous Transfer Mode (ATM), and Time-Division Multiplexing (TDM). Main character energy πŸ‘‘

The MIB module in this document adds G.Bond/TDIM-specific objects for managing G.998.3 bonded interfaces. It extends the common bonding objects from the GBOND-MIB module [RFC6765] πŸ’…

2. The Internet-Standard Management Framework πŸŽ€

If you want the big-picture overview of the current Internet-Standard Management Framework, check section 7 of RFC 3410 [RFC3410] πŸ“š

Managed objects are accessed through a virtual information store called the Management Information Base, or MIB. MIB objects are usually accessed with the Simple Network Management Protocol (SNMP). Objects in the MIB are defined using the mechanisms in the Structure of Management Information (SMI). This memo specifies a MIB module that complies with SMIv2, which is described in STD 58, RFC 2578 [RFC2578], STD 58, RFC 2579 [RFC2579], and STD 58, RFC 2580 [RFC2580] πŸ”₯

Now the important bit about the key words. In this document, the key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" are to be interpreted as described in BCP 14, RFC 2119 [RFC2119]. These are the official strength words, so we read them literally 🫢

3. The Broadband Forum Management Framework for xDSL Bonding ✨

This document uses the Broadband Forum technical report "Management Framework for xDSL Bonding" [TR-159]. That report defines a management model and a hierarchy of management objects for bonded xDSL interfaces. It's the blueprint the rest of the MIB is built on 🧚

4. Relationship to Other MIB Modules πŸ’–

Here's how the MIB modules in this document connect to the other MIB modules in the relevant RFCs. Specifically, we're talking about the Interfaces Group MIB (IF-MIB) and the G.Bond MIB (GBOND-MIB) 🌸

4.1. Relationship to the Interfaces Group MIB Module

A G.Bond/TDIM port is a special case of a bonded multi-pair xDSL interface, so it's managed with the generic interface management objects in the IF-MIB [RFC2863]. Specifically, an interface index (ifIndex) is used to index G.Bond/TDIM ports, as well as xDSL lines and channels, in a managed system πŸ¦‹

4.2. Relationship to the G.Bond MIB Module

The GBOND-MIB module [RFC6765] defines management objects that are common to all bonded multi-pair xDSL interfaces. It covers the bonding management, bonded port and channel configuration, initialization sequence, and so on πŸ’œ

Both the GBOND-MIB and G9983-MIB modules are REQUIRED to manage a G.Bond/TDIM port πŸ”₯

5. MIB Structure 🌈

5.1. Overview

Every management object in the G9983-MIB module lives in a single group called g9983Port. That group is split into 6 sub-groups, structured the way RFC 4181 [RFC4181] recommends πŸŽ€

  • g9983PortNotifications: notifications (TDIM Service 'down'/'up') πŸ””
  • g9983PortConfTable: objects for configuring a G.Bond/TDIM port βš™οΈ
  • g9983PortCapTable: objects that reflect the capabilities of a G.Bond/TDIM port 🧠
  • g9983PortStatTable: objects with overall status information for a G.Bond/TDIM port. These complement the generic status info from the ifTable of the IF-MIB and the gBondPortStatFltStatus of GBOND-MIB πŸ“Š
  • g9983SvcTable: objects for configuring and checking the status of the services on a G.Bond/TDIM port πŸ“
  • g9983PM: objects for OPTIONAL historical Performance Monitoring (PM) of a G.Bond/TDIM port πŸ•°οΈ

The G.Bond/TDIM specification allows an optional Forward Error Correction (FEC) and Interleaver block. If it's supported and enabled, it protects you against micro-interruptions, alien noise, and even individual Bonding Channel Entity (BCE) failures, which is also called cut-line protection πŸ›‘οΈβœ¨

The objects in the g9983PortConfTable can be used to configure and query the FEC and Interleaver function of the G.Bond/TDIM port πŸ’…

5.3. Service Configuration

Okay, this is where it gets spicy 🌢️ The other two xDSL Multi-Pair Bonding schemes, G.Bond/ATM and G.Bond/Ethernet, send the info needed to reassemble fragmented data along with the data itself. G.Bond/TDIM is different: it's a synchronous scheme, so both ends need to know the data distribution tables before any actual data transfer can happen πŸ¦‹

The objects in the g9983PortConfTable (g9983PortConfAdminServices), g9983SvcTable, and g9983OperSvcTable can be used to configure and query the services carried over the G.Bond/TDIM link. Services can be configured independently of the link state (in-service and out-of-service). G.998.3 sends service configuration changes through specific Bonding Communication Channel (BCC) messages, which switch both ends of the link to the new configuration at the same time 🫢

A G.Bond/TDIM link can have up to 60 active services. This MIB module lets you define up to 255 services in the g9983SvcTable, where each row is a possible service. Then you set the actual service configuration with the g9983PortConfAdminServices object, which is a byte-vector of service indices. It lists the active services in the order of their position in the G.Bond/TDIM frame. This design makes it easy to change service drop priority, because that priority directly follows the service position πŸ‘‘

The actual list of services lives in the read-only g9983OperSvcTable. Each entry's index matches the service position, starting at index 1 for the first entry, 2 for the second, and so on. That gives a management app an easy way to navigate the services with GET-NEXT, so it doesn't have to count bytes in the g9983PortConfAdminServices object 🧚

The service configuration can only be changed on a Bonding Terminating Unit at the Central Office (BTU-C). Don't forget this one, bestie πŸ™ˆ

When you configure services, keep in mind that the sum of all the services' bandwidth SHOULD be less than or equal to the target data rate of the bonded link. Also, G.Bond/TDIM links are symmetrical, which means their upstream data rate equals their downstream data rate πŸ’–

5.3.1. Management of TDM Services and Service Drop Priority during Bandwidth Degradation

The G.Bond/TDIM protocol lets you map TDM services straight into the TDIM bonded link, with no additional overhead. It only handles structure-agnostic TDM transport, so it ignores any structure that might be imposed on those streams. In particular, it ignores the structure from standard TDM framing [G.704] 🌸

When bandwidth degrades, the lower-priority services get impaired or dropped first. Synchronous services (fractional DS1/E1, clear channel E1/T1, T3/E3, clock) positioned at the beginning of the G.Bond/TDIM frame have higher priority than asynchronous services (Ethernet, ATM, Generic Framing Procedure (GFP) encapsulated) positioned farther away. Within services of the same type, the ones with a lower position (index) have higher priority πŸ“

5.3.2. Service Notifications πŸ””

okay so this MIB module gives you specific 'up'/'down' notifications (g9983SvcUp/g9983SvcDown) for every configured service πŸ’–. when bandwidth drops, a bunch of services can get suspended (dropped) all at once, and the order depends on their drop priority, which is just their position in the service list πŸ¦‹. here's the tea: a higher-priority service can get dropped before a lower-priority one 😭. say you've got two services on a 2-Mbps G.Bond/TDIM link: a T1 service (g9983SvcType set to ds1, needing 1.5 Mbps) and an Ethernet service sized at 0.5 Mbps. if the actual link bandwidth falls to 1.4 Mbps, the T1 service with a g9983OperSvcPosition of 1 gets dropped, while the Ethernet service with a g9983OperSvcPosition of 2 stays up 🧚

Notifications SHOULD be rate-limited (throttled) so there's an implementation-specific gap between consecutive notifications for the same event 🌸. this is what stops "notification flooding" when g9983OperSvcState keeps flipping between 'up' and 'down' πŸ™ˆ. and when a notification gets rate-limited, it's dropped and never queued to be sent later πŸ’€. this is meant as a general rate-limiting rule for any notification that doesn't have its own rate-limiting rule in this document ✨

5.4. Performance Monitoring πŸ“Š

the OPTIONAL Performance Monitoring counters, thresholds, and history buckets (interval-counters) are kind of like the ones in [TR-159] πŸ“. they're built with the textual conventions from the HC-PerfHist-TC-MIB [RFC3705], and that module gives you 64-bit versions of the textual conventions from the PerfHist-TC-MIB [RFC3593] πŸŽ€

the agent SHOULD line up the start of each interval with a fifteen-minute wall clock boundary πŸ•. same vibe for the one-day intervals: they SHOULD start at the beginning of a day 🌈

counters don't reset when a G.Bond TDIM port gets re-initialized πŸ™…β€β™€οΈ. they only reset when the agent itself gets reset or re-initialized πŸ’œ

also, accumulation of certain performance events on a monitored entity is paused (counting stops) while that service is unavailable 😴. the DESCRIPTION clause of each Performance Monitoring counter in this MIB module says which counters get paused during those periods ✨

5.5. Mapping of Broadband Forum TR-159 and ITU-T G.998.3 Managed Objects πŸ—ΊοΈ

this section maps the managed objects (attributes) defined in [TR-159] to the managed objects in this document 🫢. and every management object defined in [G.998.3] has a matching object in [TR-159] πŸ’…

+------------------------------+---------------------------------------+
| TR-159 Managed Object        | Corresponding SNMP Object             |
+------------------------------+---------------------------------------+
| oBondTDIM - Basic Package    |                                       |
| (Mandatory)                  |                                       |
+------------------------------+---------------------------------------+
| aCRC4Errors                  | g9983PortStatCrc4Errors               |
+------------------------------+---------------------------------------+
| aCRC6Errors                  | g9983PortStatCrc6Errors               |
+------------------------------+---------------------------------------+
| aCRC8Errors                  | g9983PortStatCrc8Errors               |
+------------------------------+---------------------------------------+
| aFECSupported                | g9983PortCapFecSupported              |
+------------------------------+---------------------------------------+
+------------------------------+---------------------------------------+
| oBondTDIM - FEC Package      |                                       |
| (Optional)                   |                                       |
+------------------------------+---------------------------------------+
| aFECAdminState               | g9983PortConfFecAdminState            |
+------------------------------+---------------------------------------+
| aFECOperState                | g9983PortStatFecOperState             |
+------------------------------+---------------------------------------+
| aFECWordSize                 | g9983PortConfFecWordSize              |
+------------------------------+---------------------------------------+
| aFECRedundancySize           | g9983PortConfFecRedundancySize        |
+------------------------------+---------------------------------------+
| aFECInterleaverType          | g9983PortConfFecInterleaverType       |
+------------------------------+---------------------------------------+
| aFECInterleaverDepth         | g9983PortConfFecInterleaverDepth      |
+------------------------------+---------------------------------------+
| aFECMaxWordSize              | g9983PortCapFecMaxWordSize            |
+------------------------------+---------------------------------------+
| aFECMaxRedundancySize        | g9983PortCapFecMaxRedundancySize      |
+------------------------------+---------------------------------------+
| aFECInterleaverTypesSupported|g9983PortCapFecInterleaverTypeSupported|
+------------------------------+---------------------------------------+
| aFECMaxInterleaverDepth      | g9983PortCapFecMaxInterleaverDepth    |
+------------------------------+---------------------------------------+
| oTDIMService - Basic         |                                       |
| Package (Mandatory)          |                                       |
+------------------------------+---------------------------------------+
| aServiceID                   | g9983OperSvcPosition                  |
+------------------------------+---------------------------------------+
| aServiceIfIdx                | g9983SvcIfIdx                         |
+------------------------------+---------------------------------------+
| aServiceType                 | g9983SvcType                          |
+------------------------------+---------------------------------------+
| aServiceSize                 | g9983SvcSize                          |
+------------------------------+---------------------------------------+
| aServiceOperState            | g9983OperSvcState                     |
+------------------------------+---------------------------------------+
| aServiceUpDownEnable         | g9983PortConfSvcUpDownEnable          |
+------------------------------+---------------------------------------+
| nServiceUp                   | g9983SvcUp                            |
+------------------------------+---------------------------------------+
| nServiceDown                 | g9983SvcDown                          |
+------------------------------+---------------------------------------+

                Table 1: Mapping of TR-159 Managed Objects

not every mapping is one-to-one, so heads up πŸ™‹β€β™€οΈ. for example, TR-159 PM attributes aGroupPerf* map to the matching gBondPortPm* objects of the GBOND-MIB module, but this MIB module doesn't have dedicated PM attributes for g9983PortPm* and g9983SvcPm*. since they're defined exactly the same as the gBondPortPm* objects in GBOND-MIB, we can map g9983PortPm* and g9983SvcPm* onto the relevant aGroupPerf* attributes from TR-159. we call that a 'partial mapping' because it isn't one-to-one 🫧

6. G.Bond/TDIM MIB Definitions ✨

the G9983-MIB module pulls in objects from SNMPv2-SMI [RFC2578], SNMPv2-TC [RFC2579], SNMPv2-CONF [RFC2580], IF-MIB [RFC2863], and HC-PerfHist-TC-MIB [RFC3705] πŸ“š. it's been structured the way [RFC4181] recommends πŸŽ€

G9983-MIB DEFINITIONS ::= BEGIN

  IMPORTS
    MODULE-IDENTITY,
    OBJECT-TYPE,
    NOTIFICATION-TYPE,
    mib-2,
    Unsigned32,
    Counter32
      FROM SNMPv2-SMI          -- RFC 2578
    TEXTUAL-CONVENTION,
    RowStatus,
    TruthValue
      FROM SNMPv2-TC           -- RFC 2579
    MODULE-COMPLIANCE,
    OBJECT-GROUP,
    NOTIFICATION-GROUP
      FROM SNMPv2-CONF         -- RFC 2580
    ifIndex,
    InterfaceIndex
      FROM IF-MIB              -- RFC 2863
    HCPerfCurrentCount,
    HCPerfIntervalCount,
    HCPerfValidIntervals,
    HCPerfInvalidIntervals,
    HCPerfTimeElapsed
      FROM HC-PerfHist-TC-MIB  -- RFC 3705
    ;
------------------------------------------------------------------------
  g9983MIB MODULE-IDENTITY
    LAST-UPDATED "201302200000Z"  -- 20 February 2013
    ORGANIZATION "IETF ADSL MIB Working Group"
    CONTACT-INFO
      "WG charter:
        http://datatracker.ietf.org/wg/adslmib/charter/

      Mailing Lists:
        General Discussion: adslmib@ietf.org
        To Subscribe: adslmib-request@ietf.org
        In Body: subscribe your_email_address

       Chair: Menachem Dodge
      Postal: ECI Telecom, Ltd.
              30 Hasivim St.
              Petach-Tikva  4951169
              Israel
       Phone: +972-3-926-8421
       EMail: menachemdodge1@gmail.com

      Editor: Edward Beili
      Postal: Actelis Networks, Inc.
              25 Bazel St., P.O.B. 10173
              Petach-Tikva  49103
              Israel
       Phone: +972-3-924-3491
       EMail: edward.beili@actelis.com"

    DESCRIPTION
      "The objects in this MIB module are used to manage the
      multi-pair bonded xDSL interfaces using time-division inverse
      multiplexing (TDIM), as defined in ITU-T Recommendation G.998.3
      (G.Bond/TDIM).

      This MIB module MUST be used in conjunction with the GBOND-MIB
      module, common to all G.Bond technologies.

      The following references are used throughout this MIB module:

      [G.998.3] refers to:
        ITU-T Recommendation G.998.3: 'Multi-pair bonding using
        time-division inverse multiplexing', January 2005.

      [TR-159] refers to:
        Broadband Forum Technical Report: 'Management Framework for
        xDSL Bonding', December 2008.

      Naming Conventions:
        BCE    - Bonding Channel Entity
        BTU    - Bonding Terminating Unit
        BTU-C  - Bonding Terminating Unit, CO side
        BTU-R  - Bonding Terminating Unit, Remote Terminal (CPE) side
        CO     - Central Office
        CPE    - Customer Premises Equipment
        GBS    - Generic Bonding Sub-layer
        GBS-C  - Generic Bonding Sub-layer, CO side
        GBS-R  - Generic Bonding Sub-layer, Remote Terminal (CPE) side
        SNR    - Signal to Noise Ratio

     Copyright (c) 2013 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or without
     modification, is permitted pursuant to, and subject to the license
     terms contained in, the Simplified BSD License set forth in Section
     4.c of the IETF Trust's Legal Provisions Relating to IETF Documents
     (http://trustee.ietf.org/license-info)."

    REVISION    "201302200000Z"  -- 20 February 2013
    DESCRIPTION "Initial version, published as RFC 6766."

    ::= { mib-2 210 }

   -- Sections of the module
   -- Structured as recommended by RFC 4181, Appendix D

   g9983Objects     OBJECT IDENTIFIER ::= { g9983MIB 1 }

   g9983Conformance OBJECT IDENTIFIER ::= { g9983MIB 2 }

   -- Groups in the module

   g9983Port        OBJECT IDENTIFIER ::= { g9983Objects 1 }

   -- Textual Conventions

okay so this is where the MIB stuff starts getting very precise πŸ’… the textual conventions are basically custom types, and the notifications are the little alarm bells that go off when a service goes up or down πŸ”” ngl the DESCRIPTION strings are the real tea, so they're copied exactly below 🫢

   G9983SvcIndex ::= TEXTUAL-CONVENTION
     DISPLAY-HINT "d"
     STATUS      current
     DESCRIPTION
       "A unique value, greater than zero, for each service defined
       in the managed G.Bond/TDIM port.
       It is RECOMMENDED that values be assigned contiguously
       starting from 1.  The value for each service MUST remain
       constant at least from one re-initialization of the local
       management subsystem to the next re-initialization."
     SYNTAX      Unsigned32 (1..255)

   G9983SvcIndexList ::= TEXTUAL-CONVENTION
     DISPLAY-HINT "1d:"
     STATUS      current
     DESCRIPTION
       "This textual convention represents a continuous ordered list of
       all the services defined for the managed G.Bond/TDIM port.
       The value of this object is a concatenation of zero or more (up
       to 60) octets, where each octet contains an 8-bit
       G9983SvcIndex value, identifying a particular service.

       An octet's position reflects the associated service position
       and its priority in the G.Bond/TDIM frame, with the first octet
       being the first service of highest priority.

       A zero-length octet string is object-specific and MUST
       therefore be defined as part of the description of any object
       that uses this syntax.  Examples of the usage of a zero-length
       value might include situations where an object using this
       textual convention is irrelevant for a specific G.Bond/TDIM port
       type or where no services have been defined for this port."
     SYNTAX      OCTET STRING (SIZE (0..60))

   G9983SvcOrderIndex ::= TEXTUAL-CONVENTION
     DISPLAY-HINT "d"
     STATUS      current
     DESCRIPTION
       "A unique value, greater than zero, for each service defined
       in the managed G.Bond/TDIM port, showing its relative position
       inside the G.Bond/TDIM frame."
     SYNTAX      Unsigned32 (1..60)

  -- Port Notifications group

   g9983PortNotifications OBJECT IDENTIFIER
     ::= { g9983Port 0 }

   g9983SvcUp NOTIFICATION-TYPE
     OBJECTS {
       -- ifIndex and g9983OperSvcPosition would be part of the trap OID
       g9983OperSvcIdx,
       g9983SvcIfIdx
     }
     STATUS      current
     DESCRIPTION
       "This notification indicates that a service, indicated by the
       g9983OperSvcIdx (mapped to a particular interface
       indicated by the g9983SvcIfIdx), in a particular
       G.Bond/TDIM port is passing traffic.

       This notification is generated (unless disabled or dropped by
       the rate-limiting mechanism) when the g9983OperSvcState
       object has left the 'down' state, while the G.Bond/TDIM port
       state (the ifOperStatus of the IF-MIB) is 'up'.

       Generation of this notification is controlled by the
       g9983PortConfSvcUpDownEnable object.

       This object maps to the TR-159 notification nServiceUp."

     REFERENCE
       "[TR-159], Section 5.5.5.7"
     ::= { g9983PortNotifications 1 }

   g9983SvcDown NOTIFICATION-TYPE
     OBJECTS {
       -- ifIndex and g9983OperSvcPosition would be part of the trap OID
       g9983OperSvcIdx,
       g9983SvcIfIdx
     }
     STATUS      current
     DESCRIPTION
       "This notification indicates that a service indicated by the
       g9983OperSvcIdx (mapped to a particular interface
       indicated by the g9983SvcIfIdx) in a particular
       G.Bond/TDIM port has stopped passing traffic.

       This notification is generated (unless disabled or dropped by
       the rate-limiting mechanism), when the g9983OperSvcState
       object has entered the 'down' state, while the G.Bond/TDIM port
       state (the ifOperStatus of the IF-MIB) is 'up'.

       Generation of this notification is controlled by the
       g9983PortConfSvcUpDownEnable object.

       This object maps to the TR-159 notification nServiceDown."
     REFERENCE
       "[TR-159], Section 5.5.5.8"
     ::= { g9983PortNotifications 2 }

   -- G.Bond/TDIM Port group

   g9983PortConfTable OBJECT-TYPE
     SYNTAX      SEQUENCE OF G9983PortConfEntry
     MAX-ACCESS  not-accessible
     STATUS      current
     DESCRIPTION
       "Table for configuration of G.Bond/TDIM ports.  Entries in
       this table MUST be maintained in a persistent manner."
     ::= { g9983Port 1 }

   g9983PortConfEntry OBJECT-TYPE
     SYNTAX      G9983PortConfEntry
     MAX-ACCESS  not-accessible
     STATUS      current
     DESCRIPTION
       "An entry in the G.Bond/TDIM Port Configuration table.
       Each entry represents a G.Bond/TDIM port indexed by the
       ifIndex.  Additional configuration parameters are available
       via the gBondPortConfEntry of the GBOND-MIB.
       Note that a G.Bond/TDIM port runs on top of a single or
       multiple BCE port(s), which are also indexed by the ifIndex."
     INDEX  { ifIndex }
     ::= { g9983PortConfTable 1 }

   G9983PortConfEntry ::=
     SEQUENCE {
       g9983PortConfFecAdminState        TruthValue,
       g9983PortConfFecWordSize          Unsigned32,
       g9983PortConfFecRedundancySize    Unsigned32,
       g9983PortConfFecInterleaverType   INTEGER,
       g9983PortConfFecInterleaverDepth  Unsigned32,
       g9983PortConfAdminServices        G9983SvcIndexList,
       g9983PortConfSvcUpDownEnable      TruthValue
     }

   g9983PortConfFecAdminState  OBJECT-TYPE
     SYNTAX      TruthValue
     MAX-ACCESS  read-write
     STATUS      current
     DESCRIPTION
       "A desired state of the OPTIONAL Forward Error Correction
       (FEC) function of the G.Bond/TDIM port.

       A value of 'false' indicates that the FEC function SHALL be
       disabled.  A value of 'true' indicates that the FEC function
       SHALL be enabled, if supported by the G.Bond/TDIM port, as
       indicated by the g9983PortCapFecSupported object.
       The g9983PortStatFecOperState object indicates the current
       operational state of the FEC function.

       For the GBS-R ports, the value of this object cannot be changed
       directly.  This value may be changed as a result of a write
       operation on the g9983PortCapFecSupported object of a remote
       GBS-C.

       Modifications of this object MUST be performed when the link
       is 'down'.
       Attempts to change this object MUST be rejected if the link is
       'up' or initializing, or if it is a GBS-R.

       This object maps to the TR-159/G.998.3 attribute aFECAdminState."
     REFERENCE
       "[TR-159], Section 5.5.4.5; [G.998.3], Appendix II, B-X"
     ::= { g9983PortConfEntry 1 }

   g9983PortConfFecWordSize  OBJECT-TYPE
     SYNTAX      Unsigned32 (0|20..255)
     UNITS       "octets"
     MAX-ACCESS  read-write
     STATUS      current
     DESCRIPTION
       "A FEC code word size, in octets, for G.Bond/TDIM ports
       supporting the FEC function.

       This object is read-write for the GBS-C ports and read-only
       for the GBS-R.

       A value of zero SHALL be returned if the FEC function is
       disabled (via g9983PortConfFecAdminState) or not supported.

       Changing of the FEC code word size MUST be performed when the
       FEC-enabled link is 'down'.  Attempts to change this object MUST
       be rejected if the link is 'up' or initializing or if the
       FEC function is disabled/not supported.

       This object maps to the TR-159/G.998.3 attribute aFECWordSize."
     REFERENCE
       "[TR-159], Section 5.5.4.7; [G.998.3], Appendix II, B-XI"
     ::= { g9983PortConfEntry 2 }

   g9983PortConfFecRedundancySize  OBJECT-TYPE
     SYNTAX      Unsigned32 (0|2|4|8|16|20)
     UNITS       "octets"
     MAX-ACCESS  read-write
     STATUS      current
     DESCRIPTION
       "A FEC redundancy word size, in octets, for G.Bond/TDIM
       ports supporting the FEC function.

       This object is read-write for the GBS-C ports and read-only
       for the GBS-R.

       A value of zero SHALL be returned if the FEC function is
       disabled (via g9983PortConfFecAdminState) or not supported.

       Changing of the FEC redundancy word size MUST be performed
       when the FEC-enabled link is 'down'.  Attempts to change this
       object MUST be rejected if the link is 'up' or initializing or
       if the FEC function is disabled/not supported.

       This object maps to the TR-159/G.998.3 attribute
       aFECRedundancySize."

     REFERENCE
       "[TR-159], Section 5.5.4.8; [G.998.3], Appendix II, B-XII"
     ::= { g9983PortConfEntry 3 }

   g9983PortConfFecInterleaverType  OBJECT-TYPE
     SYNTAX      INTEGER {
       none(0),
       block(1),
       convolution(2)
     }
     MAX-ACCESS  read-write
     STATUS      current
     DESCRIPTION
       "An Interleaver type for G.Bond/TDIM ports supporting the
       FEC function.

       This object is read-write for the GBS-C ports and read-only
       for the GBS-R.

       A value of none(0) SHALL be returned if the FEC function is
       disabled (via g9983PortConfFecAdminState) or not supported.

       Changing of the Interleaver type MUST be performed when the
       FEC-enabled link is 'down'.  Attempts to change this object MUST
       be rejected if the link is 'up' or initializing or if the FEC
       function is disabled/not supported.

       This object maps to the TR-159/G.998.3 attribute
       aFECInterleaverType."
     REFERENCE
       "[TR-159], Section 5.5.4.9; [G.998.3], Appendix II, B-XIII"
     ::= { g9983PortConfEntry 4 }

   g9983PortConfFecInterleaverDepth  OBJECT-TYPE
     SYNTAX      Unsigned32 (0|1|2|3|4|6|8|12|16|24|32|48|96)
     MAX-ACCESS  read-write
     STATUS      current
     DESCRIPTION
       "An Interleaver depth for G.Bond/TDIM ports supporting the
       FEC function.

       This object is read-write for the GBS-C ports and read-only
       for the GBS-R.

       A value of zero SHALL be returned if the FEC function is
       disabled (via g9983PortConfFecAdminState) or not supported.

       Changing of the Interleaver depth MUST be performed when the
       FEC-enabled link is 'down'.  Attempts to change this object MUST
       be rejected if the link is 'up' or initializing or if the FEC
       function is disabled/not supported.

       This object maps to the TR-159/G.998.3 attribute
       aFECInterleaverDepth."
     REFERENCE
       "[TR-159], Section 5.5.4.10; [G.998.3], Appendix II, B-XIV"
     ::= { g9983PortConfEntry 5 }

   g9983PortConfAdminServices  OBJECT-TYPE
     SYNTAX      G9983SvcIndexList
     MAX-ACCESS  read-write
     STATUS      current
     DESCRIPTION
       "Desired list of services for a G.Bond/TDIM port.  This object
       is a list of pointers to entries in the g9983SvcTable.

       The value of this object is a continuous ordered list of up to
       60 indices (g9983SvcIdx) of the active services carried
       via the G.Bond/TDIM link.  The position of a service in the
       list determines its relative priority in cases of bandwidth
       degradation -- the priority decreases towards the end of the
       list, which means that the last service in the list would be
       suspended first when the bandwidth degrades.

       This object is writable and readable for the GBS-C ports.
       It is irrelevant for the GBS-R ports -- a zero-length octet
       string SHALL be returned on an attempt to read this object, and
       an attempt to change this object MUST be rejected in this case.

       Note that the current operational service list is available
       via the g9983OperSvcTable object.

       This object for a GBS-C port MAY be modified independently of
       the link's state, i.e., in-service and out-of-service.
       Attempts to set this object to a list with a member value that
       is not the value of the index for an active entry in the
       corresponding g9983SvcTable table MUST be rejected."
     REFERENCE
       "[G.998.3], Sections 10.2.3, 13.3.4.6-13.3.4.11"
     ::= { g9983PortConfEntry 6 }

okay bestie, we're still in the MIB-land ✨ and this next chunk is all about the g9983PortConfSvcUpDownEnable knob, the port capability table, and the port status stuff that tells you when things are going sideways πŸ’…

first up: the toggle that decides whether the service up/down notifications actually get sent for an interface πŸ””

   g9983PortConfSvcUpDownEnable  OBJECT-TYPE
     SYNTAX      TruthValue
     MAX-ACCESS  read-write
     STATUS      current
     DESCRIPTION
       "Indicates whether g9983SvcUp and g9983SvcDown
       notifications should be generated for this interface.

       A value of true(1) indicates that the notifications are enabled.
       A value of false(2) indicates that the notifications are
       disabled.

       This object maps to the TR-159 attribute
       aServiceUpDownEnable."
     REFERENCE
       "[TR-159], Section 5.5.5.6"
     ::= { g9983PortConfEntry 7 }


   g9983PortCapTable OBJECT-TYPE
     SYNTAX      SEQUENCE OF G9983PortCapEntry
     MAX-ACCESS  not-accessible
     STATUS      current
     DESCRIPTION
       "Table for capabilities of G.Bond/TDIM ports.  Entries in this
       table MUST be maintained in a persistent manner."
     ::= { g9983Port 2 }

   g9983PortCapEntry OBJECT-TYPE
     SYNTAX      G9983PortCapEntry
     MAX-ACCESS  not-accessible
     STATUS      current
     DESCRIPTION
       "An entry in the G.Bond/TDIM Port Capability table.
       Each entry represents a G.Bond/TDIM port indexed by the
       ifIndex.  Additional capabilities are available via the
       gBondPortCapabilityEntry of the GBOND-MIB.
       Note that a G.Bond/TDIM port runs on top of a single
       or multiple BCE port(s), which are also indexed by the ifIndex."
     INDEX  { ifIndex }
     ::= { g9983PortCapTable 1 }

   G9983PortCapEntry ::=
     SEQUENCE {
       g9983PortCapFecSupported                TruthValue,
       g9983PortCapFecMaxWordSize              Unsigned32,
       g9983PortCapFecMaxRedundancySize        Unsigned32,
       g9983PortCapFecInterleaverTypeSupported INTEGER,
       g9983PortCapFecMaxInterleaverDepth      Unsigned32
     }

so the capability table is the "what can this port do?" menu 🧚 and the important bit is that its entries MUST be kept around persistently, not wiped every time the box reboots 🫢 (mind the caps, I'm not yelling, that's just the spec's exact wording!)

   g9983PortCapFecSupported  OBJECT-TYPE
     SYNTAX      TruthValue
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "FEC and Interleaver capability of the G.Bond/TDIM port.
       This object has a value of true(1) when the port supports the
       FEC and Interleaver function.
       A value of false(2) is returned when the port does not
       support the FEC and Interleaver function.

       This object maps to the TR-159/G.998.3 attribute
       aFECSupported."
     REFERENCE
       "[TR-159], Section 5.5.4.4; [G.998.3], Appendix II, B-VI"
     ::= { g9983PortCapEntry 1 }

   g9983PortCapFecMaxWordSize  OBJECT-TYPE
     SYNTAX      Unsigned32 (0|20..255)
     UNITS       "octets"
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A maximum supported FEC code word size, in octets, for
       G.Bond/TDIM ports supporting the FEC function.

       A value of zero SHALL be returned if the FEC function is not
       supported.

       This object maps to the TR-159 attribute aFECWordSize."
     REFERENCE
       "[TR-159], Section 5.5.4.11; [G.998.3], Appendix II, B-XI"
     ::= { g9983PortCapEntry 2 }

   g9983PortCapFecMaxRedundancySize  OBJECT-TYPE
     SYNTAX      Unsigned32 (0|2|4|8|16|20)
     UNITS       "octets"
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A maximum supported FEC redundancy word size, in octets, for
       G.Bond/TDIM ports supporting the FEC function.

       A value of zero SHALL be returned if the FEC function is not
       supported.

       This object maps to the TR-159 attribute
       aFECMaxRedundancySize."

     REFERENCE
       "[TR-159], Section 5.5.4.12; [G.998.3], Appendix II, B-XII"
     ::= { g9983PortCapEntry 3 }

   g9983PortCapFecInterleaverTypeSupported  OBJECT-TYPE
     SYNTAX      INTEGER {
       none(0),
       block(1),
       convolution(2),
       blockConvolution(3)
     }
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "Supported Interleaver types for G.Bond/TDIM ports supporting
       the FEC function.

       Possible values are:
         none             - the port does not support interleaving
         block            - the port supports Block Interleaver
         convolution      - the port supports Convolution Interleaver
         blockConvolution - the port supports both Block Interleaver
                            and Convolution Interleaver

       This object maps to the TR-159 attribute
       aFECInterleaverTypesSupported."
     REFERENCE
       "[TR-159], Section 5.5.4.13; [G.998.3], Appendix II, B-XIII"
     ::= { g9983PortCapEntry 4 }

   g9983PortCapFecMaxInterleaverDepth  OBJECT-TYPE
     SYNTAX      Unsigned32 (0|1|2|3|4|6|8|12|16|24|32|48|96)
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A maximum Interleaver depth for G.Bond/TDIM ports supporting
       the FEC function.

       A value of zero SHALL be returned if the Interleaver is not
       supported.

       This object maps to the TR-159 attribute
       aFECMaxInterleaverDepth."
     REFERENCE
       "[TR-159], Section 5.5.4.14; [G.998.3], Appendix II, B-XIV"
     ::= { g9983PortCapEntry 5 }

the FEC stuff is giving error-correction glow-up πŸ”₯ and a zero basically means "nah, not supported over here" πŸ’€ so keep an eye out for those zeros, they're doing a lot of work

   g9983PortStatTable OBJECT-TYPE
     SYNTAX      SEQUENCE OF G9983PortStatEntry
     MAX-ACCESS  not-accessible
     STATUS      current
     DESCRIPTION
       "This table provides overall status information of G.Bond
       TDIM ports, complementing the generic status information from
       the ifTable of the IF-MIB and the gBondPortStatFltStatus of
       the GBOND-MIB.  Additional status information about connected
       BCEs is available from the relevant line MIBs.

       This table contains live data from the equipment.  As such,
       it is NOT persistent."
     ::= { g9983Port 3 }

   g9983PortStatEntry OBJECT-TYPE
     SYNTAX      G9983PortStatEntry
     MAX-ACCESS  not-accessible
     STATUS      current
     DESCRIPTION
       "An entry in the G.Bond/TDIM Port Status table.
       Each entry represents a G.Bond/TDIM port indexed by the
       ifIndex.
       Note that a G.Bond GBS port runs on top of a single
       or multiple BCE port(s), which are also indexed by the ifIndex."
     INDEX  { ifIndex }
     ::= { g9983PortStatTable 1 }

   G9983PortStatEntry ::=
     SEQUENCE {
       g9983PortStatFecOperState         TruthValue,
       g9983PortStatFltStatus            BITS,
       g9983PortStatCrc4Errors           Counter32,
       g9983PortStatCrc6Errors           Counter32,
       g9983PortStatCrc8Errors           Counter32
     }

   g9983PortStatFecOperState  OBJECT-TYPE
     SYNTAX      TruthValue
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only value indicating the current operational state
       of the OPTIONAL Forward Error Correction (FEC) function for
       the G.998.3 port.
       A value of 'false' indicates that the FEC function is
       disabled.  A value of 'true' indicates that the FEC function
       is enabled (and supported).

       This object maps to the TR-159 attribute aFECOperState."
     REFERENCE
       "[TR-159], Section 5.5.4.6"
     ::= { g9983PortStatEntry 1 }

   g9983PortStatFltStatus  OBJECT-TYPE
     SYNTAX      BITS {
       serviceDown(0),
       wrongConfig(1)
     }
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "G.Bond/TDIM port fault status.  This is a bitmap of possible
       conditions.  The various bit positions are:
         serviceDown         - at least one of the services defined
                               for this aggregation group is down
                               (due to low rate).
         wrongConfig         - at least one BCE at the remote GBS-R
                               is already connected to another GBS.

       This object is intended to supplement the ifOperStatus object
       in the IF-MIB and the gBondPortStatFltStatus object in the
       GBOND-MIB."
     REFERENCE
       "[G.998.3], Section 6.3; RFC 2863, IF-MIB, ifOperStatus;
       RFC 6765, GBOND-MIB, gBondPortStatFltStatus"
     ::= { g9983PortStatEntry 2 }

   g9983PortStatCrc4Errors  OBJECT-TYPE
     SYNTAX      Counter32
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "The total number of CRC-4 errors (frame header errors) on all
       pairs in the G.Bond/TDIM port.  Simultaneous errors on M lines
       SHOULD be counted M times.

       Discontinuities in the value of this counter can occur at
       re-initialization of the management system, and at other times
       as indicated by the value of ifCounterDiscontinuityTime as
       defined in the IF-MIB.

       This object maps to the TR-159/G.998.3 attribute aCRC4Errors."
     REFERENCE
       "[TR-159], Section 5.5.4.1; [G.998.3], Appendix II, B-VII"
     ::= { g9983PortStatEntry 3 }

   g9983PortStatCrc6Errors  OBJECT-TYPE
     SYNTAX      Counter32
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "The total number of CRC-6 errors (super-frame errors) on all
       pairs in the G.Bond/TDIM port.  Simultaneous errors on M lines
       SHOULD be counted 1 time.

       Discontinuities in the value of this counter can occur at
       re-initialization of the local management subsystem, and at
       other times as indicated by the value of
       ifCounterDiscontinuityTime as defined in the IF-MIB.

       This object maps to the TR-159/G.998.3 attribute aCRC6Errors."
     REFERENCE
       "[TR-159], Section 5.5.4.2; [G.998.3], Appendix II, B-VIII"
     ::= { g9983PortStatEntry 4 }

   g9983PortStatCrc8Errors  OBJECT-TYPE
     SYNTAX      Counter32
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "The total number of CRC-8 errors (event/message errors) on all
       pairs in the G.Bond/TDIM port.  Simultaneous errors on M lines
       SHOULD be counted M times.

       Discontinuities in the value of this counter can occur at
       re-initialization of the local management subsystem, and at
       other times as indicated by the value of
       ifCounterDiscontinuityTime as defined in the IF-MIB.

       This object maps to the TR-159/G.998.3 attribute aCRC8Errors."
     REFERENCE
       "[TR-159], Section 5.5.4.3; [G.998.3], Appendix II, B-IX"
     ::= { g9983PortStatEntry 5 }
the status table is live data, so it's NOT persistent, bestie πŸ™ˆ it's a snapshot of right now, not a diary that sticks around

the CRC counters are the drama queens of this whole MIB 😭 the "how many errors on the lines" tallies, and yes, the spec really does want M-line errors counted in very specific ways, so no freelancing πŸ’…

   g9983OperSvcTable OBJECT-TYPE
     SYNTAX      SEQUENCE OF G9983OperSvcEntry
     MAX-ACCESS  not-accessible
     STATUS      current
     DESCRIPTION
       "Table of the operational services configured on a G.Bond/TDIM
       port.  This table reflects current actual service configuration,
       set by the g9983PortConfAdminServices object.  The number of
       entries (services) in this table therefore can vary between
       0, when no services are configured, and 60, for the maximum
       number of services.
       This table contains live data from the equipment.  As such,
       it is NOT persistent."
     ::= { g9983Port 4 }

   g9983OperSvcEntry OBJECT-TYPE
     SYNTAX      G9983OperSvcEntry
     MAX-ACCESS  not-accessible
     STATUS      current
     DESCRIPTION
       "An entry in the G.Bond/TDIM Port Operational Service table,
       containing the index of an active service entry in the
       g9983SvcTable.  The entry is indexed by the ifIndex,
       indicating a corresponding G.Bond/TDIM port, and by
       g9983OperSvcPosition (1..60), indicating the
       corresponding service position in the G.Bond/TDIM frame."
     INDEX  { ifIndex, g9983OperSvcPosition }
     ::= { g9983OperSvcTable 1 }

   G9983OperSvcEntry ::=
     SEQUENCE {
       g9983OperSvcPosition          G9983SvcOrderIndex,
       g9983OperSvcIdx               G9983SvcIndex,
       g9983OperSvcState             INTEGER
     }

   g9983OperSvcPosition OBJECT-TYPE
     SYNTAX      G9983SvcOrderIndex
     MAX-ACCESS  not-accessible
     STATUS      current
     DESCRIPTION
       "G.Bond/TDIM operational service position -- a unique index,
       indicating relative placement of the associated service
       pointed to by g9983OperSvcIdx, within the G.Bond/TDIM frame.

and that's the operational service table, which is basically the live lineup of which services are actually on the frame, in order πŸ¦‹ we're mid-description on the position object so stay tuned, the next bit picks up right where this cuts off πŸ’œ

There can be up to 60 services over a TDIM bonded facility, and the lower the index, the higher the priority when bandwidth gets squeezed. Lower-numbered services are the VIPs πŸ‘‘

       There can be up to 60 services defined over a TDIM bonded
       facility.  Services with lower indices have higher priority in
       cases of bandwidth degradation.

       The value of g9983OperSvcPosition for the first
       g9983OperSvcEntry is always 1, incrementing sequentially
       for each consecutive entry, i.e., 2 for the second entry,
       3 for the third, etc.

       This objects maps to the TR-159/G.998.3 attribute aServiceID."

     REFERENCE
       "[TR-159], Section 5.5.5.1; [G.998.3], Appendix II, C-I"
     ::= { g9983OperSvcEntry 1 }

   g9983OperSvcIdx OBJECT-TYPE
     SYNTAX      G9983SvcIndex
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "G.Bond/TDIM operational service index -- a read-only pointer
       to an existing entry in the g9983SvcTable (value of
       g9983SvcIdx) describing a particular service."
     ::= { g9983OperSvcEntry 2 }

   g9983OperSvcState  OBJECT-TYPE
     SYNTAX      INTEGER {
       up(1),
       down(2)
     }
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "G.Bond/TDIM service operational state.

       Possible values are:
         up                  - Service is up and passing traffic.
         down                - Service is down, due to a variety of
                               reasons, e.g., G.Bond/TDIM port is
                               down, current link bandwidth is too
                               low to support a particular service,
                               etc.
       This objects maps to the TR-159 attribute aServiceOperState."
     REFERENCE
       "[TR-159], Section 5.5.5.5"
     ::= { g9983OperSvcEntry 3 }

So g9983OperSvcIdx is basically a read-only pointer back into the service table, and g9983OperSvcState is the live up-or-down status for each service 🚦 A service can drop to down for a bunch of reasons, like the port being down or the link not having enough bandwidth to carry it. Iconic.

   g9983SvcTable OBJECT-TYPE
     SYNTAX      SEQUENCE OF G9983SvcEntry
     MAX-ACCESS  not-accessible
     STATUS      current
     DESCRIPTION
       "Table of possible services for G.Bond/TDIM ports.
       Entries in this table MUST be maintained in a persistent
       manner."
     ::= { g9983Port 5 }

   g9983SvcEntry OBJECT-TYPE
     SYNTAX      G9983SvcEntry
     MAX-ACCESS  not-accessible
     STATUS      current
     DESCRIPTION
       "An entry in the G.Bond/TDIM Port Service table, containing
       the management information applicable to a particular service,
       indexed by the g9983SvcIdx, on a G.Bond/TDIM port,
       indexed by the ifIndex."
     INDEX  { ifIndex, g9983SvcIdx }
     ::= { g9983SvcTable 1 }

   G9983SvcEntry ::=
     SEQUENCE {
       g9983SvcIdx           G9983SvcIndex,
       g9983SvcIfIdx         InterfaceIndex,
       g9983SvcType          INTEGER,
       g9983SvcSize          Unsigned32,
       g9983SvcRowStatus     RowStatus
     }

Okay, the service table is where the config lives πŸŽ€ Its entries are indexed by ifIndex plus g9983SvcIdx, and this table MUST be maintained in a persistent manner. That's the one place persistence is spelled out, so don't skip it bestie.

   g9983SvcIdx OBJECT-TYPE
     SYNTAX      G9983SvcIndex
     MAX-ACCESS  not-accessible
     STATUS      current
     DESCRIPTION
       "G.Bond/TDIM service index -- a unique index associated with
       a particular service entry."
     ::= { g9983SvcEntry 1 }

   g9983SvcIfIdx OBJECT-TYPE
     SYNTAX      InterfaceIndex
     MAX-ACCESS  read-create
     STATUS      current
     DESCRIPTION
       "This is a unique index within the ifTable.  It represents
       the interface index of a service to be transmitted over the
       G.Bond/TDIM service instance.

       This objects maps to the TR-159 attribute aServiceIfIndex."
     REFERENCE
       "[TR-159], Section 5.5.5.2"
     ::= { g9983SvcEntry 2 }

   g9983SvcType  OBJECT-TYPE
     SYNTAX      INTEGER {
       ds1(0),
       e1(1),
       nxds0(2),
       nxe0(3),
       ds3(4),
       e3(5),
       clock(6),
       ethernet(7),
       atm(8),
       gfpNoFCS(9),
       gfp(10)
     }
     MAX-ACCESS  read-create
     STATUS      current
     DESCRIPTION
       "G.Bond/TDIM service type.

       Possible values are:
         ds1            - Clear Channel DS1 (synchronous)
         e1             - Clear Channel E1 (synchronous)
         nxds0          - Fractional DS1 (synchronous)
         nxe0           - Fractional E1 (synchronous)
         ds3            - DS3 (synchronous)
         e3             - E3 (synchronous)
         clock          - Clock transfer (synchronous)
         ethernet       - Ethernet (asynchronous)
         atm            - ATM (asynchronous)
         gfpNoFCS       - GFP encapsulated without FCS (asynchronous)
         gfp            - GFP encapsulated with FCS (asynchronous)

       For the GBS-R ports, the value of this object cannot be
       changed directly.  This value may be changed as a result of a
       write operation on the g9983SvcType object of a remote GBS-C.

       Attempts to change this object MUST be rejected for the GBS-R
       ports.

       This object maps to the TR-159/G.998.3 attribute aServiceType."
     REFERENCE
       "[TR-159], Section 5.5.5.3; [G.998.3], Appendix II, C-II"
     ::= { g9983SvcEntry 3 }

Here's where the service types get served πŸ“ Synchronous ones (the TDM flavours like DS1, E1, DS3, E3, and clock) sit next to asynchronous ones (Ethernet, ATM, and the two GFP flavours). On GBS-R ports you can't just change the type directly, since it can only shift when someone writes to g9983SvcType on a remote GBS-C. And any attempt to change it on a GBS-R port MUST be rejected. Hard no πŸ™…β€β™€οΈ

   g9983SvcSize  OBJECT-TYPE
     SYNTAX      Unsigned32 (0|20..255)
     UNITS       "octets"
     MAX-ACCESS  read-create
     STATUS      current
     DESCRIPTION
       "Service size, in octets, per bonding sub-block for a specific
       service identified by g9983SvcIdx.

       For TDM (synchronous) services with variable size
       (e.g., fractional DS1/E1), this object represents the number of
       DS0/E0 channels.
       For asynchronous services (Ethernet, ATM, GFPnoFCS, or GFP),
       this object represents the maximum number of octets.
       For non-fractional TDM services (i.e., DS1, E1, DS3, E3, and
       clock), the value of this object MUST be 0.

       A GET operation returns the current value.
       A SET operation, allowed on GBS-C ports, changes the service
       size to the indicated value.  If the service type is a
       fixed-rate synchronous service (g9983SvcType is nxds0, nxe0,
       ds1, e1, ds3, e3, or clock), the operation MUST be rejected.

       This object maps to the TR-159/G.998.3 attribute aServiceSize."
     REFERENCE
       "[TR-159], Section 5.5.5.4; [G.998.3], Appendix II, C-III"
     ::= { g9983SvcEntry 4 }

   g9983SvcRowStatus  OBJECT-TYPE
     SYNTAX      RowStatus
     MAX-ACCESS  read-create
     STATUS      current
     DESCRIPTION
       "This object controls the creation, modification, or deletion
       of the associated entry in the g9983SvcTable per the
       semantics of RowStatus.

       If an 'active' entry is referenced via g9983OperSvcIdx
       or a g9983PortConfAdminServices instance, or indexes a
       g9983SvcPm*Entry, the entry MUST remain 'active'.

       An 'active' entry SHALL NOT be modified.  In order to modify an
       existing entry, it MUST be taken out of service (by setting
       this object to 'notInService'), modified, and set to 'active'
       again."
     ::= { g9983SvcEntry 5 }

Size is where it gets a little spicy 🌢️ For the fixed-rate synchronous services, a SET on g9983SvcSize MUST be rejected. Meanwhile the non-fractional TDM ones have to sit at exactly 0. And for g9983SvcRowStatus, an active entry that's being referenced stays active, and it SHALL NOT be modified. To change it, you have to take it out of service with notInService, edit it, then flip it back to active. Proper choreography πŸ’ƒ

   -------------------------------
   -- Performance Monitoring group
   -------------------------------

   g9983PM   OBJECT IDENTIFIER ::= { g9983Port 6 }

   g9983PortPmCurTable OBJECT-TYPE
     SYNTAX      SEQUENCE OF G9983PortPmCurEntry
     MAX-ACCESS  not-accessible
     STATUS      current
     DESCRIPTION
       "This table contains current Performance Monitoring information
       for a G.Bond/TDIM port.  This table contains live data from the
       equipment and as such is NOT persistent."
     ::= { g9983PM 1 }

   g9983PortPmCurEntry OBJECT-TYPE
     SYNTAX      G9983PortPmCurEntry
     MAX-ACCESS  not-accessible
     STATUS      current
     DESCRIPTION
       "An entry in the G.Bond/TDIM Port PM table.
       Each entry represents a G.Bond/TDIM port indexed by the
       ifIndex."
     INDEX  { ifIndex }
     ::= { g9983PortPmCurTable 1 }

   G9983PortPmCurEntry ::=
     SEQUENCE {
       g9983PortPmCur15MinValidIntervals   HCPerfValidIntervals,
       g9983PortPmCur15MinInvalidIntervals HCPerfInvalidIntervals,
       g9983PortPmCur15MinTimeElapsed      HCPerfTimeElapsed,
       g9983PortPmCur15MinCrc4s            HCPerfCurrentCount,
       g9983PortPmCur15MinCrc6s            HCPerfCurrentCount,
       g9983PortPmCur15MinCrc8s            HCPerfCurrentCount,
       g9983PortPmCur1DayValidIntervals    Unsigned32,
       g9983PortPmCur1DayInvalidIntervals  Unsigned32,
       g9983PortPmCur1DayTimeElapsed       HCPerfTimeElapsed,
       g9983PortPmCur1DayCrc4s             HCPerfCurrentCount,
       g9983PortPmCur1DayCrc6s             HCPerfCurrentCount,
       g9983PortPmCur1DayCrc8s             HCPerfCurrentCount
     }

Now we're into the performance monitoring group πŸ“Š The current PM table is live equipment data, so it is NOT persistent. Think of it as the vibe right now, not the history book πŸ¦‹

   g9983PortPmCur15MinValidIntervals  OBJECT-TYPE
     SYNTAX      HCPerfValidIntervals
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only number of 15-minute intervals for which the
       performance data was collected.  The value of this object will
       be 96 or the maximum number of 15-minute history intervals
       collected by the implementation, unless the measurement was
       (re)started recently, in which case the value will be the
       number of complete 15-minute intervals for which there are at
       least some data.

       In certain cases, it is possible that some intervals are
       unavailable.  In this case, this object reports the maximum
       interval number for which data is available.

       This object partially maps to the TR-159 attribute
       aGroupPerf15MinValidIntervals."
     REFERENCE
       "[TR-159], Section 5.5.1.32"
     ::= { g9983PortPmCurEntry 1 }

   g9983PortPmCur15MinInvalidIntervals  OBJECT-TYPE
     SYNTAX      HCPerfInvalidIntervals
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only number of 15-minute intervals for which the
       performance data was not always available.  The value will
       typically be zero, except in cases where the data for some
       intervals are not available.

       This object partially maps to the TR-159 attribute
       aGroupPerf15MinInvalidIntervals."
     REFERENCE
       "[TR-159], Section 5.5.1.33"
     ::= { g9983PortPmCurEntry 2 }

   g9983PortPmCur15MinTimeElapsed  OBJECT-TYPE
     SYNTAX      HCPerfTimeElapsed
     UNITS       "seconds"
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only count of seconds that have elapsed since the
       beginning of the current 15-minute performance interval.

       This object partially maps to the TR-159 attribute
       aGroupPerfCurr15MinTimeElapsed."
     REFERENCE
       "[TR-159], Section 5.5.1.34"
     ::= { g9983PortPmCurEntry 3 }

   g9983PortPmCur15MinCrc4s  OBJECT-TYPE
     SYNTAX      HCPerfCurrentCount
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only count of CRC-4 errors (frame header errors) on all
       active pairs in the G.Bond/TDIM port during the current
       15-minute performance interval.
       Simultaneous errors on M lines SHOULD be counted M times.

       Note that the total number of CRC-4 errors is indicated by the
       g9983PortStatCrc4Errors object.

       This object is inhibited during Severely Errored Seconds (SES)
       or Unavailable Seconds (UAS)."
     REFERENCE
       "[TR-159], Section 5.5.4.1"
     ::= { g9983PortPmCurEntry 4}

   g9983PortPmCur15MinCrc6s  OBJECT-TYPE
     SYNTAX      HCPerfCurrentCount
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only count of CRC-6 errors (super-frame errors) on all
       active pairs in the G.Bond/TDIM port during the current
       15-minute performance interval.
       Simultaneous errors on M lines SHOULD be counted 1 time.

       Note that the total number of CRC-6 errors is indicated by the
       g9983PortStatCrc6Errors object.

       This object is inhibited during Unavailable Seconds (UAS)."
     REFERENCE
       "[TR-159], Section 5.5.4.2"
     ::= { g9983PortPmCurEntry 5}

Last bit for this part: the CRC counters are where the errors get tallied πŸ” Simultaneous errors on M lines SHOULD be counted M times for CRC-4, but only 1 time for CRC-6. Both counters are paused during Unavailable Seconds, and CRC-4 also pauses during Severely Errored Seconds. Real detail-oriented energy, periodt πŸ’œ

okay so we're still deep in the G.Bond/TDIM MIB era 🧚 the 15-minute CRC-8 counter comes first, and it has a big rule: simultaneous errors on M lines SHOULD be counted M times πŸ’…

   g9983PortPmCur15MinCrc8s  OBJECT-TYPE
     SYNTAX      HCPerfCurrentCount
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only count of CRC-8 errors (event/message errors) on all
       active pairs in the G.Bond/TDIM port during the current
       15-minute performance interval.
       Simultaneous errors on M lines SHOULD be counted M times.

       Note that the total number of CRC-8 errors is indicated by the
       g9983PortStatCrc8Errors object.

       This object is inhibited during Unavailable Seconds (UAS)."
     REFERENCE
       "[TR-159], Section 5.5.4.3"
     ::= { g9983PortPmCurEntry 6}

   g9983PortPmCur1DayValidIntervals  OBJECT-TYPE
     SYNTAX      Unsigned32 (0..7)
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only number of 1-day intervals for which data was
       collected.  The value of this object will be 7 or the maximum
       number of 1-day history intervals collected by the
       implementation, unless the measurement was (re)started recently,
       in which case the value will be the number of complete 1-day
       intervals for which there are at least some data.
       In certain cases, it is possible that some intervals are
       unavailable.  In this case, this object reports the maximum
       interval number for which data is available."
     REFERENCE
       "[TR-159], Section 5.5.1.45"
     ::= { g9983PortPmCurEntry 7 }

   g9983PortPmCur1DayInvalidIntervals  OBJECT-TYPE
     SYNTAX      Unsigned32 (0..7)
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only number of 1-day intervals for which data was
       not always available.  The value will typically be zero, except
       in cases where the data for some intervals are not available."
     REFERENCE
       "[TR-159], Section 5.5.1.46"
     ::= { g9983PortPmCurEntry 8 }

   g9983PortPmCur1DayTimeElapsed  OBJECT-TYPE
     SYNTAX      HCPerfTimeElapsed
     UNITS       "seconds"
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only count of seconds that have elapsed since the
       beginning of the current 1-day performance interval."
     REFERENCE
       "[TR-159], Section 5.5.1.47"
     ::= { g9983PortPmCurEntry 9 }

   g9983PortPmCur1DayCrc4s  OBJECT-TYPE
     SYNTAX      HCPerfCurrentCount
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only count of CRC-4 errors on the G.Bond/TDIM port in
       the current 1-day performance interval.

       This object is inhibited during Severely Errored Seconds (SES)
       and Unavailable Seconds (UAS)."
     ::= { g9983PortPmCurEntry 10 }

   g9983PortPmCur1DayCrc6s  OBJECT-TYPE
     SYNTAX      HCPerfCurrentCount
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only count of CRC-6 errors on the G.Bond/TDIM port
       in the current 1-day performance interval.

       This object is inhibited during Unavailable Seconds (UAS)."
     ::= { g9983PortPmCurEntry 11 }

   g9983PortPmCur1DayCrc8s  OBJECT-TYPE
     SYNTAX      HCPerfCurrentCount
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only count of CRC-8 errors on the G.Bond/TDIM port in
       the current 1-day performance interval.

       This object is inhibited during Unavailable Seconds (UAS)."
     ::= { g9983PortPmCurEntry 12 }

Next up is the 15-minute history bucket table, and this is where the rules get strict 🫢 the table MUST be kept persistent, and the BTU-C MUST NOT send notifications off invalid buckets πŸ”₯

   -- Port PM history: 15-min buckets

   g9983PortPm15MinTable OBJECT-TYPE
     SYNTAX      SEQUENCE OF G9983PortPm15MinEntry
     MAX-ACCESS  not-accessible
     STATUS      current
     DESCRIPTION
       "This table contains historical 15-minute buckets of Performance
       Monitoring information for a G.Bond/TDIM port (a row for each
       15-minute interval, up to 96 intervals).
       Entries in this table MUST be maintained in a persistent manner."
     ::= { g9983PM 2 }

   g9983PortPm15MinEntry OBJECT-TYPE
     SYNTAX      G9983PortPm15MinEntry
     MAX-ACCESS  not-accessible
     STATUS      current
     DESCRIPTION
       "An entry in the G.Bond/TDIM Port historical 15-minute PM table.
       Each entry represents Performance Monitoring data for a G.Bond
       TDIM port, indexed by the ifIndex, collected during a particular
       15-minute interval, indexed by the
       g9983PortPm15MinIntervalIndex."
     INDEX  { ifIndex, g9983PortPm15MinIntervalIndex }
     ::= { g9983PortPm15MinTable 1 }

   G9983PortPm15MinEntry ::=
     SEQUENCE {
       g9983PortPm15MinIntervalIndex      Unsigned32,
       g9983PortPm15MinIntervalMoniTime   HCPerfTimeElapsed,
       g9983PortPm15MinIntervalCrc4s      HCPerfIntervalCount,
       g9983PortPm15MinIntervalCrc6s      HCPerfIntervalCount,
       g9983PortPm15MinIntervalCrc8s      HCPerfIntervalCount,
       g9983PortPm15MinIntervalValid      TruthValue
     }

   g9983PortPm15MinIntervalIndex  OBJECT-TYPE
     SYNTAX      Unsigned32 (1..96)
     MAX-ACCESS  not-accessible
     STATUS      current
     DESCRIPTION
       "Performance data interval number.  1 is the most recent
       previous interval; interval 96 is 24 hours ago.
       Intervals 2..96 are OPTIONAL.

       This object partially maps to the TR-159 attribute
       aGroupPerf15MinIntervalNumber."
     REFERENCE
       "[TR-159], Section 5.5.1.57"
     ::= { g9983PortPm15MinEntry 1 }

   g9983PortPm15MinIntervalMoniTime  OBJECT-TYPE
     SYNTAX      HCPerfTimeElapsed
     UNITS       "seconds"
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only count of seconds over which the performance data
       was actually monitored.  This value will be the same as the
       interval duration (900 seconds), except in a situation where
       performance data could not be collected for any reason."
     ::= { g9983PortPm15MinEntry 2 }

   g9983PortPm15MinIntervalCrc4s  OBJECT-TYPE
     SYNTAX      HCPerfIntervalCount
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only count of CRC-4 errors on the G.Bond/TDIM port
       during the 15-minute performance history interval.

       This object is inhibited during Severely Errored Seconds (SES)
       and Unavailable Seconds (UAS)."
     ::= { g9983PortPm15MinEntry 3 }

   g9983PortPm15MinIntervalCrc6s  OBJECT-TYPE
     SYNTAX      HCPerfIntervalCount
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only count of CRC-6 errors on the G.Bond/TDIM port
       during the 15-minute performance history interval.

       This object is inhibited during Unavailable Seconds (UAS)."
     ::= { g9983PortPm15MinEntry 4 }

   g9983PortPm15MinIntervalCrc8s  OBJECT-TYPE
     SYNTAX      HCPerfIntervalCount
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only count of CRC-8 errors on the G.Bond/TDIM port
       during the current 15-minute performance interval.

       This object is inhibited during Unavailable Seconds (UAS)."
     ::= { g9983PortPm15MinEntry 5 }

   g9983PortPm15MinIntervalValid  OBJECT-TYPE
     SYNTAX      TruthValue
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only object indicating whether or not this history
       bucket contains valid data.  A valid bucket is reported as
       true(1) and an invalid bucket as false(2).
       If this history bucket is invalid, the BTU-C MUST NOT produce
       notifications based upon the value of the counters in this
       bucket.
       Note that an implementation may decide not to store invalid
       history buckets in its database.  In such a case, this object
       is not required, as only valid history buckets are available
       while invalid history buckets are simply not in the database.

       This object partially maps to the TR-159 attribute
       aGroupPerf15MinIntervalValid."
     REFERENCE
       "[TR-159], Section 5.5.1.58"
     ::= { g9983PortPm15MinEntry 6 }

Last stretch of this part: the 1-day history buckets 🌸 same persistence rule, same OPTIONAL vibes for intervals 2..7, and the counters only tick over a full day of seconds πŸ“

   -- Port PM history: 1-day buckets

   g9983PortPm1DayTable OBJECT-TYPE
     SYNTAX      SEQUENCE OF G9983PortPm1DayEntry
     MAX-ACCESS  not-accessible
     STATUS      current
     DESCRIPTION
       "This table contains historical 1-day buckets of Performance
       Monitoring information for a G.Bond/TDIM port (a row for each
       1-day interval, up to 7 intervals).
       Entries in this table MUST be maintained in a persistent manner."
     ::= { g9983PM 3 }

   g9983PortPm1DayEntry OBJECT-TYPE
     SYNTAX      G9983PortPm1DayEntry
     MAX-ACCESS  not-accessible
     STATUS      current
     DESCRIPTION
       "An entry in the G.Bond/TDIM Port historical 1-day PM table.
       Each entry represents Performance Monitoring data for such a
       port, indexed by the ifIndex, collected during a particular
       1-day interval, indexed by the g9983PortPm1DayIntervalIndex."
     INDEX  { ifIndex, g9983PortPm1DayIntervalIndex }
     ::= { g9983PortPm1DayTable 1 }

   G9983PortPm1DayEntry ::=
     SEQUENCE {
       g9983PortPm1DayIntervalIndex      Unsigned32,
       g9983PortPm1DayIntervalMoniTime   HCPerfTimeElapsed,
       g9983PortPm1DayIntervalCrc4s      HCPerfIntervalCount,
       g9983PortPm1DayIntervalCrc6s      HCPerfIntervalCount,
       g9983PortPm1DayIntervalCrc8s      HCPerfIntervalCount,
       g9983PortPm1DayIntervalValid      TruthValue
     }

   g9983PortPm1DayIntervalIndex  OBJECT-TYPE
     SYNTAX      Unsigned32 (1..7)
     MAX-ACCESS  not-accessible
     STATUS      current
     DESCRIPTION
       "Performance data interval number.  1 is the most recent
       previous interval; interval 7 is 7 days ago.

       Intervals 2..7 are OPTIONAL.

       This object partially maps to the TR-159 attribute
       aGroupPerf1DayIntervalNumber."
     REFERENCE
       "[TR-159], Section 5.5.1.62"
     ::= { g9983PortPm1DayEntry 1 }

   g9983PortPm1DayIntervalMoniTime  OBJECT-TYPE
     SYNTAX      HCPerfTimeElapsed
     UNITS       "seconds"
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only count of seconds over which the performance data
       was actually monitored.  This value will be the same as the
       interval duration (86400 seconds), except in a situation where
       performance data could not be collected for any reason.

       This object partially maps to the TR-159 attribute
       aGroupPerf1DayIntervalMoniSecs."
     REFERENCE
       "[TR-159], Section 5.5.1.64"
     ::= { g9983PortPm1DayEntry 2 }

   g9983PortPm1DayIntervalCrc4s  OBJECT-TYPE
     SYNTAX      HCPerfIntervalCount
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only count of CRC-4 errors on the G.Bond/TDIM port
       during the 1-day performance history interval.

       This object is inhibited during Severely Errored Seconds (SES)
       and Unavailable Seconds (UAS)."
     ::= { g9983PortPm1DayEntry 3 }

   g9983PortPm1DayIntervalCrc6s  OBJECT-TYPE
     SYNTAX      HCPerfIntervalCount
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only count of CRC-6 errors on the G.Bond/TDIM port
       during the 1-day performance history interval.

       This object is inhibited during Unavailable Seconds (UAS)."
     ::= { g9983PortPm1DayEntry 4 }

   g9983PortPm1DayIntervalCrc8s  OBJECT-TYPE
     SYNTAX      HCPerfIntervalCount
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only count of CRC-8 errors on the G.Bond/TDIM port
       during the current 1-day performance interval.

       This object is inhibited during Unavailable Seconds (UAS)."
     ::= { g9983PortPm1DayEntry 5 }

okay so this part is all about the Service PM tables, bestie πŸŽ€

   g9983PortPm1DayIntervalValid  OBJECT-TYPE
     SYNTAX      TruthValue
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only object indicating whether or not this history
       bucket contains valid data.  A valid bucket is reported as
       true(1) and an invalid bucket as false(2).
       If this history bucket is invalid, the BTU-C MUST NOT produce
       notifications based upon the value of the counters in this
       bucket.
       Note that an implementation may decide not to store invalid
       history buckets in its database.  In such a case, this object
       is not required, as only valid history buckets are available
       while invalid history buckets are simply not in the database.

       This object partially maps to the TR-159 attribute
       aGroupPerf1DayIntervalValid."
     REFERENCE
       "[TR-159], Section 5.5.1.63"
     ::= { g9983PortPm1DayEntry 6 }

   -- Services PM

   g9983SvcPmCurTable OBJECT-TYPE
     SYNTAX      SEQUENCE OF G9983SvcPmCurEntry
     MAX-ACCESS  not-accessible
     STATUS      current
     DESCRIPTION
       "This table contains current Performance Monitoring information
       for the services of a G.Bond/TDIM port.
       This table contains live data from the equipment and as such is
       NOT persistent."
     ::= { g9983PM 4 }

   g9983SvcPmCurEntry OBJECT-TYPE
     SYNTAX      G9983SvcPmCurEntry
     MAX-ACCESS  not-accessible
     STATUS      current
     DESCRIPTION
       "An entry in the G.Bond/TDIM Services PM table.
       Each entry represents a service, indexed by the
       g9983SvcIdx, in a G.Bond/TDIM port, indexed by the
       ifIndex."
     INDEX  { ifIndex, g9983SvcIdx }
     ::= { g9983SvcPmCurTable 1 }

   G9983SvcPmCurEntry ::=
     SEQUENCE {
       g9983SvcPmCur15MinValidIntervals   HCPerfValidIntervals,
       g9983SvcPmCur15MinInvalidIntervals HCPerfInvalidIntervals,
       g9983SvcPmCur15MinTimeElapsed      HCPerfTimeElapsed,
       g9983SvcPmCur15MinDowns            HCPerfCurrentCount,
       g9983SvcPmCur1DayValidIntervals    Unsigned32,
       g9983SvcPmCur1DayInvalidIntervals  Unsigned32,
       g9983SvcPmCur1DayTimeElapsed       HCPerfTimeElapsed,
       g9983SvcPmCur1DayDowns             HCPerfCurrentCount
     }

   g9983SvcPmCur15MinValidIntervals  OBJECT-TYPE
     SYNTAX      HCPerfValidIntervals
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only number of 15-minute intervals for which the
       performance data was collected.  The value of this object will
       be 96 or the maximum number of 15-minute history intervals
       collected by the implementation, unless the measurement was
       (re)started recently, in which case the value will be the
       number of complete 15-minute intervals for which there are at
       least some data.
       In certain cases, it is possible that some intervals are
       unavailable.  In this case, this object reports the maximum
       interval number for which data is available.

       This object partially maps to the TR-159 attribute
       aGroupPerf15MinValidIntervals."
     REFERENCE
       "[TR-159], Section 5.5.1.32"
     ::= { g9983SvcPmCurEntry 1 }

   g9983SvcPmCur15MinInvalidIntervals  OBJECT-TYPE
     SYNTAX      HCPerfInvalidIntervals
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only number of 15-minute intervals for which the
       performance data was not always available.  The value will
       typically be zero, except in cases where the data for some
       intervals are not available.

       This object partially maps to the TR-159 attribute
       aGroupPerf15MinInvalidIntervals."
     REFERENCE
       "[TR-159], Section 5.5.1.33"
     ::= { g9983SvcPmCurEntry 2 }

   g9983SvcPmCur15MinTimeElapsed  OBJECT-TYPE
     SYNTAX      HCPerfTimeElapsed
     UNITS       "seconds"
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only count of seconds that have elapsed since the
       beginning of the current 15-minute performance interval.

       This object partially maps to the TR-159 attribute
       aGroupPerfCurr15MinTimeElapsed."
     REFERENCE
       "[TR-159], Section 5.5.1.34"
     ::= { g9983SvcPmCurEntry 3 }

   g9983SvcPmCur15MinDowns  OBJECT-TYPE
     SYNTAX      HCPerfCurrentCount
     UNITS       "seconds"
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only count of seconds in the current 15-minute
       performance interval during which a particular TDIM
       service was 'down', as indicated by the
       g9983OperSvcState object.

       This object is inhibited during Unavailable Seconds (UAS)."
     ::= { g9983SvcPmCurEntry 4}

   g9983SvcPmCur1DayValidIntervals  OBJECT-TYPE
     SYNTAX      Unsigned32 (0..7)
     UNITS       "days"
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only number of 1-day performance history intervals for
       which the data was collected.  The value of this object will be
       7 or the maximum number of 1-day history intervals collected by
       the implementation, unless the measurement was (re)started
       recently, in which case the value will be the number of complete
       1-day intervals for which there are at least some data.
       In certain cases, it is possible that some intervals are
       unavailable.  In this case, this object reports the maximum
       interval number for which data is available."
     REFERENCE
       "[TR-159], Section 5.5.1.45"
     ::= { g9983SvcPmCurEntry 5 }

   g9983SvcPmCur1DayInvalidIntervals  OBJECT-TYPE
     SYNTAX      Unsigned32 (0..7)
     UNITS       "days"
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only number of 1-day performance history intervals for
       which the performance data was not always available.  The value
       will typically be zero, except in cases where the data for some
       intervals are not available."
     REFERENCE
       "[TR-159], Section 5.5.1.46"
     ::= { g9983SvcPmCurEntry 6 }

   g9983SvcPmCur1DayTimeElapsed  OBJECT-TYPE
     SYNTAX      HCPerfTimeElapsed
     UNITS       "seconds"
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only count of seconds that have elapsed since the
       beginning of the current 1-day performance interval."
     REFERENCE
       "[TR-159], Section 5.5.1.47"
     ::= { g9983SvcPmCurEntry 7 }

   g9983SvcPmCur1DayDowns  OBJECT-TYPE
     SYNTAX      HCPerfCurrentCount
     UNITS       "seconds"
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only count of seconds in the current 1-day performance
       interval during which a particular TDIM service was
       'down', as indicated by the g9983OperSvcState object.

       This object is inhibited during Unavailable Seconds (UAS)."
     ::= { g9983SvcPmCurEntry 8 }

the current tables are the live feed, so they're not saved anywhere πŸ‘€

   -- Service PM history: 15-min buckets

   g9983SvcPm15MinTable OBJECT-TYPE
     SYNTAX      SEQUENCE OF G9983SvcPm15MinEntry
     MAX-ACCESS  not-accessible
     STATUS      current
     DESCRIPTION
       "This table contains historical 15-minute buckets of Performance
       Monitoring information for the services of a G.Bond/TDIM port
       (a multi-dimensional row for each 15-minute interval, up to 96
       intervals).

       Entries in this table MUST be maintained in a persistent manner."
     ::= { g9983PM 5 }

   g9983SvcPm15MinEntry OBJECT-TYPE
     SYNTAX      G9983SvcPm15MinEntry
     MAX-ACCESS  not-accessible
     STATUS      current
     DESCRIPTION
       "An entry in the G.Bond/TDIM Service historical 15-minute PM
       table.
       Each entry represents Performance Monitoring data for a
       particular service, indexed by the g9983SvcIdx, in a G.Bond
       TDIM port, indexed by the ifIndex, collected during a particular
       15-minute interval, indexed by the
       g9983SvcPm15MinIntervalIndex."
     INDEX  { ifIndex, g9983SvcIdx,
              g9983SvcPm15MinIntervalIndex }
     ::= { g9983SvcPm15MinTable 1 }

   G9983SvcPm15MinEntry ::=
     SEQUENCE {
       g9983SvcPm15MinIntervalIndex      Unsigned32,
       g9983SvcPm15MinIntervalMoniTime   HCPerfTimeElapsed,
       g9983SvcPm15MinIntervalDowns      HCPerfIntervalCount,
       g9983SvcPm15MinIntervalValid      TruthValue
     }

   g9983SvcPm15MinIntervalIndex  OBJECT-TYPE
     SYNTAX      Unsigned32 (1..96)
     MAX-ACCESS  not-accessible
     STATUS      current
     DESCRIPTION
       "Performance data interval number.  1 is the most recent
       previous interval; interval 96 is 24 hours ago.
       Intervals 2..96 are OPTIONAL.

       This object partially maps to the TR-159 attribute
       aGroupPerf15MinIntervalNumber."
     REFERENCE
       "[TR-159], Section 5.5.1.57"
     ::= { g9983SvcPm15MinEntry 1 }

   g9983SvcPm15MinIntervalMoniTime  OBJECT-TYPE
     SYNTAX      HCPerfTimeElapsed
     UNITS       "seconds"
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only count of seconds over which the performance data
       was actually monitored.  This value will be the same as the
       interval duration (900 seconds), except in a situation where
       performance data could not be collected for any reason."
     ::= { g9983SvcPm15MinEntry 2 }

   g9983SvcPm15MinIntervalDowns  OBJECT-TYPE
     SYNTAX      HCPerfIntervalCount
     UNITS       "seconds"
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only count of seconds in the 15-minute performance
       history interval during which a particular TDIM service was
       'down', as indicated by the g9983OperSvcState object.

       This object is inhibited during Unavailable Seconds (UAS)."
     ::= { g9983SvcPm15MinEntry 3 }

   g9983SvcPm15MinIntervalValid  OBJECT-TYPE
     SYNTAX      TruthValue
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only object indicating whether or not this history
       bucket contains valid data.  A valid bucket is reported as
       true(1) and an invalid bucket as false(2).

       If this history bucket is invalid, the BTU-C MUST NOT produce
       notifications based upon the value of the counters in this
       bucket.
       Note that an implementation may decide not to store invalid
       history buckets in its database.  In such a case, this object
       is not required, as only valid history buckets are available
       while invalid history buckets are simply not in the database.

       This object partially maps to the TR-159 attribute
       aGroupPerf15MinIntervalValid."
     REFERENCE
       "[TR-159], Section 5.5.1.58"
     ::= { g9983SvcPm15MinEntry 4 }

and now the 1-day buckets, almost there bestie 🧚

   -- Service PM history: 1-day buckets

   g9983SvcPm1DayTable OBJECT-TYPE
     SYNTAX      SEQUENCE OF G9983SvcPm1DayEntry
     MAX-ACCESS  not-accessible
     STATUS      current
     DESCRIPTION
       "This table contains historical 1-day buckets of Performance
       Monitoring information for the services of a G.Bond/TDIM port
       (a multi-dimensional row for each 1-day interval, up to 7
       intervals).
       Entries in this table MUST be maintained in a persistent manner."
     ::= { g9983PM 6 }

   g9983SvcPm1DayEntry OBJECT-TYPE
     SYNTAX      G9983SvcPm1DayEntry
     MAX-ACCESS  not-accessible
     STATUS      current
     DESCRIPTION
       "An entry in the G.Bond/TDIM Service historical 1-day PM table.
       Each entry represents Performance Monitoring data for a
       particular service, indexed by the g9983SvcIdx, defined in a
       G.Bond/TDIM port, indexed by the ifIndex, collected during a
       particular 1-day interval, indexed by the
       g9983SvcPm1DayIntervalIndex."
     INDEX  { ifIndex, g9983SvcIdx,
              g9983SvcPm1DayIntervalIndex }
     ::= { g9983SvcPm1DayTable 1 }

okay bestie, this is where the 1-day history table lives 🧚 each row is one whole day of receipts, and the table tells you what's in each column ✨

   G9983SvcPm1DayEntry ::=
     SEQUENCE {
       g9983SvcPm1DayIntervalIndex       Unsigned32,
       g9983SvcPm1DayIntervalMoniTime    HCPerfTimeElapsed,
       g9983SvcPm1DayIntervalDowns       HCPerfIntervalCount,
       g9983SvcPm1DayIntervalValid       TruthValue
     }

   g9983SvcPm1DayIntervalIndex  OBJECT-TYPE
     SYNTAX      Unsigned32 (1..7)
     MAX-ACCESS  not-accessible
     STATUS      current
     DESCRIPTION
       "Performance data interval number.  1 is the most recent
       previous interval; interval 7 is 7 days ago.
       Intervals 2..7 are OPTIONAL.

       This object partially maps to the TR-159 attribute
       aGroupPerf1DayIntervalNumber."
     REFERENCE
       "[TR-159], Section 5.5.1.62"
     ::= { g9983SvcPm1DayEntry 1 }

   g9983SvcPm1DayIntervalMoniTime  OBJECT-TYPE
     SYNTAX      HCPerfTimeElapsed
     UNITS       "seconds"
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only count of seconds over which the performance data
       was actually monitored.  This value will be the same as the
       interval duration (86400 seconds), except in a situation where
       performance data could not be collected for any reason.

       This object partially maps to the TR-159 attribute
       aGroupPerf1DayIntervalMoniSecs."
     REFERENCE
       "[TR-159], Section 5.5.1.64"
     ::= { g9983SvcPm1DayEntry 2 }

   g9983SvcPm1DayIntervalDowns  OBJECT-TYPE
     SYNTAX      HCPerfIntervalCount
     UNITS       "seconds"
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only count of seconds in the 1-day performance history
       interval during which a particular TDIM service was 'down',
       as indicated by the g9983OperSvcState object.

       This object is inhibited during Unavailable Seconds (UAS)."
     ::= { g9983SvcPm1DayEntry 3 }

   g9983SvcPm1DayIntervalValid  OBJECT-TYPE
     SYNTAX      TruthValue
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "A read-only object indicating whether or not this history
       bucket contains valid data.  A valid bucket is reported as
       true(1) and an invalid bucket as false(2).
       If this history bucket is invalid, the BTU-C MUST NOT produce
       notifications based upon the value of the counters in this
       bucket.
       Note that an implementation may decide not to store invalid
       history buckets in its database.  In such a case, this object
       is not required, as only valid history buckets are available
       while invalid history buckets are simply not in the database.

       This object partially maps to the TR-159 attribute
       aGroupPerf1DayIntervalValid."
     REFERENCE
       "[TR-159], Section 5.5.1.63"
     ::= { g9983SvcPm1DayEntry 4 }

okay the BTU-C part is super important 🫢 if a bucket is invalid it is NOT allowed to fire notifications off its counters, no cap πŸ™…β€β™€οΈ

Next up is the conformance setup, which is basically the group bookkeeping πŸŽ€ the groups get numbered and sorted into little bundles, and then the compliance statement says which bundles you need πŸ’…

  --
  -- Conformance Statements
  --

   g9983Groups      OBJECT IDENTIFIER
     ::= { g9983Conformance 1 }

   g9983Compliances OBJECT IDENTIFIER
     ::= { g9983Conformance 2 }

   -- Object Groups

   g9983BasicGroup OBJECT-GROUP
     OBJECTS {
       g9983PortConfAdminServices,
       g9983PortStatCrc4Errors,
       g9983PortStatCrc6Errors,
       g9983PortStatCrc8Errors,
       g9983PortCapFecSupported,
       g9983OperSvcIdx,
       g9983OperSvcState,
       g9983SvcIfIdx,
       g9983SvcType,
       g9983SvcSize,
       g9983SvcRowStatus,
       g9983PortStatFltStatus
     }
     STATUS      current
     DESCRIPTION
       "A collection of objects representing management information
       for G.Bond/TDIM ports."
     ::= { g9983Groups 1 }

   g9983FecGroup OBJECT-GROUP
     OBJECTS {
       g9983PortCapFecSupported,
       g9983PortConfFecAdminState,
       g9983PortStatFecOperState,
       g9983PortConfFecWordSize,
       g9983PortConfFecRedundancySize,
       g9983PortConfFecInterleaverType,
       g9983PortConfFecInterleaverDepth,
       g9983PortCapFecMaxWordSize,
       g9983PortCapFecMaxRedundancySize,
       g9983PortCapFecInterleaverTypeSupported,
       g9983PortCapFecMaxInterleaverDepth
     }
     STATUS      current
     DESCRIPTION
       "A collection of objects supporting the OPTIONAL Forward Error
       Correction (FEC) and Interleaver function in G.Bond/TDIM
       ports."
     ::= { g9983Groups 2 }

   g9983AlarmConfGroup OBJECT-GROUP
     OBJECTS {
       g9983PortConfSvcUpDownEnable
     }
     STATUS      current
     DESCRIPTION
       "A collection of objects required for configuration of alarm
       thresholds and notifications in G.Bond/TDIM ports."
     ::= { g9983Groups 3 }

   g9983NotificationGroup NOTIFICATION-GROUP
     NOTIFICATIONS {
       g9983SvcUp,
       g9983SvcDown
     }
     STATUS      current
     DESCRIPTION
       "This group supports notifications of significant conditions
       associated with G.Bond/TDIM ports."
     ::= { g9983Groups 4 }

   g9983PerfCurrGroup OBJECT-GROUP
     OBJECTS {
       g9983PortPmCur15MinValidIntervals,
       g9983PortPmCur15MinInvalidIntervals,
       g9983PortPmCur15MinTimeElapsed,
       g9983PortPmCur15MinCrc4s,
       g9983PortPmCur15MinCrc6s,
       g9983PortPmCur15MinCrc8s,
       g9983PortPmCur1DayValidIntervals,
       g9983PortPmCur1DayInvalidIntervals,
       g9983PortPmCur1DayTimeElapsed,
       g9983PortPmCur1DayCrc4s,
       g9983PortPmCur1DayCrc6s,
       g9983PortPmCur1DayCrc8s,
       g9983SvcPmCur15MinValidIntervals,
       g9983SvcPmCur15MinInvalidIntervals,
       g9983SvcPmCur15MinTimeElapsed,
       g9983SvcPmCur15MinDowns,
       g9983SvcPmCur1DayValidIntervals,
       g9983SvcPmCur1DayInvalidIntervals,
       g9983SvcPmCur1DayTimeElapsed,
       g9983SvcPmCur1DayDowns
     }
     STATUS      current
     DESCRIPTION
       "A collection of objects supporting OPTIONAL current Performance
       Monitoring information for G.Bond/TDIM ports."
     ::= { g9983Groups 5 }

   g9983Perf15MinGroup OBJECT-GROUP
     OBJECTS {
       g9983PortPm15MinIntervalMoniTime,
       g9983PortPm15MinIntervalCrc4s,
       g9983PortPm15MinIntervalCrc6s,
       g9983PortPm15MinIntervalCrc8s,
       g9983PortPm15MinIntervalValid,
       g9983SvcPm15MinIntervalMoniTime,
       g9983SvcPm15MinIntervalDowns,
       g9983SvcPm15MinIntervalValid
     }
     STATUS      current
     DESCRIPTION
       "A collection of objects supporting OPTIONAL historical
       Performance Monitoring information for G.Bond/TDIM ports, during
       previous 15-minute intervals."
     ::= { g9983Groups 6 }

   g9983Perf1DayGroup OBJECT-GROUP
     OBJECTS {
       g9983PortPm1DayIntervalMoniTime,
       g9983PortPm1DayIntervalCrc4s,
       g9983PortPm1DayIntervalCrc6s,
       g9983PortPm1DayIntervalCrc8s,
       g9983PortPm1DayIntervalValid,
       g9983SvcPm1DayIntervalMoniTime,
       g9983SvcPm1DayIntervalDowns,
       g9983SvcPm1DayIntervalValid
     }
     STATUS      current
     DESCRIPTION
       "A collection of objects supporting OPTIONAL historical
       Performance Monitoring information for G.Bond/TDIM ports, during
       previous 1-day intervals."
     ::= { g9983Groups 7 }

And last but not least, the compliance statement, where we finally spell out which bundles a device has to support and which ones are extras πŸ’– the table in the middle is the external stuff it leans on 🌸

  -- Compliance Statements

   g9983Compliance MODULE-COMPLIANCE
     STATUS      current
     DESCRIPTION
       "The compliance statement for G.Bond/TDIM interfaces.
       Compliance with the following external compliance statements
       is REQUIRED:

       MIB Module             Compliance Statement
       ----------             --------------------
       IF-MIB                 ifCompliance3
       GBOND-MIB              gBondCompliance"

     MODULE  -- this module
       MANDATORY-GROUPS {
         g9983BasicGroup,
         g9983AlarmConfGroup,
         g9983NotificationGroup
       }

       GROUP       g9983FecGroup
       DESCRIPTION
         "Support for this group is only required for implementations
         supporting the G.Bond/TDIM FEC and Interleaver function."

       GROUP       g9983PerfCurrGroup
       DESCRIPTION
         "Support for this group is only required for implementations
         supporting Performance Monitoring."

       GROUP       g9983Perf15MinGroup
       DESCRIPTION
         "Support for this group is only required for implementations
         supporting historical Performance Monitoring."

       GROUP       g9983Perf1DayGroup
       DESCRIPTION
         "Support for this group is only required for implementations
         supporting historical Performance Monitoring."

     ::= { g9983Compliances 1 }
END

that's the whole MIB module, slay πŸ’…βœ¨

7. Security Considerations πŸ”βœ¨

okay bestie, this section is serious, so buckle up 😭. This MIB module has a bunch of managed objects with a MAX-ACCESS of read-write and/or read-create. Those can be sensitive or vulnerable in some network environments. Supporting SET operations in a non-secure environment without proper protection can seriously mess with network operations πŸ’€. Here are the tables and objects and their sensitivity/vulnerability:

  • Changing g9983PortConfAdminServices may lead to a potential service disruption, by changing a particular service's position (which changes its drop priority) or even removing the service from the link altogether πŸ™ˆ
  • Changing g9983SvcTable configuration parameters (for example g9983SvcType or g9983SvcSize) may lead to a potential service impairment. For example, a TDM service would get dropped if there isn't enough actual bandwidth on the bonded link to support it πŸ“‰
  • Changing g9983PortConfTable configuration parameters (for example g9983PortConfFecAdminState) may lead to anything from link quality and rate degradation all the way to a complete link initialization failure 😱

Some of the readable objects in this MIB module (the ones with MAX-ACCESS other than not-accessible) may be sensitive or vulnerable in some network environments. Collectively they give info about the performance of network interfaces and can reveal some aspects of their configuration πŸ‘€.

In particular, a bonded xDSL port can be made up of multiple Unshielded Twisted Pair (UTP) voice-grade copper pairs, sitting in the same bundle as other pairs that belong to another operator/customer. So it's theoretically possible to eavesdrop on a G.Bond transmission just by "listening" to cross-talk from the bonded pairs, especially if the operating parameters of that G.Bond link are known 🎧.

It's thus important to control even GET and/or NOTIFY access to these objects, and possibly even encrypt the values of these objects when sending them over the network via SNMP. Here are the tables and objects and their sensitivity/vulnerability:

  • g9983PortStatFecOperState in the g9983PortStatTable indicates whether the FEC function is enabled, which may aid in deciphering the G.Bond/TDIM transmissions 🧩.
  • The g9983OperSvcTable provides the current operational service configuration, which may aid in deciphering the G.Bond/TDIM transmissions 🧩.

SNMP versions prior to SNMPv3 did not include adequate security. Even if the network itself is secure (for example by using IPsec), there's no control over who on the secure network is allowed to access and GET/SET (read/change/create/delete) the objects in this MIB module. Not it 🚫.

Implementations SHOULD provide the security features described by the SNMPv3 framework (see [RFC3410]). Implementations claiming compliance to the SNMPv3 standard MUST include full support for authentication and privacy via the User-based Security Model (USM) [RFC3414] with the AES cipher algorithm [RFC3826]. Implementations MAY also provide support for the Transport Security Model (TSM) [RFC5591] in combination with a secure transport such as SSH [RFC5592] or TLS/DTLS [RFC6353] πŸ”’.

Further, deployment of SNMP versions prior to SNMPv3 is NOT RECOMMENDED. Instead, it is RECOMMENDED to deploy SNMPv3 and to enable cryptographic security. It is then a customer/operator responsibility to make sure that the SNMP entity giving access to an instance of this MIB module is properly configured, so the objects are only accessible to those principals (users) who have legitimate rights to GET or SET (change/create/delete) them πŸ‘‘.


8. IANA Considerations 🧾

IANA has allocated the value 210 as the Object identifier for g9983MIB MODULE-IDENTITY <http://www.iana.org/> in the MIB-2 transmission sub-tree 🌸.

9. Acknowledgments 🫢

This document was produced by the [ADSLMIB] working group.

Special thanks to Dan Romascanu for his meticulous review of this text πŸ’œ.

10. References πŸ“š

10.1. Normative References

[G.998.3]  ITU-T, "Multi-pair bonding using time-division inverse
           multiplexing", ITU-T Recommendation G.998.3, January 2005,
           <http://www.itu.int/rec/T-REC-G.998.3/en>.

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

[RFC2578]  McCloghrie, K., Ed., Perkins, D., Ed., and J.
           Schoenwaelder, Ed., "Structure of Management Information
           Version 2 (SMIv2)", STD 58, RFC 2578, April 1999.

[RFC2579]  McCloghrie, K., Ed., Perkins, D., Ed., and J.
           Schoenwaelder, Ed., "Textual Conventions for SMIv2",
           STD 58, RFC 2579, April 1999.

[RFC2580]  McCloghrie, K., Perkins, D., and J. Schoenwaelder,
           "Conformance Statements for SMIv2", STD 58, RFC 2580,
           April 1999.

[RFC2863]  McCloghrie, K. and F. Kastenholz, "The Interfaces Group
           MIB", RFC 2863, June 2000.

[RFC3414]  Blumenthal, U. and B. Wijnen, "User-based Security Model
           (USM) for version 3 of the Simple Network Management
           Protocol (SNMPv3)", STD 62, RFC 3414, December 2002.

[RFC3705]  Ray, B. and R. Abbi, "High Capacity Textual Conventions
           for MIB Modules Using Performance History Based on 15
           Minute Intervals", RFC 3705, February 2004.

[RFC3826]  Blumenthal, U., Maino, F., and K. McCloghrie, "The
           Advanced Encryption Standard (AES) Cipher Algorithm in the
           SNMP User-based Security Model", RFC 3826, June 2004.

[RFC5591]  Harrington, D. and W. Hardaker, "Transport Security Model
           for the Simple Network Management Protocol (SNMP)",
           RFC 5591, June 2009.

[RFC5592]  Harrington, D., Salowey, J., and W. Hardaker, "Secure
           Shell Transport Model for the Simple Network Management
           Protocol (SNMP)", RFC 5592, June 2009.

[RFC6353]  Hardaker, W., "Transport Layer Security (TLS) Transport
           Model for the Simple Network Management Protocol (SNMP)",
           RFC 6353, July 2011.

[RFC6765]  Beili, E. and M. Morgenstern, "xDSL Multi-Pair Bonding
           (G.Bond) MIB", RFC 6765, February 2013.

[TR-159]   Beili, E. and M. Morgenstern, "Management Framework for
           xDSL Bonding", Broadband Forum Technical Report TR-159,
           December 2008, <http://www.broadband-forum.org/technical/
           download/TR-159.pdf>.

10.2. Informative References

[ADSLMIB]  IETF, "ADSL MIB (adslmib) Charter",
           <http://datatracker.ietf.org/wg/adslmib/charter/>.

[G.704]    ITU-T, "Synchronous frame structures used at 1544, 6312,
           2048, 8448 and 44 736 kbit/s hierarchical levels", ITU-T
           Recommendation G.704, October 1998,
           <http://www.itu.int/rec/T-REC-G.704/en>.

[RFC3410]  Case, J., Mundy, R., Partain, D., and B. Stewart,
           "Introduction and Applicability Statements for Internet-
           Standard Management Framework", RFC 3410, December 2002.

[RFC3593]  Tesink, K., "Textual Conventions for MIB Modules Using
           Performance History Based on 15 Minute Intervals",
           RFC 3593, September 2003.

[RFC4181]  Heard, C., "Guidelines for Authors and Reviewers of MIB
           Documents", BCP 111, RFC 4181, September 2005.

Author's Address πŸ–‹οΈ

Edward Beili
Actelis Networks
25 Bazel St.
Petach-Tikva  49103
Israel

Phone: +972-3-924-3491
EMail: edward.beili@actelis.com
πŸ“¦ where this page comes from