Remove openroadm and tapi models building
[transportpce.git] / ordmodels / service / src / main / yang / org-openroadm-controller-customization@2021-12-10.yang
1 module org-openroadm-controller-customization {
2   yang-version 1.1;
3   namespace "http://org/openroadm/controller/customization";
4   prefix org-openroadm-controller-customization;
5
6   import org-openroadm-common-link-types {
7     prefix org-openroadm-common-link-types;
8     revision-date 2019-11-29;
9   }
10   import org-openroadm-common-node-types {
11     prefix org-openroadm-common-node-types;
12     revision-date 2021-05-28;
13   }
14   import org-openroadm-common-service-types {
15     prefix org-openroadm-common-service-types;
16     revision-date 2021-12-10;
17   }
18   import org-openroadm-common-optical-channel-types {
19     prefix org-openroadm-common-optical-channel-types;
20     revision-date 2021-12-10;
21   }
22
23   organization
24     "Open ROADM MSA";
25   contact
26     "OpenROADM.org";
27   description
28     "YANG definitions of services.
29
30       Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016,
31       All other rights reserved.
32
33       Redistribution and use in source and binary forms, with or without modification,
34       are permitted provided that the following conditions are met:
35
36       * Redistributions of source code must retain the above copyright notice, this
37         list of conditions and the following disclaimer.
38       * Redistributions in binary form must reproduce the above copyright notice,
39         this list of conditions and the following disclaimer in the documentation and/or
40         other materials provided with the distribution.
41       * Neither the Members of the Open ROADM MSA Agreement nor the names of its
42         contributors may be used to endorse or promote products derived from this software
43         without specific prior written permission.
44
45       THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS''
46       AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
47       WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
48       IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT,
49       INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
50       NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA,
51       OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
52       WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
53       ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
54       POSSIBILITY OF SUCH DAMAGE";
55
56   revision 2021-12-10 {
57     description
58       "Version 10.1";
59   }
60   revision 2021-09-24 {
61     description
62       "Version 10.0";
63   }
64   revision 2021-05-28 {
65     description
66       "Version 9.1";
67   }
68   revision 2021-03-26 {
69     description
70       "Version 9.0";
71   }
72   revision 2020-12-11 {
73     description
74       "Version 8.1";
75   }
76   revision 2020-09-25 {
77     description
78       "Version 8.0";
79   }
80   revision 2020-05-29 {
81     description
82       "Version 7.1.0";
83   }
84   revision 2020-03-27 {
85     description
86       "Version 7.0.0";
87   }
88
89   typedef notification-events {
90     type enumeration {
91       enum roadm-to-roadm-link-creation {
92         value 1;
93       }
94       enum roadm-to-roadm-link-deletion {
95         value 2;
96       }
97       enum otn-link-creation {
98         value 3;
99       }
100       enum otn-link-deletion {
101         value 4;
102       }
103       enum xpdr-in-out-link-creation {
104         value 5;
105       }
106       enum xpdr-in-out-link-deletion {
107         value 6;
108       }
109       enum link-state-change {
110         value 7;
111       }
112       enum otn-link-bandwidth-usage-change {
113         value 8;
114       }
115       enum node-creation {
116         value 9;
117       }
118       enum node-deletion {
119         value 10;
120       }
121       enum node-state-change {
122         value 11;
123       }
124       enum tp-creation {
125         value 12;
126       }
127       enum tp-deletion {
128         value 13;
129       }
130       enum tp-state-change {
131         value 14;
132       }
133       enum ila-state-change {
134         value 15;
135       }
136       enum none {
137         value 16;
138       }
139       enum all {
140         value 17;
141       }
142     }
143     description
144       "Define possible notification events.";
145   }
146
147   typedef rmsa-policy {
148     type enumeration {
149       enum maximize-capacity {
150         value 1;
151       }
152       enum maximize-reach {
153         value 2;
154       }
155       enum minimize-margins {
156         value 3;
157       }
158       enum maximize-margins {
159         value 4;
160       }
161       enum customer-spectrum-partitioning {
162         value 5;
163       }
164       enum fragmentation-limiting-partitioning {
165         value 6;
166       }
167     }
168     description
169       "Defines Routing Modulation and and Spectrum Allocation policies.";
170   }
171
172   typedef non-rpc-related-notification-type {
173     type enumeration {
174       enum service-state-change {
175         value 1;
176       }
177       enum topology-change {
178         value 2;
179       }
180       enum exceeded-attenuation-crossing-warning {
181         value 3;
182       }
183       enum insufficient-margin-crossing-alarm {
184         value 4;
185       }
186       enum autonomous-optical-restoration-triggered {
187         value 5;
188       }
189     }
190     description
191       "Defines notification types for non rpc related notifications.";
192   }
193
194   typedef restriction-scope {
195     description
196       "Used to indicate the scope of global restrictions";
197     type enumeration {
198       enum service-create {
199         value 1;
200       }
201       enum service-create-bulk {
202         value 2;
203       }
204       enum temp-service-create {
205         value 3;
206       }
207       enum temp-service-create-bulk {
208         value 4;
209       }
210       enum service-feasibility-check {
211         value 5;
212       }
213       enum service-feasibility-check-bulk {
214         value 6;
215       }
216       enum service-roll {
217         value 7;
218       }
219       enum service-reconfigure {
220         value 8;
221       }
222       enum service-restoration {
223         value 9;
224       }
225       enum service-reroute {
226         value 10;
227       }
228       enum network-re-optimization {
229         value 11;
230       }
231       enum all {
232         value 12;
233       }
234     }
235   }
236
237   typedef restriction-type {
238     description
239       "Used to indicate type of restriction for site or node";
240     type enumeration {
241       enum add-drop {
242         value 1;
243         description 
244           "Add/drops are forbidden at the associated node (or site).
245           No service may add or drop at site/node";
246       }
247       enum pass-through {
248         value 2;
249         description
250           "Routing through the associated node (or site) is forbidden.
251           No service may pass-through at site/node";
252       } 
253       enum both {
254         value 3;
255         description
256           "Both adds/drops and through routing are forbidden for 
257           the associated node (or site).";
258       }
259     }
260   }
261
262   typedef regeneration-restriction-type {
263     description
264       "Used to indicate the type of restriction for the regeneration type";
265     type enumeration {
266       enum do-not-propose {
267         value 1;
268         description
269           "Proposing new regens (via a feasibility check) 
270           at the associated node (or site) is forbidden.";
271       }
272       enum do-not-use-existing {
273         value 2;
274         description
275           "Use of an existing regen at the associated node 
276           (or site) is forbidden.";
277       }
278       enum both {
279         value 3;
280         description
281           "Both use of existing regens and proposal of new regens
282            are forbidden at the associated node (or site).";
283       }
284     }
285   }
286
287   grouping spectrum-portion {
288     description
289       "Specifies a portion of the spectrum and its characteristics.";
290     leaf spectrum-portion-id {
291       type uint8;
292       description
293         "Identifies a spectrum portion with specific characteristics.";
294     }
295     leaf start-edge-frequency {
296       type org-openroadm-common-optical-channel-types:frequency-THz;
297       description
298         "If present, this parameter states the lowest frequency to start
299          filling the spectrum, or a spectrum portion if stop-bandwidth
300          is also defined.";
301     }
302     leaf stop-edge-frequency {
303       type org-openroadm-common-optical-channel-types:frequency-THz;
304       description
305         "If present and associated with a start frequency, this parameter
306          states the upper frequency broundary to fill the spectrum portion.
307          If present, in the absence of a start frequency, this parameter
308          states the highest frequency to start filling the spectrum.";
309     }
310     leaf-list dedicated-customer {
311       type string;
312       description
313         "Applies only to spectrum-portion (both start and stop edge frequencies
314          defined), when the spectrum-portion is dedicated to some customers.
315          This list shall includes customer-codes identifying specific customers.
316          No customer out of this list can share the bandwidth of this spectrum
317          portion";
318     }
319     leaf-list non-authorized-customer {
320       type string;
321       description
322         "Applies only to spectrum-portion (both start and stop edge frequencies
323          defined), when the spectrum-portion is dedicated to some customers.
324          This list shall includes customer-codes identifying specific customers,
325          that are not allowed to share the bandwidth of this spectrum portion";
326     }
327   }
328
329   grouping controller-parameters {
330     description
331       "Defines the structure of Service/controller-behaviour-settings container,
332        as well as the structure of controller-parameters-setting rpc input";
333     container non-rpc-related-notification-settings {
334       description
335         "Defines url, notification-type and type of events that shall / shall not
336          trigger notifications";
337       list non-rpc-related-notification-url-list {
338         key "non-rpc-related-notification-type";
339         description
340           "Used to record url to be used when forwarding non rpc related
341            notifications.";
342         leaf non-rpc-related-notification-type {
343           type non-rpc-related-notification-type;
344           description
345             "Type of notification will trigger specific leaves.";
346         }
347         leaf notification-url {
348           type string;
349           description
350             "Defines the url the notification is sent to.";
351         }
352         leaf-list events-disabling-notification {
353           when "../non-rpc-related-notification-type = 'topology-change'";
354           type notification-events;
355           description
356             "List of events for which notifications to SDN-Controller are
357              not desirabled. The filtering is currently activated only on topological
358              changes which could lead to large volumes of data.";
359         }
360         leaf-list events-triggering-notification {
361           when "../non-rpc-related-notification-type = 'topology-change'";
362           type notification-events;
363           description
364             "List of events for which notifications to SDN-Controller are
365              desirabled. Has the priority with regards to events-disabling-notification.
366              As an example if events-disabling-notification is set to all,
367              events set in events-triggering-notification will be the only
368              events to be notified";
369         }
370       }
371     }
372     container spectrum-filling {
373       description
374         "Spectrum may be filled according to specific rules to limit partitionning
375          or to dedicate part of the spectrum to some specific clients (customer-code)";
376       list spectrum-filling-rules {
377         key "rule-id";
378         description
379           "Defines a set of rules used to fill the spectrum";
380         leaf rule-id {
381           type uint16;
382           description
383             "defines the rule identifier";
384         }
385         leaf priority {
386           type uint8;
387           description
388             "The rules shall be applied sequentially according to their defined
389              priority (Highest:1, lowest:255). Rules with highest priority
390              will be applied first";
391         }
392         leaf RMSA-policy {
393           type rmsa-policy;
394           description
395             "Defines the Routing, Spectrum & Mode assignment policy to be applied";
396         }
397         container spectrum-range-of-appliance {
398           when "../RMSA-policy = 'customer-spectrum-partitioning' or ../RMSA-policy
399                               = 'fragmentation-limiting-partitioning'";
400           description
401             "Defines, when needed, the spectrum range to which the rule applies";
402           uses spectrum-portion;
403           leaf dedicated-signal-bandwidth-multiple {
404             when "../../RMSA-policy = 'fragmentation-limiting-partitioning'" {
405               description
406                 "For fragmentation partitioning, defines which part of the spectrum
407                  will be used according to the signal spectral occupation";
408             }
409             type uint8;
410             description
411               "Used for spectrum partitioning to reduce fragmentation. Defines
412                the width of the service to be provisioned in the spectrum portion.
413                As an example a spectrum portion can be dedicated to signals with
414                a 50 GHz multiple spectral occupation, whereas another portion
415                of the spectrum is dedicated to signal with a 75 GHz multiple
416                spectral occupation";
417           }
418         }
419       }
420     }
421     container margins {
422       description
423         "defines all margins operator may want to specify";
424       leaf minimum-fiber-attenuation-bol-margin {
425         type org-openroadm-common-link-types:ratio-dB;
426         description
427           "Minimum fiber-attenuation margin to be considered for path calculation
428            at begining of life. The path calculation shall be made considering on
429            each link the engineered-spanloss (provided by an external sytem)
430            _The RNC shall raise an ALARM to the northbound Controller through
431            an insufficient-margin-crossing-alarm as soon as:
432            (span-loss-base + minimum-fiber-attenuation-bol-margin) - engineered-spanloss >
433            threshold-observed-vs-design-margin
434            _The RNC shall raise a WARNING to the northbound Controller through
435            an exceeded-attenuation-crossing-warning as soon as : (engineered-spanloss
436            - spanloss-current) < threshold-observed-vs-design-attenuation.";
437       }
438       leaf threshold-observed-vs-design-attenuation {
439         type org-openroadm-common-link-types:ratio-dB;
440         description
441           "Defines the threshold used to raise an alarm when fiber initial attenuation
442            is too close to the engineered-spanloss, meaning the value accounted for the
443            design has been underestimated and a new design shall triggered.";
444       }
445       leaf threshold-observed-vs-design-margin {
446         type org-openroadm-common-link-types:ratio-dB;
447         description
448           "Defines the threshold used to raise a warning when fiber measured attenuation
449            comes too close to the engineered-spanloss, so that remaining margin is considered
450            as too limited.";
451       }
452       list minimum-osnr-margins {
453         key "margin-id";
454         description
455           "osnr margins to be considered may differ according to the rate and the modulation format";
456         leaf margin-id {
457           type string;
458           description
459             "defines a margin for specific line-rates and modulation formats";
460         }
461         leaf minimum-osnr-margin-value {
462           type org-openroadm-common-link-types:ratio-dB;
463           description
464             "Minimum OSNR margin to be considered to keep an acceptable OSNR value
465               at end of life for the associated line-rates and modulation-formats";
466         }
467         leaf-list line-rates {
468           type uint64;
469           description
470             "Line-rates to which the osnr-margin applies";
471         }
472         leaf-list modulation-formats {
473           type org-openroadm-common-optical-channel-types:modulation-format;
474           description
475             "Modulation-formats to which the osnr-margin applies";
476         }
477       }
478     }
479     container metrics-policy {
480       description
481         "Defines how the RNC shall interpret the routing-metrics";
482       leaf composite-metric-versus-selective {
483         type boolean;
484         description
485           "Defines the way the RNC shall interpret the priorities defined
486            for the metrics: _ True corresponds to a weighted composite metric,
487            _ False corresponds to a selective priority based metric";
488       }
489     }
490     container regeneration-policy {
491       description
492         "Defines rules to place regenerators when a service-feasibility-check
493         rpc is invoked, or when a service-create rpc is invoked if spare
494         regenerators are already in place";
495       leaf global-placement {
496         type enumeration {
497           enum regenerator-banks {
498             value 1;
499           }
500           enum distributed {
501             value 2;
502           }
503         }
504         description
505           "To priviledge the positioning in specific locations";
506       }
507       leaf on-path-positioning {
508         type enumeration {
509           enum maximize-rate {
510             value 1;
511           }
512           enum latest-convenient-hop {
513             value 2;
514           }
515         }
516         description
517           "To position regenerators as far as possible on the path or optimizing
518           performances";
519       }
520       leaf path-symmetry {
521         type boolean;
522         description
523           "True corresponds to same location on A to Z and Z to A paths
524           False allows positioning regenerators in different nodes for A
525           to Z and Z to A paths";
526       }
527       leaf-list preferred-sites {
528           type string;
529           description
530             "CLLI's of the sites to be privileged when positioning regenerators
531             in specific locations";
532       }
533     }
534     container global-restriction {
535       container site-restriction {
536         leaf-list restriction-scopes {
537           description
538             "Set of the restriction scopes applicable for the site-restriction.
539             Default scope is set to all RPCs";
540           type restriction-scope;
541           default "all";
542         }
543         list site {
544           key "site-id";
545           description
546             "List of sites to be excluded from paths when routing.";
547           leaf site-id {
548             type string;
549           }
550           leaf restriction-type {
551             type restriction-type;
552             default "both";
553           }
554         }
555       }
556       container node-restriction {
557         leaf-list restriction-scopes {
558           description
559             "Set of the restriction scopes applicable for the node-restriction.
560             Default scope is set to all RPCs";
561           type restriction-scope;
562           default "all";
563         }
564         list node {
565           key "node-id";
566           description
567             "List of equipment nodes to be excluded from paths when routing.";
568           leaf node-id {
569             type org-openroadm-common-node-types:node-id-type;
570           }
571           leaf restriction-type {
572             type restriction-type;
573             default "both";
574           }
575         }
576       }
577       container regeneration-site-restriction {
578         leaf-list restriction-scopes {
579           description
580             "Set of the restriction scopes applicable for the regeneration-restriction.
581             Default scope is set to all RPCs";
582           type restriction-scope;
583           default "all";
584         }
585         list forbidden-site {
586           key "site-id";
587           description
588             "List of forbidden sites where regenerators shall not be placed";
589           leaf site-id {
590             type string;
591           }
592           leaf regeneration-restriction-type {
593             type regeneration-restriction-type;
594             default "both";
595           }
596         }
597       }
598       container regeneration-node-restriction {
599         leaf-list restriction-scopes {
600           description
601             "Set of the restriction scopes applicable for the regeneration-restriction.
602             Default scope is set to all RPCs";
603           type restriction-scope;
604           default "all";
605         }
606         list forbidden-node {
607           key "node-id";
608           description
609             "List of forbidden nodes where regenerators shall not be placed";
610           leaf node-id {
611             type org-openroadm-common-node-types:node-id-type;
612           }
613           leaf regeneration-restriction-type {
614             type regeneration-restriction-type;
615             default "both";
616           }
617         }
618       }
619       container link-restriction {
620         leaf-list restriction-scopes {
621           description
622             "Set of the resctriction scopes applicable for the link-restriction.
623             Default scope is set to all RPCs";
624           type restriction-scope;
625           default "all";
626         }
627         leaf-list link-id {
628           type string;
629           description
630             "List of links to be excluded from paths when routing.";
631         }
632       }
633       container supporting-service-restriction {
634         leaf-list restriction-scopes {
635           description
636             "Set of the resctriction scopes applicable for the supporting-services.
637             Default scope is set to all RPCs";
638           type restriction-scope;
639           default "all";
640         }
641         leaf-list supporting-services {
642           type string;
643           description
644             "List of supporting services to be excluded from paths when routing";
645         }
646       }
647     }
648     container default-behaviour {
649       description
650         "Parameters in this container are used to define default behaviour
651          in case optional parameters in rpc have not been defined";
652       leaf default-backup-path-number {
653         type uint16;
654         description
655           "0 means on the fly path calculation. Higher number corresponds
656            to backup path pre-calculation, and states the number of paths
657            to be calculated";
658       }
659       leaf reversion {
660         type boolean;
661         description
662           "Concerns reversion for service that have a resiliency defined
663            as restorable (restoration handled autonomously by the controller
664            at the WDM/OTN layer)";
665       }
666       leaf wait-to-restore {
667         type uint64;
668         units "ms";
669         description
670           "time delay to revert to initial path after conditions for reversion
671            are satisfied";
672       }
673       leaf holdoff-time {
674         type uint64;
675         units "ms";
676         description
677           "time delay to initiate a protection or restoration event";
678       }
679     }
680     container sla-definition {
681       description
682         "Definition of Service Level Agreements parameters";
683       list sla-parameters {
684         key "sla-id";
685         description
686           "Defines several SLA profiles and associated expected behaviour";
687         leaf sla-id {
688           type string;
689           description
690             "sla-id as defined by the operator";
691         }
692         leaf preemption {
693           type boolean;
694           description
695             "False : service shall never be preempted True : preemption of
696              the service is allowed";
697         }
698         leaf restoration-priority {
699           type uint8;
700           description
701             "The service shall be restored according to the defined priority
702              (First:1, latest:255). Services with highest priority will be restored first";
703         }
704       }
705     }
706     container failure-case-list {
707       description
708         "Use to provide information on failure cases associated with backup-path
709          pre-calculation: If PCE supports the calculation of multiple backup-paths,
710          these might be identified through a failure case-id corresponding
711          to a node, physical-link or logical-link failure";
712       list failure-case {
713         key "failure-case-id";
714         description
715           "Describes and identifies different failure-cases. Each of them can be
716            associated with one or several backup-paths in the context of backup-path
717            pre-calculation";
718         leaf failure-case-id {
719           type uint32;
720           description
721             "Identifies a failure case";
722         }
723         leaf failure-type {
724           type enumeration {
725             enum node-failure {
726               value 1;
727             }
728             enum logical-link-failure {
729               value 2;
730             }
731             enum physiscal-link-failure {
732               value 3;
733             }
734           }
735           description
736             "describes failure type that can be simulated in a planner or by a PCE
737              to calculate a backup path";
738         }
739         leaf-list nodes {
740           when "../failure-type = 'node-failure'" {
741             description
742               "List of nodes impacted by the failure (not only single failures
743                may be envisaged).";
744           }
745           type string;
746           description
747             "Nodes as they appear in the openroadm-topology or otn-topology
748              layer";
749         }
750         leaf-list logical-links {
751           when "../failure-type = 'logical-link-failure'" {
752             description
753               "List of logical links impacted by the failure (not only single
754                failures may be envisaged).";
755           }
756           type string;
757           description
758             "logical links as they appear in the otn-topology layer";
759         }
760         leaf-list physical-links {
761           when "../failure-type = 'physical-link-failure'" {
762             description
763               "List of physical links impacted by the failure (not only single
764                failures may be envisaged).";
765           }
766           type string;
767           description
768             "physical-links as they appear in the openroadm-topology layer";
769         }
770       }
771     }
772   }
773   
774   rpc controller-parameters-setting {
775     description
776       "Rpc used to populate controller parameters in the Data Store
777        of the RNC.";
778     input {
779       uses org-openroadm-common-service-types:sdnc-request-header;
780       uses controller-parameters;
781     }
782     output {
783       uses org-openroadm-common-service-types:configuration-response-common;
784       leaf-list unsupported-customization-options {
785         type string;
786         description
787           "Provides a list of customization parameters that are not supported by
788            the RNC controller. Leaflist items corresponds to the yang nodes of
789            controller-parameters that the RNC does not handle. It is assumed that
790            for a yang node provided in the list, all nodes/leaves at a lower level
791            in the hierarchy are also not supported by the RNC";
792       }
793     }
794   }
795 }