module ietf-pm-collection { yang-version 1.1; namespace "urn:ietf:params:xml:ns:yang:ietf-pm-collection"; prefix pm-coll; import ietf-yang-types { prefix yang; reference "RFC 6991: Common YANG Data Types"; } organization "IETF Common Control and Measurement Plane (ccamp) Working Group"; contact "WG Web: Editor: Bin Yeong Yoon "; description "This YANG module defines a data model for performance management (PM) streaming from network equipment to clients, based on ITU-T G.7710. It supports real-time streaming of performance measurements using three core collection types: counts (cumulative events), snapshot (instantaneous values), and tidemarks (extreme values), as defined in ITU-T G.7710. The module enables proactive network monitoring through configurable sampling and measurement intervals, supporting both high-frequency real-time monitoring and long-term trend analysis. It provides threshold event notifications for both periodic measurements and non-periodic events (BUT, EUT, CSES). The design supports AI-driven applications, network digital twins, and dynamic network environments by enabling multiple simultaneous views of the same performance parameter with different temporal resolutions. This hierarchical structure allows operators, analytics systems, and digital twin platforms to access performance data at appropriate granularities while maintaining operational efficiency and cross-vendor interoperability. The module integrates with IETF YANG-Push protocols for subscription-based streaming, enabling clients to receive continuous performance data and threshold event notifications for real-time monitoring, historical analysis, and automated network management."; revision 2026-05-02 { description "Renamed the module from ietf-pm-measurements to ietf-pm-collection (including namespace and prefix). Terminology and model alignment: prior wording and the measurement-methods container for counts, snapshot, and tidemarks were replaced by collection types and the collection-types container, per ITU-T G.7710 collection- type concepts."; reference "RFC XXXX: A YANG Data Model of Performance Management Streaming"; } /* * TYPEDEFs */ typedef profile-names { type string { pattern '[a-zA-Z][a-zA-Z0-9_-]*-[a-zA-Z][a-zA-Z0-9_-]*-' + '[a-zA-Z][a-zA-Z0-9_-]*(-[a-zA-Z][a-zA-Z0-9_-]*)?'; } description "Parameter profile name following the format: --[-] Where: - : Standards body or organization (e.g., itu, ieee, ietf) - : Network domain or layer (e.g., transport, access, core) - : Intended use or function (e.g., maintenance, qos, availability) - : Optional qualifying information (e.g., 15min, 24hr, high-priority) Examples: - itu-transport-maintenance-15min - itu-transport-maintenance-24hr - itu-transport-qos-24hr - ieee-access-availability"; } typedef time-interval-unit { type enumeration { enum millisecond { description "Time interval in milliseconds."; } enum second { description "Time interval in seconds."; } enum minute { description "Time interval in minutes."; } enum hour { description "Time interval in hours."; } } description "Units for expressing time intervals."; } /* * IDENTITIES */ identity periodic-events { description "Base identity for periodic event notifications."; } identity counts-transient { base periodic-events; description "Notification for transient threshold events in counts measurements."; } identity counts-standing { base periodic-events; description "Notification for standing threshold events in counts measurements."; } identity snapshot { base periodic-events; description "Notification for snapshot measurement threshold events."; } identity tidemarks { base periodic-events; description "Notification for tidemarks measurement threshold events."; } identity non-periodic-events { description "Base identity for non-periodic event notifications."; } identity but { base non-periodic-events; description "Notification for Begin Unavailable Time (BUT) events."; } identity eut { base non-periodic-events; description "Notification for End Unavailable Time (EUT) events."; } identity cses { base non-periodic-events; description "Notification for Consecutive Severely Errored Seconds (CSES) events."; } /* * COMMON GROUPINGS */ grouping threshold-config { description "Common threshold configuration for snapshot and tidemarks measurement types (high and low thresholds)."; leaf high-threshold { type uint32; description "High threshold that triggers alerts when exceeded."; } leaf low-threshold { type uint32; description "Low threshold that triggers alerts when performance falls below acceptable levels."; } } grouping transient-threshold-config { description "Threshold configuration for transient conditions. Transient thresholds only support high threshold crossings and report immediately when the count value reaches or crosses the configured transient threshold value. Transient thresholds do not support low threshold (underflow) conditions, unlike snapshot and tidemarks measurements which support both high and low thresholds."; leaf transient-threshold { type uint32; description "Transient threshold that triggers alerts when exceeded. Transient thresholds report immediately when the count value reaches or crosses this threshold value."; } } grouping event-state-info { description "Common event state information for all event types."; leaf event-occurred { type boolean; description "Indicates whether a threshold crossing or performance event has occurred."; } leaf event-time { type yang:date-and-time; description "Precise timestamp of when the event occurred."; } } grouping oor-event-type { description "Common out-of-range event type definition."; leaf event-type { type enumeration { enum High-OOR-event { description "High OOR threshold exceeded."; } enum Low-OOR-event { description "Low OOR threshold crossed."; } } description "Specifies whether the high or low OOR threshold was crossed."; } } grouping triggered-oor-event-info { description "Combined threshold event type and event information."; uses oor-event-type; uses event-state-info; } grouping count-transient-event-type { description "Transient threshold event type definition for counts measurements. Transient thresholds report immediately when the count value reaches or crosses a configured threshold value."; leaf event-type { type enumeration { enum Threshold-Crossed-Event { description "Threshold crossing event generated when count value reaches or crosses the configured threshold value."; } } description "Specifies that a threshold crossing event occurred."; } } grouping triggered-count-transient-event-info { description "Combined transient threshold event type and event information for counts measurements. Transient thresholds are independent threshold mechanisms that report immediately when count values cross configured threshold values."; uses count-transient-event-type; uses event-state-info; } grouping time-interval-config { description "Common time interval configuration."; leaf interval-value { type uint32; description "Numeric value for the interval."; } leaf unit { type time-interval-unit; description "Time unit for the interval value."; } } /* * COLLECTION TYPE GROUPINGS */ grouping count-measurement-gr { description "Counts measurement for cumulative event tracking over a measurement interval. Supports transient and standing threshold reporting, as defined in G.7710."; container counts { description "Contains counts measurement values and configuration."; container transient-condition-config { description "Configuration for transient threshold conditions. Transient thresholds report immediately when the count value reaches or crosses the configured transient threshold value. Transient thresholds do not support low threshold (underflow) conditions, unlike snapshot and tidemarks measurements which support both high and low thresholds."; uses transient-threshold-config; } container standing-condition-config { description "Configuration for standing condition monitoring. When both thresholds are set, standing-threshold must be greater than or equal to reset-threshold (hysteresis)."; must "not(standing-threshold and reset-threshold) or " + "standing-threshold >= reset-threshold" { error-message "Standing threshold must be >= reset threshold."; } leaf standing-threshold { type uint32; description "Threshold value that triggers standing condition alerts."; } leaf reset-threshold { type uint32; description "Reset threshold value that clears standing conditions."; } } leaf measurement-value { type uint32; config false; description "Current cumulative count value for the measurement interval."; } } } grouping snapshot-measurement-gr { description "Snapshot measurements for instantaneous values at uniform time within each measurement interval. Supports high/low OOR threshold reporting, as defined in G.7710."; container snapshot { description "Contains snapshot measurement configuration and values."; container uniform-time-config { description "Configuration for uniform time intervals between snapshots."; leaf interval-value { type uint32; default 1; description "Numeric value for the sampling interval between snapshots."; } leaf unit { type time-interval-unit; description "Time unit for the snapshot sampling interval."; } } container threshold-config { description "Configuration for snapshot threshold monitoring."; uses threshold-config; } leaf measurement-value { type uint32; config false; description "Current instantaneous snapshot value."; } } } grouping tidemarks-measurement-gr { description "Tidemarks measurements for maximum and minimum values over the measurement interval. Supports high/low OOR threshold reporting, as defined in G.7710."; container tidemarks { description "Contains tidemarks measurement values and threshold configuration."; container threshold-config { description "Configuration for tidemarks threshold monitoring."; uses threshold-config; } leaf high-measurement-value { type uint32; config false; description "Current maximum value recorded during the measurement interval."; } leaf low-measurement-value { type uint32; config false; description "Current minimum value recorded during the measurement interval."; } } } grouping collection-types-gr { description "Grouping for the three core collection types (counts, snapshot, tidemarks) per ITU-T G.7710."; container collection-types { description "Container for the counts, snapshot, and tidemarks collection types."; uses count-measurement-gr; uses snapshot-measurement-gr; uses tidemarks-measurement-gr; } } /* * EVENT GROUPINGS */ grouping counts-transient-event-gr { description "Transient threshold events for counts measurements. Transient thresholds are independent threshold mechanisms that report immediately when count values cross configured threshold values."; container counts-transient { description "Contains information about transient threshold events for counts."; uses triggered-count-transient-event-info; } } grouping counts-standing-event-gr { description "Standing condition events for counts measurements."; container counts-standing { description "Contains information about standing threshold events for counts."; leaf event-type { type enumeration { enum Threshold-Report { description "Threshold Report (TR) generated when the count value reaches or exceeds the standing-threshold configured in standing-condition-config."; } enum Reset-Threshold-Report { description "Reset Threshold Report (RTR) generated at the end of the period when the count value is at or below the reset-threshold (G.7710 standing condition clear)."; } } description "Specifies the type of standing threshold event that occurred, as defined in G.7710. A Threshold-Report (TR) is generated when the measurement-value reaches or exceeds the standing-threshold. A Reset-Threshold-Report (RTR) is generated at the end of the period when the measurement-value is at or below the reset-threshold."; } uses event-state-info; } } grouping snapshot-events-gr { description "Threshold events for snapshot measurements."; container snapshot { description "Contains snapshot threshold event information."; uses triggered-oor-event-info; } } grouping tidemarks-events-gr { description "Threshold events for tidemarks measurements."; container tidemarks { description "Contains tidemarks threshold event information."; uses triggered-oor-event-info; } } /* * MEASUREMENT INTERVAL STRUCTURES */ grouping periodic-measurement-intervals { description "Hierarchical structure for periodic measurement timing and collection types."; list sampling-interval { key "id"; description "List of sampling intervals defining data collection frequency."; leaf id { type string; description "Unique identifier for this sampling interval configuration."; } leaf interval-value { type uint32; default 1; description "Numeric value for the sampling interval."; } leaf unit { type time-interval-unit; default second; description "Time unit for the sampling interval value."; } list measurement-interval { key "id"; description "List of measurement intervals defining aggregation periods."; leaf id { type string; description "Unique identifier for this measurement interval configuration."; } leaf interval-value { type uint32; default 15; description "Numeric value for the measurement interval."; } leaf unit { type time-interval-unit; default minute; description "Time unit for the measurement interval value."; } uses collection-types-gr; } } } grouping non-periodic-events-gr { description "Grouping for non-periodic performance event parameters (BUT, EUT, CSES)."; container BUT-event { description "Begin Unavailable Time (BUT) event."; uses event-state-info; } container EUT-event { description "End Unavailable Time (EUT) event."; uses event-state-info; leaf duration { type uint32; units "seconds"; description "Total duration of unavailability in seconds."; } } container CSES-event { description "Consecutive Severely Errored Seconds (CSES) event."; leaf event-occurred { type boolean; description "Indicates whether a CSES event was generated."; } leaf start { type yang:date-and-time; description "Timestamp indicating when the CSES period began."; } leaf end { type yang:date-and-time; description "Timestamp indicating when the CSES period ended."; } leaf duration { type uint32; units "seconds"; description "Duration of the CSES period in seconds."; } leaf error-count { type uint32; description "Number of errors during the CSES period."; } } } grouping pm-periodic-measurement-gr { description "Hierarchical structure for periodic performance measurements."; list parameter-profile { key "name"; description "List of performance parameter profiles."; leaf name { type profile-names; description "Name of the parameter profile."; } list pm-parameter { key "name"; description "List of PM parameters within the parameter profile."; leaf name { type string; description "Name of the performance parameter being measured."; } uses periodic-measurement-intervals; } } } /* * MAIN CONTAINER */ container pm-periodic-measurement { description "Main container for periodic performance measurements."; uses pm-periodic-measurement-gr; } /* * NOTIFICATIONS */ notification pm-threshold-events { description "Notification for periodic threshold crossing events and non-periodic performance events (BUT, EUT, CSES)."; container periodic-events { description "Container for periodic threshold events."; list parameter-profile { key "name"; description "List of performance parameter profiles for event monitoring."; leaf name { type profile-names; description "Name of the parameter profile."; } list pm-parameter { key "name"; description "List of PM parameters within the parameter profile."; leaf name { type string; description "Name of the performance parameter being monitored."; } list sampling-interval { key "id"; description "List of sampling intervals for event monitoring."; leaf id { type string; description "Unique identifier for this sampling interval configuration."; } uses time-interval-config; list measurement-interval { key "id"; description "List of measurement intervals for event aggregation."; leaf id { type string; description "Unique identifier for this measurement interval configuration."; } uses time-interval-config; container event-types { description "Container for different threshold event types."; uses counts-transient-event-gr; uses counts-standing-event-gr; uses snapshot-events-gr; uses tidemarks-events-gr; } } } } } } container non-periodic-events { description "Container for non-periodic performance events (BUT, EUT, CSES)."; uses non-periodic-events-gr; } } }