RFC 5605

Managed Objects for ATM over Packet Switched Networks (PSNs)

πŸ“… published July 2009, from ietf

RFC 5605: Managed Objects for ATM over Packet Switched Networks (PSNs) πŸ’–

Okay bestie, the header facts first πŸŽ€. This one is from the Network Working Group and dated July 2009. The authors are O. Nicklass (RADVISION Ltd.) and T. Nadeau (BT). It's a Standards Track doc ✨. There are no Obsoletes or Updates lines in the header, so it doesn't list anything it replaces or changes.

Abstract ✨

Okay so this memo defines a chunk of the Management Information Base (MIB) for network management protocols used across the Internet community 🌸. Specifically, it describes managed objects for modeling an ATM Pseudowire (PW) that carries ATM cells over Packet Switched Networks (PSNs). It's giving "managing ATM over IP-ish networks" energy πŸ’….

Status of This Memo ✨

This document specifies an Internet standards track protocol for the Internet community, and it asks for discussion and suggestions for improvements πŸ¦‹. For the standardization state and status of this protocol, check the current edition of the "Internet Official Protocol Standards" (STD 1). Distribution of this memo is unlimited 🌈.

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

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents in effect on the date of publication of this document (http://trustee.ietf.org/license-info). Please review these documents carefully, since they explain your rights and restrictions with respect to this document πŸ™ˆ.

This document may contain material from IETF Documents or IETF Contributions published or made publicly available before November 10, 2008. The person(s) controlling the copyright in some of this material may not have granted the IETF Trust the right to allow modifications of such material outside the IETF Standards Process. Without obtaining an adequate license from the person(s) controlling the copyright in such materials, this document may not be modified outside the IETF Standards Process, and derivative works of it may not be created outside the IETF Standards Process, except to format it for publication as an RFC or to translate it into languages other than English πŸ’€.

Table of Contents πŸ“

   1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  2
   2.  Conventions  . . . . . . . . . . . . . . . . . . . . . . . . .  3
   3.  Terminology  . . . . . . . . . . . . . . . . . . . . . . . . .  3
   4.  The Internet-Standard Management Framework . . . . . . . . . .  4
   5.  Overview . . . . . . . . . . . . . . . . . . . . . . . . . . .  4
   6.  Relation to Other PW-MIB Modules . . . . . . . . . . . . . . .  5
   7.  ATM-PW MIB Usage . . . . . . . . . . . . . . . . . . . . . . .  6
   8.  Structure of the MIB Module  . . . . . . . . . . . . . . . . .  7
   9.  Object Definition  . . . . . . . . . . . . . . . . . . . . . .  8
   10. Security Considerations  . . . . . . . . . . . . . . . . . . . 33
   11. IANA Considerations  . . . . . . . . . . . . . . . . . . . . . 34
   12. References . . . . . . . . . . . . . . . . . . . . . . . . . . 34
     12.1.  Normative References  . . . . . . . . . . . . . . . . . . 34
     12.2.  Informative References  . . . . . . . . . . . . . . . . . 36
   13. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 36

1. Introduction ✨

Okay so this document describes a model for managing "emulated" ATM services running over a Packet Switched Network (PSN) πŸ¦‹.

It follows the requirements for Pseudowire Emulation Edge-to-Edge [PWREQ]. It's closely related to [ATMENCAP] and [ATMTRANS], which describe how ATM signals get encapsulated and provide the Emulation Service over a PSN πŸ’–.

The ATM management model is made up of several MIB modules, and it follows the layering model from the PWE3 Architecture [PWARCH] document 🧚. The ATM MIB module described here works closely with the MIB modules in [AToMTC], [AToM], [IFMIB], and [PWMIB], plus the textual conventions defined in [PWTC]. How all of those layer together is shown in Figure 1 and in the "Relation to Other PW-MIB Modules" section below. An ATM connection is a pseudowire (PW) connection. It is not treated as an interface, so it won't show up in the ifTable 😭.

                       Figure 1: Conceptual Layering

                            +-------------------+
                            |     ATM MIB       |  ATM-TC-MIB,
                            +-------------------+  ATMMIB
                                     |
                            +-------------------+
               Service      |    ATM PW MIB     |  PW-ATM-MIB
                Layer       +-------------------+

              - - - - - - - - - - -  | - - - - - - - - - - - - - - -
               Generic      +-------------------+
                 PW         | Generic PW MIBS   |  PW-TC-MIB,
                Layer       +-------------------+  PW-STD-MIB
              - - - - - - - - - - - -| - - - - - - - - - - - - - - -
                            +-------------------+
                PSN VC      |   MPLS VC MIBS    |  PW-MPLS-MIB
                Layer       +-------------------+
              - - - - - - - - - - - -| - - - - - - - - - - - - - - -
                            +-------------------+
                 PSN        |    MPLS MIBs      |  MPLS-TE-STD-MIB,
                Layer       +-------------------+  MPLS-LSR-STD-MIB

                                 Figure 1

2. Conventions πŸŽ€

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 [BCP14].

3. Terminology πŸ“š

Okay so this document uses the terminology from the PW Architecture [PWARCH] 🌸. Here's the lineup:

  PSN-bound           References the traffic direction where an ATM Cell
                      is received, adapted to the packet, assigned a PW
                      label, and sent into the PSN.  Within the MIB
                      objects, it is called outbound.

  CE-bound            The direction where packets are received
                      from the PSN, cells are reconstructed from the
                      packet payloads, and are sent into the ATM network
                      as cells.  Within the MIB objects, it is called
                      inbound.


  Adaptation          Refers to the method of adapting a "foreign"
                      communications protocol such that it can be
                      carried by a packet switched net (the PSN).  For
                      example, in an ATM service, the foreign protocol
                      is ATM.  The PSN may be MPLS.

  PSN                 Packet Switched Network.

  PSN Tunnel          A general term indicating a virtual connection
                      between the two PW edge devices.  In practice,
                      this connection is not limited to path-oriented
                      types of PSNs such as MPLS.  An example of a non-
                      path-oriented PSN is an IP PSN.

4. The Internet-Standard Management Framework ✨

For a detailed overview of the documents that describe the current Internet-Standard Management Framework, check out section 7 of RFC 3410 [RFC3410] πŸ”₯.

Managed objects are accessed through a virtual information store called the Management Information Base, or MIB. MIB objects are generally accessed through the Simple Network Management Protocol (SNMP) πŸ’….

Objects in the MIB are defined using the mechanisms in the Structure of Management Information (SMI). This memo specifies a MIB module that is compliant with the SMIv2, which is described in STD 58, RFC 2578 [RFC2578], STD 58, RFC 2579 [RFC2579] and STD 58, RFC 2580 [RFC2580] 🧠.

5. Overview 🌈

This MIB module is designed to satisfy the following requirements and constraints:

  • Fit within the architecture defined by [PWARCH] and [PWMIB].
  • Fit within the model for Virtual Path/Virtual Circuit (VP/VC) definitions and management concept as defined in the [AToM] MIB.
  • Support manually configured ATM PWs.
  • Support automatically configured ATM PWs.
  • Enable the use of any PSN type.
  • Support point-to-point ATM PW connections. Point-to-multipoint and multipoint-to-point connections are for future study.
  • Allow configuration of all the parameters needed to establish a PW to carry ATM cells.
  • Report ATM performance metrics for the ATM PW. This includes cells transmit, Cells dropped, Cells received, and unknownCells. In addition, it reports performance metrics at packet level πŸ“Š.
  • Support ATM Operations, Administration, and Management (OAM) cells.
  • Do not consider Integrated Local Management Interface (ILMI) support.

6. Relation to Other PW-MIB Modules πŸ§šβ€β™€οΈ

Okay this part is the big picture 🌸. The MIB structure for defining a PW service is made of three layers of MIB modules working together. This general model is defined in the PWE3 Architecture [PWARCH]. The layering is meant to properly isolate PW services from the underlying PSN layer that carries the emulated service, and at the same time it gives a standard way to connect any supported services to any supported PSNs πŸ’–.

The first layer is the service layer. It holds service-specific modules, like the one defined in this document. These modules define service-specific management objects that interface or collaborate with existing MIB modules for the native version of the service. The service-specific module "glues" the standard module to the PWE MIB framework πŸŽ€.

The next layer of the PWE MIB framework is the PW-MIB module [PWMIB]. It configures general parameters of PW connections that are common to all types of emulated services and PSNs. This layer connects to the service-specific layer above and to the PSN layer below πŸ¦‹.

The PSN layer provides PSN-specific modules for each type of PSN. These modules associate the PW with one or more "tunnels" that carry the service over the PSN, and they are defined in other documents. This module is used to "glue" the PW service to the underlying PSN-specific MIB modules. For MPLS, for example, the PW-MPLS MIB [PWMPLSMIB] connects the PW service to either the MPLS-LDP [LDPMIB] or MPLS-TE [TEMIB] MIBs πŸ‘‘.

[PWTC] defines some of the object types used in these modules 🫢.


7. ATM-PW MIB Usage πŸŽ€

okay so this section is a walkthrough of how you'd actually use the MIB objects from section 9 to set up an ATM PW πŸ’– It's not every single permutation (that would be a whole novel bestie 😭), but it's great for getting the key ideas, and you should read it after you've gone through the MIB itself. If you want an example of setting up a PSN Tunnel, check out [PWMIB] ✨

Here's the scenario πŸ‘€ A switch/router gets cells through an ATM Interface with IfIndex 1000 [IFMIB], on VPI 1 and VCI 100. That's the outbound direction, from the ATM network to the PSN. On the way back, the cells leave through ATM Interface 1000 again with VPI 1 and VCI 100. That's the inbound direction, from the PSN to the ATM network πŸ¦‹

The user sets it up in a specific order: first create an entry in the PW MIB with pwType atmAal5SduVcc(2), then fill in the pwAtmCfg table and the inbound and outbound tables 🫢

In PW ATM MIB
In pwAtmCfgTable:

pwAtmCfgMaxCellConcatenation 29
pwAtmCfgTimeoutMode enabled(3)
pwAtmClpQosMapping false(0) --CLP will not be mapped to QoS
pwAtmOamCellSupported true(1)  --OAM cells will be supported

In pwAtmOutboundTable:
{
 pwAtmOutboundAtmIf             1000    --Outbound AtmIf
 pwAtmOutboundVpi               1       --Outbound VPI
 pwAtmOutboundVci               100     --Outbound VCI
 pwAtmOutboundTrafficParamDescr 0.0     --Best Effort
 pwAtmOutboundRowStatus         createAndGo
}

In pwAtmInboundTable
{
 pwAtmInboundAtmIf             1000 --Inbound AtmIf
 pwAtmInboundVpi               1    --Inbound VPI
 pwAtmInboundVci               100  --Inbound VCI
 pwAtmInboundTrafficParamDescr 0.0  --Best Effort
 pwAtmInboundRowStatus         createAndGo
}

8. Structure of the MIB Module 🧚

okay so the MIB is made up of 4 types of tables πŸ’…

One thing to really lock in: the TrafficParamDescr Table is not defined as part of this MIB πŸ™ˆ But every configuration table here has an object that points at a row in that table. If you need to override the TD assigned to the ATM endpoint, you can point to any ATM TrafficDescr (TD) Table, as long as it's in the ATM service MIB [AToM] ✨

  • PW ATM Cfg Table: the generic settings for ATM PW configuration. These apply to every ATM PW πŸ“
  • PW ATM Outbound Table: there are two of these, picked based on the type of service. One is for 1:1 service, and the other covers N:1 service and transparent cell mode [ATMTRANS] πŸ’œ
  • PW ATM Inbound Table: same deal, two tables, one for 1:1 service and one for N:1 service and transparent cell mode 🌈
  • PW ATM Perf Table: three tables, each holding the time-dependent statistics for an ATM PW entry πŸ“Š There's a current table, a 15-minute interval table, and a one-day interval table. They line up with the statistics models used by other PW services, which is very organized of them 🫢

9. Object Definition πŸ‘‘

Here's the whole MIB module, copied exactly as written. Don't you dare touch a single character 😀πŸ”₯

PW-ATM-MIB DEFINITIONS ::= BEGIN

    IMPORTS
    MODULE-IDENTITY, OBJECT-TYPE,
    Counter32, Unsigned32, mib-2
          FROM SNMPv2-SMI

    MODULE-COMPLIANCE, OBJECT-GROUP
          FROM SNMPv2-CONF

    TruthValue, RowStatus, RowPointer
          FROM SNMPv2-TC

    PerfCurrentCount, PerfIntervalCount
          FROM PerfHist-TC-MIB

    InterfaceIndex
          FROM IF-MIB

    pwIndex
          FROM PW-STD-MIB

    AtmVpIdentifier, AtmVcIdentifier
          FROM ATM-TC-MIB;

      pwAtmMIB MODULE-IDENTITY
      LAST-UPDATED "200906160000Z"  -- 16 June 2009
      ORGANIZATION "Pseudowire Emulation Edge-to-Edge (PWE3)
                    Working Group"
      CONTACT-INFO
          "Thomas D. Nadeau
           Postal: BT
                   BT Centre
                   81 Newgate Street
                   London  EC1A 7AJ
                   United Kingdom

           Email:  tom.nadeau@bt.com

           Orly Nicklass
           Postal: RADVISION Ltd.
                  24 Raul Wallenberg
                  Tel Aviv, Israel
           Email: orlyn@radvision.com

           Discussion and general questions should be posed to
           the PWE3 Working Group (pwe3@ietf.org)."

      DESCRIPTION
          "This MIB contains managed object definitions for
           pseudowire emulation of ATM over Packet Switched
           Networks (PSNs).

           This MIB supplements the PW-STD-MIB module.
           The PW-STD-MIB contains structures and MIB associations
           generic to pseudowire (PW) emulation.  PW-specific
           MIBs (such as this) contain config and stats for specific
           PW types.

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

           Redistribution and use in source and binary forms, with or
           without modification, are permitted provided that the
           following conditions are met:

           - Redistributions of source code must retain the above
             copyright notice, this list of conditions and the
             following disclaimer.

           - Redistributions in binary form must reproduce the above
             copyright notice, this list of conditions and the
             following disclaimer in the documentation and/or other
             materials provided with the distribution.

           - Neither the name of Internet Society, IETF or IETF Trust,
             nor the names of specific contributors, may be used to
             endorse or promote products derived from this software
             without specific prior written permission.

           THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
           CONTRIBUTORS 'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES,
           INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
           MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
           DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
           CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
           SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
           NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
           LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
           HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
           CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
           OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
           SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

           This version of this MIB module is part of RFC 5605;
           see the RFC itself for full legal notices.
           "

      -- Revision history.

      REVISION "200906160000Z"  -- 16 June 2009
      DESCRIPTION "Initial version published as RFC 5605."

         ::= { mib-2 183 }

    -- Top-level components of this MIB

    pwAtmNotifications OBJECT IDENTIFIER ::= { pwAtmMIB 0 }
    pwAtmObjects       OBJECT IDENTIFIER ::= { pwAtmMIB 1 }
    pwAtmConformance   OBJECT IDENTIFIER ::= { pwAtmMIB 2 }

-- ATM PW PSN Bound(Outbound) Table for 1 to 1 connection

pwAtmOutboundTable OBJECT-TYPE
    SYNTAX    SEQUENCE OF PwAtmOutboundEntry
    MAX-ACCESS        not-accessible
    STATUS            current
    DESCRIPTION
        "This table specifies the information for an ATM PW to
        be carried over the PSN in the outbound direction.  An
        entry is created in this table for every entry in
        the pwTable with a pwType equal to one of the following:
        atmAal5SduVcc(2), atmCell1to1Vcc(12), atmCell1to1Vpc(13)
        or atmAal5PduVcc(14), or atmTransparent(3)."
    ::= { pwAtmObjects 1 }

pwAtmOutboundEntry OBJECT-TYPE
    SYNTAX        PwAtmOutboundEntry
    MAX-ACCESS    not-accessible
    STATUS        current
    DESCRIPTION
        "A row in this table represents an ATM PW that needs to be
         adapted and carried over the PSN.  This table is indexed by
         pwIndex from pwTable.  Unless otherwise specified, all
         writeable objects in this table MUST NOT be changed after
         row activation in the generic pwTable, and values must
         persist after reboot."
    REFERENCE
      "See [PWMIB]."

    INDEX { pwIndex }
    ::= { pwAtmOutboundTable 1 }

PwAtmOutboundEntry ::= SEQUENCE {
      pwAtmOutboundAtmIf                InterfaceIndex,
      pwAtmOutboundVpi                  AtmVpIdentifier,
      pwAtmOutboundVci                  AtmVcIdentifier,
      pwAtmOutboundTrafficParamDescr    RowPointer,
      pwAtmOutboundRowStatus            RowStatus
      }

pwAtmOutboundAtmIf OBJECT-TYPE
    SYNTAX        InterfaceIndex
    MAX-ACCESS    read-create
    STATUS        current
    DESCRIPTION
        "The ATM Interface that receives cells from the ATM
        network."
    ::= { pwAtmOutboundEntry 1 }

pwAtmOutboundVpi OBJECT-TYPE
    SYNTAX        AtmVpIdentifier
    MAX-ACCESS    read-create
    STATUS        current
    DESCRIPTION
        "VPI value of this ATM PW.  The value may indicate the
        translated value when egress generates new VPI."
    ::= { pwAtmOutboundEntry 2 }

pwAtmOutboundVci OBJECT-TYPE
    SYNTAX        AtmVcIdentifier
    MAX-ACCESS    read-create
    STATUS        current
    DESCRIPTION
        "VCI value of this ATM PW.  The value may indicate the
        translated value when egress generates new VCI."
    ::= { pwAtmOutboundEntry 3 }

pwAtmOutboundTrafficParamDescr OBJECT-TYPE
    SYNTAX        RowPointer
    MAX-ACCESS    read-create
    STATUS        current
    DESCRIPTION
        "This object represents a pointer to an ATM
         traffic-parameter-specific row in either a private or
         standard table that will be employed while receiving
         cells from the ATM network.  This row should contain a
         set of self-consistent ATM traffic parameters including
         the ATM traffic service category.
         A value of 0.0 indicates Best Effort."
     ::= { pwAtmOutboundEntry 4 }

pwAtmOutboundRowStatus OBJECT-TYPE
    SYNTAX        RowStatus
    MAX-ACCESS    read-create
    STATUS        current
    DESCRIPTION
        "This object is used to create, modify, or delete a row in
         this table.  Unless otherwise specified, all writeable
         objects in this table MUST NOT be changed after row
         activation as explained in the pwAtmOutboundEntry. "
    ::= { pwAtmOutboundEntry 5 }

-- End of ATM PW Outbound Table

-- ATM PW CE Bound(Inbound) Table for 1 to 1 mode

pwAtmInboundTable OBJECT-TYPE
    SYNTAX    SEQUENCE OF PwAtmInboundEntry
    MAX-ACCESS        not-accessible
    STATUS            current
    DESCRIPTION
        "This table specifies the information for an ATM PW in the
         inbound direction."
    ::= { pwAtmObjects 3 }

pwAtmInboundEntry OBJECT-TYPE
    SYNTAX    PwAtmInboundEntry
    MAX-ACCESS    not-accessible
    STATUS        current
    DESCRIPTION
        "A row in this table represents an ATM PW that needs to be
         sent into the ATM network after reconstructing cells from
         packets received from a PSN.  This table is indexed by
         pwIndex from pwTable.  An entry is created in this table
         for every entry in the pwTable with a
         pwType equal to one of the following:
         atmAal5SduVcc(2), atmCell1to1Vcc(12), atmCell1to1Vpc(13),
         atmAal5PduVcc(14), or atmTransparent(3).  Unless otherwise
         specified, all writeable objects in this table MUST NOT
         be changed after row activation in the generic pwTable,
         and values must persist after reboot."
    REFERENCE
      "See [PWMIB]."

    INDEX { pwIndex }
    ::= { pwAtmInboundTable 1 }

Okay so the inbound row is where things get spicy πŸŒΆοΈπŸ’– Here's the entry layout, bestie:

PwAtmInboundEntry ::= SEQUENCE {
      pwAtmInboundAtmIf                 InterfaceIndex,
      pwAtmInboundVpi                   AtmVpIdentifier,
      pwAtmInboundVci                   AtmVcIdentifier,
      pwAtmInboundTrafficParamDescr     RowPointer,
      pwAtmInboundRowStatus             RowStatus
          }

The ATM interface column is first, then the VPI and VCI, then the traffic params pointer, then the row status. So iconic πŸŽ€

pwAtmInboundAtmIf OBJECT-TYPE
    SYNTAX        InterfaceIndex
    MAX-ACCESS    read-create
    STATUS        current
    DESCRIPTION
        "The ATM Interface that sends cells into the ATM network
        after reconstructing cells from packets received from
        a PSN."
    ::= { pwAtmInboundEntry 1 }

pwAtmInboundVpi OBJECT-TYPE
    SYNTAX        AtmVpIdentifier
    MAX-ACCESS    read-create
    STATUS        current
    DESCRIPTION
        "VPI value of this ATM PW.
         If the pwType is atmTransparent, then the value will
         be set to zero."
        ::= { pwAtmInboundEntry 2 }

pwAtmInboundVci OBJECT-TYPE
    SYNTAX        AtmVcIdentifier
    MAX-ACCESS    read-create
    STATUS        current
    DESCRIPTION
        "VCI value of this ATM PW.
         If the pwType is atmTransparent, atmCell1to1Vpc, or
         atmCellNto1Vpc, then the value will be set to zero."
        ::= { pwAtmInboundEntry 3 }

So for the VPI and VCI, if the pwType is atmTransparent, they get set to zero. And for the VCI, atmCell1to1Vpc and atmCellNto1Vpc also get zero. Noted πŸ¦‹

pwAtmInboundTrafficParamDescr OBJECT-TYPE

    SYNTAX        RowPointer
    MAX-ACCESS    read-create
    STATUS        current
    DESCRIPTION
        "This object represents a pointer to an ATM traffic-parameter-
         specific row in either a private or standard table that will
         be employed while transmitting into the ATM network.  This
         table contains a set of self-consistent ATM traffic parameters
         including the ATM traffic service category.  A value of 0.0
         indicates Best Effort."

        ::= { pwAtmInboundEntry 4 }

pwAtmInboundRowStatus OBJECT-TYPE
    SYNTAX        RowStatus
    MAX-ACCESS    read-create
    STATUS        current
        DESCRIPTION
        "This object is used to create, modify, or delete a row in
         this table.  Unless otherwise specified, all writeable
         objects in this table MUST NOT be changed after row
         activation as explained in the pwAtmInboundEntry. "
        ::= { pwAtmInboundEntry 5 }

The row status is the boss here πŸ‘‘ Its description says that, unless stated otherwise, the writeable objects in this table MUST NOT be changed after row activation. Ngl that's a strict vibe, but it's the rule πŸ’…


-- End of ATM PW Inbound Table

--Generic ATM PW table for all types of ATM PW connection.

pwAtmCfgTable OBJECT-TYPE
    SYNTAX    SEQUENCE OF PwAtmCfgEntry
    MAX-ACCESS        not-accessible
    STATUS            current
    DESCRIPTION
        "This table specifies generic information for an ATM PW
         to be carried over PSN in any mode."
    ::= { pwAtmObjects 5 }

    pwAtmCfgEntry OBJECT-TYPE
    SYNTAX        PwAtmCfgEntry
    MAX-ACCESS    not-accessible
    STATUS        current
    DESCRIPTION
         "This table contains a set of parameters for
         the ATM PW that needs to be adapted and carried
         over the PSN.  This table is indexed by pwIndex from
         pwTable.  An entry is created for every new ATM
         type associated pwIndex in the pwTable.  Unless
         otherwise specified, all read-write objects in
         this table MAY be changed when the PW is defined
         as not active, and all RW objects values must
         persist after reboot."
    REFERENCE
      "See [PWMIB]."

    INDEX { pwIndex }
    ::= { pwAtmCfgTable 1 }

PwAtmCfgEntry ::= SEQUENCE {
        pwAtmCfgMaxCellConcatenation       Unsigned32,
        pwAtmCfgFarEndMaxCellConcatenation Unsigned32,
        pwAtmCfgTimeoutMode                INTEGER,
        pwAtmClpQosMapping                 TruthValue
                }

Okay, the generic config table is the one for all ATM PW types 🌈 Its entry lets read-write objects MAY be changed when the PW is not active, and they must persist after reboot. Slay πŸ’œ

pwAtmCfgMaxCellConcatenation OBJECT-TYPE
     SYNTAX        Unsigned32 (1..29)
     MAX-ACCESS    read-write
     STATUS        current
     DESCRIPTION
         "The maximum number of ATM cells that can be
          concatenated into one PW packet towards the PSN.
          In a non-LDP or other signaling protocol environment,
          this object MAY be changed at anytime, but traffic
          might be interrupted; otherwise, it may be changed
          when PW is not active."
    ::= { pwAtmCfgEntry 1 }

pwAtmCfgFarEndMaxCellConcatenation OBJECT-TYPE
     SYNTAX        Unsigned32 (1..29)
     MAX-ACCESS    read-write
     STATUS        current
     DESCRIPTION
         "The maximum number of ATM cells that can be
          concatenated into one PW packet towards PSN as reported by
          the far end.  If there is no LDP in use, the object will
          either return a value of 0 or allow setting it for calculating
          protocol overhead."
    ::= { pwAtmCfgEntry 2 }

pwAtmCfgTimeoutMode OBJECT-TYPE
     SYNTAX        INTEGER
                        {
                         notApplicable (1),
                         disabled      (2),
                         enabled       (3)
                        }

     MAX-ACCESS    read-write
     STATUS        current
     DESCRIPTION
         "This object determines whether or not a packet can be
          transmitted to the PSN based on timeout expiration
          for collecting cells.  The actual handling of the
          timeout is implementation-specific; as such,
          this object may be changed at any time under proper
          consideration of the traffic interruption effect."
    ::= { pwAtmCfgEntry 3 }

pwAtmClpQosMapping OBJECT-TYPE
    SYNTAX        TruthValue
    MAX-ACCESS    read-write
    STATUS        current
    DESCRIPTION
        "This object indicates whether the Cell Loss Priority
         (CLP) bits should be considered when setting the
         value in the Quality-of-Service fields of the
         encapsulating protocol (e.g., EXP fields of the
         MPLS Label Stack).  Selecting True allows the drop
         precedence to be preserved across the PSN.  In
         transparent cell transport, the value of this object
         MUST be false(2); in other cases, it can be changed
         at any time."
    REFERENCE
      "See section 12 of [ATMENCAP]."
    ::= { pwAtmCfgEntry 4 }

The CLP mapping one is a big deal πŸ™ˆ In transparent cell transport, this object MUST be false(2). Otherwise it can be changed at any time. Also it points to section 12 of [ATMENCAP] for the deets 🧚

-- Device capable of implementing N:1, 1:1, and transparent cell
-- mode assumes to support the N:1 table for all
-- modes with respective applicable setting.
-- In such implementation, user can create an entry for either
-- 1:1 or transparent cell transport modes only
-- in pwAtmInboundNto1Table. The side effect of such
-- will be an automatic create of the respective line in the
-- pwAtmOutboundNto1Table.

-- ATM PW Outbound Table for N to 1 connection

pwAtmOutboundNto1Table OBJECT-TYPE
    SYNTAX    SEQUENCE OF PwAtmOutboundNto1Entry
    MAX-ACCESS        not-accessible
    STATUS            current
    DESCRIPTION
        "This table specifies the information for an ATM PW to
        be carried over the PSN in the outbound direction.  Up to
        N entries can be created in this table for every
        entry in the pwTable with a pwType equal to:
        atmCellNto1Vcc(9) or atmCellNto1Vpc(10).
        An entry can be created only when the VP/VC are known.
        A single entry will be created in this table for every
        entry in the pwTable with a pwType equal to
        one of the following: atmCell1to1Vcc(12),
        atmCell1to1Vpc(13), atmAal5PduVcc(14),
        atmAal5SduVcc(2), or atmTransparent(3).
        "
    ::= { pwAtmObjects 6 }

pwAtmOutboundNto1Entry OBJECT-TYPE
    SYNTAX        PwAtmOutboundNto1Entry
    MAX-ACCESS    not-accessible
    STATUS        current
    DESCRIPTION
        "A row in this table represents an ATM PW that needs to be
         adapted and carried over PSN.  This table is indexed by
         pwIndex from pwTable and the ATM interface with VPL/VCLs.
         In atmTransparent(3), Vpi and VCi will be 0xFFFF
         during set operation.
         Unless otherwise specified, all read-create objects in this
         table MUST NOT be changed after row activation
         and SHOULD remain unchanged after reboot."
    INDEX { pwIndex, pwAtmOutboundNto1AtmIf ,
                        pwAtmOutboundNto1Vpi,
                        pwAtmOutboundNto1Vci  }
    ::= { pwAtmOutboundNto1Table 1 }

PwAtmOutboundNto1Entry ::= SEQUENCE {
      pwAtmOutboundNto1AtmIf                    InterfaceIndex,
      pwAtmOutboundNto1Vpi                      AtmVpIdentifier,
      pwAtmOutboundNto1Vci                      AtmVcIdentifier,
      pwAtmOutboundNto1RowStatus                RowStatus,
      pwAtmOutboundNto1TrafficParamDescr        RowPointer,
      pwAtmOutboundNto1MappedVpi                AtmVpIdentifier,
      pwAtmOutboundNto1MappedVci                AtmVcIdentifier
     }

pwAtmOutboundNto1AtmIf OBJECT-TYPE
    SYNTAX        InterfaceIndex
    MAX-ACCESS    not-accessible
    STATUS        current
    DESCRIPTION
        "The ATM Interface that receives cells from the ATM network."
    ::= { pwAtmOutboundNto1Entry 1 }

pwAtmOutboundNto1Vpi OBJECT-TYPE

    SYNTAX        AtmVpIdentifier
    MAX-ACCESS    not-accessible
    STATUS        current
    DESCRIPTION
        "VPI value of this ATM PW.  In atmTransparent(3),
         Vpi will be the equivalent of 0xFFFF."
    ::= { pwAtmOutboundNto1Entry 2 }

pwAtmOutboundNto1Vci OBJECT-TYPE
    SYNTAX        AtmVcIdentifier
    MAX-ACCESS    not-accessible
    STATUS        current
    DESCRIPTION
        "VCI value of this ATM PW.  In atmTransparent(3), or
         the VP case, the value will be the equivalent of
         0xFFFF."
    ::= { pwAtmOutboundNto1Entry 3 }

pwAtmOutboundNto1RowStatus OBJECT-TYPE
    SYNTAX        RowStatus
    MAX-ACCESS    read-create
    STATUS        current
    DESCRIPTION
        "This object is used to create, modify or delete a row in
         this table."
    ::= { pwAtmOutboundNto1Entry 4 }

pwAtmOutboundNto1TrafficParamDescr OBJECT-TYPE
    SYNTAX        RowPointer
    MAX-ACCESS    read-create
    STATUS        current
    DESCRIPTION
        "This object represents a pointer to an ATM traffic-parameter-
         specific row in either private or standard table that will
         be employed while receiving cells from the ATM network.
         This table should contain a set
         of self-consistent ATM traffic parameters including the ATM
         traffic service category.  A value of 0.0 indicates Best
         Effort."

    ::= { pwAtmOutboundNto1Entry 5 }

pwAtmOutboundNto1MappedVpi         OBJECT-TYPE
    SYNTAX        AtmVpIdentifier
    MAX-ACCESS    read-create
    STATUS        current
    DESCRIPTION
        "The egress-generated VPI value of this ATM PW.  The
        entry is valid for PW type of atmCellNto1Vcc(9),
        atmCellNto1Vpc(10), atmCell1to1Vcc(12), or
        atmCell1to1Vpc(13).  In other types, the value will be the
        equivalent of 0xFFFF.  Value MAY be changed when the
        PW is defined as not active. "
    ::= { pwAtmOutboundNto1Entry 6 }

pwAtmOutboundNto1MappedVci      OBJECT-TYPE
    SYNTAX        AtmVcIdentifier
    MAX-ACCESS    read-create
    STATUS        current
    DESCRIPTION
        "The egress-generated VCI value of this ATM PW.  The
        entry is valid for PW type of atmCellNto1Vcc(9),
        atmCellNto1Vpc(10), atmCell1to1Vcc(12), or
        atmCell1to1Vpc(13.  In the VP case or other types, the
        value will be the equivalent of 0xFFFF.
        Value MAY be changed when the PW is defined
        as not active."
    ::= { pwAtmOutboundNto1Entry 7 }

-- ATM PW Inbound Table for N to 1 connection

And that's where the N to 1 outbound stuff wraps up, with the inbound N to 1 table coming up next πŸ“βœ¨

okay bestie, we're now in the inbound N:1 table, and this is where the cells coming in from the ATM network get sorted πŸ¦‹

pwAtmInboundNto1Table OBJECT-TYPE
    SYNTAX    SEQUENCE OF PwAtmInboundNto1Entry
    MAX-ACCESS        not-accessible
    STATUS            current
    DESCRIPTION
        "This table specifies the information for an ATM PW
        be carried over PSN in the Inbound direction.  Up to
        N entries can be created in this table for every
        entry in the pwTable with a pwType equal to:
        atmCellNto1Vcc(9) or atmCellNto1Vpc(10).
        An entry can be created only when the VP/VC are known.
        A single entry will be created in this table for every
        entry in the pwTable with a pwType equal to
        one of the following: atmCell1to1Vcc(12),
        atmCell1to1Vpc(13), atmAal5PduVcc(14),
        atmAal5SduVcc(2), or atmTransparent(3)."
    ::= { pwAtmObjects 7 }

pwAtmInboundNto1Entry OBJECT-TYPE
    SYNTAX        PwAtmInboundNto1Entry
    MAX-ACCESS    not-accessible
    STATUS        current
    DESCRIPTION
        "A row in this table represents an ATM PW that needs to be
         adapted and carried over PSN.  This table is indexed by
         pwIndex from pwTable and the ATM interface with VPL/VCLs.
         In atmTransparent(3), Vpi and VCi will be 0xFFFF
         during set operation.
         Unless otherwise specified, all Read-Create objects in this
         table MUST NOT be changed after row activation
         and SHOULD remain unchanged after reboot."
    INDEX { pwIndex, pwAtmInboundNto1AtmIf ,
                        pwAtmInboundNto1Vpi,
                        pwAtmInboundNto1Vci
                        }
    ::= { pwAtmInboundNto1Table 1 }

PwAtmInboundNto1Entry ::= SEQUENCE {
      pwAtmInboundNto1AtmIf                InterfaceIndex,
      pwAtmInboundNto1Vpi                  AtmVpIdentifier,
      pwAtmInboundNto1Vci                  AtmVcIdentifier,
      pwAtmInboundNto1RowStatus            RowStatus,
      pwAtmInboundNto1TrafficParamDescr    RowPointer,
      pwAtmInboundNto1MappedVpi            AtmVpIdentifier,
      pwAtmInboundNto1MappedVci            AtmVcIdentifier
    }

the table entry rules are the vibe check here πŸ’… Read-Create objects in a row must not get changed once the row is active, and they should stay put after a reboot πŸ™ˆ

pwAtmInboundNto1AtmIf OBJECT-TYPE
    SYNTAX        InterfaceIndex
    MAX-ACCESS    not-accessible
    STATUS        current
    DESCRIPTION
        "The ATM Interface that receives cells from the ATM network."
    ::= { pwAtmInboundNto1Entry 1 }

pwAtmInboundNto1Vpi OBJECT-TYPE
    SYNTAX        AtmVpIdentifier
    MAX-ACCESS    not-accessible
    STATUS        current
    DESCRIPTION
        "VPI value of this ATM PW.  In atmTransparent(3),
         Vpi will be the equivalent of 0xFFFF."
    ::= { pwAtmInboundNto1Entry 2 }

pwAtmInboundNto1Vci OBJECT-TYPE
    SYNTAX        AtmVcIdentifier
    MAX-ACCESS    not-accessible
    STATUS        current
    DESCRIPTION
        "VCI value of this ATM PW.  In atmTransparent(3), or
         the VP case, the value will be the equivalent of
         0xFFFF."
    ::= { pwAtmInboundNto1Entry 3 }

pwAtmInboundNto1RowStatus OBJECT-TYPE
    SYNTAX        RowStatus
    MAX-ACCESS    read-create
    STATUS        current
    DESCRIPTION
        "This object is used to create, modify, or delete a row in
        this table."
    ::= { pwAtmInboundNto1Entry 4 }

pwAtmInboundNto1TrafficParamDescr OBJECT-TYPE
    SYNTAX        RowPointer
    MAX-ACCESS    read-create
    STATUS        current
    DESCRIPTION
        "This object represents a pointer to an ATM traffic-parameter-
         specific row in either a private or standard table that will
         be employed while receiving cells from the ATM network.
         This table should contain a set
         of self-consistent ATM traffic parameters including the ATM
         traffic service category.  A value of 0.0 indicates Best
         Effort."

    ::= { pwAtmInboundNto1Entry 5 }

pwAtmInboundNto1MappedVpi    OBJECT-TYPE
    SYNTAX        AtmVpIdentifier
    MAX-ACCESS    read-create
    STATUS        current
    DESCRIPTION
        "The generated VPI value of this ATM PW.  The
        entry is valid for PW type of atmCellNto1Vcc(9),
        atmCellNto1Vpc(10), atmCell1to1Vcc(12), or
        atmCell1to1Vpc(13).  In other types, the value will be the
        equivalent of 0xFFFF.  Value MAY be changed when the
        PW is defined as not active."
    ::= { pwAtmInboundNto1Entry 6 }

pwAtmInboundNto1MappedVci     OBJECT-TYPE
    SYNTAX        AtmVcIdentifier
    MAX-ACCESS    read-create
    STATUS        current
    DESCRIPTION
        "The generated VCI value of this ATM PW.  The
        entry is valid for PW type of atmCellNto1Vcc(9),
        atmCellNto1Vpc(10), atmCell1to1Vcc(12), or
        atmCell1to1Vpc(13.  In the VP case or other types, the
        value will be the equivalent of 0xFFFF.
        Value MAY be changed when the
        PW is defined as not active."
    ::= { pwAtmInboundNto1Entry 7 }

the mapped VPI and VCI can be changed, but only while the PW is not active, so plan ahead 🧚


next up is the ATM PW Outbound Perf Table, which keeps the counters that sit on top of the PW generic MIB counters πŸ“Šβœ¨

-- ATM PW Outbound Perf Table

-- The following supplement the counters presented in the
-- PW generic MIB

-- ATM PW Performance Current Table.

pwAtmPerfCurrentTable OBJECT-TYPE
  SYNTAX        SEQUENCE OF PwAtmPerfCurrentEntry
  MAX-ACCESS    not-accessible
  STATUS        current
  DESCRIPTION
      "The current 15-minute interval counts are in
       this table.
       This table provides performance information per ATM PW."
  ::= { pwAtmObjects 8 }

pwAtmPerfCurrentEntry OBJECT-TYPE
  SYNTAX        PwAtmPerfCurrentEntry
  MAX-ACCESS    not-accessible
  STATUS        current
  DESCRIPTION
      "An entry in this table is created by the agent for every
       pwAtmCfgTable entry.  After 15 minutes, the contents of this
       table entry are copied to a new entry in the
       pwAtmPerfInterval table and the counts in this entry
       are reset to zero."
  INDEX  { pwIndex }
  ::= { pwAtmPerfCurrentTable 1 }

PwAtmPerfCurrentEntry ::= SEQUENCE {
     pwAtmPerfCurrentMissingPkts    PerfCurrentCount,
     pwAtmPerfCurrentPktsReOrder    PerfCurrentCount,
     pwAtmPerfCurrentPktsMisOrder   PerfCurrentCount,
     pwAtmPerfCurrentPktsTimeout    PerfCurrentCount,
     pwAtmPerfCurrentCellsXmit      PerfCurrentCount,
     pwAtmPerfCurrentCellsDropped   PerfCurrentCount,
     pwAtmPerfCurrentCellsReceived  PerfCurrentCount,
     pwAtmPerfCurrentUnknownCells   PerfCurrentCount
  }

pwAtmPerfCurrentMissingPkts OBJECT-TYPE
  SYNTAX        PerfCurrentCount
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION
      "Number of missing packets (as detected via control word
       sequence number gaps)."
  ::= { pwAtmPerfCurrentEntry 1 }

pwAtmPerfCurrentPktsReOrder OBJECT-TYPE
  SYNTAX        PerfCurrentCount
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION
      "Number of packets detected out of sequence (via control
       word sequence number), but successfully re-ordered.
       Note: some implementations may not support this feature."
  ::= { pwAtmPerfCurrentEntry 2 }

pwAtmPerfCurrentPktsMisOrder OBJECT-TYPE
  SYNTAX        PerfCurrentCount
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION
      "Number of packets detected out of order (via control word
       sequence numbers)."
   ::= { pwAtmPerfCurrentEntry 3 }

pwAtmPerfCurrentPktsTimeout OBJECT-TYPE
  SYNTAX        PerfCurrentCount
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION
      "Number of packets transmitted due to timeout expiration
       while attempting to collect cells."
   ::= { pwAtmPerfCurrentEntry 4 }

pwAtmPerfCurrentCellsXmit OBJECT-TYPE
  SYNTAX        PerfCurrentCount
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION
      "Number of transmitted cells."
   ::= { pwAtmPerfCurrentEntry 5 }

pwAtmPerfCurrentCellsDropped OBJECT-TYPE
  SYNTAX        PerfCurrentCount
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION
      "Number of dropped cells."
   ::= { pwAtmPerfCurrentEntry 6 }

pwAtmPerfCurrentCellsReceived OBJECT-TYPE
  SYNTAX        PerfCurrentCount
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION
      "Number of received cells."
   ::= { pwAtmPerfCurrentEntry 7 }

pwAtmPerfCurrentUnknownCells OBJECT-TYPE
  SYNTAX        PerfCurrentCount
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION
      "Number of cells received from the PSN with unknown VPI or
      VCI values.  This object is relevant only in N:1 mode."
   ::= { pwAtmPerfCurrentEntry 8 }

-- End ATM PW Performance Current Interval Table

the current table is the live counter scoreboard for every ATM PW, and it resets after each 15 minutes πŸŽ€ the unknown cells counter only matters in N:1 mode, so keep that in mind πŸ’œ

-- ATM PW Performance Interval Table.

pwAtmPerfIntervalTable OBJECT-TYPE
  SYNTAX        SEQUENCE OF PwAtmPerfIntervalEntry
  MAX-ACCESS    not-accessible
  STATUS        current
  DESCRIPTION
      "This table provides performance information per ATM PW
       similar to the pwAtmPerfCurrentTable above.  However,
       these counts represent historical 15 minute intervals.
       Typically, this table will have a maximum of 96 entries
       for a 24 hour period. "
  ::= { pwAtmObjects 9 }

pwAtmPerfIntervalEntry OBJECT-TYPE
  SYNTAX        PwAtmPerfIntervalEntry
  MAX-ACCESS    not-accessible
  STATUS        current
  DESCRIPTION
      "An entry in this table is created by the agent for
       every pwAtmPerfCurrentEntry that is 15 minutes old.
       The contents of the Current entry are copied to the new
       entry here.  The Current entry then resets its counts
       to zero for the next current 15 minute interval. "
  INDEX  { pwIndex, pwAtmPerfIntervalNumber }
  ::= { pwAtmPerfIntervalTable 1 }

PwAtmPerfIntervalEntry ::= SEQUENCE {
     pwAtmPerfIntervalNumber         Unsigned32,
     pwAtmPerfIntervalValidData      TruthValue,
     pwAtmPerfIntervalDuration       Unsigned32,
     pwAtmPerfIntervalMissingPkts    PerfIntervalCount,
     pwAtmPerfIntervalPktsReOrder    PerfIntervalCount,
     pwAtmPerfIntervalPktsMisOrder   PerfIntervalCount,
     pwAtmPerfIntervalPktsTimeout    PerfIntervalCount,
     pwAtmPerfIntervalCellsXmit      PerfIntervalCount,
     pwAtmPerfIntervalCellsDropped   PerfIntervalCount,
     pwAtmPerfIntervalCellsReceived  PerfIntervalCount,
     pwAtmPerfIntervalUnknownCells   PerfIntervalCount
     }

pwAtmPerfIntervalNumber OBJECT-TYPE
  SYNTAX        Unsigned32 (1..96)
  MAX-ACCESS    not-accessible
  STATUS        current
  DESCRIPTION
      "A number (normally between 1 and 96 to cover a 24 hour
       period) that identifies the interval for which the set
       of statistics is available.  The interval identified by 1
       is the most recently completed 15 minute interval, and
       the interval identified by N is the interval immediately
       preceding the one identified by N-1.  The minimum range of
       N is 1 through 4.  The default range is 1 through 32.  The
       maximum value of N is 96."
  ::= { pwAtmPerfIntervalEntry 1 }

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

pwAtmPerfIntervalDuration OBJECT-TYPE
   SYNTAX      Unsigned32
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
     "The duration of a particular interval in seconds.
      Adjustments in the system's time-of-day clock, may
      cause the interval to be greater or less than the
      normal value.  Therefore, this actual interval value
      is provided."
   ::= { pwAtmPerfIntervalEntry 3 }

pwAtmPerfIntervalMissingPkts OBJECT-TYPE
  SYNTAX        PerfIntervalCount
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION
      "Number of missing packets (as detected via control
       word sequence number gaps)."
  ::= { pwAtmPerfIntervalEntry 4 }

ok that's the end of this chunk, and the interval table is basically the historical diary of those 15-minute windows πŸ“–πŸŒΈ we're still going, so stay tuned 🫢

okay so the interval table's next crew is all about packets that show up out of order and cells that get counted, dropped, or thrown out πŸŽ€πŸ’…

pwAtmPerfIntervalPktsReOrder OBJECT-TYPE
  SYNTAX        PerfIntervalCount
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION
      "Number of packets detected out of sequence (via control
       word sequence number), but successfully re-ordered.
       Note: some implementations may not support this
       feature."
  ::= { pwAtmPerfIntervalEntry 5 }

 pwAtmPerfIntervalPktsMisOrder OBJECT-TYPE
  SYNTAX        PerfIntervalCount
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION
      "Number of packets detected out of order (via control word
       sequence numbers)."
  ::= { pwAtmPerfIntervalEntry 6 }

pwAtmPerfIntervalPktsTimeout OBJECT-TYPE
  SYNTAX        PerfIntervalCount
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION
      "Number of packets transmitted due to timeout expiration."
   ::= { pwAtmPerfIntervalEntry 7 }

pwAtmPerfIntervalCellsXmit OBJECT-TYPE
  SYNTAX        PerfIntervalCount
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION
      "Number of transmitted cells."
   ::= { pwAtmPerfIntervalEntry 8 }

pwAtmPerfIntervalCellsDropped OBJECT-TYPE
  SYNTAX        PerfIntervalCount
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION
      "Number of dropped cells."
   ::= { pwAtmPerfIntervalEntry 9 }

pwAtmPerfIntervalCellsReceived OBJECT-TYPE
  SYNTAX        PerfIntervalCount
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION
      "Number of received cells."
   ::= { pwAtmPerfIntervalEntry 10 }

pwAtmPerfIntervalUnknownCells OBJECT-TYPE
  SYNTAX        PerfIntervalCount
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION
      "Number of cells received from the PSN with unknown VPI or
      VCI values.  This object is relevant only in N:1 mode."
   ::= { pwAtmPerfIntervalEntry 11 }

-- End ATM PW Performance Interval Table

-- ATM PW 1day Performance Table

pwAtmPerf1DayIntervalTable OBJECT-TYPE
  SYNTAX        SEQUENCE OF PwAtmPerf1DayIntervalEntry
  MAX-ACCESS    not-accessible
  STATUS        current
  DESCRIPTION
      "This table provides performance information per ATM PW
       similar to the pwAtmPerfIntervalTable above.  However,
       these counters represent historical one-day intervals up to
       one full month."
  ::= { pwAtmObjects 10 }

pwAtmPerf1DayIntervalEntry OBJECT-TYPE
  SYNTAX        PwAtmPerf1DayIntervalEntry
  MAX-ACCESS    not-accessible
  STATUS        current
  DESCRIPTION
      "An entry is created in this table by the agent
       for every entry in the pwAtmCfgTable table."
  INDEX  { pwIndex,pwAtmPerf1DayIntervalNumber }
     ::= { pwAtmPerf1DayIntervalTable 1 }

PwAtmPerf1DayIntervalEntry ::= SEQUENCE {

     pwAtmPerf1DayIntervalNumber          Unsigned32,
     pwAtmPerf1DayIntervalValidData       TruthValue,
     pwAtmPerf1DayIntervalDuration        Unsigned32,
     pwAtmPerf1DayIntervalMissingPkts     Counter32,
     pwAtmPerf1DayIntervalPktsReOrder     Counter32,
     pwAtmPerf1DayIntervalPktsMisOrder    Counter32,
     pwAtmPerf1DayIntervalPktsTimeout     Counter32,
     pwAtmPerf1DayIntervalCellsXmit       Counter32,
     pwAtmPerf1DayIntervalCellsDropped    Counter32,
     pwAtmPerf1DayIntervalCellsReceived   Counter32,
     pwAtmPerf1DayIntervalUnknownCells    Counter32
     }

the 1day table is basically the same vibe as the interval table, except these counters are for historical days, up to a whole month πŸ“…βœ¨

pwAtmPerf1DayIntervalNumber OBJECT-TYPE
  SYNTAX        Unsigned32 (1..365)
  MAX-ACCESS    not-accessible
  STATUS        current
  DESCRIPTION
      "The number of intervals, where 1 indicates current day
       measured period and 2 and above indicate previous days,
       respectively."
  ::= { pwAtmPerf1DayIntervalEntry 1 }

pwAtmPerf1DayIntervalValidData OBJECT-TYPE
  SYNTAX        TruthValue
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION
      "This object indicates if the data for this interval
       is valid."
  ::= { pwAtmPerf1DayIntervalEntry 2 }

pwAtmPerf1DayIntervalDuration OBJECT-TYPE
  SYNTAX      Unsigned32
  MAX-ACCESS  read-only
  STATUS      current
  DESCRIPTION
    "The duration of a particular interval in seconds.
     Adjustments in the system's time-of-day clock may
     cause the interval to be greater or less than the
     normal value.  Therefore, this actual interval value
     is provided."
  ::= { pwAtmPerf1DayIntervalEntry 3 }

pwAtmPerf1DayIntervalMissingPkts OBJECT-TYPE
  SYNTAX        Counter32
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION
    "Number of missing packets (as detected via control word
     sequence number gaps)."
  ::= { pwAtmPerf1DayIntervalEntry 4 }

pwAtmPerf1DayIntervalPktsReOrder OBJECT-TYPE
  SYNTAX        Counter32
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION
      "Number of packets detected out of sequence (via control
       word sequence number), but successfully re-ordered.
       Note: some implementations may not support this
       feature."
  ::= { pwAtmPerf1DayIntervalEntry 5 }

pwAtmPerf1DayIntervalPktsMisOrder OBJECT-TYPE
  SYNTAX        Counter32
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION
      "Number of packets detected out of order (via control word
       sequence numbers) and that could not be re-ordered."
  ::= { pwAtmPerf1DayIntervalEntry 6 }

pwAtmPerf1DayIntervalPktsTimeout OBJECT-TYPE
  SYNTAX        Counter32
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION
      "Number of packets transmitted due to timeout expiration."
   ::= { pwAtmPerf1DayIntervalEntry 7 }

pwAtmPerf1DayIntervalCellsXmit OBJECT-TYPE
  SYNTAX        Counter32
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION
      "Number of transmitted cells."
   ::= { pwAtmPerf1DayIntervalEntry 8 }

pwAtmPerf1DayIntervalCellsDropped OBJECT-TYPE
  SYNTAX        Counter32
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION
      "Number of dropped cells."
   ::= { pwAtmPerf1DayIntervalEntry 9 }

pwAtmPerf1DayIntervalCellsReceived OBJECT-TYPE
  SYNTAX        Counter32
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION
      "Number of received cells."
   ::= { pwAtmPerf1DayIntervalEntry 10 }

pwAtmPerf1DayIntervalUnknownCells OBJECT-TYPE
  SYNTAX        Counter32
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION
      "Number of cells received from the PSN with unknown VPI
      or VCI values.  This object is relevant only in N:1 mode."
   ::= { pwAtmPerf1DayIntervalEntry 11 }

-- End of ATM PW Performance table

next up, the conformance bit πŸŽ€ this is where we spell out which groups an agent has to bring to the party, and when each one is actually mandatory

    pwAtmCompliances OBJECT IDENTIFIER ::= { pwAtmConformance 1 }
    pwAtmGroups      OBJECT IDENTIFIER ::= { pwAtmConformance 2 }
    pwAtmCompliance MODULE-COMPLIANCE
    STATUS  current
    DESCRIPTION
            "The compliance statement for agents that support
             ATM PW."
    MODULE  -- this module
        MANDATORY-GROUPS { pwAtmCfgGroup,
                           pwAtmPerfGroup
                         }

       OBJECT pwAtmCfgFarEndMaxCellConcatenation
       MIN-ACCESS read-only
       DESCRIPTION
        "The ability to set this object
        is not required."

       GROUP        pwAtmOutbound1to1Group
       DESCRIPTION "This group is mandatory only for implementations
                    that support the ATM PW 1:1 mode and not using
                    the Nto1 table."

       GROUP        pwAtmInbound1to1Group
       DESCRIPTION "This group is mandatory only for implementations
                    that support the ATM PW 1:1 mode and not using
                    the Nto1 table."

       GROUP        pwAtmOutboundNto1Group
       DESCRIPTION "This group is mandatory only for implementations
                    that support the ATM PW N:1 and transparent mode."

       GROUP        pwAtmInboundNto1Group
       DESCRIPTION "This group is mandatory only for implementations
                    that support the ATM PW N:1 and transparent mode."

    ::= { pwAtmCompliances 2 }

-- Units of conformance.

    pwAtmCfgGroup OBJECT-GROUP
    OBJECTS {pwAtmCfgMaxCellConcatenation,
             pwAtmCfgFarEndMaxCellConcatenation,
             pwAtmCfgTimeoutMode,
             pwAtmClpQosMapping
                     }

    STATUS  current
    DESCRIPTION
              "Collection of objects for basic ATM PW
               configuration."
    ::= { pwAtmGroups 5 }

    pwAtmPerfGroup OBJECT-GROUP
    OBJECTS {pwAtmPerfCurrentMissingPkts,
             pwAtmPerfCurrentPktsReOrder,
             pwAtmPerfCurrentPktsMisOrder,
             pwAtmPerfCurrentPktsTimeout,
             pwAtmPerfCurrentCellsXmit,
             pwAtmPerfCurrentCellsDropped,
             pwAtmPerfCurrentCellsReceived,
             pwAtmPerfCurrentUnknownCells,
             pwAtmPerfIntervalValidData,
             pwAtmPerfIntervalDuration,
             pwAtmPerfIntervalMissingPkts,
             pwAtmPerfIntervalPktsReOrder,
             pwAtmPerfIntervalPktsMisOrder,
             pwAtmPerfIntervalPktsTimeout,
             pwAtmPerfIntervalCellsXmit,
             pwAtmPerfIntervalCellsDropped,
             pwAtmPerfIntervalCellsReceived,
             pwAtmPerfIntervalUnknownCells,
             pwAtmPerf1DayIntervalValidData,
             pwAtmPerf1DayIntervalDuration,
             pwAtmPerf1DayIntervalMissingPkts,
             pwAtmPerf1DayIntervalPktsReOrder,
             pwAtmPerf1DayIntervalPktsMisOrder,
             pwAtmPerf1DayIntervalPktsTimeout,
             pwAtmPerf1DayIntervalCellsXmit,
             pwAtmPerf1DayIntervalCellsDropped,
             pwAtmPerf1DayIntervalCellsReceived,
             pwAtmPerf1DayIntervalUnknownCells
                         }
    STATUS current
    DESCRIPTION
              "Collection of objects for basic ATM PW Performance."
    ::= { pwAtmGroups 6 }

    pwAtmOutbound1to1Group OBJECT-GROUP
    OBJECTS {pwAtmOutboundAtmIf,
             pwAtmOutboundVpi,
             pwAtmOutboundVci,
             pwAtmOutboundTrafficParamDescr,
             pwAtmOutboundRowStatus
             }
    STATUS  current
    DESCRIPTION
              "Collection of objects for basic 1:1 ATM PW outbound
               configuration."
    ::= { pwAtmGroups 7 }

    pwAtmInbound1to1Group OBJECT-GROUP
    OBJECTS {pwAtmInboundAtmIf,
             pwAtmInboundVpi,
             pwAtmInboundVci,
             pwAtmInboundTrafficParamDescr,
             pwAtmInboundRowStatus
             }
    STATUS  current
    DESCRIPTION
          "Collection of objects for basic 1:1 ATM PW inbound
           configuration."
    ::= { pwAtmGroups 8 }

    pwAtmOutboundNto1Group OBJECT-GROUP
    OBJECTS {pwAtmOutboundNto1RowStatus,
             pwAtmOutboundNto1TrafficParamDescr,
             pwAtmOutboundNto1MappedVpi,
             pwAtmOutboundNto1MappedVci
                         }
    STATUS  current
    DESCRIPTION
          "Collection of objects for N:1, 1:1, or transparent
          ATM PW outbound configuration."
    ::= { pwAtmGroups 9 }
    pwAtmInboundNto1Group OBJECT-GROUP
    OBJECTS {pwAtmInboundNto1RowStatus,
             pwAtmInboundNto1TrafficParamDescr,
             pwAtmInboundNto1MappedVpi,
             pwAtmInboundNto1MappedVci
                 }
    STATUS current
    DESCRIPTION
          "Collection of objects for N:1, 1:1, or transparent
           ATM PW inbound configuration."
    ::= { pwAtmGroups 10 }

END

10. Security Considerations πŸ”βœ¨

okay bestie, this part is serious, so let's be serious for a sec 🫢. The MIB module has a bunch of management objects marked read-write and/or read-create. Those can be sensitive or vulnerable depending on the network, and allowing SET operations without real protection in a non-secure environment can wreck network operations 😭.

Here's the list of tables and objects and why they're sensitive:

The pwAtmOutboundTable, pwAtmInboundTable, pwAtmCfgTable, pwAtmOutboundNto1Table, and pwAtmInboundNto1Table hold ATM PW parameters on a Provider Edge (PE) device. If somebody unauthorized gets into those objects, they could literally disrupt traffic on the network πŸ’€.

Stronger stuff like SNMPv3 security should be considered wherever it's possible, and honestly, it's kind of a must-have moment πŸ’…. Specifically, SNMPv3 VACM and USM MUST be used with any SNMPV3 agent that implements this MIB module. Administrators should also think about whether read access to these objects should be allowed at all, because reading them can be undesirable in some situations πŸ™ˆ.

Some of the readable objects here (anything with a MAX-ACCESS other than not-accessible) can also be sensitive or vulnerable in certain environments. So it's important to control even GET and/or NOTIFY access to them, and maybe even encrypt their values when they're sent over the network via SNMP πŸ”₯.

The pwATMCfgTable, pwAtmPerfCurrentTable, pwAtmPerfIntervalTable, and pwAtmPerf1DayIntervalTable together show the ATM pseudowire connectivity topology and its performance characteristics. So if an Administrator doesn't want that info out in the open, these tables should be treated as sensitive/vulnerable πŸ¦‹.

Pre-SNMPv3 versions didn't include adequate security. Even if the network itself is secure (for example, by using IPsec), there's still no control over who on that secure network gets to GET/SET (read/change/create/delete) the objects in this MIB module. Lowkey wild 😭.

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 πŸŽ€.

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


11. IANA Considerations 🧚

The MIB module in this document uses the following IANA-assigned OBJECT IDENTIFIER values, which are recorded in the SMI Numbers registry:

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

   pwATMMIB   { mib-2 183 }

12. References πŸ“š

12.1. Normative References

  • [PWTC] Nadeau, T., Ed., Zelig, D., Ed., and O. Nicklass, Ed., "Definitions of Textual Conventions for Pseudowire (PW) Management", RFC 5542, May 2009.
  • [PWMIB] Nadeau, T., Ed. and D. Zelig, Ed., "Pseudowire (PW) Management Information Base (MIB)", RFC 5601, July 2009.
  • [PWMPLSMIB] Zelig, D., Ed. and T. Nadeau, Ed., "Pseudowire (PW) over MPLS PSN Management Information Base (MIB)", RFC 5602, July 2009.
  • [ATMENCAP] Martini, L., Jayakumar, J., Bocci, M., El-Aawar, N., Brayley, J., and G. Koleyni, "Encapsulation Methods for Transport of Asynchronous Transfer Mode (ATM) over MPLS Networks", RFC 4717, December 2006.
  • [ATMTRANS] Malis, A., Martini, L., Brayley, J., and T. Walsh, "Pseudowire Emulation Edge-to-Edge (PWE3) Asynchronous Transfer Mode (ATM) Transparent Cell Transport Service", RFC 4816, February 2007.
  • [AToM] Tesink, K., "Definitions of Managed Objects for ATM Management", RFC 2515, February 1999.
  • [AToMTC] Noto, M., Spiegel, E., and K. Tesink, "Definitions of Textual Conventions and OBJECT-IDENTITIES for ATM Management", RFC 2514, February 1999.
  • [LDPMIB] Cucchiara, J., Sjostrand, H., and J. Luciani, "Definitions of Managed Objects for the Multiprotocol Label Switching (MPLS), Label Distribution Protocol (LDP)", RFC 3815, June 2004.
  • [TEMIB] Srinivasan, C., Viswanathan, A., and T. Nadeau, "Multiprotocol Label Switching (MPLS) Traffic Engineering (TE) Management Information Base (MIB)", RFC 3812, June 2004.
  • [IFMIB] McCloghrie, K. and F. Kastenholz, "The Interfaces Group MIB", RFC 2863, June 2000.
  • [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.
  • [BCP14] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.

12.2. Informative References

  • [PWREQ] Xiao, X., McPherson, D., and P. Pate, "Requirements for Pseudo-Wire Emulation Edge-to-Edge (PWE3)", RFC 3916, September 2004.
  • [PWARCH] Bryant, S. and P. Pate, "Pseudo Wire Emulation Edge-to-Edge (PWE3) Architecture", RFC 3985, March 2005.
  • [RFC3410] Case, J., Mundy, R., Partain, D., and B. Stewart, "Introduction and Applicability Statements for Internet-Standard Management Framework", RFC 3410, December 2002.

13. Acknowledgements 🫢

This document was produced by the PWE3 Working Group. Special thanks to Senthilkumar Sathappan and Marichetty Venkatesan for their initial contribution, and to Bert Wijnen for close review and good suggestions πŸ’–.


Authors' Addresses 🌈

Orly Nicklass RADVISION Ltd. 24 Raul Wallenberg St. Tel Aviv ISRAEL

Phone: +972 3 7679444 EMail: orlyn@radvision.com

Thomas D. Nadeau BT BT Centre 81 Newgate Street London EC1A 7AJ United Kingdom

EMail: tom.nadeau@bt.com

πŸ“¦ where this page comes from