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: contact: contact: "; 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; } }