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-02-02" {
22 description "second draft with detailed blocking reasons";
23 reference "YANG model for path computation with gnpy inputs";
26 grouping effective-freq-slot{
27 /* content copied from ietf-flexi-grid-media-channel, because only M and N are needed
28 from the initial grouping.
30 description "The effective frequency slot is an attribute
31 of a media channel and, being a frequency slot, it is
32 described by its nominal central frequency and slot
38 "Is used to determine the Nominal Central
39 Frequency. The set of nominal central frequencies
40 can be built using the following expression:
41 f = 193.1 THz + n x 0.00625 THz,
42 where 193.1 THz is ITU-T ''anchor frequency'' for
43 transmission over the C band, n is a positive or
44 negative integer including 0.";
50 "Is used to determine the slot width. A slot width
51 is constrained to be M x SWG (that is, M x 12.5 GHz),
52 where M is an integer greater than or equal to 1.";
57 grouping gnpy-specific-parameters{
59 "This grouping defines the gnpy specific parameters for requests.";
64 "Data plane technology type.";
69 description "name of the transponder type (to be read from equipment library";
74 description "name of the transponder mode (to be read from equipment library";
77 list effective-freq-slot {
79 uses effective-freq-slot ;
88 "It is the spacing between channels assuming full load with
89 same channels as the requested one. multiple of 12.5 GHz";
92 leaf max-nb-of-channel{
94 description "Nb of channel to take into account for the full load case.
103 description "optical power setting to be used for the propagation";
112 description "Capacity required";
116 identity SNR-bandwidth {
117 base path-metric-type;
119 "A metric that records SNR in signal bandwidth";
122 identity OSNR-bandwidth {
123 base path-metric-type;
125 "A metric that records OSNR in signal bandwidth";
129 base path-metric-type;
131 "A metric that records SNR in 0.1nm";
134 identity OSNR-0.1nm {
135 base path-metric-type;
137 "A metric that records OSNR in 0.1nm";
140 identity reference_power {
141 base path-metric-type;
146 identity path_bandwidth {
147 base path-metric-type;
152 grouping transponder{
153 leaf transponder-type {
158 leaf transponder-mode {
165 grouping hop-attribute{
167 "This grouping defines the hop attribute parameters for request or response";
170 container transponder{
175 container regenerator{
183 container optical-power{
189 description "hop output (input??) power";
197 identity path-metric-type {
199 "Base identity for path metric type";
202 identity route-usage-type {
204 "Base identity for route usage";
207 identity route-include-ero {
208 base route-usage-type;
210 "Include ERO from route";
213 identity route-exclude-ero {
214 base route-usage-type;
216 "Exclude ERO from route";
219 identity route-exclude-srlg {
220 base route-usage-type;
222 "Exclude SRLG from route";
225 typedef te-hop-type {
229 "loose hop in an explicit path";
233 "strict hop in an explicit path";
237 "enumerated type for specifying loose or strict
239 reference "RFC3209: section-4.3.2";
242 typedef te-path-disjointness {
246 description "Node disjoint.";
250 description "Link disjoint.";
254 description "SRLG (Shared Risk Link Group) disjoint.";
258 "Type of the resource disjointness for a TE tunnel path.";
260 "RFC4872: RSVP-TE Extensions in Support of End-to-End
261 Generalized Multi-Protocol Label Switching (GMPLS)
263 } // te-path-disjointness
266 type inet:ip-address;
268 "An identifier for a node in a topology.
269 The identifier is represented as 32-bit unsigned integer in
270 the dotted-quad notation.
271 This attribute is mapped to Router ID in
272 RFC3630, RFC5329, RFC5305, and RFC6119.";
277 type uint32; // Unnumbered
278 type inet:ip-address; // IPv4 or IPv6 address
281 "An identifier for a TE link endpoint on a node.
282 This attribute is mapped to local or remote link identifier in
283 RFC3630 and RFC5305.";
286 typedef accumulated-metric-type {
294 "type useable for accumulative-value";
297 grouping path-route-objects {
299 "List of EROs to be included or excluded when performing
300 the path computation.";
301 container explicit-route-objects {
303 "Container for the route object list";
304 list route-object-include-exclude {
307 "List of explicit route objects to include or
308 exclude in path computation";
309 leaf explicit-route-usage {
311 base route-usage-type;
313 description "Explicit-route usage.";
315 uses explicit-route-hop ;
320 grouping generic-path-disjointness {
321 description "Path disjointness grouping";
323 type te-path-disjointness;
325 "The type of resource disjointness.
326 Under primary path, disjointness level applies to
327 all secondary LSPs. Under secondary, disjointness
328 level overrides the one under primary";
332 grouping common-path-constraints-attributes {
334 "Common path constraints configuration grouping";
335 uses common-constraints_config;
338 grouping generic-path-constraints {
340 "Global named path constraints configuration
342 container path-constraints {
343 description "TE named path constraints container";
344 uses common-path-constraints-attributes;
349 grouping explicit-route-hop {
351 "The explicit route subobject grouping";
354 description "ERO subobject index";
358 "The explicit route subobject type";
360 container num-unnum-hop {
365 "The identifier of a node in the TE topology.";
371 "TE link termination point identifier. The combination
372 of TE link ID and the TE node ID is used to identify an
373 unnumbered TE link.";
377 description "strict or loose hop";
380 "Numbered and Unnumbered link/node explicit route
385 container label-hop {
386 description "Label hop type";
387 uses effective-freq-slot;
390 "The Label ERO subobject";
393 uses gnpypc:hop-attribute ;
398 grouping common-constraints_config {
400 "Common constraints grouping that can be set on
401 a constraint set or directly on the tunnel";
403 container te-bandwidth {
404 uses gnpy-specific-parameters ;
406 "A requested bandwidth to use for path computation";
410 grouping end-points {
412 "Common grouping to define the TE tunnel end-points";
415 type inet:ip-address;
416 description "TE tunnel source address.";
419 type inet:ip-address;
420 description "P2P tunnel destination address";
424 description "TE tunnel source termination point identifier.";
429 description "TE tunnel destination termination point
434 grouping synchronization-info {
435 description "Information for sync";
436 list synchronization {
437 key "synchronization-id";
438 description "sync list";
439 leaf synchronization-id {
445 "Synchronization VECtor";
450 "If this leaf is true, path computation process is free
451 to ignore svec content.
452 otherwise it must take into account this svec.";
454 uses generic-path-disjointness;
455 leaf-list request-id-number {
457 description "This list reports the set of M path computation requests that must be synchronized.";
463 grouping generic-path-properties {
464 description "TE generic path properties grouping";
465 container path-properties {
467 description "The TE path properties";
470 description "TE path metric type";
473 base path-metric-type;
475 description "TE path metric type";
477 leaf accumulative-value {
481 description "TE path metric accumulative value";
484 // container path-route-objects {
486 // "Container for the list of route objects either returned by
487 // the computation engine or actually used by an LSP";
488 // list path-route-object {
491 // "List of route objects either returned by the computation
492 // engine or actually used by an LSP";
493 // uses explicit-route-hop;
496 list path-route-objects {
498 "Container for the list of route objects either returned by
499 the computation engine or actually used by an LSP";
500 container path-route-object {
502 "List of route objects either returned by the computation
503 engine or actually used by an LSP";
504 uses explicit-route-hop;
511 uses generic-path-properties;
512 description "Path computation output information";
515 // adding some blocking reasons and info on path in case of blocking
517 grouping no-path-info {
518 description "no-path-info";
520 presence "Response without path information, due to failure
521 performing the path computation";
526 "returned blocking reasons:
529 NO_FEASIBLE_BAUDRATE_WITH_SPACING
530 NO_PATH_WITH_CONSTRAINT
536 uses generic-path-properties ;
537 description "if path computation cannot identify a path,
538 rpc returns no path.";
542 /* TODO : correct the following with good trees:
543 * te:tunnels-rpc/te:input/te:tunnel-info
544 * te:tunnels-rpc/te:output/te:result
549 description "request-list";
553 description "Each path computation request is uniquely identified by the request-id-number.";
558 description "Specify the bidirectionality of the path";
562 uses path-route-objects;
563 uses generic-path-constraints;
565 uses synchronization-info;
572 description "response";
576 "The list key that has to reuse request-id-number.";
578 choice response-type {
580 description "response-type";
586 description "Path computation service.";
594 "Describe the service file to connect to gnpy";