OpenConfig support for EDFA2 card

Table 1. Feature History

Feature Name

Release Information

Feature Description

Enhanced Channel Automatic Power Control (APC) support on EDFA2 Card

Cisco IOS XR Release 25.4.1

This feature introduces enhanced channel control and management on the EDFA2 card, enhancing configuration and management capabilities. It allows users to configure the expected input power at full channel load as a single, unified parameter, streamlining previous legacy BST1 configurations with new CLI commands. These commands automatically configure BST1 gain and facilitate the raising or clearing of two new alarms per channel for improved monitoring.

Additionally, this feature enables users to control the initial setup of channels, amplifiers, and thresholds required for Metro Open Line System (MOLS) deployment.

New Alarms introduced:

  • OLC_APC_FM_CHANNEL_LOW_INPUT_POWER

  • OLC_APC_FM_CHANNEL_HIGH_INPUT_POWER

New CLI commands introduced:

  • channel-minimum-input-psd

  • expected-total-input-power

  • channel-rx-power-low-rel-thr

  • channel-rx-power-high-rel-thr

You can configure these commands using the OpenConfig model. The transport line common model is augmented to support channel configuration on the EDFA2 card.

OC UDC support on EDFA2 card

Cisco IOS XR Release 25.4.1

This feature introduces UDC capability, allowing UDC traffic on the EDFA2 card using OpenConfig models. The NCS 1014 supports PTP ports, which can be converted to UDC ports for carrying UDC traffic.

These pluggables are supported:

  • ONS-SI-GE-LX

  • GLC-TE

Enhancement in OC support for EDFA2 card

Cisco IOS XR Release 25.3.1

The EDFA2 card OC model offers enhanced management and monitoring capabilities through the following updates to the transport line common model and the introduction of a new YANG model:

  • Thresholds leaves: Configuration and state support for OTS ports, OSC-4, Optics OSC, and Coherent Probe ports.

  • Admin-state leaves:

    Configuration and state support for OTS ports, OSC-4, Optics OSC, and Coherent Probe ports.
  • Supervisory-channels leaves: Power monitoring support for the OSC-4 port.

  • New YANG model:

    Support for the openconfig-terminal-device.yang model, enabling Coherent Probe configuration.

Enhancement in OC support for EDFA2 card

Cisco IOS XR Release 25.2.1

The EDFA2 card now supports these OpenConfig models for retrieving operational and real-time telemetry data.

  • openconfig-channel-monitor.yang

  • openconfig-transport-line-common.yang

In addition to the previously supported operational and telemetry data retrieval, these models now support configuration on the EDFA2 cards.

  • openconfig-optical-amplifier.yang

  • openconfig-optical-attenuator.yang

  • openconfig-wavelength-router.yang

OC support for EDFA2 card

Cisco IOS XR Release 25.1.1

The Open Configuration (OC) support is introduced for the EDFA2 card and the OTDR pluggable. This enables you to retrieve the operational data and real-time telemetry data using these data models:

  • openconfig-optical-amplifier.yang

  • openconfig-optical-attenuator.yang

  • openconfig-wavelength-router.yang

  • openconfig/gnoi/OTDR.proto

EDFA2 card

The EDFA2 line card is an optical amplifier for the NCS1014 Chassis. It functions as a DWDM optical terminal and includes a C-band bidirectional amplifier with channel power control capabilities. This card supports Optical Supervisory Channel (OSC) and Optical Time Domain Reflectometer (OTDR) functionalities.

The card comprises an optical module, pluggable cages for OTDR and OSC, and a DWDM trunk interface. It features integrated management for alarms, performance monitoring, and optical power level control.

Supported OpenConfig Yang models

The NCS1K14-EDFA2 card supports these OpenConfig models:


Note


In Release 25.1.1, only MDT is supported, and EDT is not supported. Additionally, only operational data is supported.


Table 2. Supported OC models

Release

Model

Feature

R25.1.1

openconfig-optical-amplifier.yang

State of the optical amplifier.

openconfig-optical-attenuator.yang

State of the optical attenuator.

openconfig-wavelength-router.yang

State of the media channels and optical interfaces.

openconfig/gnoi/OTDR.proto

Initiating forced OTDR scan.

R25.2.1

openconfig-channel-monitor.yang

State of the optical channel monitor.

openconfig-transport-line-common.yang

State of the optical transport line system.

R25.3.1

openconfig-terminal-device.yang

Logical and Optical Channels – Datapath and OperData.

Supported functions for OpenConfig models

This table highlights the functions supported by the OpenConfig models in releases 25.1.1, 25.2.1, and 25.3.1.

Table 3. Supported functions for OpenConfig models

OC model

Operational data support

Configuration support

EDT support

configure-optical-amplifier.yang

R25.1.1

R25.2.1

openconfig-optical-attenuator.yang

R25.1.1

R25.2.1

openconfig-wavelength-router.yang

R25.1.1

R25.2.1

R25.2.1

openconfig/gnoi/OTDR.proto

R25.1.1

openconfig-channel-monitor.yang

R25.2.1

openconfig-transport-line-common.yang

R25.2.1

R25.3.1

openconfig-terminal-device.yang

R25.3.1

R25.3.1

R25.3.1

Naming conventions

This section describes the naming conventions used in the OpenConfig models supported by the NCS1K14-EDFA2 card.

OpenConfig amplifier model

Figure 1. Optical diagram of NCS1K14-EDFA2 card representing amplifiers

In this optical block diagram, amplifiers are categorized as follows:

  • BST1: Represented as an ingress amplifier.

  • BST2: Represented as an egress amplifier.

  • PRE amplifier parameters: Represented as egress amplifiers.

The naming convention for amplifiers is structured as follows:

R/S-AMP-<AMP-TYPE>P

Where:

  • R stands for Rack.

  • S stands for Slot.

  • AMP is the suffix used to denote an amplifier.

  • AMP-TYPE indicates the type of amplifier.

  • P stands for Port ID.

Examples:

  • R/S-AMP-EGRESS0

  • R/S-AMP-EGRESS1

  • R/S-AMP-INGRESS1

OpenConfig attenuator model

Figure 2. Optical diagram of NCS1K14-EDFA2 card representing attenuators

The naming convention for the attenuator model is as follows:

  • R/S-VOA-EGRESS0

  • R/S-VOA-EGRESS1

  • R/S-VOA-OSC0

  • R/S-VOA-OSC4

Where:

  • R stands for Rack.

  • S stands for Slot.

  • VOA indicates a Variable Optical Attenuator.

  • The suffix specifies the type and port number, such as EGRESS or OSC.

OpenConfig wavelength model

Openconfig supplies a 3-byte value called the ‘index’. This value is interpreted as follows:

  • First Byte: Represents the channel identifier, which can range from 1 to 97.

  • Second and Third Bytes: Indicate the rack and slot numbers.

Example:

If Openconfig provides an ‘index’ value of "100":

  • Channel Identifier: 1

  • Node Location Name: 0/0/NXR0 on the native side

This means the channel identifier is 1, and because the rack and slot are fixed at 0, the location name is formatted as "0/0/NXR0".

OpenConfig channel monitor model

The naming convention for the channel monitor:

  • R/S-CHMON-RX-0

  • R/S-CHMON-TX-0

  • R/S-CHMON-RX-1

  • R/S-CHMON-TX-1

OpenConfig transport line common model

As safety ports are already modeled in the inventory, the transport line common model will utilize the same ots R/S/I/P representation.

From release 25.4.1, the transport line common model supports Enhanced Channel APC through augmented leaves.

OpenConfig UDC naming convention

The OC component [name] contains PTP ports like 0/RP0/CPU-PTP0 and 0/RP0/CPU-PTP1. The OC property [name] can be set to the value UDC-ATTACH-0.

Structure of Yang models supported on NCS1K14-EDFA2

This structure describes the leave structure of YANG models supported on NCS1K14-EDFA2 card:


Note


The leaves that are in bold are augmented.


Supported leaves for OpenConfig attenuator model

From R25.1.1, these leaves are supported for get-oper and telemetry:

+--rw optical-attenuator
     +--rw attenuators
     |  +--rw attenuator* [name]
     |     +--rw name                                     -> ../config/name
     |     +--rw config
     |     |  +--rw name?                                string
     |     |  +--rw target-output-power?                 decimal64
     |     |  +--rw attenuation?                         decimal64
     |     +--ro state
     |        +--ro name?                                 string
     |        +--ro attenuation-mode?            identityref
     |        +--ro target-output-power?       decimal64
     |        +--ro attenuation?                       decimal64
     |        +--ro enabled?                             boolean
     |        +--ro component?                       -> /oc-platform:components/component/name
     |        +--ro actual-attenuation
     |        |  +--ro instant?                          decimal64
     |        |  +--ro output-power-total
     |        |  +--ro instant?                           decimal64
     |        |  +--ro avg?                                 decimal64
     |        |  +--ro min?                                 decimal64
     |        |  +--ro max?                                decimal64
     |        |  +--ro interval?                           oc-types:stat-interval
     |        |  +--ro min-time?                        oc-types:timeticks64
     |        |  +--ro max-time?                        oc-types:timeticks64
     |        +--ro optical-return-loss
     |        |  +--ro instant?                           decimal64
     |        |  +--ro avg?                                     decimal64
     |        |  +--ro min?                                 decimal64
     |        |  +--ro max?                                decimal64
     |        |  +--ro interval?                           oc-types:stat-interval
     |        |  +--ro min-time?                        oc-types:timeticks64
     |        |  +--ro max-time?                       oc-types:timeticks64

From R25.2.1, these leaves are supported for NETCONF/GNMI operations, including get, edit-config, and telemetry:

+--rw optical-attenuator 
     +--rw attenuators 
     |  +--rw attenuator* [name] 
     |     +--rw name                                     -> ../config/name 
     |     +--rw config 
     |     |  +--rw name?                                string 
     |     |  +--rw attenuation-mode?           identityref   
     |     |  +--rw target-output-power?      decimal64 
     |     |  +--rw attenuation?                      decimal64 
     |     |  +--rw enabled?                            boolean 
     |     +--ro state 
     |        +--ro name?                                 string 
     |        +--ro attenuation-mode?            identityref 
     |        +--ro target-output-power?       decimal64 
     |        +--ro attenuation?                       decimal64 
     |        +--ro enabled?                             boolean 
     |        +--ro component?                       -> /oc-platform:components/component/name 
     |          |        +--ro actual-attenuation 
     |        |  +--ro instant?                          decimal64 
     |        |        +--ro output-power-total 
     |        |  +--ro instant?                           decimal64 
     |        |  +--ro avg?                                 decimal64 
     |        |  +--ro min?                                 decimal64 
     |        |  +--ro max?                                decimal64 
     |        |  +--ro interval?                           oc-types:stat-interval 
     |        |  +--ro min-time?                        oc-types:timeticks64 
     |        |  +--ro max-time?                        oc-types:timeticks64 
     |        +--ro optical-return-loss 
     |        |  +--ro instant?                           decimal64 
     |        |  +--ro avg?                                 decimal64 
     |        |  +--ro min?                                 decimal64 
     |        |  +--ro max?                                decimal64 
     |        |  +--ro interval?                           oc-types:stat-interval 
     |        |  +--ro min-time?                        oc-types:timeticks64 
     |        |  +--ro max-time?                       oc-types:timeticks64 
 

 +--ro state 
     |        +--ro name?                                 string 
     |        +--ro target-output-power?       decimal64 
     |        +--ro attenuation?                       decimal64 
     |        +--ro enabled?                             boolean 
     |        +--ro component?                       -> /oc-platform:components/component/name 
     |        +--ro actual-attenuation 
     |        |  +--ro instant?                          decimal64 
     |        +--ro output-power-total 
     |        |  +--ro instant?                           decimal64 
     |        |  +--ro avg?                                 decimal64 
     |        |  +--ro min?                                 decimal64 
     |        |  +--ro max?                                decimal64 
     |        |  +--ro interval?                           oc-types:stat-interval 
     |        |  +--ro min-time?                        oc-types:timeticks64 
     |        |  +--ro max-time?                        oc-types:timeticks64 
     |        +--ro optical-return-loss 
     |        |  +--ro instant?                           decimal64 
     |        |  +--ro avg?                                 decimal64 
     |        |  +--ro min?                                 decimal64 
     |        |  +--ro max?                                decimal64 
     |        |  +--ro interval?                           oc-types:stat-interval 
     |        |  +--ro min-time?                        oc-types:timeticks64 
     |        |  +--ro max-time?                       oc-types:timeticks64 

Supported leaves for OpenConfig amplifier model

From R25.1.1, these leaves are supported for get-oper and telemetry:

|  +--rw amplifier* [name]
     |     +--rw name      -> ../config/name
     |     +--rw config
     |     |  +--rw name?                  string (Amplifier name)
     |     |  +--rw type?                  identityref 
     |     |  +--rw target-gain?           decimal64
     |     |  +--rw target-gain-tilt?      decimal64
     |     |  +--rw gain-range?            identityref (LOW: Normal, High: Extended)
     |     |  +--rw amp-mode?              identityref
     |     |  +--rw enabled?               boolean
     |     |  +--rw fiber-type-profile?    identityref
     |     +--ro state
     |        +--ro name?                  string
     |        +--ro type?                  identityref
     |        +--ro target-gain?           decimal64
     |        +--ro target-gain-tilt?      decimal64
     |        +--ro gain-range?            identityref
     |        +--ro amp-mode?              identityref
     |        +--ro enabled?               boolean
     |        +--ro fiber-type-profile?    identityref 
     |        +--ro component?             -> /oc-platform:components/component/name     
     |        +--ro actual-gain
     |        |  +--ro instant?    decimal64
     |        |  +--ro avg?        decimal64
     |        |  +--ro min?        decimal64
     |        |  +--ro max?        decimal64
     |        |  +--ro interval?   oc-types:stat-interval
     |        |  +--ro min-time?   oc-types:timeticks64
     |        |  +--ro max-time?   oc-types:timeticks64
     |        +--ro actual-gain-tilt
     |        |  +--ro instant?    decimal64
     |        |  +--ro avg?        decimal64
     |        |  +--ro min?        decimal64
     |        |  +--ro max?        decimal64
     |        |  +--ro interval?   oc-types:stat-interval
     |        |  +--ro min-time?   oc-types:timeticks64
     |        |  +--ro max-time?   oc-types:timeticks64
     |        +--ro input-power-total 
     |        |  +--ro instant?    decimal64. 
     |        |  +--ro avg?        decimal64
     |        |  +--ro min?        decimal64
     |        |  +--ro max?        decimal64
     |        |  +--ro interval?   oc-types:stat-interval
     |        |  +--ro min-time?   oc-types:timeticks64
     |        |  +--ro max-time?   oc-types:timeticks64
     |        +--ro input-power-c-band. 
     |        |  +--ro instant?    decimal64
     |        |  +--ro avg?        decimal64
     |        |  +--ro min?        decimal64
     |        |  +--ro max?        decimal64
     |        |  +--ro interval?   oc-types:stat-interval
     |        |  +--ro min-time?   oc-types:timeticks64
     |        |  +--ro max-time?   oc-types:timeticks64
     |        +--ro output-power-total -→ total tx power
     |        |  +--ro instant?    decimal64
     |        |  +--ro avg?        decimal64
     |        |  +--ro min?        decimal64
     |        |  +--ro max?        decimal64
     |        |  +--ro interval?   oc-types:stat-interval
     |        |  +--ro min-time?   oc-types:timeticks64
     |        |  +--ro max-time?   oc-types:timeticks64
     |        +--ro output-power-c-band → tx signal power
     |        |  +--ro instant?    decimal64
     |        |  +--ro avg?        decimal64
     |        |  +--ro min?        decimal64
     |        |  +--ro max?        decimal64
     |        |  +--ro interval?   oc-types:stat-interval
     |        |  +--ro min-time?   oc-types:timeticks64
     |        |  +--ro max-time?   oc-types:timeticks64
     |        +--ro optical-return-loss 
     |           +--ro instant?    decimal64
     |           +--ro avg?        decimal64
     |           +--ro min?        decimal64
     |           +--ro max?        decimal64
     |           +--ro interval?   oc-types:stat-interval
     |           +--ro min-time?   oc-types:timeticks64
     |           +--ro max-time?   oc-types:timeticks64
     +--rw supervisory-channels 
        +--rw supervisory-channel* [interface]
           +--rw interface    -> ../config/interface
           +--rw config
           |  +--rw interface?   oc-if:base-interface-ref
           +--ro state
              +--ro interface?            oc-if:base-interface-ref
              +--ro input-power. → Rx power
              |  +--ro instant?    decimal64
              |  +--ro avg?        decimal64
              |  +--ro min?        decimal64
              |  +--ro max?        decimal64
              |  +--ro interval?   oc-types:stat-interval
              |  +--ro min-time?   oc-types:timeticks64
              |  +--ro max-time?   oc-types:timeticks64
              +--ro output-power. → Tx power
              |  +--ro instant?    decimal64
              |  +--ro avg?        decimal64
              |  +--ro min?        decimal64
              |  +--ro max?        decimal64
              |  +--ro interval?   oc-types:stat-interval
              |  +--ro min-time?   oc-types:timeticks64
              |  +--ro max-time?   oc-types:timeticks64

From R25.2.1, these leaves are supported for NETCONF/GNMI operations, including get, edit-config, and telemetry:

+-rw optical-amplifier 
     +--rw amplifiers 
     |  +--rw amplifier* [name] 
     |     +--rw name      -> ../config/name 
     |     +--rw config 
     |     |  +--rw name?                  string 
     |     |  +--rw type?                  identityref 
     |     |  +--rw target-gain?           decimal64 
     |     |  +--rw target-gain-tilt?      decimal64 
     |     |  +--rw gain-range?            identityref  
     |     |  +--rw amp-mode?              identityref  
     |     |  +--rw enabled?               boolean 
     |     |  +--rw fiber-type-profile?    identityref
     |     +--ro state 
     |        +--ro name?                  string 
     |        +--ro type?                  identityref 
     |        +--ro target-gain?           decimal64 
     |        +--ro target-gain-tilt?      decimal64 
     |        +--ro gain-range?            identityref 
     |        +--ro amp-mode?              identityref 
     |        +--ro enabled?               boolean 
     |        +--ro fiber-type-profile?    identityref 
     |        +--ro component?             -> /oc-platform:components/component/name     
     |        +--ro actual-gain 
     |        |  +--ro instant?    decimal64 
     |        |  +--ro avg?        decimal64 
     |        |  +--ro min?        decimal64 
     |        |  +--ro max?        decimal64 
     |        |  +--ro interval?   oc-types:stat-interval 
     |        |  +--ro min-time?   oc-types:timeticks64 
     |        |  +--ro max-time?   oc-types:timeticks64 
     |        +--ro actual-gain-tilt 
     |        |  +--ro instant?    decimal64 
     |        |  +--ro avg?        decimal64 
     |        |  +--ro min?        decimal64 
     |        |  +--ro max?        decimal64 
     |        |  +--ro interval?   oc-types:stat-interval 
     |        |  +--ro min-time?   oc-types:timeticks64 
     |        |  +--ro max-time?   oc-types:timeticks64 
     |        +--ro input-power-total  
     |        |  +--ro instant?    decimal64 
     |        |  +--ro avg?        decimal64 
     |        |  +--ro min?        decimal64 
     |        |  +--ro max?        decimal64 
     |        |  +--ro interval?   oc-types:stat-interval 
     |        |  +--ro min-time?   oc-types:timeticks64 
     |        |  +--ro max-time?   oc-types:timeticks64 
     |        +--ro input-power-c-band 
     |        |  +--ro instant?    decimal64 
     |        |  +--ro avg?        decimal64 
     |        |  +--ro min?        decimal64 
     |        |  +--ro max?        decimal64 
     |        |  +--ro interval?   oc-types:stat-interval 
     |        |  +--ro min-time?   oc-types:timeticks64 
     |        |  +--ro max-time?   oc-types:timeticks64 
     |        +--ro output-power-total -→ total tx power 
     |        |  +--ro instant?    decimal64 
     |        |  +--ro avg?        decimal64 
     |        |  +--ro min?        decimal64 
     |        |  +--ro max?        decimal64 
     |        |  +--ro interval?   oc-types:stat-interval 
     |        |  +--ro min-time?   oc-types:timeticks64 
     |        |  +--ro max-time?   oc-types:timeticks64 
     |        +--ro output-power-c-band → tx signal power 
     |        |  +--ro instant?    decimal64 
     |        |  +--ro avg?        decimal64 
     |        |  +--ro min?        decimal64 
     |        |  +--ro max?        decimal64 
     |        |  +--ro interval?   oc-types:stat-interval 
     |        |  +--ro min-time?   oc-types:timeticks64 
     |        |  +--ro max-time?   oc-types:timeticks64 
     |        +--ro optical-return-loss → OPBRR 
     |           +--ro instant?    decimal64 
     |           +--ro avg?        decimal64 
     |           +--ro min?        decimal64 
     |           +--ro max?        decimal64 
     |           +--ro interval?   oc-types:stat-interval 
     |           +--ro min-time?   oc-types:timeticks64 
     |           +--ro max-time?   oc-types:timeticks64 
     +--rw supervisory-channels  
        +--rw supervisory-channel* [interface] 
           +--rw interface    -> ../config/interface 
           +--rw config 
           |  +--rw interface?   oc-if:base-interface-ref 
           +--ro state 
              +--ro interface?            oc-if:base-interface-ref 
              +--ro input-power. → Rx power 
              |  +--ro instant?    decimal64 
              |  +--ro avg?        decimal64 
              |  +--ro min?        decimal64 
              |  +--ro max?        decimal64 
              |  +--ro interval?   oc-types:stat-interval 
              |  +--ro min-time?   oc-types:timeticks64 
              |  +--ro max-time?   oc-types:timeticks64 
              +--ro output-power. → Tx power 
              |  +--ro instant?    decimal64 
              |  +--ro avg?        decimal64 
              |  +--ro min?        decimal64 
              |  +--ro max?        decimal64 
              |  +--ro interval?   oc-types:stat-interval 
              |  +--ro min-time?   oc-types:timeticks64 
              |  +--ro max-time?   oc-types:timeticks64
|     +--ro state 
     |        +--ro name?                  string 
     |        +--ro type?                  identityref 
     |        +--ro target-gain?           decimal64 
     |        +--ro target-gain-tilt?      decimal64 
     |        +--ro gain-range?            identityref 
     |        +--ro amp-mode?              identityref 
     |        +--ro enabled?               boolean  
     |        +--ro fiber-type-profile?    identityref -→  
     |        +--ro component?             -> /oc-platform:components/component/name
     |        +--ro actual-gain 
     |        |  +--ro instant?    decimal64 
     |        |  +--ro avg?        decimal64 
     |        |  +--ro min?        decimal64 
     |        |  +--ro max?        decimal64 
     |        |  +--ro interval?   oc-types:stat-interval 
     |        |  +--ro min-time?   oc-types:timeticks64 
     |        |  +--ro max-time?   oc-types:timeticks64 
     |        +--ro actual-gain-tilt 
     |        |  +--ro instant?    decimal64 
     |        |  +--ro avg?        decimal64 
     |        |  +--ro min?        decimal64 
     |        |  +--ro max?        decimal64 
     |        |  +--ro interval?   oc-types:stat-interval 
     |        |  +--ro min-time?   oc-types:timeticks64 
     |        |  +--ro max-time?   oc-types:timeticks64 
........... 
 |        +--ro optical-return-loss.     
     |           +--ro instant?    decimal64 
     |           +--ro avg?        decimal64 
     |           +--ro min?        decimal64 
     |           +--ro max?        decimal64 
     |           +--ro interval?   oc-types:stat-interval 
     |           +--ro min-time?   oc-types:timeticks64 
     |           +--ro max-time?   oc-types:timeticks64   
 
+--rw supervisory-channels  
        +--rw supervisory-channel* [interface] 
           +--rw interface    -> ../config/interface 
           +--rw config 
           |  +--rw interface?   oc-if:base-interface-ref 
           +--ro state 
              +--ro interface?            oc-if:base-interface-ref 
              +--ro input-power. → Rx power 
              |  +--ro instant?    decimal64 
              |  +--ro avg?        decimal64 
              |  +--ro min?        decimal64 
              |  +--ro max?        decimal64 
              |  +--ro interval?   oc-types:stat-interval 
              |  +--ro min-time?   oc-types:timeticks64 
              |  +--ro max-time?   oc-types:timeticks64 
              +--ro output-power. → Tx power 
              |  +--ro instant?    decimal64 
              |  +--ro avg?        decimal64 
              |  +--ro min?        decimal64 
              |  +--ro max?        decimal64 
              |  +--ro interval?   oc-types:stat-interval 
              |  +--ro min-time?   oc-types:timeticks64 
              |  +--ro max-time?   oc-types:timeticks64

Supported leaves for OpenConfig Wavelength router model

From R25.1.1, these leaves are supported for get-oper and telemetry:

 module: openconfig-wavelength-router
  +--rw wavelength-router
     +--rw media-channels
     |  +--rw channel* [index]
     |     +--rw index                     -> ../config/index
     |     +--rw config
     |     |  +--rw index?                            uint32
     |     |  +--rw lower-frequency?                  oc-opt-types:frequency-type
     |     |  +--rw upper-frequency?                  oc-opt-types:frequency-type
     |     |  +--rw admin-status?                     oc-opt-types:admin-state-type
     |     +--ro state
     |     |  +--ro index?                            uint32
     |     |  +--ro lower-frequency?                  oc-opt-types:frequency-type
     |     |  +--ro upper-frequency?                  oc-opt-types:frequency-type
     |     |  +--ro admin-status?                     oc-opt-types:admin-state-type
     |     |  +--ro oper-status?                      enumeration
     |     +--rw source
     |     |  +--rw config
     |     |  |  +--rw port-name?   -> /oc-platform:components/component/name
     |     |  +--ro state
     |     |     +--ro port-name?   -> /oc-platform:components/component/name
     |     +--rw dest
     |     |  +--rw config
     |     |  |  +--rw port-name?   -> /oc-platform:components/component/name
     |     |  +--ro state
     |     |     +--ro port-name?   -> /oc-platform:components/component/name
     +--rw port-spectrum-power-profiles
     |  +--rw port* [name]
     |   |   +--rw name                      -> ../config/name
     |    |  +--rw config
     |   |  |  +--rw name?   -> /oc-platform:components/component/name
     |  |  +--ro state
     | |  |  +--ro name?   -> /oc-platform:components/component/name
     

From R25.2.1, these leaves are supported for NETCONF/GNMI operations, including get, edit-config, and telemetry:

 module: openconfig-wavelength-router 
  +--rw wavelength-router 
     +--rw media-channels 
     |  +--rw channel* [index] 
     |     +--rw index                     -> ../config/index 
     |     +--rw config 
     |     |  +--rw index?                            uint32 
     |     |  +--rw lower-frequency?                  oc-opt-types:frequency-type 
     |     |  +--rw upper-frequency?                  oc-opt-types:frequency-type 
     |     |  +--rw admin-status?                     oc-opt-types:admin-state-type 
     |     +--ro state 
     |     |  +--ro index?                            uint32 
     |     |  +--ro lower-frequency?                  oc-opt-types:frequency-type 
     |     |  +--ro upper-frequency?                  oc-opt-types:frequency-type 
     |     |  +--ro admin-status?                     oc-opt-types:admin-state-type 
     |     |  +--ro oper-status?                      enumeration 
     +--rw port-spectrum-power-profiles 
     |  +--rw port* [name] 
     |   |   +--rw name                      -> ../config/name 
     |    |  +--rw config 
     |   |  |  +--rw name?   -> /oc-platform:components/component/name 
     |  |  +--ro state 
     | |  |  +--ro name?   -> /oc-platform:components/component/name 
     | |  +--rw oc-wave-ext:extended 
     |  | |  +--rw config 
     |  |  |  |  +--rw oc-wave-ext:regulation-enable?   boolean 
     |  |  |   +--ro state 
     |  |  |   |  +--rw oc-wave-ext:regulation-enable?   boolean 
     |   |  +--rw spectrum-power-profile 
     |    |   |  +--rw distribution* [lower-frequency upper-frequency] 
     |    |   |  |  +--rw lower-frequency    -> ../config/lower-frequency 
      |   |   |  |  +--rw upper-frequency    -> ../config/upper-frequency 
      |   |   |  |  +--rw config 
      |   |   |  |  |  +--rw lower-frequency?   oc-opt-types:frequency-type 
      |    |  |  |  |  +--rw upper-frequency?   oc-opt-types:frequency-type 
      |    |  |  |  |  +--rw target-power?      decimal64 
      |    |  |  |  +--ro state 
      |   |  |   |  |     +--ro lower-frequency?   oc-opt-types:frequency-type 
      |   |  |       |     +--ro upper-frequency?   oc-opt-types:frequency-type 
      |   |  |       |     +--ro target-power?      decimal64        
   
module: openconfig-wavelength-router 
  +--rw wavelength-router 
     +--rw media-channels 
     |  +--rw channel* [index] 
     |     +--rw index                     -> ../config/index 
     |     +--ro state 
     |     |  +--ro index?                            uint32 
     |     |  +--ro lower-frequency?                  oc-opt-types:frequency-type 
     |     |  +--ro upper-frequency?                  oc-opt-types:frequency-type 
     |     |  +--ro admin-status?                     oc-opt-types:admin-state-type 
     |     |  +--ro oper-status?                      enumeration 
     +--rw port-spectrum-power-profiles 
     |  +--rw port* [name] 
     |   |   +--rw name                      -> ../config/name 
     |    |  +--rw config 
     |   |  |  +--rw name?   -> /oc-platform:components/component/name 
     |  |  +--ro state 
     | |  |  +--ro name?   -> /oc-platform:components/component/name 
  | |  +--rw oc-wave-ext:extended 
     |  |  |   +--ro state 
     |  |  |   |  +--rw oc-wave-ext:regulation-enable?   boolean 
     |   |  +--rw spectrum-power-profile 
     |    |   |  +--rw distribution* [lower-frequency upper-frequency] 
     |    |   |  |  +--rw lower-frequency    -> ../config/lower-frequency 
      |   |   |  |  +--rw upper-frequency    -> ../config/upper-frequency 
      |   |   |  |  +--rw config 
      |   |   |  |  |  +--rw lower-frequency?   oc-opt-types:frequency-type 
      |    |  |  |  |  +--rw upper-frequency?   oc-opt-types:frequency-type 
      |    |  |  |  |  +--rw target-power?      decimal64 
      |    |  |  |  +--ro state 
      |   |  |   |  |     +--ro lower-frequency?   oc-opt-types:frequency-type 
      |   |  |     +--ro upper-frequency?   oc-opt-types:frequency-type 
      |   |  |     +--ro target-power?      decimal64        

EDT supported leaf

From R25.2.1, telemetry EDT supports both channel addition and deletion. These OpenConfig leaves are included in the EDT functionality:

  • openconfig-wavelength-router/wavelength-router/media-channels/channel[index]/state/index
  • openconfig-wavelength-router/wavelength-router/media-channels/channel[index]/state/upper-frequency
  • openconfig-wavelength-router/wavelength-router/media-channels/channel[index]/state/lower-frequency

Supported leaves for OpenConfig channel monitor model

From R25.2.1, these leaves are supported for get-oper and telemetry:

+--rw channel-monitors 
      +--rw channel-monitor* [name] 
         +--rw name        -> ../config/name 
         +--rw config 
         +--ro state 
         |  +--ro name?           -> /oc-platform:components/component/name 
         |  +--ro monitor-port?   -> /oc-platform:components/component/name 
         +--rw channels 
            +--ro channel* [lower-frequency upper-frequency] 
               +--ro lower-frequency    -> ../state/lower-frequency 
               +--ro upper-frequency    -> ../state/upper-frequency 
               +--ro state 
                  +--ro lower-frequency?   oc-opt-types:frequency-type 
                  +--ro upper-frequency?   oc-opt-types:frequency-type 
                  +--ro power?             decimal64 
        +--ro state 
         |  +--ro name?           -> /oc-platform:components/component/name 
         |  +--ro monitor-port?   -> /oc-platform:components/component/name 
         +--rw channels 
            +--ro channel* [lower-frequency upper-frequency] 
               +--ro state 
                  +--ro lower-frequency?   oc-opt-types:frequency-type 
                  +--ro upper-frequency?   oc-opt-types:frequency-type 
                  +--ro power?             decimal64 

Supported leaves for OpenConfig transport line common model

From R25.2.1, these leaves are supported for get-oper and telemetry:

module: openconfig-transport-line-common
  augment /oc-platform:components/oc-platform:component/oc-platform:port:  
    +--rw optical-port
       +--ro state
          +--ro admin-state?         oc-opt-types:admin-state-type
          |  +--ro instant?    decimal64

From R25.3.1, these leaves for NETCONF/GNMI is updated for operations, edit-config, thresholds, and telemetry:


    +--rw optical-port
       +--rw config
       |  +--rw admin-state?   oc-opt-types:admin-state-type
       +--ro state
          +--ro admin-state?         oc-opt-types:admin-state-type
          +--ro input-power
          |  +--ro instant?    decimal64
          |  +--ro avg?        decimal64
          |  +--ro min?        decimal64
          |  +--ro max?        decimal64
          |  +--ro interval?   oc-types:stat-interval
          |  +--ro min-time?   oc-types:timeticks64
          |  +--ro max-time?   oc-types:timeticks64
          +--ro output-power
             +--ro instant?    decimal64
             +--ro avg?        decimal64
             +--ro min?        decimal64
             +--ro max?        decimal64
             +--ro interval?   oc-types:stat-interval
             +--ro min-time?   oc-types:timeticks64
             +--ro max-time?   oc-types:timeticks64
       +-- rw cisco
            +--rw thresholds
                 +--rw config
                      +--rw input-signal-power-lower?    decimal64
                      +--rw input-signal-power-upper?    decimal64
                      +--rw output-signal-power-lower?    decimal64
                      +--rw output -signal-power-upper?    decimal64
                 +--ro state
                      +--ro input-signal-power-lower?    decimal64
                      +--ro input-signal-power-upper?    decimal64
                      +--ro output-signal-power-lower?    decimal64
                      +--ro output -signal-power-upper?    decimal64

    +--rw optical-port
       +--ro state
          +--ro admin-state?         oc-opt-types:admin-state-type
          +--ro input-power
          |  +--ro instant?    decimal64
          |  +--ro avg?        decimal64
          |  +--ro min?        decimal64
          |  +--ro max?        decimal64
          |  +--ro interval?   oc-types:stat-interval
          |  +--ro min-time?   oc-types:timeticks64
          |  +--ro max-time?   oc-types:timeticks64
          +--ro output-power
             +--ro instant?    decimal64
             +--ro avg?        decimal64
             +--ro min?        decimal64
             +--ro max?        decimal64
             +--ro interval?   oc-types:stat-interval
             +--ro min-time?   oc-types:timeticks64
             +--ro max-time?   oc-types:timeticks64
       +-- ro cisco
            +--ro thresholds
                 +--ro state
                      +--rw input-signal-power-lower?    decimal64
                      +--rw input-signal-power-upper?    decimal64
                      +--rw output-signal-power-lower?    decimal64
                      +--rw output -signal-power-upper?    decimal64

Enhanced Channel APC through OpenConfig transport line common model augmentation

From Release 25.4.1, new augmentations extend the transport line common model leaves to support channel APC. These extended leaves support edit-config, thresholds, and telemetry operations through NETCONF/GNMI.

Telemetry is supported with a 10-second reporting cadence.


module: openconfig-transport-line-common
  augment /oc-platform:components/oc-platform:component/oc-platform:port: >> 
    +--rw optical-port
        +--rw config
        |  +--rw admin-state?   oc-opt-types:admin-state-type
        +--ro state
           +--ro admin-state?         oc-opt-types:admin-state-type
           +--ro input-power
           |  +--ro instant?    decimal64
           |  +--ro avg?        decimal64
           |  +--ro min?        decimal64
           |  +--ro max?        decimal64
           |  +--ro interval?   oc-types:stat-interval
           |  +--ro min-time?   oc-types:timeticks64
           |  +--ro max-time?   oc-types:timeticks64
           +--ro output-power
              +--ro instant?    decimal64
              +--ro avg?        decimal64
              +--ro min?        decimal64
              +--ro max?        decimal64
              +--ro interval?   oc-types:stat-interval
              +--ro min-time?   oc-types:timeticks64
              +--ro max-time?   oc-types:timeticks64
       +-- rw cisco
            +--rw thresholds
                 +--rw config
                      +--rw input-signal-power-lower?    decimal64
                      +--rw input-signal-power-upper?    decimal64
                      +--rw output-signal-power-lower?    decimal64
                      +--rw output -signal-power-upper?    decimal64
  	           +--rw input-channel-power-delta-lower?  decimal64
       	         +--rw input-channel-power-delta-upper?   decimal64
                 +--ro state
                      +--ro input-signal-power-lower?    decimal64
                      +--ro input-signal-power-upper?    decimal64
                      +--ro output-signal-power-lower?    decimal64
                      +--ro output -signal-power-upper?    decimal64
  	           +--ro input-channel-power-delta-lower?  decimal64
         	       +--ro input-channel-power-delta-upper?   decimal64
                 +--rw channel-control
                   +-rw config
            	   +--rw channel-minimum-input-psd?    decimal64
                      +--rw input-power-total-expected?    decimal64
                   +-ro state
            	    +--ro channel-minimum-input-psd?    decimal64
                      +--ro input-power-total-expected?    decimal64

Supported leaves for OpenConfig terminal-device model

From Release 25.3.1, the terminal-device module is supported in the EDFA2 card. It is a terminal optics device model that enables the management of client and line-side terminal systems in a DWDM transport network.

The existing model, which currently supports NCS 1004, will be extended to include the EDFA2 card. A dummy client support for coherent probe is utilized for Netconf operations. A dummy client will be created exclusively when the ingress client port configuration (openconfig-terminal-device/terminal-device/logical-channels/channel[index]/ingress/config/transceiver) is not provided. If this configuration is present, a capability mismatch alarm will be raised.

Only Port 7 optics is supported as the Coherent port. Additionally, it exclusively supports the 100GE tributary protocol, with a maximum supported bandwidth of 100.

From R25.3.1, these leaves are supported for NETCONF/GNMI operations, including get, edit-config, thresholds,and telemetry:

module: openconfig-terminal-device
   +--rw terminal-device
     +--rw config
     +--ro state
     +--rw logical-channels
     |  +--rw channel* [index]
     |     +--rw index     -> ../config/index
     |     +--rw config
     |     |  +--rw index?                  uint32
     |     |  +--rw description?            string
     |     |  +--rw admin-state? oc-opt-types:admin-state-type
     |     |  +--rw rate-class?             identityref
     |     |  +--rw trib-protocol?          identityref
     |     |  +--rw logical-channel-type?   identityref
         |     +--ro state
     |     |  +--ro index?                  uint32
     |     |  +--ro description?            string
     |     |  +--ro admin-state?            oc-opt-types:admin-state-type
     |     |  +--ro rate-class?             identityref
     |     |  +--ro trib-protocol?          identityref
     |     |  +--ro logical-channel-type?   identityref
     |     |  +--ro link-state?             enumeration
     |     +--rw otn
     |     |  |  +--ro errored-seconds?              yang:counter64
     |     |  |  +--ro severely-errored-seconds?     yang:counter64
     |     |  |  +--ro unavailable-seconds?          yang:counter64 
     |     |  |  +--ro fec-uncorrectable-words?  
     |     |  |  +--ro fec-corrected-bits?           yang:counter64
     |     |  |  +--ro background-block-errors?      yang:counter64
                                                     yang:counter64
     |     |  |  +--ro pre-fec-ber
     |     |  |  |  +--ro instant?    decimal64
     |     |  |  |  +--ro avg?        decimal64
     |     |  |  |  +--ro min?        decimal64
     |     |  |  |  +--ro max?        decimal64
........................
........................ (truncated)
     +--rw optical-channel
       +--rw config
       |  +--rw frequency?             oc-opt-types:frequency-type
       |  +--rw target-output-power?   decimal64
       |  +--rw operational-mode?      uint16
       |  +--rw line-port?             -> /oc-platform:components/component/name
       +--ro state
       |  +--ro frequency?              oc-opt-types:frequency-type
       |  +--ro target-output-power?     decimal64
       |  +--ro operational-mode?        uint16
       |  +--ro line-port?              -> /oc-platform:components/component/name
........................
........................ (truncated)

          +--rw oc-opt-ext:thresholds
             +--rw oc-opt-ext:config
             |  +--rw oc-opt-ext:input-signal-power-lower?   decimal64
             |  +--rw oc-opt-ext:input-signal-power-upper?   decimal64
             +--ro oc-opt-ext:state
                +--ro oc-opt-ext:input-signal-power-lower?   decimal64
                +--ro oc-opt-ext:input-signal-power-upper?   decimal64

OpenConfig UDC support

From Release 25.4.1, the system supports UDC capability. The EDFA2 card does not provide Ethernet ports for exporting UDC. In the NCS 1014 chassis, PTP ports carry UDC traffic which can be converted to UDC ports for carrying UDC traffic, but OSC ports take over these PTP ports and prioritize OSC traffic. You can configure PTP ports for UDC using CLI and UM-based native YANG. Now, OpenConfig also supports configuring PTP ports for UDC traffic.

The system does not support the EDT leaf.

You can use these leaves for NETCONF and gNMI operations, including get, edit-config, thresholds, and telemetry:

+--rw components 
|   +--rw component [name] 
|   |   +--rw name      -> ../config/name   identityref (Component name – 0/RP0/CPU0-PTP0 or 0/RP0/CPU0-PTP1)
|   |   +--rw properties
|   |   |   +--rw property [name]  
|   |   |   +--rw name      -> ../config/name   identityref (Property name (UDC-ATTACH-0)
|   |   |   +--rw config 
|   |   |   |   +--rw name?                  string (Property name (UDC-ATTACH-0)
|   |   |   |   +--rw value?                  string (GigabitEthernetR/S/I/P)
|   |   |   +--ro state 
|   |   |   |   +--ro name?                  string (Property name (UDC-ATTACH-0)
|   |   |   |   +--ro value?                   string (GigabitEthernetR/S/I/P)
 +--ro state 
 |   +--ro name?                  string (Property name (UDC-ATTACH-0)
 |   +--ro value?                   string (GigabitEthernetR/S/I/P)

Sample configurations

This section presents sample configurations and telemetry outputs for the OC models supported on the EDFA2 card.

OpenConfig attenuator model

This is a sample to configure and get operational data using the OC-Attenuator model:

{
    "openconfig-optical-attenuator:optical-attenuator": {
       "attenuators": {
           "attenuator": [
               {
                   "name":"0/0-VOA-EGRESS0",
"state":{
                   }
              }

{
    "openconfig-optical-attenuator:optical-attenuator": {
       "attenuators": {
           "attenuator": [
               {
                   "name":"0/0-VOA-OSC0",
                   "state":{
                   }
               }

OpenConfig amplifier model

This is a sample to configure and get operational data using the OC-Amplifier model:

 <get>
<filter>
<optical-amplifier xmlns="http://openconfig.net/yang/optical-amplfier">
<amplifiers/>
 <supervisory-channels/>
</optical-amplifier>
</filter>
</get>
<edit-config>
<target>
<candidate/>
 </target>
<config>
<optical-amplifier xmlns="http://openconfig.net/yang/optical-amplfier">
   <amplifiers>
    <amplifier>
     <name>0/0-AMP-EGRESS0</name>
     <config>
      <name>0/0-AMP-EGRESS0</name>
      <amp-mode>CONSTANT_GAIN</amp-mode>
      <type>EDFA</type>
<fiber-type-profile>SSMF</fiber-type-profile>
      <target-gain>16.00</target-gain>
      <target-gain-tilt>0.00</target-gain-tilt>
      </config>
  <cisco xmlns="http://cisco.com/ns/yang/Cisco-IOS-XR-openconfig-optical-amplifier-ext">
      <extended>
       <config>
        <regulation-enabled>true</regulation-enabled>
       </config>
      </extended>
     </cisco>
    </amplifier>
   </amplifiers>
  </optical-amplifier>
</config>
</edit-config>

OpenConfig wavelength model

This is a sample to configure and get operational data using the OC-Wavelength model:

"openconfig-wavelength-router:wavelength-router": {
  "port-spectrum-power-profiles": {
   "port": [
    {
     "name": "Ots0/0/0/0",
     "Cisco-IOS-XR-openconfig-wavelength-router-ext:extended": {
      "state": {
       "regulation-enable": false
      }
     },
     "state": {
      "name": "Ots0/0/0{
/0"
    
  },
  "media-channels": {
   "channel": [
    {
     "index": 100,
     "state": {
      "index": 100,
      "lower-frequency": "193950000",
      "upper-frequency": "194050000",
      "admin-status": "enabled",
      "oper-status": "up"
     }

Wavelength router model

This is a sample to configure and get operational data for frequency convention in spectrum-power-profile and distribution for wavelength router model:

<edit-config>
<target><candidate/></target>
<config>
    <wavelength-router xmlns="http://openconfig.net/yang/wavelength-router">
      <port-spectrum-power-profiles>
        <port>
          <name>Ots0/0/0/0</name>
            <config>
              <name>Ots0/0/0/0</name>
            </config>
          <spectrum-power-profile>
            <distribution>
              <lower-frequency>191200000</lower-frequency>
              <upper-frequency>196175000</upper-frequency>
<config>
                <lower-frequency>191200000</lower-frequency>
                <upper-frequency>196175000</upper-frequency>
                <target-power xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" nc:operation="create">-1.25</target-power>
              </config>
            </distribution>
          </spectrum-power-profile>
        </port>
      </port-spectrum-power-profiles>
    </wavelength-router>
</config>
</edit-config>
Request:
<get>
  <filter type="subtree">
    <wavelength-router xmlns="http://openconfig.net/yang/wavelength-router">
      <port-spectrum-power-profiles>
        <port>
          <name>Ots0/0/0/0</name>
          <spectrum-power-profile>
          </spectrum-power-profile>
        </port>
      </port-spectrum-power-profiles>
    </wavelength-router>
  </filter>
</get>
Response:
<?xml version="1.0"?>
<rpc-reply message-id="d78bc8c8-4e99-431b-9a8c-cab3d87e25cc" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
 <data>
  <wavelength-router xmlns="http://openconfig.net/yang/wavelength-router">
   <port-spectrum-power-profiles>
    <port>
     <name>Ots0/0/0/0</name>
     <spectrum-power-profile>
      <distribution>
       <lower-frequency>191200000</lower-frequency>
       <upper-frequency>196175000</upper-frequency>
       <state>
        <target-power>-1.20</target-power>
        <upper-frequency>196175000</upper-frequency>
        <lower-frequency>191200000</lower-frequency>
       </state>
       <config>
        <target-power>-1.25</target-power>
        <upper-frequency>196175000</upper-frequency>
        <lower-frequency>191200000</lower-frequency>
       </config>
      </distribution>
     </spectrum-power-profile>
    </port>
   </port-spectrum-power-profiles>
  </wavelength-router>
 </data>
</rpc-reply>

OpenConfig channel monitor model

This is a sample to get operational data using the OC-Channel monitor model:

{
  "openconfig-channel-monitor:channel-monitors": {
                "channel-monitor": [
                        {
                "name": "0/0-CHMON-RX-0",
                "channels":
                {
                    "channel":{}
               }
{
  "openconfig-channel-monitor:channel-monitors": {
                "channel-monitor": [
                        {
                "name": "0/0-CHMON-TX-0",
                "channels":
                {
                    "channel":{}
                }

This is a sample output to get data for single channel:


get data xpath:
/channel-monitors/channel-monitor/channels/channel[lower-frequency=191400000][upper-frequency=191406250]/state

Response:
[
  {
    "source": "10.127.126.174:57400",
    "timestamp": 1749368365802571706,
    "time": "2025-06-08T13:09:25.802571706+05:30",
    "updates": [
      {
        "Path": "openconfig:channel-monitors/channel-monitor[name=0/0-CHMON-RX-0]/channels/channel[lower-frequency=191400000][upper-frequency=191406250]/state",
        "values": {
          "channel-monitors/channel-monitor/channels/channel/state": {
            "lower-frequency": "191400000",
            "upper-frequency": "191406250"
          }
        }
      },
      {
        "Path": "openconfig:channel-monitors/channel-monitor[name=0/0-CHMON-TX-0]/channels/channel[lower-frequency=191400000][upper-frequency=191406250]/state",
        "values": {
          "channel-monitors/channel-monitor/channels/channel/state": {
            "lower-frequency": "191400000",
            "power": "-31.30",
            "upper-frequency": "191406250"
          }
        }
      },
      {
        "Path": "openconfig:channel-monitors/channel-monitor[name=0/0-CHMON-RX-1]/channels/channel[lower-frequency=191400000][upper-frequency=191406250]/state",
        "values": {
          "channel-monitors/channel-monitor/channels/channel/state": {
            "lower-frequency": "191400000",
            "power": "0.00",
            "upper-frequency": "191406250"
          }
        }
      },
      {
        "Path": "openconfig:channel-monitors/channel-monitor[name=0/0-CHMON-TX-1]/channels/channel[lower-frequency=191400000][upper-frequency=191406250]/state",
        "values": {
          "channel-monitors/channel-monitor/channels/channel/state": {
            "lower-frequency": "191400000",
            "power": "-26.60",
            "upper-frequency": "191406250"
          ]

OpenConfig transport line common model

This is a sample output for EDFA2 line interface:


{
    "source": "10.127.126.174:57400",
    "timestamp": 1749368046243415426,
    "time": "2025-06-08T13:04:06.243415426+05:30",
    "updates": [
      {
        "Path": "openconfig:components/component[name=Ots0/0/0/0]/port/optical-port/state",
        "values": {
          "components/component/port/optical-port/state": {
            "admin-state": "enabled",
            "input-power": {
              "instant": "-9.65"
                  }
      }

Sample output for Release 25.3.1:


[
  {
    "source": "10.127.126.176:57400",
    "timestamp": 1756891018884482368,
    "time": "2025-09-03T14:46:58.884482368+05:30",
    "updates": [
      {
        "Path": "openconfig:components/component[name=Ots0/3/0/0]/port/optical-port",
        "values": {
          "components/component/port/optical-port": {
            "Cisco-IOS-XR-openconfig-transport-line-common-ext:cisco": {
              "thresholds": {
                "state": {
                  "input-signal-power-lower": "-47.00",
                  "output-signal-power-lower": "-7.00"
                }
              }
            },
            "state": {
              "admin-state": "enabled",
              "input-power": {
                "avg": "-10.10",
                "instant": "-10.09",
                "interval": "10000000000",
                "max": "-10.09",
                "max-time": "1756891000907584499",
                "min": "-10.11",
                "min-time": "1756891000907584499"
              },
              "output-power": {
                "avg": "5.46",
                "instant": "5.46",
                "interval": "10000000000",
                "max": "5.46",
                "max-time": "1756891000907584499",
                "min": "5.45",
                "min-time": "1756891000907584499"
              }
            }
          }
        }
      },
      {
        "Path": "openconfig:components/component[name=Ots0/3/0/1]/port/optical-port",
        "values": {
          "components/component/port/optical-port": {
            "Cisco-IOS-XR-openconfig-transport-line-common-ext:cisco": {
              "thresholds": {
                "state": {
                  "input-channel-power-delta-lower": "-3.00",
                  "input-channel-power-delta-upper": "3.00",
                  "input-signal-power-lower": "-30.00",
                  "output-signal-power-lower": "-7.00"
                }
              }
            },
            "state": {
              "admin-state": "enabled",
              "input-power": {
                "avg": "-4.46",
                "instant": "-4.46",
                "interval": "10000000000",
                "max": "-4.46",
                "max-time": "1756891000907599978",
                "min": "-4.46",
                "min-time": "1756891000907599978"
              },
              "output-power": {
                "avg": "8.41",
                "instant": "8.43",
                "interval": "10000000000",
                "max": "8.42",
                "max-time": "1756891000907599978",
                "min": "8.39",
                "min-time": "1756891003905812683"
              
      },
      {
        "Path": "openconfig:components/component[name=Ots0/3/0/2]/port/optical-port",
        "values": {
          "components/component/port/optical-port": {
            "Cisco-IOS-XR-openconfig-transport-line-common-ext:cisco": {
              "thresholds": {
                "state": {
                  "input-signal-power-lower": "-40.00"
                }
              }
            },
            "state": {
              "admin-state": "enabled",
              "input-power": {
                "avg": "-17.03",
                "instant": "-16.99",
                "interval": "10000000000",
                "max": "-17.00",
                "max-time": "1756891000907615778",
                "min": "-17.05",
                "min-time": "1756891001905617411"
              
      },
      {
        "Path": "openconfig:components/component[name=Ots0/3/0/3]/port/optical-port",
        "values": {
          "components/component/port/optical-port": {
            "Cisco-IOS-XR-openconfig-transport-line-common-ext:cisco": {
              "thresholds": {
                "state": {
                  "input-signal-power-lower": "-40.00"
                }
              }
            },
            "state": {
              "admin-state": "enabled",
              "input-power": {
                "avg": "-20.98",
                "instant": "-20.95",
                "interval": "10000000000",
                "max": "-20.98",
                "max-time": "1756891000907630336",
                "min": "-21.01",
                "min-time": "1756891000907630336"
              
      },
      {
        "Path": "openconfig:components/component[name=Osc0/3/0/4]/port/optical-port",
        "values": {
          "components/component/port/optical-port": {
            "Cisco-IOS-XR-openconfig-transport-line-common-ext:cisco": {
              "thresholds": {
                "state": {
                  "input-signal-power-lower": "-17.00",
                  "output-signal-power-lower": "-42.00"
                }
              }
            },
            "state": {
              "admin-state": "enabled",
              "input-power": {
                "avg": "4.19",
                "instant": "4.19",
                "interval": "10000000000",
                "max": "4.19",
                "max-time": "1756891000907569297",
                "min": "4.19",
                "min-time": "1756891000907569297"
              },
              "output-power": {
                "avg": "-17.24",
                "instant": "-17.24",
                "interval": "10000000000",
                "max": "-17.24",
                "max-time": "1756891000907569297",
                "min": "-17.26",
                "min-time": "1756891001905566687"
              
      },
      {
        "Path": "openconfig:components/component[name=Optics0/3/0/5]/port/optical-port",
        "values": {
          "components/component/port/optical-port": {
            "Cisco-IOS-XR-openconfig-transport-line-common-ext:cisco": {
              "thresholds": {
                "state": {
                  "input-signal-power-lower": "-30.00",
                  "input-signal-power-upper": "5.00",
                  "output-signal-power-lower": "0.00",
                  "output-signal-power-upper": "8.00"
                }
              }
            },
            "state": {
              "admin-state": "enabled",
              "input-power": {
                "avg": "-19.00",
                "instant": "-18.99",
                "interval": "10000000000",
                "max": "-19.00",
                "max-time": "1756891000907645382",
                "min": "-19.03",
                "min-time": "1756891000907645382"
              },
              "output-power": {
                "avg": "4.65",
                "instant": "4.64",
                "interval": "10000000000",
                "max": "4.66",
                "max-time": "1756891003905863164",
                "min": "4.64",
                "min-time": "1756891001905650733"
              }
                  },
      {
        "Path": "openconfig:components/component[name=Optics0/3/0/7]/port/optical-port",
        "values": {
          "components/component/port/optical-port": {
            "Cisco-IOS-XR-openconfig-transport-line-common-ext:cisco": {
              "thresholds": {
                "state": {
                  "input-signal-power-lower": "-30.00",
                  "input-signal-power-upper": "3.00",
                  "output-signal-power-lower": "-16.00",
                  "output-signal-power-upper": "0.00"
                }
              }
            },
            "state": {
              "admin-state": "enabled",
              "input-power": {
                "avg": "-7.71",
                "interval": "10000000000",
                "max": "-7.67",
                "max-time": "1756891000907490205",
                "min": "-7.76",
                "min-time": "1756891000907490205"
              },
              "output-power": {
                "avg": "-2.17",
                "interval": "10000000000",
                "max": "-2.16",
                "max-time": "1756891000907490205",
                "min": "-2.19",
                "min-time": "1756891009905462714"
              }
           ]
] 
Table 4. Default threshold value for Ots and Osc controller
Controller Leaf Threshold value
OtsR/S/I/0 input-signal-power-lower -47 dBM
output-signal-power-lower -7 dBM
OtsR/S/I/1 input-signal-power-lower -30 dBM
output-signal-power-lower -7 dBM
OtsR/S/I/2 input-signal-power-lower -40 dBM
OtsR/S/I/3 input-signal-power-lower -40 dBM
OscR/S/I/4 input-signal-power-lower -17 dBM
output-signal-power-lower -42 dBM
Table 5. Default threshold value for Optics Interface of OSC and Coherent Probe port
Controllers Leaf Threshold value
OSC Optics

OpticsR/S/I/5

input-signal-power-lower -30.00 dBM
input-signal-power-upper 5.00 dBM
output-signal-power-lower 0.00 dBM
ooutput-signal-power-upper 8.00 dBM
Coherent Probe Optics

OpticsR/S/I/7

input-signal-power-lower -30.00 dBM
input-signal-power-upper 3.00 dBM
output-signal-power-lower -16.00 dBM
output-signal-power-upper 0.00 dBM

OpenConfig terminal device model

From Release 25.3.1, OpenConfig terminal device model is supported. This is a sample output for Coherent probe config:


{
  "openconfig-terminal-device:terminal-device": {
    "logical-channels": {
      "channel": [
        {
          "index": 30000,
          "config": {
            "loopback-mode": "NONE",
            "logical-channel-type": "openconfig-transport-types:PROT_ETHERNET",
            "trib-protocol": "openconfig-transport-types:PROT_100GE",
            "rate-class": "openconfig-transport-types:TRIB_RATE_100G",
            "admin-state": "ENABLED",
            "description": "ETH Logical Channel",
            "index": 30000
          },
          "logical-channel-assignments": {
            "assignment": [
              {
                "index": 1,
                "config": {
                  "allocation": 100,
                  "logical-channel": 30001,
                  "assignment-type": "LOGICAL_CHANNEL",
                  "description": "ETH to Coherent assignment",
                  "index": 1
                }
              
        {
          "index": 30001,
          "config": {
            "loopback-mode": "NONE",
            "logical-channel-type": "openconfig-transport-types:PROT_OTN",
            "admin-state": "ENABLED",
            "description": "Coherent Logical Channel",
            "index": 30001
          },
          "logical-channel-assignments": {
            "assignment": [
              {
                "index": 1,
                "config": {
                  "allocation": 100,
                  "assignment-type": "OPTICAL_CHANNEL",
                  "optical-channel": "OpticalChannel0/1/0/7",
                  "description": "Coherent to optical assignment",
                  "index": 1
                
  }
} 

UDC configuration query

The configuration query should apply settings to the component [name] for 0/RP0/CPU0, as well as for any instances of 0/RP0/CPU0 whose names include 'PTP' (such as 0/RP0/CPU-PTP0 and 0/RP0/CPU-PTP1).

This is a sample to configure and get operational data for UDC.

Sample Netconf query

<edit-config>
<target>
  <candidate/>
</target>
<config>
  <components xmlns="http://openconfig.net/yang/platform">
    <component>
      <name>0/RP0/CPU0</name>
      <config>
        <name>0/RP0/CPU0</name>
      </config>
    </component>
    <component>
      <name>0/RP0/CPU0-PTP0</name>
      <config>
        <name>0/RP0/CPU0-PTP0</name>
      </config>
      <properties>
        <property>
          <name>UDC-ATTACH-0</name>
          <config>
            <name>UDC-ATTACH-0</name>
            <value>GigabitEthernet0/0/0/5</value>
          </config>
        </property>
      </properties>
    </component>
  </components>
</config>
</edit-config>
Sample OC Config rpc
  "openconfig-platform:components": {
    "component": [
      {
        "name": "0/RP0/CPU0",
        "config": {
          "name": "0/RP0/CPU0"
        }
      },
      {
        "name": "0/RP0/CPU0-PTP0",
        "config": {
            "name": "0/RP0/CPU0-PTP0"
        },
        "properties": {
          "property": {
            "name": "UDC-ATTACH-0",
            "config": {
              "name": "UDC-ATTACH-0",
              "value": "GigabitEthernet0/3/0/5"
            }
          }
        }
      }
    ]
  }
OpenConfig xpath to retrieve specific state data
openconfig-platform:/components/component[name=0/RP0/CPU0-PTP1]/properties/property[name=UDC-ATTACH-0]
This is a sample output.
[
  {
    "source": "10.127.126.176:57400",
    "timestamp": 1765515166176355802,
    "time": "2025-12-12T10:22:46.176355802+05:30",
    "updates": [
      {
        "Path": "openconfig:components/component[name=0/RP0/CPU0-PTP1]/properties/property[name=UDC-ATTACH-0]",
        "values": {
          "components/component/properties/property": {
            "config": {
              "name": "UDC-ATTACH-0",
              "value": "GigabitEthernet0/3/0/5"
            },
            "name": "UDC-ATTACH-0",
            "state": {
              "name": "UDC-ATTACH-0",
              "value": "GigabitEthernet0/3/0/5"
            }
          }
        }
      }
    ]
  }
]

OTDR gNOI protocols

An OTDR gNOI protocol is a network management protocol that

  • enables remote initiation and monitoring of Optical Time Domain Reflectometer (OTDR) scans,

  • reports scan results and manages error handling during a scan, and

  • provides standardized messaging between optical network devices and management systems.

Table 6. Feature History

Feature Name

Release Information

Feature Description

gNOI otdr.proto enhancements

Cisco IOS XR Release 25.4.1

The gNOI otdr.proto has these enhancements:

  • Displays total measured loss and total measured length in OTDR results, in addition to existing measurements.

  • Allows assignment of unique names to SOR files for easier identification.

  • Organizes SOR files from auto and manual OTDR scans into separate folders to distinguish between file types.

  • Provides an option to disable Auto Negotiation, which is set to false by default, directly from the gNOI proto.

In Release 25.1.1, OTDR gNOI supports only manual initiation of OTDR scans.

For further details on the protocol definition, refer to the gnoi otdr proto definition..

These enhancements aim to improve the functionality and usability of the gNOI otdr.proto in Release 25.4.1.

  • Total measured loss and total measured length are provided alongside existing measurements, enhancing the data available for analysis.

  • Unique names are assigned to SOR files based on user-assigned names. This approach aids in file identification and retrieval and makes it easier to manage and locate specific files.

  • Manual and auto SOR files are organized into separate folders. This organization facilitates easier access and management of these files.

  • The gNOI proto includes an option to disable Auto Negotiation, which is set to false by default.

The OTDR label must adhere to these limitations: Only dot, hyphen, and underscore characters are permitted. The maximum file name length is 255 characters, and the maximum label length is 55 characters.

OTDR proto fields and corresponding status mappings

This table lists the responses received for the OTDR proto and the corresponding OTDR status as displayed in the CLI and Cisco-IOS-XR-controller-ots-oper.yang model:

OTDR proto fields

Corresponding OTDR status of OTDR in CLI and native yang model

Error codes corresponding to OTDR initiation

InitiateError_HARDWARE_FAILURE

OTDR_SCAN_STATUS_COMM_FAILED

OTDR_SCAN_STATUS_ERROR

InitiateError_ALREADY_IN_PROGRESS

OPTICS_CERR_OTDR_SCAN_ALREADY_IN_PROGRESS

InitiateError_UNSPECIFIED

OPTICS_CERR_OTDR_SCAN_NOT_SUPPORTED

OPTICS_CERR_OTDR_MODULE_NOT_DISCOVERED_OR_EINVAL_ERRORS

OPTICS_CERR_OTDR_PLUGGABLE_NOT_PRESENT

OPTICS_CERR_OTDR_PATCH_CONNECTION_MISSING

OPTICS_CERR_OTDR_LOCKED_BY_ANOTHER_ENTITY

OTDR_SCAN_STATUS_STOPPED

OTDR_SCAN_STATUS_ERROR

OTDR_SCAN_STATUS_TIMEOUT

OTDR_SCAN_STATUS_OTDR_LOCAL_RES_NOT_AVAILABLE

OTDR_SCAN_STATUS_SPAN_RES_FAILED

OTDR_SCAN_STATUS_SCAN_NOT_ALLOWED

OTDR_SCAN_STATUS_SCAN_UNKNOWN

Status corresponding to OTDR progression

InitiateProgress_PENDING

OTDR_SCAN_STATUS_WAITING_SPAN_RESERVATION

InitiateProgress_RUNNING

OTDR_SCAN_STATUS_MEASURING

OTDR_SCAN_STATUS_DATA_PROCESSING

InitiateProgress_COMPLETE

OTDR_SCAN_STATUS_DATA_READY

OTDR measurements

total_loss_db

Total Measured Loss

total_length_m

Total Measured Length

optical_return_loss_db

optical_return_loss

local_path

Sor file

discovered_fiber_type

not supported

average_loss_db_km

not supported

Events

distance_m

location

loss_db

In case of non-reflective event, loss_db is equivalent to magnitude

Reflection_db

In case reflective event, reflection_db is equivalent to magnitude

Sample output of gNOI OTDR clients

This section provides various sample outputs and error messages generated by gNOI OTDR client scan operations.

The gNOI OTDR scan was run with the default disable_auto_negotiation set to false and the label configured.

/auto/mgbl/utils/OTDR/otdr-client -ip 10.58.230.221 -port 57400 -username ncs1014 -password lablab -component_path "openconfig:/components/component[name=Ots0/3/0/0-Tx]"  -label "test1234._-"  -disable_auto_negotiation=false

2025/09/16 10:41:01 Initiating OTDR Scan Request:

02:40s - OTDR COMPLETE  [##################################################]  


2025/09/16 10:43:42 OTDR Trace Results:

Local Path: /harddisk:/otdr/test1234._-_kepler-230-221_OTDR_Ots0_3_0_0_TX_20250916-050400.sor

Total Loss (dB):               6.58
Total Length (m):              21190.8203
Optical Return Loss (dB):      28.00
Average Fiber Loss (dB/km):    0.00
Discovered Fiber Type:         FTP_UNKNOWN

Events:
Event#         Distance(m)    Loss(dB)       Reflection(dB) 
1                   11.02             0.00             -30.61         
2                   11.02            2.72                0.00           
3                   21190.82      0.00               -32.13         
4                  21190.82       10.00              0.00 

The gNOI OTDR scan was run with disable_auto_negotiation set to true and the label configured.

gNOI OTDR Scan run with  disabe_auto_negotiation as true and Label set:

bgl-ads-2160:~ > /auto/mgbl/utils/OTDR/otdr-client -ip 10.58.230.221 -port 57400 -username ncs1014 -password lablab -component_path "openconfig:/components/component[name=Ots0/3/0/0-Tx]"  -label "test1234._-"  -disable_auto_negotiation=true
2025/09/16 11:00:04 Initiating OTDR Scan Request:

02:40s - OTDR COMPLETE  [##################################################]  


2025/09/16 11:02:45 OTDR Trace Results:

Local Path: /harddisk:/otdr/test1234._-_kepler-230-221_OTDR_Ots0_3_0_0_TX_20250916-052302.sor

Total Loss (dB):               6.68
Total Length (m):              21203.9395
Optical Return Loss (dB):      30.00
Average Fiber Loss (dB/km):    0.00
Discovered Fiber Type:         FTP_UNKNOWN

Events:
Event#         Distance(m)    Loss(dB)       Reflection(dB) 
1                   10.69              0.00           -32.31         
2                   10.69              2.80             0.00           
3                   21203.94        0.00           -31.96         
4                   21203.94       10.00            0.00 

The following error message appears when an OC OTDR scan is run while an FE side OTDR scan is already in progress in the same direction.

bgl-ads-2160:~ > /auto/mgbl/utils/OTDR/otdr-client -ip 10.58.230.221 -port 57400 -username ncs1014 -password lablab -component_path "openconfig:/components/component[name=Ots0/3/0/0-Tx]"  -label "test1234._-"  -disable_auto_negotiation=false

2025/09/16 10:52:07 Initiating OTDR Scan Request:

00:00s - OTDR ERRORED   [                                                  ]  


2025/09/16 10:52:08 Error: UNSPECIFIED : 'optics' detected the 'warning' condition 'OTDR Scan cannot be started as it is locked by Another Entity/Application.'
bgl-ads-2160:~ >