RFC 8173

Precision Time Protocol Version 2 (PTPv2) Management Information Base

πŸ“… published June 2017, from ietf

RFC 8173: Precision Time Protocol Version 2 (PTPv2) Management Information Base πŸŽ€

Okay bestie, so this one is by Vinay Shankarkumar (Cisco Systems), Laurent Montini (Cisco Systems), Tim Frost (Calnex Solutions Ltd.), and Greg Dowd (Microsemi) ✨. It's a Standards Track document, published June 2017, with ISSN 2070-1721. It doesn't list anything it obsoletes or updates, so it's standing on its own πŸ’….

Abstract ✨

Okay so this memo defines a chunk of the Management Information Base (MIB) for network management protocols in internets based on TCP or IP πŸ¦‹. Specifically, it's all about managing networks that run the Precision Time Protocol (PTP), which is specified in IEEE Std. 1588-2008. Iconic.

The memo is written as a MIB module that is SMIv2-compliant, and it's semantically identical to the SMIv1 definitions it's a peer of 🧚.

Status of This Memo ✨

This is an Internet Standards Track document 🌸.

It's a product of the Internet Engineering Task Force (IETF), so it has the consensus of the IETF community. It got public review and was approved for publication by the Internet Engineering Steering Group (IESG). If you want the deets on Internet Standards, check Section 2 of RFC 7841 πŸ’œ.

For the current status, any errata, and how to send feedback, go to http://www.rfc-editor.org/info/rfc8173 πŸ”₯.

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

This doc is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents, which you can find at http://trustee.ietf.org/license-info as they stood on the publication date. Please actually read them, because they explain your rights and restrictions πŸ™ˆ. Code Components pulled out of this document must include Simplified BSD License text, as described in Section 4.e of the Trust Legal Provisions, and they come without warranty, same as that license says πŸ’….

Table of Contents πŸ“–

   1. Introduction ....................................................3
      1.1. Relationship to Other Profiles and MIBs ....................3
   2. The SNMP Management Framework ...................................4
   3. Overview ........................................................4
   4. PTP MIB Definition ..............................................5
   5. Security Considerations ........................................59
   6. IANA Considerations ............................................61
   7. References .....................................................62
      7.1. Normative References ......................................62
      7.2. Informative References ....................................63
   Acknowledgements ..................................................63
   Author's Addresses ................................................64

1. Introduction ✨

Okay so this memo defines a portion of the MIB module for use with network management protocols in the Internet community πŸ¦‹. It's specifically about managed objects for managing PTP devices, including ordinary clocks, transparent clocks, and boundary clocks 🧚.

This MIB module is restricted to reading standard PTP data elements, as described in [IEEE-1588-2008]. That's what lets it monitor how PTP clocks are running inside the network πŸ‘€. The plan is that this module will complement other managed objects that get defined later. Those will give more detailed performance info for PTP clocks that support the Telecom Profile defined in [G.8265.1], plus any future profiles. Those objects are out of scope for this doc, though 🌸.

Also, this MIB is read-only and isn't meant to let you configure PTP clocks πŸ’…. PTP clocks are often embedded in other network elements like routers, switches, and gateways, so configuration usually happens through that element's own configuration interface ✨.

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here πŸŽ€. Lowercase versions are just regular words, bestie πŸ’œ.

1.1. Relationship to Other Profiles and MIBs πŸ¦‹

This MIB module is meant to be used with the default PTP profile described in [IEEE-1588-2008] when it runs over the IP network layer 🌈. Like we said above, it's supposed to complement other managed objects that monitor and measure PTP clocks for specific profiles, like the Telecom Profile in [G.8265.1] πŸ’–.

Some other PTP profiles come with their own MIB modules as part of the profile, and this MIB is not meant to replace those πŸ“.

2. The Internet-Standard Management Framework ✨

If you want a detailed overview of the documents that describe the current Internet-Standard Management Framework, look at section 7 of RFC 3410 [RFC3410] πŸ“–.

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

3. Overview 🌈

The objects in this MIB module are for describing the Precision Time Protocol (PTP), as defined in [IEEE-1588-2008] πŸ’–.

Section 6 of [IEEE-1588-2008] gives an overview of synchronization networks that use PTP ✨.

Terms used in this document have the meanings defined in Section 3.1 of [IEEE-1588-2008] πŸ¦‹.

4. PTP MIB Definition πŸ‘‘

Now for the actual MIB module, which is the code block below. Keep in mind that everything in here is verbatim πŸ’….

PTPBASE-MIB DEFINITIONS ::= BEGIN

IMPORTS
    MODULE-IDENTITY,
    OBJECT-TYPE,
    OBJECT-IDENTITY,
    Gauge32,
    Unsigned32,
    Counter32,
    Counter64,
    mib-2,
    Integer32
        FROM SNMPv2-SMI
    OBJECT-GROUP,
    MODULE-COMPLIANCE
        FROM SNMPv2-CONF
    TEXTUAL-CONVENTION,
    TruthValue,
    DisplayString,
    AutonomousType
        FROM SNMPv2-TC
    InterfaceIndexOrZero
        FROM IF-MIB;

ptpbaseMIB MODULE-IDENTITY
    LAST-UPDATED    "201705300000Z"
    ORGANIZATION    "TICTOC Working Group"
    CONTACT-INFO
          "WG Email: tictoc@ietf.org

           Vinay Shankarkumar
           Cisco Systems
           Email: vinays@cisco.com

           Laurent Montini
           Cisco Systems
           Email: lmontini@cisco.com

           Tim Frost
           Calnex Solutions Ltd.
           Email: tim.frost@calnexsol.com

           Greg Dowd
           Microsemi Inc.
           Email: greg.dowd@microsemi.com"

    DESCRIPTION
        "The MIB module for PTP version 2

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

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

        Overview of PTP version 2 (IEEE Std. 1588-2008)

        [IEEE-1588-2008] defines a protocol enabling precise
        synchronization of clocks in measurement and control systems
        implemented with packet-based networks, the Precision Time
        Protocol version 2 (PTPv2).  This MIB module does not address
        PTPv1, the earlier version defined in IEEE Std. 1588-2002.
        The protocol is applicable to network elements communicating
        using IP.  The protocol enables heterogeneous systems that
        include clocks of various inherent precision, resolution, and
        stability to synchronize to a grandmaster clock.

        The protocol supports system-wide synchronization accuracy in
        the sub-microsecond range with minimal network and local clock
        computing resources.  [IEEE-1588-2008] uses UDP/IP or
        Ethernet and can be adapted to other mappings.  It includes
        formal mechanisms for message extensions, higher sampling rates,
        correction for asymmetry, a clock type to reduce error
        accumulation in large topologies, and specifications on how to
        incorporate the resulting additional data into the
        synchronization protocol.  [IEEE-1588-2008] also defines
        conformance and management capability.

        MIB description

        This MIB module supports the Precision Time Protocol version 2
        (PTPv2, hereafter designated as PTP) features of network element
        system devices, when using the default PTP profile described in
        [IEEE-1588-2008] when running over the IP network layer.

        It is envisioned that this MIB module will complement other
        managed objects to be defined to monitor and measure the
        performance of the PTP devices and telecom clocks supporting
        specific PTP profiles.

        Some other PTP profiles have their own MIB modules defined as
        part of the profile, and this MIB module is not intended to
        replace those MIB modules.

        Technical terms used in this module are defined in
        [IEEE-1588-2008].

        The MIB module refers to sections of [IEEE-1588-2008].

        Abbreviations:
            E2E     End-to-End
            EUI     Extended Unique Identifier
            GPS     Global Positioning System
            IANA    Internet Assigned Numbers Authority
            IP      Internet Protocol
            NTP     Network Time Protocol (see [RFC5905])
            P2P     Peer-to-Peer
            PTP     Precision Time Protocol
            TAI     International Atomic Time
            UDP     User Datagram Protocol
            UTC     Coordinated Universal Time

        References:

        [IEEE-1588-2008] IEEE Standard for A Precision Clock
            Synchronization Protocol for Networked Measurement and
            Control Systems, IEEE Std. 1588-2008, July 2008.


        The below table specifies the object formats of the various
        textual conventions used.

        Data type mapping   Textual Convention    SYNTAX
        ------------------- --------------------- ------------------
        5.3.2 TimeInterval  PtpClockTimeInterval  OCTET
                                                  STRING(SIZE(1..255))
        5.3.3 Timestamp     PtpClockTimestamp     OCTET STRING(SIZE(6))
        5.3.4 ClockIdentity PtpClockIdentity      OCTET STRING(SIZE(8))
        5.3.5 PortIdentity  PtpClockPortNumber    INTEGER(1..65535)
        5.3.7 ClockQuality  PtpClockQualityClassType
      "

      REVISION        "201705300000Z"
      DESCRIPTION     "Initial version of this MIB module, published
                      as RFC 8173."

      ::= { mib-2 241 }

-- Textual Conventions

Okay that's the first chunk, and the MIB is just getting started πŸŽ€. The textual conventions are next, so stay tuned, bestie πŸ’–πŸ¦‹

okay so this is where the MIB gets its actual vibe πŸ’… textual conventions are basically the named types the whole module is built from ✨ first up is the domain number 🌈

PtpClockDomainType ::= TEXTUAL-CONVENTION
    DISPLAY-HINT    "d"
    STATUS          current
    DESCRIPTION
        "The Domain is identified by an integer, the domainNumber, in
        the range of 0 to 255.  An integer value that is used to assign
        each PTP device to a particular domain."

    REFERENCE   "Section 7.1 ('Domains') and Table 2 ('domainNumber')
                of [IEEE-1588-2008]"
    SYNTAX      Unsigned32 (0..255)

PtpClockIdentity ::= TEXTUAL-CONVENTION
    DISPLAY-HINT    "255a"
    STATUS          current
    DESCRIPTION
        "The clock identity is an 8-octet array and will be presented in
        the form of a character array.  Network byte order is assumed.

        The value of the PtpClockIdentity should be taken from the
        IEEE EUI-64 individual assigned numbers as indicated in
        Section 7.5.2.2.2 of [IEEE-1588-2008].  It can also be a
        non-EUI-64 address as defined in Section 7.5.2.2.3 of
        [IEEE-1588-2008].

        The clock identifier can be constructed from existing EUI-48
        assignments."

    REFERENCE       "Section 7.5.2.2.1 ('General') of [IEEE-1588-2008]"
    SYNTAX          OCTET STRING (SIZE (8))

PtpClockInstanceType ::= TEXTUAL-CONVENTION
    DISPLAY-HINT    "d"
    STATUS          current
    DESCRIPTION
        "The instance of the clock of a given clock type in a given
        domain."
    SYNTAX          Unsigned32 (0..255)

PtpClockIntervalBase2 ::= TEXTUAL-CONVENTION
    DISPLAY-HINT    "d"
    STATUS          current
    DESCRIPTION
        "The interval included in message types Announce, Sync,
        Delay_Req, and Pdelay_Req as indicated in Section 7.7.2.1 of
        [IEEE-1588-2008]."

    REFERENCE   "Section 7.7.2.1 ('General interval specification') of
                [IEEE-1588-2008]"
    SYNTAX      Integer32 (-128..127)

the next batch is about mechanisms, ports and states, and this is where the enums get real πŸ¦‹

PtpClockMechanismType ::= TEXTUAL-CONVENTION
    STATUS          current
    DESCRIPTION
        "The clock type based on whether end-to-end or peer-to-peer
        mechanisms are used.  The mechanism used to calculate the Mean
        Path Delay as indicated in Table 9 of [IEEE-1588-2008]."

    REFERENCE
        "Sections 8.2.5.4.4 ('portDS.delayMechanism'),
        6.6.4 ('Measuring link propagation delay in clocks supporting
        peer-to-peer path correction'), and
        7.4.2 ('communication Path asymmetry') of [IEEE-1588-2008]."
    SYNTAX      INTEGER {
                    e2e(1),
                    p2p(2),
                    disabled(254)
                    }

PtpClockPortNumber ::= TEXTUAL-CONVENTION
    DISPLAY-HINT    "d"
    STATUS          current
    DESCRIPTION
        "An index identifying a specific PTP port on a PTP node."

    REFERENCE
        "Sections 7.5.2.3 ('portNumber') and 5.3.5 ('PortIdentity') of
        [IEEE-1588-2008]"
    SYNTAX      Unsigned32 (0..65535)

PtpClockPortState ::= TEXTUAL-CONVENTION
    STATUS          current
    DESCRIPTION
        "This is the value of the current state of the protocol engine
        associated with this port."

    REFERENCE
        "Sections 8.2.5.3.1 ('portState') and 9.2.5 ('State machines')
        of [IEEE-1588-2008]"
    SYNTAX          INTEGER  {
                        initializing(1),
                        faulty(2),
                        disabled(3),
                        listening(4),
                        preMaster(5),
                        master(6),
                        passive(7),
                        uncalibrated(8),
                        slave(9)
                    }

PtpClockPortTransportTypeAddress ::= TEXTUAL-CONVENTION
    DISPLAY-HINT    "255a"
    STATUS          current
    DESCRIPTION
        "The clock port transport protocol address used for this
         communication between the clock nodes.  This is a string
         corresponding to the address type as specified by the
         transport type used.  The transport types can be defined
         elsewhere, in addition to the ones defined in this document.
         This can be an address of type IP version 4, IP version 6,
         Ethernet, DeviceNET, ControlNET, or IEC61158.  The OCTET STRING
         representation of the OID of ptpbaseWellKnownTransportTypes
         will be used in the values contained in the OCTET STRING."

    REFERENCE   "Annex D (IPv4), Annex E (IPv6), Annex F (Ethernet),
                 Annex G (DeviceNET), Annex H (ControlNET), and
                 Annex I (IEC61158) of [IEEE-1588-2008]"
    SYNTAX          OCTET STRING (SIZE (1..255))

PtpClockProfileType ::= TEXTUAL-CONVENTION
    STATUS          current
    DESCRIPTION
        "Clock Profile used.  A profile is the set of allowed PTP
        features applicable to a device."

    REFERENCE       "Sections 3.1.30 ('profile') and 19.3 ('PTP
                    profiles') of [IEEE-1588-2008]"
    SYNTAX          INTEGER  {
                        default(1),
                        telecom(2),
                        vendorspecific(3)
                    }

quality is where things get a little spicy πŸ”₯ the accuracy and class lists have gaps, and the text calls them out on purpose

PtpClockQualityAccuracyType ::= TEXTUAL-CONVENTION
    STATUS          current
    DESCRIPTION
        "The ClockQuality as specified in Section 5.3.7,
        Section 7.6.2.5, and Table 6 of [IEEE-1588-2008].

        The following values are not represented in the enumerated
        values.

                 0x01-0x1F Reserved
                 0x32-0x7F Reserved

        It is important to note that Section 7.1.1 of RFC 2578 allows
        for gaps and for enumerated values to start at zero when
        indicated by the protocol."

    REFERENCE
        "Section 5.3.7 ('ClockQuality'), Section 7.6.2.5
        ('clockAccuracy'), and Table 6 ('clockAccuracy enumeration')
        of [IEEE-1588-2008]"
    SYNTAX          INTEGER  {
                     -- reserved00(0:31), 0x00 to 0x1F
                        nanoSecond25(32),    -- 0x20
                        nanoSecond100(33),   -- 0x21
                        nanoSecond250(34),   -- 0x22
                        microSec1(35),       -- 0x23
                        microSec2dot5(36),   -- 0x24
                        microSec10(37),      -- 0x25
                        microSec25(38),      -- 0x26
                        microSec100(39),     -- 0x27
                        microSec250(40),     -- 0x28
                        milliSec1(41),       -- 0x29
                        milliSec2dot5(42),   -- 0x2A
                        milliSec10(43),      -- 0x2B
                        milliSec25(44),      -- 0x2C
                        milliSec100(45),     -- 0x2D
                        milliSec250(46),     -- 0x2E
                        second1(47),         -- 0x2F
                        second10(48),        -- 0x30
                        secondGreater10(49), -- 0x31
                        unknown(254)         -- 0xFE
                     -- reserved255(255),    0xFF
                    }

PtpClockQualityClassType ::= TEXTUAL-CONVENTION
    STATUS          current
    DESCRIPTION
        "The ClockQuality as specified in Section 5.3.7,
        Section 7.6.2.4, and Table 5 of [IEEE-1588-2008]."

    REFERENCE       "Section 5.3.7 ('ClockQuality'), Section 7.6.2.4
                    ('clockClass'), and Table 5 ('clockClass
                    specifications') of [IEEE-1588-2008]."
    SYNTAX          INTEGER  {
                     -- reserved(0), 0x00
                     -- reserved(1:5), 0x01 to 0x05
                        clockclass6(6), -- 0x06
                        clockclass7(7), -- 0x07
                        -- reserved(8), 0x08
                        -- reserved(9:10), 0x09 to 0x0A
                        -- reserved(11:12), 0x0B, 0x0C
                        clockclass13(13), -- 0x0D
                        clockclass14(14), -- 0x0E
                        -- reserved(15:51), 0x0F to 0x33
                        clockclass52(52), -- 0x34
                        -- reserved(53:57), 0x35 to 0x39
                        clockclass58(58) -- 0x3A
                        -- reserved(59:67), 0x3B to 0x43
                        -- otherprofiles(68:122), 0x44 to 0x7A
                        -- reserved(123:127), 0x7B to 0x7F
                        -- reserved(128:132), 0x80 to 0x84
                    }

almost there, bestie 🫢 roles, states, time, sources and tx modes are the last TCs, and then the notifications branch closes it out 🌸

PtpClockRoleType ::= TEXTUAL-CONVENTION
    STATUS          current
    DESCRIPTION
        "The Clock Role.  The protocol generates a master-slave
        relationship among the clocks in the system.

        Clock Role      Value
        -------------------------
        Master clock     1
        Slave clock      2      "
    SYNTAX          INTEGER  {
                        master(1),
                        slave(2)
                    }

PtpClockStateType ::= TEXTUAL-CONVENTION
    STATUS          current
    DESCRIPTION
        "The clock state returned by a PTP engine.

        Clock State      Value
        ------------------------
        Freerun state       1
        Holdover state      2
        Acquiring state     3
        Freq_locked state   4
        Phase_aligned state 5  "
    SYNTAX          INTEGER  {
                        freerun(1),
                        holdover(2),
                        acquiring(3),
                        frequencyLocked(4),
                        phaseAligned(5)
                    }

PtpClockTimeInterval ::= TEXTUAL-CONVENTION
    DISPLAY-HINT    "255a"
    STATUS          current
    DESCRIPTION
        "This textual convention corresponds to the TimeInterval
        structure indicated in Section 5.3.2 of [IEEE-1588-2008].
        It will be presented in the form of a character array.
        Network byte order is assumed."

    REFERENCE
        "Sections 5.3.2 ('TimeInterval') and 7.7.2.1 ('Timer interval
         specification') of [IEEE-1588-2008]"
    SYNTAX          OCTET STRING (SIZE (1..255))

PtpClockTimeSourceType ::= TEXTUAL-CONVENTION
    STATUS          current
    DESCRIPTION
        "The ClockQuality as specified in Sections 5.3.7,
        Section 7.6.2.6, and Table 7 of [IEEE-1588-2008].

        The following values are not represented in the enumerated
        values.

        0xF0-0xFE  For use by alternate PTP profiles
        0xFF       Reserved

        It is important to note that Section 7.1.1 of RFC 2578 allows
        for gaps and for enumerated values to start at zero when
        indicated by the protocol."

    REFERENCE       "Section 5.3.7 ('ClockQuality'), Section 7.6.2.6
                    ('timeSource'), and Table 7 ('timeSource
                    enumeration') of [IEEE-1588-2008]."
    SYNTAX          INTEGER  {
                        atomicClock(16), -- 0x10
                        gps(32), -- 0x20
                        terrestrialRadio(48), -- 0x22
                        ptp(64), -- 0x40
                        ntp(80), -- 0x50
                        handSet(96), -- 0x60
                        other(144), -- 0x90
                        internalOscillator(160) -- 0xA0
                    }

PtpClockTxModeType ::= TEXTUAL-CONVENTION
    STATUS          current
    DESCRIPTION
        "Transmission mode.

        Unicast:       Using unicast communication channel.
        Multicast:     Using Multicast communication channel.
        multicast-mix: Using multicast-unicast communication channel"
    SYNTAX          INTEGER  {
                        unicast(1),
                        multicast(2),
                        multicastmix(3)
                    }

PtpClockType ::= TEXTUAL-CONVENTION
    STATUS          current
    DESCRIPTION
        "The clock types as defined in the MIB module description."

    REFERENCE
        "Section 6.5.1 ('PTP device types') of [IEEE-1588-2008]."
    SYNTAX          INTEGER  {
                        ordinaryClock(1),
                        boundaryClock(2),
                        transparentClock(3),
                        boundaryNode(4)
                    }

ptpbaseMIBNotifs  OBJECT IDENTIFIER
    ::= { ptpbaseMIB 0 }

okay bestie, the MIB objects are up next πŸ’–

ptpbaseMIBObjects  OBJECT IDENTIFIER
    ::= { ptpbaseMIB 1 }

ptpbaseMIBConformance  OBJECT IDENTIFIER
    ::= { ptpbaseMIB 2 }

ptpbaseMIBSystemInfo  OBJECT IDENTIFIER
    ::= { ptpbaseMIBObjects 1 }

ptpbaseMIBClockInfo  OBJECT IDENTIFIER
    ::= { ptpbaseMIBObjects 2 }

ptpbaseSystemTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF PtpbaseSystemEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "Table of count information about the PTP system for all
        domains."
    ::= { ptpbaseMIBSystemInfo 1 }

ptpbaseSystemEntry OBJECT-TYPE
    SYNTAX          PtpbaseSystemEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "A table entry that contains count information about a
        single domain.  New row entries are added when the PTP clock for
        this domain is configured, while the unconfiguration of the PTP
        clock removes them."
    INDEX           {
                        ptpDomainIndex,
                        ptpInstanceIndex
                    }
    ::= { ptpbaseSystemTable 1 }

PtpbaseSystemEntry ::= SEQUENCE {
        ptpDomainIndex           PtpClockDomainType,
        ptpInstanceIndex         PtpClockInstanceType,
        ptpDomainClockPortsTotal Gauge32
}

ptpDomainIndex OBJECT-TYPE
    SYNTAX          PtpClockDomainType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the domain number used to create a
        logical group of PTP devices.  The Clock Domain is a logical
        group of clocks and devices that synchronize with each other
        using the PTP protocol.

        0           Default domain
        1           Alternate domain 1
        2           Alternate domain 2
        3           Alternate domain 3
        4 - 127     User-defined domains
        128 - 255   Reserved"
    ::= { ptpbaseSystemEntry 1 }

ptpInstanceIndex OBJECT-TYPE
    SYNTAX          PtpClockInstanceType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the instance of the clock for this
        domain."
    ::= { ptpbaseSystemEntry 2 }

ptpDomainClockPortsTotal OBJECT-TYPE
    SYNTAX          Gauge32
    UNITS           "ptp ports"
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the total number of clock ports
        configured within a domain in the system."
    ::= { ptpbaseSystemEntry 3 }

the system table counts things per domain, and the domain numbers have their own little zones 🌸

ptpbaseSystemDomainTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF PtpbaseSystemDomainEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "Table of information about the PTP system for all clock modes
        -- ordinary, boundary, or transparent."
    ::= { ptpbaseMIBSystemInfo 2 }

ptpbaseSystemDomainEntry OBJECT-TYPE
    SYNTAX          PtpbaseSystemDomainEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "A table entry that contains information about a single
        clock mode for the PTP system.  A row entry gets added when PTP
        clocks are configured on the node."
    INDEX           { ptpbaseSystemDomainClockTypeIndex }
    ::= { ptpbaseSystemDomainTable 1 }

PtpbaseSystemDomainEntry ::= SEQUENCE {
        ptpbaseSystemDomainClockTypeIndex PtpClockType,
        ptpbaseSystemDomainTotals         Unsigned32
}
ptpbaseSystemDomainClockTypeIndex OBJECT-TYPE
    SYNTAX          PtpClockType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the clock type as defined in the
        textual convention description."
    ::= { ptpbaseSystemDomainEntry 1 }

ptpbaseSystemDomainTotals OBJECT-TYPE
    SYNTAX          Unsigned32
    UNITS           "domains"
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the total number of PTP domains for this
        particular clock type configured in this node."
    ::= { ptpbaseSystemDomainEntry 2 }

ptpbaseSystemProfile OBJECT-TYPE
    SYNTAX          PtpClockProfileType
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the PTP profile implemented on the
        system."
    REFERENCE       "Section 19.3 ('PTP profiles')
                    of [IEEE-1588-2008]"
    ::= { ptpbaseMIBSystemInfo 3 }

ptpbaseClockCurrentDSTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF PtpbaseClockCurrentDSEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "Table of information about the PTP clock currentDS for
        all domains."
    ::= { ptpbaseMIBClockInfo 1 }

ptpbaseClockCurrentDSEntry OBJECT-TYPE
    SYNTAX          PtpbaseClockCurrentDSEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "A table entry that contains information about a single
        PTP clock currentDS for a domain."
    REFERENCE
        "Section 8.2.2 ('currentDS data set member
        specifications') of [IEEE-1588-2008]"
    INDEX           {
                        ptpbaseClockCurrentDSDomainIndex,
                        ptpbaseClockCurrentDSClockTypeIndex,
                        ptpbaseClockCurrentDSInstanceIndex
                    }
    ::= { ptpbaseClockCurrentDSTable 1 }

PtpbaseClockCurrentDSEntry ::= SEQUENCE {
        ptpbaseClockCurrentDSDomainIndex      PtpClockDomainType,
        ptpbaseClockCurrentDSClockTypeIndex   PtpClockType,
        ptpbaseClockCurrentDSInstanceIndex    PtpClockInstanceType,
        ptpbaseClockCurrentDSStepsRemoved     Unsigned32,
        ptpbaseClockCurrentDSOffsetFromMaster PtpClockTimeInterval,
        ptpbaseClockCurrentDSMeanPathDelay    PtpClockTimeInterval
}

ptpbaseClockCurrentDSDomainIndex OBJECT-TYPE
    SYNTAX          PtpClockDomainType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the domain number used to create a
        logical group of PTP devices."
    ::= { ptpbaseClockCurrentDSEntry 1 }

ptpbaseClockCurrentDSClockTypeIndex OBJECT-TYPE
    SYNTAX          PtpClockType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the clock type as defined in the
        textual convention description."
    ::= { ptpbaseClockCurrentDSEntry 2 }

ptpbaseClockCurrentDSInstanceIndex OBJECT-TYPE
    SYNTAX          PtpClockInstanceType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the instance of the clock for this clock
        type in the given domain."
    ::= { ptpbaseClockCurrentDSEntry 3 }

ptpbaseClockCurrentDSStepsRemoved OBJECT-TYPE
    SYNTAX          Unsigned32
    UNITS           "Steps"
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "The current clock dataset stepsRemoved value.

        This object specifies the distance measured by the number of
        boundary clocks between the local clock and the foreign master
        as indicated in the stepsRemoved field of Announce messages."
    REFERENCE
        "Section 8.2.2.2 ('stepsRemoved') of [IEEE-1588-2008]"
    ::= { ptpbaseClockCurrentDSEntry 4 }

ptpbaseClockCurrentDSOffsetFromMaster OBJECT-TYPE
    SYNTAX          PtpClockTimeInterval
    UNITS           "Time Interval"
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the current clock dataset ClockOffset
        value.  The value of the computation of the offset in time
        between a slave and a master clock."
    REFERENCE
        "Section 8.2.2.3 ('currentDS.offsetFromMaster')
        of [IEEE-1588-2008]"
    ::= { ptpbaseClockCurrentDSEntry 5 }

ptpbaseClockCurrentDSMeanPathDelay OBJECT-TYPE
    SYNTAX          PtpClockTimeInterval
    UNITS           "Time Interval"
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the current clock dataset
        MeanPathDelay value.

        The mean path delay between a pair of ports as measured by the
        delay request-response mechanism."
    REFERENCE
        "Section 8.2.2.4 ('currentDS.meanPathDelay')
        of [IEEE-1588-2008]"
    ::= { ptpbaseClockCurrentDSEntry 6 }

ptpbaseClockParentDSTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF PtpbaseClockParentDSEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "Table of information about the PTP clock parentDS for
        all domains."
    ::= { ptpbaseMIBClockInfo 2 }

ptpbaseClockParentDSEntry OBJECT-TYPE
    SYNTAX          PtpbaseClockParentDSEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "A table entry that contains information about a single
        PTP clock parentDS for a domain."
    REFERENCE
        "Section 8.2.3 ('parentDS data set member specifications') of
        [IEEE-1588-2008]"
    INDEX           {
                        ptpbaseClockParentDSDomainIndex,
                        ptpbaseClockParentDSClockTypeIndex,
                        ptpbaseClockParentDSInstanceIndex
                    }
    ::= { ptpbaseClockParentDSTable 1 }

PtpbaseClockParentDSEntry ::= SEQUENCE {
    ptpbaseClockParentDSDomainIndex            PtpClockDomainType,
    ptpbaseClockParentDSClockTypeIndex         PtpClockType,
    ptpbaseClockParentDSInstanceIndex          PtpClockInstanceType,
    ptpbaseClockParentDSParentPortIdentity     OCTET STRING,
    ptpbaseClockParentDSParentStats            TruthValue,
    ptpbaseClockParentDSOffset                 PtpClockIntervalBase2,
    ptpbaseClockParentDSClockPhChRate          Integer32,
    ptpbaseClockParentDSGMClockIdentity        PtpClockIdentity,
    ptpbaseClockParentDSGMClockPriority1       Unsigned32,
    ptpbaseClockParentDSGMClockPriority2       Unsigned32,
    ptpbaseClockParentDSGMClockQualityClass    PtpClockQualityClassType,
    ptpbaseClockParentDSGMClockQualityAccuracy
PtpClockQualityAccuracyType,
    ptpbaseClockParentDSGMClockQualityOffset   Unsigned32
}
ptpbaseClockParentDSDomainIndex OBJECT-TYPE
    SYNTAX          PtpClockDomainType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the domain number used to create a
        logical group of PTP devices."
    ::= { ptpbaseClockParentDSEntry 1 }

ptpbaseClockParentDSClockTypeIndex OBJECT-TYPE
    SYNTAX          PtpClockType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the clock type as defined in the
        textual convention description."
    ::= { ptpbaseClockParentDSEntry 2 }

ptpbaseClockParentDSInstanceIndex OBJECT-TYPE
    SYNTAX          PtpClockInstanceType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the instance of the clock for this clock
        type in the given domain."
    ::= { ptpbaseClockParentDSEntry 3 }

ptpbaseClockParentDSParentPortIdentity OBJECT-TYPE
    SYNTAX          OCTET STRING(SIZE(1..256))
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the value of portIdentity of the port on
        the master that issues the Sync messages used in synchronizing
        this clock."
    REFERENCE
        "Section 8.2.3.2 ('parentDS.parentPortIdentity') of
         [IEEE-1588-2008]"
    ::= { ptpbaseClockParentDSEntry 4 }

that's the end of this part, more to come, stay tuned 🧚

okay bestie, the parentDS stats are next and it's giving precise πŸ’…βœ¨ Here's the rest of the MIB module, copied exactly so nothing gets lost πŸŽ€

ptpbaseClockParentDSParentStats OBJECT-TYPE
    SYNTAX          TruthValue
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the parentDS ParentStats value.

        This value indicates whether the values of ParentDSOffset
        and ParentDSClockPhChRate have been measured and are valid.
        A TRUE value shall indicate valid data."
    REFERENCE
        "Section 8.2.3.3 ('parentDS.parentStats') of [IEEE-1588-2008]"
    ::= { ptpbaseClockParentDSEntry 5 }

ptpbaseClockParentDSOffset OBJECT-TYPE
    SYNTAX          PtpClockIntervalBase2 (-128..127)
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the parentDS
        ParentOffsetScaledLogVariance value.

        This value is the variance of the parent clock's phase as
        measured by the local clock."
    REFERENCE
        "Section 8.2.3.4
        ('parentDS.observedParentOffsetScaledLogVariance') of
        [IEEE-1588-2008]"
    ::= { ptpbaseClockParentDSEntry 6 }

ptpbaseClockParentDSClockPhChRate OBJECT-TYPE
    SYNTAX          Integer32
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the clock's parentDS
        ParentClockPhaseChangeRate value.

        This value is an estimate of the parent clock's phase change
        rate as measured by the slave clock."
    REFERENCE
        "Section 8.2.3.5
        ('parentDS.observedParentClockPhaseChangeRate') of
        [IEEE-1588-2008]"
    ::= { ptpbaseClockParentDSEntry 7 }

ptpbaseClockParentDSGMClockIdentity OBJECT-TYPE
    SYNTAX          PtpClockIdentity
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the parentDS grandmaster clock
        identity."
    REFERENCE
        "Section 8.2.3.6 ('parentDS.grandmasterIdentity') of
         [IEEE-1588-2008]"
    ::= { ptpbaseClockParentDSEntry 8 }

ptpbaseClockParentDSGMClockPriority1 OBJECT-TYPE
    SYNTAX          Unsigned32
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the parentDS grandmaster clock
        priority1."
    REFERENCE
        "Section 8.2.3.8 ('parentDS.grandmasterPriority1') of
         [IEEE-1588-2008]"
    ::= { ptpbaseClockParentDSEntry 9 }

ptpbaseClockParentDSGMClockPriority2 OBJECT-TYPE
    SYNTAX          Unsigned32
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the parentDS grandmaster clock
        priority2."
    REFERENCE
        "Section 8.2.3.9 ('parentDS.grandmasterPriority2') of
         [IEEE-1588-2008]"
    ::= { ptpbaseClockParentDSEntry 10 }

ptpbaseClockParentDSGMClockQualityClass OBJECT-TYPE
    SYNTAX          PtpClockQualityClassType
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the parentDS grandmaster clock
        quality class."
    REFERENCE
        "Section 8.2.3.7 ('parentDS.grandmasterClockQuality') of
         [IEEE-1588-2008]"
    ::= { ptpbaseClockParentDSEntry 11 }

ptpbaseClockParentDSGMClockQualityAccuracy OBJECT-TYPE
    SYNTAX          PtpClockQualityAccuracyType
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the parentDS grandmaster clock
        quality accuracy."
    REFERENCE
        "Section 8.2.3.7 ('parentDS.grandmasterClockQuality') of
         [IEEE-1588-2008]"
    ::= { ptpbaseClockParentDSEntry 12 }

ptpbaseClockParentDSGMClockQualityOffset OBJECT-TYPE
    SYNTAX          Unsigned32
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the parentDS grandmaster clock
        quality offset."
    REFERENCE
        "Section 8.2.3.7 ('parentDS.grandmasterClockQuality') of
         [IEEE-1588-2008]"
    ::= { ptpbaseClockParentDSEntry 13 }

ptpbaseClockDefaultDSTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF PtpbaseClockDefaultDSEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "Table of information about the PTP clock defaultDS for
        all domains."
    ::= { ptpbaseMIBClockInfo 3 }

ptpbaseClockDefaultDSEntry OBJECT-TYPE
    SYNTAX          PtpbaseClockDefaultDSEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "A table entry that contains information about a single
        PTP clock defaultDS for a domain."
    INDEX           {
                        ptpbaseClockDefaultDSDomainIndex,
                        ptpbaseClockDefaultDSClockTypeIndex,
                        ptpbaseClockDefaultDSInstanceIndex
                    }
    ::= { ptpbaseClockDefaultDSTable 1 }

PtpbaseClockDefaultDSEntry ::= SEQUENCE {

        ptpbaseClockDefaultDSDomainIndex     PtpClockDomainType,
        ptpbaseClockDefaultDSClockTypeIndex  PtpClockType,
        ptpbaseClockDefaultDSInstanceIndex   PtpClockInstanceType,
        ptpbaseClockDefaultDSTwoStepFlag     TruthValue,
        ptpbaseClockDefaultDSClockIdentity   PtpClockIdentity,
        ptpbaseClockDefaultDSPriority1       Unsigned32,
        ptpbaseClockDefaultDSPriority2       Unsigned32,
        ptpbaseClockDefaultDSSlaveOnly       TruthValue,
        ptpbaseClockDefaultDSQualityClass    PtpClockQualityClassType,
        ptpbaseClockDefaultDSQualityAccuracy
PtpClockQualityAccuracyType,
        ptpbaseClockDefaultDSQualityOffset   Integer32
}

ptpbaseClockDefaultDSDomainIndex OBJECT-TYPE
    SYNTAX          PtpClockDomainType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the domain number used to create a
        logical group of PTP devices."
    ::= { ptpbaseClockDefaultDSEntry 1 }

ptpbaseClockDefaultDSClockTypeIndex OBJECT-TYPE
    SYNTAX          PtpClockType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the clock type as defined in the
        textual convention description."
    ::= { ptpbaseClockDefaultDSEntry 2 }

ptpbaseClockDefaultDSInstanceIndex OBJECT-TYPE
    SYNTAX          PtpClockInstanceType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the instance of the clock for this clock
        type in the given domain."
    ::= { ptpbaseClockDefaultDSEntry 3 }

ptpbaseClockDefaultDSTwoStepFlag OBJECT-TYPE
    SYNTAX          TruthValue
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies whether the two-step process is used."
    ::= { ptpbaseClockDefaultDSEntry 4 }

ptpbaseClockDefaultDSClockIdentity OBJECT-TYPE
    SYNTAX          PtpClockIdentity
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the defaultDS clockIdentity member."
    ::= { ptpbaseClockDefaultDSEntry 5 }

ptpbaseClockDefaultDSPriority1 OBJECT-TYPE
    SYNTAX          Unsigned32
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the defaultDS priority1 member."
    ::= { ptpbaseClockDefaultDSEntry 6 }

ptpbaseClockDefaultDSPriority2 OBJECT-TYPE
    SYNTAX          Unsigned32
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the defaultDS priority2 member."
    ::= { ptpbaseClockDefaultDSEntry 7 }

ptpbaseClockDefaultDSSlaveOnly OBJECT-TYPE
    SYNTAX          TruthValue
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies whether the SlaveOnly flag is set."
    ::= { ptpbaseClockDefaultDSEntry 8 }

ptpbaseClockDefaultDSQualityClass OBJECT-TYPE
    SYNTAX          PtpClockQualityClassType
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the defaultDS Quality Class."
    ::= { ptpbaseClockDefaultDSEntry 9 }

ptpbaseClockDefaultDSQualityAccuracy OBJECT-TYPE
    SYNTAX          PtpClockQualityAccuracyType
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the defaultDS Quality Accuracy."
    ::= { ptpbaseClockDefaultDSEntry 10 }

ptpbaseClockDefaultDSQualityOffset OBJECT-TYPE
    SYNTAX          Integer32
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the defaultDS Quality offset."
    ::= { ptpbaseClockDefaultDSEntry 11 }

ptpbaseClockRunningTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF PtpbaseClockRunningEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "Table of information about the PTP clock running datasets for
        all domains."
    ::= { ptpbaseMIBClockInfo 4 }

ptpbaseClockRunningEntry OBJECT-TYPE
    SYNTAX          PtpbaseClockRunningEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "A table entry that contains information about a single
        PTP clock running dataset for a domain."
    INDEX           {
                        ptpbaseClockRunningDomainIndex,
                        ptpbaseClockRunningClockTypeIndex,
                        ptpbaseClockRunningInstanceIndex
                    }
    ::= { ptpbaseClockRunningTable 1 }

PtpbaseClockRunningEntry ::= SEQUENCE {
        ptpbaseClockRunningDomainIndex     PtpClockDomainType,
        ptpbaseClockRunningClockTypeIndex  PtpClockType,
        ptpbaseClockRunningInstanceIndex   PtpClockInstanceType,
        ptpbaseClockRunningState           PtpClockStateType,
        ptpbaseClockRunningPacketsSent     Counter64,
        ptpbaseClockRunningPacketsReceived Counter64
}
ptpbaseClockRunningDomainIndex OBJECT-TYPE
    SYNTAX          PtpClockDomainType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the domain number used to create a
        logical group of PTP devices."
    ::= { ptpbaseClockRunningEntry 1 }

ptpbaseClockRunningClockTypeIndex OBJECT-TYPE
    SYNTAX          PtpClockType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the clock type as defined in the
        textual convention description."
    ::= { ptpbaseClockRunningEntry 2 }

ptpbaseClockRunningInstanceIndex OBJECT-TYPE
    SYNTAX          PtpClockInstanceType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the instance of the clock for this clock
        type in the given domain."
    ::= { ptpbaseClockRunningEntry 3 }

ptpbaseClockRunningState OBJECT-TYPE
    SYNTAX          PtpClockStateType
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the clock state returned by a PTP
        engine."
    ::= { ptpbaseClockRunningEntry 4 }

ptpbaseClockRunningPacketsSent OBJECT-TYPE
    SYNTAX          Counter64
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the total number of all unicast and
        multicast packets that have been sent out for this clock in this
        domain for this type.  These counters are discontinuous."
    ::= { ptpbaseClockRunningEntry 5 }

ptpbaseClockRunningPacketsReceived OBJECT-TYPE
    SYNTAX          Counter64
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the total number of all unicast and
        multicast packets that have been received for this clock in this
        domain for this type.  These counters are discontinuous."
    ::= { ptpbaseClockRunningEntry 6 }

okay so this part is all about the timePropertiesDS table, which holds the clock's time properties for every domain πŸ’… the entry is keyed by domain, clock type, and instance, so each row is one clock's timePropertiesDS πŸ¦‹

ptpbaseClockTimePropertiesDSTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF PtpbaseClockTimePropertiesDSEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "Table of information about the PTP clock timePropertiesDS
        for all domains."
    ::= { ptpbaseMIBClockInfo 5 }

ptpbaseClockTimePropertiesDSEntry OBJECT-TYPE
    SYNTAX          PtpbaseClockTimePropertiesDSEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "A table entry that contains information about a single
        PTP clock timePropertiesDS for a domain."
    REFERENCE
        "Section 8.2.4 ('timePropertiesDS data set member
        specifications') of [IEEE-1588-2008]"
    INDEX           {
                        ptpbaseClockTimePropertiesDSDomainIndex,
                        ptpbaseClockTimePropertiesDSClockTypeIndex,
                        ptpbaseClockTimePropertiesDSInstanceIndex
                    }
    ::= { ptpbaseClockTimePropertiesDSTable 1 }

PtpbaseClockTimePropertiesDSEntry ::= SEQUENCE {
  ptpbaseClockTimePropertiesDSDomainIndex           PtpClockDomainType,
  ptpbaseClockTimePropertiesDSClockTypeIndex        PtpClockType,
  ptpbaseClockTimePropertiesDSInstanceIndex
PtpClockInstanceType,
  ptpbaseClockTimePropertiesDSCurrentUTCOffsetValid TruthValue,
  ptpbaseClockTimePropertiesDSCurrentUTCOffset      Integer32,
  ptpbaseClockTimePropertiesDSLeap59                TruthValue,
  ptpbaseClockTimePropertiesDSLeap61                TruthValue,
  ptpbaseClockTimePropertiesDSTimeTraceable         TruthValue,
  ptpbaseClockTimePropertiesDSFreqTraceable         TruthValue,
  ptpbaseClockTimePropertiesDSPTPTimescale          TruthValue,
  ptpbaseClockTimePropertiesDSSource
PtpClockTimeSourceType
}

the index columns come first, then the ten timePropertiesDS fields, and the last one is the time source πŸŽ€

ptpbaseClockTimePropertiesDSDomainIndex OBJECT-TYPE
    SYNTAX          PtpClockDomainType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the domain number used to create a
        logical group of PTP devices."
    ::= { ptpbaseClockTimePropertiesDSEntry 1 }

ptpbaseClockTimePropertiesDSClockTypeIndex OBJECT-TYPE
    SYNTAX          PtpClockType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the clock type as defined in the
        textual convention description."
    ::= { ptpbaseClockTimePropertiesDSEntry 2 }

ptpbaseClockTimePropertiesDSInstanceIndex OBJECT-TYPE
    SYNTAX          PtpClockInstanceType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the instance of the clock for this clock
        type in the given domain."
    ::= { ptpbaseClockTimePropertiesDSEntry 3 }

ptpbaseClockTimePropertiesDSCurrentUTCOffsetValid OBJECT-TYPE
    SYNTAX          TruthValue
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the timePropertiesDS value of
        whether the current UTC offset is valid."
    REFERENCE
        "Section 8.2.4.2 ('timePropertiesDS.currentUtcOffset') of
        [IEEE-1588-2008]"
    ::= { ptpbaseClockTimePropertiesDSEntry 4 }

ptpbaseClockTimePropertiesDSCurrentUTCOffset OBJECT-TYPE
    SYNTAX          Integer32
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the timePropertiesDS value of
        the current UTC offset.

        In PTP systems whose epoch is the PTP epoch, the value of
        timePropertiesDS.currentUtcOffset is the offset
        between TAI and UTC; otherwise, the value has no meaning.  The
        value shall be in units of seconds."
    REFERENCE
        "Section 8.2.4.3 ('timePropertiesDS.currentUtcOffsetValid') of
        [IEEE-1588-2008]"
    ::= { ptpbaseClockTimePropertiesDSEntry 5 }

ptpbaseClockTimePropertiesDSLeap59 OBJECT-TYPE
    SYNTAX          TruthValue
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the Leap59 value in the clock
        currentDS."
    REFERENCE
        "Section 8.2.4.4 ('timePropertiesDS.leap59')
        of [IEEE-1588-2008]"
    ::= { ptpbaseClockTimePropertiesDSEntry 6 }

ptpbaseClockTimePropertiesDSLeap61 OBJECT-TYPE
    SYNTAX          TruthValue
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the Leap61 value in the clock
        currentDS."
    REFERENCE
        "Section 8.2.4.5 ('timePropertiesDS.leap61')
        of [IEEE-1588-2008]"
 ::= { ptpbaseClockTimePropertiesDSEntry 7 }
the UTC offset object has a little twist πŸ‘€ it only means something in PTP systems whose epoch is the PTP epoch, otherwise the value has no meaning at all, and it's always measured in seconds ⏱️
ptpbaseClockTimePropertiesDSTimeTraceable OBJECT-TYPE
    SYNTAX          TruthValue
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the Time Traceable value in the clock
        currentDS."
    REFERENCE
        "Section 8.2.4.6 ('timePropertiesDS.timeTraceable') of
        [IEEE-1588-2008]"
    ::= { ptpbaseClockTimePropertiesDSEntry 8 }

ptpbaseClockTimePropertiesDSFreqTraceable OBJECT-TYPE
    SYNTAX          TruthValue
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the Frequency Traceable value in the
        clock currentDS."
    REFERENCE
        "Section 8.2.4.7 ('timePropertiesDS.frequencyTraceable') of
        [IEEE-1588-2008]"
    ::= { ptpbaseClockTimePropertiesDSEntry 9 }

ptpbaseClockTimePropertiesDSPTPTimescale OBJECT-TYPE
    SYNTAX          TruthValue
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the PTP Timescale value in the clock
        currentDS."
    REFERENCE
        "Section 8.2.4.8 ('timePropertiesDS.ptpTimescale') of
        [IEEE-1588-2008]"
    ::= { ptpbaseClockTimePropertiesDSEntry 10 }

ptpbaseClockTimePropertiesDSSource OBJECT-TYPE
    SYNTAX          PtpClockTimeSourceType
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the Timesource value in the clock
        currentDS."
    REFERENCE
        "Section 8.2.4.9 ('timePropertiesDS.timeSource') of
        [IEEE-1588-2008]"
    ::= { ptpbaseClockTimePropertiesDSEntry 11 }

next up is the transparent clock defaultDS table 🧚 it's the same vibe: one row per domain and instance, and it's got its own little set of counters and flags πŸ’–

ptpbaseClockTransDefaultDSTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF PtpbaseClockTransDefaultDSEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "Table of information about the PTP transparentClockDefaultDS
        for all domains."
    ::= { ptpbaseMIBClockInfo 6 }

ptpbaseClockTransDefaultDSEntry OBJECT-TYPE
    SYNTAX          PtpbaseClockTransDefaultDSEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "A table entry that contains information about a single
        PTP transparent clock defaultDS for a domain."
    REFERENCE
        "Section 8.3.2 ('transparentClockDefaultDS data set member
        specifications') of [IEEE-1588-2008]"
    INDEX           {
                        ptpbaseClockTransDefaultDSDomainIndex,
                        ptpbaseClockTransDefaultDSInstanceIndex
                    }
    ::= { ptpbaseClockTransDefaultDSTable 1 }

PtpbaseClockTransDefaultDSEntry ::= SEQUENCE {
        ptpbaseClockTransDefaultDSDomainIndex   PtpClockDomainType,
        ptpbaseClockTransDefaultDSInstanceIndex PtpClockInstanceType,
        ptpbaseClockTransDefaultDSClockIdentity PtpClockIdentity,
        ptpbaseClockTransDefaultDSNumOfPorts    Counter32,
        ptpbaseClockTransDefaultDSDelay         PtpClockMechanismType,
        ptpbaseClockTransDefaultDSPrimaryDomain PtpClockDomainType
}

this one has no clock type index, just domain and instance, so keep that in mind when you're reading the rows 🌸

ptpbaseClockTransDefaultDSDomainIndex OBJECT-TYPE
    SYNTAX          PtpClockDomainType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the domain number used to create a
        logical group of PTP devices."
    ::= { ptpbaseClockTransDefaultDSEntry 1 }

ptpbaseClockTransDefaultDSInstanceIndex OBJECT-TYPE
    SYNTAX          PtpClockInstanceType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the instance of the clock for this clock
        type in the given domain."
    ::= { ptpbaseClockTransDefaultDSEntry 2 }

ptpbaseClockTransDefaultDSClockIdentity OBJECT-TYPE
    SYNTAX          PtpClockIdentity
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the value of the clockIdentity attribute
        of the local clock."
    REFERENCE
       "Section 8.3.2.2.1 ('transparentClockDefaultDS.clockIdentity')
       of [IEEE-1588-2008]"
    ::= { ptpbaseClockTransDefaultDSEntry 3 }

ptpbaseClockTransDefaultDSNumOfPorts OBJECT-TYPE
    SYNTAX          Counter32
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the number of PTP ports of the device.
         These counters are discontinuous."
    REFERENCE
        "Section 8.3.2.2.2 ('transparentClockDefaultDS.numberPorts')
        of [IEEE-1588-2008]"
    ::= { ptpbaseClockTransDefaultDSEntry 4 }

ptpbaseClockTransDefaultDSDelay OBJECT-TYPE
    SYNTAX          PtpClockMechanismType
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object, if the transparent clock is an end-to-end
        transparent clock, has the value of e2e; if the
        transparent clock is a peer-to-peer transparent clock, the
        value is p2p."
    REFERENCE
        "Section 8.3.2.3.1 ('transparentClockDefaultDS.delayMechanism')
        of [IEEE-1588-2008]"
    ::= { ptpbaseClockTransDefaultDSEntry 5 }

ptpbaseClockTransDefaultDSPrimaryDomain OBJECT-TYPE
    SYNTAX          PtpClockDomainType
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the value of the primary syntonization
        domain.  The initialization value is 0."
    REFERENCE
        "Section 8.3.2.3.2 ('transparentClockDefaultDS.primaryDomain')
        of [IEEE-1588-2008]"
    ::= { ptpbaseClockTransDefaultDSEntry 6 }

the delay object is the e2e-or-p2p one, and the primary domain starts at 0 ✨ no notes, just vibes πŸ’…

ptpbaseClockPortTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF PtpbaseClockPortEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "Table of information about the clock ports for a particular
        domain."
    ::= { ptpbaseMIBClockInfo 7 }

ptpbaseClockPortEntry OBJECT-TYPE
    SYNTAX          PtpbaseClockPortEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "A table entry that contains information about a single
        clock port."
    INDEX           {
                        ptpbaseClockPortDomainIndex,
                        ptpbaseClockPortClockTypeIndex,
                        ptpbaseClockPortClockInstanceIndex,
                        ptpbaseClockPortTablePortNumberIndex
                    }
    ::= { ptpbaseClockPortTable 1 }

PtpbaseClockPortEntry ::= SEQUENCE {
        ptpbaseClockPortDomainIndex            PtpClockDomainType,
        ptpbaseClockPortClockTypeIndex         PtpClockType,
        ptpbaseClockPortClockInstanceIndex     PtpClockInstanceType,
        ptpbaseClockPortTablePortNumberIndex   PtpClockPortNumber,
        ptpbaseClockPortName                   DisplayString,
        ptpbaseClockPortRole                   PtpClockRoleType,
        ptpbaseClockPortSyncTwoStep            TruthValue,
        ptpbaseClockPortCurrentPeerAddressType AutonomousType,
        ptpbaseClockPortCurrentPeerAddress
PtpClockPortTransportTypeAddress,
        ptpbaseClockPortNumOfAssociatedPorts   Gauge32
}

ptpbaseClockPortDomainIndex OBJECT-TYPE
    SYNTAX          PtpClockDomainType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the domain number used to create a
        logical group of PTP devices."
    ::= { ptpbaseClockPortEntry 1 }

the port table gets its own index set: domain, clock type, clock instance, and port number, so it's a lot more specific πŸŽ€πŸŒˆ

okay bestie, the port tables are next and they're so detailed πŸŽ€βœ¨

ptpbaseClockPortClockTypeIndex OBJECT-TYPE
    SYNTAX          PtpClockType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the clock type as defined in the
        textual convention description."
    ::= { ptpbaseClockPortEntry 2 }

ptpbaseClockPortClockInstanceIndex OBJECT-TYPE
    SYNTAX          PtpClockInstanceType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the instance of the clock for this clock
        type in the given domain."
    ::= { ptpbaseClockPortEntry 3 }

ptpbaseClockPortTablePortNumberIndex OBJECT-TYPE
    SYNTAX          PtpClockPortNumber
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the PTP portNumber for this port."
    ::= { ptpbaseClockPortEntry 4 }

ptpbaseClockPortName OBJECT-TYPE
    SYNTAX          DisplayString (SIZE  (1..64))
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the PTP clock port name configured on the
        node."
    ::= { ptpbaseClockPortEntry 5 }

ptpbaseClockPortRole OBJECT-TYPE
    SYNTAX          PtpClockRoleType
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object describes the current role (slave/master) of the
        port."
    ::= { ptpbaseClockPortEntry 6 }

ptpbaseClockPortSyncTwoStep OBJECT-TYPE
    SYNTAX          TruthValue
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies that two-step clock operation between
        the PTP master and slave device is enabled."
    ::= { ptpbaseClockPortEntry 7 }

ptpbaseClockPortCurrentPeerAddressType OBJECT-TYPE
    SYNTAX          AutonomousType
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the current peer's network address type
         used for PTP communication."
    ::= { ptpbaseClockPortEntry 8 }

ptpbaseClockPortCurrentPeerAddress OBJECT-TYPE
    SYNTAX          PtpClockPortTransportTypeAddress
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the current peer's network address used
        for PTP communication."
    ::= { ptpbaseClockPortEntry 9 }

ptpbaseClockPortNumOfAssociatedPorts OBJECT-TYPE
    SYNTAX          Gauge32
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the following:
        For a master port - the number of PTP slave sessions (peers)
        associated with this PTP port.
        For a slave port - the number of masters available to this slave
        port (might or might not be peered)."
    ::= { ptpbaseClockPortEntry 10 }

ptpbaseClockPortDSTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF PtpbaseClockPortDSEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "Table of information about the clock's portDS for a
        particular domain."
    ::= { ptpbaseMIBClockInfo 8 }

ptpbaseClockPortDSEntry OBJECT-TYPE
    SYNTAX          PtpbaseClockPortDSEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "A table entry that contains portDS information for
        a single clock port."
    INDEX           {
                        ptpbaseClockPortDSDomainIndex,
                        ptpbaseClockPortDSClockTypeIndex,
                        ptpbaseClockPortDSClockInstanceIndex,
                        ptpbaseClockPortDSPortNumberIndex
                    }
    ::= { ptpbaseClockPortDSTable 1 }

PtpbaseClockPortDSEntry ::= SEQUENCE {
        ptpbaseClockPortDSDomainIndex          PtpClockDomainType,
        ptpbaseClockPortDSClockTypeIndex       PtpClockType,
        ptpbaseClockPortDSClockInstanceIndex   PtpClockInstanceType,
        ptpbaseClockPortDSPortNumberIndex      PtpClockPortNumber,
        ptpbaseClockPortDSName                 DisplayString,
        ptpbaseClockPortDSPortIdentity         OCTET STRING,
        ptpbaseClockPortDSlogAnnouncementInterval PtpClockIntervalBase2,
        ptpbaseClockPortDSAnnounceRctTimeout   Integer32,
        ptpbaseClockPortDSlogSyncInterval      PtpClockIntervalBase2,
        ptpbaseClockPortDSMinDelayReqInterval  Integer32,
        ptpbaseClockPortDSPeerDelayReqInterval Integer32,
        ptpbaseClockPortDSDelayMech            PtpClockMechanismType,
        ptpbaseClockPortDSPeerMeanPathDelay    PtpClockTimeInterval,
        ptpbaseClockPortDSGrantDuration        Unsigned32,
        ptpbaseClockPortDSPTPVersion           Unsigned32
}

ptpbaseClockPortDSDomainIndex OBJECT-TYPE
    SYNTAX          PtpClockDomainType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the domain number used to create a
        logical group of PTP devices."
    ::= { ptpbaseClockPortDSEntry 1 }

ptpbaseClockPortDSClockTypeIndex OBJECT-TYPE
    SYNTAX          PtpClockType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the clock type as defined in the
        textual convention description."
    ::= { ptpbaseClockPortDSEntry 2 }

ptpbaseClockPortDSClockInstanceIndex OBJECT-TYPE
    SYNTAX          PtpClockInstanceType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the instance of the clock for this clock
        type in the given domain."
    ::= { ptpbaseClockPortDSEntry 3 }

ptpbaseClockPortDSPortNumberIndex OBJECT-TYPE
    SYNTAX          PtpClockPortNumber
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the PTP portNumber associated with this
        PTP port."
    ::= { ptpbaseClockPortDSEntry 4 }

ptpbaseClockPortDSName OBJECT-TYPE
    SYNTAX          DisplayString (SIZE  (1..64))
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the PTP clock portDS name."
    ::= { ptpbaseClockPortDSEntry 5 }

ptpbaseClockPortDSPortIdentity OBJECT-TYPE
    SYNTAX          OCTET STRING(SIZE(1..256))
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the PTP clock port Identity."
    ::= { ptpbaseClockPortDSEntry 6 }

ptpbaseClockPortDSlogAnnouncementInterval OBJECT-TYPE
    SYNTAX          PtpClockIntervalBase2
    UNITS           "Time Interval"
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the Announce message transmission
        interval associated with this clock port."
    ::= { ptpbaseClockPortDSEntry 7 }

ptpbaseClockPortDSAnnounceRctTimeout OBJECT-TYPE
    SYNTAX          Integer32
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the Announce receipt timeout associated
        with this clock port."
    ::= { ptpbaseClockPortDSEntry 8 }

ptpbaseClockPortDSlogSyncInterval OBJECT-TYPE
    SYNTAX          PtpClockIntervalBase2
    UNITS           "Time Interval"
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the Sync message transmission interval."
    ::= { ptpbaseClockPortDSEntry 9 }

ptpbaseClockPortDSMinDelayReqInterval OBJECT-TYPE
    SYNTAX          Integer32
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the Delay_Req message transmission
        interval."
    ::= { ptpbaseClockPortDSEntry 10 }

ptpbaseClockPortDSPeerDelayReqInterval OBJECT-TYPE
    SYNTAX          Integer32
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the Pdelay_Req message transmission
        interval."
    ::= { ptpbaseClockPortDSEntry 11 }

ptpbaseClockPortDSDelayMech OBJECT-TYPE
    SYNTAX          PtpClockMechanismType
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the delay mechanism used.  If the clock
        is an end-to-end clock, the value is e2e; if the
        clock is a peer to-peer clock, the value is p2p."
    ::= { ptpbaseClockPortDSEntry 12 }

ptpbaseClockPortDSPeerMeanPathDelay OBJECT-TYPE
    SYNTAX          PtpClockTimeInterval
    UNITS           "Time Interval"
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the peer meanPathDelay."
    ::= { ptpbaseClockPortDSEntry 13 }

ptpbaseClockPortDSGrantDuration OBJECT-TYPE
    SYNTAX          Unsigned32
    UNITS           "seconds"
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the grant duration allocated by the
        master."
    ::= { ptpbaseClockPortDSEntry 14 }

ptpbaseClockPortDSPTPVersion OBJECT-TYPE
    SYNTAX          Unsigned32
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the PTP version being used."
    ::= { ptpbaseClockPortDSEntry 15 }

ptpbaseClockPortRunningTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF PtpbaseClockPortRunningEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "Table of information about the clock ports running datasets for
        a particular domain."
    ::= { ptpbaseMIBClockInfo 9 }

ptpbaseClockPortRunningEntry OBJECT-TYPE
    SYNTAX          PtpbaseClockPortRunningEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "A table entry that contains running dataset information
        about a single clock port."

    INDEX           {
                        ptpbaseClockPortRunningDomainIndex,
                        ptpbaseClockPortRunningClockTypeIndex,
                        ptpbaseClockPortRunningClockInstanceIndex,
                        ptpbaseClockPortRunningPortNumberIndex
                    }
    ::= { ptpbaseClockPortRunningTable 1 }

PtpbaseClockPortRunningEntry ::= SEQUENCE {
        ptpbaseClockPortRunningDomainIndex        PtpClockDomainType,
        ptpbaseClockPortRunningClockTypeIndex     PtpClockType,
        ptpbaseClockPortRunningClockInstanceIndex PtpClockInstanceType,
        ptpbaseClockPortRunningPortNumberIndex    PtpClockPortNumber,
        ptpbaseClockPortRunningName               DisplayString,
        ptpbaseClockPortRunningState              PtpClockPortState,
        ptpbaseClockPortRunningRole               PtpClockRoleType,
        ptpbaseClockPortRunningInterfaceIndex     InterfaceIndexOrZero,
        ptpbaseClockPortRunningTransport          AutonomousType,
        ptpbaseClockPortRunningEncapsulationType  AutonomousType,
        ptpbaseClockPortRunningTxMode             PtpClockTxModeType,
        ptpbaseClockPortRunningRxMode             PtpClockTxModeType,
        ptpbaseClockPortRunningPacketsReceived    Counter64,
        ptpbaseClockPortRunningPacketsSent        Counter64
}

ptpbaseClockPortRunningDomainIndex OBJECT-TYPE
    SYNTAX          PtpClockDomainType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the domain number used to create a
        logical group of PTP devices."
    ::= { ptpbaseClockPortRunningEntry 1 }

ptpbaseClockPortRunningClockTypeIndex OBJECT-TYPE
    SYNTAX          PtpClockType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the clock type as defined in the
        textual convention description."
    ::= { ptpbaseClockPortRunningEntry 2 }

okay bestie, picking up right where we left off πŸ¦‹βœ¨ this chunk is all about the running port info and the transparent clock port tables, and honestly the way these MIB objects are organized is giving main character energy πŸ’…

ptpbaseClockPortRunningClockInstanceIndex OBJECT-TYPE
    SYNTAX          PtpClockInstanceType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the instance of the clock for this clock
        type in the given domain."
    ::= { ptpbaseClockPortRunningEntry 3 }

ptpbaseClockPortRunningPortNumberIndex OBJECT-TYPE
    SYNTAX          PtpClockPortNumber
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the PTP portNumber associated with this
        clock port."
    ::= { ptpbaseClockPortRunningEntry 4 }

ptpbaseClockPortRunningName OBJECT-TYPE
    SYNTAX          DisplayString (SIZE  (1..64))
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the PTP clock port name."
    ::= { ptpbaseClockPortRunningEntry 5 }

ptpbaseClockPortRunningState OBJECT-TYPE
    SYNTAX          PtpClockPortState
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the port state returned by PTP engine:

        initializing
        faulty
        disabled
        listening
        preMaster
        master
        passive
        uncalibrated
        slave        "
    ::= { ptpbaseClockPortRunningEntry 6 }

ptpbaseClockPortRunningRole OBJECT-TYPE
    SYNTAX          PtpClockRoleType
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the Clock Role."
    ::= { ptpbaseClockPortRunningEntry 7 }

ptpbaseClockPortRunningInterfaceIndex OBJECT-TYPE
    SYNTAX          InterfaceIndexOrZero
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the interface on the node being used by
        the PTP clock for PTP communication."
    ::= { ptpbaseClockPortRunningEntry 8 }

ptpbaseClockPortRunningTransport OBJECT-TYPE
    SYNTAX          AutonomousType
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the transport protocol being used for PTP
        communication (the mapping used)."
    ::= { ptpbaseClockPortRunningEntry 9 }

ptpbaseClockPortRunningEncapsulationType OBJECT-TYPE
    SYNTAX          AutonomousType
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the type of encapsulation if the
        interface is adding extra layers (e.g., VLAN or Pseudowire
        encapsulation) for the PTP messages."
    ::= { ptpbaseClockPortRunningEntry 10 }

ptpbaseClockPortRunningTxMode OBJECT-TYPE
    SYNTAX          PtpClockTxModeType
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the clock transmission mode as:
        unicast:       Using unicast communication channel
        multicast:     Using multicast communication channel
        multicast-mix: Using multicast-unicast communication channel"
    ::= { ptpbaseClockPortRunningEntry 11 }

ptpbaseClockPortRunningRxMode OBJECT-TYPE
    SYNTAX          PtpClockTxModeType
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the clock receive mode as:
        unicast:       Using unicast communication channel
        multicast:     Using multicast communication channel
        multicast-mix: Using multicast-unicast communication channel"

    ::= { ptpbaseClockPortRunningEntry 12 }

ptpbaseClockPortRunningPacketsReceived OBJECT-TYPE
    SYNTAX          Counter64
    UNITS           "packets"
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the packets received on the clock port
        (cumulative).  These counters are discontinuous."
    ::= { ptpbaseClockPortRunningEntry 13 }

ptpbaseClockPortRunningPacketsSent OBJECT-TYPE
    SYNTAX          Counter64
    UNITS           "packets"
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the packets sent on the clock port
        (cumulative).  These counters are discontinuous."
    ::= { ptpbaseClockPortRunningEntry 14 }

ptpbaseClockPortTransDSTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF PtpbaseClockPortTransDSEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "Table of information about the transparentClockPortDS
        for a particular domain."
    ::= { ptpbaseMIBClockInfo 10 }

ptpbaseClockPortTransDSEntry OBJECT-TYPE
    SYNTAX          PtpbaseClockPortTransDSEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "A table entry that contains clock port transparent
        dataset information about a single clock port."
    INDEX           {
                        ptpbaseClockPortTransDSDomainIndex,
                        ptpbaseClockPortTransDSInstanceIndex,
                        ptpbaseClockPortTransDSPortNumberIndex
                    }
    ::= { ptpbaseClockPortTransDSTable 1 }

PtpbaseClockPortTransDSEntry ::= SEQUENCE {
        ptpbaseClockPortTransDSDomainIndex        PtpClockDomainType,
        ptpbaseClockPortTransDSInstanceIndex      PtpClockInstanceType,
        ptpbaseClockPortTransDSPortNumberIndex    PtpClockPortNumber,
        ptpbaseClockPortTransDSPortIdentity       PtpClockIdentity,
        ptpbaseClockPortTransDSlogMinPdelayReqInt PtpClockIntervalBase2,
        ptpbaseClockPortTransDSFaultyFlag         TruthValue,
        ptpbaseClockPortTransDSPeerMeanPathDelay  PtpClockTimeInterval
}

ptpbaseClockPortTransDSDomainIndex OBJECT-TYPE
    SYNTAX          PtpClockDomainType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the domain number used to create a
        logical group of PTP devices."
    ::= { ptpbaseClockPortTransDSEntry 1 }

ptpbaseClockPortTransDSInstanceIndex OBJECT-TYPE
    SYNTAX          PtpClockInstanceType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the instance of the clock for this clock
        type in the given domain."
    ::= { ptpbaseClockPortTransDSEntry 2 }

ptpbaseClockPortTransDSPortNumberIndex OBJECT-TYPE
    SYNTAX          PtpClockPortNumber
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the PTP portNumber associated with this
        port."
    REFERENCE       "Section 7.5.2 ('Port Identity')
                    of [IEEE-1588-2008]"
    ::= { ptpbaseClockPortTransDSEntry 3 }

ptpbaseClockPortTransDSPortIdentity OBJECT-TYPE
    SYNTAX          PtpClockIdentity
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the value of the PortIdentity
        attribute of the local port."
    REFERENCE
        "Section 8.3.3.2.1 ('transparentClockPortDS.portIdentity') of
        [IEEE-1588-2008]"
    ::= { ptpbaseClockPortTransDSEntry 4 }

ptpbaseClockPortTransDSlogMinPdelayReqInt OBJECT-TYPE
    SYNTAX          PtpClockIntervalBase2
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the value of the logarithm to the
        base 2 of the minPdelayReqInterval."
    REFERENCE
       "Section 8.3.3.3.1
       ('transparentClockPortDS.logMinPdelayReqInterval') of
       [IEEE-1588-2008]"
    ::= { ptpbaseClockPortTransDSEntry 5 }

ptpbaseClockPortTransDSFaultyFlag OBJECT-TYPE
    SYNTAX          TruthValue
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the value TRUE if the port is faulty
        and FALSE if the port is operating normally."
    REFERENCE
        "Section 8.3.3.3.2 ('transparentClockPortDS.faultyFlag') of
        [IEEE-1588-2008]"
    ::= { ptpbaseClockPortTransDSEntry 6 }

ptpbaseClockPortTransDSPeerMeanPathDelay OBJECT-TYPE
    SYNTAX          PtpClockTimeInterval
    UNITS           "Time Interval"
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies, if the delayMechanism used is p2p, the
        value of the estimate of the current one-way propagation delay,
        i.e., <meanPathDelay> on the link attached to this port,
        computed using the peer delay mechanism.  If the value of the
        delayMechanism used is e2e, then the value will be zero."
    REFERENCE
        "Section 8.3.3.3.3 ('transparentClockPortDS.peerMeanPathDelay')
        of [IEEE-1588-2008]"
    ::= { ptpbaseClockPortTransDSEntry 7 }

ptpbaseClockPortAssociateTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF PtpbaseClockPortAssociateEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "Table of information about a given port's associated ports.

        For a master port: multiple slave ports that have established
                           sessions with the current master port.
        For a slave port:  the list of masters available for a given
                           slave port.

        Session information (packets, errors) to be displayed based on
        availability and scenario."
    ::= { ptpbaseMIBClockInfo 11 }


--
-- Well Known transport types for PTP communication.
--
ptpbaseWellKnownTransportTypes OBJECT IDENTIFIER ::= {
ptpbaseMIBClockInfo 12 }

ptpbaseTransportTypeIPversion4 OBJECT-IDENTITY
    STATUS current
    DESCRIPTION
        "IP version 4"
    ::= { ptpbaseWellKnownTransportTypes 1 }

ptpbaseTransportTypeIPversion6 OBJECT-IDENTITY
   STATUS current
     DESCRIPTION
        "IP version 6"
     ::= { ptpbaseWellKnownTransportTypes 2 }

ptpbaseTransportTypeEthernet OBJECT-IDENTITY
   STATUS current
    DESCRIPTION
        "Ethernet"
     ::= { ptpbaseWellKnownTransportTypes 3 }

ptpbaseTransportTypeDeviceNET OBJECT-IDENTITY
   STATUS current
    DESCRIPTION
        "Device NET"
     ::= { ptpbaseWellKnownTransportTypes 4 }

ptpbaseTransportTypeControlNET OBJECT-IDENTITY
   STATUS current
    DESCRIPTION
        "Control NET"
     ::= { ptpbaseWellKnownTransportTypes 5 }


ptpbaseTransportTypeIEC61158 OBJECT-IDENTITY
   STATUS current
    DESCRIPTION
        "IEC61158"
     ::= { ptpbaseWellKnownTransportTypes 6 }


--
-- Well Known encapsulation types for PTP communication.
--
ptpbaseWellKnownEncapsulationTypes OBJECT IDENTIFIER ::= {
ptpbaseMIBClockInfo 13 }

ptpbaseEncapsulationTypeEthernet OBJECT-IDENTITY
    STATUS current
    DESCRIPTION
        "Ethernet Encapsulation type."
    ::= { ptpbaseWellKnownEncapsulationTypes 1 }


ptpbaseEncapsulationTypeVLAN OBJECT-IDENTITY
    STATUS current
    DESCRIPTION
        "VLAN Encapsulation type."
    ::= { ptpbaseWellKnownEncapsulationTypes 2 }

ptpbaseEncapsulationTypeUDPIPLSP OBJECT-IDENTITY
   STATUS current
     DESCRIPTION
        "UDP/IP over MPLS Encapsulation type."
     ::= { ptpbaseWellKnownEncapsulationTypes 3 }

ptpbaseEncapsulationTypePWUDPIPLSP OBJECT-IDENTITY
   STATUS current
     DESCRIPTION
        "UDP/IP Pseudowire over MPLS Encapsulation type."
     ::= { ptpbaseWellKnownEncapsulationTypes 4 }

ptpbaseEncapsulationTypePWEthernetLSP OBJECT-IDENTITY
   STATUS current
     DESCRIPTION
        "Ethernet Pseudowire over MPLS Encapsulation type."
     ::= { ptpbaseWellKnownEncapsulationTypes 5 }

okay bestie, we're now in the clock port associate table πŸ¦‹ and it's giving a whole family tree of indexes πŸ’…

A table entry is one row, and each row here describes one associated port for a given clock port 🌸

ptpbaseClockPortAssociateEntry OBJECT-TYPE
    SYNTAX          PtpbaseClockPortAssociateEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "A table entry that contains information about a single
        associated port for the given clock port."
    INDEX           {
                        ptpClockPortCurrentDomainIndex,
                        ptpClockPortCurrentClockTypeIndex,
                        ptpClockPortCurrentClockInstanceIndex,
                        ptpClockPortCurrentPortNumberIndex,
                        ptpbaseClockPortAssociatePortIndex
                    }
    ::= { ptpbaseClockPortAssociateTable 1 }

PtpbaseClockPortAssociateEntry ::= SEQUENCE {
        ptpClockPortCurrentDomainIndex           PtpClockDomainType,
        ptpClockPortCurrentClockTypeIndex        PtpClockType,
        ptpClockPortCurrentClockInstanceIndex    PtpClockInstanceType,
        ptpClockPortCurrentPortNumberIndex       PtpClockPortNumber,
        ptpbaseClockPortAssociatePortIndex       Unsigned32,
        ptpbaseClockPortAssociateAddressType     AutonomousType,
        ptpbaseClockPortAssociateAddress
PtpClockPortTransportTypeAddress,
        ptpbaseClockPortAssociatePacketsSent     Counter64,
        ptpbaseClockPortAssociatePacketsReceived Counter64,
        ptpbaseClockPortAssociateInErrors        Counter64,
        ptpbaseClockPortAssociateOutErrors       Counter64
}

ptpClockPortCurrentDomainIndex OBJECT-TYPE
    SYNTAX          PtpClockDomainType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the given port's domain number."
    ::= { ptpbaseClockPortAssociateEntry 1 }

ptpClockPortCurrentClockTypeIndex OBJECT-TYPE
    SYNTAX          PtpClockType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the given port's clock type."
    ::= { ptpbaseClockPortAssociateEntry 2 }

ptpClockPortCurrentClockInstanceIndex OBJECT-TYPE
    SYNTAX          PtpClockInstanceType
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the instance of the clock for this clock
        type in the given domain."
    ::= { ptpbaseClockPortAssociateEntry 3 }

ptpClockPortCurrentPortNumberIndex OBJECT-TYPE
    SYNTAX          PtpClockPortNumber
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the PTP portNumber for the given port."
    ::= { ptpbaseClockPortAssociateEntry 4 }

ptpbaseClockPortAssociatePortIndex OBJECT-TYPE
    SYNTAX          Unsigned32 (1..65535)
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object specifies the associated port's serial number in
        the current port's context."
    ::= { ptpbaseClockPortAssociateEntry 5 }

so the first five columns are all indexes πŸ”‘ they're the things that pick out exactly which row you're looking at, and they're all not-accessible πŸ™ˆ the domain, clock type, clock instance and PTP port number come from the current port, and the associated port's serial number is the last piece of the puzzle ✨

the rest of the columns are the actual juicy data πŸ“ the address type and address describe the peer port, and then we've got four counters for packets and errors πŸ“¦

ptpbaseClockPortAssociateAddressType OBJECT-TYPE
    SYNTAX          AutonomousType
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the peer port's network address type used
        for PTP communication.  The OCTET STRING representation of the
        OID of ptpbaseWellKnownTransportTypes will be used in the values
        contained in the OCTET STRING."
    ::= { ptpbaseClockPortAssociateEntry 6 }

ptpbaseClockPortAssociateAddress OBJECT-TYPE
    SYNTAX          PtpClockPortTransportTypeAddress
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the peer port's network address used for
        PTP communication."
    ::= { ptpbaseClockPortAssociateEntry 7 }

ptpbaseClockPortAssociatePacketsSent OBJECT-TYPE
    SYNTAX          Counter64
    UNITS           "packets"
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "The number of packets sent to this peer port from the current
        port.  These counters are discontinuous."
    ::= { ptpbaseClockPortAssociateEntry 8 }

ptpbaseClockPortAssociatePacketsReceived OBJECT-TYPE
    SYNTAX          Counter64
    UNITS           "packets"
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "The number of packets received from this peer port by the
        current port.  These counters are discontinuous."
    ::= { ptpbaseClockPortAssociateEntry 9 }

ptpbaseClockPortAssociateInErrors OBJECT-TYPE
    SYNTAX          Counter64
    UNITS           "packets"
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the input errors associated with the
        peer port.  These counters are discontinuous."
    ::= { ptpbaseClockPortAssociateEntry 10 }

ptpbaseClockPortAssociateOutErrors OBJECT-TYPE
    SYNTAX          Counter64
    UNITS           "packets"
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "This object specifies the output errors associated with the
        peer port.  These counters are discontinuous."
    ::= { ptpbaseClockPortAssociateEntry 11 }
heads up: all four counters are discontinuous 🫢 so don't assume they count forever without a break!

now for the conformance bit πŸŽ€ this part is about which groups an agent has to implement, sorted into the compliance statements πŸ‘‘

-- Conformance Information Definition

ptpbaseMIBCompliances  OBJECT IDENTIFIER
    ::= { ptpbaseMIBConformance 1 }

ptpbaseMIBGroups  OBJECT IDENTIFIER
    ::= { ptpbaseMIBConformance 2 }


ptpbaseMIBCompliancesSystemInfo MODULE-COMPLIANCE
    STATUS          current
    DESCRIPTION
        "Compliance statement for agents that provide read-only support
        for PTPBASE-MIB to provide system-level information of clock
        devices.  Such devices can only be monitored using this MIB
        module.

        The module is implemented with support for read-only.  In other
        words, only monitoring is available by implementing this
        MODULE-COMPLIANCE."
    MODULE          -- this module
    MANDATORY-GROUPS { ptpbaseMIBSystemInfoGroup }
    ::= { ptpbaseMIBCompliances 1 }

ptpbaseMIBCompliancesClockInfo MODULE-COMPLIANCE
    STATUS          current
    DESCRIPTION
        "Compliance statement for agents that provide read-only support
        for PTPBASE-MIB to provide clock-related information.
        Such devices can only be monitored using this MIB module.

        The module is implemented with support for read-only.  In other
        words, only monitoring is available by implementing this
        MODULE-COMPLIANCE."
    MODULE          -- this module
    MANDATORY-GROUPS {
                        ptpbaseMIBClockCurrentDSGroup,
                        ptpbaseMIBClockParentDSGroup,
                        ptpbaseMIBClockDefaultDSGroup,
                        ptpbaseMIBClockRunningGroup,
                        ptpbaseMIBClockTimepropertiesGroup
                    }
    ::= { ptpbaseMIBCompliances 2 }

ptpbaseMIBCompliancesClockPortInfo MODULE-COMPLIANCE
    STATUS          current
    DESCRIPTION
        "Compliance statement for agents that provide read-only support
        for PTPBASE-MIB to provide clock-port-related information.
        Such devices can only be monitored using this MIB module.

        The module is implemented with support for read-only.  In other
        words, only monitoring is available by implementing this
        MODULE-COMPLIANCE."
    MODULE          -- this module
    MANDATORY-GROUPS {
                        ptpbaseMIBClockPortGroup,
                        ptpbaseMIBClockPortDSGroup,
                        ptpbaseMIBClockPortRunningGroup,
                        ptpbaseMIBClockPortAssociateGroup
                    }
    ::= { ptpbaseMIBCompliances 3 }

ptpbaseMIBCompliancesTransparentClockInfo MODULE-COMPLIANCE
    STATUS          current
    DESCRIPTION
        "Compliance statement for agents that provide read-only support
        for PTPBASE-MIB to provide transparent-clock-related
        information.  Such devices can only be monitored using this MIB
        module.

        The module is implemented with support for read-only.  In other
        words, only monitoring is available by implementing this
        MODULE-COMPLIANCE."
    MODULE          -- this module
    MANDATORY-GROUPS {
                        ptpbaseMIBClockTranparentDSGroup,
                        ptpbaseMIBClockPortTransDSGroup
                    }
    ::= { ptpbaseMIBCompliances 4 }

so basically there are four flavours of compliance 🌈 system info, clock info, clock port info and transparent clock info, and each one lists its own mandatory groups πŸ’– every one of them is read-only, so the vibe is monitor-only πŸ‘€

last stop for this part: the groups themselves 🧚 each group just bundles up the objects that belong together ✨

ptpbaseMIBSystemInfoGroup OBJECT-GROUP
    OBJECTS         {
                        ptpbaseSystemDomainTotals,
                        ptpDomainClockPortsTotal,
                        ptpbaseSystemProfile
                    }
    STATUS          current
    DESCRIPTION
        "Group that aggregates objects describing system-wide
        information"
    ::= { ptpbaseMIBGroups 1 }

ptpbaseMIBClockCurrentDSGroup OBJECT-GROUP
    OBJECTS         {
                        ptpbaseClockCurrentDSStepsRemoved,
                        ptpbaseClockCurrentDSOffsetFromMaster,
                        ptpbaseClockCurrentDSMeanPathDelay
                    }
    STATUS          current
    DESCRIPTION
        "Group that aggregates objects describing PTP currentDS
        information"
    ::= { ptpbaseMIBGroups 2 }

ptpbaseMIBClockParentDSGroup OBJECT-GROUP
    OBJECTS         {
                        ptpbaseClockParentDSParentPortIdentity,
                        ptpbaseClockParentDSParentStats,
                        ptpbaseClockParentDSOffset,
                        ptpbaseClockParentDSClockPhChRate,
                        ptpbaseClockParentDSGMClockIdentity,
                        ptpbaseClockParentDSGMClockPriority1,
                        ptpbaseClockParentDSGMClockPriority2,
                        ptpbaseClockParentDSGMClockQualityClass,
                        ptpbaseClockParentDSGMClockQualityAccuracy,
                        ptpbaseClockParentDSGMClockQualityOffset
                    }
    STATUS          current
    DESCRIPTION
        "Group that aggregates objects describing PTP parentDS
        information"
    ::= { ptpbaseMIBGroups 3 }

ptpbaseMIBClockDefaultDSGroup OBJECT-GROUP
    OBJECTS         {
                        ptpbaseClockDefaultDSTwoStepFlag,
                        ptpbaseClockDefaultDSClockIdentity,
                        ptpbaseClockDefaultDSPriority1,
                        ptpbaseClockDefaultDSPriority2,
                        ptpbaseClockDefaultDSSlaveOnly,
                        ptpbaseClockDefaultDSQualityClass,
                        ptpbaseClockDefaultDSQualityAccuracy,
                        ptpbaseClockDefaultDSQualityOffset
                    }
    STATUS          current
    DESCRIPTION
        "Group that aggregates objects describing PTP defaultDS
        information"
    ::= { ptpbaseMIBGroups 4 }

ptpbaseMIBClockRunningGroup OBJECT-GROUP
    OBJECTS         {
                        ptpbaseClockRunningState,
                        ptpbaseClockRunningPacketsSent,
                        ptpbaseClockRunningPacketsReceived
                    }
    STATUS          current
    DESCRIPTION
        "Group that aggregates objects describing PTP running state
        information"
    ::= { ptpbaseMIBGroups 5 }

ptpbaseMIBClockTimepropertiesGroup OBJECT-GROUP
    OBJECTS  {
                ptpbaseClockTimePropertiesDSCurrentUTCOffsetValid,
                ptpbaseClockTimePropertiesDSCurrentUTCOffset,
                ptpbaseClockTimePropertiesDSLeap59,
                ptpbaseClockTimePropertiesDSLeap61,
                ptpbaseClockTimePropertiesDSTimeTraceable,
                ptpbaseClockTimePropertiesDSFreqTraceable,
                ptpbaseClockTimePropertiesDSPTPTimescale,
                ptpbaseClockTimePropertiesDSSource
              }
    STATUS          current
    DESCRIPTION
        "Group that aggregates objects describing PTP Time Properties
        information"
    ::= { ptpbaseMIBGroups 6 }

that's the groups done, and the next bit picks up the clock port and transparent clock groups πŸ¦‹πŸ’œ

The user's message is a document to rewrite, not a request to act on a file, so I'm answering it directly: this is part 9 of the RFC 8173 rewrite, and it picks up at the tail of the ptpbaseMIB material.

Let me get the rewrite going.

ptpbaseMIBClockTranparentDSGroup OBJECT-GROUP πŸ’–

ptpbaseMIBClockTranparentDSGroup OBJECT-GROUP
    OBJECTS         {
                        ptpbaseClockTransDefaultDSClockIdentity,
                        ptpbaseClockTransDefaultDSNumOfPorts,
                        ptpbaseClockTransDefaultDSDelay,
                        ptpbaseClockTransDefaultDSPrimaryDomain
                    }
    STATUS          current
    DESCRIPTION
        "Group that aggregates objects describing PTP
        transparentClockDefaultDS information"
    ::= { ptpbaseMIBGroups 7 }

ptpbaseMIBClockPortGroup OBJECT-GROUP πŸ¦‹

ptpbaseMIBClockPortGroup OBJECT-GROUP
    OBJECTS         {
                        ptpbaseClockPortName,
                        ptpbaseClockPortSyncTwoStep,
                        ptpbaseClockPortCurrentPeerAddress,
                        ptpbaseClockPortNumOfAssociatedPorts,
                        ptpbaseClockPortCurrentPeerAddressType,
                        ptpbaseClockPortRole
                    }
    STATUS          current
    DESCRIPTION
        "Group that aggregates objects describing information for a
        given PTP Port"
    ::= { ptpbaseMIBGroups 8 }

ptpbaseMIBClockPortDSGroup OBJECT-GROUP 🌸

ptpbaseMIBClockPortDSGroup OBJECT-GROUP
    OBJECTS         {
                        ptpbaseClockPortDSName,
                        ptpbaseClockPortDSPortIdentity,
                        ptpbaseClockPortDSlogAnnouncementInterval,
                        ptpbaseClockPortDSAnnounceRctTimeout,
                        ptpbaseClockPortDSlogSyncInterval,
                        ptpbaseClockPortDSMinDelayReqInterval,
                        ptpbaseClockPortDSPeerDelayReqInterval,
                        ptpbaseClockPortDSDelayMech,
                        ptpbaseClockPortDSPeerMeanPathDelay,
                        ptpbaseClockPortDSGrantDuration,
                        ptpbaseClockPortDSPTPVersion
                    }
    STATUS          current
    DESCRIPTION
        "Group that aggregates objects describing PTP portDS
        information"
    ::= { ptpbaseMIBGroups 9 }

ptpbaseMIBClockPortRunningGroup OBJECT-GROUP 🧚

ptpbaseMIBClockPortRunningGroup OBJECT-GROUP
    OBJECTS         {
                        ptpbaseClockPortRunningName,
                        ptpbaseClockPortRunningState,
                        ptpbaseClockPortRunningRole,
                        ptpbaseClockPortRunningInterfaceIndex,
                        ptpbaseClockPortRunningTransport,
                        ptpbaseClockPortRunningEncapsulationType,
                        ptpbaseClockPortRunningTxMode,
                        ptpbaseClockPortRunningRxMode,
                        ptpbaseClockPortRunningPacketsReceived,
                        ptpbaseClockPortRunningPacketsSent
                    }
    STATUS          current
    DESCRIPTION
        "Group that aggregates objects describing PTP running interface
        information"
    ::= { ptpbaseMIBGroups 10 }

ptpbaseMIBClockPortTransDSGroup OBJECT-GROUP πŸŽ€

ptpbaseMIBClockPortTransDSGroup OBJECT-GROUP
    OBJECTS         {
                        ptpbaseClockPortTransDSPortIdentity,
                        ptpbaseClockPortTransDSlogMinPdelayReqInt,
                        ptpbaseClockPortTransDSFaultyFlag,
                        ptpbaseClockPortTransDSPeerMeanPathDelay
                    }
    STATUS          current
    DESCRIPTION
        "Group that aggregates objects describing PTP
        transparentClockPortDS information"
    ::= { ptpbaseMIBGroups 11 }

ptpbaseMIBClockPortAssociateGroup OBJECT-GROUP 🫢

ptpbaseMIBClockPortAssociateGroup OBJECT-GROUP
    OBJECTS         {
                        ptpbaseClockPortAssociatePacketsSent,
                        ptpbaseClockPortAssociatePacketsReceived,
                        ptpbaseClockPortAssociateAddress,
                        ptpbaseClockPortAssociateAddressType,
                        ptpbaseClockPortAssociateInErrors,
                        ptpbaseClockPortAssociateOutErrors
                    }
    STATUS          current
    DESCRIPTION
        "Group that aggregates objects describing information on peer
        PTP ports for a given PTP clock port"
    ::= { ptpbaseMIBGroups 12 }

END


5. Security Considerations πŸ”₯

Read this part slowly, bestie. It matters a LOT. 😭

There are no management objects defined in this MIB module that have a MAX-ACCESS clause of read-write and/or read-create. So, if this MIB module is implemented correctly, then there is no risk that an intruder can alter or create any management objects of this MIB module via direct SNMP SET operations.

Some of the readable objects in this MIB module (i.e., objects with a MAX-ACCESS other than not-accessible) may be considered sensitive or vulnerable in some network environments. It is thus important to control even GET and/or NOTIFY access to these objects and possibly to even encrypt the values of these objects when sending them over the network via SNMP.

These are the tables and objects and their sensitivity/vulnerability:

   ptpDomainClockPortsTotal, ptpbaseSystemDomainTotals, and
   ptpbaseSystemProfile expose general information about the clock
   system.

   ptpbaseClockRunningState, ptpbaseClockRunningPacketsSent, and
   ptpbaseClockRunningPacketsReceived expose a clock's current
   running status.

   ptpbaseClockCurrentDSStepsRemoved,
   ptpbaseClockCurrentDSOffsetFromMaster, and
   ptpbaseClockCurrentDSMeanPathDelay expose the values of a clock's
   current dataset (currentDS).

   ptpbaseClockParentDSParentPortIdentity,
   ptpbaseClockParentDSParentStats, ptpbaseClockParentDSOffset,
   ptpbaseClockParentDSClockPhChRate,
   ptpbaseClockParentDSGMClockIdentity,
   ptpbaseClockParentDSGMClockPriority1,
   ptpbaseClockParentDSGMClockPriority2,
   ptpbaseClockParentDSGMClockQualityClass,
   ptpbaseClockParentDSGMClockQualityAccuracy, and
   ptpbaseClockParentDSGMClockQualityOffset expose the values of a
   clock's parent dataset (parentDS).

   ptpbaseClockDefaultDSTwoStepFlag,
   ptpbaseClockDefaultDSClockIdentity,
   ptpbaseClockDefaultDSPriority1, ptpbaseClockDefaultDSPriority2,
   ptpbaseClockDefaultDSSlaveOnly, ptpbaseClockDefaultDSQualityClass,
   ptpbaseClockDefaultDSQualityAccuracy, and
   ptpbaseClockDefaultDSQualityOffset expose the values of a clock's
   default dataset (defaultDS).

   ptpbaseClockTimePropertiesDSCurrentUTCOffsetValid,
   ptpbaseClockTimePropertiesDSCurrentUTCOffset,
   ptpbaseClockTimePropertiesDSLeap59,
   ptpbaseClockTimePropertiesDSLeap61,
   ptpbaseClockTimePropertiesDSTimeTraceable,
   ptpbaseClockTimePropertiesDSFreqTraceable,
   ptpbaseClockTimePropertiesDSPTPTimescale, and
   ptpbaseClockTimePropertiesDSSource expose the values of a clock's
   time properties dataset (timePropertiesDS).

   ptpbaseClockTransDefaultDSClockIdentity,
   ptpbaseClockTransDefaultDSNumOfPorts,
   ptpbaseClockTransDefaultDSDelay, and
   ptpbaseClockTransDefaultDSPrimaryDomain expose the values of a
   transparent clock's default dataset (transparentClockDefaultDS).

   ptpbaseClockPortName, ptpbaseClockPortRole,
   ptpbaseClockPortSyncTwoStep,
   ptpbaseClockPortCurrentPeerAddressType,
   ptpbaseClockPortCurrentPeerAddress, and
   ptpbaseClockPortNumOfAssociatedPorts expose general information
   about a clock port.

   ptpbaseClockPortRunningName, ptpbaseClockPortRunningState,
   ptpbaseClockPortRunningRole,
   ptpbaseClockPortRunningInterfaceIndex,
   ptpbaseClockPortRunningTransport,
   ptpbaseClockPortRunningEncapsulationType,
   ptpbaseClockPortRunningTxMode, ptpbaseClockPortRunningRxMode,
   ptpbaseClockPortRunningPacketsReceived, and
   ptpbaseClockPortRunningPacketsSent expose a clock port's current
   running status.

   ptpbaseClockPortDSName, ptpbaseClockPortDSPortIdentity,
   ptpbaseClockPortDSlogAnnouncementInterval,
   ptpbaseClockPortDSAnnounceRctTimeout,
   ptpbaseClockPortDSlogSyncInterval,
   ptpbaseClockPortDSMinDelayReqInterval,
   ptpbaseClockPortDSPeerDelayReqInterval,
   ptpbaseClockPortDSDelayMech, ptpbaseClockPortDSPeerMeanPathDelay,
   ptpbaseClockPortDSGrantDuration, and ptpbaseClockPortDSPTPVersion
   expose the values of a clock port's port dataset (portDS).

   ptpbaseClockPortTransDSPortIdentity,
   ptpbaseClockPortTransDSlogMinPdelayReqInt,
   ptpbaseClockPortTransDSFaultyFlag, and
   ptpbaseClockPortTransDSPeerMeanPathDelay expose the values of a
   transparent clock port's port dataset (transparentClockPortDS).

   ptpbaseClockPortAssociateAddressType,
   ptpbaseClockPortAssociateAddress,
   ptpbaseClockPortAssociatePacketsSent,
   ptpbaseClockPortAssociatePacketsReceived,
   ptpbaseClockPortAssociateInErrors, and
   ptpbaseClockPortAssociateOutErrors expose information about a
   clock port's peer node.

SNMP versions prior to SNMPv3 did not include adequate security. Even if the network itself is secure (for example, by using IPsec), even then, there is no control as to who on the secure network is allowed to access and GET (read) the objects in this MIB module.

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

Further, deployment of SNMP versions prior to SNMPv3 is NOT recommended. Instead, it is recommended to deploy SNMPv3 and to enable cryptographic security. It is then a customer/operator responsibility to ensure that the SNMP entity giving access to an instance of this MIB module is properly configured to give access to those objects only to those principals (users) that have legitimate rights to access them.


6. IANA Considerations 🌈

The MIB module defined in this document uses the following IANA-assigned OBJECT IDENTIFIER value recorded in the "Structure of Management Information (SMI) Numbers (MIB Module Registrations)" registry:

        Descriptor        OBJECT IDENTIFIER value
        ----------        -----------------------
        ptpbaseMIB        { mib-2 241 }

7. References ⭐

Okay so the References section is next, and it's going to be part of the next chunk. πŸ’œ

7.1. Normative References ✨

okay bestie, these are the specs you need to have read before you touch this one πŸŽ€ no skipping!!

7.2. Informative References

these ones are extra reading 🧠 super helpful for context, not strictly required, but iconic if you read them

  • [RFC3410] Case, J., Mundy, R., Partain, D., and B. Stewart, "Introduction and Applicability Statements for Internet-Standard Management Framework", RFC 3410, DOI 10.17487/RFC3410, December 2002, <http://www.rfc-editor.org/info/rfc3410>. 🌸
  • [RFC5905] Mills, D., Martin, J., Ed., Burbank, J., and W. Kasch, "Network Time Protocol Version 4: Protocol and Algorithms Specification", RFC 5905, DOI 10.17487/RFC5905, June 2010, <http://www.rfc-editor.org/info/rfc5905>. ⏰
  • [G.8265.1] ITU-T, "Precision time protocol telecom profile for frequency synchronization", ITU-T Recommendation G.8265.1, July 2014. πŸ“‘

Acknowledgements

big thank-you energy 🫢 to John Linton and Danny Lee for their valuable comments, and to Bert Wijnen, Kevin Gross, Alan Luchuk, Chris Elliot, Brian Haberman, and Dan Romascanu for their reviews of this MIB module. the review squad is literally the reason this works πŸ’œ

Authors' Addresses

the humans behind it all πŸ’–

Vinay Shankarkumar
Cisco Systems
7100-9 Kit Creek Road
Research Triangle Park, NC 27709
United States of America

Email: vinays@cisco.com
Laurent Montini
Cisco Systems
11, rue Camille Desmoulins
92782 Issy-les-Moulineaux
France

Email: lmontini@cisco.com
Tim Frost
Calnex Solutions Ltd.
Oracle Campus
Linlithgow
EH49 7LR
United Kingdom

Email: tim.frost@calnexsol.com
Greg Dowd
Microsemi Inc.
3870 North First Street
San Jose, CA 95134
United States of America

Email: greg.dowd@microsemi.com
πŸ“¦ where this page comes from