1 module gnpy-path-computation-simplified {
7 import ietf-inet-types {
11 "Telecom Infra Project OOPT PSE Working Group";
14 "WG Web: <https://github.com/Telecominfraproject/oopt-gnpy>
15 contact: <mailto:ahmed.triki@orange.com>
16 contact: <mailto:esther.lerouzic@orange.com>
19 description "YANG model for gnpy path computation simplified for transportPCE";
21 revision "2020-09-09" {
22 description "remove key from route-object-include-exclude";
25 revision "2020-02-02" {
26 description "second draft with detailed blocking reasons";
27 reference "YANG model for path computation with gnpy inputs";
30 grouping effective-freq-slot{
31 /* content copied from ietf-flexi-grid-media-channel, because only M and N are needed
32 from the initial grouping.
34 description "The effective frequency slot is an attribute
35 of a media channel and, being a frequency slot, it is
36 described by its nominal central frequency and slot
42 "Is used to determine the Nominal Central
43 Frequency. The set of nominal central frequencies
44 can be built using the following expression:
45 f = 193.1 THz + n x 0.00625 THz,
46 where 193.1 THz is ITU-T ''anchor frequency'' for
47 transmission over the C band, n is a positive or
48 negative integer including 0.";
54 "Is used to determine the slot width. A slot width
55 is constrained to be M x SWG (that is, M x 12.5 GHz),
56 where M is an integer greater than or equal to 1.";
61 grouping gnpy-specific-parameters{
63 "This grouping defines the gnpy specific parameters for requests.";
68 "Data plane technology type.";
73 description "name of the transponder type (to be read from equipment library";
78 description "name of the transponder mode (to be read from equipment library";
81 list effective-freq-slot {
83 uses effective-freq-slot ;
92 "It is the spacing between channels assuming full load with
93 same channels as the requested one. multiple of 12.5 GHz";
96 leaf max-nb-of-channel{
98 description "Nb of channel to take into account for the full load case.
107 description "optical power setting to be used for the propagation";
116 description "Capacity required";
120 identity SNR-bandwidth {
121 base path-metric-type;
123 "A metric that records SNR in signal bandwidth";
126 identity OSNR-bandwidth {
127 base path-metric-type;
129 "A metric that records OSNR in signal bandwidth";
133 base path-metric-type;
135 "A metric that records SNR in 0.1nm";
138 identity OSNR-0.1nm {
139 base path-metric-type;
141 "A metric that records OSNR in 0.1nm";
144 identity reference_power {
145 base path-metric-type;
150 identity path_bandwidth {
151 base path-metric-type;
156 grouping transponder{
157 leaf transponder-type {
162 leaf transponder-mode {
169 grouping hop-attribute{
171 "This grouping defines the hop attribute parameters for request or response";
174 container transponder{
179 container regenerator{
187 container optical-power{
193 description "hop output (input??) power";
201 identity path-metric-type {
203 "Base identity for path metric type";
206 identity route-usage-type {
208 "Base identity for route usage";
211 identity route-include-ero {
212 base route-usage-type;
214 "Include ERO from route";
217 identity route-exclude-ero {
218 base route-usage-type;
220 "Exclude ERO from route";
223 identity route-exclude-srlg {
224 base route-usage-type;
226 "Exclude SRLG from route";
229 typedef te-hop-type {
233 "loose hop in an explicit path";
237 "strict hop in an explicit path";
241 "enumerated type for specifying loose or strict
243 reference "RFC3209: section-4.3.2";
246 typedef te-path-disjointness {
250 description "Node disjoint.";
254 description "Link disjoint.";
258 description "SRLG (Shared Risk Link Group) disjoint.";
262 "Type of the resource disjointness for a TE tunnel path.";
264 "RFC4872: RSVP-TE Extensions in Support of End-to-End
265 Generalized Multi-Protocol Label Switching (GMPLS)
267 } // te-path-disjointness
270 type inet:ip-address;
272 "An identifier for a node in a topology.
273 The identifier is represented as 32-bit unsigned integer in
274 the dotted-quad notation.
275 This attribute is mapped to Router ID in
276 RFC3630, RFC5329, RFC5305, and RFC6119.";
281 type uint32; // Unnumbered
282 type inet:ip-address; // IPv4 or IPv6 address
285 "An identifier for a TE link endpoint on a node.
286 This attribute is mapped to local or remote link identifier in
287 RFC3630 and RFC5305.";
290 typedef accumulated-metric-type {
298 "type useable for accumulative-value";
301 grouping path-route-objects {
303 "List of EROs to be included or excluded when performing
304 the path computation.";
305 container explicit-route-objects {
307 "Container for the route object list";
308 list route-object-include-exclude {
310 "List of explicit route objects to include or
311 exclude in path computation";
312 leaf explicit-route-usage {
314 base route-usage-type;
316 description "Explicit-route usage.";
318 uses explicit-route-hop ;
323 grouping generic-path-disjointness {
324 description "Path disjointness grouping";
326 type te-path-disjointness;
328 "The type of resource disjointness.
329 Under primary path, disjointness level applies to
330 all secondary LSPs. Under secondary, disjointness
331 level overrides the one under primary";
335 grouping common-path-constraints-attributes {
337 "Common path constraints configuration grouping";
338 uses common-constraints_config;
341 grouping generic-path-constraints {
343 "Global named path constraints configuration
345 container path-constraints {
346 description "TE named path constraints container";
347 uses common-path-constraints-attributes;
352 grouping explicit-route-hop {
354 "The explicit route subobject grouping";
357 description "ERO subobject index";
361 "The explicit route subobject type";
363 container num-unnum-hop {
368 "The identifier of a node in the TE topology.";
374 "TE link termination point identifier. The combination
375 of TE link ID and the TE node ID is used to identify an
376 unnumbered TE link.";
380 description "strict or loose hop";
383 "Numbered and Unnumbered link/node explicit route
388 container label-hop {
389 description "Label hop type";
390 uses effective-freq-slot;
393 "The Label ERO subobject";
396 uses gnpypc:hop-attribute ;
401 grouping common-constraints_config {
403 "Common constraints grouping that can be set on
404 a constraint set or directly on the tunnel";
406 container te-bandwidth {
407 uses gnpy-specific-parameters ;
409 "A requested bandwidth to use for path computation";
413 grouping end-points {
415 "Common grouping to define the TE tunnel end-points";
418 type inet:ip-address;
419 description "TE tunnel source address.";
422 type inet:ip-address;
423 description "P2P tunnel destination address";
427 description "TE tunnel source termination point identifier.";
432 description "TE tunnel destination termination point
437 grouping synchronization-info {
438 description "Information for sync";
439 list synchronization {
440 key "synchronization-id";
441 description "sync list";
442 leaf synchronization-id {
448 "Synchronization VECtor";
453 "If this leaf is true, path computation process is free
454 to ignore svec content.
455 otherwise it must take into account this svec.";
457 uses generic-path-disjointness;
458 leaf-list request-id-number {
460 description "This list reports the set of M path computation requests that must be synchronized.";
466 grouping generic-path-properties {
467 description "TE generic path properties grouping";
468 container path-properties {
470 description "The TE path properties";
473 description "TE path metric type";
476 base path-metric-type;
478 description "TE path metric type";
480 leaf accumulative-value {
484 description "TE path metric accumulative value";
487 // container path-route-objects {
489 // "Container for the list of route objects either returned by
490 // the computation engine or actually used by an LSP";
491 // list path-route-object {
494 // "List of route objects either returned by the computation
495 // engine or actually used by an LSP";
496 // uses explicit-route-hop;
499 list path-route-objects {
501 "Container for the list of route objects either returned by
502 the computation engine or actually used by an LSP";
503 container path-route-object {
505 "List of route objects either returned by the computation
506 engine or actually used by an LSP";
507 uses explicit-route-hop;
514 uses generic-path-properties;
515 description "Path computation output information";
518 // adding some blocking reasons and info on path in case of blocking
520 grouping no-path-info {
521 description "no-path-info";
523 presence "Response without path information, due to failure
524 performing the path computation";
529 "returned blocking reasons:
532 NO_FEASIBLE_BAUDRATE_WITH_SPACING
533 NO_PATH_WITH_CONSTRAINT
539 uses generic-path-properties ;
540 description "if path computation cannot identify a path,
541 rpc returns no path.";
545 /* TODO : correct the following with good trees:
546 * te:tunnels-rpc/te:input/te:tunnel-info
547 * te:tunnels-rpc/te:output/te:result
552 description "request-list";
556 description "Each path computation request is uniquely identified by the request-id-number.";
561 description "Specify the bidirectionality of the path";
565 uses path-route-objects;
566 uses generic-path-constraints;
568 uses synchronization-info;
575 description "response";
579 "The list key that has to reuse request-id-number.";
581 choice response-type {
583 description "response-type";
589 description "Path computation service.";
597 "Describe the service file to connect to gnpy";