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 "2019-05-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 {
311 "List of explicit route objects to include or
312 exclude in path computation";
313 leaf explicit-route-usage {
315 base route-usage-type;
317 description "Explicit-route usage.";
319 uses explicit-route-hop ;
324 grouping generic-path-disjointness {
325 description "Path disjointness grouping";
327 type te-path-disjointness;
329 "The type of resource disjointness.
330 Under primary path, disjointness level applies to
331 all secondary LSPs. Under secondary, disjointness
332 level overrides the one under primary";
336 grouping common-path-constraints-attributes {
338 "Common path constraints configuration grouping";
339 uses common-constraints_config;
342 grouping generic-path-constraints {
344 "Global named path constraints configuration
346 container path-constraints {
347 description "TE named path constraints container";
348 uses common-path-constraints-attributes;
353 grouping explicit-route-hop {
355 "The explicit route subobject grouping";
358 description "ERO subobject index";
362 "The explicit route subobject type";
364 container num-unnum-hop {
369 "The identifier of a node in the TE topology.";
375 "TE link termination point identifier. The combination
376 of TE link ID and the TE node ID is used to identify an
377 unnumbered TE link.";
381 description "strict or loose hop";
384 "Numbered and Unnumbered link/node explicit route
389 container label-hop {
390 description "Label hop type";
391 uses effective-freq-slot;
394 "The Label ERO subobject";
397 uses gnpypc:hop-attribute ;
402 grouping common-constraints_config {
404 "Common constraints grouping that can be set on
405 a constraint set or directly on the tunnel";
407 container te-bandwidth {
408 uses gnpy-specific-parameters ;
410 "A requested bandwidth to use for path computation";
414 grouping end-points {
416 "Common grouping to define the TE tunnel end-points";
419 type inet:ip-address;
420 description "TE tunnel source address.";
423 type inet:ip-address;
424 description "P2P tunnel destination address";
428 description "TE tunnel source termination point identifier.";
433 description "TE tunnel destination termination point
438 grouping synchronization-info {
439 description "Information for sync";
440 list synchronization {
441 key "synchronization-id";
442 description "sync list";
443 leaf synchronization-id {
449 "Synchronization VECtor";
454 "If this leaf is true, path computation process is free
455 to ignore svec content.
456 otherwise it must take into account this svec.";
458 uses generic-path-disjointness;
459 leaf-list request-id-number {
461 description "This list reports the set of M path computation requests that must be synchronized.";
467 grouping generic-path-properties {
468 description "TE generic path properties grouping";
469 container path-properties {
471 description "The TE path properties";
474 description "TE path metric type";
477 base path-metric-type;
479 description "TE path metric type";
481 leaf accumulative-value {
485 description "TE path metric accumulative value";
488 // container path-route-objects {
490 // "Container for the list of route objects either returned by
491 // the computation engine or actually used by an LSP";
492 // list path-route-object {
495 // "List of route objects either returned by the computation
496 // engine or actually used by an LSP";
497 // uses explicit-route-hop;
500 list path-route-objects {
502 "Container for the list of route objects either returned by
503 the computation engine or actually used by an LSP";
504 container path-route-object {
506 "List of route objects either returned by the computation
507 engine or actually used by an LSP";
508 uses explicit-route-hop;
515 uses generic-path-properties;
516 description "Path computation output information";
519 // adding some blocking reasons and info on path in case of blocking
521 grouping no-path-info {
522 description "no-path-info";
524 presence "Response without path information, due to failure
525 performing the path computation";
530 "returned blocking reasons:
533 NO_FEASIBLE_BAUDRATE_WITH_SPACING
534 NO_PATH_WITH_CONSTRAINT
540 uses generic-path-properties ;
541 description "if path computation cannot identify a path,
542 rpc returns no path.";
546 /* TODO : correct the following with good trees:
547 * te:tunnels-rpc/te:input/te:tunnel-info
548 * te:tunnels-rpc/te:output/te:result
553 description "request-list";
557 description "Each path computation request is uniquely identified by the request-id-number.";
561 uses path-route-objects;
562 uses generic-path-constraints;
564 uses synchronization-info;
571 description "response";
575 "The list key that has to reuse request-id-number.";
577 choice response-type {
579 description "response-type";
585 description "Path computation service.";
593 "Describe the service file to connect to gnpy";