RFC 1747

Definitions of Managed Objects for SNA Data Link Control (SDLC) using SMIv2

๐Ÿ“… published January 1995, from ietf

Okay bestie, let's get into this one. RFC 1747 is a Standards Track doc from the Network Working Group, dated January 1995. Four authors wrote it: J. Hilgeman (Apertus Technologies, Inc., and the group's Chair), S. Nix (Metaplex, Inc.), A. Bartky (Sync Research, Inc.), and W. Clark (cisco Systems, Inc., who is also the Editor). The title block doesn't list anything it obsoletes or updates. ๐Ÿ’…


Status of this Memo โœจ

Quick vibe check first: this is an Internet standards track protocol for the Internet community, and it's asking for discussion and suggestions for improvements. For the standardization state and status, check the current edition of the "Internet Official Protocol Standards" (STD 1). Distribution of this memo is unlimited ๐ŸŒธ

Abstract ๐Ÿฆ‹

This spec extends the Management Information Base (MIB) for SNMP-based network management. It's all about configuring, monitoring, and controlling data link controls in an SNA environment ๐Ÿงš The scope is narrow on purpose: it only identifies managed objects for SNA Synchronous Data Link Control (SDLC) links.

Table of Contents ๐Ÿ“

   1.     The SNMPv2 Network Management Framework  .................  2
   1.1      Object Definitions  ....................................  2
   2.     Overview  ................................................  2
   2.1      Tables Defined in the SNADLC SDLC MIB  .................  3
   2.2      Row Creation Mechanism  ................................  3
   2.3      Relationship to the Interfaces Group  ..................  4
   3.     Definitions  .............................................  7
   3.1      Port Administrative Table  .............................  9
   3.2      Port Operational Table  ...............................  14
   3.3      Port Statistics Table  ................................  20
   3.4      Link Station Administrative Table  ....................  26
   3.5      Link Station Operational Table  .......................  35
   3.6      Link Station Statistics Table  ........................  44
   3.7      Trap Definitions  .....................................  56
   3.8      Compliance Statements  ................................  57
   4.     Acknowledgments  ........................................  65
   5.     References  .............................................  65
   6.     Glossary  ...............................................  66
   7.     Security Considerations  ................................  67
   8.     Authors' Addresses  .....................................  67

1. The SNMPv2 Network Management Framework ๐ŸŒˆ

Okay so the SNMPv2 Network Management Framework is made of four major components, and they're all kind of a team:

  • RFC 1441 defines the SMI, which is the mechanism for describing and naming objects for management purposes ๐Ÿ’œ
  • STD 17, RFC 1213 defines MIB-II, the core set of managed objects for the Internet suite of protocols ๐Ÿ‘‘
  • RFC 1445 defines the administrative and other architectural aspects of the framework ๐Ÿงš
  • RFC 1448 defines the protocol used for network access to managed objects ๐Ÿ”ฅ

The Framework also lets people define new objects for experimentation and evaluation. Very flexible, very iconic โœจ

1.1. Object Definitions ๐ŸŽ€

Managed objects live in a virtual information store called the Management Information Base, or MIB. Objects in the MIB are defined with the subset of Abstract Syntax Notation One (ASN.1) that the SMI uses. Each object type gets named by an OBJECT IDENTIFIER, which is an administratively assigned name. An object type plus an object instance uniquely identifies one specific instantiation of the object. For human convenience, we often just use a textual string called the descriptor to refer to the object type ๐Ÿ’–

2. Overview ๐Ÿฆ‹

This memo lists the proposed set of objects for configuring, monitoring, and controlling SDLC ports and link stations. Main character energy ๐Ÿ’…

2.1. Tables Defined in the SNADLC SDLC MIB ๐Ÿ“

The SNADLC MIB is made of two managed entities, and each one has three tables. The two SDLC entities are:

  • Ports: the physical connection, and
  • Link Stations: the logical connections on the Port.

The three management tables are:

  • Adminstration: objects used for configuring and controlling the operation of a Port or Link Station,
  • Operational: objects that reflect the run-time state of the Port or Link Station, and
  • Statistics: objects that reflect the operating metrics of the Port or Link Station.

Mixing those together gives you the actual tables in this MIB:

  1. Port Administration Table,
  2. Port Operation Table,
  3. Port Statistics Table,
  4. Link Station Administration Table,
  5. Link Station Operation Table,
  6. Link Station Statistics Table.

Every variable in this MIB is about SDLC ports and link stations only. Anything about higher-layer SNA entities, like Physical Units (PU) and Logical Units (LU), lives over in the SNA NAU MIB [4] ๐Ÿซถ

2.2. Row Creation Mechanism ๐ŸŒธ

Row creation for the sdlcLSAdminTable uses the RowStatus object. It follows the rules for use in an SNMPv1 context that were proposed in the memo "Row creation with SNMPv1" [5]. Before an agent accepts the destroy value for an entry, it has to check the operational state of the matching entry in the sdlcLSOperTable. Be careful with that one, it's giving safety ๐Ÿ™ˆ

2.3. Relationship to the Interfaces Group ๐Ÿงš

This memo SHALL conform to the recommendations of [6] ๐Ÿ’œ

The SDLC layer of each SDLC Port SHALL be modeled by a row in the ifTable, with an ifType set to the IANA assigned number for SDLC (17). Each SDLC port interface MUST comply with the following conformance groups in [6]:

  • ifGeneralGroup
  • ifStackGroup
  • ifPacketGroup

An implementation MAY optionally comply with the ifTestGroup defined in that memo to run vendor specific tests. One example is performing LPDA test functions ๐Ÿ”ฅ

The SDLC port's relationship with its physical, or lower-layer, interface (like RS-232, V.35, and so on) SHALL be modeled by a row in the ifStackTable. In that row, ifStackHigherLayer points to the SDLC port's ifTable instance, and ifStackLowerLayer points to the physical media-specific ifTable instance. The media-specific objects of those lower-layer interfaces will, of course, be described in their own respective MIBs (like [1]) ๐ŸŒˆ

Next up is a table with specific implementation guidelines for all the interface group objects in the conformance tables above. Let's go, bestie ๐ŸŽ€

Object              Use for an SDLC Port

ifIndex             Each SDLC port is represented by an ifEntry. All
                    SDLC port tables shall be indexed by ifIndex.

ifDescr             Description of the SDLC port.

ifType              The IANA value reserved for SDLC - 17.

ifMtu               Refer to [6].

ifSpeed             This object shall reflect the value of the
                    corresponding object in the ifEntry of the
                    associated lower-layer interface.

ifPhysAddress       A string denoting the physical location of the SDLC
                    port within its node.  This shall have unique
                    significance within each implementing node.

ifAdminStatus       This object shall reflect the value of the
                    corresponding object in the ifEntry of the
                    associated lower-layer interface.

ifOperStatus        This object shall reflect the value of the
                    corresponding object in the ifEntry of the
                    associated lower-layer interface.

ifLastChange        Refer to [6].

ifInOctets          Refer to [6].

ifInUcastPkts       This object shall count packets received from a
                    specific SDLC poll address.  Packets for the SDLC
                    broadcast address of x'FF' are not counted.

ifInDiscards        Refer to [6].

ifInErrors          Refer to [6].  Specific counters for these errors
                    are kept in the sdlcPortStatsTable.

ifInUnknownProtos   This counter shall return zero for SDLC ports.

ifOutOctets         Refer to [6].

ifOutUcastPkts      This object shall count packets transmitted to a
                    specific SDLC poll address (not x'FF').

ifOutDiscards       Refer to [6].

ifOutErrors         Refer to [6].  Specific counters for these errors
                    are kept in the sdlcPortStatsTable.

ifName              The textual name of the SDLC port or an octet string
                    of zero length.

ifInMulticastPkts   The value is 0 (not applicable to the SDLC layer).

ifInBroadcastPkts   This object shall count packets received on this
                    interface addressed to the SDLC broadcast address
                    (x'FF').  Only point-to-point ports supporting a
                    secondary switched station should return non-zero
                    values.

ifOutMulticastPkts  The value is 0 (not applicable to the SDLC layer).

ifOutBroadcastPkts  This object shall count packets transmitted on this
                    interface which were addressed to the SDLC broadcast
                    address (x'FF').  Only point-to-point ports
                    supporting a primary switched station should
                    return non-zero values.

ifHC*               Not part of the conformance group.

ifLinkUpDownTrapEnable
                    Refer to [6].  Default is disabled (2).

ifHighSpeed         Refer to [6].

ifPromiscuousMode   Should return false if this interface receives only
                    packets addressed to its SDLC poll address(es).
                    However, in certain implementations, the lower-layer
                    interface shall present all frames to the SDLC port
                    regardless of the poll address.  Such frames may be
                    the result of a misconfigured peer or the secondary
                    end of a multipoint connection.  Such
                    implementations should return true for this
                    object.

ifConnectorPresent  Set to 'false'.

ifStackHigherLayer  For each SDLC port there will be an ifStackEntry
                    with this object's value referring to the ifIndex of
                    the SDLC port's ifEntry for the SDLC layer.

ifStackLowerLayer   For each SDLC port there will be an ifStackEntry
                    with this object's value referring to the ifIndex of
                    the physical layer interface's ifEntry for that SDLC
                    port.

ifStackStatus       Refer to [6].

Okay so that table is where the implementation details live, and some of them are very particular. The ifPromiscuousMode row is the drama ๐Ÿ˜ญ It SHOULD return false when the interface only receives packets for its SDLC poll addresses. But in certain implementations, the lower-layer interface SHALL present all frames to the SDLC port no matter the poll address. Those frames might come from a misconfigured peer or from the secondary end of a multipoint connection. Implementations like that SHOULD return true for this object ๐Ÿ’€

3. Definitions ๐Ÿงš

Here's where the actual MIB module starts. It's an ASN.1 module called SNA-SDLC-MIB, and this first part is just the imports ๐ŸŒธ

SNA-SDLC-MIB DEFINITIONS ::= BEGIN

IMPORTS
    MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE,
    Counter32, Integer32, TimeTicks
        FROM SNMPv2-SMI
    DisplayString, RowStatus, TimeInterval
        FROM SNMPv2-TC
    MODULE-COMPLIANCE, OBJECT-GROUP
        FROM SNMPv2-CONF
    mib-2, ifIndex, ifAdminStatus, ifOperStatus
        FROM RFC1213-MIB;
Part 1 of 13 is done! The module definitions and tables pick up from here in the next part ๐ŸŽ€โœจ

okay so this is where the actual MIB module lives ๐Ÿงšโœจ the header block tells you who made it and when, and then it starts laying out the SDLC group bestie ๐Ÿ’…

snaDLC MODULE-IDENTITY
        LAST-UPDATED  "9411150000Z"
        ORGANIZATION  "IETF SNA DLC MIB Working Group"
        CONTACT-INFO
                "        Wayne Clark

                 Postal: cisco Systems, Inc.
                         3100 Smoketree Ct.
                         Suite 1000
                         Raleigh, NC 27604
                         US

                    Tel: +1 919 878 6958

                 E-Mail: wclark@cisco.com"

        DESCRIPTION
                "This is the MIB module for objects used to
                 manage SDLC devices."

::= { mib-2 41 }

--
--  The following data link controls are modelled in this MIB module:
--
--     1. SDLC
--

sdlc        OBJECT IDENTIFIER ::= { snaDLC 1 }
--
--  THE SDLC GROUP
--  ==============
--
--  The following resources are modelled in the SDLC group of this
--  MIB module:
--
--     1. PORTS
--     2. LINK STATIONS

sdlcPortGroup OBJECT IDENTIFIER ::= { sdlc 1 } -- Physical Ports
sdlcLSGroup   OBJECT IDENTIFIER ::= { sdlc 2 } -- Logical Link Stations

--
--  THE SDLC PORT GROUP
--  ===================
--
--  The following classes of information is modelled for each SDLC port:
--
--     1.  ADMINISTRATIVE ( read/write)
--     2.  OPERATIONAL    ( read-only)
--     3.  STATISTICS     ( read-only)

so the module has a snaDLC root sitting under mib-2, with SDLC as its first data link control ๐Ÿฆ‹ and two groups under it: ports (physical) and link stations (logical) ๐Ÿ’œ

the port group also says it models admin, operational, and statistics info, and a bunch of the stuff isn't in this module at all. it points out to other RFCs for that, like the ifTable from MIB-II and a few tables from the RS232-like MIB ๐ŸŒธ

--  Information not found in this group is found in tables described in
--  the following RFCs:
--
--    1.  RFC1213  - MIB-II
--
--            TABLE                      INDEX
--            ====================       ====================
--        a.  ifTable                    ifIndex
--
--    2.  RFC1659  - The RS232-like MIB
--
--            TABLE                      INDEX
--            ====================       ====================
--        a.  rs232PortTable             rs232PortIndex
--        b.  rs232SyncPortTable         rs232SyncPortIndex
--        c.  rs232InSigTable            rs232InSigPortIndex,
--                                       rs232InSigName
--        d.  rs232OutSigTable           rs232OutSigPortIndex,
--                                       rs232OutSigName
--     ** e.  rs232AsyncPortTable        rs232AsyncPortIndex
--
--     ** rs232AsyncPortTable for ISO 3309.3 ( Start-Stop SDLC).

the ** on rs232AsyncPortTable is a note that it's for ISO 3309.3 (Start-Stop SDLC) ๐Ÿ™ˆ kinda niche but it's giving thorough

now the admin table, which is the first real thing in the port group ๐ŸŽ€ this one holds the values you can change, and it's giving "configure me" energy ๐Ÿ‘‘

--  *************************************************************
--  *                                                           *
--  *           THE SDLC PORT ADMINISTRATIVE TABLE              *
--  *                                                           *
--  *************************************************************

sdlcPortAdminTable  OBJECT-TYPE
                    SYNTAX      SEQUENCE OF SdlcPortAdminEntry
                    MAX-ACCESS  not-accessible
                    STATUS      current
                    DESCRIPTION
                        "This table contains objects that can be
                        changed to manage an SDLC port.    Changing one
                        of these parameters may take effect in the
                        operating port immediately or may wait until
                        the interface is restarted depending on the
                        details of the implementation.

                        Most of the objects in this read-write table
                        have corresponding read-only objects in the
                        sdlcPortOperTable that return the current
                        operating value.

                        The operating values may be different from
                        these configured values if  a configured
                        parameter was changed after the interface was
                        started."
                     ::= { sdlcPortGroup 1 }

sdlcPortAdminEntry  OBJECT-TYPE
                    SYNTAX      SdlcPortAdminEntry
                    MAX-ACCESS  not-accessible
                    STATUS      current
                    DESCRIPTION
                        "A list of configured values for an SDLC port."
                    INDEX   { ifIndex }
                    ::= { sdlcPortAdminTable 1 }

SdlcPortAdminEntry  ::= SEQUENCE
{
        sdlcPortAdminName           DisplayString,
        sdlcPortAdminRole           INTEGER,
        sdlcPortAdminType           INTEGER,
        sdlcPortAdminTopology       INTEGER,
        sdlcPortAdminISTATUS        INTEGER,
        sdlcPortAdminACTIVTO        TimeInterval,
        sdlcPortAdminPAUSE          TimeInterval,
        sdlcPortAdminSERVLIM        Integer32,
        sdlcPortAdminSlowPollTimer  TimeInterval
}

the table is indexed by ifIndex, so each row lines up with an interface ๐Ÿ’– and the entry is just a list of the configured values for one port ๐Ÿ“

next up is the name object and the role object ๐ŸŒˆ the name is a DisplayString that's 1 to 10 characters long, and the role can be primary, secondary, or negotiable ๐Ÿ’…

sdlcPortAdminName   OBJECT-TYPE
                    SYNTAX      DisplayString (SIZE (1..10))
                    MAX-ACCESS  read-write
                    STATUS      current
                    DESCRIPTION
                        "An octet string that defines the physical port
                        to which this interface is assigned.  It has
                        implementation-specific significance. Its value
                        shall be unique within the administered
                        system.  It must contain only ASCII printable
                        characters.  Should an implementation choose to
                        accept a write operation  for this object, it
                        causes the logical port definition associated
                        with the table instance to be moved to  a
                        different physical port.  A write operation
                        shall not take effect until the port is cycled
                        inactive."
                    ::= { sdlcPortAdminEntry 1 }

sdlcPortAdminRole   OBJECT-TYPE
                    SYNTAX      INTEGER
                    {
                        primary(1),
                        secondary(2),
                        negotiable(3)
                    }
                    MAX-ACCESS  read-write
                    STATUS      current
                    DESCRIPTION
                        "This object describes the role that the link
                        station shall assume the next time a connection
                        is established.

                        Even though this is defined as a port object,
                        it is a link station attribute in the sense
                        that a role is per link station.  However, it
                        is not possible to vary link station roles on a
                        particular port.  For example, if an SDLC port
                        is configured to primary, all link stations on
                        that port must be primary."
                    ::= { sdlcPortAdminEntry 2 }

the role thing is a whole plot twist ๐Ÿ™ˆ it's a port object, but roles are really per link station, and you can't mix them on one port. if the port is primary, every link station on it has to be primary ๐Ÿ‘‘

after that come type and topology, which are leased vs switched and point-to-point vs multipoint ๐Ÿฆ‹

sdlcPortAdminType   OBJECT-TYPE
                    SYNTAX      INTEGER
                    {

                         leased(1),
                         switched(2)
                    }
                    MAX-ACCESS  read-write
                    STATUS      current
                    DESCRIPTION
                        "This parameter defines whether the SDLC port
                        is to connect to a leased or switched line.  A
                        write operation to this administrative  value
                        shall not take effect until the SDLC port has
                        been cycled inactive."
                    DEFVAL { leased }
                    ::= { sdlcPortAdminEntry 3 }

sdlcPortAdminTopology  OBJECT-TYPE
                    SYNTAX      INTEGER
                    {
                         pointToPoint(1),
                         multipoint(2)
                    }
                    MAX-ACCESS  read-write
                    STATUS      current
                    DESCRIPTION
                        "This parameter defines whether the SDLC port is
                        capable of operating in either a point-to-point
                        or multipoint topology.

                        sdlcPortAdminTopology == multipoint implies the
                        port can also operate in a point-to-point
                        topology.  sdlcPortAdminTopology ==
                        pointToPoint does not imply the port can
                        operate in a multipoint topology.

                        A write operation to this administrative value
                        shall not take effect until the SDLC port has
                        been cycled inactive."
                    DEFVAL { pointToPoint }
                    ::= { sdlcPortAdminEntry 4 }

sdlcPortAdminISTATUS  OBJECT-TYPE
                    SYNTAX      INTEGER
                    {
                         inactive(1),
                         active(2)
                    }
                    MAX-ACCESS  read-write
                    STATUS      current
                    DESCRIPTION

                        "This parameter controls the initial value of
                        the administrative status, ifAdminStatus, of
                        this SDLC port at port start-up.  Depending
                        on the implementation, a write operation to
                        this administrative object may not take effect
                        until the SDLC port has been cycled inactive."
                    DEFVAL { active }
                    ::= { sdlcPortAdminEntry 5 }

the topology one is a little sneaky โœจ multipoint means it can also do point-to-point, but point-to-point doesn't mean it can do multipoint ๐Ÿ’€

last up in this part are the timer objects, ACTIVTO and PAUSE ๐Ÿงš both are TimeInterval values in 1/100ths of a second, and the descriptions even call out the NCP parameter names they map to, with the unit differences noted ๐Ÿซถ

sdlcPortAdminACTIVTO    OBJECT-TYPE
                    SYNTAX      TimeInterval
                    MAX-ACCESS  read-write
                    STATUS      current
                    DESCRIPTION
                        "This parameter defines the period of time (in
                        1/100ths of a second) that the port will allow a
                        switched line to remain inactive before
                        disconnecting.  A switched line is considered
                        to be inactive if there are no I-Frames being
                        transferred.  A value of zero indicates no
                        timeout.  Depending on the implementation, a
                        write operation to this administered value may
                        not take effect until the port is cycled
                        inactive.

                        This object only has meaning for SDLC ports
                        where sdlcPortAdminType == switched

                        The object descriptor contains the name of an
                        NCP configuration parameter, ACTIVTO.  Please
                        note that the value of this object represents
                        1/100ths of a second while the NCP ACTIVTO is
                        represented in seconds."
                    DEFVAL { 0 }
                    ::= { sdlcPortAdminEntry 6 }

sdlcPortAdminPAUSE  OBJECT-TYPE
                    SYNTAX      TimeInterval
                    MAX-ACCESS  read-write
                    STATUS      current
                    DESCRIPTION
                        "This object defines the minimum elapsed time
                        (in 1/100ths of a second) between any two
                        traversals of the poll list for a primary SDLC
                        port.  Depending on the implementation, a write
                        operation to this administered value  may not
                        take effect until the port is cycled inactive.

                        The object descriptor contains the name of an
                        NCP configuration parameter, PAUSE.  Please
                        note that the value of this object represents
                        1/100ths of a second while the NCP PAUSE is
                        represented in 1/10ths of a second.

                        This object only has meaning for SDLC ports
                        where sdlcPortAdminRole == primary "
                    DEFVAL { 200 }
                    ::= { sdlcPortAdminEntry 7 }

ACTIVTO and PAUSE both count in 1/100ths of a second here, but the NCP versions are in seconds and 1/10ths of a second, so the descriptions flag that mismatch on purpose ๐Ÿ“ more of the admin table is coming next, so stay tuned ๐Ÿ‘€๐ŸŽ€

okay bestie, the admin side is done, so now we're flipping to the operational table! ๐Ÿ’… this is where we see what the port is actually doing right now ๐Ÿ‘€

sdlcPortAdminSERVLIM ๐Ÿฆ‹

this one is the poll-list traversal count, and it's sooo specific ๐Ÿ™ˆ

sdlcPortAdminSERVLIM OBJECT-TYPE
                    SYNTAX      Integer32
                    MAX-ACCESS  read-write
                    STATUS      current
                    DESCRIPTION
                        "This object defines the number of times the
                        active poll list will be traversed before
                        polling a station on the slow poll list for a
                        primary, multipoint SDLC port.  Depending  on
                        the implementation, a write operation to this
                        administered value  may not take effect until
                        the port is cycled inactive.

                        This object only has meaning for SDLC ports
                        where
                            sdlcPortAdminRole == primary
                        and
                            sdlcPortAdminTopology == multipoint "
                    DEFVAL { 20 }
                    ::= { sdlcPortAdminEntry 8 }

sdlcPortAdminSlowPollTimer โฑ๏ธ

ngl the slow poll timer is giving tiny-but-mighty energy โœจ

sdlcPortAdminSlowPollTimer OBJECT-TYPE
                    SYNTAX      TimeInterval
                    MAX-ACCESS  read-write
                    STATUS      current
                    DESCRIPTION
                        "This object describes the elapsed time (in
                        1/100ths of a second) between polls for failed
                        secondary link station addresses.  Depending
                        on the implementation, a write operation to
                        this administered value  may not take effect
                        until the port is cycled inactive.

                        This object only has meaning for SDLC ports
                        where
                            sdlcPortAdminRole == primary
                        and

                            sdlcPortAdminTopology == multipoint "
                    DEFVAL { 2000 }
                    ::= { sdlcPortAdminEntry 9 }

The SDLC Port Operational Table ๐ŸŽ€

ok this banner is literally the best part of the whole table, it's like a little header for the vibe ๐Ÿ’–

--  *************************************************************
--  *                                                           *
--  *                THE SDLC PORT OPERATIONAL TABLE            *
--  *                                                           *
--  *************************************************************

sdlcPortOperTable ๐Ÿงš

the table itself is basically the "what's live right now" list, and a bunch of its objects line up with the admin table we just did ๐Ÿซถ

sdlcPortOperTable   OBJECT-TYPE
                    SYNTAX      SEQUENCE OF SdlcPortOperEntry
                    MAX-ACCESS  not-accessible
                    STATUS      current
                    DESCRIPTION
                        "This table contains current SDLC port
                        parameters.  Many of these objects have
                        corresponding objects inthe sdlcPortAdminTable."
                    ::= { sdlcPortGroup 2 }

sdlcPortOperEntry ๐Ÿ“

the entry is indexed by ifIndex, so each port gets its own row, iconic ๐Ÿ‘‘

sdlcPortOperEntry   OBJECT-TYPE
                    SYNTAX      SdlcPortOperEntry
                    MAX-ACCESS  not-accessible
                    STATUS      current
                    DESCRIPTION
                        "Currently set parameters for a specific SDLC
                        port."
                    INDEX   { ifIndex }
                    ::= { sdlcPortOperTable 1 }

SdlcPortOperEntry ๐Ÿ’œ

here's the row layout, all the columns lined up in one neat little sequence ๐ŸŒธ

SdlcPortOperEntry   ::= SEQUENCE
{
        sdlcPortOperName                DisplayString,
        sdlcPortOperRole                INTEGER,
        sdlcPortOperType                INTEGER,
        sdlcPortOperTopology            INTEGER,
        sdlcPortOperISTATUS             INTEGER,
        sdlcPortOperACTIVTO             TimeInterval,
        sdlcPortOperPAUSE               TimeInterval,
        sdlcPortOperSlowPollMethod      INTEGER,
        sdlcPortOperSERVLIM             Integer32,
        sdlcPortOperSlowPollTimer       TimeInterval,
        sdlcPortOperLastModifyTime      TimeTicks,
        sdlcPortOperLastFailTime        TimeTicks,
        sdlcPortOperLastFailCause       INTEGER
}

sdlcPortOperName ๐ŸŒˆ

this one's the physical port label, and the implementation decides what it means, so it's kinda mysterious ๐Ÿ”ฎ

sdlcPortOperName    OBJECT-TYPE

                    SYNTAX      DisplayString (SIZE (1..8))
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "An octet string that describes the physical
                        port to which this interface is currently
                        attached.  It has  implementation-specific
                        significance."
                    ::= { sdlcPortOperEntry 1 }

sdlcPortOperRole ๐Ÿ‘‘

role check! primary, secondary, or undefined, and undefined is the "not decided yet" bestie ๐Ÿฅน

sdlcPortOperRole    OBJECT-TYPE
                    SYNTAX      INTEGER
                    {
                        primary(1),
                        secondary(2),
                        undefined(3)
                    }
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object describes the role that the link
                        station has assumed on this connection.

                        Even though this is defined as a port object,
                        it is a link station attribute in the sense
                        that a role is per link station.  However, it
                        is not possible to vary link station roles on a
                        particular port.  For example, if an SDLC port
                        is configured to primary, all link stations on
                        that port must be primary.

                        The value of sdlcPortOperRole is undefined(3)
                        whenever the link station role has not yet been
                        established by the mode setting command."
                    ::= { sdlcPortOperEntry 2 }

sdlcPortOperType ๐Ÿฆ‹

leased or switched, the classic "is this line a dedicated thing or a dial-up thing" question ๐Ÿ“ž

sdlcPortOperType    OBJECT-TYPE
                    SYNTAX      INTEGER
                    {
                         leased(1),
                         switched(2)
                    }
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This parameter defines whether the SDLC port
                        is currently operating as though connected to a
                        leased or switched line."

                    ::= { sdlcPortOperEntry 3 }

sdlcPortOperTopology ๐Ÿซง

point-to-point or multipoint, pick your vibe ๐Ÿ’…

sdlcPortOperTopology  OBJECT-TYPE
                    SYNTAX      INTEGER
                    {
                         pointToPoint(1),
                         multipoint(2)
                    }
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This parameter defines whether the SDLC port is
                        currently operating in a point-to-point or
                        multipoint topology."
                    ::= { sdlcPortOperEntry 4 }

sdlcPortOperISTATUS ๐ŸŒธ

this is the port's starting admin status, the value it had when the port last started up, so it's like a little memory ๐Ÿง โœจ

sdlcPortOperISTATUS OBJECT-TYPE
                    SYNTAX      INTEGER
                    {
                         inactive(1),
                         active(2)
                    }
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This parameter describes the initial value of
                        the administrative status, ifAdminStatus, of
                        this SDLC port at last port start-up."
                    ::= { sdlcPortOperEntry 5 }

sdlcPortOperACTIVTO ๐ŸŽ€

ACTIVTO is the idle timeout for switched lines, and zero means no timeout at all, which is a whole mood ๐Ÿ˜ญ

sdlcPortOperACTIVTO OBJECT-TYPE
                    SYNTAX      TimeInterval
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This parameter defines the period of time (in
                        100ths of a second) that the port will allow a
                        switched line to remain inactive before
                        disconnecting.  A switched line is considered
                        to be inactive if there are no I-Frames being
                        transferred.

                        The object descriptor contains the name of an
                        NCP configuration parameter, ACTIVTO.  Please
                        note that the value of this object represents
                        1/100ths of a second while the NCP ACTIVTO is
                        represented in seconds.

                        A value of zero indicates no timeout."
                    ::= { sdlcPortOperEntry 6 }

sdlcPortOperPAUSE โธ๏ธ

PAUSE is the minimum gap between poll list traversals on a primary port, so it's basically the chill time between rounds ๐ŸŒ™

sdlcPortOperPAUSE   OBJECT-TYPE
                    SYNTAX      TimeInterval
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object describes the current minimum
                        elapsed time (in 1/100ths of a second) between
                        any two traversals of the poll list for a
                        primary SDLC port.

                        The object descriptor contains the name of an
                        NCP configuration parameter, PAUSE.  Please
                        note that the value of this object represents
                        1/100ths of a second while the NCP PAUSE is
                        represented in 1/10ths of a second.

                        This object only has meaning for SDLC ports
                        where
                            sdlcPortAdminRole == primary "
                    ::= { sdlcPortOperEntry 7 }

sdlcPortOperSlowPollMethod ๐Ÿซถ

this one picks HOW the failed secondaries get polled: servlim, pollpause, or other, and each option points you at a different knob ๐Ÿ”ฅ

sdlcPortOperSlowPollMethod OBJECT-TYPE
                    SYNTAX      INTEGER
                    {
                         servlim(1),
                         pollpause(2),
                         other(3)
                    }
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object defines the exact method that is in
                        effect for periodically polling failed secondary
                        link station addresses.

                        If sdlcPortOperSlowPollMethod == servlim, then
                        sdlcPortOperSERVLIM defines the actual polling
                        characteristics.

                        If sdlcPortOperSlowPollMethod == pollpause,
                        then sdlcPortOperSlowPollTimer defines the
                        actual polling characteristics.

                        If sdlcPortOperSlowPollMethod == other, then
                        the polling characteristics are modeled in
                        vendor-specific objects.

                        This object only has meaning for SDLC ports
                        where
                            sdlcPortOperRole == primary
                        and
                            sdlcPortOperTopology == multipoint "
                    ::= { sdlcPortOperEntry 8 }

sdlcPortOperSERVLIM ๐ŸŒท

the live version of the traversal count from before, so you can see what's actually running right now ๐Ÿ’–

sdlcPortOperSERVLIM OBJECT-TYPE
                    SYNTAX      Integer32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object describes the number of times the
                        active poll list is currently being traversed
                        before polling a station on the slow poll list
                        for a primary, multipoint SDLC port.

                        This object only has meaning for SDLC ports
                        where
                            sdlcPortOperRole == primary
                        and
                            sdlcPortOperTopology == multipoint "
                    ::= { sdlcPortOperEntry 9 }

Okay so first up is the timing and failure bookkeeping for the SDLC port ๐Ÿ• Here's the slow poll timer, plus the three "when did stuff go wrong" objects that are giving forensic energy ๐Ÿ”

sdlcPortOperSlowPollTimer OBJECT-TYPE
                    SYNTAX      TimeInterval
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object describes the elapsed time (in
                        1/100ths of a second) between polls for failed
                        secondary link station addresses.

                        This object only has meaning for SDLC ports
                        where
                            sdlcPortOperRole == primary
                        and
                            sdlcPortOperTopology == multipoint "
                    ::= { sdlcPortOperEntry 10 }

So this one tracks how long the port waits between polls for failed secondary link station addresses, measured in hundredths of a second โฑ๏ธ It only means anything when the port's role is primary and its topology is multipoint, so it's very much a "only if you're in this specific setup" kind of object ๐Ÿงš

sdlcPortOperLastModifyTime    OBJECT-TYPE
                    SYNTAX      TimeTicks
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object describes the value of sysUpTime

                         when this port definition was last modified.
                         If the port has not been modified, then this
                         value shall be zero."
                    ::= { sdlcPortOperEntry 11 }

Next is sdlcPortOperLastModifyTime ๐Ÿ“ It records the sysUpTime at the moment the port definition was last changed, and if nobody has ever touched the port, it's just zero ๐Ÿฅน

sdlcPortOperLastFailTime    OBJECT-TYPE
                    SYNTAX      TimeTicks
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object describes the value of sysUpTime
                        when this SDLC port last failed.  If the port
                        has not failed, then this value shall be zero."
                    ::= { sdlcPortOperEntry 12 }

And sdlcPortOperLastFailTime is the same vibe but for failures ๐Ÿ’€ It stores the sysUpTime of the port's most recent failure, and a port that has never failed sits at zero ๐Ÿซถ

sdlcPortOperLastFailCause    OBJECT-TYPE
                    SYNTAX      INTEGER
                    {
                        undefined(1),
                        physical(2)
                    }
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This enumerated object describes the cause of
                        the last failure of this SDLC port.  If the
                        port has not failed, then this object has a
                        value of undefined(1)."
                    DEFVAL { undefined }
                    ::= { sdlcPortOperEntry 13 }

sdlcPortOperLastFailCause tells you why the last failure happened, and the only options listed are undefined(1) and physical(2) ๐Ÿ”Œ If the port has never failed, it sits at undefined(1), which is also the default value ๐ŸŽ€


Now the big one: the SDLC port statistics table ๐Ÿ“Š This is where every counter lives, and each row belongs to one specific SDLC port. Let's start with the table and its entry ๐Ÿฆ‹

--  *************************************************************
--  *                                                           *
--  *           THE SDLC PORT STATISTICS TABLE                  *
--  *                                                           *
--  *************************************************************

sdlcPortStatsTable  OBJECT-TYPE
                    SYNTAX      SEQUENCE OF SdlcPortStatsEntry
                    MAX-ACCESS  not-accessible
                    STATUS      current
                    DESCRIPTION
                        "Each entry in this table contains statistics
                        for a specific SDLC port."
                     ::= { sdlcPortGroup 3 }

sdlcPortStatsEntry  OBJECT-TYPE
                    SYNTAX      SdlcPortStatsEntry
                    MAX-ACCESS  not-accessible
                    STATUS      current
                    DESCRIPTION
                        "A list of statistics for an SDLC port."
                    INDEX   { ifIndex }
                    ::= { sdlcPortStatsTable 1 }

SdlcPortStatsEntry ::= SEQUENCE
{
        sdlcPortStatsPhysicalFailures Counter32,
        sdlcPortStatsInvalidAddresses Counter32,
        sdlcPortStatsDwarfFrames      Counter32,
        sdlcPortStatsPollsIn          Counter32,
        sdlcPortStatsPollsOut         Counter32,
        sdlcPortStatsPollRspsIn       Counter32,
        sdlcPortStatsPollRspsOut      Counter32,
        sdlcPortStatsLocalBusies      Counter32,
        sdlcPortStatsRemoteBusies     Counter32,
        sdlcPortStatsIFramesIn        Counter32,
        sdlcPortStatsIFramesOut       Counter32,
        sdlcPortStatsOctetsIn         Counter32,
        sdlcPortStatsOctetsOut        Counter32,
        sdlcPortStatsProtocolErrs     Counter32,
        sdlcPortStatsActivityTOs      Counter32,
        sdlcPortStatsRNRLIMITs        Counter32,
        sdlcPortStatsRetriesExps      Counter32,
        sdlcPortStatsRetransmitsIn    Counter32,
        sdlcPortStatsRetransmitsOut   Counter32
}

So the table is one row per SDLC port, indexed by ifIndex, and the entry is basically a grab bag of nineteen Counter32s ๐ŸŽ€ Let's go through them one by one, bestie ๐Ÿ’–

sdlcPortStatsPhysicalFailures OBJECT-TYPE

                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total number of times
                        this port has failed due to its physical media
                        since port startup.  At port startup time,
                        this object must be initialized to zero."
                    ::= { sdlcPortStatsEntry 1 }

sdlcPortStatsPhysicalFailures counts how many times the port has failed because of its physical media since startup, and it gets reset to zero when the port starts up ๐Ÿ”Œ

sdlcPortStatsInvalidAddresses OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total number of
                        frames received by this port with invalid link
                        station addresses."
                    ::= { sdlcPortStatsEntry 2 }

sdlcPortStatsInvalidAddresses is the tally of frames that came in with invalid link station addresses ๐Ÿ™…โ€โ™€๏ธ

sdlcPortStatsDwarfFrames OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total number of
                        frames received by this port which were
                        delivered intact by the physical layer but were
                        too short to be legal.

                        Ignoring the frame check sequence (FCS), a
                        frame is considered to be too short if it
                        is less than 2 bytes for sdlcLSOperMODULO of
                        eight, or if it is less than 3 bytes for
                        sdlcLSOperMODULO of onetwentyeight."

                    ::= { sdlcPortStatsEntry 3 }

sdlcPortStatsDwarfFrames is for the tiny frames ๐Ÿงš These made it through the physical layer intact but are too short to be legal. Ignoring the FCS, a frame counts as too short if it's under 2 bytes when sdlcLSOperMODULO is eight, or under 3 bytes when sdlcLSOperMODULO is onetwentyeight ๐ŸŒธ

sdlcPortStatsPollsIn OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                         "This object reflects the total number of polls
                         received by this port since the port was
                         created."

                    ::= { sdlcPortStatsEntry 4 }

sdlcPortStatsPollsOut OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                         "This object reflects the total number of polls
                         sent by this port since the port was created."

                    ::= { sdlcPortStatsEntry 5 }

sdlcPortStatsPollsIn counts the polls this port has received, and sdlcPortStatsPollsOut counts the polls it has sent, both since the port was created ๐Ÿ“จ

sdlcPortStatsPollRspsIn OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                         "This object reflects the total number of poll
                         responses received by this port since the port
                         was created."

                    ::= { sdlcPortStatsEntry 6 }

sdlcPortStatsPollRspsOut OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                         "This object reflects the total number of poll
                         responses sent by this port since the port was
                         created."

                    ::= { sdlcPortStatsEntry 7 }

Same energy for the poll responses: sdlcPortStatsPollRspsIn counts the ones received and sdlcPortStatsPollRspsOut counts the ones sent, since creation ๐Ÿ’…

sdlcPortStatsLocalBusies OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                         "This object reflects the total number of
                         times that the local SDLC link stations on
                         this port have entered a busy state (RNR).
                         This object is initialized to zero when the
                         port is created."
                    ::= { sdlcPortStatsEntry 8 }

sdlcPortStatsRemoteBusies OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                         "This object reflects the total number of
                         times that the adjacent (i.e., remote) SDLC
                         link stations on this port have entered a busy
                         state (RNR).  This object is initialized to
                         zero when the port is created."
                    ::= { sdlcPortStatsEntry 9 }

Now the busy states ๐Ÿ™ˆ sdlcPortStatsLocalBusies counts how many times the local SDLC link stations on this port went into a busy state (RNR), and sdlcPortStatsRemoteBusies does the same for the adjacent, aka remote, link stations ๐Ÿซถ

sdlcPortStatsIFramesIn OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                         "This object reflects the total number of
                         I-Frames that have been received by SDLC link
                         stations on this port.  This object is
                         initialized to zero when the port is created."
                    ::= { sdlcPortStatsEntry 10 }

sdlcPortStatsIFramesOut OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                         "This object reflects the total number of
                         I-Frames that have been transmitted by SDLC
                         link stations on this port.  This object is
                         initialized to zero when the port is created."
                    ::= { sdlcPortStatsEntry 11 }

sdlcPortStatsIFramesIn tallies the I-Frames received by the SDLC link stations on this port, and sdlcPortStatsIFramesOut tallies the ones transmitted ๐Ÿฆ‹ Both start at zero when the port is created ๐ŸŒˆ

sdlcPortStatsOctetsIn OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                         "This object reflects the total octets
                         received from adjacent SDLC link stations on
                         this port.  This object covers the address,
                         control, and information field of I-Frames
                         only.  This object is initialized to zero when
                         the port is created."
                    ::= { sdlcPortStatsEntry 12 }

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

                         "This object reflects the total octets
                         transmitted to adjacent SDLC link stations on
                         this port.  This object covers the address,
                         control, and information field of I-Frames
                         only.  This object is initialized to zero when
                         the port is created."
                    ::= { sdlcPortStatsEntry 13 }

The octet counters are a bit more specific ๐Ÿ‘€ sdlcPortStatsOctetsIn covers octets received from adjacent SDLC link stations, and sdlcPortStatsOctetsOut covers octets sent to them. Both only count the address, control, and information fields of I-Frames, and both start at zero when the port is created ๐Ÿ’œ

sdlcPortStatsProtocolErrs OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                         "This object reflects the total number of
                         times that the SDLC link stations on this port
                         have deactivated the link as a result of
                         having received a protocol violation from the
                         adjacent link station.  This object is
                         initialized to zero when the port is created."
                    ::= { sdlcPortStatsEntry 14 }

And sdlcPortStatsProtocolErrs is the drama counter ๐Ÿ˜ญ It counts how many times the SDLC link stations on this port deactivated the link after receiving a protocol violation from the adjacent link station, and it also starts at zero when the port is created ๐Ÿ’€

Okay bestie, the port stats wrap up with a bunch of counters for deactivations and retransmits ๐Ÿฆ‹๐Ÿ’…

sdlcPortStatsActivityTOs OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                         "This object reflects the total number of
                         times that the SDLC link stations on this port
                         have deactivated the link as a result of no
                         activity on the link.  This object is
                         initialized to zero when the port is created."
                    ::= { sdlcPortStatsEntry 15 }

sdlcPortStatsRNRLIMITs OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                         "This object reflects the total number of
                         times that the SDLC link stations on this port
                         have deactivated the link as a result of its
                         RNRLIMIT timer expiring.  This object is
                         initialized to zero when the port is created."
                    ::= { sdlcPortStatsEntry 16 }

sdlcPortStatsRetriesExps OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                         "This object reflects the total number of
                         times that the SDLC link stations on this port
                         have deactivated the link as a result of a
                         retry sequence being exhausted.  This object
                         is initialized to zero when the port is
                         created."
                    ::= { sdlcPortStatsEntry 17 }

sdlcPortStatsRetransmitsIn OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                         "This object reflects the total number of
                         I-Frames retransmitted by remote link stations
                         for all SDLC link stations on this port.  This
                         object is initialized to zero when the port is
                         created."
                    ::= { sdlcPortStatsEntry 18 }

sdlcPortStatsRetransmitsOut OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                         "This object reflects the total number of
                         I-Frames retransmitted by all local SDLC link
                         stations on this port.  This object is
                         initialized to zero when the port is created."
                    ::= { sdlcPortStatsEntry 19 }

Next up is the SDLC link station group, and it's giving organized ๐Ÿ—‚๏ธโœจ The file literally says it models three classes of info for each link station: administrative (read-write), operational (read-only), and statistics (read-only). We're starting with the administrative table ๐ŸŽ€

--
--  THE SDLC LINK STATION GROUP
--  ===========================
--

--  The following classes of information is modelled for each SDLC link
--  station:
--
--     1.  ADMINISTRATIVE ( read-write)
--     2.  OPERATIONAL    ( read-only)
--     3.  STATISTICS     ( read-only)

--  *************************************************************
--  *                                                           *
--  *        THE SDLC LINK STATION ADMINISTRATIVE TABLE         *
--  *                                                           *
--  *************************************************************

sdlcLSAdminTable  OBJECT-TYPE
                    SYNTAX      SEQUENCE OF SdlcLSAdminEntry
                    MAX-ACCESS  not-accessible
                    STATUS      current
                    DESCRIPTION
                        "This table contains objects that can be
                        changed to manage an SDLC link station.
                        Changing one of these parameters may take
                        effect in the operating link immediately or may
                        wait until the link is restarted depending on
                        the details of the implementation.

                        The entries in sdlcLSAdminTable can be created
                        either by an agent or a management station. The
                        management station can create an entry in
                        sdlcLSAdminTable by setting the appropriate
                        value in sdlcLSAdminRowStatus.

                        Most of the objects in this read-create table
                        have corresponding read-only objects in the
                        sdlcLSOperTable that reflect the current
                        operating value.

                        The operating values may be different from
                        these configured values if changed by XID
                        negotiation or if a configured parameter was
                        changed after the link was started."
                    ::= { sdlcLSGroup 1 }

sdlcLSAdminEntry    OBJECT-TYPE

                    SYNTAX      SdlcLSAdminEntry
                    MAX-ACCESS  not-accessible
                    STATUS      current
                    DESCRIPTION
                         "A list of configured values for an SDLC link
                         station."
                    INDEX   { ifIndex, sdlcLSAddress }
                    ::= { sdlcLSAdminTable 1 }

SdlcLSAdminEntry ::= SEQUENCE
{
        sdlcLSAddress           INTEGER,
        sdlcLSAdminName         DisplayString,
        sdlcLSAdminState        INTEGER,
        sdlcLSAdminISTATUS      INTEGER,
        sdlcLSAdminMAXDATASend  Integer32,
        sdlcLSAdminMAXDATARcv   Integer32,
        sdlcLSAdminREPLYTO      TimeInterval,
        sdlcLSAdminMAXIN        INTEGER,
        sdlcLSAdminMAXOUT       INTEGER,
        sdlcLSAdminMODULO       INTEGER,
        sdlcLSAdminRETRIESm     INTEGER,
        sdlcLSAdminRETRIESt     TimeInterval,
        sdlcLSAdminRETRIESn     Integer32,
        sdlcLSAdminRNRLIMIT     TimeInterval,
        sdlcLSAdminDATMODE      INTEGER,
        sdlcLSAdminGPoll        INTEGER,
        sdlcLSAdminSimRim       INTEGER,
        sdlcLSAdminXmitRcvCap   INTEGER,
        sdlcLSAdminRowStatus    RowStatus
}

sdlcLSAddress       OBJECT-TYPE
                    SYNTAX      INTEGER (1..255)
                    MAX-ACCESS  read-create
                    STATUS      current
                    DESCRIPTION
                         "This value is the poll address of the
                         secondary link station for this SDLC link.  It
                         uniquely identifies the SDLC link station
                         within a single SDLC port."
                    ::= { sdlcLSAdminEntry 1 }

sdlcLSAdminName     OBJECT-TYPE
                    SYNTAX      DisplayString (SIZE (1..10))
                    MAX-ACCESS  read-create
                    STATUS      current
                    DESCRIPTION

                        "An octet string that defines the local name of
                        the SDLC link station.  This field may be sent
                        in the XID3 control vector 0x0E, type 0xF7."
                    ::= { sdlcLSAdminEntry 2 }

sdlcLSAdminState    OBJECT-TYPE
                    SYNTAX      INTEGER
                    {
                         inactive(1),
                         active(2)
                    }
                    MAX-ACCESS  read-create
                    STATUS      current
                    DESCRIPTION
                        "This object controls the desired state of the
                        SDLC station.  The managed system shall attempt
                        to keep the operational state, sdlcLSOperState,
                        consistent with this value."
                    DEFVAL { active }
                    ::= { sdlcLSAdminEntry 3 }

sdlcLSAdminISTATUS  OBJECT-TYPE
                    SYNTAX      INTEGER
                    {
                         inactive(1),
                         active(2)
                    }
                    MAX-ACCESS  read-create
                    STATUS      current
                    DESCRIPTION
                        "This parameter controls the desired state,
                        sdlcLSAdminState, of the SDLC link station at
                        link station start-up."
                    DEFVAL { active }
                    ::= { sdlcLSAdminEntry 4 }

sdlcLSAdminMAXDATASend  OBJECT-TYPE
                    SYNTAX      Integer32
                    MAX-ACCESS  read-create
                    STATUS      current
                    DESCRIPTION
                        "This object contains the maximum PDU size that
                        the local link station thinks it can send to
                        the adjacent link station before having
                        received any XID from the ALS.  After the
                        maximum PDU size that the ALS can receive is
                        known (via XID exchange) that value is
                        reflected in sdlcLSOperMAXDATASend and takes
                        precedence over this object.

                        This value includes the Transmission Header
                        (TH) and the Request Header (RH)."
                    ::= { sdlcLSAdminEntry 5 }

sdlcLSAdminMAXDATARcv  OBJECT-TYPE
                    SYNTAX      Integer32
                    MAX-ACCESS  read-create
                    STATUS      current
                    DESCRIPTION
                        "This object contains the maximum PDU size that
                        the local link station can receive from the
                        adjacent link station.  This value is sent in
                        the XID to the ALS.

                        This value includes the Transmission Header
                        (TH) and the Request Header (RH)."
                    ::= { sdlcLSAdminEntry 6 }

Okay so next up is the reply timeout, and it's giving timing โฐ๐Ÿ’…

sdlcLSAdminREPLYTO  OBJECT-TYPE
                    SYNTAX      TimeInterval
                    MAX-ACCESS  read-create
                    STATUS      current
                    DESCRIPTION
                        "This object controls the reply timeout (in
                        1/100ths of a second) for an SDLC link
                        station.  If the link station does not receive
                        a response to a poll or message before the
                        specified time expires then the appropriate
                        error recovery shall be initiated.

                        The object descriptor contains the name of an
                        NCP configuration parameter, REPLYTO.  Please
                        note that the value of this object represents
                        1/100ths of a second while the NCP REPLYTO is
                        represented in 1/10ths of a second.

                        Depending on the implementation, a write
                        operation to this administered value  may not
                        change the operational value, sdlcLSOperREPLYTO,
                        until the link station is cycled inactive.

                        This object only has meaning for SDLC ports
                        where sdlcPortAdminRole == primary "
                    DEFVAL { 100 }
                    ::= { sdlcLSAdminEntry 7 }

So basically, if a link station doesn't hear back from a poll or message before this timer runs out, the appropriate error recovery shall kick in ๐Ÿšจ The object also points at the NCP config param REPLYTO, but heads up bestie: this one counts in 1/100ths of a second while NCP counts in 1/10ths ๐Ÿ™ˆ Depending on the implementation, a write might not change sdlcLSOperREPLYTO until the link station is cycled inactive. And it only means something for SDLC ports where sdlcPortAdminRole == primary, so it's a primary-only thing ๐Ÿ‘‘ The default is 100.

sdlcLSAdminMAXIN    OBJECT-TYPE
                    SYNTAX      INTEGER (1..127)
                    MAX-ACCESS  read-create
                    STATUS      current
                    DESCRIPTION
                        "This object controls the maximum number of
                        unacknowledged I-frames which an SDLC link
                        station may receive.  This should range from 1
                        to (sdlcLSAdminMODULO - 1).  This value is sent
                        in the XID to the ALS.

                        A write operation to this administered value
                        will not change the operational value,
                        sdlcLSOperMAXIN, until the link station is
                        cycled inactive."
                    DEFVAL { 7 }
                    ::= { sdlcLSAdminEntry 8 }

MAXIN is the cap on how many unacknowledged I-frames a link station can receive ๐Ÿฆ‹ It should be somewhere from 1 up to (sdlcLSAdminMODULO - 1), and this value gets sent over in the XID to the ALS. A write won't change sdlcLSOperMAXIN until the link station gets cycled inactive. Default is 7 โœจ

sdlcLSAdminMAXOUT   OBJECT-TYPE
                    SYNTAX      INTEGER (1..127)
                    MAX-ACCESS  read-create
                    STATUS      current
                    DESCRIPTION
                        "This object controls the maximum number of
                        consecutive unacknowledged I-frames which an
                        SDLC link station shall send without an
                        acknowledgement.  This shall range from 1 to
                        (sdlcLSAdminMODULO - 1).

                        For link stations on switched SDLC lines,
                        certain implementions may choose to override
                        this administered value with the value
                        received in the XID exchange.

                        Depending on the implementation, a write
                        operation to this administered value may not
                        change the operational value,
                        sdlcLSOperMAXOUT, until the link station is
                        cycled inactive.

                        An implementation can support only modulo 8,
                        only modulo 128, or both."
                    DEFVAL { 1 }
                    ::= { sdlcLSAdminEntry 9 }

MAXOUT is the flip side: the max number of consecutive unacknowledged I-frames a link station shall send without getting an acknowledgement ๐Ÿ’Œ It also ranges from 1 to (sdlcLSAdminMODULO - 1). On switched SDLC lines, some implementations might choose to swap in the value from the XID exchange instead. Same deal as before, a write might not change sdlcLSOperMAXOUT until the link station is cycled inactive, and an implementation can do modulo 8, modulo 128, or both ๐Ÿ’… Default is 1.

sdlcLSAdminMODULO   OBJECT-TYPE
                    SYNTAX      INTEGER
                    {

                        eight(8),
                        onetwentyeight(128)
                    }
                    MAX-ACCESS  read-create
                    STATUS      current
                    DESCRIPTION
                        "This object controls the modulus for an SDLC
                        link station.  This modulus determines the size
                        of the rotating acknowledgement window used the
                        SDLC link station pair.

                        A write operation to this administered value
                        will not change the operational value,
                        sdlcLSOperMODULO, until the link station is
                        cycled inactive.

                        An implementation can support only modulo 8,
                        only modulo 128, or both."
                    DEFVAL { eight }
                    ::= { sdlcLSAdminEntry 10 }

MODULO is the modulus for the link station, and it's the thing that sets how big the rotating acknowledgement window is for the link station pair ๐ŸŒ€ Writes won't change sdlcLSOperMODULO until the station is cycled inactive, and again, an implementation can support modulo 8, modulo 128, or both ๐ŸŽ€ Default is eight.

sdlcLSAdminRETRIESm OBJECT-TYPE
                    SYNTAX      INTEGER (0..128)
                    MAX-ACCESS  read-create
                    STATUS      current
                    DESCRIPTION
                        "This object controls number of retries in a
                        retry sequence for the local SDLC link
                        station.  A retry sequence is a series of
                        retransmitted frames ( data or control) for
                        which no positive acknowledgement is received.

                        The number of times that the retry sequence is
                        to be repeated is controlled by the object:
                        sdlcLSAdminRETRIESn.  The interval between retry
                        sequences is controlled by the object:
                        sdlcLSAdminRETRIESt.

                        A value of zero indicates no retries. If the
                        value of sdlcLSAdminRETRIESm is zero, then the
                        values of sdlcLSAdminRETRIESt and
                        sdlcLSAdminRETRIESn should also be zero.

                        Depending on the implementation, a write
                        operation to this administered value  may not
                        change the operational value,
                        sdlcLSOperRETRIESm, until the link station is
                        cycled inactive."

                    DEFVAL { 15 }
                    ::= { sdlcLSAdminEntry 11 }

RETRIESm is all about retries within one retry sequence for the local station ๐Ÿ” A retry sequence is a bunch of retransmitted frames (data or control) that never got a positive acknowledgement. How many times that whole sequence repeats is handled by RETRIESn, and the gap between sequences is handled by RETRIESt. Zero means no retries. And if RETRIESm is zero, then RETRIESt and RETRIESn should also be zero. Depending on the implementation, writes might not change sdlcLSOperRETRIESm until the station is cycled inactive. Default is 15.

sdlcLSAdminRETRIESt OBJECT-TYPE
                    SYNTAX      TimeInterval
                    MAX-ACCESS  read-create
                    STATUS      current
                    DESCRIPTION
                        "This object controls the interval (in 1/100ths
                        of a second) between retry sequences for the
                        local SDLC link station if multiple retry
                        sequences are specified .  A retry sequence is
                        a series of retransmitted frames ( data or
                        control) for which no positive acknowledgement
                        is received.

                        The number of repeated retries sequences is
                        controlled by the object: sdlcLSAdminRETRIESn.
                        The retries per sequence is controlled by the
                        object:  sdlcLSAdminRETRIESm.

                        The object descriptor contains the name of an
                        NCP configuration parameter, RETRIESt.  Please
                        note that the value of this object represents
                        1/100ths of a second while the NCP RETRIESt is
                        represented in seconds.

                        Depending on the implementation, a write
                        operation to this administered value  may not
                        change the operational value,
                        sdlcLSOperRETRIESt, until the link station is
                        cycled inactive."
                    DEFVAL { 0 }
                    ::= { sdlcLSAdminEntry 12 }

RETRIESt is the gap between retry sequences, measured in 1/100ths of a second, and it only really comes into play when there are multiple sequences going ๐Ÿ•ฐ๏ธ The number of sequences is RETRIESn and the retries per sequence is RETRIESm. Same heads up as REPLYTO: NCP's RETRIESt is in seconds, but this object is in 1/100ths ๐Ÿ™ˆ Writes might not change sdlcLSOperRETRIESt until the station is cycled inactive. Default is 0.

sdlcLSAdminRETRIESn OBJECT-TYPE
                    SYNTAX      Integer32
                    MAX-ACCESS  read-create
                    STATUS      current
                    DESCRIPTION
                        "This object controls the number of times that
                        a retry sequence is repeated for the local SDLC
                        link station.  A retry sequence is a series of
                        retransmitted frames ( data or control) for
                        which no positive acknowledgement is received.

                        The interval between retry sequences is
                        controlled by the object: sdlcLSAdminRETRIESn.

                        The retries per sequence is controlled by the
                        object:  sdlcLSAdminRETRIESm.

                        Depending on the implementation, a write
                        operation to this administered value  may not
                        change the operational value,
                        sdlcLSOperRETRIESn, until the link station is
                        cycled inactive."
                    DEFVAL { 0 }
                    ::= { sdlcLSAdminEntry 13 }

RETRIESn is how many times a retry sequence gets repeated for the local station ๐Ÿ”‚ Quick flag, though: the text in this block says the interval between retry sequences is controlled by sdlcLSAdminRETRIESn, which is the same object name, so it reads a little sus ๐Ÿ’€ The code block keeps it exactly as written. Retries per sequence are controlled by RETRIESm. Writes might not change sdlcLSOperRETRIESn until the station is cycled inactive. Default is 0.

sdlcLSAdminRNRLIMIT OBJECT-TYPE
                    SYNTAX      TimeInterval
                    MAX-ACCESS  read-create
                    STATUS      current
                    DESCRIPTION
                        "This object controls the length of time (in
                        1/100ths of a second) that an SDLC link station
                        will allow its adjacent link station to remain
                        in a busy (RNR) state before declaring it
                        inoperative.

                        A value of sdlcLSAdminRNRLIMIT == 0 means there
                        is no limit.

                        The object descriptor contains the name of an
                        NCP configuration parameter, RNRLIMIT.  Please
                        note that the value of this object represents
                        1/100ths of a second while the NCP RNRLIMIT is
                        represented in minutes.

                        Depending on the implementation, a write
                        operation to this administered value  may not
                        change the operational value,
                        sdlcLSOperRNRLIMIT, until the link station is
                        cycled inactive."
                    DEFVAL { 18000 }
                    ::= { sdlcLSAdminEntry 14 }

RNRLIMIT is how long a link station puts up with its neighbour sitting in a busy (RNR) state before it declares that neighbour inoperative ๐Ÿ˜ค A value of 0 means there's no limit at all. NCP's RNRLIMIT is in minutes, and this one is in 1/100ths of a second, so mind the units ๐Ÿ™ˆ Writes might not change sdlcLSOperRNRLIMIT until the station is cycled inactive. Default is 18000 ๐ŸŒˆ

okay bestie, we're still in the admin table's last stretch ๐Ÿ’… the DATMODE, GPoll, SimRim, XmitRcvCap, and RowStatus objects are all right here ๐ŸŽ€

sdlcLSAdminDATMODE  OBJECT-TYPE
                    SYNTAX      INTEGER
                    {
                        half(1),
                        full(2)
                    }
                    MAX-ACCESS  read-create
                    STATUS      current
                    DESCRIPTION

                        "This object controls whether communications
                        mode with the adjacent link station is
                        two-way-alternate (half) or two-way-simultaneous
                        (full).

                        A write operation to this administered value
                        will not change the operational value,
                        sdlcLSOperDATMODE, until the link station is
                        cycled inactive."
                    DEFVAL { half }
                    ::= { sdlcLSAdminEntry 15 }

sdlcLSAdminGPoll    OBJECT-TYPE
                    SYNTAX      INTEGER (0..254)
                    MAX-ACCESS  read-create
                    STATUS      current
                    DESCRIPTION
                        "This object describes the group poll address
                        for this link station instance.  If group poll
                        is not in effect for this link station
                        instance, the value for sdlcLSAdminGPoll should
                        be zero.

                        Depending on the implementation, a write
                        operation to this administered value may not
                        change the operational value, sdlcLSOperGPoll,
                        until the link station is cycled inactive."
                    ::= { sdlcLSAdminEntry 16 }

sdlcLSAdminSimRim   OBJECT-TYPE
                    SYNTAX      INTEGER
                    {
                         no(1),
                         yes(2)
                    }
                    MAX-ACCESS  read-create
                    STATUS      current
                    DESCRIPTION
                        "This object controls the support for
                        transmission and receipt of SIM and RIM control
                        frames for this link station.  The value of
                        this object controls the setting of the
                        transmit-receive capability sent in the XID
                        field."
                    DEFVAL { no }
                    ::= { sdlcLSAdminEntry 17 }

sdlcLSAdminXmitRcvCap OBJECT-TYPE

                    SYNTAX      INTEGER
                    {
                         twa(1),
                         tws(2)
                    }
                    MAX-ACCESS  read-create
                    STATUS      current
                    DESCRIPTION
                        "This object controls the transmit-receive
                        capabilities for this SDLC link station.  The
                        value of this object establishes the value of
                        the transmit-receive capability indicator sent
                        in the XID image to the adjacent link station."
                    DEFVAL { twa }
                    ::= { sdlcLSAdminEntry 18 }

sdlcLSAdminRowStatus OBJECT-TYPE
                    SYNTAX      RowStatus
                    MAX-ACCESS  read-create
                    STATUS      current
                    DESCRIPTION
                        "This object is used by a management station to
                        create or delete the row entry in
                        sdlcLSAdminTable following the RowStatus
                        textual convention.

                        Upon successful creation of the row, an agent
                        automatically creates a corresponding entry in
                        the sdlcLSOperTable with sdlcLSOperState equal
                        to 'discontacted (1)'."
                    ::= { sdlcLSAdminEntry 19 }

--  *************************************************************
--  *                                                           *
--  *           THE SDLC LINK STATION OPERATIONAL TABLE         *
--  *                                                           *
--  *************************************************************

sdlcLSOperTable     OBJECT-TYPE
                    SYNTAX      SEQUENCE OF SdlcLSOperEntry
                    MAX-ACCESS  not-accessible
                    STATUS      current
                    DESCRIPTION
                          "This table contains current SDLC link
                          parameters.  Many of these objects have
                          corresponding objects in the
                          sdlcLSAdminTable."
                    ::= { sdlcLSGroup 2 }

sdlcLSOperEntry     OBJECT-TYPE
                    SYNTAX      SdlcLSOperEntry
                    MAX-ACCESS  not-accessible
                    STATUS      current
                    DESCRIPTION
                         "A list of status and control values for an
                         SDLC link station."
                    INDEX   { ifIndex, sdlcLSAddress }
                    ::= { sdlcLSOperTable 1 }

SdlcLSOperEntry     ::= SEQUENCE
{
        sdlcLSOperName                  DisplayString,
        sdlcLSOperRole                  INTEGER,
        sdlcLSOperState                 INTEGER,
        sdlcLSOperMAXDATASend           Integer32,
        sdlcLSOperREPLYTO               TimeInterval,
        sdlcLSOperMAXIN                 INTEGER,
        sdlcLSOperMAXOUT                INTEGER,
        sdlcLSOperMODULO                INTEGER,
        sdlcLSOperRETRIESm              INTEGER,
        sdlcLSOperRETRIESt              TimeInterval,
        sdlcLSOperRETRIESn              INTEGER,
        sdlcLSOperRNRLIMIT              TimeInterval,
        sdlcLSOperDATMODE               INTEGER,
        sdlcLSOperLastModifyTime        TimeTicks,
        sdlcLSOperLastFailTime          TimeTicks,
        sdlcLSOperLastFailCause         INTEGER,
        sdlcLSOperLastFailCtrlIn        OCTET STRING,
        sdlcLSOperLastFailCtrlOut       OCTET STRING,
        sdlcLSOperLastFailFRMRInfo      OCTET STRING,
        sdlcLSOperLastFailREPLYTOs      Counter32,
        sdlcLSOperEcho                  INTEGER,
        sdlcLSOperGPoll                 INTEGER,
        sdlcLSOperSimRim                INTEGER,
        sdlcLSOperXmitRcvCap            INTEGER

}

sdlcLSOperName OBJECT-TYPE SYNTAX DisplayString (SIZE (1..10)) MAX-ACCESS read-only STATUS current DESCRIPTION "An octet string that defines the name of the remote SDLC link station. This field is received in the XID3 control vector 0x0E, type 0xF7." ::= { sdlcLSOperEntry 1 }

sdlcLSOperRole OBJECT-TYPE SYNTAX INTEGER { primary(1), secondary(2), undefined(3) } MAX-ACCESS read-only STATUS current DESCRIPTION "This object reflects the current role that the link station is assuming.

The value of sdlcLSOperRole is undefined(3) whenever the link station role has not yet been established by the mode setting command." ::= { sdlcLSOperEntry 2 }

sdlcLSOperState OBJECT-TYPE SYNTAX INTEGER { discontacted(1), contactPending(2), contacted(3), discontactPending(4) } MAX-ACCESS read-only STATUS current DESCRIPTION "This object describes the operational state of the SDLC link station. The managed system shall attempt to keep this value consistent with the administered state, sdlcLSAdminState" ::= { sdlcLSOperEntry 3 }

sdlcLSOperMAXDATASend OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "This object contains the actual maximum PDU size that the local link station can send to the adjacent link station. This object is established from the value received in the XID from the adjacent link station. If no XID is received, then this value is implementation dependent (for instance, it could be the value of sdlcLSAdminMAXDATASend).

This value includes the Transmission Header (TH) and the Request Header (RH)." ::= { sdlcLSOperEntry 4 }

sdlcLSOperREPLYTO OBJECT-TYPE SYNTAX TimeInterval MAX-ACCESS read-only STATUS current DESCRIPTION "This object reflects the current reply timeout (in 1/100ths of a second) for an SDLC link station. If the link station does not receive a response to a poll or message before the specified time expires then the appropriate error recovery shall be initiated.

The object descriptor contains the name of an NCP configuration parameter, REPLYTO. Please note that the value of this object represents 1/100ths of a second while the NCP REPLYTO is represented in 1/10ths of a second.

This object only has meaning for SDLC ports where sdlcPortOperRole == primary " ::= { sdlcLSOperEntry 5 }

sdlcLSOperMAXIN OBJECT-TYPE SYNTAX INTEGER (1..127) MAX-ACCESS read-only STATUS current DESCRIPTION "This object reflects the current maximum number of unacknowledged I-frames which an SDLC link station may receive. This shall range from 1 to (sdlcLSOperMODULO - 1)." ::= { sdlcLSOperEntry 6 }

sdlcLSOperMAXOUT OBJECT-TYPE SYNTAX INTEGER (1..127) MAX-ACCESS read-only STATUS current DESCRIPTION "This object controls the maximum number of consecutive unacknowledged I-frames which an SDLC link station shall send without an acknowledgement. This shall range from 1 to (sdlcLSAdminMODULO - 1).

This value may controlled by the administered MAXOUT, sdlcLSAdminMAXOUT, or by the MAXIN value received during the XID exchange." ::= { sdlcLSOperEntry 7 }

sdlcLSOperMODULO OBJECT-TYPE SYNTAX INTEGER { eight(8), onetwentyeight(128) } MAX-ACCESS read-only STATUS current DESCRIPTION "This object reflects the current modulus for an SDLC link station. This modulus determines the size of rotating acknowledgement window used by the SDLC link station pair." DEFVAL { eight } ::= { sdlcLSOperEntry 8 }

sdlcLSOperRETRIESm OBJECT-TYPE SYNTAX INTEGER (0..128) MAX-ACCESS read-only STATUS current DESCRIPTION "This object controls number of retries in a retry sequence for an SDLC link station. A retry sequence is a series of retransmitted frames ( data or control) for which no positive acknowledgement is received.

The current number of times that the retry sequence is to be repeated is reflected by the object: sdlcLSOperRETRIESn. The current interval between retry sequences is reflected by the object: sdlcLSOperRETRIESt." ::= { sdlcLSOperEntry 9 }

sdlcLSOperRETRIESt OBJECT-TYPE SYNTAX TimeInterval MAX-ACCESS read-only STATUS current DESCRIPTION "This object reflects the current interval (in 1/100ths of a second) between retry sequences for an SDLC link station if multiple retry sequences are specified. A retry sequence is a series of retransmitted frames ( data or control) for which no positive acknowledgement is received.

The object descriptor contains the name of an NCP configuration parameter, RETRIESt. Please note that the value of this object represents 1/100ths of a second while the NCP RETRIESt is represented in seconds.

The current number of repeated retries sequences is reflected by the object: sdlcLSOperRETRIESn. The current retries per sequence is reflected by the object: sdlcLSOperRETRIESm." ::= { sdlcLSOperEntry 10 }

sdlcLSOperRETRIESn OBJECT-TYPE SYNTAX INTEGER (0..127) MAX-ACCESS read-only STATUS current DESCRIPTION "This object reflects the current number of times that a retry sequence is repeated for an SDLC link station. A retry sequence is a series of retransmitted frames ( data or control) for which no positive acknowledgement is received.

The current interval between retry sequences is reflected by the object: sdlcLSOperRETRIESn. The current retries per sequence is reflected by the object: sdlcLSOperRETRIESm." ::= { sdlcLSOperEntry 11 }

Okay bestie, the RNR limit comes first ๐Ÿซถ It's the timer for how long a station will tolerate its neighbour staying busy โณ

sdlcLSOperRNRLIMIT  OBJECT-TYPE
                    SYNTAX      TimeInterval
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the current length of
                        time (in 1/100ths of a second) that an SDLC
                        link station will allow its adjacent link
                        station to remain in a busy (RNR) state before
                        declaring it inoperative.

                        The object descriptor contains the name of an
                        NCP configuration parameter, RNRLIMIT.  Please
                        note that the value of this object represents
                        1/100ths of a second while the NCP RNRLIMIT is
                        represented in minutes.

                        A value of sdlcLSOperRNRLIMIT == 0 means there
                        is no limit."
                    ::= { sdlcLSOperEntry 12 }

Watch the units here ๐Ÿ™ˆ The object counts in 1/100ths of a second, but the NCP RNRLIMIT it's named after counts in minutes. And a value of 0 means there's no limit ๐ŸŒธ

sdlcLSOperDATMODE   OBJECT-TYPE
                    SYNTAX      INTEGER
                    {
                        half(1),
                        full(2)
                    }
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects whether the current
                        communications mode with the adjacent link
                        station is two-way-alternate (half) or
                        two-way-simultaneous (full)."
                    ::= { sdlcLSOperEntry 13 }

DATMODE is all about the communications mode ๐Ÿฆ‹ It's either half, which is two-way-alternate, or full, which is two-way-simultaneous ๐Ÿ’œ

sdlcLSOperLastModifyTime    OBJECT-TYPE
                    SYNTAX      TimeTicks
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object describes the value of sysUpTime
                         when this link station definition was last
                         modified.  If the link station has not been
                         modified, then this value shall be zero."
                    ::= { sdlcLSOperEntry 14 }

sdlcLSOperLastFailTime    OBJECT-TYPE
                    SYNTAX      TimeTicks
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object describes the value of sysUpTime
                         when this SDLC link station last failed.  If
                         the link station has not failed, then this
                         value shall be zero."
                    ::= { sdlcLSOperEntry 15 }

Two timestamps, both measured against sysUpTime โฐ LastModifyTime tells you when the link station definition last changed, and LastFailTime tells you when it last failed. If either hasn't happened yet, the value is zero ๐Ÿงš

sdlcLSOperLastFailCause    OBJECT-TYPE
                    SYNTAX      INTEGER
                    {

                        undefined(1),
                        rxFRMR(2),
                        txFRMR(3),
                        noResponse(4),
                        protocolErr(5),
                        noActivity(6),
                        rnrLimit(7),
                        retriesExpired(8)
                    }
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This enumerated object reflects the cause of
                        the last failure of this SDLC link station.  If
                        the link station has not failed, then this
                        object will have a value of undefined(1)."
                    DEFVAL { undefined }
                    ::= { sdlcLSOperEntry 16 }

LastFailCause is the "why did it crash" object ๐Ÿ’€ It's an enum with eight options, and if nothing has ever failed, it defaults to undefined(1) ๐Ÿ’…

sdlcLSOperLastFailCtrlIn  OBJECT-TYPE
                    SYNTAX      OCTET STRING (SIZE(1..2))
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the last control octet or
                        octets (depending on modulus) received by this
                        SDLC link station at the time of the last
                        failure.  If the link station has not failed,
                        then this value has no meaning."
                    ::= { sdlcLSOperEntry 17 }

sdlcLSOperLastFailCtrlOut  OBJECT-TYPE
                    SYNTAX      OCTET STRING (SIZE(1..2))
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the last control octet or
                        octets (depending on modulus) sent by this SDLC
                        link station at the time of the last failure.
                        If the link station has not failed, then this
                        value has no meaning."
                    ::= { sdlcLSOperEntry 18 }

These two are the control octets from right before the failure, one going in and one going out ๐Ÿ“จ The length depends on the modulus, so it's either one octet or two. If there's been no failure, they have no meaning ๐Ÿ™ˆ

sdlcLSOperLastFailFRMRInfo  OBJECT-TYPE
                    SYNTAX      OCTET STRING (SIZE(3))
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION

                        "This object reflects the information field of
                        the FRMR frame if the last failure for this
                        SDLC link station was as a result of an invalid
                        frame.  Otherwise, this field has no meaning."
                    ::= { sdlcLSOperEntry 19 }

sdlcLSOperLastFailREPLYTOs  OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the number of times that
                        the REPLYTO timer had expired for an SDLC link
                        station at the time of the last failure. If the
                        link station has not failed, then this value
                        has no meaning."
                    ::= { sdlcLSOperEntry 20 }

FRMRInfo only means something when the last failure was an invalid frame, and then it's the FRMR information field, three octets ๐Ÿงฉ REPLYTOs counts how many times the REPLYTO timer expired by the moment of that last failure ๐Ÿ”ฅ

sdlcLSOperEcho      OBJECT-TYPE
                    SYNTAX      INTEGER
                    {
                         no(1),
                         yes(2)
                    }
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object identifies whether the echo bit is
                         in effect for this particular link station."
                    DEFVAL { no }
                    ::= { sdlcLSOperEntry 21 }

sdlcLSOperGPoll     OBJECT-TYPE
                    SYNTAX      INTEGER (0..254)
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object describes the group poll address
                        in effect for this link station instance."
                    DEFVAL { 0 }
                    ::= { sdlcLSOperEntry 22 }

Echo tells you whether the echo bit is in effect for this link station, defaulting to no ๐ŸŒˆ GPoll is the group poll address in effect, ranging from 0 to 254, also defaulting to 0 โœจ

sdlcLSOperSimRim    OBJECT-TYPE
                    SYNTAX      INTEGER
                    {
                         no(1),
                         yes(2)
                    }
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the support for
                        transmission and receipt of SIM and RIM control
                        frames for the adjacent link station.  The
                        value of this object is set from the XID field
                        received from the adjacent link station."
                    DEFVAL { no }
                    ::= { sdlcLSOperEntry 23 }

sdlcLSOperXmitRcvCap OBJECT-TYPE
                    SYNTAX      INTEGER
                    {
                         twa(1),
                         tws(2)
                    }
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the transmit-receive
                        capabilities for the adjacent SDLC link
                        station.  The value of this object is the value
                        of the transmit-receive capability indicator
                        received in the XID image from the adjacent
                        link station."
                    DEFVAL { twa }
                    ::= { sdlcLSOperEntry 24 }

SimRim shows whether the neighbour supports SIM and RIM control frames, and it gets its value from the XID field the neighbour sent ๐Ÿค XmitRcvCap is the transmit-receive capability indicator from that same XID image, so it's giving "tell me what you can do" energy ๐Ÿ‘‘ The default is twa(1) ๐Ÿ’–


Next up is the statistics table, and it's a whole vibe ๐Ÿ“Š Each entry holds counters for one SDLC link station, and it's indexed by ifIndex and sdlcLSAddress ๐Ÿฆ‹

--  *************************************************************
--  *                                                           *
--  *           THE SDLC LINK STATION STATISTICS TABLE          *
--  *                                                           *
--  *************************************************************

sdlcLSStatsTable  OBJECT-TYPE
                    SYNTAX      SEQUENCE OF SdlcLSStatsEntry
                    MAX-ACCESS  not-accessible
                    STATUS      current
                    DESCRIPTION
                        "Each entry in this table contains statistics
                        for a specific SDLC link station."
                     ::= { sdlcLSGroup 3 }

sdlcLSStatsEntry  OBJECT-TYPE
                    SYNTAX      SdlcLSStatsEntry
                    MAX-ACCESS  not-accessible
                    STATUS      current
                    DESCRIPTION
                        "A list of statistics for an SDLC link station."
                    INDEX   { ifIndex, sdlcLSAddress }
                    ::= { sdlcLSStatsTable 1 }

SdlcLSStatsEntry ::= SEQUENCE
{
        sdlcLSStatsBLUsIn             Counter32,
        sdlcLSStatsBLUsOut            Counter32,
        sdlcLSStatsOctetsIn           Counter32,
        sdlcLSStatsOctetsOut          Counter32,
        sdlcLSStatsPollsIn            Counter32,
        sdlcLSStatsPollsOut           Counter32,
        sdlcLSStatsPollRspsIn         Counter32,
        sdlcLSStatsPollRspsOut        Counter32,
        sdlcLSStatsLocalBusies        Counter32,
        sdlcLSStatsRemoteBusies       Counter32,
        sdlcLSStatsIFramesIn          Counter32,
        sdlcLSStatsIFramesOut         Counter32,
        sdlcLSStatsUIFramesIn         Counter32,
        sdlcLSStatsUIFramesOut        Counter32,
        sdlcLSStatsXIDsIn             Counter32,
        sdlcLSStatsXIDsOut            Counter32,
        sdlcLSStatsTESTsIn            Counter32,
        sdlcLSStatsTESTsOut           Counter32,
        sdlcLSStatsREJsIn             Counter32,
        sdlcLSStatsREJsOut            Counter32,
        sdlcLSStatsFRMRsIn            Counter32,
        sdlcLSStatsFRMRsOut           Counter32,
        sdlcLSStatsSIMsIn             Counter32,
        sdlcLSStatsSIMsOut            Counter32,
        sdlcLSStatsRIMsIn             Counter32,
        sdlcLSStatsRIMsOut            Counter32,
        sdlcLSStatsDISCIn             Counter32,
        sdlcLSStatsDISCOut            Counter32,
        sdlcLSStatsUAIn               Counter32,
        sdlcLSStatsUAOut              Counter32,
        sdlcLSStatsDMIn               Counter32,
        sdlcLSStatsDMOut              Counter32,
        sdlcLSStatsSNRMIn             Counter32,
        sdlcLSStatsSNRMOut            Counter32,
        sdlcLSStatsProtocolErrs       Counter32,
        sdlcLSStatsActivityTOs        Counter32,
        sdlcLSStatsRNRLIMITs          Counter32,
        sdlcLSStatsRetriesExps        Counter32,
        sdlcLSStatsRetransmitsIn      Counter32,
        sdlcLSStatsRetransmitsOut     Counter32

okay so bestie, we're in the stats table now and it's literally a counter party ๐ŸŽ€โœจ every one of these is a Counter32 that's read-only, and they all start from zero when the link station boots up ๐Ÿงš (no cap, that's the whole vibe).

sdlcLSStatsBLUsIn   OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total basic link
                        units (BLUs; frames) received from an adjacent
                        SDLC link station since link station startup.
                        At link station startup time, this object must
                        be initialized to zero."
                    ::= { sdlcLSStatsEntry 1 }

sdlcLSStatsBLUsOut   OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total basic link
                        units (BLUs; frames), transmitted to an
                        adjacent SDLC link station since link station
                        startup.  At link station startup time, this
                        object must be initialized to zero."
                    ::= { sdlcLSStatsEntry 2 }

sdlcLSStatsOctetsIn OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total octets received
                        from an adjacent SDLC link station since link
                        station startup.  This object covers the
                        address, control, and information field of
                        I-Frames only.  At link station startup time,
                        this object must be initialized to zero."
                    ::= { sdlcLSStatsEntry 3 }

sdlcLSStatsOctetsOut OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total octets
                        transmitted to an adjacent SDLC link station
                        since link station startup.  This object covers
                        the address, control, and information field of
                        I-Frames only.  At link station startup time,
                        this object must be initialized to zero."
                    ::= { sdlcLSStatsEntry 4 }

sdlcLSStatsPollsIn  OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total polls received
                        from an adjacent SDLC link station since link
                        station startup.  At link station startup time,
                        this object must be initialized to zero."
                    ::= { sdlcLSStatsEntry 5 }

sdlcLSStatsPollsOut OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total polls sent to
                        an adjacent SDLC link station since link
                        station startup.  At link station startup time,
                        this object must be initialized to zero."
                    ::= { sdlcLSStatsEntry 6 }

sdlcLSStatsPollRspsOut OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total number of poll
                        responses sent to the adjacent SDLC link
                        station since link station startup.  This value
                        includes I-frames that are sent in response to
                        a poll.

                        At link station startup time, this object must
                        be initialized to zero."
                    ::= { sdlcLSStatsEntry 7 }

sdlcLSStatsPollRspsIn OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total number of poll
                        responses received from the adjacent SDLC link
                        station since station startup.  This value
                        includes I-frames that are received in response
                        to a poll.

                        At link station startup time, this object must
                        be initialized to zero."
                    ::= { sdlcLSStatsEntry 8 }

sdlcLSStatsLocalBusies OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total number of times
                        that the local SDLC link station has entered a
                        busy state (RNR) since link station startup.
                        At link station startup time, this object must
                        be initialized to zero."
                    ::= { sdlcLSStatsEntry 9 }

sdlcLSStatsRemoteBusies OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total number of times
                        that an adjacent ( remote) SDLC link station
                        has entered a busy state (RNR) since link
                        station startup.  At link station startup time,
                        this object must be initialized to zero."
                    ::= { sdlcLSStatsEntry 10 }

sdlcLSStatsIFramesIn OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total I-frames
                        received from an adjacent SDLC link station
                        since link station startup.  At link station
                        startup time, this object must be initialized
                        to zero."
                    ::= { sdlcLSStatsEntry 11 }

sdlcLSStatsIFramesOut OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total I-frames
                        transmitted to an adjacent SDLC link station
                        since link station startup.  At link station
                        startup time, this object must be initialized
                        to zero."
                    ::= { sdlcLSStatsEntry 12 }

sdlcLSStatsUIFramesIn OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total UI-frames
                        received from an adjacent SDLC link station
                        since link station startup."
                    ::= { sdlcLSStatsEntry 13 }

sdlcLSStatsUIFramesOut OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                       "This object reflects the total UI-frames
                       transmitted to an adjacent SDLC link station
                       since link station startup."
                    ::= { sdlcLSStatsEntry 14 }

sdlcLSStatsXIDsIn   OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total XID frames
                        received from an adjacent SDLC link station
                        since link station startup."
                    ::= { sdlcLSStatsEntry 15 }

sdlcLSStatsXIDsOut  OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total XID frames
                        transmitted to an adjacent SDLC link station
                        since link station startup."
                    ::= { sdlcLSStatsEntry 16 }

sdlcLSStatsTESTsIn   OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total TEST frames,
                        commands or responses, received from an
                        adjacent SDLC link station since link station
                        startup."
                    ::= { sdlcLSStatsEntry 17 }

sdlcLSStatsTESTsOut  OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total TEST frames,
                        commands or responses, transmitted to an
                        adjacent SDLC link station since link station
                        startup."
                    ::= { sdlcLSStatsEntry 18 }

sdlcLSStatsREJsIn   OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total REJ frames
                        received from an adjacent SDLC link station
                        since link station startup."
                    ::= { sdlcLSStatsEntry 19 }

sdlcLSStatsREJsOut  OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total REJ frames
                        transmitted to an adjacent SDLC link station
                        since link station startup."
                    ::= { sdlcLSStatsEntry 20 }

sdlcLSStatsFRMRsIn  OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total frame reject
                        (FRMR) frames received from an adjacent SDLC
                        link station since link station startup."
                    ::= { sdlcLSStatsEntry 21 }

sdlcLSStatsFRMRsOut  OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total frame reject
                        (FRMR) frames transmitted to an adjacent SDLC
                        link station since link station startup."
                    ::= { sdlcLSStatsEntry 22 }

sdlcLSStatsSIMsIn   OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total set
                        initialization mode (SIM) frames received from
                        an adjacent SDLC link station since link station
                        startup."
                    ::= { sdlcLSStatsEntry 23 }

okay that's the whole counter lineup ๐Ÿ’…๐ŸŒธ the pattern is so clean: every object just tallies one kind of frame, in or out, and they all reset at startup ๐Ÿซถ

Okay bestie, the SIM counter is up first ๐Ÿ’… It's a Counter32 that's read-only ๐Ÿ”’ and tracks how many set initialization mode frames get sent to the adjacent link station. Like the others, it has to start at zero whenever the link station boots ๐ŸŒธ

sdlcLSStatsSIMsOut  OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total set
                        initialization mode (SIM) frames transmitted to
                        an adjacent SDLC link station since link station
                        startup.  At link station startup time, this
                        object must be initialized to zero."
                    ::= { sdlcLSStatsEntry 24 }

sdlcLSStatsRIMsIn   OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total request
                        initialization mode (RIM) frames received from
                        an adjacent SDLC link station since link station
                        startup.  At link station startup time, this
                        object must be initialized to zero."
                    ::= { sdlcLSStatsEntry 25 }

sdlcLSStatsRIMsOut  OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total request
                        initialization mode (RIM) frames transmitted to
                        an adjacent SDLC link station since link station
                        startup.  At link station startup time, this
                        object must be initialized to zero."
                    ::= { sdlcLSStatsEntry 26 }

okay so RIMs get their own pair ๐Ÿฆ‹ one for the ones coming in and one for the ones going out, and yep, they're on the same reset schedule as everything else โœจ

sdlcLSStatsDISCIn   OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total number of
                         disconnect (DISC) requests received from an
                         adjacent SDLC link station since link station
                         startup.  At link station startup time, this
                         object must be initialized to zero."
                    ::= { sdlcLSStatsEntry 27 }

sdlcLSStatsDISCOut  OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total number of
                         disconnect (DISC) requests transmited to an
                         adjacent SDLC link station since link station
                         startup.  At link station startup time, this
                         object must be initialized to zero."
                    ::= { sdlcLSStatsEntry 28 }

sdlcLSStatsUAIn     OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total number of
                         unnumbered acknowledgements (UA) requests
                         received from an adjacent SDLC link station
                         since link station startup.  At link station
                         startup time, this object must be initialized
                         to zero."
                    ::= { sdlcLSStatsEntry 29 }

sdlcLSStatsUAOut    OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total number of
                         unnumbered acknowledgements (UA) requests
                         transmited to an adjacent SDLC link station
                         since link station startup.  At link station
                         startup time, this object must be initialized
                         to zero."
                    ::= { sdlcLSStatsEntry 30 }

Now we're in the disconnect zone ๐Ÿ’€ DISC is the "we're done here" frame, and there are counters for both directions ๐Ÿ™ˆ UA is the unnumbered acknowledgement that comes back, so it gets its own pair too ๐Ÿ’œ

sdlcLSStatsDMIn     OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total number of
                         disconnect mode (DM) requests received from an
                         adjacent SDLC link station since link station
                         startup.  At link station startup time, this
                         object must be initialized to zero."
                    ::= { sdlcLSStatsEntry 31 }

sdlcLSStatsDMOut    OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total number of
                         disconnect mode (DM) requests transmited to an
                         adjacent SDLC link station since link station
                         startup.  At link station startup time, this
                         object must be initialized to zero."
                    ::= { sdlcLSStatsEntry 32 }

sdlcLSStatsSNRMIn   OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total number of
                         set normal response mode (SNRM/SNRME) requests
                         received from an adjacent SDLC link station
                         since link station startup.  At link station
                         startup time, this object must be initialized
                         to zero."

                    ::= { sdlcLSStatsEntry 33 }

sdlcLSStatsSNRMOut  OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total number of
                         set normal response mode (SNRM/SNRME) requests
                         transmited to an adjacent SDLC link station
                         since link station startup.  At link station
                         startup time, this object must be initialized
                         to zero."
                    ::= { sdlcLSStatsEntry 34 }

DM and SNRM are the mode-setting crew ๐Ÿ‘‘ DM gets counted in and out, and SNRM (plus the SNRME variant, which the spec lists right in the description ๐Ÿงš) gets counted both ways too. Every one of these starts from zero at link station startup ๐ŸŒˆ

sdlcLSStatsProtocolErrs OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total occurrences,
                        since link station startup, where this SDLC
                        link station has inactivated the link as a
                        result of receiving a frame from its adjacent
                        link station which was in violation of the
                        protocol.  At link station startup time, this
                        object must be initialized to zero."
                    ::= { sdlcLSStatsEntry 35 }

sdlcLSStatsActivityTOs OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total occurrences,
                        since startup, where this SDLC link station has
                        inactivated the link as a result of no activity
                        on the link.  At link station startup time,
                        this object must be initialized to zero."
                    ::= { sdlcLSStatsEntry 36 }

sdlcLSStatsRNRLIMITs OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total occurrences,
                        since startup, where this SDLC link station has
                        inactivated the link as a result of its
                        RNRLIMIT timer expiring.  At link station
                        startup time, this object must be initialized
                        to zero."
                    ::= { sdlcLSStatsEntry 37 }

sdlcLSStatsRetriesExps OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total occurrences,
                        since startup, where this SDLC link station has
                        inactivated the link as a result of a retry
                        sequence being exhausted.  At link station
                        startup time, this object must be initialized
                        to zero."
                    ::= { sdlcLSStatsEntry 38 }

This is the "why did the link get shut down" group ๐Ÿ˜ญ each counter tallies a different reason the station inactivated the link: a protocol violation from its neighbour, no activity, the RNRLIMIT timer running out, or a retry sequence getting exhausted โญ Same reset rule, too ๐ŸŽ€

sdlcLSStatsRetransmitsIn OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total number of
                         information frames retransmitted by the remote
                         link station because the N(s) received from
                         that link station indicated that one or more
                         information frames sent by that station were
                         lost.  This event causes the first missing
                         information frame of a window and all
                         subsequent information frames to be
                         retransmitted.  At link station startup time,
                         this object must be initialized to zero.

                         Management: If the value of
                         sdlcLSStatsRetransmitsIn grows over time, then
                         the quality of the serial line is in
                         question.  You might want to look at
                         decreasing the value for
                         sdlcLSAdminMAXDATASend to compensate for the
                         lower quality line."
                    ::= { sdlcLSStatsEntry 39 }

sdlcLSStatsRetransmitsOut OBJECT-TYPE
                    SYNTAX      Counter32
                    MAX-ACCESS  read-only
                    STATUS      current
                    DESCRIPTION
                        "This object reflects the total number of
                         information frames retransmitted to a remote
                         link station because the N(r) received from
                         that link station indicated that one or more
                         information frames sent to that station were
                         lost. This event causes the first missing
                         information frame of a window and all
                         subsequent information frames to be
                         retransmitted.  At link station startup time,
                         this object must be initialized to zero.

                         Management: If the value of
                         sdlcLSStatsRetransmitsOut grows over time,
                         then the quality of the serial line is in
                         question.  You might want to look at
                         decreasing the value for sdlcLSAdminMAXDATASend
                         to compensate for the lower quality line."
                    ::= { sdlcLSStatsEntry 40 }

Retransmits are the big drama ๐Ÿ”ฅ the In counter covers frames the remote station resent because our N(s) said some of its frames went missing, and the Out counter covers the flip side, frames we resent because the N(r) from the other side said ours got lost ๐Ÿ’– The management notes say that if either number keeps climbing, the serial line quality might be sus, and you could try lowering sdlcLSAdminMAXDATASend ๐ŸŒธ


Last stop: the trap section ๐Ÿงš This is where the notifications live, and the spec hangs them off the sdlc tree at branch 3.

--
--  TRAP DEFINITIONS
--

--
--  Notifications
--

sdlcTraps  OBJECT IDENTIFIER ::= { sdlc 3 }

Okay bestie, the traps are giving main character energy ๐Ÿฆ‹ Here's how a port flipping between active and inactive gets reported, and then the link station version, which is basically the same vibe but for the station itself ๐Ÿ’…

sdlcPortStatusChange NOTIFICATION-TYPE
                     OBJECTS    { ifIndex,
                                  ifAdminStatus,
                                  ifOperStatus,
                                  sdlcPortOperLastFailTime,
                                  sdlcPortOperLastFailCause
                                }
                     STATUS  current
                     DESCRIPTION
                         "This trap indicates that the state of an SDLC
                         port has transitioned to active or inactive."
                     ::= { sdlcTraps 1 }

sdlcLSStatusChange   NOTIFICATION-TYPE
                     OBJECTS    { ifIndex,
                                  sdlcLSAddress,
                                  sdlcLSOperState,
                                  sdlcLSAdminState,
                                  sdlcLSOperLastFailTime,
                                  sdlcLSOperLastFailCause,
                                  sdlcLSOperLastFailFRMRInfo,
                                  sdlcLSOperLastFailCtrlIn,
                                  sdlcLSOperLastFailCtrlOut,
                                  sdlcLSOperLastFailREPLYTOs
                                }
                     STATUS  current
                     DESCRIPTION
                         "This trap indicates that the state of an SDLC
                         link station has transitioned to contacted or
                         discontacted."
                     ::= { sdlcTraps 2 }


--
-- Conformance Information
--

sdlcConformance OBJECT IDENTIFIER ::= { sdlc 4 }

sdlcCompliances   OBJECT IDENTIFIER ::= { sdlcConformance 1 }
sdlcGroups        OBJECT IDENTIFIER ::= { sdlcConformance 2 }

Next up is the conformance zone ๐ŸŽ€ Think of it as the checklist for who's allowed to say they're doing SDLC properly โœจ Every node gets a core compliance statement, and then the special roles (primary link station, and primary on a multipoint line) add their own extras ๐ŸŒธ

--
-- Compliance Statements
--

sdlcCoreCompliance MODULE-COMPLIANCE
                     STATUS current
                     DESCRIPTION
                         "The core compliance statement for all SDLC
                         nodes."
                     MODULE
                         MANDATORY-GROUPS
                         {
                             sdlcCorePortAdminGroup,
                             sdlcCorePortOperGroup,
                             sdlcCorePortStatsGroup,
                             sdlcCoreLSAdminGroup,
                             sdlcCoreLSOperGroup,
                             sdlcCoreLSStatsGroup
                         }

                     OBJECT      sdlcPortAdminName
                     MIN-ACCESS  read-only
                     DESCRIPTION
                         "Write access is not required."

                     OBJECT      sdlcPortAdminRole
                     MIN-ACCESS  read-only
                     DESCRIPTION
                         "Write access is not required."

                     OBJECT      sdlcPortAdminType
                     MIN-ACCESS  read-only
                     DESCRIPTION
                         "Write access is not required."

                     OBJECT      sdlcPortAdminTopology
                     MIN-ACCESS  read-only
                     DESCRIPTION
                         "Write access is not required."

                     OBJECT      sdlcPortAdminISTATUS
                     MIN-ACCESS  read-only
                     DESCRIPTION
                         "Write access is not required."

                     OBJECT      sdlcLSAddress
                     MIN-ACCESS  read-only
                     DESCRIPTION
                         "Write access is not required."

                     OBJECT      sdlcLSAdminName
                     MIN-ACCESS  read-only
                     DESCRIPTION
                         "Write access is not required."

                     OBJECT      sdlcLSAdminState
                     MIN-ACCESS  read-only
                     DESCRIPTION
                         "Write access is not required."

                     OBJECT      sdlcLSAdminISTATUS
                     MIN-ACCESS  read-only
                     DESCRIPTION
                         "Write access is not required."

                     OBJECT      sdlcLSAdminMAXDATASend
                     MIN-ACCESS  read-only
                     DESCRIPTION
                         "Write access is not required."

                     OBJECT      sdlcLSAdminMAXDATARcv
                     MIN-ACCESS  read-only
                     DESCRIPTION

                         "Write access is not required."

                     OBJECT      sdlcLSAdminMAXIN
                     MIN-ACCESS  read-only
                     DESCRIPTION
                         "Write access is not required."

                     OBJECT      sdlcLSAdminMAXOUT
                     MIN-ACCESS  read-only
                     DESCRIPTION
                         "Write access is not required."

                     OBJECT      sdlcLSAdminMODULO
                     MIN-ACCESS  read-only
                     DESCRIPTION
                         "Write access is not required."

                     OBJECT      sdlcLSAdminRETRIESm
                     MIN-ACCESS  read-only
                     DESCRIPTION
                         "Write access is not required."

                     OBJECT      sdlcLSAdminRETRIESt
                     MIN-ACCESS  read-only
                     DESCRIPTION
                         "Write access is not required."

                     OBJECT      sdlcLSAdminRETRIESn
                     MIN-ACCESS  read-only
                     DESCRIPTION
                         "Write access is not required."

                     OBJECT      sdlcLSAdminRNRLIMIT
                     MIN-ACCESS  read-only
                     DESCRIPTION
                         "Write access is not required."

                     OBJECT      sdlcLSAdminDATMODE
                     MIN-ACCESS  read-only
                     DESCRIPTION
                         "Write access is not required."

                     OBJECT      sdlcLSAdminGPoll
                     MIN-ACCESS  read-only
                     DESCRIPTION
                         "Write access is not required."

                     OBJECT      sdlcLSAdminSimRim
                     MIN-ACCESS  read-only
                     DESCRIPTION
                         "Write access is not required."

                     OBJECT      sdlcLSAdminRowStatus
                     MIN-ACCESS  read-only
                     DESCRIPTION
                         "Write access is not required."

                     ::= { sdlcCompliances 1 }

sdlcPrimaryCompliance  MODULE-COMPLIANCE
                     STATUS current
                     DESCRIPTION
                         "The compliance statement for all nodes that
                         are performing the role of a Primary link
                         station."
                     MODULE
                         MANDATORY-GROUPS { sdlcPrimaryGroup }

                     OBJECT      sdlcPortAdminPAUSE
                     MIN-ACCESS  read-only
                     DESCRIPTION
                         "Write access is not required."

                     OBJECT      sdlcLSAdminREPLYTO
                     MIN-ACCESS  read-only
                     DESCRIPTION
                         "Write access is not required."

                     ::= { sdlcCompliances 2 }

sdlcPrimaryMultipointCompliance  MODULE-COMPLIANCE
                     STATUS current
                     DESCRIPTION
                         "The compliance statement for all nodes that
                         are performing the role of a primary link
                         station on a multipoint line."
                     MODULE
                         MANDATORY-GROUPS { sdlcPrimaryMultipointGroup }

                     OBJECT      sdlcPortAdminSERVLIM
                     MIN-ACCESS  read-only
                     DESCRIPTION
                         "Write access is not required."

                     OBJECT      sdlcPortAdminSlowPollTimer
                     MIN-ACCESS  read-only
                     DESCRIPTION
                         "Write access is not required."

                     ::= { sdlcCompliances 3 }

Last bit for this round: the core groups ๐Ÿงš These bundle up the objects that every compliant link station has to carry, sorted into admin, oper, and stats buckets ๐Ÿ“ The sdlcCoreLSAdminGroup description here is worded as it appears in the spec, so I've kept it exactly as is ๐Ÿ’œ

--
-- Core Conformance Groups for All Link Stations
--

sdlcCoreGroups OBJECT IDENTIFIER ::= { sdlcGroups 1 }

sdlcCorePortAdminGroup OBJECT-GROUP
                     OBJECTS
                     {
                         sdlcPortAdminName,      sdlcPortAdminRole,
                         sdlcPortAdminType,      sdlcPortAdminTopology,
                         sdlcPortAdminISTATUS
                     }
                     STATUS current
                     DESCRIPTION
                         "The sdlcCorePortAdminGroup defines objects
                         which are common to the PortAdmin group of all
                         compliant link stations."
                     ::= { sdlcCoreGroups 1 }

sdlcCorePortOperGroup OBJECT-GROUP
                     OBJECTS
                     {
                         sdlcPortOperName,
                         sdlcPortOperRole,
                         sdlcPortOperType,
                         sdlcPortOperTopology,
                         sdlcPortOperISTATUS,
                         sdlcPortOperACTIVTO,
                         sdlcPortOperLastFailTime,
                         sdlcPortOperLastFailCause
                     }
                     STATUS current
                     DESCRIPTION
                         "The sdlcCorePortOperGroup defines objects
                         which are common to the PortOper group of all
                         compliant link stations."
                     ::= { sdlcCoreGroups 2 }


sdlcCorePortStatsGroup OBJECT-GROUP
                     OBJECTS
                     {
                         sdlcPortStatsPhysicalFailures,
                         sdlcPortStatsInvalidAddresses,
                         sdlcPortStatsDwarfFrames
                     }
                     STATUS current
                     DESCRIPTION
                         "The sdlcCorePortStatsGroup defines objects
                         which are common to the PortStats group of all
                         compliant link stations."
                     ::= { sdlcCoreGroups 3 }


sdlcCoreLSAdminGroup OBJECT-GROUP
                     OBJECTS
                     {
                         sdlcLSAddress,
                         sdlcLSAdminName,
                         sdlcLSAdminState,
                         sdlcLSAdminISTATUS,
                         sdlcLSAdminMAXDATASend,
                         sdlcLSAdminMAXDATARcv,
                         sdlcLSAdminMAXIN,
                         sdlcLSAdminMAXOUT,
                         sdlcLSAdminMODULO,
                         sdlcLSAdminRETRIESm,
                         sdlcLSAdminRETRIESt,
                         sdlcLSAdminRETRIESn,
                         sdlcLSAdminRNRLIMIT,
                         sdlcLSAdminDATMODE,
                         sdlcLSAdminGPoll,
                         sdlcLSAdminSimRim,
                         sdlcLSAdminRowStatus
                     }
                     STATUS current
                     DESCRIPTION
                         "The sdlcCorePortAdminGroup defines objects
                         which are common to the PortAdmin group of all
                         compliant link stations."
                     ::= { sdlcCoreGroups 4 }
sdlcCoreLSOperGroup  OBJECT-GROUP
                     OBJECTS
                     {
                         sdlcLSOperRole,
                         sdlcLSOperState,
                         sdlcLSOperMAXDATASend,
                         sdlcLSOperMAXIN,
                         sdlcLSOperMAXOUT,
                         sdlcLSOperMODULO,
                         sdlcLSOperRETRIESm,
                         sdlcLSOperRETRIESt,
                         sdlcLSOperRETRIESn,
                         sdlcLSOperRNRLIMIT,
                         sdlcLSOperDATMODE,
                         sdlcLSOperLastFailTime,
                         sdlcLSOperLastFailCause,
                         sdlcLSOperLastFailCtrlIn,
                         sdlcLSOperLastFailCtrlOut,
                         sdlcLSOperLastFailFRMRInfo,
                         sdlcLSOperLastFailREPLYTOs,
                         sdlcLSOperEcho,
                         sdlcLSOperGPoll
                     }
                     STATUS current
                     DESCRIPTION
                         "The sdlcCorePortOperGroup defines objects
                         which are common to the PortOper group of all
                         compliant link stations."
                     ::= { sdlcCoreGroups 5 }


sdlcCoreLSStatsGroup OBJECT-GROUP
                     OBJECTS
                     {
                         sdlcLSStatsBLUsIn,
                         sdlcLSStatsBLUsOut,
                         sdlcLSStatsOctetsIn,
                         sdlcLSStatsOctetsOut,
                         sdlcLSStatsPollsIn,
                         sdlcLSStatsPollsOut,
                         sdlcLSStatsPollRspsIn,
                         sdlcLSStatsPollRspsOut,
                         sdlcLSStatsLocalBusies,
                         sdlcLSStatsRemoteBusies,
                         sdlcLSStatsIFramesIn,
                         sdlcLSStatsIFramesOut,
                         sdlcLSStatsRetransmitsIn,
                         sdlcLSStatsRetransmitsOut,
                         sdlcLSStatsUIFramesIn,
                         sdlcLSStatsUIFramesOut,
                         sdlcLSStatsXIDsIn,
                         sdlcLSStatsXIDsOut,
                         sdlcLSStatsTESTsIn,
                         sdlcLSStatsTESTsOut,
                         sdlcLSStatsREJsIn,
                         sdlcLSStatsREJsOut,
                         sdlcLSStatsFRMRsIn,
                         sdlcLSStatsFRMRsOut,
                         sdlcLSStatsSIMsIn,
                         sdlcLSStatsSIMsOut,
                         sdlcLSStatsRIMsIn,
                         sdlcLSStatsRIMsOut,
                         sdlcLSStatsProtocolErrs,
                         sdlcLSStatsRNRLIMITs,
                         sdlcLSStatsRetriesExps
                     }
                     STATUS current
                     DESCRIPTION
                         "The sdlcCorePortStatsGroup defines objects
                         which are common to the PortStats group of all
                         compliant link stations."
                     ::= { sdlcCoreGroups 6 }


--
-- Conformance Groups for Primary Link Stations
--

sdlcPrimaryGroups OBJECT IDENTIFIER ::= { sdlcGroups 2 }

sdlcPrimaryGroup OBJECT-GROUP
                     OBJECTS
                     {
                         sdlcPortAdminPAUSE,
                         sdlcPortOperPAUSE,
                         sdlcLSAdminREPLYTO,
                         sdlcLSOperREPLYTO
                     }
                     STATUS current
                     DESCRIPTION
                         "The sdlcPrimaryGroup defines objects which
                         are common to all compliant primary link
                         stations."
                     ::= { sdlcPrimaryGroups 1 }

sdlcPrimaryMultipointGroup OBJECT-GROUP
                     OBJECTS
                     {
                         sdlcPortAdminSERVLIM,
                         sdlcPortAdminSlowPollTimer,
                         sdlcPortOperSlowPollMethod,
                         sdlcPortOperSERVLIM,
                         sdlcPortOperSlowPollTimer

                     }
                     STATUS current
                     DESCRIPTION
                         "The sdlcPrimaryMultipointGroup defines objects
                         which are common to all compliant primary link
                         stations that are in a multipoint topology."
                     ::= { sdlcPrimaryGroups 2 }


END

4. Acknowledgments โœจ

Huge thanks to the SNADLC MIB working group ๐Ÿซถ They reviewed this MIB and somehow had infinite patience through the whole editing process. Iconic behavior honestly.

5. References ๐Ÿ“š

  • [1] Stewart, B., "Definitions of Managed Objects for RS-232-like Hardware Devices using SMIv2", RFC 1659, Xyplex, July 1994.
  • [2] "Synchronous Data Link Control: Concepts", IBM Publication No. GA27-3093-04, 5th edition, May 1992.
  • [3] "Vocabulary for Data Processing Telecommunications, and Office Systems", IBM Publication No. GC20-1699-6.
  • [4] Kostick, D., Kielczewski, Z., and K. Shih, Editors, "Definitions of Managed Objects for SNA NAUs using SMIv2", RFC 1666, Eicon Technology Corporation, Bell Communications Research, Novell, August 1994.
  • [5] Waldbusser, S., "Row Creation with SNMPv1", Work in Progress.
  • [6] McCloghrie K., and F. Kastenholz, "Evolution of the Interfaces Group of MIB-II", RFC 1573, Hughes LAN Syst, FTP Software, January 1994.

6. Glossary ๐Ÿ’œ

okay so here's the vocab you need, bestie ๐Ÿงš

  • link station: a link station is the bundle of procedures and control info that handles moving data between two nodes joined by a link connection. All the traffic on that link connection goes from the primary link station out to one or more secondary link stations, or from a secondary link station back to the primary. ๐Ÿ”ฅ
  • primary link station: this is the link station instance on a link connection that's in charge of controlling the data link. There can only be one primary link station on a link connection ๐Ÿ‘‘ It sends commands to one or more secondary link stations.
  • secondary link station: this is the link station instance on a link connection that takes commands from the primary link station and sends responses back to it. ๐ŸŽ€
  • switched line: a telecom line where the connection gets set up by dialing. For switched lines, the SDLC startup sequence typically starts with a null exchange identifier (null XID). ๐Ÿ“ž
  • leased line: a telecom line where you don't have to dial to set up connections. For leased lines, the SDLC startup sequence may or may not start with an exchange identifer (XID). Also, there are interface differences (e.g., RS.232) between leased and switched lines, but those interface differences don't line up one-to-one with differences in the SDLC startup protocol. The interface and the SDLC protocol are independent of one another, so no cap, they're separate things ๐Ÿฆ‹
  • point-to-point link: a link that connects a single primary link station to a single secondary link station. A point-to-point link can be either switched or leased. ๐ŸŒธ
  • multipoint link: a link that connects a single primary link station to several secondary link stations. A multipoint link can be either switched or leased. Note: the physical interface signals for a multipoint link are different than for a point-to-point link. โญ This is also called a multidrop line.

7. Security Considerations ๐Ÿ’€

Okay, plot twist: this memo does not discuss security issues at all. Not one word. So if you're looking for security guidance here, you won't find it, and that's a whole mood ๐Ÿ™ˆ

8. Authors' Addresses ๐ŸŒˆ

Here are the lovely humans behind this MIB ๐Ÿ’–

Jeff Hilgeman (chair)
Apertus Technologies, Inc.
7275 Flying Cloud Dr.
Eden Prarie, MN  55344

Phone: 1 612 828 0668
EMail: jeffh@apertus.com
Shannon D. Nix
Metaplex, Inc.
7412 Wingfoot Dr.
Raleigh, NC  27615

Phone: 1 919 878 0811
EMail: snix@metaplex.com
Alan Bartky
Sync Research, Inc.
7 Studebaker
Irvine, CA  92718

Phone: 1 714 588 2070
EMail: alan@sync.com
Wayne Clark (editor)
cisco Systems, Inc.
3100 Smoketree Ct.
Suite 1000
Raleigh, NC 27604

Phone: 1 919 878 6958
EMail: wclark@cisco.com
๐Ÿ“ฆ where this page comes from