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 "draft for GNPy4TPCE preversion - non official version relevant for v2.4 GNPy file format";
54 "YANG model for api input for path computation with gnpy";
59 "draft for experimental/2020-candi";
61 "YANG model for path computation with gnpy inputs";
66 "first draft for GNPy4TPCE preversion - non official version relevant for v1.2 GNPy file format";
68 "YANG model for api input for path computation with gnpy";
71 grouping effective-freq-slot{
72 /* content copied from ietf-flexi-grid-media-channel, because only M and N are needed
73 from the initial grouping.
75 description "The effective frequency slot is an attribute
76 of a media channel and, being a frequency slot, it is
77 described by its nominal central frequency and slot
83 "Is used to determine the Nominal Central
84 Frequency. The set of nominal central frequencies
85 can be built using the following expression:
86 f = 193.1 THz + n x 0.00625 THz,
87 where 193.1 THz is ITU-T ''anchor frequency'' for
88 transmission over the C band, n is a positive or
89 negative integer including 0.";
95 "Is used to determine the slot width. A slot width
96 is constrained to be M x SWG (that is, M x 12.5 GHz),
97 where M is an integer greater than or equal to 1.";
102 grouping gnpy-specific-parameters{
104 "This grouping defines the gnpy specific parameters for requests.";
107 default "flexi-grid";
109 "Data plane technology type.";
114 description "name of the transponder type (to be read from equipment library";
119 description "name of the transponder mode (to be read from equipment library";
122 list effective-freq-slot {
124 uses effective-freq-slot ;
133 "It is the spacing between channels assuming full load with
134 same channels as the requested one. multiple of 12.5 GHz";
137 leaf max-nb-of-channel{
139 description "Nb of channel to take into account for the full load case.
148 description "optical power setting to be used for the propagation";
157 description "Capacity required";
161 identity SNR-bandwidth {
162 base path-metric-type;
164 "A metric that records SNR in signal bandwidth";
167 identity OSNR-bandwidth {
168 base path-metric-type;
170 "A metric that records OSNR in signal bandwidth";
174 base path-metric-type;
176 "A metric that records SNR in 0.1nm";
179 identity OSNR-0.1nm {
180 base path-metric-type;
182 "A metric that records OSNR in 0.1nm";
185 identity reference_power {
186 base path-metric-type;
191 identity path_bandwidth {
192 base path-metric-type;
197 grouping transponder{
198 leaf transponder-type {
203 leaf transponder-mode {
210 grouping hop-attribute{
212 "This grouping defines the hop attribute parameters for request or response";
215 container transponder{
220 container regenerator{
228 container optical-power{
234 description "not used yet. hop output (input??) power";
242 identity path-metric-type {
244 "Base identity for path metric type";
247 identity route-usage-type {
249 "Base identity for route usage";
252 identity route-include-ero {
253 base route-usage-type;
255 "Include ERO from route";
258 identity route-exclude-ero {
259 base route-usage-type;
261 "Exclude ERO from route";
264 identity route-exclude-srlg {
265 base route-usage-type;
267 "Exclude SRLG from route";
270 typedef te-hop-type {
274 "loose hop in an explicit path";
278 "strict hop in an explicit path";
282 "enumerated type for specifying loose or strict
284 reference "RFC3209: section-4.3.2";
287 typedef te-path-disjointness {
291 description "Node disjoint.";
295 description "Link disjoint.";
299 description "SRLG (Shared Risk Link Group) disjoint.";
303 "Type of the resource disjointness for a TE tunnel path.";
305 "RFC4872: RSVP-TE Extensions in Support of End-to-End
306 Generalized Multi-Protocol Label Switching (GMPLS)
308 } // te-path-disjointness
310 typedef accumulated-metric-type {
318 "type useable for accumulative-value";
321 grouping path-route-objects {
323 "List of EROs to be included or excluded when performing
324 the path computation.";
325 container explicit-route-objects {
327 "Container for the route object list";
328 list route-object-include-exclude {
330 "List of explicit route objects to include or
331 exclude in path computation";
332 leaf explicit-route-usage {
334 base route-usage-type;
336 description "Explicit-route usage.";
339 uses explicit-route-hop ;
344 grouping generic-path-disjointness {
345 description "Path disjointness grouping";
347 type te-path-disjointness;
349 "The type of resource disjointness.
350 Under primary path, disjointness level applies to
351 all secondary LSPs. Under secondary, disjointness
352 level overrides the one under primary";
356 grouping common-path-constraints-attributes {
358 "Common path constraints configuration grouping";
359 uses common-constraints_config;
362 grouping generic-path-constraints {
364 "Global named path constraints configuration
366 container path-constraints {
367 description "TE named path constraints container";
368 uses common-path-constraints-attributes;
373 grouping explicit-route-hop {
375 "The explicit route subobject grouping";
378 description "ERO subobject index";
382 "The explicit route subobject type";
384 container num-unnum-hop {
389 "The identifier of a node in the TE topology.";
395 "TE link termination point identifier. The combination
396 of TE link ID and the TE node ID is used to identify an
397 unnumbered TE link.";
401 description "strict or loose hop";
404 "Numbered and Unnumbered link/node explicit route
409 container label-hop {
410 description "Label hop type";
411 uses effective-freq-slot;
414 "The Label ERO subobject";
417 uses gnpypc:hop-attribute ;
422 grouping common-constraints_config {
424 "Common constraints grouping that can be set on
425 a constraint set or directly on the tunnel";
427 container te-bandwidth {
428 uses gnpy-specific-parameters ;
430 "A requested bandwidth to use for path computation";
434 grouping end-points {
436 "Common grouping to define the TE tunnel end-points";
440 description "TE tunnel source address.";
444 description "P2P tunnel destination address";
448 description "TE tunnel source termination point identifier.";
452 description "TE tunnel destination termination point
457 grouping synchronization-info {
458 description "Information for sync";
459 list synchronization {
460 key "synchronization-id";
461 description "sync list";
462 leaf synchronization-id {
468 "Synchronization VECtor";
473 "If this leaf is true, path computation process is free
474 to ignore svec content.
475 otherwise it must take into account this svec.";
477 uses generic-path-disjointness;
478 leaf-list request-id-number {
480 description "This list reports the set of M path computation requests that must be synchronized.";
486 grouping path-metric {
487 description "TE path metric type";
490 base path-metric-type;
492 description "TE path metric type";
494 leaf accumulative-value {
498 description "TE path metric accumulative value";
501 grouping generic-path-properties {
502 description "TE generic path properties grouping";
503 container path-properties {
505 description "The TE path properties";
510 list z-a-path-metric {
514 list path-route-objects {
516 "Container for the list of route objects either returned by
517 the computation engine or actually used by an LSP";
518 container path-route-object {
520 "List of route objects either returned by the computation
521 engine or actually used by an LSP";
522 uses explicit-route-hop;
529 uses generic-path-properties;
530 description "Path computation output information";
533 // adding some blocking reasons and info on path in case of blocking
535 grouping no-path-info {
536 description "no-path-info";
538 presence "Response without path information, due to failure
539 performing the path computation";
544 "returned blocking reasons:
547 NO_FEASIBLE_BAUDRATE_WITH_SPACING
548 NO_PATH_WITH_CONSTRAINT
554 uses generic-path-properties ;
555 description "if path computation cannot identify a path,
556 rpc returns no path.";
563 description "request-list";
567 description "Each path computation request is uniquely identified by the request-id-number.";
572 description "Specify the bidirectionality of the path";
576 uses path-route-objects;
577 uses generic-path-constraints;
579 uses synchronization-info;
586 description "response";
590 "The list key that has to reuse request-id-number.";
592 choice response-type {
594 description "response-type";
600 description "Path computation service.";
610 "Describe the response object to gnpy";