1 module gnpy-path-computation-simplified {
7 import ietf-yang-types {
11 import ietf-inet-types {
15 "Telecom Infra Project OOPT PSE Working Group";
18 "WG Web: <https://github.com/Telecominfraproject/oopt-gnpy>
19 contact: <mailto:ahmed.triki@orange.com>
20 contact: <mailto:esther.lerouzic@orange.com>
23 description "YANG model for gnpy path computation simplified for transportPCE";
25 revision "2020-09-09" {
26 description "remove key from route-object-include-exclude";
29 revision "2020-02-02" {
30 description "second draft with detailed blocking reasons";
31 reference "YANG model for path computation with gnpy inputs";
34 grouping effective-freq-slot{
35 /* content copied from ietf-flexi-grid-media-channel, because only M and N are needed
36 from the initial grouping.
38 description "The effective frequency slot is an attribute
39 of a media channel and, being a frequency slot, it is
40 described by its nominal central frequency and slot
46 "Is used to determine the Nominal Central
47 Frequency. The set of nominal central frequencies
48 can be built using the following expression:
49 f = 193.1 THz + n x 0.00625 THz,
50 where 193.1 THz is ITU-T ''anchor frequency'' for
51 transmission over the C band, n is a positive or
52 negative integer including 0.";
58 "Is used to determine the slot width. A slot width
59 is constrained to be M x SWG (that is, M x 12.5 GHz),
60 where M is an integer greater than or equal to 1.";
65 grouping gnpy-specific-parameters{
67 "This grouping defines the gnpy specific parameters for requests.";
72 "Data plane technology type.";
77 description "name of the transponder type (to be read from equipment library";
82 description "name of the transponder mode (to be read from equipment library";
85 list effective-freq-slot {
87 uses effective-freq-slot ;
96 "It is the spacing between channels assuming full load with
97 same channels as the requested one. multiple of 12.5 GHz";
100 leaf max-nb-of-channel{
102 description "Nb of channel to take into account for the full load case.
111 description "optical power setting to be used for the propagation";
120 description "Capacity required";
124 identity SNR-bandwidth {
125 base path-metric-type;
127 "A metric that records SNR in signal bandwidth";
130 identity OSNR-bandwidth {
131 base path-metric-type;
133 "A metric that records OSNR in signal bandwidth";
137 base path-metric-type;
139 "A metric that records SNR in 0.1nm";
142 identity OSNR-0.1nm {
143 base path-metric-type;
145 "A metric that records OSNR in 0.1nm";
148 identity reference_power {
149 base path-metric-type;
154 identity path_bandwidth {
155 base path-metric-type;
160 grouping transponder{
161 leaf transponder-type {
166 leaf transponder-mode {
173 grouping hop-attribute{
175 "This grouping defines the hop attribute parameters for request or response";
178 container transponder{
183 container regenerator{
191 container optical-power{
197 description "hop output (input??) power";
205 identity path-metric-type {
207 "Base identity for path metric type";
210 identity route-usage-type {
212 "Base identity for route usage";
215 identity route-include-ero {
216 base route-usage-type;
218 "Include ERO from route";
221 identity route-exclude-ero {
222 base route-usage-type;
224 "Exclude ERO from route";
227 identity route-exclude-srlg {
228 base route-usage-type;
230 "Exclude SRLG from route";
233 typedef te-hop-type {
237 "loose hop in an explicit path";
241 "strict hop in an explicit path";
245 "enumerated type for specifying loose or strict
247 reference "RFC3209: section-4.3.2";
250 typedef te-path-disjointness {
254 description "Node disjoint.";
258 description "Link disjoint.";
262 description "SRLG (Shared Risk Link Group) disjoint.";
266 "Type of the resource disjointness for a TE tunnel path.";
268 "RFC4872: RSVP-TE Extensions in Support of End-to-End
269 Generalized Multi-Protocol Label Switching (GMPLS)
271 } // te-path-disjointness
274 type inet:ip-address;
276 "An identifier for a node in a topology.
277 The identifier is represented as 32-bit unsigned integer in
278 the dotted-quad notation.
279 This attribute is mapped to Router ID in
280 RFC3630, RFC5329, RFC5305, and RFC6119.";
285 type uint32; // Unnumbered
286 type inet:ip-address; // IPv4 or IPv6 address
289 "An identifier for a TE link endpoint on a node.
290 This attribute is mapped to local or remote link identifier in
291 RFC3630 and RFC5305.";
294 typedef accumulated-metric-type {
302 "type useable for accumulative-value";
305 grouping path-route-objects {
307 "List of EROs to be included or excluded when performing
308 the path computation.";
309 container explicit-route-objects {
311 "Container for the route object list";
312 list route-object-include-exclude {
314 "List of explicit route objects to include or
315 exclude in path computation";
316 leaf explicit-route-usage {
318 base route-usage-type;
320 description "Explicit-route usage.";
322 uses explicit-route-hop ;
327 grouping generic-path-disjointness {
328 description "Path disjointness grouping";
330 type te-path-disjointness;
332 "The type of resource disjointness.
333 Under primary path, disjointness level applies to
334 all secondary LSPs. Under secondary, disjointness
335 level overrides the one under primary";
339 grouping common-path-constraints-attributes {
341 "Common path constraints configuration grouping";
342 uses common-constraints_config;
345 grouping generic-path-constraints {
347 "Global named path constraints configuration
349 container path-constraints {
350 description "TE named path constraints container";
351 uses common-path-constraints-attributes;
356 grouping explicit-route-hop {
358 "The explicit route subobject grouping";
361 description "ERO subobject index";
365 "The explicit route subobject type";
367 container num-unnum-hop {
372 "The identifier of a node in the TE topology.";
378 "TE link termination point identifier. The combination
379 of TE link ID and the TE node ID is used to identify an
380 unnumbered TE link.";
384 description "strict or loose hop";
387 "Numbered and Unnumbered link/node explicit route
392 container label-hop {
393 description "Label hop type";
394 uses effective-freq-slot;
397 "The Label ERO subobject";
400 uses gnpypc:hop-attribute ;
405 grouping common-constraints_config {
407 "Common constraints grouping that can be set on
408 a constraint set or directly on the tunnel";
410 container te-bandwidth {
411 uses gnpy-specific-parameters ;
413 "A requested bandwidth to use for path computation";
417 grouping end-points {
419 "Common grouping to define the TE tunnel end-points";
422 type inet:ip-address;
423 description "TE tunnel source address.";
426 type inet:ip-address;
427 description "P2P tunnel destination address";
431 description "TE tunnel source termination point identifier.";
436 description "TE tunnel destination termination point
441 grouping synchronization-info {
442 description "Information for sync";
443 list synchronization {
444 key "synchronization-id";
445 description "sync list";
446 leaf synchronization-id {
452 "Synchronization VECtor";
457 "If this leaf is true, path computation process is free
458 to ignore svec content.
459 otherwise it must take into account this svec.";
461 uses generic-path-disjointness;
462 leaf-list request-id-number {
464 description "This list reports the set of M path computation requests that must be synchronized.";
470 grouping generic-path-properties {
471 description "TE generic path properties grouping";
472 container path-properties {
474 description "The TE path properties";
477 description "TE path metric type";
480 base path-metric-type;
482 description "TE path metric type";
484 leaf accumulative-value {
488 description "TE path metric accumulative value";
491 // container path-route-objects {
493 // "Container for the list of route objects either returned by
494 // the computation engine or actually used by an LSP";
495 // list path-route-object {
498 // "List of route objects either returned by the computation
499 // engine or actually used by an LSP";
500 // uses explicit-route-hop;
503 list path-route-objects {
505 "Container for the list of route objects either returned by
506 the computation engine or actually used by an LSP";
507 container path-route-object {
509 "List of route objects either returned by the computation
510 engine or actually used by an LSP";
511 uses explicit-route-hop;
518 uses generic-path-properties;
519 description "Path computation output information";
522 // adding some blocking reasons and info on path in case of blocking
524 grouping no-path-info {
525 description "no-path-info";
527 presence "Response without path information, due to failure
528 performing the path computation";
533 "returned blocking reasons:
536 NO_FEASIBLE_BAUDRATE_WITH_SPACING
537 NO_PATH_WITH_CONSTRAINT
543 uses generic-path-properties ;
544 description "if path computation cannot identify a path,
545 rpc returns no path.";
549 /* TODO : correct the following with good trees:
550 * te:tunnels-rpc/te:input/te:tunnel-info
551 * te:tunnels-rpc/te:output/te:result
556 description "request-list";
560 description "Each path computation request is uniquely identified by the request-id-number.";
565 description "Specify the bidirectionality of the path";
569 uses path-route-objects;
570 uses generic-path-constraints;
572 uses synchronization-info;
579 description "response";
583 "The list key that has to reuse request-id-number.";
585 choice response-type {
587 description "response-type";
593 description "Path computation service.";
601 "Describe the service file to connect to gnpy";