Files
oopt-gnpy-api/gnpyapi/yang/gnpy-eqpt-config@2025-01-20.yang
EstherLerouzic 34df7f5fc1 Feat: create project skeleton using CANDI POC experimental api
Signed-off-by: EstherLerouzic <esther.lerouzic@orange.com>
Change-Id: I44c9c96c58fabb79e2b569f7b404036b475b4fde
2025-02-25 17:42:50 +01:00

771 lines
18 KiB
YANG

module gnpy-eqpt-config {
yang-version 1.1;
namespace "urn:ns:gnpy:equipment_library";
prefix "gnpyeqpt";
import ietf-optical-impairment-topology {
prefix "oit";
revision-date 2024-05-21;
reference
"RFC 8345: A YANG Data Model for Network Topologies";
}
import ietf-layer0-types {
prefix "l0-types";
revision-date 2024-03-04;
reference
"RFC 8345: A YANG Data Model for Network Topologies";
}
organization
"Telecom Infra Project OOPT PSE
Working Group";
contact
"WG Web: <https://github.com/Telecominfraproject/oopt-gnpy>
contact: <mailto:ahmed.triki@orange.com>
contact: <mailto:esther.lerouzic@orange.com>
";
description "Base YANG model for gnpy equipment library input for path computation - 2020 - candi preversion";
revision 2025-01-20 {
description
"Add RamanFiber, design bands, tx_power";
reference
"Base YANG model for equipment library input for detecon, libyang validation, GNPy4Ofr API";
}
revision "2024-02-21" {
description "add roadm, fix identity-ref, fix leafref";
reference "Base YANG model for equipment library input for detecon, libyang validatio, GNPy4Ofr API";
}
revision "2023-02-04" {
description "fix pdl, pmd fraction-digit, add advanced_model type def, remove no-type-def";
reference "Base YANG model for equipment library input for detecon - GNPy";
}
revision "2022-11-21" {
description "draft for toaster detecon - GNPy API";
reference "Base YANG model for equipment library input for detecon - GNPy";
}
revision "2020-10-22" {
description "draft for experimental/2020-candi";
reference "Base YANG model for equipment library input for path computation with gnpy";
}
/*
* Identities
*/
identity edfa-type-def {
description "base identity for variable gain and fixed gain";
}
identity variable_gain {
base edfa-type-def;
description "'variable_gain' is a simplified model simulating a 2-coil
EDFA with internal, input and output VOAs. The NF vs gain response is calculated
accordingly based on the input parameters: nf_min, nf_max, and gain_flatmax. It
is not a simple interpolation but a 2-stage NF calculation.";
}
identity fixed_gain {
base edfa-type-def;
description "'fixed_gain' is a fixed gain model. NF == Cte == nf0 if gain_min < gain < gain_flatmax";
}
identity openroadm {
base edfa-type-def;
description "'openroadm' is an openroadm amplifier type.";
}
identity multi_band {
base edfa-type-def;
description "multi_band has a combination of amp per frequency band defined with their f_min f_max range";
}
identity dual_stage {
base edfa-type-def;
description "dual-stage has two amps defined";
}
identity advanced_model {
base edfa-type-def;
description "advanced_model has a combination of amp per frequency band defined with their f_min f_max range";
}
identity fiber-variety {
description "base identity for fiber variety";
}
identity transceiver-variety {
description "base identity for transceiver variety";
}
grouping variable_gain {
leaf nf_min {
type decimal64 {
fraction-digits 2;
}
units dB;
}
leaf nf_max {
type decimal64 {
fraction-digits 2;
}
units dB;
}
}
grouping fixed_gain{
leaf nf0 {
type decimal64 {
fraction-digits 2;
}
units dB;
}
}
grouping openroadm{
leaf-list nf_coef {
type decimal64 {
fraction-digits 8;
}
//default [8.1e-4,6.142e-2,1.558,19.97] ;
}
}
grouping dual-stage {
leaf preamp_variety {
type union {
type leafref {
path "../../Edfa/type_variety";
}
type leafref {
path "../../Edfa/other_name";
}
}
}
leaf booster_variety {
type union {
type leafref {
path "../../Edfa/type_variety";
}
type leafref {
path "../../Edfa/other_name";
}
}
}
}
grouping multi_band {
leaf-list amplifiers {
type string;
description "list of amplifier type-variety picked in other type-def";
}
}
grouping advanced_model {
leaf advanced_config_from_json {
type string;
description
"file name where all noise interp coef, gain ripple, dgt, nf_ripple are detailed";
}
}
grouping edfa-common {
leaf allowed_for_design{
type boolean ;
description "If false, the amplifier will not be picked by auto-design but it can still be used as a
manual input (from JSON or Excel template topology files.)";
}
leaf gain_flatmax {
type decimal64 {
fraction-digits 2;
}
units dB;
}
leaf gain_min {
type decimal64 {
fraction-digits 2;
}
units dB;
}
leaf gain_extended {
type decimal64 {
fraction-digits 2;
}
units dB;
}
leaf p_max {
type decimal64 {
fraction-digits 2;
}
units dBm;
}
leaf type_def {
type identityref{
base edfa-type-def;
}
}
leaf raman {
type boolean;
}
leaf out_voa_auto{
type boolean ;
description "auto_design feature to optimize the amplifier output VOA. If true, output VOA is present
and will be used to push amplifier gain to its maximum, within EOL power margins.";
}
leaf in_voa_auto{
type boolean ;
description "auto_design feature to optimize the amplifier input VOA. If true, input VOA is present.
TODO: code the function in GNPy";
}
choice type_of_model {
case variable_gain {
when "type_def = 'gnpyeqpt:variable_gain'";
uses variable_gain ;
}
case fixed_gain{
when "type_def = 'gnpyeqpt:fixed_gain'";
uses fixed_gain;
}
case openroadm{
when "type_def = 'gnpyeqpt:openroadm'";
uses openroadm;
}
case dual_stage {
when "type_def = 'gnpyeqpt:dual_stage'";
uses dual-stage ;
}
case multi_band {
when "type_def = 'gnpyeqpt:multi_band'";
uses multi_band ;
}
case advanced_model {
when "type_def = 'gnpyeqpt:advanced_model'";
uses advanced_model;
}
}
}
grouping common-fiber {
description "common parameters for fiber and raman fiber";
leaf type_variety {
type string ;
description "a unique name to ID the fiber in the JSON or Excel template topology input file";
}
leaf dispersion{
type decimal64 {
fraction-digits 8;
}
units s.m-1.m-1;
}
leaf gamma{
type decimal64 {
fraction-digits 8;
}
units w-1.m-1 ;
description "2pi.n2/(lambda*Aeff) (w-2.m-1)";
}
leaf pmd_coef{
type decimal64 {
fraction-digits 18;
}
units s.sqrt(m)-1;
}
leaf effective_area{
type decimal64 {
fraction-digits 14;
}
units m-2;
}
}
grouping range {
leaf min_value {
type decimal64 {
fraction-digits 2;
}
}
leaf max_value {
type decimal64 {
fraction-digits 2;
}
}
leaf step {
type decimal64 {
fraction-digits 2;
}
}
}
grouping eqpt{
list Edfa {
config false ;
key type_variety;
leaf type_variety {
type string;
description "a unique name to ID the amplifier in the JSON/Excel template topology input file";
}
leaf-list other_name {
type string;
description "a list of alternative names for the equipment";
}
leaf f_min {
type decimal64 {
fraction-digits 1;
}
}
leaf f_max {
type decimal64 {
fraction-digits 1;
} }
uses edfa-common;
}
grouping frequency-range {
description
"This grouping defines the lower and upper bounds of a
frequency range (e.g., a band).
This grouping SHOULD NOT be used to define a frequency slot,
which SHOULD be defined using the n and m values instead.
copied from ietf-layer0-types except for units which must be Hz";
leaf lower-frequency {
type union {
type decimal64 {
fraction-digits 2;
range "0..max";
}
type empty;
}
units Hz;
mandatory true;
description
"The lower frequency boundary of the
frequency range.";
}
leaf upper-frequency {
type union {
type decimal64 {
fraction-digits 2;
range "0..max";
}
type empty;
}
units Hz;
must '. > ../lower-frequency' {
error-message
"The upper frequency must be greater than the lower
frequency.";
}
mandatory true;
description
"The upper frequency boundary of the
frequency range.";
}
}
list Fiber {
config false ;
key type_variety;
uses common-fiber;
}
list RamanFiber {
config false ;
uses common-fiber;
container raman_efficiency {
leaf-list cr {
type decimal64 {
fraction-digits 9;
}
}
leaf-list frequency_offset {
type decimal64 {
fraction-digits 2;
}
}
}
}
list Span {
config false ;
leaf power_mode {
type boolean ;
}
container delta_power_range_dict_db {
uses range ;
}
leaf max_length {
type decimal64 {
fraction-digits 2;
}
units km;
default 150.0 ;
}
leaf max_loss {
type decimal64 {
fraction-digits 2;
}
units dB;
}
leaf max_fiber_lineic_loss_for_raman {
type decimal64 {
fraction-digits 2;
}
units dB.km-1;
}
leaf target_extended_gain {
type decimal64 {
fraction-digits 2;
}
units dB;
}
leaf length_units{
type string ;
default "km";
}
leaf padding{
type decimal64 {
fraction-digits 2;
}
default 10.0 ;
}
leaf EOL{
type decimal64 {
fraction-digits 2;
}
default 0.0 ;
}
leaf con_in{
type decimal64 {
fraction-digits 2;
}
default 0.0 ;
}
leaf con_out{
type decimal64 {
fraction-digits 2;
}
default 0.0 ;
}
}
list Roadm {
config false ;
leaf type_variety {
type string;
}
leaf target_pch_out_db {
type decimal64 {
fraction-digits 2;
}
}
leaf target_psd_out_mWperGHz {
type decimal64 {
fraction-digits 2;
}
}
leaf target_out_mWperSlotWidth {
type decimal64 {
fraction-digits 2;
}
}
leaf add_drop_osnr {
type decimal64 {
fraction-digits 2;
}
}
leaf pmd {
type decimal64 {
fraction-digits 15;
}
}
leaf pdl {
type decimal64 {
fraction-digits 2;
}
}
container restrictions {
leaf-list preamp_variety_list {
type string;
}
leaf-list booster_variety_list {
type string;
}
}
list roadm-path-impairments {
key "roadm-path-impairments-id";
config false;
description
"The set of optical impairments related to a ROADM path.";
leaf roadm-path-impairments-id {
type uint32;
description "index of the ROADM path-impairment list";
}
choice impairment-type {
description "type path impairment";
case roadm-express-path {
list roadm-express-path {
description
"The list of optical impairments on a ROADM express
path for different frequency ranges.
Two elements in the list must not have the same range
or overlapping ranges.";
container frequency-range {
description
"The frequency range for which these optical
impairments apply.";
uses frequency-range;
}
// todo: augment express to allow transit OSNR//
uses oit:roadm-express-path;
}
}
case roadm-add-path {
list roadm-add-path {
description
"The list of optical impairments on a ROADM add
path for different frequency ranges.
Two elements in the list must not have the same range
or overlapping ranges.";
container frequency-range {
description
"The frequency range for which these optical
impairments apply.";
uses frequency-range;
}
uses oit:roadm-add-path;
}
}
case roadm-drop-path {
list roadm-drop-path {
description
"The list of optical impairments on a ROADM add
path for different frequency ranges.
Two elements in the list must not have the same range
or overlapping ranges.";
container frequency-range {
description
"The frequency range for which these optical
impairments apply.";
uses frequency-range;
}
uses oit:roadm-drop-path;
}
}
}
} // list path impairments
}
list SI {
config false ;
leaf f_min {
type decimal64 {
fraction-digits 2;
}
}
leaf f_max {
type decimal64 {
fraction-digits 2;
}
}
leaf baud_rate {
type decimal64 {
fraction-digits 2;
}
}
leaf spacing {
type decimal64 {
fraction-digits 2;
}
}
leaf power_dbm {
type decimal64 {
fraction-digits 2;
}
}
container power_range_dict_db {
uses range;
}
leaf roll_off {
type decimal64 {
fraction-digits 2;
}
}
leaf tx_osnr {
type decimal64 {
fraction-digits 2;
}
}
leaf tx_power_dbm {
type decimal64 {
fraction-digits 2;
}
}
leaf type_variety {
type string ;
description "a unique name to ID the SI band";
}
leaf sys_margins {
type decimal64 {
fraction-digits 2;
}
}
}
list Transceiver {
config false ;
leaf type_variety {
type string ;
description "a unique name to ID the transceiver in the JSON or Excel template topology input file";
}
leaf-list other_name {
type string;
description "a list of alternative names for the equipment";
}
leaf comment {
type string;
description "free string";
}
container frequency {
leaf min {
type decimal64 {
fraction-digits 2;
}
units Hz ;
}
leaf max {
type decimal64 {
fraction-digits 2;
}
units Hz ;
}
description "Min/max frequency of transponder eg 191.35e12 and 196.1e12";
}
list mode {
config false ;
leaf format {
type string ;
description "unique name of the mode";
}
leaf-list other_name {
type string;
description "a list of alternative names for the mode";
}
leaf baud_rate {
type decimal64 {
fraction-digits 2;
}
units baud ;
description "baud_rate";
}
leaf OSNR {
type decimal64 {
fraction-digits 2;
}
units dB ;
description "min required OSNR in 0.1nm (dB)";
}
leaf tx_osnr {
type decimal64 {
fraction-digits 2;
}
units dB ;
description "min required OSNR in 0.1nm (dB)";
}
leaf min_spacing {
type decimal64 {
fraction-digits 2;
}
units GHz ;
description "...";
}
leaf bit_rate {
type decimal64 {
fraction-digits 2;
}
units bit/s ;
description "bit rate";
}
leaf roll_off {
type union {
type decimal64 {
fraction-digits 2;
}
type empty;
}
description "...";
}
leaf cost {
type decimal64 {
fraction-digits 2;
}
description "arbitrary unit";
}
list penalties {
leaf chromatic_dispersion {
type decimal64 {
fraction-digits 2;
}
description "chromatic dispersion";
}
leaf pmd {
type decimal64 {
fraction-digits 15;
}
description "Polarization mode dispersion";
}
leaf pdl {
type decimal64 {
fraction-digits 2;
}
description "Polarization dependant loss";
}
leaf penalty_value {
type decimal64 {
fraction-digits 2;
}
}
}
leaf equalization_offset_db {
type decimal64 {
fraction-digits 4;
}
description "Power offset for equalizing this mode in ROADM compared to reference channel";
}
leaf equalization_slot_width {
type decimal64 {
fraction-digits 2;
}
description "slot width used for equalization instead of min_spacing in case of
equalization per slot width";
}
}
}
}
augment "/gnpyeqpt:equipment/gnpyeqpt:Roadm/gnpyeqpt:roadm-path-impairments/"
+ "gnpyeqpt:impairment-type/gnpyeqpt:roadm-express-path/"
+ "gnpyeqpt:roadm-express-path" {
leaf roadm-osnr {
type l0-types:snr-or-null;
description
"Optical Signal-to-Noise Ratio (OSNR).
If the express path contains an integrated amplifier,
this reflects its OSNR contribution.";
}
}
container equipment {
description
"Describe the equipment library of gnpy release 2.6";
uses eqpt;
}
}