1 module gnpy-path-computation-simplified {
8 "Telecom Infra Project OOPT PSE Working Group";
11 "WG Web: <https://github.com/Telecominfraproject/oopt-gnpy>
12 contact: <mailto:ahmed.triki@orange.com>
13 contact: <mailto:esther.lerouzic@orange.com>
17 "YANG model for gnpy path computation simplified -
18 The license used for all the yang files of GNPy is BSD 3-Clause License
22 Copyright (c) 2018, Telecom Infra Project
25 Redistribution and use in source and binary forms, with or without
26 modification, are permitted provided that the following conditions are met:
28 * Redistributions of source code must retain the above copyright notice, this
29 list of conditions and the following disclaimer.
31 * Redistributions in binary form must reproduce the above copyright notice,
32 this list of conditions and the following disclaimer in the documentation
33 and/or other materials provided with the distribution.
35 * Neither the name of the copyright holder nor the names of its
36 contributors may be used to endorse or promote products derived from
37 this software without specific prior written permission.
39 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
40 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
42 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
43 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
44 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
45 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
46 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
47 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
48 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.";
52 "change fraction digits from 2 to 6 for accumulative-value leaf, from 5 to 6 for output-power leaf";
54 "YANG model for api input for path computation with gnpy";
59 "draft for GNPy4TPCE preversion - non official version relevant for v2.4 GNPy file format";
61 "YANG model for api input for path computation with gnpy";
66 "draft for experimental/2020-candi";
68 "YANG model for path computation with gnpy inputs";
73 "first draft for GNPy4TPCE preversion - non official version relevant for v1.2 GNPy file format";
75 "YANG model for api input for path computation with gnpy";
78 grouping effective-freq-slot{
79 /* content copied from ietf-flexi-grid-media-channel, because only M and N are needed
80 from the initial grouping.
82 description "The effective frequency slot is an attribute
83 of a media channel and, being a frequency slot, it is
84 described by its nominal central frequency and slot
90 "Is used to determine the Nominal Central
91 Frequency. The set of nominal central frequencies
92 can be built using the following expression:
93 f = 193.1 THz + n x 0.00625 THz,
94 where 193.1 THz is ITU-T ''anchor frequency'' for
95 transmission over the C band, n is a positive or
96 negative integer including 0.";
102 "Is used to determine the slot width. A slot width
103 is constrained to be M x SWG (that is, M x 12.5 GHz),
104 where M is an integer greater than or equal to 1.";
109 grouping gnpy-specific-parameters{
111 "This grouping defines the gnpy specific parameters for requests.";
114 default "flexi-grid";
116 "Data plane technology type.";
121 description "name of the transponder type (to be read from equipment library";
126 description "name of the transponder mode (to be read from equipment library";
129 list effective-freq-slot {
131 uses effective-freq-slot ;
140 "It is the spacing between channels assuming full load with
141 same channels as the requested one. multiple of 12.5 GHz";
144 leaf max-nb-of-channel{
146 description "Nb of channel to take into account for the full load case.
155 description "optical power setting to be used for the propagation";
164 description "Capacity required";
168 identity SNR-bandwidth {
169 base path-metric-type;
171 "A metric that records SNR in signal bandwidth";
174 identity OSNR-bandwidth {
175 base path-metric-type;
177 "A metric that records OSNR in signal bandwidth";
181 base path-metric-type;
183 "A metric that records SNR in 0.1nm";
186 identity OSNR-0.1nm {
187 base path-metric-type;
189 "A metric that records OSNR in 0.1nm";
192 identity reference_power {
193 base path-metric-type;
198 identity path_bandwidth {
199 base path-metric-type;
204 grouping transponder{
205 leaf transponder-type {
210 leaf transponder-mode {
217 grouping hop-attribute{
219 "This grouping defines the hop attribute parameters for request or response";
222 container transponder{
227 container regenerator{
235 container optical-power{
241 description "not used yet. hop output (input??) power";
249 identity path-metric-type {
251 "Base identity for path metric type";
254 identity route-usage-type {
256 "Base identity for route usage";
259 identity route-include-ero {
260 base route-usage-type;
262 "Include ERO from route";
265 identity route-exclude-ero {
266 base route-usage-type;
268 "Exclude ERO from route";
271 identity route-exclude-srlg {
272 base route-usage-type;
274 "Exclude SRLG from route";
277 typedef te-hop-type {
281 "loose hop in an explicit path";
285 "strict hop in an explicit path";
289 "enumerated type for specifying loose or strict
291 reference "RFC3209: section-4.3.2";
294 typedef te-path-disjointness {
298 description "Node disjoint.";
302 description "Link disjoint.";
306 description "SRLG (Shared Risk Link Group) disjoint.";
310 "Type of the resource disjointness for a TE tunnel path.";
312 "RFC4872: RSVP-TE Extensions in Support of End-to-End
313 Generalized Multi-Protocol Label Switching (GMPLS)
315 } // te-path-disjointness
317 typedef accumulated-metric-type {
325 "type useable for accumulative-value";
328 grouping path-route-objects {
330 "List of EROs to be included or excluded when performing
331 the path computation.";
332 container explicit-route-objects {
334 "Container for the route object list";
335 list route-object-include-exclude {
337 "List of explicit route objects to include or
338 exclude in path computation";
339 leaf explicit-route-usage {
341 base route-usage-type;
343 description "Explicit-route usage.";
346 uses explicit-route-hop ;
351 grouping generic-path-disjointness {
352 description "Path disjointness grouping";
354 type te-path-disjointness;
356 "The type of resource disjointness.
357 Under primary path, disjointness level applies to
358 all secondary LSPs. Under secondary, disjointness
359 level overrides the one under primary";
363 grouping common-path-constraints-attributes {
365 "Common path constraints configuration grouping";
366 uses common-constraints_config;
369 grouping generic-path-constraints {
371 "Global named path constraints configuration
373 container path-constraints {
374 description "TE named path constraints container";
375 uses common-path-constraints-attributes;
380 grouping explicit-route-hop {
382 "The explicit route subobject grouping";
385 description "ERO subobject index";
389 "The explicit route subobject type";
391 container num-unnum-hop {
396 "The identifier of a node in the TE topology.";
402 "TE link termination point identifier. The combination
403 of TE link ID and the TE node ID is used to identify an
404 unnumbered TE link.";
408 description "strict or loose hop";
411 "Numbered and Unnumbered link/node explicit route
416 container label-hop {
417 description "Label hop type";
418 uses effective-freq-slot;
421 "The Label ERO subobject";
424 uses gnpypc:hop-attribute ;
429 grouping common-constraints_config {
431 "Common constraints grouping that can be set on
432 a constraint set or directly on the tunnel";
434 container te-bandwidth {
435 uses gnpy-specific-parameters ;
437 "A requested bandwidth to use for path computation";
441 grouping end-points {
443 "Common grouping to define the TE tunnel end-points";
447 description "TE tunnel source address.";
451 description "P2P tunnel destination address";
455 description "TE tunnel source termination point identifier.";
459 description "TE tunnel destination termination point
464 grouping synchronization-info {
465 description "Information for sync";
466 list synchronization {
467 key "synchronization-id";
468 description "sync list";
469 leaf synchronization-id {
475 "Synchronization VECtor";
480 "If this leaf is true, path computation process is free
481 to ignore svec content.
482 otherwise it must take into account this svec.";
484 uses generic-path-disjointness;
485 leaf-list request-id-number {
487 description "This list reports the set of M path computation requests that must be synchronized.";
493 grouping path-metric {
494 description "TE path metric type";
497 base path-metric-type;
499 description "TE path metric type";
501 leaf accumulative-value {
505 description "TE path metric accumulative value";
508 grouping generic-path-properties {
509 description "TE generic path properties grouping";
510 container path-properties {
512 description "The TE path properties";
517 list z-a-path-metric {
521 list path-route-objects {
523 "Container for the list of route objects either returned by
524 the computation engine or actually used by an LSP";
525 container path-route-object {
527 "List of route objects either returned by the computation
528 engine or actually used by an LSP";
529 uses explicit-route-hop;
536 uses generic-path-properties;
537 description "Path computation output information";
540 // adding some blocking reasons and info on path in case of blocking
542 grouping no-path-info {
543 description "no-path-info";
545 presence "Response without path information, due to failure
546 performing the path computation";
551 "returned blocking reasons:
554 NO_FEASIBLE_BAUDRATE_WITH_SPACING
555 NO_PATH_WITH_CONSTRAINT
561 uses generic-path-properties ;
562 description "if path computation cannot identify a path,
563 rpc returns no path.";
570 description "request-list";
574 description "Each path computation request is uniquely identified by the request-id-number.";
579 description "Specify the bidirectionality of the path";
583 uses path-route-objects;
584 uses generic-path-constraints;
586 uses synchronization-info;
593 description "response";
597 "The list key that has to reuse request-id-number.";
599 choice response-type {
601 description "response-type";
607 description "Path computation service.";
617 "Describe the response object to gnpy";