RFC 4837

Managed Objects of Ethernet Passive Optical Networks (EPON)

๐Ÿ“… published July 2007, from ietf

RFC 4837: Managed Objects of Ethernet Passive Optical Networks (EPON) ๐Ÿฆ‹

Part 1 of 18 ๐ŸŒธ

okay bestie, the title block is giving very "official standards doc" energy ๐Ÿ’… so here's the tea. This one came out of the Network Working Group, written by L. Khermosh from PMC-SIERRA ๐Ÿ’–. It's a Standards Track doc, dated July 2007 โœจ. Its title block has no "Obsoletes" or "Updates" line, so it doesn't replace or update any other RFC ๐Ÿซถ.


Status of This Memo โœจ

Okay so this doc is an Internet standards track protocol for the Internet community ๐ŸŒˆ. It's also asking everyone for discussion and suggestions for improvements, so bring your ideas ๐Ÿ’…. If you want to know where this protocol sits in standardization, check the current edition of the "Internet Official Protocol Standards" (STD 1) ๐Ÿ“š. And the distribution of this memo is unlimited, so share it with everyone ๐Ÿฆ‹.

Copyright (C) The IETF Trust (2007). ๐Ÿ’œ

Abstract ๐Ÿงš

Bestie, this part is the main event ๐Ÿ‘‘. This doc defines a chunk of the Management Information Base (MIB), which is the info store that network management protocols use in TCP/IP based Internets ๐ŸŒธ. Specifically, it defines objects for managing interfaces that follow the Ethernet Passive Optical Networks (EPON) standard from IEEE Std 802.3ah-2004 โญ. Those interfaces are extended capabilities of Ethernet-like interfaces, so it's an upgrade with main character energy ๐Ÿ”ฅ.

Table of Contents ๐Ÿ“‹

1.  The Internet-Standard Management Framework . . . . . . . . . .  3
  2.  Overview . . . . . . . . . . . . . . . . . . . . . . . . . . .  3
    2.1.  Terminology and Abbreviations  . . . . . . . . . . . . . .  3
    2.2.  EPON Architecture Highlights . . . . . . . . . . . . . . .  5
      2.2.1.  Introduction . . . . . . . . . . . . . . . . . . . . .  5
      2.2.2.  Principles of Operation  . . . . . . . . . . . . . . .  6
      2.2.3.  The Physical Media . . . . . . . . . . . . . . . . . .  7
      2.2.4.  PMD Specifications . . . . . . . . . . . . . . . . . .  8
      2.2.5.  Point-to-Point Emulation . . . . . . . . . . . . . . .  8
      2.2.6.  Principles of the MPCP . . . . . . . . . . . . . . . . 10
      2.2.7.  Forward Error Correction (FEC) . . . . . . . . . . . . 12
    2.3.  Management Architecture  . . . . . . . . . . . . . . . . . 13
  3.  MIB Structure  . . . . . . . . . . . . . . . . . . . . . . . . 17
  4.  Relation to Other MIB Modules  . . . . . . . . . . . . . . . . 22
    4.1.  Relation to the Interfaces MIB and Ethernet-like
          Interfaces MIB . . . . . . . . . . . . . . . . . . . . . . 22
    4.2.  Relation to the IEEE 802.3 MAU MIBs  . . . . . . . . . . . 29
    4.3.  Relation to the EFM OAM MIB  . . . . . . . . . . . . . . . 29
    4.4.  Relation to the Bridge MIB . . . . . . . . . . . . . . . . 30
  5.  Mapping of IEEE 802.3ah Managed Objects  . . . . . . . . . . . 31
  6.  Definitions - The DOT3 EPON MIB Module . . . . . . . . . . . . 33
  7.  IANA Considerations  . . . . . . . . . . . . . . . . . . . . . 85
  8.  Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 86
  9.  Security Considerations  . . . . . . . . . . . . . . . . . . . 86
  10. References . . . . . . . . . . . . . . . . . . . . . . . . . . 88
    10.1. Normative References . . . . . . . . . . . . . . . . . . . 88
    10.2. Informative References . . . . . . . . . . . . . . . . . . 90

1. The Internet-Standard Management Framework โœจ

Okay so if you want the full overview of the docs that describe the current Internet-Standard Management Framework, go read Section 7 of RFC 3410 [RFC3410] ๐Ÿ“–. Managed objects live in a virtual info store called the Management Information Base, or MIB ๐Ÿ’…. You usually reach MIB objects through the Simple Network Management Protocol (SNMP) ๐Ÿซถ. The objects get defined using the rules in the Structure of Management Information (SMI) ๐ŸŒˆ. This memo's MIB module follows SMIv2, which is described in STD 58, RFC 2578 [RFC2578]; STD 58, RFC 2579 [RFC2579]; and STD 58, RFC 2580 [RFC2580] ๐ŸŽ€.

2. Overview ๐ŸŒธ

Bestie, this section is basically the recap ๐Ÿ’–. Again, this doc defines a portion of the MIB for network management protocols in TCP/IP based Internets ๐Ÿฆ‹. It covers objects for managing interfaces that conform to the Ethernet Passive Optical Networks (EPON) standard in [802.3ah], which are extended capabilities of Ethernet-like interfaces โญ. The doc has a list of management objects based on the attributes in the relevant parts of [802.3ah] Annex 30A that refer to EPON ๐Ÿ‘‘.

2.1. Terminology and Abbreviations ๐Ÿ“š

Okay, the big rule here: the key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" are interpreted as described in [RFC2119] ๐Ÿ’…๐Ÿ”ฅ. Those caps words are the whole point, so don't skip them ๐Ÿ™ˆ.

Here's the abbreviation list, copied exactly so nothing gets lost ๐Ÿ“:

ACK - Acknowledge

BER - Bit Error Rate

BW - Bandwidth

CO - Central Office

CPE - Customer Premises Equipment

CRC - Cyclic Redundancy Check

EFM - Ethernet First Mile

EPON - Ethernet Passive Optical Network

FCS - Frame Check Sequence
FEC - Forward Error Correction

GMII - Gigabit Media Independent Interface

LAN - Local Area Network

LLID - Logical Link Identifier

MAC - Media Access Control

Mbps - Megabit per second

MDI - Medium Dependent Interface

MDIO - Management Data Input/Output

MPCP - Multi-Point Control Protocol

MP2PE - Multi-Point to Point Emulation

OAM - Operation Administration Maintenance

OLT - Optical Line Terminal (Server unit of the EPON)

OMP - Optical Multi-Point

ONU - Optical Network Unit (Client unit of the EPON)

P2MP - Point-to-Multipoint

P2PE - Point-to-Point Emulation

PCS - Physical Coding Sublayer

PHY - Physical Layer

PMA - Physical Medium Attachment

PMD - Physical Medium Dependent

PON - Passive Optical Network

RS - Reconciliation Sublayer

RTT - Round Trip Time

SLA - Service Level Agreement
SLD - Start of LLID Delimiter

TDM - Time Division Multiplexing

TQ - Time Quanta

2.2. EPON Architecture Highlights ๐Ÿงš

2.2.1. Introduction ๐Ÿ’–

Okay so the EPON standard in [802.3ah] defines the physical media (Layer 1) and the media access (Layer 2) of the EPON interface ๐Ÿฆ‹. Honestly, the EPON is a variant of the Gigabit Ethernet protocol for Optical Access โœจ. That optical access topology is based on passive optical splitting, and the link of a Passive Optical Network (PON) runs over a single shared optical fiber. Passive optical splitters divide that single fiber out to separate subscribers ๐ŸŒˆ.

The Optical Line Terminal (OLT) is the server unit of the network, and it lives at the Central Office (CO) ๐Ÿ‘‘. The Optical Network Unit (ONU) is the client unit, and it lives at the Customer Premises Equipment (CPE) ๐ŸŽ€.

Here's the PON topology diagram, copied exactly ๐ŸŒธ:

           Device with
           one or more P2MP
           interfaces such as OLT
           for EPON                       An EPON          IP host
           ------- OLT          ONU       "modem"          --------
Other IEEE |     | interface |  interface ------ Other IEEE|      |
interface  |     |-------\----------------|    | interface |      |
===========|     |        \               |    |===========|      |
           |     |         \              ------           --------
           |     |          \             ------           --------
           .     .           \------------|    |           |      |
           |     |------\                 |    |===========|      |
           |     |       \                ------           --------
           -------        \ etc

The IEEE layering architecture of an EPON interface is defined in the diagram of Figure 56.2 [802.3ah]. The following clauses in [802.3ah] define the corresponding layers of an EPON interface ๐Ÿ”ฅ:

  • clause 30 - Management
  • clause 60 - PMD for EPON media (Burst PMD)
  • clause 64 - MPCP (Multi-Point Control Protocol) - defines the Multi- Point architecture, and control protocol for the media access of EPON.
  • clause 65 -
    • a) Virtual links definition for the EPON
    • b) FEC
    • c) PMA for the EPON.

2.2.2. Principles of Operation ๐ŸŒˆ

Okay bestie, the EPON interface spec is built on the gigabit Ethernet interface from [802.3], clauses 35 and 36 ๐Ÿ’…. The Ethernet MAC works at gigabit rate โญ. The media interface to the MAC goes through the GMII interface, as described in clause 35 ๐Ÿฆ‹. The PCS layer is based on the gigabit Ethernet PCS from clause 36 ๐Ÿซถ. The special EPON layers get added to the Ethernet layering in these places ๐Ÿ’–:

The MPCP sits in the MAC control layer, and it provides the EPON control protocol ๐Ÿ‘‘. The Emulation layer sits at the RS (Reconciliation Sublayer) and creates a virtual private path to each ONU ๐Ÿงš. The FEC layer sits between the PCS and PMA layers, and it enhances the reach and split performance of the optical link ๐Ÿ”ฅ.

Here's the layering model diagram, copied exactly ๐ŸŽ€:

   +==========================================+
   |               Higher layers              |
   +==========================================+
   |               802.1D Bridge              |
   +==========================================+
   | MAC client|        ...        |MAC client|
   +==========================================+
   |           MAC Control - (MPCP)           |            *NEW*
   +==========================================+
   |    MAC    |        ...        |    MAC   |
   +==========================================+
   |           P2P Emulation (P2PE)           |            *NEW*
   +==========================================+
                   |            |
                   |    GMII    |
                   |            |
   +==========================================+
   |                    PCS                   |
   +==========================================+
   |                    FEC                   |            *NEW*
   +==========================================+
   |                    PMA                   |  *Enhanced parameters
   +==========================================+    for EPON*
   |                    PMD                   |  *Enhanced parameters
   +==========================================+    for EPON*
                   |            |
                   |    MDI     |
                   |            |
                 /===================/
                /       Media       /
               /===================/

2.2.3. The Physical Media ๐Ÿฆ‹

Bestie, the physical link is a fiber optical link โœจ. The OLT and ONUs are connected through passive optical splitters ๐ŸŒธ. Downlink means transmission from the OLT to the ONUs, and uplink means transmission from the ONUs to the OLT ๐Ÿ’œ. Uplink and downlink are multiplexed on the same fiber using separated wavelengths ๐ŸŒˆ.

The downlink is a broadcast medium, so the OLT sends data to all ONUs at once ๐Ÿ“ก. The uplink is a shared transmission medium for all of the ONUs ๐Ÿ‘‘. The uplink access is based on time division multiplexing (TDM), and the Multi-Point Control Protocol (MPCP) manages that TDM media access ๐Ÿ”ฅ. The MPCP is a control protocol based on inband packet messaging ๐Ÿงš.

The OLT sends control messages called GATE messages, which let ONUs transmit. They define when the transmission happens and how long it lasts ๐Ÿ’–. These messages set the transmission order and the amount of BW for each ONU ๐ŸŽ€. A scheduling algorithm at the OLT is responsible for allocating the BW and controlling each ONU's delay according to its SLA โญ. That scheduling algorithm is not defined in [802.3ah], so it's the OLT implementer's call ๐Ÿซถ๐Ÿ’….

2.2.4. PMD Specifications โœจ

okay so the PMD specs pick the same optical wavelength plan as [ITU-T.G.983] ๐ŸŒˆ the transceivers are basically glow-ups of existing Ethernet optical transceivers ๐Ÿ’… they do dual wavelength on a single fiber and get extended burst capabilities for the uplink โœจ the uplink burst capability means ONUs can transmit in bursts and the OLT can receive in bursts ๐Ÿซถ and [802.3ah] went with very relaxed burst parameters so the devices stay cheap to make ๐Ÿ’– it's giving budget-friendly but make it work ๐Ÿ™ˆ

2.2.5. Point-to-Point Emulation

bestie, this one is lowkey the main character of the whole thing ๐Ÿฆ‹ the downstream is a broadcast link, which means the OLT's transmission is shared by every ONU ๐ŸŒธ that sharing has some privacy problems, so it should only be used for broadcast traffic ๐Ÿ™ˆ the traffic meant for each ONU should not be shared with the others ๐Ÿ”’

the fix from [802.3ah] is to split the EPON link into virtual pieces, one per ONU โœจ each ONU gets its own dedicated virtual link to the OLT, and there's also an extra link for broadcast ๐Ÿ’œ so the medium turns into an aggregation of point-to-point tunnels ๐Ÿงš the OLT can't keep its EPON interface as one single interface hooked up to N devices like the physical layer would suggest ๐Ÿ˜ญ instead the EPON interface is split into separate virtual interfaces, one for each virtual link ๐Ÿ’… so the OLT acts like a device with N virtual ports, plus one more port for broadcast ๐Ÿ‘‘

there's also a single-copy-broadcast channel, tagged as all one LLID ๐ŸŽ€ it lets broadcast go out as one copy to all ONUs, which keeps the bandwidth efficiency that comes from the PON being a shared medium ๐Ÿ”ฅ the ONUs filter out downlink traffic that isn't meant for them, using the virtual link marking ๐Ÿซถ each Ethernet packet gets an LLID tag at the preamble that says which virtual link it belongs to ๐Ÿ’– in the downstream the LLID marks the destination port, and in the upstream it marks the source port โœจ

the virtual links also dodge a violation of the [802.1d] bridging rules for peer-to-peer traffic in the PON ๐Ÿ™ˆ peer-to-peer traffic just means traffic between ONUs in the same PON ๐Ÿ’€ without the split, the OLT couldn't keep one interface connected to N devices and still let those devices talk to each other without breaking the bridging rules ๐Ÿ˜ญ the source and destination addresses would both sit behind the same port, so the traffic should be discarded ๐Ÿšซ separating the ONUs into virtual links fixes that ๐ŸŽ‰ the OLT has N virtual ports for the one physical EPON port, and a bridge sees a single MAC Client for every link pair ๐ŸŒˆ

the private paths concept solves the networking problems and gives subscriber isolation ๐Ÿ” ๐Ÿซถ

since the tunneling is only virtual, there's still a single physical interface and a single physical layer for the device, so some attributes end up shared ๐Ÿ’œ for example, the interface has a single local MAC address ๐Ÿฆ‹

here's the virtual tunneling for an OLT with 3 ONUs ๐Ÿ‘‘

                     Trunk Line
                         |
                         |
                         |
                        \|/
  +===============================================+
  |                 802.1D Bridge                 |
  +===============================================+
  | MAC client1|          ...         |MAC client3|
  +===============================================+
  |                     MP2PE                     |
  +===============================================+
  |                      PHY                      |
  =================================================
         |                 |                 |
         |                 |                 |
        \|/               \|/               \|/
  +============+    +============+    +============+
  |    PHY     |    |     PHY    |    |     PHY    |
  +============+    +============+    +============+
  |   MP2PE    |    |    MP2PE   |    |    MP2PE   |
  +============+    +============+    +============+
  | MAC client |    | MAC client |    | MAC client |
  +============+    +============+    +============+
  |    PHY     |    |     PHY    |    |     PHY    |
  +============+    +============+    +============+
        /|\               /|\               /|\
         |                 |                 |
         |                 |                 |
         |                 |                 |
    Subscriber1       Subscriber2       Subscriber3

2.2.6. Principles of the MPCP

okay the EPON standard defines the media access control of an optical Access network ๐ŸŒธ and the Access network is really different from the legacy LAN that Ethernet was originally built for ๐Ÿ˜ญ the big differences are in how the network gets provisioned ๐Ÿ’… an Access network is an administrated environment, with an operator providing the service and subscribers consuming it ๐Ÿ’ผ the operator controls the network and manages its traffic, so BW is controlled and subscribers get billed for services ๐Ÿ’ธ the MPCP divides the Ethernet interfaces into two unequal types of network units ๐Ÿ‘‘ the first is an OLT interface, which is the server unit that controls the network ๐Ÿซก the second is an ONU interface, which is a client unit that participates in the network ๐Ÿงš

the OLT is the server unit that manages the network ๐Ÿ’œ the MPCP controls the TDM transmission of the uplink ๐ŸŽ€ the MPCP is implemented at the MAC control layer, and its messages are MAC control messages using the 0x8808 Ethertype ๐Ÿ”ฅ these messages are not forwarded out of the MAC ๐Ÿ™ˆ

the protocol needs a concept of time so it can schedule the uplink transmission โฐ a timestamp gets set by the OLT, stays synchronized between the network units, and gets passed along in the MPCP messages โœจ that timestamp is also used to measure the RTT of each ONU ๐Ÿฆ‹ the OLT compensates for RTT when it generates grants for the uplink, and it works out the RTT by taking the difference between the incoming timestamp and local time ๐Ÿงฎ RTT compensation is needed because the RTT in an Access network can be pretty significant ๐Ÿ˜ญ the standard lets the network reach a 20 km distance, which is equivalent to a 200 usec RTT (25 Kbytes of data) ๐ŸŒˆ

the TDM control happens with GATE messages ๐ŸŽŸ๏ธ these define, for each ONU, the time for transmission and the length of transmission โœจ the RTT gets subtracted from the transmission time in the GATE message so the ONU's transmission time gets shifted in the opposite direction ๐Ÿ”„

a scheduling algorithm at the OLT handles dividing the BW and controlling the transmission delay of each ONU according to its SLA ๐Ÿ“Š that algorithm isn't defined in the [802.3ah] though, so it's up to the OLT ๐Ÿซถ the MPCP defines a closed loop operation so the algorithm can actually be efficient ๐Ÿ’… ONUs can report how much BW they need using a special REPORT message ๐Ÿ“ฃ this means BW only gets allocated when it's requested, which works because traffic is statistically bursty ๐Ÿ’ฅ it also lets different ONUs have different peak BW at different times, so BW can be oversubscribed ๐Ÿ’– the REPORT message reports the amount of data waiting in the ONU queues ๐Ÿ“ฆ

the MPCP also defines a protocol for auto-discovery and registration of ONUs ๐Ÿ”

the registration process goes like this ๐Ÿ‘‡

OLT                                          ONU
 |                                            |
 |          Discovery Gate message           \|
 |--------------------------------------------|
 |                                           /|
 |                                            |
 |/         Register Request message          |
 |--------------------------------------------|
 |\                                           |
 |                                            |
 |          Register message                  |
 |           (assigning LLID)                \|
 |--------------------------------------------|
 |                                           /|
 |                                            |
 |               Gate message                \|
 |--------------------------------------------|
 |                                           /|
 |                                            |
 |/         Register ACK message              |
 |--------------------------------------------|
 |\                                           |
 |                                            |
 |                                            |

a new ONU requests to register by sending a REG_REQUEST message during a special discovery grant that the OLT allocates for exactly that ๐ŸŽซ more than one ONU might try during that window ๐Ÿ˜ฌ collisions can happen because the RTT of the new ONUs isn't known yet ๐Ÿ’€ so a random backoff mechanism gets used to schedule later registration requests and avoid those collisions ๐ŸŽฒ when the OLT gets a REG_REQUEST from an ONU and approves it, it sends a REGISTER message to that ONU that defines its LLID ๐Ÿท๏ธ from then on, the ONU's transmission is scheduled by its LLID, and since the RTT is known, no collision can occur ๐Ÿ™Œ the ONU replies with a REGISTER_ACK message and the MPCP registration process ends ๐ŸŽฌ higher layer protocols may be needed to authenticate the ONU and let it participate in the network ๐Ÿ”

2.2.7. Forward Error Correction (FEC)

the FEC is defined to enhance the link budget of the PON ๐Ÿ›ก๏ธ every splitter attenuates the optical signal, so the number of splits and the distance are limited by the link budget ๐Ÿ“‰ that makes an FEC that improves the link budget really valuable ๐Ÿ’œ the FEC code used is RS(239,255,8), similar to the FEC code in [ITU-T.G.975], and it improves the BER from 1E-4 to 1E-12 ๐Ÿš€

the FEC parity encapsulation is based on the framing of the Ethernet packet ๐ŸŽ€ the Ethernet packets get spaced out by MAC rate adaptation, and the parity bytes get inserted after the packet in that provided space โœจ

the start and end of packet codewords also define the FEC boundaries, and since they sit outside the FEC protection, they get replaced by a series of symbols to make them less vulnerable to errors ๐Ÿ›ก๏ธ

here's an FEC-protected frame ๐Ÿ‘‡

+-------------------------------------------------------------------+
|       |              |           |     |       |          |       |
| S_FEC | Preamble/SFD |   Frame   | FCS | T_FEC |  Parity  | T_FEC |
|       |              |           |     |       |          |       |
+-------------------------------------------------------------------+

the FEC is added in a separate layer between the PCS and PMA layers of the [802.3] ๐Ÿงฑ

the FEC layer introduces a fixed delay in both the receive path and the transmit path โฑ๏ธ

and the FEC layer is optional ๐Ÿซถ

2.3. Management Architecture ๐Ÿ’–

okay bestie, so every single layer of EPON comes with its own management interface ๐ŸŽ€ and you control it through clause 30 of the [802.3ah]. The [802.3ah] spec can be used for lots of different apps, and some clauses can be used on their own, so the IEEE management clause gives each one its own package ๐Ÿ“ฆ. The MIB document follows that same split โœจ

Here's how the MIB groups line up with the [802.3ah] layers ๐Ÿ‘‡

   +===========================+
   |       Higher layers       |
   +===========================+
   |       802.1D Bridge       |
   +===========================+
   |MAC client| ... |MAC client|
   +===========================+    \ +=============================+
   |   MAC Control - (MPCP)    |----- |MpcpObjects| ... |MpcpObjects|
   +===========================+    / +=============================+
   |   MAC    | ... |   MAC    |
   +===========================+    \ +=============================+
   |    P2P Emulation (P2PE)   |----- |OmpEmulat  |     |OmpEmulat  |
   +===========================+    / |ionObjects | ... |ionObjects |
             |        |               +=============================+
             |  GMII  |
             |        |
   +===========================+
   |            PCS            |
   +===========================+    \ +=============================+
   |            FEC            |----- |FecObjects | ... |FecObjects |
   +===========================+    / +=============================+
   |            PMA            |
   +===========================+
   |            PMD            |
   +===========================+
             |        |
             |  MDI   |
             |        |
         /===============/
        /     Media     /
       /===============/

The ONU side is the easy one ๐Ÿ˜Œ There's one logical interface and one physical interface, and each layer that the OLT can query remotely has exactly one copy โœจ

The OLT is more of a main character situation ๐Ÿ‘‘ It has a single physical interface plus N virtual interfaces, one for each ONU's virtual link, and one more virtual interface for the broadcast virtual link ๐ŸŒˆ Looking at the layering diagram, the MAC layer is basically duplicated, so this document treats managing a virtual interface just like managing a physical one ๐Ÿ’… Each virtual link gets its own interface index, and the OLT gets one extra interface index on top of that ๐Ÿซถ

Let's walk through it with two devices ๐Ÿฆ‹ The first one has two physical interfaces, usually sits at a consumer's site, and is called an "ONU modem" ๐Ÿ 

An "ONU modem" looks like this:

                        --------
         ONU interface | ONU   | 10 megabit interface
         --------------| modem |--------------------
                       ---------

This device ends up with 3 entries in the IF table and one IF stack entry. For example:

ifIndex=1 - interface for 10 megabit interface

ifIndex=2 - interface for the optical interface

ifIndex=200 - interface for the ONU interface

And then in the IF stack table:

ifStackHigherLayer=200, ifStackLowerLayer=2 - map between the
physical and the ONU

The second device has three physical interfaces, usually sits at the provider's site, and may be called a "headend" ๐Ÿ“

A "headend" looks like this:

                           ---------
         1st OLT interface | Head  | gigE interface
         ------------------| end   |--------------------
                           |       |
         ------------------|       |
         2nd OLT interface |       |
                           ---------

With no ONUs attached, this device has 5 entries in the IF table. For example:

ifIndex=1 - interface for gigE interface

ifIndex=2 - interface for 1st optical interface

ifIndex=3 - interface for 2nd optical interface

ifIndex=265535 - interface for the 1st OLT broadcast interface

ifIndex=365535 - interface for the 2nd OLT broadcast interface

And then in the IF stack table:

ifStackHigherLayer=265535, ifStackLowerLayer=2 - map between the 1st
physical and its broadcast interface

ifStackHigherLayer=365535, ifStackLowerLayer=3 - map between the 2nd
physical and its broadcast interface

Now if two ONUs hook up to the first OLT interface, the IF table gets new entries too ๐Ÿงš For example:

ifIndex=200001 - interface for the 1st ONU of 1st OLT

ifIndex=200002 - interface for the 2nd ONU of 1st OLT

And in the IF stack table:

ifStackHigherLayer=200001, ifStackLowerLayer=2 - map between the 1st
physical and 1st ONU

ifStackHigherLayer=200002, ifStackLowerLayer=2 - map between the 1st
physical and 2nd ONU

Every physical interface gets an entry (ifIndex) in the tables of the interface MIB module [RFC2863], the MAU MIB module [RFC4836], and the Etherlike MIB module [RFC3635] ๐Ÿ“‹ On top of that, the OLT's virtual interfaces get their own entries (ifIndexes) too ๐ŸŒธ Why? The virtual interfaces are pretty distinct, since they connect to different physical ONUs from the OLT side โœจ For example, a separate bad frames counter or bad octets counter for each virtual link actually means something, because ONUs can sit at different distances ๐Ÿ“ Honestly, it's basically like having separate physical interfaces ๐Ÿ˜ญ

The same split shows up in this document's MIB module ๐Ÿ’œ Every row in the tables is indexed by ifIndex, so there's one row for each virtual link ๐Ÿฆ‹ Some control objects are shared, so they have to hold the same value for every virtual interface (same value for each ifIndex) ๐Ÿ”’ But most objects can be different across the N+1 logical interfaces at the OLT ๐ŸŒˆ Every MIB group works this way ๐Ÿซถ This is a bit different from the [802.3ah] layering diagram, which shows the P2MP layer as one single layer while duplicating the MAC and MAC client layers (see the diagram above) ๐Ÿ™ˆ Still, from a management point of view, partitioning the layers per virtual link is way more convenient and neat, because the atomic managed entity is the virtual link ๐Ÿ’… And using the virtual link's interface index for that is super handy, since the Interface, MAU, and etherLike interfaces MIBs already use it to index the virtual link rows ๐ŸŽ€

3. MIB Structure โœจ

okay so this section is basically the map of the whole MIB ๐Ÿ—บ๏ธ the DOT3 EPON MIB module defines the objects used for managing the [802.3ah] Point-to-Multipoint (P2MP) interfaces, and they're sorted into four groups ๐Ÿ’…

i) The Multi-Point Control Protocol (MPCP) MIB objects ๐ŸŽ€ these are related to [802.3ah], clause 64, Multi-Point Control Protocol attributes. this group has two tables:

The dot3MpcpControlTable is the one for configuration and status indication, per logical link, of MPCP compliant interfaces ๐Ÿ”ฅ

The dot3MpcpStatTable holds the statistics objects, also per logical link, of MPCP compliant interfaces ๐Ÿ“Š

the operational mode of an OLT/ONU for these tables gets set by the dot3MpcpMode object in the dot3MpcpControlTable ๐Ÿงš

ii) The OMPEmulation MIB objects ๐Ÿฆ‹ these are related to [802.3ah], clause 65, point-to-point emulation attributes. also two tables:

The dot3OmpEmulationTable is for configuration and status indication, per logical links, of OMPEmulation compliant interfaces โญ

The dot3OmpEmulationStatTable is the statistics one, per logical link, of OMPEmulation compliant interfaces ๐ŸŒธ

the operational mode of an OLT/ONU here is defined by the dot3OmpEmulationType object in the dot3OmpEmulationTable ๐Ÿ’œ

iii) The FEC MIB objects ๐ŸŒˆ these are related to [802.3ah], clause 60 and clause 65, EPON FEC attributes. just one table in this group:

The dot3EponFecTable defines the objects used for the configuration and status indication, per logical link, of FEC EPON compliant interfaces ๐Ÿซถ

iv) The EPON extended package MIB objects ๐Ÿ‘‘ these are used for configuration and status indication with extended capabilities of the EPON interfaces. this group is the biggest, with four tables:

The dot3ExtPkgControlTable defines the objects, per logical link, used for the configuration and status indication of EPON compliant interfaces ๐Ÿ”ฅ

The dot3ExtPkgQueueTable defines the objects, per logical link and per queue, used for the configuration and status indication of the ONU queues reported in the MPCP REPORT message, of EPON compliant interfaces ๐Ÿ’…

The dot3ExtPkgQueueSetsTable defines the objects, per logical link, per queue, and per queue_set, used for the configuration and status indication of the ONU queue_sets reported in the MPCP REPORT message, of EPON compliant interfaces ๐Ÿ“

The dot3ExtPkgOptIfTable defines the objects, per logical link, used for the control and status indication of the optical interface of EPON compliant interfaces โœจ

okay now the indexing, which is the part that matters for not getting confused later ๐Ÿ™ˆ as the architecture section described, every row in the tables is indexed by ifIndex. specifically, there's a row for each virtual link. a few control objects are shared and have the same value across the virtual interfaces (and they should have the same value for each ifIndex), but most objects have different values for N+1 logical interfaces at the OLT. this happens for each MIB group ๐Ÿ’–

it's a bit different from the [802.3ah] layering diagram, which shows the P2MP layer as one single layer while duplicating the MAC and MAC client layers. but from a management point of view, it's way more convenient and neat to split up the management of the layers for the virtual links, since the atomic managed entity is the virtual link โœจ it's also handy to use the interface index of the virtual link for that, because it's already used to index the rows of the virtual links in the Interface, MAU, and etherLike interfaces MIBs ๐Ÿฆ‹

here's an example of the MPCP control table of an OLT with 3 registered ONUs ๐Ÿงš

the table below shows the MPCP control table of ONU1 in working mode. one single row exists in the table ๐Ÿ’…

          +---------------------------+-----------------+
          | MPCP control MIB object   | Value           |
          +---------------------------+-----------------+
          | ifIndex                   | 100             |
          | dot3MpcpOperStatus        | true            |
          | dot3MpcpAdminState        | true            |
          | dot3MpcpMode              | onu             |
          | dot3MpcpSyncTime          | 25              |
          | dot3MpcpLinkID            | 1               |
          | dot3MpcpRemoteMACAddress  | OLT_MAC_Address |
          | dot3MpcpRegistrationState | registered      |
          | dot3MpcpTransmitElapsed   | 10              |
          | dot3MpcpReceiveElapsed    | 10              |
          | dot3MpcpRoundTripTime     | 100             |
          +---------------------------+-----------------+

                              Table 1

OLT_MAC_Address is the MAC address of the OLT EPON interface ๐Ÿซถ

the creation of the rows of the ONU interface happens at initialization ๐ŸŒธ

next up, the ONU's MPCP control table after initialization and before registration ๐Ÿ‘€

the table below shows the MPCP control table of ONU1 after initialization. one single row exists ๐Ÿ“

         +---------------------------+-------------------+
         | MPCP control MIB object   | Value             |
         +---------------------------+-------------------+
         | ifIndex                   | 100               |
         | dot3MpcpOperStatus        | true              |
         | dot3MpcpAdminState        | true              |
         | dot3MpcpMode              | onu               |
         | dot3MpcpSyncTime          | 0                 |
         | dot3MpcpLinkID            | 0                 |
         | dot3MpcpRemoteMACAddress  | 00:00:00:00:00:00 |
         | dot3MpcpRegistrationState | unregistered      |
         | dot3MpcpTransmitElapsed   | 0                 |
         | dot3MpcpReceiveElapsed    | 0                 |
         | dot3MpcpRoundTripTime     | 0                 |
         +---------------------------+-------------------+

                              Table 2

now the OLT side ๐ŸŒˆ the table below shows the MPCP control table of the OLT in working mode. four rows exist, all tied to the virtual links ๐Ÿ’œ

+----------------+-----------+------------+------------+------------+
| MPCP control   | Value     | Value      | Value      | Value      |
| MIB object     |           |            |            |            |
+----------------+-----------+------------+------------+------------+
| ifIndex        | 100001    | 100002     | 100003     | 165535     |
| dot3MpcpOperSt | true      | true       | true       | true       |
| atus           |           |            |            |            |
| dot3MpcpAdminS | true      | true       | true       | true       |
| tate           |           |            |            |            |
| dot3MpcpMode   | olt       | olt        | olt        | olt        |
| dot3MpcpSyncTi | 25        | 25         | 25         | 25         |
| me             |           |            |            |            |
| dot3MpcpLinkID | 1         | 2          | 3          | 65535      |
| dot3MpcpRemote | ONU1_MAC_ | ONU2_MAC_A | ONU3_MAC_A | BRCT_MAC_A |
| MACAddress     | Address   | ddress     | ddress     | ddress     |
| dot3MpcpRegist | registere | registered | registered | registered |
| rationState    | d         |            |            |            |
| dot3MpcpTransm | 10        | 10         | 10         | 10         |
| itElapsed      |           |            |            |            |
| dot3MpcpReceiv | 10        | 10         | 10         | 10         |
| eElapsed       |           |            |            |            |
| dot3MpcpRoundT | 100       | 60         | 20         | 0          |
| ripTime        |           |            |            |            |
+----------------+-----------+------------+------------+------------+

                              Table 3

ONU1_MAC_Address is the MAC address of ONU1 EPON interface ๐ŸŽ€

ONU2_MAC_Address is the MAC address of ONU2 EPON interface ๐ŸŽ€

ONU3_MAC_Address is the MAC address of ONU3 EPON interface ๐ŸŽ€

BRCT_MAC_Address is the MAC address of the broadcast EPON interface, which is the OLT MAC address ๐ŸŒŸ

the creation of the rows of the OLT interface and the broadcast virtual interface happens at initialization โœจ

the creation of rows for the virtual interfaces at the OLT happens when the link is established (ONU registers), and the deletion happens when the link is deleted (ONU deregisters) ๐Ÿฆ‹

last example in this section: the MPCP control table of the OLT after initialization, before the ONUs register ๐Ÿงš

the table below shows the MPCP control table of the OLT after initialization. a single row exists here, tied to the virtual broadcast link ๐Ÿ’–

          +---------------------------+------------------+
          | MPCP control MIB object   | Value            |
          +---------------------------+------------------+
          | ifIndex                   | 165535           |
          | dot3MpcpOperStatus        | true             |
          | dot3MpcpAdminState        | true             |
          | dot3MpcpMode              | olt              |
          | dot3MpcpSyncTime          | 25               |
          | dot3MpcpLinkID            | 65535            |
          | dot3MpcpRemoteMACAddress  | BRCT_MAC_Address |
          | dot3MpcpRegistrationState | registered       |
          | dot3MpcpTransmitElapsed   | 10               |
          | dot3MpcpReceiveElapsed    | 100000           |
          | dot3MpcpRoundTripTime     | 0                |
          +---------------------------+------------------+

                              Table 4

BRCT_MAC_Address is the MAC address of the broadcast EPON interface, which is the OLT MAC address ๐ŸŒˆ


4. Relation to Other MIB Modules ๐ŸŒธ

4.1. Relation to the Interfaces MIB and Ethernet-like Interfaces MIB ๐Ÿ’…

okay so an EPON interface is a kind of Ether-like interface ๐Ÿงš this MIB module extends the objects of the Interface MIB and the Ether-like Interfaces MIB for an EPON type interface โœจ

implementing this module therefore MUST require implementation of the Interfaces MIB module [RFC2863] and the Ethernet-like Interfaces MIB module [RFC3635] ๐Ÿ”ฅ

so each managed EPON interface gets a corresponding entry in the mandatory tables of the Ether-like MIB module found in [RFC3635], and likewise in the tables of the Interface MIB module found in [RFC2863]. each managed virtual EPON interface also gets a corresponding entry in the mandatory tables of the Ether-like MIB module found in [RFC3635], and likewise in the tables of the Interface MIB module found in [RFC2863], with a dedicated ifIndex for that interface ๐Ÿ’–

and here's the vibe check: this document doesn't replicate any objects from those MIBs ๐Ÿ™ˆ so for instance, it only defines dot3MpcpRemoteMACAddress, while assuming the local MAC address object is already defined in [RFC3635] ๐Ÿซถ

The interface MIB module [RFC2863] defines the interface index (ifIndex) ๐Ÿ’–. The EPON MIB tables use this ifIndex as an index, and it's how we name both the physical interface and the virtual link interfaces at the OLT โœจ. The OLT interface and its virtual link interfaces are stacked together using the ifStack table from [RFC2863] and the ifInvStack table from [RFC2864] ๐Ÿฆ‹. The OLT interface sits underneath every other interface attached to the virtual links, so it's the lower layer, full stop ๐Ÿ‘‘.

This document defines the EPON-specific objects for an ONU interface and an OLT interface ๐ŸŽ€. Everything in the tables is tracked per LLID, and the rows that refer to LLIDs are labelled with the ifIndex of the matching virtual link interface ๐ŸŒธ.

Now, quick heads up: each virtual interface does not get its own physical MAC address at the OLT, since they all share the same physical interface ๐Ÿ™ˆ. This is spelled out in [802.3ah], Section 64.1.2. So the matching object from the Ethernet-like interface MIB gets duplicated across all the virtual interfaces ๐Ÿ’….

Okay, let's look at an example, an OLT with 3 registered ONUs ๐Ÿงš. First, the Interface MIB objects for an ONU in working mode:

+----------------------+--------------------------------+
| Interface MIB object | Value                          |
+----------------------+--------------------------------+
| ifIndex              | 1                              |
| ifDescr              | "interface description"        |
| ifType               | ethernetCsmacd (6) 1000base-Px |
| ifMtu                | MTU size (1522)                |
| ifSpeed              | 1000000000                     |
| ifPhysAddress        | ONU_MAC_Address                |
| ifAdminStatus        | up                             |
| ifOperStatus         | Up                             |
| ifLastChange         | ONUup_time                     |
| ifInOctets           | ONU_octets_number              |
| ifInUcastPkts        | ONU_unicast_frame_number       |
| ifInNUcastPkts       | ONU_non_unicast_frame_number   |
| ifInDiscards         | ONU_discard_frame_number       |
| ifInErrors           | ONU_error_frame_number         |
| ifInUnknownProtos    | ONU_unknown_frame_number       |
| ifOutOctets          | ONU_octets_number              |
| ifOutUcastPkts       | ONU_unicast_frame_number       |
| ifOutNUcastPkts      | ONU_non_unicast_frame_number   |
| ifOutDiscards        | ONU_discard_frame_number       |
| ifOutErrors          | ONU_error_frame_number         |
| ifOutQLen            | ONU_queue_frame_number         |
+----------------------+--------------------------------+

Table 5

ONU_MAC_Address is the MAC address of the ONU EPON interface ๐Ÿ“.

Next up, the Interface MIB objects for the ONU interface itself ๐ŸŒˆ:

+----------------------+--------------------------------+
| Interface MIB object | Value                          |
+----------------------+--------------------------------+
| ifIndex              | 100                            |
| ifDescr              | "interface description"        |
| ifType               | ethernetCsmacd (6) 1000base-Px |
| ifMtu                | MTU size (1522)                |
| ifSpeed              | 1000000000                     |
| ifPhysAddress        | ONU_MAC_Address                |
| ifAdminStatus        | up                             |
| ifOperStatus         | Up                             |
| ifLastChange         | up_time                        |
| ifInOctets           | ONU1_octets_number             |
| ifInUcastPkts        | ONU1_unicast_frame_number      |
| ifInNUcastPkts       | ONU1_non_unicast_frame_number  |
| ifInDiscards         | ONU1_discard_frame_number      |
| ifInErrors           | ONU1_error_frame_number        |
| ifInUnknownProtos    | ONU1_unknown_frame_number      |
| ifOutOctets          | ONU1_octets_number             |
| ifOutUcastPkts       | ONU1_unicast_frame_number      |
| ifOutNUcastPkts      | ONU1_non_unicast_frame_number  |
| ifOutDiscards        | ONU1_discard_frame_number      |
| ifOutErrors          | ONU1_error_frame_number        |
| ifOutQLen            | ONU1_queue_frame_number        |
+----------------------+--------------------------------+

Table 6

ONU_MAC_Address is the MAC address of the ONU EPON interface ๐Ÿซถ.

Here's what gets set in the ifStack and ifInvStack tables for this example ๐Ÿ”ฅ.

ifStackTable:

ifStackHigherLayer=100, ifStackLowerLayer=1 - map between the
physical interface and the ONU

ifInvStackTable:

ifStackLowerLayer=1, ifStackHigherLayer=100,- map between the ONU and
the physical interface

Last but not least, the Interface MIB objects for the OLT interface ๐Ÿ‘‘:

+----------------------+--------------------------------+
| Interface MIB object | Value                          |
+----------------------+--------------------------------+
| ifIndex              | 2                              |
| ifDescr              | "interface description"        |
| ifType               | ethernetCsmacd (6) 1000base-Px |
| ifMtu                | MTU size (1522)                |
| ifSpeed              | 1000000000                     |
| ifPhysAddress        | OLT_MAC_Address                |
| ifAdminStatus        | up                             |
| ifOperStatus         | Up                             |
| ifLastChange         | OLTup_time                     |
| ifInOctets           | OLT_octets_number              |
| ifInUcastPkts        | OLT_unicast_frame_number       |
| ifInNUcastPkts       | OLT_non_unicast_frame_number   |
| ifInDiscards         | OLT_discard_frame_number       |
| ifInErrors           | OLT_error_frame_number         |
| ifInUnknownProtos    | OLT_unknown_frame_number       |
| ifOutOctets          | OLT_octets_number              |
| ifOutUcastPkts       | OLT_unicast_frame_number       |
| ifOutNUcastPkts      | OLT_non_unicast_frame_number   |
| ifOutDiscards        | OLT_discard_frame_number       |
| ifOutErrors          | OLT_error_frame_number         |
| ifOutQLen            | OLT_queue_frame_number         |
+----------------------+--------------------------------+

Table 7

OLT_MAC_Address is the MAC address of the OLT EPON interface โœจ.

Then there's the OLT interface's Interface MIB objects, tied to the virtual link interfaces ๐Ÿฆ‹. This one's a big table, so buckle up ๐Ÿงš:

+----------+-------------+-------------+-------------+--------------+
| Interfac | Value       | Value       | Value       | Value        |
| eMIB     |             |             |             |              |
|  object  |             |             |             |              |
+----------+-------------+-------------+-------------+--------------+
| ifIndex  | 200001      | 200002      | 200003      | 265535       |
| ifDescr  | "interface  | "interface  | "interface  | "interface   |
|          | description | description | description | description" |
|          | "           | "           | "           |              |
| ifType   | ethernetCsm | ethernetCsm | ethernetCsm | ethernetCsma |
|          | acd (6)     | acd (6)     | acd (6)     | cd (6)       |
| ifMtu    | MTUsize(152 | MTUsize(152 | MTUsize(152 | MTUsize(1522 |
|          | 2)          | 2)          | 2)          | )            |
| ifSpeed  | 1000000000  | 1000000000  | 1000000000  | 1000000000   |
| ifPhysAd | OLT_MAC_Add | OLT_MAC_Add | OLT_MAC_Add | OLT_MAC_Addr |
| dress    | ress        | ress        | ress        | ess          |
| ifAdminS | up          | up          | up          | up           |
| tatus    |             |             |             |              |
| ifOperSt | Up          | Up          | Up          | Up           |
| atus     |             |             |             |              |
| ifLastCh | ONU1_up_tim | ONU2_up_tim | ONU3_up_tim | up_time      |
| ange     | e           | e           | e           |              |
| ifInOcte | ONU1_octets | ONU2_octets | ONU3_octets | BRCT_octets_ |
| ts       | _number     | _number     | _number     | number       |
| ifInUcas | ONU1_unic_f | ONU2_unic_f | ONU3_unic_f | BRCT_unic_fr |
| tPkts    | rame_num    | rame_num    | rame_num    | ame_num      |
| ifInNUca | ONU1_non_un | ONU2_non_un | ONU3_non_un | BRCT_non_uni |
| stPkts   | ic_frame_nu | ic_frame_nu | ic_frame_nu | c_frame_num  |
|          | m           | m           | m           |              |
| ifInDisc | ONU1_disc_f | ONU2_disc_f | ONU3_disc_f | BRCT_disc_fr |
| ards     | rame_num    | rame_num    | rame_num    | ame_numr     |
| ifInErro | ONU1_err_fr | ONU2_err_fr | ONU3_err_fr | BRCT_err_fra |
| rs       | ame_num     | ame_num     | ame_num     | me_num       |
| ifInUnkn | ONU1_unknw_ | ONU2_unknw_ | ONU3_unknw_ | BRCT_unknw_f |
| ownProto | frame_num   | frame_num   | frame_num   | rame_num     |
| s        |             |             |             |              |
| ifOutOct | ONU1_octets | ONU2_octets | ONU3_octets | BRCT_octets_ |
| ets      | _number     | _number     | _number     | number       |
| ifOutUca | ONU1_unic_f | ONU2_unic_f | ONU3_unic_f | BRCT_unic_fr |
| stPkts   | rame_num    | rame_num    | rame_num    | ame_num      |
| ifOutNUc | ONU1_non_un | ONU2_non_un | ONU3_non_un | BRCT_non_uni |
| astPkts  | ic_frame_nu | ic_frame_nu | ic_frame_nu | c_frame_num  |
|          | m           | m           | m           |              |
+----------+-------------+-------------+-------------+--------------+
| Interfac | Value       | Value       | Value       | Value        |
| eMIB     |             |             |             |              |
|  object  |             |             |             |              |
+----------+-------------+-------------+-------------+--------------+
| ifOutDis | ONU1_disc_f | ONU2_disc_f | ONU3_disc_f | BRCT_disc_fr |
| cards    | rame_num    | rame_num    | rame_num    | ame_num      |
| ifOutErr | ONU1_err_fr | ONU2_err_fr | ONU3_err_fr | BRCT_err_fra |
| ors      | ame_num     | ame_num     | ame_num     | me_num       |
| ifOutQLe | ONU1_queue_ | ONU2_queue_ | ONU3_queue_ | BRCt_queue_f |
| n        | frame_num   | frame_num   | frame_num   | rame_num     |
+----------+-------------+-------------+-------------+--------------+

Table 8

OLT_MAC_Address is the MAC address of the OLT EPON interface ๐Ÿ’œ.

Finally, the values that get set in the ifStack and ifInvStack tables for this example ๐ŸŒธ:

ifStackTable:

ifStackHigherLayer=265535, ifStackLowerLayer=2 - map between the OLT
physical interface and its broadcast virtual interface

ifStackHigherLayer=200001, ifStackLowerLayer=2 - map between the OLT
physical interface and its virtual interface of the 1st ONU

ifStackHigherLayer=200002, ifStackLowerLayer=2 - map between the OLT
physical interface and its virtual interface of the 2nd ONU
ifStackHigherLayer=200003, ifStackLowerLayer=2 - map between the OLT
physical interface and its virtual interface of the 3rd ONU

ifInvStackTable:

ifStackLowerLayer=2, ifStackHigherLayer=265535, - map between the
broadcast interface of the OLT and the OLT physical interface

ifStackLowerLayer=2, ifStackHigherLayer=200001 - map between the OLT
virtual interface of the 1st ONU and the OLT physical interface

ifStackLowerLayer=2, ifStackHigherLayer=200002 - map between the OLT
virtual interface of the 2nd ONU and the OLT physical interface

ifStackLowerLayer=2, ifStackHigherLayer=200003 - map between the OLT
virtual interface of the 3rd ONU and the OLT physical interface

okay so the rows for the ONU interface, the OLT interface, and the OLT broadcast interface all get created during initialization ๐Ÿงš

A row for a virtual link shows up when that link gets established, which is when an ONU registers ๐Ÿฆ‹ And when the ONU deregisters and the virtual link is deleted, its row goes too ๐Ÿซถ

The EPON MIB also extends the Interface MIB with its own set of counters that are specific to the EPON interface ๐Ÿ’œ It handles those counters the same way the interface starts or stops. The interface MIB doc explains how counters can act when an interface gets re-initialized, using the ifCounterDiscontinuityTime indicator to flag that the counters have a discontinuity. For the full details, check out [RFC2863], Section 3.1.5, page 11 โœจ The EPON counters should be handled in a similar manner, so bestie, keep them consistent ๐Ÿ’…

4.2. Relation to the IEEE 802.3 MAU MIBs

The MAU types for the EPON Interface live in the amended MAU MIB document ๐ŸŒธ This doc assumes you're implementing the MAU MIB for that purpose and doesn't repeat the EPON MAU types. So implementing this module MUST require implementation of the MAU-MIB module [RFC4836]. No skipping it, periodt ๐Ÿ™ˆ

The ifMAU tables for EPON work a lot like what we covered in the earlier section for the Interface and Ether-like interface MIBs โœจ There's a single row for the ONU in the ifMauTable. Then the OLT gets a row for each virtual link (N+1 rows total), and each one has its own ifMauIfIndex value ๐Ÿ“

Same as above, the rows for the ONU interface, the OLT interface, and the OLT broadcast interface are created during initialization ๐Ÿงš

Virtual link rows get created when the link is established (that's when an ONU registers) and deleted when the link is deleted (when an ONU deregisters) ๐Ÿ’–

4.3. Relation to the EFM OAM MIB

EPON interfaces are aimed at optical access networks, and they'll most probably come with the OAM section of [802.3ah] implemented too ๐ŸŒˆ So the EFM OAM MIB module [RFC4878] MAY be implemented when this MIB module is implemented, and it defines managed objects for the OAM layer that complement the EFM EPON MIB module โœจ OAM is defined for a point-to-point link, so here it runs on the virtual links that are defined for the P2MP network. That means there's an instance for each Logical Link Identifier (LLID) of the EPON ๐Ÿฆ‹ And for this purpose, the ifIndex of the virtual link gets used as the ifIndex in the tables of the OAM MIB module ๐Ÿ‘‘

4.4. Relation to the Bridge MIB

It's very probable that an EPON OLT will implement a bridging function above the EPON interface layer, bridging between the EPON users and the network ๐ŸŒธ Bridge functionality is specified in [802.1d]. In this setup, the virtual ports of the EPON correspond to the virtual bridge ports, and there's a direct mapping between the bridge ports and the LLIDs (the virtual EPON channels) ๐Ÿ’…

So the bridge MIB modules ([RFC4188] and [RFC1525]) MAY be implemented when the EFM EPON MIB module is implemented for an EPON OLT, which defines managed objects for the bridge layer ๐ŸŽ€

The values of dot1dBasePortIfIndex would correspond to the ifIndex of the virtual port (1 for LLID1, 2 for LLID2, etc.) โœจ

The broadcast virtual EPON interface of the OLT has no direct mapping to a virtual bridge port, since it isn't port specific and is used for broadcast traffic ๐Ÿซถ

5. Mapping of IEEE 802.3ah Managed Objects

This section is the mapping between the managed objects defined in this document and the attributes defined in [802.3ah], clause 30 ๐Ÿ“ The tables are split up into relevant groups, so you can find your way around easily ๐Ÿ—บ๏ธ

                    oMPCP managed object class (30.3.5)

   +----------------------------+-------------------------+------------+
   | dot3EPON MIB module object | IEEE802.3ah attribute   | Reference  |
   +----------------------------+-------------------------+------------+
   | ifIndex                    | aMPCPID                 | 30.3.5.1.1 |
   | dot3MpcpOperStatus         | aMPCPAdminState         | 30.3.5.1.2 |
   | dot3MpcpMode               | aMPCPMode               | 30.3.5.1.3 |
   | dot3MpcpLinkID             | aMPCPLinkID             | 30.3.5.1.4 |
   | dot3MpcpRemoteMACAddress   | aMPCPRemoteMACAddress   | 30.3.5.1.5 |
   | dot3MpcpRegistrationState  | aMPCPRegistrationState  | 30.3.5.1.6 |
   | dot3MpcpMACCtrlFramesTrans | aMPCPMACCtrlFramesTrans | 30.3.5.1.7 |
   | mitted                     | mitted                  |            |
   | dot3MpcpMACCtrlFramesRecei | aMPCPMACCtrlFramesRecei | 30.3.5.1.8 |
   | ved                        | ved                     |            |
   | dot3MpcpTxGate             | aMPCPTxGate             | 30.3.5.1.9 |
   | dot3MpcpTxRegAck           | aMPCPTxRegAck           | 30.3.5.1.1 |
   |                            |                         | 0          |
   | dot3MpcpTxRegister         | aMPCPTxRegister         | 30.3.5.1.1 |
   |                            |                         | 1          |
   | dot3MpcpTxRegRequest       | aMPCPTxRegRequest       | 30.3.5.1.1 |
   |                            |                         | 2          |
   | dot3MpcpTxReport           | aMPCPTxReport           | 30.3.5.1.1 |
   |                            |                         | 3          |
   | dot3MpcpRxGate             | aMPCPRxGate             | 30.3.5.1.1 |
   |                            |                         | 4          |
   | dot3MpcpRxRegAck           | aMPCPRxRegAck           | 30.3.5.1.1 |
   |                            |                         | 5          |
   | dot3MpcpRxRegister         | aMPCPRxRegister         | 30.3.5.1.1 |
   |                            |                         | 6          |
   | dot3MpcpRxRegRequest       | aMPCPRxRegRequest       | 30.3.5.1.1 |
   |                            |                         | 7          |
   | dot3MpcpRxReport           | aMPCPRxReport           | 30.3.5.1.1 |
   |                            |                         | 8          |
   | dot3MpcpTransmitElapsed    | aMPCPTransmitElapsed    | 30.3.5.1.1 |
   |                            |                         | 9          |
   | dot3MpcpReceiveElapsed     | aMPCPReceiveElapsed     | 30.3.5.1.2 |
   |                            |                         | 0          |
   | dot3MpcpRoundTripTime      | aMPCPRoundTripTime      | 30.3.5.1.2 |
   |                            |                         | 1          |
   | dot3MpcpDiscoveryWindowsSe | aMPCPDiscoveryWindowsSe | 30.3.5.1.2 |
   | nt                         | nt                      | 2          |
   +----------------------------+-------------------------+------------+
   | dot3EPON MIB module object | IEEE802.3ah attribute   | Reference  |
   +----------------------------+-------------------------+------------+
   | dot3MpcpDiscoveryTimeout   | aMPCPDiscoveryTimeout   | 30.3.5.1.2 |
   |                            |                         | 3          |
   | dot3MpcpMaximumPendingGran | aMPCPMaximumPendingGran | 30.3.5.1.2 |
   | ts                         | ts                      | 4          |
   | dot3MpcpAdminState         | aMPCPAdminControl       | 30.3.5.2.1 |
   | dot3MpcpSyncTime           | SyncTime                | 64.3.3.2   |
   +----------------------------+-------------------------+------------+

                                  Table 9

                oOMPEmulation managed object class (30.3.7)

   +-------------------------------------+-----------------+-----------+
   | dot3EPON MIB module object          | IEEE802.3ah     | Reference |
   |                                     | attribute       |           |
   +-------------------------------------+-----------------+-----------+
   | ifIndex                             | aOMPEmulationID | 30.3.7.1. |
   |                                     |                 | 1         |
   | dot3OmpEmulationType                | aOMPEmulationTy | 30.3.7.1. |
   |                                     | pe              | 2         |
   | dot3OmpEmulationSLDErrors           | aSLDErrors      | 30.3.7.1. |
   |                                     |                 | 3         |
   | dot3OmpEmulationCRC8Errors          | aCRC8Errors     | 30.3.7.1. |
   |                                     |                 | 4         |
   | dot3OmpEmulationGoodLLID            | aGoodLLID       | 30.3.7.1. |
   |                                     |                 | 5         |
   | dot3OmpEmulationOnuPonCastLLID      | aONUPONcastLLID | 30.3.7.1. |
   |                                     |                 | 6         |
   | dot3OmpEmulationOltPonCastLLID      | aOLTPONcastLLID | 30.3.7.1. |
   |                                     |                 | 7         |
   | dot3OmpEmulationBadLLID             | aBadLLID        | 30.3.7.1. |
   |                                     |                 | 8         |
   | dot3OmpEmulationBroadcastBitNotOnuL |                 |           |
   | Lid                                 |                 |           |
   | dot3OmpEmulationOnuLLIDNotBroadcast |                 |           |
   | dot3OmpEmulationBroadcastBitPlusOnu |                 |           |
   | Llid                                |                 |           |
   | dot3OmpEmulationNotBroadcastBitNotO |                 |           |
   | nuLlid                              |                 |           |
   +-------------------------------------+-----------------+-----------+

                                 Table 10

                    oMAU managed object class (30.5.1)

   +--------------------------------+---------------------+------------+
   | dot3EPON MIB module object     | IEEE802.3ah         | Reference  |
   |                                | attribute           |            |
   +--------------------------------+---------------------+------------+
   | dot3EponFecPCSCodingViolation  | aPCSCodingViolation | 30.5.1.1.1 |
   |                                |                     | 2          |
   | dot3EponFecAbility             | aFECAbility         | 30.5.1.1.1 |
   |                                |                     | 3          |
   | dot3EponFecMode                | aFECmode            | 30.5.1.1.1 |
   |                                |                     | 4          |
   | dot3EponFecCorrectedBlocks     | aFECCorrectedBlocks | 30.5.1.1.1 |
   |                                |                     | 5          |
   | dot3EponFecUncorrectableBlocks | aFECUncorrectableBl | 30.5.1.1.1 |
   |                                | ocks                | 6          |
   | dot3EponFecBufferHeadCodingVio |                     |            |
   | lation                         |                     |            |
   +--------------------------------+---------------------+------------+

                                 Table 11

6. Definitions - The DOT3 EPON MIB Module โœจ

Okay bestie, the MIB module itself is up next ๐Ÿงš Here's the header, imports, and the first chunk of the module identity, which tells you who wrote it, what it's for, and what the abbreviations mean ๐Ÿ’…

DOT3-EPON-MIB DEFINITIONS ::= BEGIN

     IMPORTS
         MODULE-IDENTITY, mib-2, OBJECT-TYPE, Counter32,
         Integer32, Unsigned32, Counter64
             FROM SNMPv2-SMI
         TruthValue, MacAddress
             FROM SNMPv2-TC
         ifIndex
             FROM IF-MIB
         MODULE-COMPLIANCE, OBJECT-GROUP
             FROM SNMPv2-CONF
         ;

dot3EponMIB MODULE-IDENTITY
    LAST-UPDATED "200703290000Z"  -- March 29, 2007
    ORGANIZATION "IETF Ethernet Interfaces and Hub MIB Working
                 Group"
    CONTACT-INFO
                 "WG charter:
              http://www.ietf.org/html.charters/hubmib-charter.html
                  Mailing Lists:
                    General Discussion: hubmib@ietf.org
                    To Subscribe: hubmib-request@ietf.org
                    In Body: subscribe your_email_address
                    Chair: Bert Wijnen
                    Postal: Lucent Technologies
                            Schagen 33
                            3461 GL Linschoten
                            Netherlands
                    Tel: +31-348-407-775
                    E-mail: bwijnen@lucent.com

                    Editor: Lior Khermosh
                    Postal: PMC-SIERRA
                            Kohav Hertzelia bldg,
                            4 Hasadnaot St.
                            Hertzliya Pituach 46120,
                            ISRAEL
                            P.O.Box 2089 Hertzliya Pituach 46120 Israel
                    Tel: +972-9-9628000 Ext: 302
                    E-mail: lior_khermosh@pmc-sierra.com"
    DESCRIPTION
            "The objects in this MIB module are used to manage the
             Ethernet in the First Mile (EFM) Ethernet Passive Optical
             Network (EPON) Interfaces as defined in IEEE P802.3ah
             clauses 60, 64, and 65.
         The following reference is used throughout this MIB module:
           [802.3ah] refers to:
             Information technology - Telecommunications and
             information exchange between systems - Local and
             metropolitan area networks - Specific requirements -
             Part 3: Carrier sense multiple access with collision
             detection (CSMA/CD) access method and physical layer
             specifications - Media Access Control Parameters,
             Physical Layers and Management Parameters for subscriber
             access networks.  IEEE Std 802.3ah-2004, October 2004.

          Of particular interest are clause 64 (Multi-Point Control
          Protocol - MPCP), clause 65 (Point-to-Multipoint
          Reconciliation Sublayer - P2MP RS), clause 60 (Ethernet
          Passive Optical Network Physical Medium Dependent - EPON
          PMDs), clause 30, 'Management', and clause 45, 'Management
          Data Input/Output (MDIO) Interface'.

          Copyright (C) The IETF Trust (2007).  This version
          of this MIB module is part of 4837; see the RFC itself for
          full legal notices.

          Key abbreviations:
            BER - Bit Error Rate
            BW - bandwidth
            CRC - Cyclic Redundancy Check
            EFM - Ethernet First Mile
            EPON - Ethernet Passive Optical Network
            FEC  - Forward Error Correction
            LLID - Logical Link Identifier
            MAC - Media Access Control
            Mbps - Megabit per second
            MDIO - Management Data Input/Output
            MPCP - Multi-Point Control Protocol
            OLT - Optical Line Terminal (Server unit of the EPON)
            OMP - Optical Multi-Point
            ONU - Optical Network Unit (Client unit of the EPON)
            P2MP - Point-to-Multipoint
            PHY - Physical Layer
            PMD - Physical Medium Dependent
            PON - Passive Optical Network
            RTT - Round Trip Time
            SLD - Start of LLID Delimiter
            TQ - Time Quanta
          "

    REVISION    "200703290000Z"  -- March 29, 2007
    DESCRIPTION "Initial version, published as RFC 4837."

    ::= { mib-2 155 }

Next up are the object identifier roots: the Objects branch, the Conformance branch, and the MPCP objects branch, which is where all the MPCP stuff lives ๐Ÿฆ‹

dot3EponObjects OBJECT IDENTIFIER ::= { dot3EponMIB 1}

dot3EponConformance OBJECT IDENTIFIER ::= { dot3EponMIB 2}

-- MPCP MIB modules definitions ([802.3ah], clause 30.3.5)

dot3EponMpcpObjects
     OBJECT IDENTIFIER ::= { dot3EponObjects 1 }

dot3MpcpControlTable OBJECT-TYPE
    SYNTAX  SEQUENCE OF Dot3MpcpControlEntry
    MAX-ACCESS  not-accessible
    STATUS  current
    DESCRIPTION
            "A Table of dot3 Multi-Point Control Protocol (MPCP)
             MIB objects.  The entries in the table are control and
             status objects of the MPCP.
             Each object has a row for every virtual link denoted by
             the corresponding ifIndex.
             The LLID field, as defined in the [802.3ah], is a 2-byte
             register (15-bit field and a broadcast bit) limiting the
             number of virtual links to 32768.  Typically the number
             of expected virtual links in a PON is like the number of
             ONUs, which is 32-64, plus an additional entry for
             broadcast LLID (with a value of 0xffff)."
    ::= { dot3EponMpcpObjects 1 }

dot3MpcpControlEntry OBJECT-TYPE
    SYNTAX  Dot3MpcpControlEntry
    MAX-ACCESS  not-accessible
    STATUS  current
    DESCRIPTION
            "An entry in the dot3 MPCP Control table.
             Rows exist for an OLT interface and an ONU interface.
             A row in the table is denoted by the ifIndex of the link
             and it is created when the ifIndex is created.
             The rows in the table for an ONU interface are created
             at system initialization.
             The row in the table corresponding to the OLT ifIndex
             and the row corresponding to the broadcast virtual link
             are created at system initialization.
             A row in the table corresponding to the ifIndex of a
             virtual links is created when a virtual link is
             established (ONU registers) and deleted when the virtual
             link is deleted (ONU deregisters)."
    INDEX  { ifIndex }
    ::= { dot3MpcpControlTable 1}

Dot3MpcpControlEntry ::=
    SEQUENCE {
        dot3MpcpOperStatus                   TruthValue,
        dot3MpcpAdminState                   TruthValue,
        dot3MpcpMode                         INTEGER,
        dot3MpcpSyncTime                     Unsigned32,
        dot3MpcpLinkID                       Unsigned32,
        dot3MpcpRemoteMACAddress             MacAddress,
        dot3MpcpRegistrationState            INTEGER,
        dot3MpcpTransmitElapsed              Unsigned32,
        dot3MpcpReceiveElapsed               Unsigned32,
        dot3MpcpRoundTripTime                Unsigned32,
        dot3MpcpMaximumPendingGrants         Unsigned32
    }

The next bit is the per-object stuff for the control table: the operational status, admin state, mode, sync time, and link ID. Each one has its own little description, so read them all, they're important โœจ

dot3MpcpOperStatus OBJECT-TYPE
    SYNTAX  TruthValue
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "This object reflects the operational state of the
             Multi-Point MAC Control sublayer as defined in
             [802.3ah], clause 64.  When the value is true(1), the
             interface will act as if the Multi-Point Control Protocol
             is enabled.  When the value is false(2), the interface
             will act as if the Multi-Point Control Protocol is
             disabled.  The operational state can be changed using the
             dot3MpcpAdminState object.
             This object is applicable for an OLT, with the same
             value for all virtual interfaces, and for an ONU."
    REFERENCE   "[802.3ah], 30.3.5.1.2."
    ::= { dot3MpcpControlEntry 1 }

dot3MpcpAdminState OBJECT-TYPE
    SYNTAX  TruthValue
    MAX-ACCESS  read-write
    STATUS  current
    DESCRIPTION
            "This object is used to define the admin state of the
             Multi-Point MAC Control sublayer, as defined in
             [802.3ah], clause 64, and to reflect its state.
             When selecting the value as true(1), the Multi-Point
             Control Protocol of the interface is enabled.
             When selecting the value as false(2), the Multi-Point
             Control Protocol of the interface is disabled.
             This object reflects the administrative state of the
             Multi-Point Control Protocol of the interface.
             The write operation is not restricted in this document
             and can be done at any time.  Changing
             dot3MpcpAdminState state can lead to disabling the
             Multi-Point Control Protocol on the respective interface,
             leading to the interruption of service for the users
             connected to the respective EPON interface.
             This object is applicable for an OLT, with the same
             value for all virtual interfaces, and for an ONU."
    REFERENCE   "[802.3ah], 30.3.5.2.1."
    DEFVAL { false }
    ::= { dot3MpcpControlEntry 2 }

dot3MpcpMode  OBJECT-TYPE
    SYNTAX  INTEGER {
            olt(1),
            onu(2)
    }
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "This object is used to identify the operational
             state of the Multi-Point MAC Control sublayer as
             defined in [802.3ah], clause 64.  Reading olt(1) for an
             OLT (server) mode and onu(2) for an ONU (client) mode.
             This object is used to identify the operational mode
             for the MPCP tables.
             This object is applicable for an OLT, with the same
             value for all virtual interfaces, and for an ONU."
    REFERENCE   "[802.3ah], 30.3.5.1.3."
    DEFVAL { olt }
    ::= { dot3MpcpControlEntry 3 }

dot3MpcpSyncTime OBJECT-TYPE
    SYNTAX  Unsigned32
    UNITS       "TQ (16nsec)"
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "An object that reports the 'sync lock time' of the
             OLT receiver in increments of Time Quanta (TQ)-16ns
             as defined in [802.3ah], clauses 60, 64, and 65.  The
             value returned shall be (sync lock time ns)/16.  If
             this value exceeds (2^32-1), the value (2^32-1) shall
             be returned.  This object is applicable for an OLT,
             with the same value for all virtual interfaces, and
             for an ONU."
    REFERENCE   "[802.3ah], 64.3.3.2."
   ::= { dot3MpcpControlEntry 4 }

dot3MpcpLinkID OBJECT-TYPE
    SYNTAX  Unsigned32
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "An object that identifies the Logical Link
             Identifier (LLID) associated with the MAC of the virtual
             link as specified in [802.3ah], clause 65.1.3.2.2.
             This object is applicable for an OLT and an ONU.  At the
             OLT, it has a distinct value for each virtual interface.
             The ONU and the corresponding virtual MAC of the OLT,
             for the same virtual link, have the same value.
             Value is assigned when the ONU registers.
             Value is freed when the ONU deregisters."
    REFERENCE   "[802.3ah], 30.3.5.1.4."
    ::= { dot3MpcpControlEntry 5 }

okay bestie, we're picking up right where we left off ๐Ÿ’– Here's the remote MAC address object, which tells you who's on the other end of the link ๐Ÿฆ‹

dot3MpcpRemoteMACAddress OBJECT-TYPE
    SYNTAX  MacAddress
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION

            "An object that identifies the source_address
             parameter of the last MPCPDUs passed to the MAC Control.
             This value is updated on reception of a valid frame with
             1) a destination Field equal to the reserved multicast
             address for MAC Control as specified in [802.3], Annex
             31A; 2) the lengthOrType field value equal to the reserved
             Type for MAC Control as specified in [802.3], Annex
             31A; 3) an MPCP subtype value equal to the subtype
             reserved for MPCP as specified in [802.3ah], Annex 31A.
             This object is applicable for an OLT and an ONU.  At the
             OLT, it has a distinct value for each virtual interface.
             The value reflects the MAC address of the remote entity
             and therefore the OLT holds a value for each LLID, which
             is the MAC address of the ONU; the ONU has a single
             value that is the OLT MAC address."
    REFERENCE   "[802.3ah], 30.3.5.1.5."
    ::= { dot3MpcpControlEntry 6 }

ngl this one is a little bit of a checklist ๐Ÿ“‹ The value only updates when a frame passes three checks: the destination is the reserved multicast address for MAC Control, the lengthOrType field matches the reserved MAC Control Type, and the MPCP subtype is the one reserved for MPCP. The OLT keeps one of these per LLID, and each ONU just holds the OLT's MAC. ๐Ÿซถ

dot3MpcpRegistrationState OBJECT-TYPE
    SYNTAX  INTEGER {
            unregistered(1),
            registering(2),
            registered(3)
    }
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "An object that identifies the registration state
             of the Multi-Point MAC Control sublayer as defined in
             [802.3ah], clause 64.  When this object has the
             enumeration unregistered(1), the interface is
             unregistered and may be used for registering a link
             partner.  When this object has the enumeration
             registering(2), the interface is in the process of
             registering a link-partner.  When this object has the
             enumeration registered(3), the interface has an
             established link-partner.
             This object is applicable for an OLT and an ONU.  At the
             OLT, it has a distinct value for each virtual interface."
    REFERENCE   "[802.3ah], 30.3.5.1.6."
    ::= { dot3MpcpControlEntry 7 }

the registration state is giving friend-making ๐Ÿฅ‚ It has three vibes: unregistered(1) means the interface is free and can take a new link partner, registering(2) means a partner is currently being signed up, and registered(3) means there's already a partner locked in ๐Ÿ’…

dot3MpcpTransmitElapsed OBJECT-TYPE
    SYNTAX  Unsigned32
    UNITS       "TQ (16nsec)"
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION

            "An object that reports the interval from the last
             MPCP frame transmission in increments of Time Quanta
             (TQ)-16ns.  The value returned shall be (interval from
             last MPCP frame transmission in ns)/16.  If this value
             exceeds (2^32-1), the value (2^32-1) shall be returned.
             This object is applicable for an OLT and an ONU.  At the
             OLT, it has a distinct value for each virtual interface."
    REFERENCE   "[802.3ah], 30.3.5.1.19."
    ::= { dot3MpcpControlEntry 8 }

dot3MpcpReceiveElapsed OBJECT-TYPE
    SYNTAX  Unsigned32
    UNITS       "TQ (16nsec)"
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "An object that reports the interval from last MPCP frame
             reception in increments of Time Quanta (TQ)-16ns.  The
             value returned shall be (interval from last MPCP frame
             reception in ns)/16.  If this value exceeds (2^32-1), the
             value (2^32-1) shall be returned.
             This object is applicable for an OLT and an ONU.  At the
             OLT, it has a distinct value for each virtual interface."
    REFERENCE   "[802.3ah], 30.3.5.1.20."
    ::= { dot3MpcpControlEntry 9 }

the timers are giving stopwatch energy โฑ๏ธ Both of these count time in Time Quanta, where one TQ is 16ns. The transmit one measures time since the last MPCP frame went out, and the receive one measures time since the last MPCP frame came in. If the number gets too big to fit, it just caps at 2^32-1. no overflow drama here, it's literally just maxed out ๐Ÿ‘‘

dot3MpcpRoundTripTime OBJECT-TYPE
    SYNTAX  Unsigned32 (0..'ffff'h)
    UNITS       "TQ (16nsec)"
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "An object that reports the MPCP round trip time in
             increments of Time Quanta (TQ)-16ns.  The value returned
             shall be (round trip time in ns)/16.  If this value
             exceeds (2^16-1), the value (2^16-1) shall be returned.
             This object is applicable for an OLT and an ONU.  At the
             OLT, it has a distinct value for each virtual interface."
    REFERENCE   "[802.3ah], 30.3.5.1.21."
    ::= { dot3MpcpControlEntry 10 }

dot3MpcpMaximumPendingGrants OBJECT-TYPE
    SYNTAX  Unsigned32 (0..255)
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "An object that reports the maximum number of grants
             that an ONU can store for handling.  The maximum number
             of grants that an ONU can store for handling has a
             range of 0 to 255.
             This object is applicable for an OLT and an ONU.  At the
             OLT, it has a distinct value for each virtual interface.
             At the OLT, the value should be zero."
    REFERENCE   "[802.3ah], 30.3.5.1.24."
    ::= { dot3MpcpControlEntry 11 }

round trip time is so main character ๐ŸŽฌ This one caps at 2^16-1 instead, and the pending grants object tops out at 255 ๐ŸŒธ The grants one is an ONU thing, so the OLT is supposed to be at zero there ๐Ÿ™ˆ

dot3MpcpStatTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF Dot3MpcpStatEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
            "This table defines the list of statistics counters of
             an interface implementing the [802.3ah], clause 64 MPCP.
             Each object has a row for every virtual link denoted by
             the corresponding ifIndex.
             The LLID field, as defined in the [802.3ah], is a 2-byte
             register (15-bit field and a broadcast bit) limiting the
             number of virtual links to 32768.  Typically the number
             of expected virtual links in a PON is like the number of
             ONUs, which is 32-64, plus an additional entry for
             broadcast LLID (with a value of 0xffff)."
::= { dot3EponMpcpObjects 2 }

dot3MpcpStatEntry OBJECT-TYPE
    SYNTAX     Dot3MpcpStatEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
            "An entry in the table of statistics counters of the
             [802.3ah], clause 64, MPCP interface.
             Rows exist for an OLT interface and an ONU interface.
             A row in the table is denoted by the ifIndex of the link
             and it is created when the ifIndex is created.
             The rows in the table for an ONU interface are created
             at system initialization.
             The row in the table corresponding to the OLT ifIndex
             and the row corresponding to the broadcast virtual link
             are created at system initialization.
             A row in the table corresponding to the ifIndex of a
             virtual link is created when a virtual link is
             established (ONU registers) and deleted when the virtual
             link is deleted (ONU deregisters)."
    INDEX  { ifIndex}
    ::= { dot3MpcpStatTable 1 }

Dot3MpcpStatEntry ::=

    SEQUENCE {
            dot3MpcpMACCtrlFramesTransmitted       Counter64,
            dot3MpcpMACCtrlFramesReceived          Counter64,
            dot3MpcpDiscoveryWindowsSent           Counter32,
            dot3MpcpDiscoveryTimeout               Counter32,
            dot3MpcpTxRegRequest                   Counter64,
            dot3MpcpRxRegRequest                   Counter64,
            dot3MpcpTxRegAck                       Counter64,
            dot3MpcpRxRegAck                       Counter64,
            dot3MpcpTxReport                       Counter64,
            dot3MpcpRxReport                       Counter64,
            dot3MpcpTxGate                         Counter64,
            dot3MpcpRxGate                         Counter64,
            dot3MpcpTxRegister                     Counter64,
            dot3MpcpRxRegister                     Counter64
    }

the stats table is literally a whole diary ๐Ÿ““ There's a row for every virtual link, and the LLID is a 2-byte register, so up to 32768 virtual links, plus a broadcast one at 0xffff. a PON usually has around 32-64 ONUs, so that's the vibe you're planning for ๐Ÿงš The entry rows show up at system initialization for the ONU side, the OLT side, and the broadcast link, and any other link's row only exists while it's registered. ok the ifIndex row lifecycle is so iconic ๐ŸŒˆโœจ

dot3MpcpMACCtrlFramesTransmitted OBJECT-TYPE
    SYNTAX  Counter64
    UNITS      "frames"
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "A count of MPCP frames passed to the MAC sublayer for
             transmission.  This counter is incremented when a
             MA_CONTROL.request service primitive is generated within
             the MAC control sublayer with an opcode indicating an
             MPCP frame.
             This object is applicable for an OLT and an ONU.  At the
             OLT it has a distinct value for each virtual interface.
             Discontinuities of this counter can occur at
             re-initialization of the management system, and at other
             times as indicated by the value of the
             ifCounterDiscontinuityTime object of the Interface MIB
             module."
    REFERENCE   "[802.3ah], 30.3.5.1.7."
    ::= { dot3MpcpStatEntry 1 }

dot3MpcpMACCtrlFramesReceived OBJECT-TYPE
    SYNTAX  Counter64
    UNITS      "frames"
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "A count of MPCP frames passed by the MAC sublayer to the
             MAC Control sublayer.  This counter is incremented when a
             ReceiveFrame function call returns a valid frame with
             1) a lengthOrType field value equal to the reserved
             Type for 802.3_MAC_Control as specified in clause 31.4.1.3,
             and
             2) an opcode indicating an MPCP frame.
             This object is applicable for an OLT and an ONU.  At the
             OLT, it has a distinct value for each virtual interface.
             Discontinuities of this counter can occur at
             re-initialization of the management system and at other
             times, as indicated by the value of the
             ifCounterDiscontinuityTime object of the Interface MIB
             module."
   REFERENCE   "[802.3ah], 30.3.5.1.8."
    ::= { dot3MpcpStatEntry 2}

dot3MpcpDiscoveryWindowsSent OBJECT-TYPE
    SYNTAX  Counter32
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "A count of discovery windows generated.  The counter is
             incremented by one for each generated discovery window.
             This object is applicable for an OLT and an ONU.  At the
             OLT, it has a distinct value for each virtual interface.
             At the ONU, the value should be zero.
             Discontinuities of this counter can occur at
             re-initialization of the management system and at other
             times, as indicated by the value of the
             ifCounterDiscontinuityTime object of the Interface MIB
             module."
   REFERENCE   "[802.3ah], 30.3.5.1.22."
    ::= { dot3MpcpStatEntry 3}

dot3MpcpDiscoveryTimeout OBJECT-TYPE
    SYNTAX  Counter32
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "A count of the number of times a discovery timeout
             occurs.  Increment the counter by one for each discovery
             processing state-machine reset resulting from timeout
             waiting for message arrival.
             This object is applicable for an OLT and an ONU.  At the
             OLT, it has a distinct value for each virtual interface.
             Discontinuities of this counter can occur at
             re-initialization of the management system and at other
             times, as indicated by the value of the
             ifCounterDiscontinuityTime object of the Interface MIB
             module."
   REFERENCE   "[802.3ah], 30.3.5.1.23."

    ::= { dot3MpcpStatEntry 4}

the counters are literally the receipts ๐Ÿงพ๐Ÿ’€ The frame counters go up each time an MPCP frame is passed down to MAC or handed up to MAC Control, and the discovery counters track discovery windows and discovery timeouts. and the discontinuity thing? that's just the counters being allowed to reset when the management system reinitializes, or whenever the Interface MIB's ifCounterDiscontinuityTime says so ๐Ÿซ 

dot3MpcpTxRegRequest OBJECT-TYPE

Okay bestie, this one is a tally counter for every REGISTER_REQ MPCP frame that gets sent ๐Ÿ“คโœจ it's giving tally marks but make it iconic ๐Ÿ’…

dot3MpcpTxRegRequest OBJECT-TYPE
    SYNTAX  Counter64
    UNITS      "frames"
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "A count of the number of times a REGISTER_REQ MPCP
             frame transmission occurs.  Increment the counter by one
             for each REGISTER_REQ MPCP frame transmitted as defined
             in [802.3ah], clause 64.
             This object is applicable for an OLT and an ONU.  At the
             OLT, it has a distinct value for each virtual interface.
             At the OLT, the value should be zero.
             Discontinuities of this counter can occur at
             re-initialization of the management system and at other
             times, as indicated by the value of the
             ifCounterDiscontinuityTime object of the Interface MIB
             module."
    REFERENCE   "[802.3ah], 30.3.5.1.12."
    ::= { dot3MpcpStatEntry 5}

dot3MpcpRxRegRequest OBJECT-TYPE

The receive side of the same story ๐Ÿฆ‹ this one counts REGISTER_REQ frames that actually arrive, so it's the other half of the group chat ๐Ÿ’ฌ

dot3MpcpRxRegRequest OBJECT-TYPE
    SYNTAX  Counter64
    UNITS      "frames"
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "A count of the number of times a REGISTER_REQ MPCP
             frame reception occurs.
             Increment the counter by one for each REGISTER_REQ MPCP
             frame received as defined in [802.3ah], clause 64.
             This object is applicable for an OLT and an ONU.  At the
             OLT, it has a distinct value for each virtual interface.
             At the ONU, the value should be zero.
             Discontinuities of this counter can occur at
             re-initialization of the management system and at other
             times, as indicated by the value of the
             ifCounterDiscontinuityTime object of the Interface MIB
             module."
  REFERENCE   "[802.3ah], 30.3.5.1.17."
    ::= { dot3MpcpStatEntry 6}

dot3MpcpTxRegAck OBJECT-TYPE

REGISTER_ACK is the reply vibe ๐ŸŒธ this counter ticks up every time one gets sent out ๐Ÿ“จ

dot3MpcpTxRegAck OBJECT-TYPE
    SYNTAX  Counter64
    UNITS      "frames"
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "A count of the number of times a REGISTER_ACK MPCP
             frame transmission occurs.  Increment the counter by one
             for each REGISTER_ACK MPCP frame transmitted as defined
             in [802.3ah], clause 64.
             This object is applicable for an OLT and an ONU.  At the
             OLT, it has a distinct value for each virtual interface.
             At the OLT, the value should be zero.
             Discontinuities of this counter can occur at
             re-initialization of the management system and at other
             times, as indicated by the value of the
             ifCounterDiscontinuityTime object of the Interface MIB
             module."
 REFERENCE   "[802.3ah], 30.3.5.1.10."
    ::= { dot3MpcpStatEntry 7}

dot3MpcpRxRegAck OBJECT-TYPE

Now the receiving end of the REGISTER_ACK โœจ same counter energy, just flipped around ๐Ÿ”„

dot3MpcpRxRegAck OBJECT-TYPE
    SYNTAX  Counter64
    UNITS      "frames"
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "A count of the number of times a REGISTER_ACK MPCP
             frame reception occurs.
             Increment the counter by one for each REGISTER_ACK MPCP
             frame received as defined in [802.3ah], clause 64.
             This object is applicable for an OLT and an ONU.  At the
             OLT, it has a distinct value for each virtual interface.
             At the ONU, the value should be zero.
             Discontinuities of this counter can occur at
             re-initialization of the management system and at other
             times, as indicated by the value of the
             ifCounterDiscontinuityTime object of the Interface MIB
             module."
    REFERENCE   "[802.3ah], 30.3.5.1.15."
    ::= { dot3MpcpStatEntry 8}

dot3MpcpTxReport OBJECT-TYPE

REPORT frames are giving status update energy ๐Ÿ“Š this one counts how many go out ๐Ÿš€

dot3MpcpTxReport OBJECT-TYPE
    SYNTAX  Counter64
    UNITS      "frames"
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "A count of the number of times a REPORT MPCP frame
             transmission occurs.  Increment the counter by one for
             each REPORT MPCP frame transmitted as defined in
             [802.3ah], clause 64.

             This object is applicable for an OLT and an ONU.  At the
             OLT, it has a distinct value for each virtual interface.
             At the OLT, the value should be zero.
             Discontinuities of this counter can occur at
             re-initialization of the management system and at other
             times, as indicated by the value of the
             ifCounterDiscontinuityTime object of the Interface MIB
             module."
    REFERENCE   "[802.3ah], 30.3.5.1.13."
    ::= { dot3MpcpStatEntry 9}

dot3MpcpRxReport OBJECT-TYPE

And the receive count for REPORT frames ๐Ÿ‘€ the other side of the convo ๐Ÿซถ

dot3MpcpRxReport OBJECT-TYPE
    SYNTAX  Counter64
    UNITS      "frames"
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "A count of the number of times a REPORT MPCP frame
             reception occurs.
             Increment the counter by one for each REPORT MPCP frame
             received as defined in [802.3ah], clause 64.
             This object is applicable for an OLT and an ONU.  At the
             OLT, it has a distinct value for each virtual interface.
             At the ONU, the value should be zero.
             Discontinuities of this counter can occur at
             re-initialization of the management system and at other
             times, as indicated by the value of the
             ifCounterDiscontinuityTime object of the Interface MIB
             module."
    REFERENCE   "[802.3ah], 30.3.5.1.18."
    ::= { dot3MpcpStatEntry 10}

dot3MpcpTxGate OBJECT-TYPE

GATE frames are the bouncers ๐Ÿšชโœจ this counter tracks every one that leaves the building ๐Ÿ’ƒ

dot3MpcpTxGate OBJECT-TYPE
    SYNTAX  Counter64
    UNITS      "frames"
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "A count of the number of times a GATE MPCP frame
             transmission occurs.
             Increment the counter by one for each GATE MPCP frame
             transmitted as defined in [802.3ah], clause 64.
             This object is applicable for an OLT and an ONU.  At the
             OLT, it has a distinct value for each virtual interface.
             At the ONU, the value should be zero.
             Discontinuities of this counter can occur at
             re-initialization of the management system and at other
             times, as indicated by the value of the
             ifCounterDiscontinuityTime object of the Interface MIB
             module."
    REFERENCE   "[802.3ah], 30.3.5.1.9."
    ::= { dot3MpcpStatEntry 11}

dot3MpcpRxGate OBJECT-TYPE

Incoming GATE frames get counted here ๐ŸŽ€ receiving is its own whole era ๐ŸŒˆ

dot3MpcpRxGate OBJECT-TYPE
    SYNTAX  Counter64
    UNITS      "frames"
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "A count of the number of times a GATE MPCP frame
             reception occurs.
             Increment the counter by one for each GATE MPCP frame
             received as defined in [802.3ah], clause 64.
             This object is applicable for an OLT and an ONU.  At the
             OLT, it has a distinct value for each virtual interface.
             At the OLT, the value should be zero.
             Discontinuities of this counter can occur at
             re-initialization of the management system and at other
             times, as indicated by the value of the
             ifCounterDiscontinuityTime object of the Interface MIB
             module."
    REFERENCE   "[802.3ah], 30.3.5.1.14."
    ::= { dot3MpcpStatEntry 12}

dot3MpcpTxRegister OBJECT-TYPE

REGISTER frames (no _REQ, no _ACK, just vibes) ๐Ÿ’œ this counter ticks each time one is transmitted โญ

dot3MpcpTxRegister OBJECT-TYPE
    SYNTAX  Counter64
    UNITS      "frames"
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "A count of the number of times a REGISTER MPCP frame
             transmission occurs.
             Increment the counter by one for each REGISTER MPCP
             frame transmitted as defined in [802.3ah], clause 64.
             This object is applicable for an OLT and an ONU.  At the
             OLT, it has a distinct value for each virtual interface.
             At the ONU, the value should be zero.
             Discontinuities of this counter can occur at
             re-initialization of the management system and at other
             times, as indicated by the value of the
             ifCounterDiscontinuityTime object of the Interface MIB
             module."
   REFERENCE   "[802.3ah], 30.3.5.1.11."
    ::= { dot3MpcpStatEntry 13}

dot3MpcpRxRegister OBJECT-TYPE

And finally the receive side of REGISTER frames ๐Ÿงš the last one in this batch, bestie ๐Ÿ“

dot3MpcpRxRegister OBJECT-TYPE

    SYNTAX  Counter64
    UNITS      "frames"
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "A count of the number of times a REGISTER MPCP frame
             reception occurs.
             Increment the counter by one for each REGISTER MPCP
             frame received as defined in [802.3ah], clause 64.
             This object is applicable for an OLT and an ONU.  At the
             OLT, it has a distinct value for each virtual interface.
             At the OLT, the value should be zero.
             Discontinuities of this counter can occur at
             re-initialization of the management system and at other
             times, as indicated by the value of the
             ifCounterDiscontinuityTime object of the Interface MIB
             module."
    REFERENCE   "[802.3ah], 30.3.5.1.16."
    ::= { dot3MpcpStatEntry 14}

Optical Multi Point Emulation (OMPEmulation) ๐Ÿฆ‹

Okay now we're entering the OMPEmulation zone ๐ŸŒŠ the MIB comment calls it Optical Multi Point Emulation, and this next bit sets up the object identifier and the table for it ๐Ÿ’–

-- Optical Multi Point Emulation (OMPEmulation)
-- managed object definitions

dot3OmpEmulationObjects OBJECT IDENTIFIER ::={dot3EponObjects 2}

dot3OmpEmulationTable OBJECT-TYPE

The table is where the rows live, one for every virtual link ๐ŸŒˆ the description is giving big "how many ONUs can fit in the PON" energy, and the number 32768 is not a typo ๐Ÿ˜ญ

dot3OmpEmulationTable OBJECT-TYPE
    SYNTAX  SEQUENCE OF Dot3OmpEmulationEntry
    MAX-ACCESS  not-accessible
    STATUS  current
    DESCRIPTION
            "A table of dot3 OmpEmulation MIB objects.  The table
             contain objects for the management of the OMPEmulation
             sublayer.
             Each object has a row for every virtual link denoted by
             the corresponding ifIndex.
             The LLID field, as defined in the [802.3ah], is a 2-byte
             register (15-bit field and a broadcast bit) limiting the
             number of virtual links to 32768.  Typically the number
             of expected virtual links in a PON is like the number of
             ONUs, which is 32-64, plus an additional entry for
             broadcast LLID (with a value of 0xffff)."
    ::= { dot3OmpEmulationObjects 1 }

dot3OmpEmulationEntry OBJECT-TYPE

Each row is its own little main character moment ๐ŸŽ€ this one explains exactly when rows get created and deleted, so pay attention, it's important ๐Ÿ‘‘

dot3OmpEmulationEntry OBJECT-TYPE
    SYNTAX  Dot3OmpEmulationEntry
    MAX-ACCESS  not-accessible
    STATUS  current
    DESCRIPTION

            "An entry in the dot3 OmpEmulation table.
             Rows exist for an OLT interface and an ONU interface.
             A row in the table is denoted by the ifIndex of the link
             and it is created when the ifIndex is created.
             The rows in the table for an ONU interface are created
             at system initialization.
             The row in the table corresponding to the OLT ifIndex
             and the row corresponding to the broadcast virtual link
             are created at system initialization.
             A row in the table corresponding to the ifIndex of a
             virtual links is created when a virtual link is
             established (ONU registers) and deleted when the virtual
             link is deleted (ONU deregisters)."
    INDEX  { ifIndex }
    ::= { dot3OmpEmulationTable 1 }

    Dot3OmpEmulationEntry ::=
    SEQUENCE {
            dot3OmpEmulationType               INTEGER
    }

dot3OmpEmulationType OBJECT-TYPE

The type object tells you which mode the sublayer is in, and it starts out as unknown until the truth comes out ๐Ÿ•ต๏ธโ€โ™€๏ธโœจ

dot3OmpEmulationType OBJECT-TYPE
    SYNTAX  INTEGER {
            unknown(1),
            olt(2),
            onu(3)
    }
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "An object that indicates the mode of operation
             of the Reconciliation Sublayer for Point-to-Point
             Emulation (see [802.3ah], clause 65.1).  unknown(1) value
             is assigned in initialization; true state or type is not
             yet known.  olt(2) value is assigned when the sublayer is
             operating in OLT mode.  onu(3) value is assigned when the
             sublayer is operating in ONU mode.
             This object is applicable for an OLT, with the same
             value for all virtual interfaces, and for an ONU."
    REFERENCE   "[802.3ah], 30.3.7.1.2."
    ::= { dot3OmpEmulationEntry 1}

Okay bestie, the stats table is where the OMPEmulation sublayer gets its receipts ๐Ÿ“Šโœจ Each row lines up with one virtual link, identified by its ifIndex, so you can track every ONU (plus that special broadcast link) in one place ๐Ÿฆ‹

dot3OmpEmulationStatTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF Dot3OmpEmulationStatEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
            "This table defines the list of statistics counters of

             [802.3ah], clause 65, OMPEmulation sublayer.
             Each object has a row for every virtual link denoted by
             the corresponding ifIndex.
             The LLID field, as defined in the [802.3ah], is a 2-byte
             register (15-bit field and a broadcast bit) limiting the
             number of virtual links to 32768.  Typically the number
             of expected virtual links in a PON is like the number of
             ONUs, which is 32-64, plus an additional entry for
             broadcast LLID (with a value of 0xffff)."
    ::= { dot3OmpEmulationObjects 2}

Okay so the LLID is a 2-byte register ๐Ÿ’… with a 15-bit field plus a broadcast bit, which caps things at 32768 virtual links. In a PON you usually expect about as many links as ONUs (so roughly 32-64), plus one extra entry for the broadcast LLID, which is 0xffff ๐Ÿงš

dot3OmpEmulationStatEntry OBJECT-TYPE
    SYNTAX     Dot3OmpEmulationStatEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
            "An entry in the table of statistics counters of
             [802.3ah], clause 65, OMPEmulation sublayer.
             Rows exist for an OLT interface and an ONU interface.
             A row in the table is denoted by the ifIndex of the link
             and it is created when the ifIndex is created.
             The rows in the table for an ONU interface are created
             at system initialization.
             The row in the table corresponding to the OLT ifIndex
             and the row corresponding to the broadcast virtual link
             are created at system initialization.
             A row in the table corresponding to the ifIndex of a
             virtual links is created when a virtual link is
             established (ONU registers) and deleted when the virtual
             link is deleted (ONU deregisters)."
    INDEX  { ifIndex}
    ::= { dot3OmpEmulationStatTable 1 }

Rows are keyed by ifIndex ๐ŸŽ€ ONU rows get made at system initialization, and so do the OLT row and the broadcast row. Any other virtual link row only shows up once that link is established (when the ONU registers), and it disappears when the link is deleted (when the ONU deregisters) ๐ŸŒธ

Dot3OmpEmulationStatEntry::=
    SEQUENCE {
            dot3OmpEmulationSLDErrors                 Counter64,
            dot3OmpEmulationCRC8Errors                Counter64,
            dot3OmpEmulationBadLLID                   Counter64,
            dot3OmpEmulationGoodLLID                  Counter64,
            dot3OmpEmulationOnuPonCastLLID            Counter64,
            dot3OmpEmulationOltPonCastLLID            Counter64,
            dot3OmpEmulationBroadcastBitNotOnuLlid    Counter64,
            dot3OmpEmulationOnuLLIDNotBroadcast       Counter64,
            dot3OmpEmulationBroadcastBitPlusOnuLlid    Counter64,
            dot3OmpEmulationNotBroadcastBitNotOnuLlid  Counter64
    }

So that's the full cast of ten counters ๐Ÿ‘‘ Now let's meet them one by one ๐Ÿ’–

Okay first up is the SLD error counter ๐Ÿ™ˆ It counts frames that don't have a valid SLD field. The counter works on both the OLT and ONU sides, and on the OLT it keeps a separate value per virtual interface. It can also reset at management system re-initialization or at other times, which you can check through ifCounterDiscontinuityTime in the Interface MIB module ๐Ÿฆ‹

dot3OmpEmulationSLDErrors OBJECT-TYPE

    SYNTAX  Counter64
    UNITS      "frames"
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "A count of frames received that do not contain a valid
             SLD field as defined in [802.3ah], clause 65.1.3.3.1.
             This object is applicable for an OLT and an ONU.  At the
             OLT, it has a distinct value for each virtual interface.
             Discontinuities of this counter can occur at
             re-initialization of the management system and at other
             times, as indicated by the value of the
             ifCounterDiscontinuityTime object of the Interface MIB
             module."
    REFERENCE   "[802.3ah], 30.3.7.1.3."
    ::= { dot3OmpEmulationStatEntry 1}

Next is the CRC-8 error counter ๐Ÿ’… This one is for frames that DO have a valid SLD field but fail the CRC-8 check. Same deal for who it applies to and how it can reset.

dot3OmpEmulationCRC8Errors OBJECT-TYPE
    SYNTAX  Counter64
    UNITS      "frames"
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "A count of frames received that contain a valid SLD
             field, as defined in [802.3ah], clause 65.1.3.3.1, but do
             not pass the CRC-8 check as defined in [802.3ah], clause
             65.1.3.3.3.
             This object is applicable for an OLT and an ONU.  At the
             OLT, it has a distinct value for each virtual interface.
             Discontinuities of this counter can occur at
             re-initialization of the management system and at other
             times, as indicated by the value of the
             ifCounterDiscontinuityTime object of the Interface MIB
             module."
    REFERENCE   "[802.3ah], 30.3.7.1.4."
    ::= { dot3OmpEmulationStatEntry 2}

Now the BadLLID counter ๐ŸŒˆ It counts frames that have a valid SLD field and pass CRC-8, but still get discarded because of the LLID check.

dot3OmpEmulationBadLLID OBJECT-TYPE
    SYNTAX  Counter64
    UNITS      "frames"
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "A count of frames received that contain a valid SLD
             field, as defined in [802.3ah], clause 65.1.3.3.1, and
             pass the CRC-8 check, as defined in [802.3ah], clause
             65.1.3.3.3, but are discarded due to the LLID check as
             defined in [802.3ah], clause 65.1.3.3.2.

             This object is applicable for an OLT and an ONU.  At the
             OLT, it has a distinct value for each virtual interface.
             Discontinuities of this counter can occur at
             re-initialization of the management system and at other
             times, as indicated by the value of the
             ifCounterDiscontinuityTime object of the Interface MIB
             module."
    REFERENCE   "[802.3ah], 30.3.7.1.8."
    ::= { dot3OmpEmulationStatEntry 3}

GoodLLID is the happy one ๐Ÿซถ It counts frames with a valid SLD field that pass CRC-8. Nothing about the LLID check is mentioned here, so it's just the "good frames" tally.

dot3OmpEmulationGoodLLID OBJECT-TYPE
    SYNTAX  Counter64
    UNITS      "frames"
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "A count of frames received that contain a valid SLD
             field, as defined in [802.3ah], clause 65.1.3.3.1, and
             pass the CRC-8 check as defined in [802.3ah], clause
             65.1.3.3.3.
             This object is applicable for an OLT and an ONU.  At the
             OLT, it has a distinct value for each virtual interface.
             Discontinuities of this counter can occur at
             re-initialization of the management system and at other
             times, as indicated by the value of the
             ifCounterDiscontinuityTime object of the Interface MIB
             module."
    REFERENCE   "[802.3ah], 30.3.7.1.5."
    ::= { dot3OmpEmulationStatEntry 4}

Next is the ONU PON-cast LLID counter ๐Ÿ“ This one counts frames that pass everything and also meet the ONU acceptance rules from the LLID check. Heads up, though: on the OLT, this value should be zero ๐Ÿ™ˆ

dot3OmpEmulationOnuPonCastLLID OBJECT-TYPE
    SYNTAX  Counter64
    UNITS      "frames"
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "A count of frames received that contain a valid SLD
             field, as defined in [802.3ah], clause 65.1.3.3.1,
             pass the CRC-8 check, as defined in [802.3ah], clause
             65.1.3.3.3, and meet the rules of acceptance for an
             ONU defined in [802.3ah], clause 65.1.3.3.2.
             This object is applicable for an OLT and an ONU.  At the
             OLT, it has a distinct value for each virtual interface.
             At the OLT, the value should be zero.
             Discontinuities of this counter can occur at
             re-initialization of the management system and at other
             times, as indicated by the value of the
             ifCounterDiscontinuityTime object of the Interface MIB
             module."
    REFERENCE   "[802.3ah], 30.3.7.1.6."
    ::= { dot3OmpEmulationStatEntry 5}

The OLT PON-cast LLID counter ๐ŸŒธ It's the mirror image: same checks, but judged against the OLT's acceptance rules. On the ONU, its value should be zero.

dot3OmpEmulationOltPonCastLLID OBJECT-TYPE
    SYNTAX  Counter64
    UNITS      "frames"
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "A count of frames received that contain a valid SLD
             field, as defined in [802.3ah], clause 65.1.3.3.1,
             pass the CRC-8 check, as defined in [802.3ah], clause
             65.1.3.3.3, and meet the rules of acceptance for an
             OLT defined in [802.3ah], 65.1.3.3.2.
             This object is applicable for an OLT and an ONU.  At the
             OLT, it has a distinct value for each virtual interface.
             At the ONU, the value should be zero.
             Discontinuities of this counter can occur at
             re-initialization of the management system and at other
             times, as indicated by the value of the
             ifCounterDiscontinuityTime object of the Interface MIB
             module."
  REFERENCE   "[802.3ah], 30.3.7.1.7."
    ::= { dot3OmpEmulationStatEntry 6}

Next up is the broadcast-bit-but-not-ONU-LLID counter ๐Ÿ’œ These are frames with the broadcast bit set in the LLID that do NOT match the ONU's LLID, and they get accepted. Also, on the OLT the value should be zero.

dot3OmpEmulationBroadcastBitNotOnuLlid OBJECT-TYPE
    SYNTAX  Counter64
    UNITS      "frames"
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "A count of frames received that contain a valid SLD
             field, as defined in [802.3ah], clause
             65.1.3.3.1, pass the CRC-8 check, as defined in
             [802.3ah], clause 65.1.3.3.3, and contain the broadcast
             bit in the LLID and not the ONU's LLID (frame accepted)
             as defined in [802.3ah], clause 65.
             This object is applicable for an OLT and an ONU.  At the
             OLT, it has a distinct value for each virtual interface.
             At the OLT, the value should be zero.
             Discontinuities of this counter can occur at
             re-initialization of the management system and at other
             times, as indicated by the value of the
             ifCounterDiscontinuityTime object of the Interface MIB
             module."
   ::= { dot3OmpEmulationStatEntry 7}

Next is the ONU-LLID-but-not-broadcast counter ๐Ÿฆ‹ It counts frames that contain the ONU's LLID without the broadcast bit. Yep, OLT value should be zero here too.

dot3OmpEmulationOnuLLIDNotBroadcast OBJECT-TYPE
    SYNTAX  Counter64
    UNITS      "frames"
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "A count of frames received that contain a valid SLD
             field, as defined in [802.3ah], clause
             65.1.3.3.1, pass the CRC-8 check, as defined in
             [802.3ah], clause 65.1.3.3.3, and contain the ONU's LLID
             as defined in [802.3ah], clause 65.
             This object is applicable for an OLT and an ONU.  At the
             OLT, it has a distinct value for each virtual interface.
             At the OLT, the value should be zero.
             Discontinuities of this counter can occur at
             re-initialization of the management system and at other
             times, as indicated by the value of the
             ifCounterDiscontinuityTime object of the Interface MIB
             module."
   ::= { dot3OmpEmulationStatEntry 8}

BroadcastBitPlusOnuLlid is the "reflected" one ๐ŸŒˆ It counts frames with the broadcast bit set that also match the ONU's LLID (the RFC calls this a "frame reflected"). OLT value should be zero again.

dot3OmpEmulationBroadcastBitPlusOnuLlid OBJECT-TYPE
    SYNTAX  Counter64
    UNITS      "frames"
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "A count of frames received that contain a valid SLD
             field, as defined in [802.3ah], clause
             65.1.3.3.1, pass the CRC-8 check, as defined in
             [802.3ah], clause 65.1.3.3.3, and contain the broadcast
             bit in the LLID and match the ONU's LLID (frame
             reflected) as defined in [802.3ah], clause 65.
             This object is applicable for an OLT and an ONU.  At the
             OLT, it has a distinct value for each virtual interface.
             At the OLT, the value should be zero.
             Discontinuities of this counter can occur at
             re-initialization of the management system and at other
             times, as indicated by the value of the
             ifCounterDiscontinuityTime object of the Interface MIB
             module."
    ::= { dot3OmpEmulationStatEntry 9}

dot3OmpEmulationNotBroadcastBitNotOnuLlid OBJECT-TYPE SYNTAX Counter64 UNITS "frames" MAX-ACCESS read-only STATUS current DESCRIPTION "A count of frames received that contain a valid SLD field, as defined in [802.3ah], clause 65.1.3.3.1, pass the CRC-8 check, as defined in [802.3ah], clause 65.1.3.3.3, and do not contain the ONU's LLID as defined in [802.3ah], clause 65. This object is applicable for an OLT and an ONU. At the OLT, it has a distinct value for each virtual interface. At the OLT, the value should be zero. Discontinuities of this counter can occur at re-initialization of the management system and at other times, as indicated by the value of the ifCounterDiscontinuityTime object of the Interface MIB module." ::= { dot3OmpEmulationStatEntry 10}

-- FEC managed object definitions (30.5.1)

dot3EponFecObjects OBJECT IDENTIFIER ::={dot3EponObjects 3}

dot3EponFecTable OBJECT-TYPE SYNTAX SEQUENCE OF Dot3EponFecEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "A table of dot3 EPON FEC management objects. The entries in the table are control and status objects and statistic counters for the FEC layer. Each object has a row for every virtual link denoted by the corresponding ifIndex. The LLID field, as defined in the [802.3ah], is a 2-byte register (15-bit field and a broadcast bit) limiting the number of virtual links to 32768. Typically the number of expected virtual links in a PON is like the number of ONUs, which is 32-64, plus an additional entry for broadcast LLID (with a value of 0xffff)." ::= { dot3EponFecObjects 1 }

dot3EponFecEntry OBJECT-TYPE SYNTAX Dot3EponFecEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "An entry in the dot3 EPON FEC table. Rows exist for an OLT interface and an ONU interface. A row in the table is denoted by the ifIndex of the link and it is created when the ifIndex is created. The rows in the table for an ONU interface are created at system initialization. The row in the table corresponding to the OLT ifIndex and the row corresponding to the broadcast virtual link are created at system initialization. A row in the table corresponding to the ifIndex of a virtual links is created when a virtual link is established (ONU registers) and deleted when the virtual link is deleted (ONU deregisters)." INDEX { ifIndex} ::= { dot3EponFecTable 1 }

Dot3EponFecEntry ::= SEQUENCE { dot3EponFecPCSCodingViolation Counter64, dot3EponFecAbility INTEGER, dot3EponFecMode INTEGER, dot3EponFecCorrectedBlocks Counter64, dot3EponFecUncorrectableBlocks Counter64, dot3EponFecBufferHeadCodingViolation Counter64 }

dot3EponFecPCSCodingViolation OBJECT-TYPE SYNTAX Counter64 UNITS "octets" MAX-ACCESS read-only STATUS current DESCRIPTION "For a 100 Mbps operation, it is a count of the number of times an invalid code-group is received, other than the /H/ code-group. For a 1000 Mbps operation, it is a count of the number of times an invalid codegroup is received, other than the /V/ code-group. /H/ denotes a special 4b5b codeword of [802.3] 100 Mbps PCS layer (clause 24), and /V/ denotes a special 8b10b codeword of the [802.3] 1000 Mbps PCS layer (clause 36). This object is applicable for an OLT and an ONU. At the OLT, it has a distinct value for each virtual interface. Discontinuities of this counter can occur at re-initialization of the management system and at other times, as indicated by the value of the ifCounterDiscontinuityTime object of the Interface MIB module." REFERENCE "[802.3ah], 30.5.1.1.12." ::= { dot3EponFecEntry 1}

dot3EponFecAbility OBJECT-TYPE SYNTAX INTEGER { unknown(1), supported(2), unsupported(3) } MAX-ACCESS read-only STATUS current DESCRIPTION "An object that indicates the support of operation of the optional FEC sublayer of the 1000BASE-PX PHY specified in [802.3ah], clause 65.2. unknown(1) value is assigned in the initialization, for non FEC support state or type not yet known. unsupported(3) value is assigned when the sublayer is not supported. supported(2) value is assigned when the sublayer is supported. This object is applicable for an OLT, with the same value for all virtual interfaces, and for an ONU. The FEC counters will have a zero value when the interface is not supporting FEC. The counters: dot3EponFecPCSCodingViolation - not affected by FEC ability. dot3EponFecCorrectedBlocks - has a zero value when dot3EponFecAbility is unknown(1) and unsupported(3). dot3EponFecUncorrectableBlocks - has a zero value when dot3EponFecAbility is unknown(1) and unsupported(3). dot3EponFecBufferHeadCodingViolation - has a zero value when dot3EponFecAbility is unknown(1) and unsupported(3)." REFERENCE "[802.3ah], 30.5.1.1.13." ::= { dot3EponFecEntry 2}

dot3EponFecMode OBJECT-TYPE SYNTAX INTEGER { unknown(1), disabled(2), enabled(3) } MAX-ACCESS read-write STATUS current DESCRIPTION "An object that defines the mode of operation of the optional FEC sublayer of the 1000BASE-PX PHY, specified in [802.3ah], clause 65.2, and reflects its state. A GET operation returns the current mode of operation of the PHY. A SET operation changes the mode of operation of the PHY to the indicated value. unknown(1) value is assigned in the initialization for non FEC support state or type not yet known.

disabled(2) value is assigned when the FEC sublayer is operating in disabled mode. enabled(3) value is assigned when the FEC sublayer is operating in FEC mode. The write operation is not restricted in this document and can be done at any time. Changing dot3EponFecMode state can lead to disabling the Forward Error Correction on the respective interface, which can lead to a degradation of the optical link, and therefore may lead to an interruption of service for the users connected to the respective EPON interface. This object is applicable for an OLT and an ONU. At the OLT, it has a distinct value for each virtual interface. The counting of the FEC counters will stop when the FEC of the interface is disabled. The counters: dot3EponFecPCSCodingViolation - not affected by FEC mode. dot3EponFecCorrectedBlocks - stops counting when Rx_FEC is not enabled. (unknown(1) and disabled(2)). dot3EponFecUncorrectableBlocks - stops counting when Rx_FEC is not enabled (unknown(1) and disabled(2)). dot3EponFecBufferHeadCodingViolation - stops counting when Rx_FEC is not enabled (unknown(1) and disabled(2)). The object: dot3EponFecAbility - indicates the FEC ability and is not affected by the dot3EponFecMode object." REFERENCE "[802.3ah], 30.5.1.1.14." DEFVAL { unknown } ::= { dot3EponFecEntry 3}

dot3EponFecCorrectedBlocks OBJECT-TYPE SYNTAX Counter64 MAX-ACCESS read-only STATUS current DESCRIPTION "For 10PASS-TS, 2BASE-TL, and 1000BASE-PX PHYs, it is a count of corrected FEC blocks. This counter will not increment for other PHY Types. Increment the counter by one for each received block that is corrected by the FEC function in the PHY. This object is applicable for an OLT and an ONU. At the OLT, it has a distinct value for each virtual interface. Discontinuities of this counter can occur at re-initialization of the management system and at other times, as indicated by the value of the ifCounterDiscontinuityTime object of the Interface MIB module." REFERENCE "[802.3ah], 30.5.1.1.15." ::= { dot3EponFecEntry 4}

dot3EponFecUncorrectableBlocks OBJECT-TYPE SYNTAX Counter64 MAX-ACCESS read-only STATUS current DESCRIPTION "For 10PASS-TS, 2BASE-TL, and 1000BASE-PX PHYs, it is a count of uncorrectable FEC blocks. This counter will not increment for other PHY Types. Increment the counter by one for each FEC block that is determined to be uncorrectable by the FEC function in the PHY. This object is applicable for an OLT and an ONU. At the OLT, it has a distinct value for each virtual interface. Discontinuities of this counter can occur at re-initialization of the management system and at other times, as indicated by the value of the ifCounterDiscontinuityTime object of the Interface MIB module." REFERENCE "[802.3ah], 30.5.1.1.16." ::= { dot3EponFecEntry 5}

dot3EponFecBufferHeadCodingViolation OBJECT-TYPE SYNTAX Counter64 UNITS "octets" MAX-ACCESS read-only STATUS current DESCRIPTION "For a 1000 Mbps operation, it is a count of the number of invalid code-group received directly from the link. The value has a meaning only in 1000 Mbps mode and it is zero otherwise. This object is applicable for an OLT and an ONU. At the OLT, it has a distinct value for each virtual interface. Discontinuities of this counter can occur at re-initialization of the management system and at other times, as indicated by the value of the ifCounterDiscontinuityTime object of the Interface MIB module." ::= { dot3EponFecEntry 6}

-- ExtendedPackage managed object definitions

dot3ExtPkgObjects OBJECT IDENTIFIER ::={dot3EponObjects 4} dot3ExtPkgControlObjects OBJECT IDENTIFIER ::= { dot3ExtPkgObjects 1}

okay bestie, we're officially in the Extended Package era ๐Ÿ’…๐ŸŽ€ this part is all about the control table, which is where the EPON interface gets its knobs and switches. let's go ๐Ÿฆ‹

dot3ExtPkgControlTable

so the control table is basically a table of control and status objects for an EPON interface, and they're bundled into an extended package on top of the clause 30 stuff from [802.3ah] ๐Ÿงš every virtual link gets its own row, keyed by its ifIndex. the LLID field is a 2-byte register (15 bits plus a broadcast bit), so you can have up to 32768 virtual links, but a PON usually only has like 32 to 64 ONUs, plus one extra row for the broadcast LLID (0xffff) ๐Ÿ’œ

dot3ExtPkgControlTable OBJECT-TYPE
    SYNTAX  SEQUENCE OF Dot3ExtPkgControlEntry
    MAX-ACCESS  not-accessible
    STATUS  current
    DESCRIPTION
            "A table of Extended package Control management
             objects.  Entries in the table are control and status
             indication objects of an EPON interface, which are
             gathered in an extended package as an addition to the
             objects based on the [802.3ah], clause 30, attributes.
             Each object has a row for every virtual link denoted by
             the corresponding ifIndex.
             The LLID field, as defined in the [802.3ah], is a 2-byte
             register (15-bit field and a broadcast bit) limiting the
             number of virtual links to 32768.  Typically the number
             of expected virtual links in a PON is like the number of
             ONUs, which is 32-64, plus an additional entry for
             broadcast LLID (with a value of 0xffff)."
    ::= { dot3ExtPkgControlObjects 1 }

dot3ExtPkgControlEntry

this is the row itself ๐ŸŒธ there are rows for both the OLT and the ONU interface. the row's ifIndex is created with the ifIndex, and the ONU rows and the OLT and broadcast rows show up at system initialization. a virtual link's row only appears when an ONU registers, and it's deleted when that ONU deregisters, so it's giving dynamic ๐Ÿ‘‘

dot3ExtPkgControlEntry OBJECT-TYPE
    SYNTAX  Dot3ExtPkgControlEntry
    MAX-ACCESS  not-accessible
    STATUS  current
    DESCRIPTION
            "An entry in the Extended package Control table.
             Rows exist for an OLT interface and an ONU interface.
             A row in the table is denoted by the ifIndex of the link
             and it is created when the ifIndex is created.
             The rows in the table for an ONU interface are created
             at system initialization.
             The row in the table corresponding to the OLT ifIndex
             and the row corresponding to the broadcast virtual link
             are created at system initialization.
             A row in the table corresponding to the ifIndex of a
             virtual links is created when a virtual link is
             established (ONU registers) and deleted when the virtual
             link is deleted (ONU deregisters)."
    INDEX  { ifIndex}
    ::= { dot3ExtPkgControlTable 1 }

Dot3ExtPkgControlEntry

and here's the sequence that lists every column in a row, so you can see the whole cast at once โœจ

Dot3ExtPkgControlEntry ::=
    SEQUENCE {
     dot3ExtPkgObjectReset                       INTEGER,
     dot3ExtPkgObjectPowerDown                   TruthValue,
     dot3ExtPkgObjectNumberOfLLIDs               Unsigned32,
     dot3ExtPkgObjectFecEnabled                  INTEGER,
     dot3ExtPkgObjectReportMaximumNumQueues      Unsigned32,
     dot3ExtPkgObjectRegisterAction              INTEGER
    }

dot3ExtPkgObjectReset

this one is the reset button ๐Ÿ”„ writing running(1) puts the interface into running mode, and reset(2) sends it into reset mode. heads up though: the interface can be unavailable during a reset and data can get lost, and the write isn't restricted by this document, so it can happen any time. the good news is that at the OLT, each virtual interface has its own value, so resetting one malfunctioning virtual link won't touch the other virtual interfaces or the physical interface ๐Ÿซถ counters can get discontinuities, similar to reinitializing the management system, and that should be flagged with ifCounterDiscontinuityTime from the Interface MIB module.

dot3ExtPkgObjectReset OBJECT-TYPE
    SYNTAX  INTEGER {
            running(1),
            reset(2)
    }
    MAX-ACCESS  read-write
    STATUS  current
    DESCRIPTION
            "This object is used to reset the EPON interface.  The
             interface may be unavailable while the reset occurs and
             data may be lost.
             Setting this object to running(1) will cause the
             interface to enter into running mode.  Setting this
             object to reset(2) will cause the interface to go into
             reset mode.  When getting running(1), the interface is in
             running mode.  When getting reset(2), the interface is in
             reset mode.
             The write operation is not restricted in this document
             and can be done at any time.  Changing
             dot3ExtPkgObjectReset state can lead to a reset of the
             respective interface, leading to an interruption of
             service for the users connected to the respective EPON
             interface.
             This object is applicable for an OLT and an ONU.  At the
             OLT, it has a distinct value for each virtual interface.
             A reset for a specific virtual interface resets only
             this virtual interface and not the physical interface.
             Thus, a virtual link that is malfunctioning can be
             reset without affecting the operation of other virtual
             interfaces.
             The reset can cause Discontinuities in the values of the
             counters of the interface, similar to re-initialization
             of the management system.  Discontinuity should be
             indicated by the ifCounterDiscontinuityTime object of
             the Interface MIB module."
    DEFVAL { running }
    ::= { dot3ExtPkgControlEntry 1 }

dot3ExtPkgObjectPowerDown

this is the power switch ๐Ÿ”Œ true(1) powers the interface down and false(2) brings it back out of power down. same deal as reset: the interface can be unavailable and data may be lost, and writes aren't restricted. it's per virtual interface at the OLT too, so you can power a single virtual link down and back up without disrupting the others ๐Ÿ’– and it only matters when the admin state is active, as set by dot3MpcpAdminState.

dot3ExtPkgObjectPowerDown OBJECT-TYPE
    SYNTAX  TruthValue
    MAX-ACCESS  read-write
    STATUS  current
    DESCRIPTION

            "This object is used to power down the EPON interface.
             The interface may be unavailable while the power down
             occurs and data may be lost.
             Setting this object to true(1) will cause the interface
             to enter into power down mode.  Setting this object to
             false(2) will cause the interface to go out of power
             down mode.  When getting true(1), the interface is in
             power down mode.  When getting false(2), the interface is
             not in power down mode.
             The write operation is not restricted in this document
             and can be done at any time.  Changing
             dot3ExtPkgObjectPowerDown state can lead to a power down
             of the respective interface, leading to an interruption
             of service of the users connected to the respective EPON
             interface.
             This object is applicable for an OLT and an ONU.  At the
             OLT, it has a distinct value for each virtual interface.
             A power down/up of a specific virtual interface affects
             only the virtual interface and not the physical
             interface.  Hence a virtual link, which needs a certain
             handling, can be powered down and then powered up without
             disrupting the operation of other virtual interfaces.
             The object is relevant when the admin state of the
             interface is active as set by the dot3MpcpAdminState."
    DEFVAL { false }
    ::= { dot3ExtPkgControlEntry 2 }

dot3ExtPkgObjectNumberOfLLIDs

this one is read-only, and it's just a head count ๐Ÿงฎ it tells you how many LLIDs are registered, starting at 0. at the OLT it's the same value across all virtual interfaces, and at an ONU it's always one. the LLID math is the same as before, so no surprises there โœจ

dot3ExtPkgObjectNumberOfLLIDs OBJECT-TYPE
    SYNTAX  Unsigned32
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "A read only object that indicates the number of
             registered LLIDs.  The initialization value is 0.
             This object is applicable for an OLT with the same
             value for all virtual interfaces and for an ONU.
             The LLID field, as defined in the [802.3ah], is a 2-byte
             register (15-bit field and a broadcast bit) limiting the
             number of virtual links to 32768.  Typically the number
             of expected virtual links in a PON is like the number of
             ONUs, which is 32-64, plus an additional entry for
             broadcast LLID (with a value of 0xffff).  At the ONU the
             number of LLIDs for an interface is one."
    ::= { dot3ExtPkgControlEntry 3 }

dot3ExtPkgObjectFecEnabled

okay this is the FEC mode switch and it is a whole vibe ๐Ÿ”ฅ it has four settings: noFecEnabled(1), fecTxEnabled(2), fecRxEnabled(3), and fecTxRxEnabled(4). these extend the modes already defined in dot3EponFecMode. the FEC counters all look at the receive path, so they stop when FEC receive mode is off (that's the fecRxEnabled(3) and fecTxRxEnabled(4) values being the "on" ones, so mind the wording). here's the breakdown:

  • dot3EponFecPCSCodingViolation is not affected by FEC mode at all ๐Ÿ™ˆ
  • dot3EponFecCorrectedBlocks, dot3EponFecUncorrectableBlocks, and dot3EponFecBufferHeadCodingViolation stop counting when Rx_FEC isn't enabled, which is noFecEnabled(1) and fecTxEnabled(2)

and the objects that are not affected by the mode are:

  • dot3EponFecAbility, which shows the FEC ability and ignores the mode
  • dot3EponFecMode, which shows the FEC mode for RX and TX combined
warning bestie ๐Ÿšจ writing this object is not restricted by this document and can happen any time. turning FEC off can degrade the optical link, which can interrupt service for users on that EPON interface. so don't just flip it for fun ๐Ÿ˜ญ
dot3ExtPkgObjectFecEnabled OBJECT-TYPE
    SYNTAX  INTEGER {
            noFecEnabled(1),
            fecTxEnabled(2),
            fecRxEnabled(3),
            fecTxRxEnabled(4)
    }
    MAX-ACCESS  read-write
    STATUS  current
    DESCRIPTION
           "An object defining the FEC mode of operation of the
            interface, and indicating its state.  The modes defined in
            this object are extensions to the FEC modes defined in
            the dot3EponFecMode object.
            When noFECEnabled(1), the interface does not enable FEC
            mode.
            When fecTxEnabled(2), the interface enables the FEC
            transmit mode.
            When fecRxEnabled(3), the interface enables the FEC
            receive mode.
            When fecTxRxEnabled(4), the interface enables the FEC
            transmit and receive mode.
            This object is applicable for an OLT and an ONU.  At the
            OLT, it has a distinct value for each virtual interface.
            The FEC counters are referring to the receive path.  The
            FEC counters will stop when the FEC receive mode of the
            interface is disabled, as defined by fecRxEnabled(3)
            and fecTxRxEnabled(4) values.
            The counters:
             dot3EponFecPCSCodingViolation - not affected by FEC
             mode.
             dot3EponFecCorrectedBlocks - stops counting when
             Rx_FEC is not enabled (noFecEnabled(1) and
             fecTxEnabled(2)).
             dot3EponFecUncorrectableBlocks - stops counting when
             Rx_FEC is not enabled (noFecEnabled(1) and
             fecTxEnabled(2)).
             dot3EponFecBufferHeadCodingViolation - stops counting
             when Rx_FEC is not enabled (noFecEnabled(1) and
             fecTxEnabled(2)).
            The objects:
             dot3EponFecAbility - indicates the FEC ability and is
             not affected by the FEC mode.
             dot3EponFecMode - indicates the FEC mode for combined RX
             and TX.
            The write operation is not restricted in this document
            and can be done at any time.  Changing
            dot3ExtPkgObjectFecEnabled state can lead to disabling
            the Forward Error Correction on the respective interface,
            which can lead to a degradation of the optical link, and
            therefore may lead to an interruption of service for the
            users connected to the respective EPON interface."
    DEFVAL { noFecEnabled }
    ::= { dot3ExtPkgControlEntry 4 }

dot3ExtPkgObjectReportMaximumNumQueues

this one caps how many queues can show up in a REPORT message, as defined in [802.3ah] clause 64 ๐Ÿ“ฌ it's read-only, the default is 0, and it's set per virtual interface on the OLT. the valid range is 0 to 7, so it's a tiny little number ๐Ÿ“ check the queue table if you want the deets.

dot3ExtPkgObjectReportMaximumNumQueues OBJECT-TYPE
    SYNTAX  Unsigned32 (0..7)
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "An object, that defines the maximal number of queues in
             the REPORT message as defined in [802.3ah], clause 64.  For
             further information please see the description of the
             queue table.
             This object is applicable for an OLT and an ONU.  At the
             OLT, it has a distinct value for each virtual interface."
    DEFVAL { 0 }
    ::= { dot3ExtPkgControlEntry 5 }

dot3ExtPkgObjectRegisterAction

last but not least, this is the registration control ๐ŸŽฏ writing to it changes the registration state, and reading it gives you the current state. it's reflected here and also in dot3MpcpRegistrationState. the values are none(1) for an unknown state, register(2) for a registered LLID, deregister(3) for a deregistered LLID, and reregister(4) for an LLID that's reregistering. when you write, the interface follows [802.3ah]: none(1) does nothing, register(2) registers an LLID that was requested to register (it goes into registering mode, which is registering(2) in dot3MpcpRegistrationState), and deregister(3) deregisters an LLID that's currently registered (registered(3) in dot3MpcpRegistrationState). this part of the description is where the excerpt stops for now, so the rest comes in the next part ๐Ÿซถ

dot3ExtPkgObjectRegisterAction OBJECT-TYPE
    SYNTAX  INTEGER {
            none(1),
            register(2),
            deregister(3),
            reregister(4)
    }
    MAX-ACCESS  read-write
    STATUS  current
    DESCRIPTION
           "An object configuring the registration state of an
           interface, and indicating its registration state.
            Write operation changes the registration state to its new
            value.
            Read operation returns the value of the state.
            The registration state is reflected in this object and in
            the dot3MpcpRegistrationState object.
            none(1) indicates an unknown state,
            register(2) indicates a registered LLID,
            deregister(3) indicates a deregistered LLID,
            reregister(4) indicates an LLID that is reregistering.
            The following list describes the operation of the
            interface, as specified in the [802.3ah], when a write
            operation is setting a value.
             none(1) - not doing any action.
             register(2) - registering an LLID that has been requested
             for registration (The LLID is in registering mode.
               dot3MpcpRegistrationState - registering(2) ).
               deregister(3) - deregisters an LLID that is registered
                 (dot3MpcpRegistrationState - registered(3) ).
               reregister(4) - reregister an LLID that is registered
                 (dot3MpcpRegistrationState - registered(3) ).
               The behavior of an ONU and OLT interfaces, at each one
               of the detailed operation at each state, is described in
               the registration state machine of figure 64-22,
               [802.3ah].
              This object is applicable for an OLT and an ONU.  At the
              OLT, it has a distinct value for each virtual interface.
              The write operation is not restricted in this document
              and can be done at any time.  Changing
              dot3ExtPkgObjectRegisterAction state can lead to a change
              in the registration state of the respective interface
              leading to a deregistration and an interruption of
              service of the users connected to the respective EPON
              interface."
      DEFVAL { none }
      ::= { dot3ExtPkgControlEntry 6 }

Okay, so the last bit of dot3ExtPkgObjectRegisterAction is the reregister(4) option ๐Ÿ’–. Reregistering an LLID that's already registered is a whole thing, and the object says the ONU and OLT behaviour at each state lives in the registration state machine of figure 64-22 in [802.3ah] ๐Ÿงš. Also, changing this object can knock the interface out of registration, which means deregistration and users losing service on that EPON interface. So be careful with the write access, bestie ๐Ÿ˜ญ. It's applicable to both OLT and ONU, and at the OLT every virtual interface gets its own value ๐ŸŽ€.

Next up is the queue table, which is giving report-message energy โœจ.

  dot3ExtPkgQueueTable OBJECT-TYPE
      SYNTAX  SEQUENCE OF Dot3ExtPkgQueueEntry
      MAX-ACCESS  not-accessible
      STATUS  current
      DESCRIPTION
              "A table of the extended package objects for queue
               management.  The [802.3ah] MPCP defines a report message
               of the occupancy of the transmit queues for the feedback
               BW request from the ONUs.  These queues serve the uplink
               transmission of the ONU and data is gathered there until
               the ONU is granted for transmission.
               The management table of the queues is added here mainly
               to control the reporting and to gather some statistics
               of their operation.  This table is not duplicating
               existing management objects of bridging queues,
               specified in [802.1d], since the existence of a
               dedicated transmit queuing mechanism is implied in the
               [802.3ah], and the ONU may be a device that is not a
               bridge with embedded bridging queues.
               The format of the REPORT message, as specified
               in [802.3], is presented below:
               +-----------------------------------+
               |          Destination Address      |
               +-----------------------------------+
               |          Source Address           |
               +-----------------------------------+
               |          Length/Type              |
               +-----------------------------------+
               |          OpCode                   |
               +-----------------------------------+
               |          TimeStamp                |
               +-----------------------------------+
               |          Number of queue Sets     |
               +-----------------------------------+   /|\
               |          Report bitmap            |    |
               +-----------------------------------+    |
               |          Queue 0 report           |    |
               +-----------------------------------+    | repeated for
               |          Queue 1 report           |    | every
               +-----------------------------------+    | queue_set
               |          Queue 2 report           |    |
               +-----------------------------------+    |
               |          Queue 3 report           |    |
               +-----------------------------------+    |
               |          Queue 4 report           |    |
               +-----------------------------------+    |
               |          Queue 5 report           |    |
               +-----------------------------------+    |
               |          Queue 6 report           |    |
               +-----------------------------------+    |
               |          Queue 7 report           |    |
               +-----------------------------------+   \|/
               |          Pad/reserved             |
               +-----------------------------------+
               |          FCS                      |
               +-----------------------------------+

               The 'Queue report' field reports the occupancy of each
               uplink transmission queue.
               The number of queue sets defines the number of the
               reported sets, as would be explained in the description
               of the dot3ExtPkgQueueSetsTable table.  For each set the
               report bitmap defines which queue is present in the
               report, meaning that although the MPCP REPORT message
               can report up to 8 queues in a REPORT message, the
               actual number is flexible.  The Queue table has a
               variable size that is limited by the
               dot3ExtPkgObjectReportMaximumNumQueues object, as an
               ONU can have fewer queues to report.
               The entries in the table are control and status
               indication objects for managing the queues of an EPON
               interface that are gathered in an extended package as
               an addition to the objects that are based on the
               [802.3ah] attributes.
               Each object has a row for every virtual link and for
               every queue in the report.
               The LLID field, as defined in the [802.3ah], is a 2-byte
               register (15-bit field and a broadcast bit) limiting the
               number of virtual links to 32768.  Typically the number
               of expected virtual links in a PON is like the number of
               ONUs, which is 32-64, plus an additional entry for
               broadcast LLID (with a value of 0xffff).
               The number of queues is between 0 and 7 and limited by
               dot3ExtPkgObjectReportMaximumNumQueues."
      ::= { dot3ExtPkgControlObjects 2 }

The dot3ExtPkgQueueTable is the queue management table ๐ŸŒธ. The MPCP REPORT message lets ONUs tell the OLT how full their uplink transmit queues are, so they can ask for bandwidth, and this table is for controlling that reporting and tracking a few stats ๐Ÿ“Š. It isn't duplicating the bridge queue objects from [802.1d], because the ONU might not be a bridge at all ๐Ÿ™ˆ. The diagram shows the REPORT frame layout, with the queue report repeated for every queue set. The number of queues is between 0 and 7, and it's capped by dot3ExtPkgObjectReportMaximumNumQueues. The table gets a row for every virtual link and every queue in the report ๐Ÿ’…. The LLID is a 2-byte field, a 15-bit value plus a broadcast bit, so you can have up to 32768 virtual links. In a typical PON you'd expect around 32 to 64 of them, plus one extra entry for the broadcast LLID, which is 0xffff ๐Ÿฆ‹.

Now the entry itself, which is the main character of the table ๐Ÿ‘‘.

  dot3ExtPkgQueueEntry OBJECT-TYPE
      SYNTAX  Dot3ExtPkgQueueEntry
      MAX-ACCESS  not-accessible
      STATUS  current
      DESCRIPTION
              "An entry in the Extended package Queue table.  At the
               OLT, the rows exist for each ifIndex and dot3QueueIndex.
               At the ONU, rows exist for the single ifIndex for each
               dot3QueueIndex.
               Rows in the table are created when the ifIndex of the
               link is created.  A set of rows per queue are added for
               each ifIndex, denoted by the dot3QueueIndex.
               A set of rows per queue in the table, for an ONU
               interface, are created at the system initialization.
               A set of rows per queue in the table, corresponding to
               the OLT ifIndex and a set of rows per queue
               corresponding to the broadcast virtual link, are
               created at the system initialization.
               A set of rows per queue in the table, corresponding to
               the ifIndex of a virtual link, are created when the
               virtual link is established (ONU registers), and deleted
               when the virtual link is deleted (ONU deregisters)."
      INDEX  { ifIndex, dot3QueueIndex }
      ::= { dot3ExtPkgQueueTable 1 }

The dot3ExtPkgQueueEntry is indexed by ifIndex and dot3QueueIndex โœจ. At the OLT you get rows for each ifIndex and each queue, and at the ONU you get rows for its single ifIndex, one per queue ๐Ÿงš. At the OLT, the rows for the OLT ifIndex and for the broadcast virtual link are made at system initialization. Rows for a virtual link get created when that link is established, meaning when the ONU registers, and deleted when the ONU deregisters ๐Ÿ˜ญ. So the rows follow the registration lifecycle, which is sooo iconic ๐Ÿ’œ.

Next is the SEQUENCE that lists the columns of each row ๐ŸŽ€.

  Dot3ExtPkgQueueEntry ::=
      SEQUENCE {
       dot3QueueIndex                              Unsigned32,
       dot3ExtPkgObjectReportNumThreshold           Unsigned32,
       dot3ExtPkgObjectReportMaximumNumThreshold    Unsigned32,
       dot3ExtPkgStatTxFramesQueue                  Counter64,
       dot3ExtPkgStatRxFramesQueue                  Counter64,
       dot3ExtPkgStatDroppedFramesQueue             Counter64
      }

Here's the column list: the queue index, the reporting threshold numbers, and three frame counters: transmitted, received, and dropped ๐ŸŒˆ.

Now the index column, dot3QueueIndex ๐Ÿฆ‹.

  dot3QueueIndex OBJECT-TYPE
      SYNTAX  Unsigned32 (0..7)
      MAX-ACCESS  not-accessible
      STATUS  current
      DESCRIPTION

              "An object that identifies an index for the queue table
               reflecting the queue index of the queues that are
               reported in the MPCP REPORT message as defined in
               [802.3ah], clause 64.
               The number of queues is between 0 and 7, and limited by
               dot3ExtPkgObjectReportMaximumNumQueues."
      ::= { dot3ExtPkgQueueEntry 1 }

dot3QueueIndex is the index for the queue table, and its values run from 0 to 7 ๐Ÿ“. It matches the queues reported in the MPCP REPORT message from [802.3ah] clause 64, and it's still capped by dot3ExtPkgObjectReportMaximumNumQueues ๐Ÿ’….

Next is the threshold count, which you can read and write ๐Ÿ”ฅ.

  dot3ExtPkgObjectReportNumThreshold OBJECT-TYPE
      SYNTAX  Unsigned32 (0..7)
      MAX-ACCESS  read-write
      STATUS  current
      DESCRIPTION
              "An object that defines the number of thresholds for each
               queue in the REPORT message as defined in [802.3ah],
               clause 64.
               Each queue_set reporting will provide information on the
               queue occupancy of frames below the matching Threshold.
               Read operation reflects the number of thresholds.
               Write operation sets the number of thresholds for each
               queue.
               The write operation is not restricted in this document
               and can be done at any time.  Value cannot exceed the
               maximal value defined by the
               dot3ExtPkgObjectReportMaximumNumThreshold object.
               Changing dot3ExtPkgObjectReportNumThreshold can lead to
               a change in the reporting of the ONU interface and
               therefore to a change in the bandwidth allocation of the
               respective interface.  This change may lead a degradation
               or an interruption of service of the users connected to
               the respective EPON interface.
               This object is applicable for an OLT and an ONU.  At the
               OLT, it has a distinct value for each virtual interface
               and for each queue.  At the ONU, it has a distinct value
               for each queue."
      DEFVAL { 0 }
      ::= { dot3ExtPkgQueueEntry 2 }

dot3ExtPkgObjectReportNumThreshold sets how many thresholds each queue gets in the REPORT message ๐ŸŒŸ. Each queue set reports how much of the queue holds frames below its matching threshold. You can read it or write it at any time in this document, but it can't go above dot3ExtPkgObjectReportMaximumNumThreshold ๐Ÿ˜ฌ. Changing it can shift the ONU's reporting, and that can change bandwidth allocation, which might cause degradation or even an interruption for the users on that EPON interface. Handle with care, bestie ๐Ÿซถ. It's for both OLT and ONU, with a value per virtual interface and per queue at the OLT, and per queue at the ONU ๐Ÿ’œ.

Now the read-only maximum ๐ŸŒธ.

  dot3ExtPkgObjectReportMaximumNumThreshold OBJECT-TYPE
      SYNTAX  Unsigned32 (0..7)
      MAX-ACCESS  read-only
      STATUS  current
      DESCRIPTION
              "An object, that defines the maximal number of thresholds
               for each queue in the REPORT message as defined in
               [802.3ah], clause 64.  Each queue_set reporting will
               provide information on the queue occupancy of frames
               below the matching Threshold.

               This object is applicable for an OLT and an ONU.  At the
               OLT, it has a distinct value for each virtual interface
               and for each queue.  At the ONU, it has a distinct value
               for each queue."
      DEFVAL { 0 }
      ::= { dot3ExtPkgQueueEntry 3 }

dot3ExtPkgObjectReportMaximumNumThreshold is the read-only ceiling for that threshold count ๐Ÿฆ‹. It's the maximum number of thresholds per queue in the REPORT message, and it has the same per-interface and per-queue setup for OLT and ONU ๐Ÿ“.

Last but definitely not least, the transmitted frame counter ๐Ÿ’–.

   dot3ExtPkgStatTxFramesQueue OBJECT-TYPE
      SYNTAX  Counter64
      UNITS      "frames"
      MAX-ACCESS  read-only
      STATUS  current
      DESCRIPTION
              "A count of the number of times a frame transmission
               occurs from the corresponding 'Queue'.
               Increment the counter by one for each frame transmitted,
               which is an output of the 'Queue'.
               The 'Queue' marking matches the REPORT MPCP message
               Queue field as defined in [802.3ah], clause 64.
               This object is applicable for an OLT and an ONU.  At the
               OLT, it has a distinct value for each virtual interface
               and for each queue.  At the ONU, it has a distinct value
               for each queue.
               At the OLT the value should be zero.
               Discontinuities of this counter can occur at
               re-initialization of the management system and at other
               times, as indicated by the value of the
               ifCounterDiscontinuityTime object of the Interface MIB
               module."
      ::= { dot3ExtPkgQueueEntry 4}

dot3ExtPkgStatTxFramesQueue is a Counter64 in frames that goes up by one each time a frame comes out of its queue ๐ŸŽ€. Its queue marking matches the Queue field in the REPORT message from [802.3ah] clause 64. It has a value per virtual interface and per queue at the OLT, and per queue at the ONU. At the OLT, the value is supposed to be zero, which is giving very specific energy ๐Ÿ™ˆ. Discontinuities can happen when the management system re-initializes and at other times, and you can check ifCounterDiscontinuityTime in the Interface MIB module to see when that happened ๐Ÿงš.

okay bestie, we're picking right back up with the queue stats ๐Ÿ“Šโœจ

Here's the receive counter for each queue. It's giving precision ๐Ÿ’…

  dot3ExtPkgStatRxFramesQueue OBJECT-TYPE
      SYNTAX  Counter64
      UNITS      "frames"
      MAX-ACCESS  read-only
      STATUS  current
      DESCRIPTION
              "A count of the number of times a frame reception
               occurs from the corresponding 'Queue'.
               Increment the counter by one for each frame received,
               which is an input to the corresponding 'Queue'.
               The 'Queue' marking matches the REPORT MPCP message
               Queue field as defined in [802.3ah], clause 64.
               This object is applicable for an OLT and an ONU.  At the
               OLT, it has a distinct value for each virtual interface
               and for each queue.  At the ONU, it has a distinct value
               for each queue.
               Discontinuities of this counter can occur at
               re-initialization of the management system and at other
               times, as indicated by the value of the
               ifCounterDiscontinuityTime object of the Interface MIB
               module."
      ::= { dot3ExtPkgQueueEntry 5}

  dot3ExtPkgStatDroppedFramesQueue OBJECT-TYPE
      SYNTAX  Counter64
      UNITS      "frames"
      MAX-ACCESS  read-only
      STATUS  current
      DESCRIPTION
               "A count of the number of times a frame drop
               occurs from the corresponding 'Queue'.
               Increment the counter by one for each frame dropped
               from the corresponding 'Queue'.
               The 'Queue' marking matches the REPORT MPCP message
               Queue field as defined in [802.3ah], clause 64.
               This object is applicable for an OLT and an ONU.  At the
               OLT, it has a distinct value for each virtual interface
               and for each queue.  At the ONU, it has a distinct value
               for each queue.
               At the OLT, the value should be zero.
               Discontinuities of this counter can occur at
               re-initialization of the management system and at other
               times, as indicated by the value of the
               ifCounterDiscontinuityTime object of the Interface MIB
               module."
     ::= { dot3ExtPkgQueueEntry 6}

  dot3ExtPkgQueueSetsTable OBJECT-TYPE
      SYNTAX  SEQUENCE OF Dot3ExtPkgQueueSetsEntry
      MAX-ACCESS  not-accessible
      STATUS  current
      DESCRIPTION
              "A table of Extended package objects used for the
               management of the queue_sets.  Entries are control and
               status indication objects of an EPON interface, which
               are gathered in an extended package as an addition to
               the objects based on the [802.3ah] attributes.  The
               objects in this table are specific for the queue_sets,
               which are reported in the MPCP REPORT message as defined
               in [802.3ah], clause 64.
               The [802.3ah] MPCP defines a report message of the
               occupancy of the transmit queues for the feedback BW
               request from the ONUs.  These queues serve the uplink
               transmission of the ONU and data is gathered there until
               the ONU is granted for transmission.

               The management table of the queues_sets is added here
               mainly to control the reporting and to gather some
               statistics of their operation.  This table is not
               duplicating existing management objects of bridging
               queues, specified in [802.1d], since the existence of a
               dedicated transmit queuing mechanism is implied in the
               [802.3ah], and the ONU may be a device that is not a
               bridge with embedded bridging queues.
               The format of the REPORT message, as specified
               in [802.3], is presented below:
               +-----------------------------------+
               |          Destination Address      |
               +-----------------------------------+
               |          Source Address           |
               +-----------------------------------+
               |          Length/Type              |
               +-----------------------------------+
               |          OpCode                   |
               +-----------------------------------+
               |          TimeStamp                |
               +-----------------------------------+
               |          Number of queue Sets     |
               +-----------------------------------+   /|\
               |          Report bitmap            |    |
               +-----------------------------------+    |
               |          Queue 0 report           |    |
               +-----------------------------------+    | repeated for
               |          Queue 1 report           |    | every
               +-----------------------------------+    | queue_set
               |          Queue 2 report           |    |
               +-----------------------------------+    |
               |          Queue 3 report           |    |
               +-----------------------------------+    |
               |          Queue 4 report           |    |
               +-----------------------------------+    |
               |          Queue 5 report           |    |
               +-----------------------------------+    |
               |          Queue 6 report           |    |
               +-----------------------------------+    |
               |          Queue 7 report           |    |
               +-----------------------------------+   \|/
               |          Pad/reserved             |
               +-----------------------------------+
               |          FCS                      |
               +-----------------------------------+

               As can be seen from the message format, the ONU
               interface reports of the status of up to 8 queues
               and it can report in a single MPCP REPORT message
               of a few sets of queues.
               The number of queue_sets defines the number of the
               reported sets, and it can reach a value of up to 8.
               It means that an ONU can hold a variable number of
               sets between 0 and 7.
               The dot3ExtPkgQueueSetsTable table has a variable
               queue_set size that is limited by the
               dot3ExtPkgObjectReportMaximumNumThreshold object as an
               ONU can have fewer queue_sets to report.
               The 'Queue report' field reports the occupancy of each
               uplink transmission queue.  The queue_sets can be used to
               report the occupancy of the queues in a few levels as to
               allow granting, in an accurate manner, of only part of
               the data available in the queues.  A Threshold is
               defined for each queue_set to define the level of the
               queue that is counted for the report of the occupancy.
               The threshold is reflected in the queue_set table by the
               dot3ExtPkgObjectReportThreshold object.
               For each queue set, the report bitmap defines which
               queues are present in the report, meaning that
               although the MPCP REPORT message can report of up to 8
               queues in a REPORT message, the actual number is
               flexible.
               The dot3ExtPkgQueueSetsTable table has a variable queue
               size that is limited by the
               dot3ExtPkgObjectReportMaximumNumQueues object as an ONU
               can have fewer queues to report.
               Each object has a row for every virtual link, for each
               queue in the report and for each queue_set in the queue.
               The LLID field, as defined in the [802.3ah], is a 2-byte
               register (15-bit field and a broadcast bit) limiting the
               number of virtual links to 32768.  Typically the number
               of expected virtual links in a PON is like the number of
               ONUs, which is 32-64, plus an additional entry for
               broadcast LLID (with a value of 0xffff).
               The number of queues is between 0 and 7 and limited by
               dot3ExtPkgObjectReportMaximumNumQueues.
               The number of queues_sets is between 0 and 7 and limited
               by dot3ExtPkgObjectReportMaximumNumThreshold."
      ::= { dot3ExtPkgControlObjects 3 }

  dot3ExtPkgQueueSetsEntry OBJECT-TYPE
      SYNTAX  Dot3ExtPkgQueueSetsEntry
      MAX-ACCESS  not-accessible
      STATUS  current
      DESCRIPTION
              "An entry in the Extended package queue_set table.  At

               the OLT, the rows exist for each ifIndex,
               dot3QueueSetQueueIndex and dot3QueueSetIndex.  At the
               ONU, rows exist for the single ifIndex, for each
               dot3QueueSetQueueIndex and dot3QueueSetIndex.
               Rows in the table are created when the ifIndex of the
               link is created.  A set of rows per queue and per
               queue_set are added for each ifIndex, denoted by
               dot3QueueSetIndex and dot3QueueSetQueueIndex.
               A set of rows per queue and per queue_set in the table,
               for an ONU interface are created at system
               initialization.
               A set of rows per queue and per queue_Set in the table,
               corresponding to the OLT ifIndex and a set of rows per
               queue and per queue_set, corresponding to the broadcast
               virtual link, are created at system initialization.
               A set of rows per queue and per queue_set in the table,
               corresponding to the ifIndex of a virtual link are
               created when the virtual link is established (ONU
               registers) and deleted when the virtual link is deleted
               (ONU deregisters)."
               INDEX { ifIndex,
              dot3QueueSetQueueIndex,dot3QueueSetIndex}
      ::= { dot3ExtPkgQueueSetsTable 1 }

  Dot3ExtPkgQueueSetsEntry ::=
      SEQUENCE {
       dot3QueueSetQueueIndex                      Unsigned32,
       dot3QueueSetIndex                           Unsigned32,
       dot3ExtPkgObjectReportThreshold             Unsigned32
      }

  dot3QueueSetQueueIndex OBJECT-TYPE
      SYNTAX  Unsigned32 (0..7)
      MAX-ACCESS  not-accessible
      STATUS  current
      DESCRIPTION
              "An object that identifies the queue index for the
               dot3ExtPkgQueueSetsTable table.  The queues are reported
               in the MPCP REPORT message as defined in [802.3ah],
               clause 64.
               The number of queues is between 0 and 7, and limited by
               dot3ExtPkgObjectReportMaximumNumQueues.
               Value corresponds to the dot3QueueIndex of the queue
               table."
      ::= { dot3ExtPkgQueueSetsEntry 1 }

  dot3QueueSetIndex OBJECT-TYPE
      SYNTAX  Unsigned32 (0..7)
      MAX-ACCESS  not-accessible
      STATUS  current
      DESCRIPTION
              "An object that identifies the queue_set index for the
               dot3ExtPkgQueueSetsTable table.  The queues are reported
               in the MPCP REPORT message as defined in [802.3ah],
               clause 64.
               The number of queues_sets is between 0 and 7, and
               limited by dot3ExtPkgObjectReportMaximumNumThreshold."
      ::= { dot3ExtPkgQueueSetsEntry 2 }

that's the queue stats and the queue sets table, all lined up ๐ŸŽ€๐ŸŒธ

      dot3ExtPkgObjectReportThreshold OBJECT-TYPE
      SYNTAX  Unsigned32
      UNITS       "TQ (16nsec)"
      MAX-ACCESS  read-write
      STATUS  current
      DESCRIPTION
              "An object that defines the value of a threshold report
               for each queue_set in the REPORT message as defined in
               [802.3ah], clause 64.  The number of sets for each queue
               is dot3ExtPkgObjectReportNumThreshold.
               In the REPORT message, each queue_set reporting will
               provide information on the occupancy of the queues for
               frames below the matching Threshold.
               The value returned shall be in Time quanta (TQ), which
               is 16nsec or 2 octets increments.
               Read operation provides the threshold value.  Write
               operation sets the value of the threshold.
               The write operation is not restricted in this document
               and can be done at any time.  Changing
               dot3ExtPkgObjectReportThreshold can lead to a change in
               the reporting of the ONU interface and therefore to a
               change in the bandwidth allocation of the respective
               interface.  This change may lead a degradation or an
               interruption of service for the users connected to the
               respective EPON interface.
               This object is applicable for an OLT and an ONU.  At the
               OLT, it has a distinct value for each virtual interface,
               for each queue and for each queue_set.  At the ONU, it has
               a distinct value for each queue and for each queue_set."
      DEFVAL { 0 }
      ::= { dot3ExtPkgQueueSetsEntry 3 }

Okay so this one is the threshold object for the REPORT message, and it's giving main character energy ๐ŸŽ€โœจ Next up are the optical interface status tables, which are lowkey where the OLT gets to keep tabs on every single ONU ๐Ÿฆ‹

  --Optical Interface status tables

  dot3ExtPkgOptIfTable OBJECT-TYPE
      SYNTAX     SEQUENCE OF Dot3ExtPkgOptIfEntry
      MAX-ACCESS not-accessible
      STATUS     current
      DESCRIPTION
              "This table defines the control and status indication
               objects for the optical interface of the EPON interface.
               Each object has a row for every virtual link denoted by
               the corresponding ifIndex.
               The LLID field, as defined in the [802.3ah], is a 2-byte
               register (15-bit field and a broadcast bit) limiting the
               number of virtual links to 32768.  Typically the number
               of expected virtual links in a PON is like the number of
               ONUs, which is 32-64, plus an additional entry for
               broadcast LLID (with a value of 0xffff).
               Although the optical interface is a physical interface,
               there is a row in the table for each virtual interface.
               The reason for having a separate row for each virtual
               link is that the OLT has a separate link for each one of
               the ONUs.  For instance, ONUs could be in different
               distances with different link budgets and different
               receive powers, therefore having different power alarms.
               It is quite similar to a case of different physical
               interfaces."
      ::= { dot3ExtPkgControlObjects 5}

  dot3ExtPkgOptIfEntry OBJECT-TYPE
      SYNTAX     Dot3ExtPkgOptIfEntry
      MAX-ACCESS not-accessible
      STATUS     current
      DESCRIPTION
              "An entry in the optical interface table of the EPON
               interface.
               Rows exist for an OLT interface and an ONU interface.
               A row in the table is denoted by the ifIndex of the link
               and it is created when the ifIndex is created.
               The rows in the table for an ONU interface are created
               at system initialization.
               The row in the table corresponding to the OLT ifIndex
               and the row corresponding to the broadcast virtual link
               are created at system initialization.
               A row in the table corresponding to the ifIndex of a
               virtual links is created when a virtual link is
               established (ONU registers) and deleted when the virtual
               link is deleted (ONU deregisters)."
      INDEX       { ifIndex }
      ::= { dot3ExtPkgOptIfTable 1 }

   Dot3ExtPkgOptIfEntry ::=
     SEQUENCE {
       dot3ExtPkgOptIfSuspectedFlag             TruthValue,
       dot3ExtPkgOptIfInputPower                Integer32,
       dot3ExtPkgOptIfLowInputPower             Integer32,
       dot3ExtPkgOptIfHighInputPower            Integer32,
       dot3ExtPkgOptIfLowerInputPowerThreshold  Integer32,
       dot3ExtPkgOptIfUpperInputPowerThreshold  Integer32,
       dot3ExtPkgOptIfOutputPower               Integer32,
       dot3ExtPkgOptIfLowOutputPower            Integer32,
       dot3ExtPkgOptIfHighOutputPower           Integer32,
       dot3ExtPkgOptIfLowerOutputPowerThreshold Integer32,
       dot3ExtPkgOptIfUpperOutputPowerThreshold Integer32,
       dot3ExtPkgOptIfSignalDetect              TruthValue,
       dot3ExtPkgOptIfTransmitAlarm             TruthValue,
       dot3ExtPkgOptIfTransmitEnable            TruthValue
       }

The table rows are basically one per virtual link, so every ONU gets its own little spotlight ๐Ÿ’œ

  dot3ExtPkgOptIfSuspectedFlag OBJECT-TYPE
    SYNTAX  TruthValue
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
      "This object is a reliability indication.
       If true, the data in this entry may be unreliable.
       This object is applicable for an OLT and an ONU.  At the
       OLT, it has a distinct value for each virtual interface."
    ::= { dot3ExtPkgOptIfEntry 1 }

  dot3ExtPkgOptIfInputPower OBJECT-TYPE
    SYNTAX  Integer32
    UNITS  "0.1 dbm"
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
      "The optical power monitored at the input.
       This object is applicable for an OLT and an ONU.  At the
       OLT, it has a distinct value for each virtual interface."
  ::= { dot3ExtPkgOptIfEntry 2 }

  dot3ExtPkgOptIfLowInputPower OBJECT-TYPE
    SYNTAX  Integer32
    UNITS  "0.1 dbm"
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
      "The lowest optical power monitored at the input during the
       current 15-minute interval.
       This object is applicable for an OLT and an ONU.  At the
       OLT, it has a distinct value for each virtual interface."
    ::= { dot3ExtPkgOptIfEntry 3 }

  dot3ExtPkgOptIfHighInputPower OBJECT-TYPE
    SYNTAX  Integer32
    UNITS  "0.1 dbm"
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
      "The highest optical power monitored at the input during the
       current 15-minute interval.
       This object is applicable for an OLT and an ONU.  At the
       OLT, it has a distinct value for each virtual interface."
    ::= { dot3ExtPkgOptIfEntry 4 }

  dot3ExtPkgOptIfLowerInputPowerThreshold OBJECT-TYPE
    SYNTAX  Integer32
    UNITS  "0.1 dbm"
    MAX-ACCESS  read-write
    STATUS  current
    DESCRIPTION
      "The lower limit threshold on input power.  If
       dot3ExtPkgOptIfInputPower drops to this value or below,
       a Threshold Crossing Alert (TCA) should be sent.
       Reading will present the threshold value.  Writing will
       set the value of the threshold.
       The write operation is not restricted in this document
       and can be done at any time.  Changing
       dot3ExtPkgOptIfLowerInputPowerThreshold can lead to a Threshold
       Crossing Alert (TCA) being sent for the respective interface.
       This alert may be leading to an interruption of service for the
       users connected to the respective EPON interface, depending on
       the system action on such an alert.
       This object is applicable for an OLT and an ONU.  At the
       OLT, it has a distinct value for each virtual interface."
    ::= { dot3ExtPkgOptIfEntry 5 }

  dot3ExtPkgOptIfUpperInputPowerThreshold OBJECT-TYPE
    SYNTAX  Integer32
    UNITS  "0.1 dbm"
    MAX-ACCESS  read-write
    STATUS  current
    DESCRIPTION
      "The upper limit threshold on input power.  If
       dot3ExtPkgOptIfInputPower reaches or exceeds this value,
       a Threshold Crossing Alert (TCA) should be sent.
       Reading will present the threshold value.  Writing will
       set the value of the threshold.
       The write operation is not restricted in this document
       and can be done at any time.  Changing
       dot3ExtPkgOptIfUpperInputPowerThreshold can lead to a Threshold
       Crossing Alert (TCA) being sent for the respective interface.
       This alert may be leading to an interruption of service for the
       users connected to the respective EPON interface, depending on
       the system action on such an alert.
       This object is applicable for an OLT and an ONU.  At the
       OLT, it has a distinct value for each virtual interface."
   ::= { dot3ExtPkgOptIfEntry 6 }

  dot3ExtPkgOptIfOutputPower OBJECT-TYPE
    SYNTAX  Integer32
    UNITS  "0.1 dbm"
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
      "The optical power monitored at the output.
       This object is applicable for an OLT and an ONU.  At the
       OLT, it has a distinct value for each virtual interface."
    ::= { dot3ExtPkgOptIfEntry 7 }

  dot3ExtPkgOptIfLowOutputPower OBJECT-TYPE
    SYNTAX  Integer32
    UNITS  "0.1 dbm"
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
      "The lowest optical power monitored at the output during the
       current 15-minute interval.
       This object is applicable for an OLT and an ONU.  At the
       OLT, it has a distinct value for each virtual interface."
    ::= { dot3ExtPkgOptIfEntry 8 }

  dot3ExtPkgOptIfHighOutputPower OBJECT-TYPE
    SYNTAX  Integer32
    UNITS  "0.1 dbm"
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
      "The highest optical power monitored at the output during the
       current 15-minute interval.
       This object is applicable for an OLT and an ONU.  At the
       OLT, it has a distinct value for each virtual interface."
   ::= { dot3ExtPkgOptIfEntry 9 }

  dot3ExtPkgOptIfLowerOutputPowerThreshold OBJECT-TYPE
    SYNTAX  Integer32
    UNITS  "0.1 dbm"
    MAX-ACCESS  read-write
    STATUS  current
    DESCRIPTION
      "The lower limit threshold on output power.  If
       dot3ExtPkgOptIfOutputPower drops to this value or below,
       a Threshold Crossing Alert (TCA) should be sent.
       Reading will present the threshold value.  Writing will
       set the value of the threshold.
       The write operation is not restricted in this document
       and can be done at any time.  Changing
       dot3ExtPkgOptIfLowerOutputPowerThreshold can lead to a Threshold
       Crossing Alert (TCA) being sent for the respective interface.
       This alert may be leading to an interruption of service for the
       users connected to the respective EPON interface, depending on
       the system action on such an alert.
       This object is applicable for an OLT and an ONU.  At the
       OLT, it has a distinct value for each virtual interface."
  ::= { dot3ExtPkgOptIfEntry 10 }
  dot3ExtPkgOptIfUpperOutputPowerThreshold OBJECT-TYPE
    SYNTAX  Integer32
    UNITS  "0.1 dbm"
    MAX-ACCESS  read-write
    STATUS  current
    DESCRIPTION
      "The upper limit threshold on output power.  If
       dot3ExtPkgOptIfOutputPower reaches or exceeds this value,
       a Threshold Crossing Alert (TCA) should be sent.
       Reading will present the threshold value.  Writing will
       set the value of the threshold.
       The write operation is not restricted in this document
       and can be done at any time.  Changing
       dot3ExtPkgOptIfUpperOutputPowerThreshold can lead to a Threshold
       Crossing Alert (TCA) being sent for the respective interface.
       This alert may be leading to an interruption of service of the
       users connected to the respective EPON interface, depending on
       the system action on such an alert.
       This object is applicable for an OLT and an ONU.  At the
       OLT, it has a distinct value for each virtual interface."
    ::= { dot3ExtPkgOptIfEntry 11 }

  dot3ExtPkgOptIfSignalDetect OBJECT-TYPE
      SYNTAX  TruthValue
      MAX-ACCESS  read-only
      STATUS  current
      DESCRIPTION
              "When getting true(1), there is a valid optical signal at
               the receive that is above the optical power level for
               signal detection.  When getting false(2) the optical
               signal at the receive is below the optical power level
               for signal detection.
               This object is applicable for an OLT and an ONU.  At the
               OLT, it has a distinct value for each virtual interface."
      DEFVAL { false }
      ::= { dot3ExtPkgOptIfEntry 12 }

  dot3ExtPkgOptIfTransmitAlarm OBJECT-TYPE
      SYNTAX  TruthValue
      MAX-ACCESS  read-only
      STATUS  current
      DESCRIPTION
              "When getting true(1) there is a non-valid optical signal
               at the transmit of the interface, either a higher level
               or lower level than expected.  When getting false(2) the
               optical signal at the transmit is valid and in the
               required range.
               This object is applicable for an OLT and an ONU.  At the
               OLT, it has a distinct value for each virtual interface."
      DEFVAL { false }
      ::= { dot3ExtPkgOptIfEntry 13 }

  dot3ExtPkgOptIfTransmitEnable OBJECT-TYPE
      SYNTAX  TruthValue
      MAX-ACCESS  read-write
      STATUS  current
      DESCRIPTION
              "Setting this object to true(1) will cause the optical
               interface to start transmission (according to the
               control protocol specified for the logical interface).
               Setting this object to false(2) will cause the
               interface to stop the optical transmission.
               When getting true(1), the optical interface is in
               transmitting mode (obeying to the logical control
               protocol).
               When getting false(2), the optical interface is not in
               transmitting mode.
               The write operation is not restricted in this document
               and can be done at any time.  Changing
               dot3ExtPkgOptIfTransmitEnable state can lead to a halt
               in the optical transmission of the respective interface
               leading to an interruption of service of the users
               connected to the respective EPON interface.
               The object is relevant when the admin state of the
               interface is active as set by the dot3MpcpAdminState.
               This object is applicable for an OLT and an ONU.  At the
               OLT it, has a distinct value for each virtual interface."
      DEFVAL { false }
      ::= { dot3ExtPkgOptIfEntry 14 }

  -- Conformance Statements

  -- Conformance Groups

  dot3EponGroups      OBJECT IDENTIFIER ::= { dot3EponConformance 1 }

  dot3MpcpGroupBase OBJECT-GROUP
      OBJECTS {
              dot3MpcpOperStatus,
              dot3MpcpAdminState,
              dot3MpcpMode,
              dot3MpcpSyncTime,
              dot3MpcpLinkID,
              dot3MpcpRemoteMACAddress,
              dot3MpcpRegistrationState,
              dot3MpcpMaximumPendingGrants,
              dot3MpcpTransmitElapsed,
              dot3MpcpReceiveElapsed,
              dot3MpcpRoundTripTime
      }
      STATUS  current
      DESCRIPTION
             "A collection of objects of dot3 Mpcp Control entity state
              definition.  Objects are per LLID."
      ::= { dot3EponGroups 1 }

  dot3MpcpGroupStat OBJECT-GROUP
      OBJECTS {
              dot3MpcpMACCtrlFramesTransmitted,
              dot3MpcpMACCtrlFramesReceived,
              dot3MpcpDiscoveryWindowsSent,
              dot3MpcpDiscoveryTimeout,
              dot3MpcpTxRegRequest,
              dot3MpcpRxRegRequest,
              dot3MpcpTxRegAck,
              dot3MpcpRxRegAck,
              dot3MpcpTxReport,
              dot3MpcpRxReport,
              dot3MpcpTxGate,
              dot3MpcpRxGate,
              dot3MpcpTxRegister,
              dot3MpcpRxRegister
      }
      STATUS  current
      DESCRIPTION
              "A collection of objects of dot3 Mpcp Statistics.
               Objects are per LLID."
      ::= { dot3EponGroups 2 }

  dot3OmpeGroupID OBJECT-GROUP
      OBJECTS {
              dot3OmpEmulationType

      }
      STATUS  current
      DESCRIPTION
              "A collection of objects of dot3 OMP emulation entity
               state definition.  Objects are per LLID."
      ::= { dot3EponGroups 3 }

  dot3OmpeGroupStat OBJECT-GROUP
      OBJECTS {
              dot3OmpEmulationSLDErrors,
              dot3OmpEmulationCRC8Errors,
              dot3OmpEmulationBadLLID,
              dot3OmpEmulationGoodLLID,
              dot3OmpEmulationOnuPonCastLLID,
              dot3OmpEmulationOltPonCastLLID,
              dot3OmpEmulationBroadcastBitNotOnuLlid,
              dot3OmpEmulationOnuLLIDNotBroadcast,
              dot3OmpEmulationBroadcastBitPlusOnuLlid,
              dot3OmpEmulationNotBroadcastBitNotOnuLlid
      }
      STATUS  current
      DESCRIPTION
              "A collection of objects of dot3 OMP emulation
               Statistics.  Objects are per LLID."
      ::= { dot3EponGroups 4 }

  dot3EponFecGroupAll OBJECT-GROUP
      OBJECTS {
              dot3EponFecPCSCodingViolation,
              dot3EponFecAbility,
              dot3EponFecMode,
              dot3EponFecCorrectedBlocks,
              dot3EponFecUncorrectableBlocks,
              dot3EponFecBufferHeadCodingViolation
      }
      STATUS  current
      DESCRIPTION
              "A collection of objects of dot3 FEC group control and
              statistics.  Objects are per LLID."
      ::= { dot3EponGroups 5 }

  dot3ExtPkgGroupControl OBJECT-GROUP
      OBJECTS {
              dot3ExtPkgObjectReset,
              dot3ExtPkgObjectPowerDown,
              dot3ExtPkgObjectNumberOfLLIDs,
              dot3ExtPkgObjectFecEnabled,
              dot3ExtPkgObjectReportMaximumNumQueues,
              dot3ExtPkgObjectRegisterAction
      }
      STATUS  current
      DESCRIPTION
              "A collection of objects of dot3ExtPkg control
               definition.  Objects are per LLID."
      ::= { dot3EponGroups 6 }

  dot3ExtPkgGroupQueue OBJECT-GROUP
      OBJECTS {
       dot3ExtPkgObjectReportNumThreshold,
       dot3ExtPkgObjectReportMaximumNumThreshold,
       dot3ExtPkgStatTxFramesQueue,
       dot3ExtPkgStatRxFramesQueue,
       dot3ExtPkgStatDroppedFramesQueue
      }
      STATUS  current
      DESCRIPTION
              "A collection of objects of dot3ExtPkg Queue
               control.  Objects are per LLID, per queue."
      ::= { dot3EponGroups 7 }

  dot3ExtPkgGroupQueueSets OBJECT-GROUP
      OBJECTS {
       dot3ExtPkgObjectReportThreshold
      }
      STATUS  current
      DESCRIPTION
              "A collection of objects of dot3ExtPkg queue_set
               control.  Objects are per LLID, per queue, per
               queue_set."
      ::= { dot3EponGroups 8 }

  dot3ExtPkgGroupOptIf OBJECT-GROUP
      OBJECTS {
     dot3ExtPkgOptIfSuspectedFlag,
       dot3ExtPkgOptIfInputPower,
       dot3ExtPkgOptIfLowInputPower,
       dot3ExtPkgOptIfHighInputPower,
       dot3ExtPkgOptIfLowerInputPowerThreshold,
       dot3ExtPkgOptIfUpperInputPowerThreshold,
       dot3ExtPkgOptIfOutputPower,
       dot3ExtPkgOptIfLowOutputPower,
       dot3ExtPkgOptIfHighOutputPower,
       dot3ExtPkgOptIfLowerOutputPowerThreshold,
       dot3ExtPkgOptIfUpperOutputPowerThreshold,
       dot3ExtPkgOptIfSignalDetect,
       dot3ExtPkgOptIfTransmitAlarm,
       dot3ExtPkgOptIfTransmitEnable
       }
      STATUS  current
      DESCRIPTION
              "A collection of objects of control and status indication
               of the optical interface.
               Objects are per LLID."
      ::= { dot3EponGroups 9 }

  -- Compliance

     dot3EponCompliances
         OBJECT IDENTIFIER ::= { dot3EponConformance 2 }

  dot3MPCPCompliance MODULE-COMPLIANCE
      STATUS      current
      DESCRIPTION "The compliance statement for Multi-Point
                   Control Protocol interfaces."

      MODULE  -- this module
      MANDATORY-GROUPS { dot3MpcpGroupBase}

      GROUP       dot3MpcpGroupStat
     DESCRIPTION "This group is mandatory for all MPCP supporting
                  interfaces for statistics collection."
     ::= { dot3EponCompliances 1}

  dot3OmpeCompliance MODULE-COMPLIANCE
      STATUS      current
      DESCRIPTION "The compliance statement for OMPEmulation
                   interfaces."

      MODULE  -- this module
      MANDATORY-GROUPS { dot3OmpeGroupID}

      GROUP       dot3OmpeGroupStat
      DESCRIPTION "This group is mandatory for all OMPemulation
                   supporting interfaces for statistics collection."

      ::= { dot3EponCompliances 2}

  dot3EponFecCompliance MODULE-COMPLIANCE
      STATUS      current
      DESCRIPTION "The compliance statement for FEC EPON interfaces.

                   This group is mandatory for all FEC supporting
                   interfaces for control and statistics collection."

      MODULE  -- this module
      MANDATORY-GROUPS { dot3EponFecGroupAll }

      ::= { dot3EponCompliances 3}

  dot3ExtPkgCompliance MODULE-COMPLIANCE
      STATUS      current
      DESCRIPTION "The compliance statement for EPON Interfaces
                   using the extended package."
      MODULE  -- this module
      MANDATORY-GROUPS { dot3ExtPkgGroupControl }

      GROUP       dot3ExtPkgGroupQueue
      DESCRIPTION " This group is mandatory for all EPON interfaces
                   supporting REPORT queue management of the extended
                   package."

      GROUP       dot3ExtPkgGroupQueueSets
      DESCRIPTION " This group is mandatory for all EPON interfaces
                   supporting REPORT queue_sets management of the
                   extended package."

      GROUP       dot3ExtPkgGroupOptIf
      DESCRIPTION "This group is mandatory for all EPON interfaces
                   supporting optical interfaces management,
                   of the extended package."

      ::= { dot3EponCompliances 4}

  END

7. IANA Considerations โœจ

Okay, IANA's part is short and sweet ๐ŸŽ€ They gave the DOT3-EPON-MIB module just one object identifier for its MODULE-IDENTITY, and it lives under the MIB-2 tree ๐ŸŒธ

The MIB module also uses some IANA-assigned OBJECT IDENTIFIER values that are recorded in the SMI Numbers registry. The one that matters here is:

      Descriptor        OBJECT IDENTIFIER value
      ----------        -----------------------

      dot3EponMIB        { mib-2 155 }

Bestie, that's the whole thing! ๐Ÿ’œ IANA just needed to lock in that one number so everyone's MIB lines up ๐Ÿฆ‹

8. Acknowledgements ๐ŸŽ€

This document is the result of the efforts of the HUBMIB Working Group, and the group is honestly iconic ๐Ÿ’–. Huge thanks to Dan Romascanu, who was WG chair for most of the development and carefully reviewed and commented on the initial versions. Special thanks also go to Bert Wijnen, the current WG chair, for his review and comments on the final stages. ๐Ÿซถ

Special thanks to David Perkins for his detailed and helpful MIB Doctor review. ๐Ÿงš

Also, a big shoutout to some of the IEEE802.3ah Working Group people for their contribution and extra reviews of the document. They absolutely showed up ๐Ÿ‘‘

9. Security Considerations ๐Ÿ”

Okay, this section is serious, bestie, so pay attention ๐Ÿ™ˆ There are a number of managed objects defined in this MIB module that have a MAX-ACCESS clause of read-write or read-create. Writing to these objects can have potentially disruptive effects on network operation, including:

  • Changing dot3MpcpAdminState state can lead to disabling the Multi-Point Control Protocol on the respective interface, leading to the interruption of service for the users connected to the respective EPON interface. ๐Ÿ’€
  • Changing dot3EponFecMode state can lead to disabling the Forward Error Correction on the respective interface, which can lead to a degradation of the optical link, and therefore may lead to an interruption of service for the users connected to the respective EPON interface.
  • Changing dot3ExtPkgObjectReset state can lead to a reset of the respective interface leading to an interruption of service for the users connected to the respective EPON interface.
  • Changing dot3ExtPkgObjectPowerDown state can lead to a power down of the respective interface, leading to an interruption of service for the users connected to the respective EPON interface.
  • Changing dot3ExtPkgObjectFecEnabled state can lead to disabling the Forward Error Correction on the respective interface, which can lead to a degradation of the optical link, and therefore may lead to an interruption of service for the users connected to the respective EPON interface.
  • Changing dot3ExtPkgObjectRegisterAction state can lead to a change in the registration state of the respective interface, leading to a deregistration and an interruption of service for the users connected to the respective EPON interface.
  • Changing dot3ExtPkgObjectReportNumThreshold can lead to a change in the reporting of the ONU interface and therefore to a change in the bandwidth allocation of the respective interface. This change may lead a degradation or an interruption of service for the users connected to the respective EPON interface.
  • Changing dot3ExtPkgObjectReportThreshold can lead to a change in the reporting of the ONU interface and therefore to a change in the bandwidth allocation of the respective interface. This change may lead a degradation or an interruption of service for the users connected to the respective EPON interface.
  • Changing dot3ExtPkgOptIfLowerInputPowerThreshold can lead to a Threshold Crossing Alert (TCA) being sent for the respective interface. This alert may be leading to an interruption of service for the users connected to the respective EPON interface, depending on the system action on such an alert.
  • Changing dot3ExtPkgOptIfUpperInputPowerThreshold can lead to a Threshold Crossing Alert (TCA) being sent for the respective interface. This alert may be leading to an interruption of service for the users connected to the respective EPON interface, depending on the system action on such an alert.
  • Changing dot3ExtPkgOptIfLowerOutputPowerThreshold can lead to a Threshold Crossing Alert (TCA) being sent for the respective interface. This alert may be leading to an interruption of service for the users connected to the respective EPON interface, depending on the system action on such an alert.
  • Changing dot3ExtPkgOptIfUpperOutputPowerThreshold can lead to a Threshold Crossing Alert (TCA) being sent for the respective interface. This alert may be leading to an interruption of service for the users connected to the respective EPON interface, depending on the system action on such an alert.
  • Changing dot3ExtPkgOptIfTransmitEnable state can lead to a halt in the optical transmission of the respective interface, leading to an interruption of service for the users connected to the respective EPON interface.
The user of this MIB module must therefore be aware that support for SET operations in a non-secure environment without proper protection can have a negative effect on network operations. โš ๏ธ

The readable objects in this MIB module (i.e., those with MAX-ACCESS other than not-accessible) may be considered sensitive in some environments, since, collectively, they provide information about the performance of network interfaces and can reveal some aspects of their configuration. In such environments, it is important to control even GET and NOTIFY access to these objects, and possibly even to encrypt their values when sending them over the network via SNMP. ๐Ÿ™ˆ

SNMP versions prior to SNMPv3 did not include adequate security. Even if the network itself is secure (for example by using IPsec), there is still 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, not the vibe ๐Ÿ’€

It is RECOMMENDED that implementers consider the security features provided by the SNMPv3 framework (see [RFC3410], section 8), including full support for the SNMPv3 cryptographic mechanisms (for authentication and privacy). โœจ

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 ensure that the SNMP entity giving access to an instance of this MIB module is properly configured to give access to the objects only to those principals (users) that have legitimate rights to indeed GET or SET (change/create/delete) them. Only the people who should be touching it, periodt ๐Ÿ’…

10. References ๐Ÿ“š

10.1. Normative References

[802.1d]       IEEE, "Institute of Electrical and Electronic
               Engineers,  802.1D-2004, IEEE Standard for Local and
               metropolitan area networks Media Access Control (MAC)
               Bridges.", June 2004.

[802.3]        IEEE, "Institute of Electrical and Electronic
               Engineers, IEEE Std 802.3-2002, "IEEE Standard for
               Carrier Sense Multiple Access with Collision Detection
               (CSMA/CD) Access Method and Physical Layer
               Specifications.", December 2002.

[802.3ah]      IEEE, "Institute of Electrical and Electronic
               Engineers, IEEE Std 802.3ah-2004.  Information
               technology - Telecommunications and information
               exchange between systems - Local and metropolitan area
               networks - Specific requirements - Part 3: Carrier
               sense multiple access with collision detection
               (CSMA/CD) access method and physical layer
               specifications - Media Access Control Parameters,
               Physical Layers and Management Parameters for
               subscriber access networks.", IEEE Std 802.3ah-2004,
               October 2004.

[ITU-T.G.975]  ITU, "ITU-T, SERIES G: TRANSMISSION SYSTEMS AND MEDIA,
               DIGITAL SYSTEMS AND NETWORKS Digital sections and
               digital line system - Optical fibre submarine cable
               systems Forward error correction for submarine
               systems, ITU-T  Recommendation  G.975", October 2000.

[ITU-T.G.983]  ITU, "ITU-T, SERIES G: TRANSMISSION SYSTEMS AND MEDIA,
               DIGITAL SYSTEMS AND NETWORKS, Digital transmission
               systems - Digital sections and digital line system -
               Optical line systems for local and access networks
               Broadband optical access systems based on Passive
               Optical Networks (PON), ITU-T Recommendation G.983.1",
               October 1998.

[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.

[RFC2864]      McCloghrie, K. and G. Hanson, "The Inverted Stack
               Table Extension to the Interfaces Group MIB",
               RFC 2864, June 2000.

[RFC3635]      Flick, J., "Definitions of Managed Objects for the
               Ethernet-like Interface Types", RFC 3635,
               September 2003.

[RFC4836]      Beili, E., "Definitions of Managed Objects for IEEE
               802.3 Medium Attachment Units (MAUs)", RFC 4836,
               April 2007.

10.2. Informative References

[RFC1525]      Decker, E., McCloghrie, K., Langille, P., and A.
               Rijsinghani, "Definitions of Managed Objects for
               Source Routing Bridges", RFC 1525, September 1993.

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

[RFC4188]      Norseth, K. and E. Bell, "Definitions of Managed
               Objects for Bridges", RFC 4188, September 2005.

[RFC4878]      Squire, M., "Definitions and Managed Objects for
               Operations, Administration, and Maintenance (OAM)
               Functions on Ethernet-Like Interfaces", RFC 4878,
               June 2007.

Author's Address ๐Ÿฆ‹

Lior Khermosh
PMC-SIERRA
Kohav Hertzelia bldg,
4 Hasadnaot St.,
Hertzliya Pituach,  46120
ISRAEL

Phone: +972-9-9628000 Ext: 302
Fax:   +972-9-9628001
EMail: lior_khermosh@pmc-sierra.com

Copyright (C) The IETF Trust (2007).

The legal bits, verbatim because they matter:

This document is subject to the rights, licenses and restrictions
contained in BCP 78, and except as set forth therein, the authors
retain all their rights.

This document and the information contained herein are provided on an
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND
THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Intellectual Property โœจ

okay so the IETF is NOT saying whether any patents or other IP rights tied to this tech are valid or how far they reach ๐Ÿ™ˆ and they're not claiming they looked for any either. if you want the rules on rights for RFC docs, check out BCP 78 and BCP 79 ๐Ÿ’…

copies of IPR disclosures sent to the IETF Secretariat live in the IETF online IPR repository at http://www.ietf.org/ipr ๐Ÿฆ‹ you'll also find any promises to license, or what happened when someone tried to get a general license or permission to use those proprietary rights as an implementer or user of the spec. bestie, that's where the paperwork lives ๐Ÿ“‚

and if you know about any copyrights, patents, patent applications, or other proprietary rights that might cover tech you'd need to implement this standard, the IETF literally wants to hear from you ๐Ÿซถ email ietf-ipr@ietf.org with the info. no cap, they're asking nicely!! ๐Ÿ’–

Acknowledgement

the RFC Editor function gets its funding right now from the Internet Society ๐ŸŒˆ so thank you to them for keeping the lights on ๐Ÿ”ฅโœจ

๐Ÿ“ฆ where this page comes from