| module openconfig-platform-transceiver { |
| |
| yang-version "1"; |
| |
| // namespace |
| namespace "http://openconfig.net/yang/platform/transceiver"; |
| |
| prefix "oc-transceiver"; |
| |
| // import some basic types |
| import openconfig-platform { prefix oc-platform; } |
| import openconfig-platform-port { prefix oc-port; } |
| import openconfig-interfaces { prefix oc-if; } |
| import openconfig-transport-types { prefix oc-opt-types; } |
| import openconfig-types { prefix oc-types; } |
| import openconfig-extensions { prefix oc-ext; } |
| import openconfig-yang-types { prefix oc-yang; } |
| |
| |
| // meta |
| organization "OpenConfig working group"; |
| |
| contact |
| "OpenConfig working group |
| www.openconfig.net"; |
| |
| description |
| "This module defines configuration and operational state data |
| for transceivers (i.e., pluggable optics). The module should be |
| used in conjunction with the platform model where other |
| physical entity data are represented. |
| |
| In the platform model, a component of type=TRANSCEIVER is |
| expected to be a subcomponent of a PORT component. This |
| module defines a concrete schema for the associated data for |
| components with type=TRANSCEIVER."; |
| |
| oc-ext:openconfig-version "0.5.0"; |
| |
| revision "2018-05-15" { |
| description |
| "Remove internal-temp state leaf, since we prefer |
| the generic /components/component/state/temperature |
| container for temperature information."; |
| reference "0.5.0"; |
| } |
| |
| revision "2018-01-22" { |
| description |
| "Fixed physical-channel path reference"; |
| reference "0.4.1"; |
| } |
| |
| revision "2017-09-18" { |
| description |
| "Use openconfig-yang-types module"; |
| reference "0.4.0"; |
| } |
| |
| revision "2017-07-08" { |
| description |
| "Adds clarification on aggregate power measurement data"; |
| reference "0.3.0"; |
| } |
| |
| revision "2016-12-22" { |
| description |
| "Adds preconfiguration data and clarified units"; |
| reference "0.2.0"; |
| } |
| |
| // identity statements |
| |
| // typedef statements |
| |
| // grouping statements |
| |
| grouping optical-power-state { |
| description |
| "Reusable leaves related to optical power state -- these |
| are read-only state values. If avg/min/max statistics are |
| not supported, the target is expected to just supply the |
| instant value"; |
| |
| container output-power { |
| description |
| "The output optical power of a physical channel in units |
| of 0.01dBm, which may be associated with individual |
| physical channels, or an aggregate of multiple physical |
| channels (i.e., for the overall transceiver). For an |
| aggregate, this may be a measurement from a photodetector |
| or a a calculation performed on the device by summing up |
| all of the related individual physical channels. |
| Values include the instantaneous, average, minimum, and |
| maximum statistics. If avg/min/max statistics are not |
| supported, the target is expected to just supply the |
| instant value"; |
| |
| uses oc-types:avg-min-max-instant-stats-precision2-dBm; |
| } |
| |
| container input-power { |
| description |
| "The input optical power of a physical channel in units |
| of 0.01dBm, which may be associated with individual |
| physical channels, or an aggregate of multiple physical |
| channels (i.e., for the overall transceiver). For an |
| aggregate, this may be a measurement from a photodetector |
| or a a calculation performed on the device by summing up |
| all of the related individual physical channels. |
| Values include the instantaneous, average, minimum, and |
| maximum statistics. If avg/min/max statistics are not |
| supported, the target is expected to just supply the |
| instant value"; |
| |
| uses oc-types:avg-min-max-instant-stats-precision2-dBm; |
| } |
| |
| container laser-bias-current { |
| description |
| "The current applied by the system to the transmit laser to |
| achieve the output power. The current is expressed in mA |
| with up to two decimal precision. Values include the |
| instantaneous, average, minimum, and maximum statistics. |
| If avg/min/max statistics are not supported, the target is |
| expected to just supply the instant value"; |
| |
| uses oc-types:avg-min-max-instant-stats-precision2-mA; |
| } |
| } |
| |
| grouping output-optical-frequency { |
| description |
| "Reusable leaves related to optical output power -- this is |
| typically configurable on line side and read-only on the |
| client-side"; |
| |
| leaf output-frequency { |
| type oc-opt-types:frequency-type; |
| description |
| "The frequency in MHz of the individual physical channel |
| (e.g. ITU C50 - 195.0THz and would be reported as |
| 195,000,000 MHz in this model). This attribute is not |
| configurable on most client ports."; |
| } |
| } |
| |
| |
| grouping physical-channel-config { |
| description |
| "Configuration data for physical client channels"; |
| |
| leaf index { |
| type uint16 { |
| range 0..max; |
| } |
| description |
| "Index of the physical channnel or lane within a physical |
| client port"; |
| } |
| |
| leaf description { |
| type string; |
| description |
| "Text description for the client physical channel"; |
| } |
| |
| leaf tx-laser { |
| type boolean; |
| description |
| "Enable (true) or disable (false) the transmit label for the |
| channel"; |
| } |
| |
| leaf target-output-power { |
| type decimal64 { |
| fraction-digits 2; |
| } |
| units dBm; |
| description |
| "Target output optical power level of the optical channel, |
| expressed in increments of 0.01 dBm (decibel-milliwats)"; |
| } |
| } |
| |
| grouping physical-channel-state { |
| description |
| "Operational state data for client channels."; |
| |
| uses output-optical-frequency; |
| uses optical-power-state; |
| } |
| |
| grouping physical-channel-top { |
| description |
| "Top-level grouping for physical client channels"; |
| |
| container physical-channels { |
| description |
| "Enclosing container for client channels"; |
| |
| list channel { |
| key "index"; |
| description |
| "List of client channels, keyed by index within a physical |
| client port. A physical port with a single channel would |
| have a single zero-indexed element"; |
| |
| leaf index { |
| type leafref { |
| path "../config/index"; |
| } |
| description |
| "Reference to the index number of the channel"; |
| } |
| |
| container config { |
| description |
| "Configuration data for physical channels"; |
| |
| uses physical-channel-config; |
| } |
| |
| container state { |
| |
| config false; |
| |
| description |
| "Operational state data for channels"; |
| |
| uses physical-channel-config; |
| uses physical-channel-state; |
| } |
| } |
| } |
| } |
| |
| |
| grouping port-transceiver-config { |
| description |
| "Configuration data for client port transceivers"; |
| |
| leaf enabled { |
| type boolean; |
| description |
| "Turns power on / off to the transceiver -- provides a means |
| to power on/off the transceiver (in the case of SFP, SFP+, |
| QSFP,...) or enable high-power mode (in the case of CFP, |
| CFP2, CFP4) and is optionally supported (device can choose to |
| always enable). True = power on / high power, False = |
| powered off"; |
| } |
| |
| leaf form-factor-preconf { |
| type identityref { |
| base oc-opt-types:TRANSCEIVER_FORM_FACTOR_TYPE; |
| } |
| description |
| "Indicates the type of optical transceiver used on this |
| port. If the client port is built into the device and not |
| pluggable, then non-pluggable is the corresponding state. If |
| a device port supports multiple form factors (e.g. QSFP28 |
| and QSFP+, then the value of the transceiver installed shall |
| be reported. If no transceiver is present, then the value of |
| the highest rate form factor shall be reported |
| (QSFP28, for example). |
| |
| The form factor is included in configuration data to allow |
| pre-configuring a device with the expected type of |
| transceiver ahead of deployment. The corresponding state |
| leaf should reflect the actual transceiver type plugged into |
| the system."; |
| } |
| |
| leaf ethernet-pmd-preconf { |
| type identityref { |
| base oc-opt-types:ETHERNET_PMD_TYPE; |
| } |
| description |
| "The Ethernet PMD is a property of the optical transceiver |
| used on the port, indicating the type of physical connection. |
| It is included in configuration data to allow pre-configuring |
| a port/transceiver with the expected PMD. The actual PMD is |
| indicated by the ethernet-pmd state leaf."; |
| } |
| } |
| |
| grouping port-transceiver-state { |
| description |
| "Operational state data for client port transceivers"; |
| |
| leaf present { |
| type enumeration { |
| enum PRESENT { |
| description |
| "Transceiver is present on the port"; |
| } |
| enum NOT_PRESENT { |
| description |
| "Transceiver is not present on the port"; |
| } |
| } |
| description |
| "Indicates whether a transceiver is present in |
| the specified client port."; |
| } |
| |
| leaf form-factor { |
| type identityref { |
| base oc-opt-types:TRANSCEIVER_FORM_FACTOR_TYPE; |
| } |
| description |
| "Indicates the type of optical transceiver used on this |
| port. If the client port is built into the device and not |
| pluggable, then non-pluggable is the corresponding state. If |
| a device port supports multiple form factors (e.g. QSFP28 |
| and QSFP+, then the value of the transceiver installed shall |
| be reported. If no transceiver is present, then the value of |
| the highest rate form factor shall be reported |
| (QSFP28, for example)."; |
| } |
| |
| leaf connector-type { |
| type identityref { |
| base oc-opt-types:FIBER_CONNECTOR_TYPE; |
| } |
| description |
| "Connector type used on this port"; |
| } |
| |
| leaf vendor { |
| type string { |
| length 1..16; |
| } |
| description |
| "Full name of transceiver vendor. 16-octet field that |
| contains ASCII characters, left-aligned and padded on the |
| right with ASCII spaces (20h)"; |
| } |
| |
| leaf vendor-part { |
| type string { |
| length 1..16; |
| } |
| description |
| "Transceiver vendor's part number. 16-octet field that |
| contains ASCII characters, left-aligned and padded on the |
| right with ASCII spaces (20h). If part number is undefined, |
| all 16 octets = 0h"; |
| } |
| |
| leaf vendor-rev { |
| type string { |
| length 1..2; |
| } |
| description |
| "Transceiver vendor's revision number. 2-octet field that |
| contains ASCII characters, left-aligned and padded on the |
| right with ASCII spaces (20h)"; |
| } |
| |
| //TODO: these compliance code leaves should be active based on |
| //the type of port |
| leaf ethernet-pmd { |
| type identityref { |
| base oc-opt-types:ETHERNET_PMD_TYPE; |
| } |
| description |
| "Ethernet PMD (physical medium dependent sublayer) that the |
| transceiver supports. The SFF/QSFP MSAs have registers for |
| this and CFP MSA has similar."; |
| } |
| |
| leaf sonet-sdh-compliance-code { |
| type identityref { |
| base oc-opt-types:SONET_APPLICATION_CODE; |
| } |
| description |
| "SONET/SDH application code supported by the port"; |
| } |
| |
| leaf otn-compliance-code { |
| type identityref { |
| base oc-opt-types:OTN_APPLICATION_CODE; |
| } |
| description |
| "OTN application code supported by the port"; |
| } |
| |
| leaf serial-no { |
| type string { |
| length 1..16; |
| } |
| description |
| "Transceiver serial number. 16-octet field that contains |
| ASCII characters, left-aligned and padded on the right with |
| ASCII spaces (20h). If part serial number is undefined, all |
| 16 octets = 0h"; |
| } |
| |
| leaf date-code { |
| type oc-yang:date-and-time; |
| description |
| "Representation of the transceiver date code, typically |
| stored as YYMMDD. The time portion of the value is |
| undefined and not intended to be read."; |
| } |
| |
| leaf fault-condition { |
| type boolean; |
| description |
| "Indicates if a fault condition exists in the transceiver"; |
| } |
| |
| uses optical-power-state; |
| |
| } |
| |
| grouping port-transceiver-top { |
| description |
| "Top-level grouping for client port transceiver data"; |
| |
| container transceiver { |
| description |
| "Top-level container for client port transceiver data"; |
| |
| container config { |
| description |
| "Configuration data for client port transceivers"; |
| |
| uses port-transceiver-config; |
| } |
| |
| container state { |
| |
| config false; |
| |
| description |
| "Operational state data for client port transceivers"; |
| |
| uses port-transceiver-config; |
| uses port-transceiver-state; |
| } |
| // physical channels are associated with a transceiver |
| // component |
| uses physical-channel-top; |
| } |
| } |
| |
| // data definition statements |
| |
| // augment statements |
| |
| augment "/oc-platform:components/oc-platform:component" { |
| description |
| "Adding transceiver data to physical inventory"; |
| |
| uses port-transceiver-top { |
| when "current()/oc-platform:state/" + |
| "oc-platform:type = 'TRANSCEIVER'" { |
| description |
| "Augment is active when component is of type TRANSCEIVER"; |
| } |
| } |
| } |
| |
| augment "/oc-if:interfaces/oc-if:interface/oc-if:state" { |
| //TODO: add 'when' or other condition to make sure this |
| //leafref points to a component of type TRANSCEIVER. |
| description |
| "Adds a reference from the base interface to its corresponding |
| physical channels."; |
| |
| leaf-list physical-channel { |
| type leafref { |
| path "/oc-platform:components/" + |
| "oc-platform:component[oc-platform:name=current()/../oc-port:hardware-port]/" + |
| "oc-transceiver:transceiver/" + |
| "oc-transceiver:physical-channels/oc-transceiver:channel/" + |
| "oc-transceiver:index"; |
| } |
| description |
| "For a channelized interface, list of references to the |
| physical channels (lanes) corresponding to the interface."; |
| } |
| } |
| |
| // rpc statements |
| |
| // notification statements |
| |
| } |