RFC 1596

Definitions of Managed Objects for Frame Relay Service

๐Ÿ“… published March 1994, from ietf

RFC 1596 โœจ Definitions of Managed Objects for Frame Relay Service ๐ŸŽ€

Okay bestie, this is the spec for managing Frame Relay Service with SNMP. ๐Ÿฆ‹

Network Working Group, edited by T. Brown from Bell Communications Research. It's a Standards Track doc, dated March 1994. The header doesn't list anything it obsoletes or updates. ๐Ÿ’…


Status of This Memo ๐Ÿ“œ

This document is an Internet standards track protocol for the Internet community, and it wants discussion and suggestions for improvements. ๐Ÿ’ฌ For the current standardization state and status of this protocol, check the "Internet Official Protocol Standards" (STD 1) doc. Distribution of this memo is unlimited! ๐ŸŒธ

Abstract ๐Ÿ”ฅ

This memo adds an extension to the Management Information Base (MIB) for use with network management protocols in TCP/IP-based internets. ๐Ÿงš It specifically defines objects for managing the Frame Relay Service, so you can see and control the Frame Relay stuff. โœจ

Table of Contents ๐Ÿ—‚๏ธ

   1. The SNMPv2 Network Management Framework ...............    2
   2. Object Definitions ....................................    2
   3. Overview ..............................................    2
   3.1 Scope of MIB .........................................    3
   3.2 Frame Relay Service MIB Terminology ..................    5
   3.3 Apply MIB II to a Frame Relay Service ................    7
   4. Object Definitions ....................................   12
   4.1 The Frame Relay Service Logical Port Group ...........   12
   4.2 The Frame Relay Management VC Signaling Group ........   15
   4.3 The PVC End-Point Group ..............................   22
   4.4 Frame Relay PVC Connection Group .....................   30
   4.5 Frame Relay Accounting Groups ........................   37
   5. Frame Relay Network Service TRAPS .....................   40
   6. Conformance Information ...............................   43
   7. Acknowledgments .......................................   45
   8. References ............................................   45
   9. Security Considerations ...............................   46
   10. Author's Address .....................................   46

1. The SNMPv2 Network Management Framework ๐Ÿงฉ

The SNMPv2 Network Management Framework is made of four major components, and they're the whole squad. ๐Ÿ‘‘ They are:

  • RFC 1442 which defines the SMI, the mechanisms used for describing and naming objects for the purpose of management. ๐Ÿ“š
  • STD 17, RFC 1213 defines MIB-II, the core set of managed objects for the Internet suite of protocols. ๐ŸŒˆ
  • RFC 1445 which defines the administrative and other architectural aspects of the framework. ๐Ÿซถ
  • RFC 1448 which defines the protocol used for network access to managed objects. ๐Ÿฆ‹

The Framework lets new objects get defined for experimentation and evaluation, which is very cute of it. ๐Ÿ“

2. Object Definitions ๐Ÿ’œ

Managed objects are accessed through a virtual information store called the Management Information Base, or MIB. โœจ Objects in the MIB are defined using the subset of Abstract Syntax Notation One (ASN.1) that the SMI defines. ๐Ÿงš Each object type is named by an OBJECT IDENTIFIER, which is an administratively assigned name. ๐ŸŒธ The object type together with an object instance uniquely identifies one specific instantiation of the object. ๐Ÿ’– For human convenience, we often use a textual string, called the descriptor, to refer to the object type. ๐Ÿ™ˆ

3. Overview ๐Ÿฆ‹

These objects get used when the particular media being managed is Frame Relay Service. ๐ŸŽ€ Right now, that applies to this value of the ifType variable in the Internet-standard MIB:

          frameRelayService (44)

This section gives an overview and background on how to use this MIB and other potential MIBs when managing a Frame Relay Service. ๐Ÿ’…

Figure 1 shows the MIB stack you could follow for managing a Frame Relay Service. It's only an example and not meant to be the full list, so don't panic. ๐ŸŒˆ

                ____________________________________________________
                |              |              |       |            |
                |              |              | SIP   |  RFC1490   |
                |              | X.25 MIB     | Relay | (no applic.|
                |              | for IW/Encap.| MIB   |  MIB)      |
                |              |              |       |            |
                |    MIB II    |-----------------------------------|
                |              |                                   |
                |   ifTable    |      Frame Relay Service MIB      |
                |  ifXTable    |                                   |
                | ifStackTable |___________________________________|
                |              |                         |         |
                |              | Physical Layer MIBs     | ATM MIB |
                |              |  e.g., DS1/E1 MIB,      |---------|
                |              |  RS232-like MIB         | Phy.    |
                |              |                         | Layer   |
                |              |                         |  MIB    |
                |--------------|-------------------------|---------|


                     Figure 1. Frame Relay MIB Architecture

3.1. Scope of MIB ๐Ÿ”ญ

The Frame Relay Service MIB will only manage the Frame Relay portion of the network, so it stays in its lane. ๐Ÿ›ฃ๏ธ This MIB is based on the Customer Network Management concepts presented in the document "Service Management Architecture for Virtual Connection Services" [6].

This MIB will NOT be implemented on User Equipment (e.g., DTE), and the Frame Relay DTE MIB (RFC 1315) should be used to manage those devices [8]. ๐Ÿšจ

The Frame Relay Service MIB is meant for Customer Network Management (CNM) of a Frame Relay Network Service. ๐Ÿ’– It gives end-customers performance monitoring, fault detection, and configuration information about their Frame Relay Service. โœจ Whether this MIB is used to create, delete, or modify PVCs, and to turn PVCs on or off, is an implementation decision. ๐Ÿงš

With this and other related MIBs, a customer's NMS can monitor their PVCs and UNI/NNI logical ports. ๐ŸŒธ Internal aspects of the network (e.g., switching elements, line cards, and network routing tables) are outside the scope of this MIB, so hands off! ๐Ÿ™ˆ The Customer's NMS will typically access the SNMP proxy-agent within the Frame Relay network using SNMP over UDP over IP, with IP encapsulated in Frame Relay according to RFC1490/ANSI T1.617 Annex F [7,9]. ๐Ÿฆ‹ The customer, thus, has a PVC to the SNMP proxy-agent. ๐ŸŽ€ Other access mechanisms and SNMP agent implementations are possible. ๐ŸŒˆ The service capabilities include retrieving information and receiving TRAPs. ๐Ÿ’… It is beyond the scope of this MIB to define managed objects that monitor the physical layer. ๐Ÿ’€ Existing physical layer MIBs (e.g., DS1 MIB) and MIB II will be used where possible. ๐Ÿซถ The Frame Relay Service SNMP MIB for CNM will not contain any managed objects to monitor the physical layer. ๐Ÿ“ This MIB mainly addresses Frame Relay PVCs. ๐Ÿ’œ It may be extended later to handle Frame Relay SVCs. ๐Ÿ‘‘

This MIB is only used to manage a single Frame Relay Service offering from one network. ๐Ÿงš It will typically be implemented on a service provider's SNMP proxy-agent. โœจ The SNMP proxy-agent proxies for all Frame Relay equipment within one service provider's Frame Relay network. (Other SNMP agent implementations are not precluded, bestie.) ๐ŸŒธ So this MIB models a PVC segment through one Frame Relay Network. ๐Ÿฆ‹ See Figure 2. If the customer's PVCs traverse multiple networks, then the customer needs to poll multiple network proxy-agents within each Frame Relay Network to get their end-to-end view of their service. ๐Ÿ˜ญ See Figure 2 and the Service Management Architecture [6].

                +-------------------------------------+
                | Customer Network Management Station |
                |            (SNMP based)             |
                +-------------------------------------+
                    ^              ^               ^
                    |              |               |
                    |              |               |
           UNI      |      NNI     |       NNI     |       UNI
            |       ^       |      ^        |      ^
            | +-----------+ | +-----------+ | +-----------+ |
            | |           | | |           | | |           | |
Originating | |   FR      | | |   FR      | | |   FR      | |Terminating
 +--------+ | | Network I | | | Network J | | | Network K | | +--------+
 |        | | |           | | |           | | |           | | |        |
 |        |---|           |---|           |---|           |---| User B |
 |        | | |           | | |           | | |           | | |        |
 |     ////////////////////////////////////////////////////////////    |
 |        | | |           | | |           | | |           | | |        |
 +--------+ | +-----------+ | +-----------+ | +-----------+ | +--------+
            |               |               |               |
            |               |               |               |
            | PVC Segment 1 | PVC Segment 2 | PVC Segment 3 |
            |<------------->|<------------->|<------------->|
            |                                               |
            |              Multi-network PVC                |
            |<--------------------------------------------->|
            |  NNI = Network-to Network Interface           |
               UNI = User-to-Network Interface

                       Figure 2. Multi-network PVC

Also, since the Frame Relay network is shared by lots of Frame Relay subscribers, each subscriber only gets access to their own information (e.g., info about their interfaces and PVCs). ๐Ÿ”’ So the Frame Relay PVC CNM proxy agent should be able to support instance level granularity for MIB views. ๐Ÿซถ See the Service Management Architecture. โœจ

3.2. Frame Relay Service MIB Terminology โœจ

okay bestie, let's get into the frame relay vocab ๐Ÿงš these terms are the foundation for everything else in this MIB, so lock them in ๐Ÿ’…

Access Channel ๐Ÿ›ฃ๏ธ An access channel is the generic name for the DS1/E1 or DS3/E3-based UNI access channel or NNI access channel that frame relay data travels across. Think of it as the access pathway for one single stream of user data.

Within a T1 line, an access channel can be any one of these:

  • Unchannelized T1: the whole T1 line counts as one access channel, and each access channel is made up of 24 T1 time slots. ๐ŸŒธ
  • Channelized T1: an access channel is any one of 24 channels, and each one is a single T1 time slot. ๐ŸŽ€
  • Fractional T1: an access channel is a group of N T1 time slots (NX56/64 Kbps, where N = 1-23 T1 time slots per FT1 access channel). Those slots can be consecutive or non-consecutive, so it's super flexible ๐Ÿฆ‹

Within an E1 line, a channel can be any one of these:

  • Unchannelized E1: the entire E1 line is a single access channel, and each access channel is made up of 31 E1 time slots. ๐Ÿ’œ
  • Channelized E1: an access channel is any one of 31 channels, and each one is a single E1 time slot. ๐Ÿ“
  • Fractional E1: an access channel is a group of N E1 time slots (NX64 Kbps, where N = 1-30 E1 time slots per FE1 access channel). Again, consecutive or non-consecutive, your call ๐ŸŒˆ

in 3 Within a given unformatted line, the entire unformatted line is considered an access channel. Examples include RS-232, V.35, V.36 and X.21 (non- switched). ๐Ÿ”Œ

Access Rate ๐ŸŽ๏ธ This is the data rate of the access channel, measured in bits/second. The speed of the user's access channel decides how fast the end user can push data into the network. Main character speed, literally ๐Ÿ‘‘

Bc ๐Ÿ“ฆ The Committed Burst Size (Bc) is the most subscriber data (in bits) that the network agrees to transfer under normal conditions during a time interval Tc. It's the promise ๐Ÿซถ

Be ๐Ÿ’ฅ The Excess Burst Size (Be) is the most subscriber data (in bits) beyond Bc that the network will attempt to deliver during the time interval Tc. Be data usually has a lower probability of getting through than Bc, so it's the bonus round, not the guarantee ๐Ÿ™ˆ

CIR ๐ŸŽฏ The Committed Information Rate (CIR) is the subscriber data rate (in bits/second) that the network commits to deliver under normal network conditions. CIR is averaged over the time interval Tc, so CIR = Bc/Tc. Bc divided by Tc, iykyk ๐Ÿงฎ

DLCI ๐Ÿชช Data Link Connection Identifier. Every connection gets one, and it's how things get identified ๐Ÿ’–

Logical Port ๐Ÿšช This term is used to model the Frame Relay "interface" on a device. It's the device-side version of that interface, basically ๐Ÿงš

NNI ๐Ÿ”— Network to Network Interface

Permanent Virtual Connection (PVC) โ™พ๏ธ A virtual connection whose end-points and bearer capabilities are defined at subscription time. It's set up once and stays that way, very committed behavior, no cap โœจ

Time slot (E1) โฑ๏ธ An octet inside the 256-bit information field of each E1 frame is defined as a time slot. Time slots are position sensitive within that 256-bit information field, so where they sit matters a LOT ๐Ÿ˜ญ Fractional E1 service is provided in contiguous or non-contiguous time slot increments.

Time slot (T1) โฑ๏ธ An octet inside the 192-bit information field of each T1 frame is defined as a time slot. Time slots are position sensitive within that 192-bit information field, same energy as E1. Fractional T1 service is provided in contiguous or non-contiguous time slot increments. ๐ŸŽ€

UNI ๐Ÿ™‹ User to Network Interface

N391 ๐Ÿ” Full status (status of all PVCs) polling counter

N392 ๐Ÿšจ Error threshold

N393 ๐Ÿ‘€ Monitored events count

T391 โฒ๏ธ Link integrity verification polling timer

T392 โฒ๏ธ Polling verification timer

nT3 ๐Ÿ“ฃ Status enquiry timer

nN3 ๐Ÿ”ข Maximum status enquiry counter

3.3. Apply MIB II to a Frame Relay Service โœจ

okay bestie, so first up is the System Group ๐Ÿ’…. You use it on the SNMP proxy-agent, because one proxy-agent might be watching a whole bunch of Frame Relay devices across one network. The System Group only describes one system, so it's not instantiated. Here's the vibe for each object:

  • sysDescr: an ASCII string describing the SNMP proxy-agent, up to 255 characters ๐ŸŽ€. It's usually where you put the network provider's identification and the type of service they offer.
  • sysObjectID: a unique OBJECT IDENTIFIER (OID) for the SNMP proxy-agent ๐Ÿฆ‹.
  • sysUpTime: the clock in the SNMP proxy-agent, in TimeTicks of 1/100s of a second โฐ. It's the elapsed time since the proxy-agent came on line.
  • sysContact: the contact for the SNMP proxy-agent, an ASCII string of up to 255 characters ๐Ÿ’Œ.
  • sysName: the domain name of the SNMP proxy-agent, for example, acme.com ๐ŸŒ.
  • sysLocation: the location of the SNMP proxy-agent, an ASCII string of up to 255 characters ๐Ÿ“.
  • sysServices: the services of the managed device. The value "2" is recommended, which implies that the Frame Relay network is providing a subnetwork level service ๐Ÿงš.

Next, the Interfaces Group from MIB II. This is how it gets used to manage Frame Relay based interfaces, together with the Frame Relay Service MIB module ๐Ÿซถ. This memo goes with the interpretation of the Interfaces group evolution that says: "The interfaces table (ifTable) contains information on the managed resource's interfaces. Each sub-layer below the internetwork layer of a network interface is considered an interface." So the ifTable lets these Frame Relay-based interfaces show up as table entries:

  • Frame Relay interfaces in the Frame Relay equipment (e.g., switches, routers or networks) with Frame Relay interfaces. This level is concerned with generic frame counts and not with individual virtual connections.

Quick heads up: frame counts per virtual connection are NOT covered by ifTable ๐Ÿ™ˆ. Per the ifTable guidelines, those are treated as interface specific and live in the Frame Relay Service MIB module instead. To link the ifEntries together properly, the Interfaces Stack Group shall be supported.

Here are the specific ifTable interpretations for Frame Relay:

Object   Use for the generic Frame Relay layer
======   =========================================
ifIndex          Each Frame Relay port is represented
                 by an ifEntry.

ifDescr          Description of the Frame Relay interface.
                 ASCII string describing the UNI/NNI
                 logical port.  Can be up to
                 255 characters long.

ifType           The value allocated for Frame Relay
                 Service is equal to 44.

ifMtu            Set to maximum frame size in octets for
                 this frame relay logical port.

ifSpeed          Peak bandwidth in bits per second
                 available for use.  This could be the
                 speed of the logical port and not
                 the access rate. Actual user information
                 transfer rate (i.e., access rate) of the
                 UNI or NNI logical port in bits per second
                 (this is not the clocking speed).  For
                 example, it is 1,536,000 bits per
                 second for a DS1-based UNI/NNI logical
                 port and 1,984,000 bits per second for an
                 E1-based UNI/NNI logical port.

ifPhysAddress    The primary address for this logical port
                 assigned by the Frame Relay interface
                 provider.  An octet string of zero length
                 if no address is used for this logical
                 port.

ifAdminStatus     The desired administrative status of the
                  frame relay logical port.

ifOperStatus      The current operational status of the
                  Frame Relay UNI or NNI logical port.

ifLastChange      The elapsed time since the last
                  re-initialization of the logical port.
                  The value of sysUpTime at the time the
                  logical port entered its current
                  operational state.  If the current
                  state was entered prior to the last
                  re-initialization of the local
                  network management subsystem, then
                  this object contains a zero value.

ifInOctets        The number of received octets.
                  This counter only counts octets from the
                  beginning of the frame relay header field
                  to the end of user data.

ifInUcastPkts     The number of received unerrored,
                  unicast frames.

ifInDiscards      The number of received frames discarded.
                  Possible reasons are as follows:
                  policing, congestion.

ifInErrors        The number of received frames that are
                  discarded, because of an error.
                  Possible errors can be the following: the
                  frame relay frames were too long or were
                  too short, the frames had an invalid or
                  unrecognized DLCI values, or incorrect
                  header values.

ifInUnknownProtos  The number of packets discarded because
                   of an unknown or unsupported protocol.
                   For Frame Relay Service interfaces, this
                   counter will always be zero.

ifOutOctets       The number of transmitted octets.
                  This counter only counts octets from the
                  beginning of the frame relay header field
                  to the end of user data.

ifOutUcastpkts    The number of frames sent.

ifOutDiscards     The number of frames discarded in the
                  egress direction. Possible
                  reasons are as follows:  policing,
                  congestion.

ifOutErrors       The number of frames discarded in the
                  egress direction, because of errors.
                  Possible reason is transmit underruns.

ifName            This variable is not applicable for
                  Frame Relay Service interfaces,
                  therefore, this variable contains a
                  zero-length string.

ifInMulticastPkts  The number of received unerrored,
                   multicast frames.

ifInBroadcastPkts  This variable is not applicable for
                   Frame Relay Service interfaces,
                   therefore, this counter is always zero.

ifOutMulticastPkts  The number of sent unerrored,
                    multicast frames.

ifOutBroadcastPkts  This variable is not applicable for
                    Frame Relay Service interfaces,
                    therefore, this counter is always zero.

ifHCInOctets      Only used for DS3-based (and greater)
                  Frame Relay logical ports.
                  The number of received octets.
                  This counter only counts octets from the
                  beginning of the frame relay header field
                  to the end of user data.

ifHCOutOctets     Only used for DS3-based (and greater)
                  Frame Relay logical ports.
                  The number of transmitted octets.
                  This counter only counts octets from the
                  beginning of the frame relay header field
                  to the end of user data.

ifLinkUpDownTrapEnble  The value of this object is
                       implementation specific for Frame
                       Relay logical ports.

ifHighSpeed         Set to the user data rate of the frame
                    relay logical port in millions of
                    bits per second.  If the user data rate
                    is less than 1 Mbps, then this value is
                    zero.

ifPromiscuousMode   Set to false(2).

ifConnectorPresent  Set to false(2).

Last bit for this section ๐ŸŒธ: Frame Relay Network Service interfaces support the Interface Stack Group. They do not support any other groups or objects in the Interfaces group of MIB II. And supporting the SNMP Group of MIB II is an implementation choice, so it's totally up to you ๐Ÿ’–.


4. Object Definitions โœจ

Time for the actual MIB module ๐Ÿงš. Here's the FRNETSERV-MIB, with the Frame Relay Service Logical Port Group:

 FRNETSERV-MIB DEFINITIONS ::= BEGIN

 IMPORTS
    MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE,
    Counter32, Integer32,
    TimeTicks                                FROM SNMPv2-SMI
    DisplayString, PhysAddress,
    TimeStamp, RowStatus                     FROM SNMPv2-TC
    MODULE-COMPLIANCE, OBJECT-GROUP          FROM SNMPv2-CONF
    ifIndex, transmission                    FROM RFC-1213;

 frnetservMIB MODULE-IDENTITY
      LAST-UPDATED "9311161200Z"
      ORGANIZATION "IETF Frame Relay Network MIB Working Group"
      CONTACT-INFO
            "   Tracy A. Brown
                Bellcore
                331 Newman Springs Rd.
                Red Bank, NJ 07701 USA

                Tel: 1-908-758-2107
                Fax: 1-908-758-4177
                E-mail: tacox@mail.bellcore.com."
      DESCRIPTION
               "The MIB module to describe generic objects for
               Frame Relay Network Service."
      ::= { transmission 44 }

      IfIndex ::= TEXTUAL-CONVENTION
            STATUS  current
            DESCRIPTION
               "The value of this object identifies the
               interface for which this entry contains
               management information.  The value of this
               object for a particular interface has the same
               value as the ifIndex object, defined in RFC
               1213, for the same interface."
            SYNTAX Integer32

      frnetservObjects  OBJECT IDENTIFIER ::= { frnetservMIB 1 }
      frnetservTraps    OBJECT IDENTIFIER ::= { frnetservMIB 2 }


 -- The Frame Relay Service Logical Port Group

 --  the Frame Relay Logical Port Group
 --  This table is an interface specific addendum
 --  to the generic ifTable from MIB-II.

frLportTable OBJECT-TYPE
 SYNTAX  SEQUENCE OF FrLportEntry
 MAX-ACCESS  not-accessible
 STATUS  current
 DESCRIPTION
         "The Frame Relay Logical Port Information table."
 ::= { frnetservObjects 1 }

frLportEntry OBJECT-TYPE
 SYNTAX  FrLportEntry
 MAX-ACCESS  not-accessible
 STATUS  current
 DESCRIPTION
          "An entry in the Frame Relay Logical Port
          Information table."
 INDEX   { ifIndex }
 ::= { frLportTable 1 }

Okay so first up is the SEQUENCE that lays out the columns of a frLportEntry row ๐ŸŽ€

FrLportEntry ::=
  SEQUENCE {
      frLportNumPlan
          INTEGER,
      frLportContact
          DisplayString,
      frLportLocation
          DisplayString,
      frLportType
          INTEGER,
      frLportAddrDLCILen
          INTEGER,
      frLportVCSigProtocol
          INTEGER,
      frLportVCSigPointer
          OBJECT IDENTIFIER
 }

Now the actual columns ๐Ÿ’– They're all read-only, so you look but don't touch ๐Ÿ‘€

frLportNumPlan ๐ŸŒ tells you which numbering plan the address on this port follows. It can be e164, x121, none, or other. The address itself lives in ifPhysAddress, and if the value is none, the proxy-agent hands back a zero-length octet string for it. other just means an address was assigned, but the plan isn't listed here ๐Ÿ™ˆ

 frLportNumPlan OBJECT-TYPE
     SYNTAX  INTEGER {
               other(1),
               e164(2),
               x121(3),
               none(4)
             }
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The value of this object identifies the network
             address numbering plan for this UNI/NNI logical
             port. The network address is the object
             ifPhysAddress. The value none implies that there
             is no ifPhysAddress.  The SNMP proxy-agent will
             return an octet string of zero length for
             ifPhysAddress. The value other means that an
             address has been assigned to this interface, but
             the numbering plan is not enumerated here."
     ::= { frLportEntry 1 }

frLportContact ๐Ÿ“‡ is the network contact for this UNI/NNI logical port, capped at 255 characters.

 frLportContact OBJECT-TYPE
     SYNTAX  DisplayString (SIZE(0..255))
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The value of this object identifies the network
             contact for this UNI/NNI logical port."
     ::= { frLportEntry 2 }

frLportLocation ๐Ÿ“ is the Frame Relay network location for the port, also up to 255 characters.

 frLportLocation OBJECT-TYPE
     SYNTAX  DisplayString (SIZE(0..255))
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The value of this object identifies the Frame
             Relay network location for this UNI/NNI logical
             port."
     ::= { frLportEntry 3 }

frLportType ๐Ÿ”Œ says whether the interface is a uni(1) or an nni(2) โœจ

 frLportType OBJECT-TYPE
     SYNTAX  INTEGER {
               uni(1),
               nni(2)
             }
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The value of this object identifies the type of
             network interface for this logical port."
     ::= { frLportEntry 4 }

frLportAddrDLCILen ๐Ÿงฎ covers the Q.922 Address field length and the DLCI length. There are five choices, from twoOctets10Bits(1) up to fourOctets23Bits(5).

 frLportAddrDLCILen OBJECT-TYPE
     SYNTAX  INTEGER {
      twoOctets10Bits(1),
      threeOctets10Bits(2),
      threeOctets16Bits(3),
      fourOctets17Bits(4),
      fourOctets23Bits(5)
    }
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The value of this object identifies the Q.922
             Address field length and DLCI length for this
             UNI/NNI logical port."
     ::= { frLportEntry 5 }

frLportVCSigProtocol ๐Ÿค names the Local In-Channel Signaling Protocol in use on the port. The choices are none(1), lmi(2), ansiT1617D(3), ansiT1617B(4), and ccittQ933A(5).

 frLportVCSigProtocol OBJECT-TYPE
     SYNTAX  INTEGER {
               none(1),
               lmi(2),
               ansiT1617D(3),
               ansiT1617B(4),
               ccittQ933A(5)
             }
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The value of this object identifies the Local
             In-Channel Signaling Protocol that is used for
             this frame relay UNI/NNI logical port."
     ::= { frLportEntry 6 }

frLportVCSigPointer ๐Ÿ‘‰ is a pointer. It points at the table holding the Local In-Channel Signaling Protocol parameters and errors for this port, which is the Frame Relay Management VC Signaling Group we're about to dive into ๐Ÿงš

 frLportVCSigPointer OBJECT-TYPE
     SYNTAX  OBJECT IDENTIFIER
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The value of this object is used as a pointer to
             the table that contains the Local In-Channel
             Signaling Protocol parameters and errors for this
             UNI/NNI logical port.  See the Frame Relay
             Management VC Signaling Parameters and Errors
             Group."
     ::= { frLportEntry 7 }

Frame Relay Management VC Signaling Group ๐Ÿฆ‹

This group is all about the Local In-Channel Signaling Parameters and the signaling errors. Here's the table that sits under it.

 -- the Frame Relay Management VC Signaling Group

 -- This Group contains managed objects for the
 -- Local In-Channel Signaling Parameters and
 -- for signaling errors.

 frMgtVCSigTable OBJECT-TYPE
     SYNTAX  SEQUENCE OF FrMgtVCSigEntry
     MAX-ACCESS  not-accessible
     STATUS  current
     DESCRIPTION
             "The Frame Relay Management VC Signaling
             Parameters and Errors table."
     ::= { frnetservObjects 2 }

 frMgtVCSigEntry OBJECT-TYPE
     SYNTAX  FrMgtVCSigEntry
     MAX-ACCESS  not-accessible
     STATUS  current
     DESCRIPTION
             "An entry in the Frame Relay Management VC
             Signaling Parameters Errors table."
     INDEX   { ifIndex }
     ::= { frMgtVCSigTable 1 }

Next up is the row SEQUENCE for that entry, with all its columns listed in order ๐Ÿ’…

 FrMgtVCSigEntry ::=
     SEQUENCE {
         frMgtVCSigProced
             INTEGER,
         frMgtVCSigUserN391
             INTEGER,
         frMgtVCSigUserN392
             INTEGER,
         frMgtVCSigUserN393
             INTEGER,
         frMgtVCSigUserT391
             INTEGER,
         frMgtVCSigNetN392
             INTEGER,
         frMgtVCSigNetN393
             INTEGER,
         frMgtVCSigNetT392
             INTEGER,
         frMgtVCSigNetnN4
             INTEGER,
         frMgtVCSigNetnT3
             INTEGER,
         frMgtVCSigUserLinkRelErrors
             Counter32,
         frMgtVCSigUserProtErrors
             Counter32,
         frMgtVCSigUserChanInactive
             Counter32,
         frMgtVCSigNetLinkRelErrors

             Counter32,
         frMgtVCSigNetProtErrors
             Counter32,
         frMgtVCSigNetChanInactive
             Counter32
 }

frMgtVCSigProced ๐Ÿ” says which Local In-Channel Signaling Procedure the port uses. It's either u2nnet(1) or bidirect(2). A port can do only the user-to-network network-side procedures, or it can do bidirectional ones.

 frMgtVCSigProced OBJECT-TYPE
     SYNTAX  INTEGER {
               u2nnet(1),
               bidirect(2)
             }
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The value of this object identifies the Local
             In-Channel Signaling Procedure that is used for
             this UNI/NNI logical port.  The UNI/NNI logical
             port can be performing only user-to-network
             network-side procedures or bidirectional
             procedures."
     ::= { frMgtVCSigEntry 1 }

Now the user-side timers and counters ๐Ÿ•ฐ๏ธ These are the N391, N392, N393 and T391 values. Each one has a default, and each one reads noSuchName if the port isn't doing user-side procedures. They apply to Q.933 Annex A and T1.617 Annex D.

frMgtVCSigUserN391 has a range of 1 to 255, with a default of 6 ๐ŸŽฏ

 frMgtVCSigUserN391 OBJECT-TYPE
     SYNTAX  INTEGER (1..255)
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The value of this object identifies the User-side
             N391 full status polling cycle value for this
             UNI/NNI logical port.  If the logical port is not
             performing user-side procedures, then this value
             is equal to noSuchName. This object applies to
             Q.933 Annex A and T1.617 Annex D."
     DEFVAL { 6 }
     ::= { frMgtVCSigEntry 2 }

frMgtVCSigUserN392 ranges from 1 to 10, and the default is 3 ๐Ÿ”ข

 frMgtVCSigUserN392 OBJECT-TYPE
     SYNTAX  INTEGER (1..10)
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The value of this object identifies the User-side
             N392 error threshold value for this UNI/NNI
             logical port.  If the logical port is not
             performing user-side procedures, then this value
             is equal to noSuchName. This object applies to
             Q.933 Annex A and T1.617 Annex D."
     DEFVAL { 3 }
     ::= { frMgtVCSigEntry 3 }

frMgtVCSigUserN393 also ranges from 1 to 10, with a default of 4 ๐Ÿ™Œ

 frMgtVCSigUserN393 OBJECT-TYPE
     SYNTAX  INTEGER (1..10)
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The value of this object identifies the User-side
             N393 monitored events count value for this UNI/NNI
             logical port.  If the logical port is not
             performing user-side procedures, then this value
             is equal to noSuchName. This object applies to
             Q.933 Annex A and T1.617 Annex D."
     DEFVAL { 4 }
     ::= { frMgtVCSigEntry 4 }

frMgtVCSigUserT391 is the link integrity verification polling timer. It goes from 5 to 30, and the default is 10 โฑ๏ธ

 frMgtVCSigUserT391 OBJECT-TYPE
     SYNTAX  INTEGER (5..30)
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The value of this object identifies the User-side
             T391 link integrity verification polling timer
             value for this UNI/NNI logical port.  If the
             logical port is not performing user-side
             procedures, then this value is equal to
             noSuchName. This object applies to Q.933 Annex A
             and T1.617 Annex D."
     DEFVAL { 10 }
     ::= { frMgtVCSigEntry 5 }

Now the network-side versions ๐ŸŒ The NN2, NN3, NT2, N4 and T3 ones have the same vibe, but they're about the network side, and they also cover LMI in some cases.

frMgtVCSigNetN392 is the network-side error threshold, which is nN2 for LMI. It ranges from 1 to 10, with a default of 3 ๐Ÿ’œ

 frMgtVCSigNetN392 OBJECT-TYPE
     SYNTAX  INTEGER (1..10)
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The value of this object identifies the Network-
             side N392 error threshold value (nN2 for LMI) for
             this UNI/NNI logical port.  If the logical port is
             not performing network-side procedures, then this
             value is equal to noSuchName. This object applies
             to Q.933 Annex A, T1.617 Annex D and LMI."
     DEFVAL { 3 }
     ::= { frMgtVCSigEntry 6 }

frMgtVCSigNetN393 is the network-side monitored events count, which is nN3 for LMI. It ranges from 1 to 10, with a default of 4 ๐ŸŒธ

 frMgtVCSigNetN393 OBJECT-TYPE

     SYNTAX  INTEGER (1..10)
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The value of this object identifies the Network-
             side N393 monitored events count value (nN3 for
             LMI) for this UNI/NNI logical port.  If the
             logical port is not performing network-side
             procedures, then this value is equal to
             noSuchName. This object applies to Q.933 Annex A,
             T1.617 Annex D and LMI."
     DEFVAL { 4 }
     ::= { frMgtVCSigEntry 7 }

frMgtVCSigNetT392 is the network-side polling verification timer, which is nT2 for LMI. It ranges from 5 to 30, with a default of 15 โณ

 frMgtVCSigNetT392 OBJECT-TYPE
     SYNTAX  INTEGER (5..30)
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The value of this object identifies the Network-
             side T392 polling verification timer value (nT2
             for LMI)  for this UNI/NNI logical port.  If the
             logical port is not performing network-side
             procedures, then this value is equal to
             noSuchName. This object applies to Q.933 Annex A,
             T1.617 Annex D and LMI."
     DEFVAL { 15 }
     ::= { frMgtVCSigEntry 8 }

frMgtVCSigNetnN4 is the maximum number of status enquiries received for network-side LMI. It's always 5, and it only applies to LMI ๐ŸŽฏ

 frMgtVCSigNetnN4 OBJECT-TYPE
     SYNTAX  INTEGER (5..5)
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The value of this object identifies the Network-
             side nN4 maximum status enquires received value
             for this UNI/NNI logical port.  If the logical
             port is not performing network-side procedures or
             is not performing LMI procedures, then this value
             is equal to noSuchName. This object applies only
             to LMI and always has a value of 5."
     ::= { frMgtVCSigEntry 9 }

frMgtVCSigNetnT3 is the nT3 timer for the nN4 status enquiries received. It can be 5, 10, 15, 20, 25 or 30, with a default of 20, and it also only applies to LMI โŒ›

 frMgtVCSigNetnT3 OBJECT-TYPE
     SYNTAX  INTEGER (5 | 10 | 15 | 20 | 25 | 30)
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION

             "The value of this object identifies the Network-
             side nT3 timer (for nN4 status enquires received)
             value for this UNI/NNI logical port.  If the
             logical port is not performing network-side
             procedures or is not performing LMI procedures,
             then this value is equal to noSuchName. This
             object applies only to LMI."
     DEFVAL { 20 }
     ::= { frMgtVCSigEntry 10 }

And now the error counters ๐Ÿšจ These are Counter32 values, and each one reads noSuchName when the port isn't doing that side's procedures.

frMgtVCSigUserLinkRelErrors counts the user-side link reliability errors. Those are the Status or Status Enquiry messages that never arrive, plus the invalid sequence numbers in a Link Integrity Verification Information Element ๐Ÿ˜ญ

 frMgtVCSigUserLinkRelErrors OBJECT-TYPE
     SYNTAX  Counter32
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The number of user-side local in-channel
             signaling link reliability errors (i.e., non-
             receipt of Status/Status Enquiry messages or
             invalid sequence numbers in a Link Integrity
             Verification Information Element) for this UNI/NNI
             logical port.  If the logical port is not
             performing user-side procedures, then this value
             is equal to noSuchName."
     ::= { frMgtVCSigEntry 11 }

frMgtVCSigUserProtErrors counts the user-side signaling protocol errors. That covers the protocol discriminator, message type, call reference, and mandatory information element errors ๐Ÿ’€

 frMgtVCSigUserProtErrors OBJECT-TYPE
     SYNTAX  Counter32
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The number of user-side local in-channel
             signaling protocol errors (i.e., protocol
             discriminator, message type, call reference, and
             mandatory information element errors) for this
             UNI/NNI logical port.  If the logical port is not
             performing user-side procedures, then this value
             is equal to noSuchName."
     ::= { frMgtVCSigEntry 12 }

Okay bestie, the signaling error counters are next and they're giving precision ๐Ÿ”ฅ Every one counts a specific kind of event on the UNI/NNI logical port, and the ones that only apply when that port runs network-side or user-side procedures all say noSuchName otherwise. Very polite of them ๐Ÿ’…

 frMgtVCSigUserChanInactive OBJECT-TYPE
     SYNTAX  Counter32
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The number of times the user-side channel was
             declared inactive (i.e., N392 errors in N393
             events) for this UNI/NNI logical port. If the
             logical port is not performing user-side
             procedures, then this value is equal to
             noSuchName."
     ::= { frMgtVCSigEntry 13 }

 frMgtVCSigNetLinkRelErrors OBJECT-TYPE
     SYNTAX  Counter32
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The number of network-side local in-channel
             signaling link reliability errors (i.e., non-
             receipt of Status/Status Enquiry messages or
             invalid sequence numbers in a Link Integrity
             Verification Information Element) for this UNI/NNI
             logical port.  If the logical port is not
             performing network-side procedures, then this
             value is equal to noSuchName."
     ::= { frMgtVCSigEntry 14 }

 frMgtVCSigNetProtErrors OBJECT-TYPE
     SYNTAX  Counter32
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The number of network-side local in-channel
             signaling protocol errors (i.e., protocol
             discriminator, message type, call reference, and
             mandatory information element errors) for this
             UNI/NNI logical port.  If the logical port is not
             performing network-side procedures, then this
             value is equal to noSuchName."
     ::= { frMgtVCSigEntry 15 }

 frMgtVCSigNetChanInactive OBJECT-TYPE
     SYNTAX  Counter32
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The number of times the network-side channel was
             declared inactive (i.e., N392 errors in N393
             events) for this UNI/NNI logical port.  If the
             logical port is not performing network-side
             procedures, then this value is equal to
             noSuchName."
     ::= { frMgtVCSigEntry 16 }

Now we're entering the PVC End-Point Group, and this part is lowkey the main character of the whole MIB โœจ It's the table where each PVC end-point gets its traffic parameters and its stats, and the comments walk you through how a PVC gets created step by step. The little diagram is iconic too ๐Ÿฆ‹

 -- The PVC End-Point Group

 -- This table is used to identify the traffic parameters
 -- for a bi-directional PVC segment end-point, and it also
 -- provides statistics for a PVC segment
 -- end-point.

 -- A PVC segment end-point is identified by a UNI/NNI
 -- logical port index value and DLCI index value.

 -- If the Frame Relay service provider allows
 -- the Frame Relay CNM subscriber to create, modify
 -- or delete PVCs using SNMP, then this table is used to identify
 -- and reserve
 -- the requested traffic parameters of each
 -- PVC segment end-point.  The Connection table
 -- is used to "connect" the end-points together.
 -- Not all implementations will support the
 -- capability of creating/modifying/deleting
 -- PVCs using SNMP as a feature of Frame Relay
 -- CNM service.

 -- Uni-directional PVCs are modeled with zero
 -- valued traffic parameters in one of the
 -- directions (In or Out direction) in this table.

 -- To create a PVC, the following procedures
 -- shall be followed:
 -- 1). Create the entries for the PVC segment endpoints in the
 --     frPVCEndptTable by specifying the traffic parameters
 --     for the bi-directional PVC segment endpoints.
 --     As shown in the figure, a point-to-point PVC has
 --     two endpoints, thus two entries in this table.
 --     Uni-directional PVCs are modeled
 --     with zero valued traffic parameters in one
 --     direction; all the `In' direction parameters
 --     for one Frame Relay PVC End-point or
 --     all the `Out' direction
 --     parameters for the other Frame Relay PVC
 --     End-point.

 --     In    ____________________________________ Out
 --    >>>>>>|                                   |>>>>>>>>
 --    ______| Frame Relay Network               |__________
 --     Out  |                                   |  In
 --    <<<<<<|                                   |<<<<<<<<
 --          |___________________________________|
 --  Frame Relay PVC                            Frame Relay
 --   End-point                                 PVC  End-point

 -- 2). Go to the Frame Relay Connection Group.
 --

Here's the table itself. It's a SEQUENCE OF entries indexed by ifIndex and frPVCEndptDLCIIndex, and the whole thing lives under frnetservObjects ๐ŸŽ€

 -- The Frame Relay PVC End-point Table

 frPVCEndptTable OBJECT-TYPE
     SYNTAX  SEQUENCE OF FrPVCEndptEntry
     MAX-ACCESS  not-accessible
     STATUS  current
     DESCRIPTION
             "The Frame Relay PVC End-Point table.  This table
             is used to model a PVC end-point.  This table
             contains the traffic parameters and statistics for
             a PVC end-point."
     ::= { frnetservObjects 3 }

 frPVCEndptEntry OBJECT-TYPE
     SYNTAX  FrPVCEndptEntry
     MAX-ACCESS  not-accessible
     STATUS  current
     DESCRIPTION
             "An entry in the Frame Relay PVC Endpoint table."
     INDEX   { ifIndex, frPVCEndptDLCIIndex }
     ::= { frPVCEndptTable 1 }

 FrPVCEndptEntry ::=
     SEQUENCE {
         frPVCEndptDLCIIndex
             Integer32,
         frPVCEndptInMaxFrameSize
             Integer32,
         frPVCEndptInBc
             Integer32,
         frPVCEndptInBe
             Integer32,
         frPVCEndptInCIR
            Integer32,
         frPVCEndptOutMaxFrameSize
             Integer32,

         frPVCEndptOutBc
             Integer32,
         frPVCEndptOutBe
             Integer32,
         frPVCEndptOutCIR
             Integer32,
         frPVCEndptConnectIdentifier
             Integer32,
         frPVCEndptRowStatus
             RowStatus,
         frPVCEndptRcvdSigStatus
             INTEGER,
         frPVCEndptInFrames
             Counter32,
         frPVCEndptOutFrames
             Counter32,
         frPVCEndptInDEFrames
             Counter32,
         frPVCEndptInExcessFrames
             Counter32,
         frPVCEndptOutExcessFrames
             Counter32,
         frPVCEndptInDiscards
             Counter32,
         frPVCEndptInOctets
             Counter32,
         frPVCEndptOutOctets
             Counter32
     }

Next up are the column objects. The DLCI index is the key, and the In and Out traffic knobs (Bc, Be, CIR, max frame size) are all read-create, so a manager can set them ๐Ÿ’–

 frPVCEndptDLCIIndex OBJECT-TYPE
     SYNTAX  Integer32
     MAX-ACCESS  not-accessible
     STATUS  current
     DESCRIPTION
             "The value of this object is equal to the DLCI
             value for this PVC end-point."
     ::= { frPVCEndptEntry 1 }

 frPVCEndptInMaxFrameSize OBJECT-TYPE
     SYNTAX  Integer32
     MAX-ACCESS  read-create
     STATUS  current
     DESCRIPTION
             "The value of this object is the size in octets of
             the largest frame relay information field for this
             PVC end-point in the ingress direction (into the
             frame relay network).  The value of
             frPVCEndptInMaxFrameSize must be less than or
             equal to the corresponding ifMtu for this Frame
             Relay UNI/NNI logical port."
     ::= { frPVCEndptEntry 2 }

 frPVCEndptInBc OBJECT-TYPE
     SYNTAX  Integer32
     MAX-ACCESS  read-create
     STATUS  current
     DESCRIPTION
             "The value of this object is equal to the
             committed burst size (Bc) parameter (measured in
             bits) for this PVC end-point in the ingress
             direction (into the frame relay network)."
     ::= { frPVCEndptEntry 3 }

 frPVCEndptInBe OBJECT-TYPE
     SYNTAX  Integer32
     MAX-ACCESS  read-create
     STATUS  current
     DESCRIPTION
             "The value of this object is equal to the excess
             burst size (Be) parameter (measured in bits) for
             this PVC end-point in the ingress direction (into
             the frame relay network)."
     ::= { frPVCEndptEntry 4 }

 frPVCEndptInCIR OBJECT-TYPE
     SYNTAX  Integer32
     MAX-ACCESS  read-create
     STATUS  current
     DESCRIPTION
             "The value of this object is equal to the
             committed information rate (CIR) parameter
             (measured in bits per second) for this PVC end-
             point in the ingress direction (into the frame
             relay network)."
     ::= { frPVCEndptEntry 5 }

 frPVCEndptOutMaxFrameSize OBJECT-TYPE
     SYNTAX  Integer32
     MAX-ACCESS  read-create
     STATUS  current
     DESCRIPTION
             "The value of this object is the size in octets of
             the largest frame relay information field for this
             PVC end-point in the egress direction (out of the
             frame relay network).  The value of
             frPVCEndptOutMaxFrameSize must be less than or
             equal to the corresponding ifMtu for this Frame
             Relay UNI/NNI logical port."
     ::= { frPVCEndptEntry 6 }

 frPVCEndptOutBc OBJECT-TYPE
     SYNTAX  Integer32
     MAX-ACCESS  read-create
     STATUS  current
     DESCRIPTION
             "The value of this object is equal to the
             committed burst size (Bc) parameter (measured in
             bits) for this PVC end-point in the egress
             direction (out of the frame relay network)."
     ::= { frPVCEndptEntry 7 }

 frPVCEndptOutBe OBJECT-TYPE
     SYNTAX  Integer32
     MAX-ACCESS  read-create
     STATUS  current
     DESCRIPTION
             "The value of this object is equal to the excess
             burst size (Be) parameter (measured in bits) for
             this PVC end-point in the egress direction (out of
             the frame relay network)."
     ::= { frPVCEndptEntry 8 }

 frPVCEndptOutCIR OBJECT-TYPE
     SYNTAX  Integer32
     MAX-ACCESS  read-create
     STATUS  current
     DESCRIPTION
             "The value of this object is equal to the
             committed information rate (CIR) parameter
             (measured in bits per second) for this PVC end-
             point in the egress direction (out of the frame
             relay network)."
     ::= { frPVCEndptEntry 9 }

 frPVCEndptConnectIdentifier OBJECT-TYPE
     SYNTAX  Integer32
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "This object is used to associate PVC end-points
             as being part of one PVC segment connection.  This
             value of this object is equal to the value of
             frPVCConnectIndex, which is used as one of the
             indices into the frPVCConnectTable.  The value of
             this object is provided by the agent, after the
             associated entries in the frPVCConnectTable have
             been created."
     ::= { frPVCEndptEntry 10 }

 frPVCEndptRowStatus OBJECT-TYPE
     SYNTAX  RowStatus
     MAX-ACCESS  read-create
     STATUS  current
     DESCRIPTION
             "This object is used to create new rows in this
             table, modify existing rows, and to delete
             existing rows.  To create a new PVC, the entries
             for the PVC segment end-points in the
             frPVCEndptTable must first be created.  Next, the
             frPVCConnectTable is used to associate the Frame
             Relay PVC segment end-points.  In order for the
             manager to have the necessary error diagnostics,
             the frPVCEndptRowStatus object must initially be
             set to `createAndWait'.  While the
             frPVCEndptRowStatus object is in the
             `createAndWait' state, the manager can set each
             columnar object and get the necessary error
             diagnostics.  The frPVCEndptRowStatus object may
             not be set to `active' unless the following
             columnar objects exist in this row:
             frPVCEndptInMaxFrameSize, frPVCEndptInBc,
             frPVCEndptInBe, frPVCEndptInCIR,
             frPVCEndptOutMaxFrameSize, frPVCEndptOutBc,
             frPVCEndptOutBe, and frPVCEndptOutCIR."
     ::= { frPVCEndptEntry 11 }

Okay bestie, we're still deep in the PVC end-point table, and it's giving a lot of counters ๐Ÿ’…๐Ÿงš Let's get into the signaling status first ๐Ÿซถ

 frPVCEndptRcvdSigStatus OBJECT-TYPE
     SYNTAX  INTEGER {
               deleted(1),
               active(2),
               inactive(3),
               none(4)
             }
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The value of this object identifies the PVC
             status received via the local in-channel signaling
             procedures for this PVC end-point.  This object is
             only pertinent for interfaces that perform the
             bidirectional procedures.  For user-to-network
             network side procedures, the value of this object
             should be none."
     ::= { frPVCEndptEntry 12 }

So this one is read-only and tells you the PVC status that came through the local in-channel signaling ๐Ÿ“ก It only really matters for interfaces doing the bidirectional procedures, and if you're on user-to-network network side procedures, the value should be none. Lowkey the most important detail here is that "none" is the expected answer on that side ๐Ÿ™ˆ

Now the frame counters. Every one of these is a Counter32, read-only, and current, so they're all giving the same energy, they just count different things ๐ŸŽ€

 frPVCEndptInFrames OBJECT-TYPE
     SYNTAX  Counter32
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The number of frames received by the network
             (ingress) for this PVC end-point. This includes
             any frames discarded by the network due to
             submitting more than Bc + Be data or due to any
             network congestion recovery procedures."
     ::= { frPVCEndptEntry 13 }

 frPVCEndptOutFrames OBJECT-TYPE
     SYNTAX  Counter32
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The number of frames sent by the network (egress)
             regardless of whether they are Bc or Be frames for
             this PVC end-point."
     ::= { frPVCEndptEntry 14 }

 frPVCEndptInDEFrames OBJECT-TYPE
     SYNTAX  Counter32
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The number of frames received by the network
             (ingress) with the DE bit set to (1) for this PVC
             end-point."
     ::= { frPVCEndptEntry 15 }

 frPVCEndptInExcessFrames OBJECT-TYPE
     SYNTAX  Counter32
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The number of frames received by the network
             (ingress) for this PVC end-point which were
             treated as excess traffic.  Frames which are sent
             to the network with DE set to zero are treated as
             excess when more than Bc bits are submitted to the
             network during the Committed Information Rate
             Measurement Interval (Tc).  Excess traffic may or
             may not be discarded at the ingress if more than
             Bc + Be bits are submitted to the network during
             Tc.  Traffic discarded at the ingress is not
             recorded in frPVCEndptInExcessFrames.  Frames
             which are sent to the network with DE set to one
             are also treated as excess traffic."
     ::= { frPVCEndptEntry 16 }

 frPVCEndptOutExcessFrames OBJECT-TYPE
     SYNTAX  Counter32
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The number of frames sent by the network (egress)
             for this PVC end-point which were treated as
             excess traffic.  (The DE bit may be set to one.)"
     ::= { frPVCEndptEntry 17 }

 frPVCEndptInDiscards OBJECT-TYPE
     SYNTAX  Counter32
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The number of frames received by the the network
             (ingress) that were discarded due to traffic
             enforcement for this PVC end-point."
     ::= { frPVCEndptEntry 18 }

 frPVCEndptInOctets OBJECT-TYPE
     SYNTAX  Counter32
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The number of octets received by the network
             (ingress) for this PVC end-point.  This counter
             should only count octets from the beginning of the
             frame relay header field to the end of user data.
             If the network supporting Frame Relay can not
             count octets, then this count should be an
             approximation."
     ::= { frPVCEndptEntry 19 }

 frPVCEndptOutOctets OBJECT-TYPE
     SYNTAX  Counter32
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION

             "The number of octets sent by the network (egress)
             for this PVC end-point.  This counter should only
             count octets from the beginning of the frame relay
             header field to the end of user data.  If the
             network supporting Frame Relay can not count
             octets, then this count should be an
             approximation."
     ::= { frPVCEndptEntry 20 }

Okay, so the vibe here is ingress vs egress, which is basically "coming in" vs "going out" ๐Ÿฆ‹ The big ones to clock are the Excess counters. Frames sent with DE set to zero only count as excess once you go past Bc during Tc, and they might get dropped at ingress if you go past Bc + Be. And the tea โ˜• is that traffic discarded at ingress is not recorded in frPVCEndptInExcessFrames. Periodt ๐Ÿ’€

The octet counters are giving "approximation" energy too. If the network can't count octets exactly, the count is allowed to be an approximation, which is so relatable honestly ๐Ÿ™ˆ

Now we're moving on to the connection group. The comments below are the spec's own notes, so I'm keeping them exactly as written โœจ

 -- The Frame Relay PVC Connection Group

 -- The Frame Relay PVC Connection Group
 -- is used to model the bi-directional
 -- PVC segment flows;
 -- point-to-point PVCs, point-to-multipoint
 -- PVCs, and multipoint-to-multipoint
 -- PVCs.

 -- This table has read-create access and
 -- is used to associate PVC end-points
 -- together as belonging to one connection.
 -- The frPVCConnectIndex is used to associate
 -- all the bi-directional flows.
 -- Not all implementations will support the
 -- capability of creating/modifying/deleting
 -- PVCs using SNMP as a feature of Frame Relay
 -- CNM service.

 -- Once the entries in the frPVCEndptTable
 -- are created, the following step are used
 -- to associate the PVC end-points as belonging
 -- to one PVC connection:
 -- 1). Obtain a unique frPVCConnectIndex
 --     using the frPVCConnectIndexValue object.
 -- 2). Connect the PVC segment endpoints together
 --     with the applicable frPVCConnectIndex value
 --     obtained via
 --     frPVCConnectIndexValue.
 --     The entries in this table are created by using
 --     the frPVCConnectRowStatus object.
 -- 3). The agent will provide the value of the
 --     corresponding instances of
 --     frPVCEndptConnectIdentifier with the
 --     the frPVCConnectIndex value.
 -- 4). Set frPVCConnectAdminStatus to `active' in all
 --     rows for this PVC segment to
 --     turn the PVC on.

 -- For example, the Frame Relay PVC Connection Group
 -- models a bi-directional, point-to-point PVC segment
 -- as one entry in this table.

 -- Frame Relay Network                  Frame Relay Network
 --  Low Port ____________________________________ High Port
 --          |                                   |
 --    ______| >> from low to high PVC flow   >> |____________
 --          | << from high to low PVC flow   << |
 --          |___________________________________|
 --

 -- The terms low and high are chosen to represent numerical
 -- ordering of a PVC segment's endpoints for representation
 -- in this table.  That is, the endpoint with the lower value
 -- of ifIndex is termed 'low', while the opposite endpoint
 -- of the segment is termed 'high'.
 -- This terminology is to provide directional information;
 -- for example the frPVCConnectL2hOperStatus and
 -- frPVCConnectH2lOperStatus as illustrated above.

 -- If the Frame Relay Connection table is used to model
 -- a unidirectional PVC, then one direction (either from low to high
 -- or from high to low) has its Operational Status equal to down.

 -- A PVC segment is a portion of a PVC
 -- that traverses one Frame Relay Network, and
 -- a PVC segment is identified
 -- by its two end-points (UNI/NNI logical port index
 -- value and DLCI index value)
 -- through one Frame Relay Network.

Right, so this is the connection group, and it's basically the matchmaking table ๐Ÿ’˜ Every PVC segment gets modeled as one bi-directional entry, and the frPVCConnectIndex is what ties all those flows together. The steps are a whole little checklist: grab a unique index from frPVCConnectIndexValue, connect the endpoints with that index, let the agent fill in the frPVCEndptConnectIdentifier values, and then flip frPVCConnectAdminStatus to active to turn it on ๐ŸŒธ

The low and high naming is just about ifIndex ordering, so "low" is the lower ifIndex and "high" is the other end. It's purely there for direction info โœจ

Now the actual objects for that table:

 frPVCConnectIndexValue OBJECT-TYPE
     SYNTAX  INTEGER (0..2147483647)
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "This object contains an appropriate value to be
             used for frPVCConnectIndex when creating entries
             in the frPVCConnectTable.  The value 0 indicates
             that no unassigned entries are available.  To
             obtain the frPVCConnectIndex value for a new
             entry, the manager issues a management protocol
             retrieval operation to obtain the current value of
             this object.  After each retrieval, the agent
             should modify the value to the next unassigned
             index."

     ::= { frnetservObjects 4 }

 --  The Frame Relay PVC Connection Table

 frPVCConnectTable OBJECT-TYPE
     SYNTAX  SEQUENCE OF FrPVCConnectEntry
     MAX-ACCESS  not-accessible
     STATUS  current
     DESCRIPTION
             "The Frame Relay PVC Connect table.  A bi-
             directional PVC segment is modeled as one entry in
             this table."
     ::= { frnetservObjects 5 }

 frPVCConnectEntry OBJECT-TYPE
     SYNTAX  FrPVCConnectEntry
     MAX-ACCESS  not-accessible
     STATUS  current
     DESCRIPTION
             "An entry in the Frame Relay PVC Connect table.
             This entry is used to model a PVC segment in two
             directions."
     INDEX { frPVCConnectIndex,
             frPVCConnectLowIfIndex, frPVCConnectLowDLCIIndex,
             frPVCConnectHighIfIndex, frPVCConnectHighDLCIIndex }
     ::= { frPVCConnectTable 1 }

 FrPVCConnectEntry ::=
     SEQUENCE {
         frPVCConnectIndex
             Integer32,
         frPVCConnectLowIfIndex
             IfIndex,
         frPVCConnectLowDLCIIndex
             Integer32,
         frPVCConnectHighIfIndex
             IfIndex,
         frPVCConnectHighDLCIIndex
             Integer32,
         frPVCConnectAdminStatus
             INTEGER,
         frPVCConnectL2hOperStatus
             INTEGER,
         frPVCConnectH2lOperStatus
             INTEGER,
         frPVCConnectL2hLastChange
             TimeStamp,
         frPVCConnectH2lLastChange

             TimeStamp,
         frPVCConnectRowStatus
             RowStatus
 }

 frPVCConnectIndex OBJECT-TYPE
     SYNTAX  Integer32
     MAX-ACCESS  not-accessible
     STATUS  current
     DESCRIPTION
             "The value of this object is equal to the
             frPVCConnectIndexValue obtained to uniquely
             identify this PVC segment connection."
     ::= { frPVCConnectEntry 1 }

 frPVCConnectLowIfIndex OBJECT-TYPE
     SYNTAX  IfIndex
     MAX-ACCESS  not-accessible
     STATUS  current
     DESCRIPTION
             "The value of this object is equal to MIB II's
             ifIndex value of the UNI/NNI logical port for this
             PVC segment.  The term low implies that this PVC
             segment end-point has the numerically lower
             ifIndex value than the connected/associated PVC
             segment end-point.  If the value is equal to zero,
             then this logical port is not a Frame Relay
             UNI/NNI logical port."
     ::= { frPVCConnectEntry 2 }

 frPVCConnectLowDLCIIndex OBJECT-TYPE
     SYNTAX  Integer32
     MAX-ACCESS  not-accessible
     STATUS  current
     DESCRIPTION
             "The value of this object is equal to the DLCI
             value for this end-point of the PVC segment.  If
             the value is equal to zero, then this endpoint of
             the PVC segment is not a Frame Relay connection."
     ::= { frPVCConnectEntry 3 }

 frPVCConnectHighIfIndex OBJECT-TYPE
     SYNTAX  IfIndex
     MAX-ACCESS  not-accessible
     STATUS  current
     DESCRIPTION
             "The value of this object is equal to MIB II's
             ifIndex value for the UNI/NNI logical port for
             this PVC segment.  The term high implies that this
             PVC segment end-point has the numerically higher
             ifIndex value than the connected/associated PVC
             segment end-point."
     ::= { frPVCConnectEntry 4 }

 frPVCConnectHighDLCIIndex OBJECT-TYPE
     SYNTAX  Integer32
     MAX-ACCESS  not-accessible
     STATUS  current
     DESCRIPTION
             "The value of this object is equal to the egress
             DLCI value for this end-point of the PVC segment."
     ::= { frPVCConnectEntry 5 }
 frPVCConnectAdminStatus OBJECT-TYPE
     SYNTAX  INTEGER {
               active(1),
               inactive(2),
               testing(3)
             }
     MAX-ACCESS  read-create
     STATUS  current
     DESCRIPTION
             "The value of this object identifies the desired
             administrative status of this bi-directional PVC
             segment.  The active state means the PVC segment
             is currently operational; the inactive state means
             the PVC segment is currently not operational; the
             testing state means the PVC segment is currently
             undergoing a test.  This state is set by an
             administrative entity.  This value affects the PVC
             status indicated across the ingress NNI/UNI of
             both end-points of the bi-directional PVC segment.
             When a PVC segment connection is created using
             this table, this object is initially set to
             `inactive'.  After the frPVCConnectRowStatus
             object is set to `active' (and the
             corresponding/associated entries in the
             frPVCEndptTable have their frPVCEndptRowStatus
             object set to `active'), the
             frPVCConnectAdminStatus object may be set to
             `active' to turn on the PVC segment connection."
     ::= { frPVCConnectEntry 6 }

Okay bestie, so this one is the admin switch for a PVC segment ๐Ÿ’…โœจ It's the desired status, so whoever's in charge flips it. You can be active (running ๐ŸŸข), inactive (off ๐Ÿ˜ด), or testing (getting poked and prodded ๐Ÿงช). When a connection is first made it starts out as inactive, which is giving "not yet, bestie" ๐Ÿ™ˆ. Then, once the RowStatus is active and both endpoints in frPVCEndptTable are also active, you can flip the admin status to active to turn the segment on ๐Ÿ”ฅ. And the value shows up across the ingress NNI/UNI at both ends of the bi-directional segment, so it's a whole-segment vibe, not a one-side thing ๐Ÿฆ‹

 frPVCConnectL2hOperStatus OBJECT-TYPE
     SYNTAX  INTEGER {
               active(1),
               inactive(2),
               testing(3),
               unknown(4)
             }
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The value of this object identifies the current
             operational status of the PVC segment connection
             in one direction; (i.e., in the low to high
             direction).  The active state means it is
             currently operational; the inactive state means it
             is currently not operational; the testing state
             means it is currently undergoing a test; the
             unknown state means the status of it currently can
             not be determined.  This value affects the PVC
             status indicated across the ingress NNI/UNI (low
             side) of the PVC segment."
     ::= { frPVCConnectEntry 7 }

 frPVCConnectH2lOperStatus OBJECT-TYPE
     SYNTAX  INTEGER {
               active(1),
               inactive(2),
               testing(3),
               unknown(4)
             }
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The value of this object identifies the current
             operational status of the PVC segment connection
             in one direction; (i.e., in the high to low
             direction).  The active state means it is
             currently operational; the inactive state means it
             is currently not operational; the testing state
             means it is currently undergoing a test; the
             unknown state means the status of it currently can
             not be determined.  This value affects the PVC
             status indicated across the ingress NNI/UNI (high
             side) of the PVC segment."
     ::= { frPVCConnectEntry 8 }

These two are the operational side, which is the "what's actually happening right now" check ๐Ÿ‘€ Each one covers one direction of the connection. frPVCConnectL2hOperStatus is the low-to-high direction and it's reported on the low side ingress NNI/UNI. frPVCConnectH2lOperStatus is high-to-low and it's reported on the high side. The states are active, inactive, testing, and that extra unknown one, which just means "the status can't be determined rn," and honestly that's a very real mood ๐Ÿ˜ญ

 frPVCConnectL2hLastChange OBJECT-TYPE
     SYNTAX  TimeStamp
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION

             "The value of MIB II's sysUpTime object at the
             time this PVC segment entered its current
             operational state in the low to high direction.
             If the current state was entered prior to the last
             re-initialization of the proxy-agent, then this
             object contains a zero value."
     ::= { frPVCConnectEntry 9 }

 frPVCConnectH2lLastChange OBJECT-TYPE
     SYNTAX  TimeStamp
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The value of MIB II's sysUpTime object at the
             time this PVC segment entered its current
             operational state in the high to low direction.
             If the current state was entered prior to the last
             re-initialization of the proxy-agent, then this
             object contains a zero value."
     ::= { frPVCConnectEntry 10 }

Okay so these are the "when did it last change" timestamps โฐ They use MIB II's sysUpTime, so they're basically "how long ago did this state start," counted from the clock. One thing that's giving main-character plot twist: if the state was entered before the proxy-agent last re-initialized, the value is just zero ๐Ÿ™ƒ So zero doesn't always mean "just happened," it can mean "it was already like that before the restart." Iconic memory loss, honestly ๐Ÿ’€

 frPVCConnectRowStatus OBJECT-TYPE
     SYNTAX  RowStatus
     MAX-ACCESS  read-create
     STATUS  current
     DESCRIPTION
             "The status of this entry in the
             frPVCConnectTable.  This variable is used to
             create new connections for the PVC end-points and
             to change existing connections of the PVC end-
             points.  This object must be initially set to
             `createAndWait'.  In this state, the agent checks
             the parameters in the associated entries in the
             frPVCEndptTable to verify that the PVC end-points
             can be connected (i.e., the In parameters for one
             PVC end-point are equal to the Out parameters for
             the other PVC end-point).  This object can not be
             set to `active' unless the following columnar
             objects exist in this row: frPVCConnectAdminStatus
             and frPVCConnectGenericPointer.  The agent also
             supplies the associated value of frPVCConnectIndex
             for the frPVCEndptConnectIdentifier instances.  To
             turn on a PVC segment connection, the
             frPVCConnectAdminStatus is set to `active'."
     ::= { frPVCConnectEntry 11 }

This is the RowStatus, the boss of the whole row ๐Ÿ‘‘ It's how you create new connections and change existing ones. It starts out as createAndWait, and in that stage the agent double-checks the endpoints in frPVCEndptTable to make sure they can actually connect. The In parameters on one end have to match the Out parameters on the other end, or it's a no-go ๐Ÿšซ It also can't go to active unless both frPVCConnectAdminStatus and frPVCConnectGenericPointer are present in the row. And the agent hands out the frPVCConnectIndex value for the frPVCEndptConnectIdentifier instances. Then, to actually switch the PVC segment on, you set frPVCConnectAdminStatus to active. Two-step glow-up, very intentional ๐ŸŽ€


 -- The Frame Relay Accounting Groups

 -- The groups are the following:
 --  Accounting on a PVC basis
 --  Accounting on an Interface/Logical Port basis

 -- The Accounting on a Frame Relay PVC basis Group

 -- The accounting information is collected for a PVC
 -- segment end-point.

 frAccountPVCTable OBJECT-TYPE
     SYNTAX  SEQUENCE OF FrAccountPVCEntry
     MAX-ACCESS  not-accessible
     STATUS  current
     DESCRIPTION
             "The Frame Relay Accounting PVC table.  This table
             is used to perform accounting on a PVC segment
             end-point basis."
     ::= { frnetservObjects 6 }

 frAccountPVCEntry OBJECT-TYPE
     SYNTAX  FrAccountPVCEntry
     MAX-ACCESS  not-accessible
     STATUS  current
     DESCRIPTION
             "An entry in the Frame Relay Accounting PVC
             table."
     INDEX   { ifIndex, frAccountPVCDLCIIndex }
     ::= { frAccountPVCTable 1 }

 FrAccountPVCEntry ::=
     SEQUENCE {
         frAccountPVCDLCIIndex
             Integer32,
         frAccountPVCSegmentSize
             Integer32,
         frAccountPVCInSegments
             Counter32,
         frAccountPVCOutSegments
             Counter32
     }


 frAccountPVCDLCIIndex OBJECT-TYPE
     SYNTAX  Integer32
     MAX-ACCESS  not-accessible
     STATUS  current
     DESCRIPTION
             "The value of this object is equal to the DLCI
             value for this PVC segment end-point."
     ::= { frAccountPVCEntry 1 }

 frAccountPVCSegmentSize OBJECT-TYPE
     SYNTAX  Integer32
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The value of this object is equal to the Segment
             Size for this PVC segment end-point."
     ::= { frAccountPVCEntry 2 }

 frAccountPVCInSegments OBJECT-TYPE
     SYNTAX  Counter32
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The value of this object is equal to the number
             of segments received by this PVC segment end-
             point."
     ::= { frAccountPVCEntry 3 }

  frAccountPVCOutSegments OBJECT-TYPE
     SYNTAX  Counter32
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The value of this object is equal to the number
             of segments sent by this PVC segment end-point."
     ::= { frAccountPVCEntry 4 }

Okay, accounting time ๐Ÿงพ๐Ÿ’– There are two groups here, and this first one is accounting per PVC segment end-point. The table is frAccountPVCTable, and each row is indexed by ifIndex together with frAccountPVCDLCIIndex, which is the DLCI value of that end-point. Then you get the Segment Size plus counters for segments received (in) and segments sent (out). It's basically a little ledger for every end of every PVC ๐Ÿ“’โœจ

 -- The Accounting on a Frame Relay Logical Port basis Group


 frAccountLportTable OBJECT-TYPE
     SYNTAX  SEQUENCE OF FrAccountLportEntry
     MAX-ACCESS  not-accessible
     STATUS  current
     DESCRIPTION
             "The Frame Relay Accounting Logical Port table.
             This table is used to perform accounting on a
             UNI/NNI Logical Port basis."
     ::= { frnetservObjects 7 }

 frAccountLportEntry OBJECT-TYPE

     SYNTAX  FrAccountLportEntry
     MAX-ACCESS  not-accessible
     STATUS  current
     DESCRIPTION
             "An entry in the Frame Relay Accounting Logical
             Port table."
     INDEX   { ifIndex }
     ::= { frAccountLportTable 1 }

 FrAccountLportEntry ::=
     SEQUENCE {
         frAccountLportSegmentSize
             Integer32,
         frAccountLportInSegments
             Counter32,
         frAccountLportOutSegments
             Counter32
     }


 frAccountLportSegmentSize OBJECT-TYPE
     SYNTAX  Integer32
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The value of this object is equal to the Segment
             Size for this UNI/NNI logical port."
     ::= { frAccountLportEntry 1 }

 frAccountLportInSegments OBJECT-TYPE
     SYNTAX  Counter32
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The value of this object is equal to the number
             of segments received by this UNI/NNI logical
             port."
     ::= { frAccountLportEntry 2 }

 frAccountLportOutSegments OBJECT-TYPE
     SYNTAX  Counter32
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
             "The value of this object is equal to the number
             of segments sent by this UNI/NNI logical port."
     ::= { frAccountLportEntry 3 }

The second accounting group is the logical port version ๐Ÿ›ฃ๏ธ It's frAccountLportTable, indexed by just ifIndex, and it counts for each UNI/NNI logical port instead of each PVC end-point. Same vibe as before: Segment Size, plus segments in and segments out, just zoomed out to the port level ๐Ÿ”๐ŸŒธ


 -- Frame Relay Network Service TRAPS

 frPVCConnectStatusChange  NOTIFICATION-TYPE
     OBJECTS { frPVCConnectIndex,
               frPVCConnectLowIfIndex, frPVCConnectLowDLCIIndex,
               frPVCConnectHighIfIndex, frPVCConnectHighDLCIIndex,
               frPVCConnectL2hOperStatus, frPVCConnectH2lOperStatus,
               frPVCEndptRcvdSigStatus }
     STATUS  current
     DESCRIPTION
             "This trap indicates that the indicated PVC has
             changed state.  This trap is not sent if an FR-UNI
             changes state; a linkDown or linkUp trap should be
             sent instead."
     ::= { frnetservTraps 1 }

Now the alarm bell ๐Ÿ”” frPVCConnectStatusChange is the trap that fires when a PVC changes state, and it carries a whole bundle of objects: the connect index, the low and high ifIndex and DLCI values, both operational statuses, and frPVCEndptRcvdSigStatus. Real talk though, it's not sent when an FR-UNI changes state. For that situation, linkDown or linkUp traps are the ones that should go out instead ๐Ÿšจ Knowing who to call is everything, bestie ๐Ÿ’…


 -- Conformance Information

 frnetservConformance  OBJECT IDENTIFIER ::= { frnetservMIB 3 }

 frnetservGroups       OBJECT IDENTIFIER ::= { frnetservConformance 1 }
 frnetservCompliances  OBJECT IDENTIFIER ::= { frnetservConformance 2 }

 -- Compliance Statements

 frnetservCompliance MODULE-COMPLIANCE
       STATUS  current
       DESCRIPTION
         "The compliance statement for SNMPv2 entities
         which have Frame Relay Network Service Interfaces."

       MODULE -- this module
           MANDATORY-GROUPS { frnetservLportGroup,
                              frnetservMgtVCSigGroup,
                              frnetservPVCEndptGroup,
                              frnetservPVCConnectGroup }

           GROUP       frnetservAccountPVCGroup
           DESCRIPTION
                 "This group is optional for Frame Relay interfaces.
                 It is
                 mandatory if and only if accounting is performed
                 on a PVC
                 basis this
                 Frame Relay interface."

           GROUP       frnetservAccountLportGroup
           DESCRIPTION
                 "This group is optional for Frame Relay interfaces.
                 It is
                 mandatory if and only if accounting is
                 performed on a
                 logical port basis this
                 Frame Relay interface."

           OBJECT      frPVCEndptInMaxFrameSize
           SYNTAX      Integer32
           MIN-ACCESS  read-only
           DESCRIPTION
                 "Write access is not required."

           OBJECT      frPVCEndptInBc
           SYNTAX      Integer32
           MIN-ACCESS  read-only
           DESCRIPTION
                 "Write access is not required."

And now we're in the conformance zone ๐ŸŽ“ frnetservConformance hangs off frnetservMIB, with frnetservGroups and frnetservCompliances tucked underneath it. The compliance statement is for SNMPv2 entities that have Frame Relay Network Service Interfaces, and the mandatory groups are frnetservLportGroup, frnetservMgtVCSigGroup, frnetservPVCEndptGroup, and frnetservPVCConnectGroup ๐Ÿ“‹ The two accounting groups are optional for Frame Relay interfaces, but each one turns mandatory if and only if accounting is done on that basis for the interface. Then the two objects frPVCEndptInMaxFrameSize and frPVCEndptInBc get a MIN-ACCESS of read-only, with the note that write access isn't required ๐Ÿ™Œ Okay, that's the whole chunk, slay ๐Ÿ’–๐Ÿฆ‹

           OBJECT      frPVCEndptInBe
           SYNTAX      Integer32
           MIN-ACCESS  read-only
           DESCRIPTION
                 "Write access is not required."

           OBJECT      frPVCEndptInCIR
           SYNTAX      Integer32
           MIN-ACCESS  read-only
           DESCRIPTION
                 "Write access is not required."

           OBJECT      frPVCEndptOutMaxFrameSize
           SYNTAX      Integer32
           MIN-ACCESS  read-only
           DESCRIPTION
                 "Write access is not required."

           OBJECT      frPVCEndptOutBc
           SYNTAX      Integer32
           MIN-ACCESS  read-only
           DESCRIPTION
                 "Write access is not required."

           OBJECT      frPVCEndptOutBe
           SYNTAX      Integer32
           MIN-ACCESS  read-only
           DESCRIPTION

                 "Write access is not required."

           OBJECT      frPVCEndptOutCIR
           SYNTAX      Integer32
           MIN-ACCESS  read-only
           DESCRIPTION
                 "Write access is not required."

           OBJECT      frPVCEndptConnectIdentifier
           SYNTAX      Integer32
           MIN-ACCESS  read-only
           DESCRIPTION
                 "Write access is not required."

           OBJECT      frPVCEndptRowStatus
           SYNTAX      INTEGER { active(1) }  -- subset of RowStatus
           MIN-ACCESS  read-only
           DESCRIPTION
                 "Write access is not required, and only one of the
                 six enumerated values for the RowStatus textual
                 convention need be supported, specifically:
                 active(1)."

           OBJECT      frPVCConnectAdminStatus
           SYNTAX      INTEGER {
                         active(1),
                         inactive(2),
                         testing(3)
                        }
           MIN-ACCESS  read-only
           DESCRIPTION
                 "Write access is not required."

           OBJECT      frPVCConnectGenericPointer
           SYNTAX      OBJECT IDENTIFIER
           MIN-ACCESS  read-only
           DESCRIPTION
                 "Write access is not required."

           OBJECT      frPVCConnectRowStatus
           SYNTAX      INTEGER { active(1) }  -- subset of RowStatus
           MIN-ACCESS  read-only
           DESCRIPTION
                 "Write access is not required, and only one of the
                 six enumerated values for the RowStatus textual
                 convention need be supported, specifically:
                 active(1)."
       ::= { frnetservCompliances 1 }

 -- Units of Conformance

 frnetservLportGroup  OBJECT-GROUP
       OBJECTS { frLportNumPlan, frLportContact, frLportLocation,
                 frLportType,
                 frLportAddrDLCILen, frLportVCSigProtocol,
                 frLportVCSigPointer }
       STATUS  current
       DESCRIPTION
             "A collection of objects providing information applicable
             to a Frame Relay Logical Port."
       ::= { frnetservGroups 1 }

 frnetservMgtVCSigGroup  OBJECT-GROUP
       OBJECTS { frMgtVCSigProced,
                 frMgtVCSigUserN391,
                 frMgtVCSigUserN392,
                 frMgtVCSigUserN393,
                 frMgtVCSigUserT391,
                 frMgtVCSigNetN392,
                 frMgtVCSigNetN393,
                 frMgtVCSigNetT392,
                 frMgtVCSigNetnN4,
                 frMgtVCSigNetnT3,
                 frMgtVCSigUserLinkRelErrors,
                 frMgtVCSigUserProtErrors,
                 frMgtVCSigUserChanInactive,
                 frMgtVCSigNetLinkRelErrors,
                 frMgtVCSigNetProtErrors,
                 frMgtVCSigNetChanInactive }
       STATUS  current
       DESCRIPTION
             "A collection of objects providing information
             applicable to the
             Local In-Channel Signaling Procedures used for a
             UNI/NNI logical port."
       ::= { frnetservGroups 2 }

 frnetservPVCEndptGroup  OBJECT-GROUP
       OBJECTS { frPVCConnectIndexValue,
                 frPVCEndptInMaxFrameSize, frPVCEndptInBc,
                 frPVCEndptInBe, frPVCEndptInCIR,
                 frPVCEndptOutMaxFrameSize, frPVCEndptOutBc,
                 frPVCEndptOutBe, frPVCEndptOutCIR,
                 frPVCEndptConnectIdentifier, frPVCEndptRowStatus,
                 frPVCEndptRcvdSigStatus, frPVCEndptInFrames,
                 frPVCEndptOutFrames, frPVCEndptInDEFrames,
                 frPVCEndptInExcessFrames, frPVCEndptOutExcessFrames,
                 frPVCEndptInDiscards,
                 frPVCEndptInOctets, frPVCEndptOutOctets }
       STATUS  current
       DESCRIPTION
             "A collection of objects providing information application
             to a Frame Relay PVC end-point."
       ::= { frnetservGroups 3 }

 frnetservPVCConnectGroup  OBJECT-GROUP
       OBJECTS { frPVCConnectAdminStatus, frPVCConnectL2hOperStatus,
                 frPVCConnectH2lOperStatus, frPVCConnectL2hLastChange,
                 frPVCConnectH2lLastChange,
                 frPVCConnectGenericPointer, frPVCConnectRowStatus }
       STATUS  current
       DESCRIPTION
             "A collection of objects providing information applicable
             to a Frame Relay PVC connection."
       ::= { frnetservGroups 4 }

 frnetservAccountPVCGroup  OBJECT-GROUP
       OBJECTS { frAccountPVCSegmentSize, frAccountPVCInSegments,
                 frAccountPVCOutSegments }
       STATUS  current
       DESCRIPTION
             "A collection of objects providing accounting
             information application
             to a Frame Relay PVC end-point."
       ::= { frnetservGroups 5 }

 frnetservAccountLportGroup  OBJECT-GROUP
       OBJECTS { frAccountLportSegmentSize, frAccountLportInSegments,
                 frAccountLportOutSegments }
       STATUS  current
       DESCRIPTION
             "A collection of objects providing accounting
             information application
             to a Frame Relay logical port."
       ::= { frnetservGroups 6 }


 END

7. Acknowledgments โœจ

This doc was made jointly by the Frame Relay Forum Technical Committee MIB Working Group and the Frame Relay Service MIB Working Group ๐Ÿซถ๐Ÿ’–

8. References ๐Ÿ“š

[1] Case, J., McCloghrie, K., Rose, M., and S. Waldbusser, "Structure of Management Information for version 2 of the Simple Network Management Protocol (SNMPv2)", RFC 1442, SNMP Research, Inc., Hughes LAN Systems, Dover Beach Consulting, Inc., Carnegie Mellon University, April 1993.

[2] Galvin, J., and K. McCloghrie, "Administrative Model for version 2 of the Simple Network Management Protocol (SNMPv2)", RFC 1445, Trusted Information Systems, Hughes LAN Systems, April 1993.

[3] Case, J., McCloghrie, K., Rose, M., and S. Waldbusser, "Protocol Operations for version 2 of the Simple Network Management Protocol (SNMPv2)", RFC 1448, SNMP Research, Inc., Hughes LAN Systems, Dover Beach Consulting, Inc., Carnegie Mellon University, April 1993.

[4] McCloghrie, K., and M. Rose, "Management Information Base for Network Management of TCP/IP-based internets - MIB-II", STD 17, RFC 1213, Hughes LAN Systems, Performance Systems International, March 1991.

[5] McCloghrie, K., and F. Kastenholz, "Evolution of Interfaces Group of MIB-II", RFC 1573, Hughes LAN Systems, FTP Software, January 1994.

[6] Rodemann, K., "Service Management Architecture for Virtual Connection Services", Work in Progress, July 1993.

[7] ANSI T1.617-1991, American National Standard for Telecommunications - Integrated Services Digital Network (ISDN) - Digital Subscriber Signaling System No. 1 (DSS1) - Signaling Specification for Frame Relay Bearer Service.

[8] Brown, C., Baker, F., and C. Carvalho, "Management Information Base for Frame Relay DTEs", RFC 1315, Wellfleet Communications, Inc., Advanced Computer Communications, April 1992.

[9] Bradley, T., Brown, C., and A. Malis, "Multi-Protocol Interconnect over Frame Relay", RFC 1490, Wellfleet Communications, Inc., Ascom Timeplex, Inc., July 1993.

9. Security Considerations ๐Ÿšจ

Security issues are not discussed in this memo. ๐Ÿ’€ Like, not one word. So if you're building on this, go check the security stuff somewhere else first, bestie, because this doc is not the place for it ๐Ÿ™ˆ๐Ÿ”ฅ

10. Author's Address ๐ŸŽ€

   Tracy A. Brown
   Bell Communications Research
   331 Newman Springs Road
   P.O. Box 7020
   Red Bank, NJ  07701-7020

   Phone: (908) 758-2107
   EMail: tacox@mail.bellcore.com

That's the whole thing, bestie!! ๐ŸŒˆ๐Ÿ’…โœจ RFC 1596 is officially slayed ๐Ÿ‘‘๐Ÿฆ‹

๐Ÿ“ฆ where this page comes from