Upgrade openroadm service models to 10.1
[transportpce.git] / ordmodels / service / src / main / yang / org-openroadm-controller-customization@2021-12-10.yang
diff --git a/ordmodels/service/src/main/yang/org-openroadm-controller-customization@2021-12-10.yang b/ordmodels/service/src/main/yang/org-openroadm-controller-customization@2021-12-10.yang
new file mode 100644 (file)
index 0000000..49b2b27
--- /dev/null
@@ -0,0 +1,795 @@
+module org-openroadm-controller-customization {
+  yang-version 1.1;
+  namespace "http://org/openroadm/controller/customization";
+  prefix org-openroadm-controller-customization;
+
+  import org-openroadm-common-link-types {
+    prefix org-openroadm-common-link-types;
+    revision-date 2019-11-29;
+  }
+  import org-openroadm-common-node-types {
+    prefix org-openroadm-common-node-types;
+    revision-date 2021-05-28;
+  }
+  import org-openroadm-common-service-types {
+    prefix org-openroadm-common-service-types;
+    revision-date 2021-12-10;
+  }
+  import org-openroadm-common-optical-channel-types {
+    prefix org-openroadm-common-optical-channel-types;
+    revision-date 2021-12-10;
+  }
+
+  organization
+    "Open ROADM MSA";
+  contact
+    "OpenROADM.org";
+  description
+    "YANG definitions of services.
+
+      Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016,
+      All other rights reserved.
+
+      Redistribution and use in source and binary forms, with or without modification,
+      are permitted provided that the following conditions are met:
+
+      * Redistributions of source code must retain the above copyright notice, this
+        list of conditions and the following disclaimer.
+      * Redistributions in binary form must reproduce the above copyright notice,
+        this list of conditions and the following disclaimer in the documentation and/or
+        other materials provided with the distribution.
+      * Neither the Members of the Open ROADM MSA Agreement nor the names of its
+        contributors may be used to endorse or promote products derived from this software
+        without specific prior written permission.
+
+      THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS''
+      AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+      WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+      IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT,
+      INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+      NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA,
+      OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+      WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+      ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+      POSSIBILITY OF SUCH DAMAGE";
+
+  revision 2021-12-10 {
+    description
+      "Version 10.1";
+  }
+  revision 2021-09-24 {
+    description
+      "Version 10.0";
+  }
+  revision 2021-05-28 {
+    description
+      "Version 9.1";
+  }
+  revision 2021-03-26 {
+    description
+      "Version 9.0";
+  }
+  revision 2020-12-11 {
+    description
+      "Version 8.1";
+  }
+  revision 2020-09-25 {
+    description
+      "Version 8.0";
+  }
+  revision 2020-05-29 {
+    description
+      "Version 7.1.0";
+  }
+  revision 2020-03-27 {
+    description
+      "Version 7.0.0";
+  }
+
+  typedef notification-events {
+    type enumeration {
+      enum roadm-to-roadm-link-creation {
+        value 1;
+      }
+      enum roadm-to-roadm-link-deletion {
+        value 2;
+      }
+      enum otn-link-creation {
+        value 3;
+      }
+      enum otn-link-deletion {
+        value 4;
+      }
+      enum xpdr-in-out-link-creation {
+        value 5;
+      }
+      enum xpdr-in-out-link-deletion {
+        value 6;
+      }
+      enum link-state-change {
+        value 7;
+      }
+      enum otn-link-bandwidth-usage-change {
+        value 8;
+      }
+      enum node-creation {
+        value 9;
+      }
+      enum node-deletion {
+        value 10;
+      }
+      enum node-state-change {
+        value 11;
+      }
+      enum tp-creation {
+        value 12;
+      }
+      enum tp-deletion {
+        value 13;
+      }
+      enum tp-state-change {
+        value 14;
+      }
+      enum ila-state-change {
+        value 15;
+      }
+      enum none {
+        value 16;
+      }
+      enum all {
+        value 17;
+      }
+    }
+    description
+      "Define possible notification events.";
+  }
+
+  typedef rmsa-policy {
+    type enumeration {
+      enum maximize-capacity {
+        value 1;
+      }
+      enum maximize-reach {
+        value 2;
+      }
+      enum minimize-margins {
+        value 3;
+      }
+      enum maximize-margins {
+        value 4;
+      }
+      enum customer-spectrum-partitioning {
+        value 5;
+      }
+      enum fragmentation-limiting-partitioning {
+        value 6;
+      }
+    }
+    description
+      "Defines Routing Modulation and and Spectrum Allocation policies.";
+  }
+
+  typedef non-rpc-related-notification-type {
+    type enumeration {
+      enum service-state-change {
+        value 1;
+      }
+      enum topology-change {
+        value 2;
+      }
+      enum exceeded-attenuation-crossing-warning {
+        value 3;
+      }
+      enum insufficient-margin-crossing-alarm {
+        value 4;
+      }
+      enum autonomous-optical-restoration-triggered {
+        value 5;
+      }
+    }
+    description
+      "Defines notification types for non rpc related notifications.";
+  }
+
+  typedef restriction-scope {
+    description
+      "Used to indicate the scope of global restrictions";
+    type enumeration {
+      enum service-create {
+        value 1;
+      }
+      enum service-create-bulk {
+        value 2;
+      }
+      enum temp-service-create {
+        value 3;
+      }
+      enum temp-service-create-bulk {
+        value 4;
+      }
+      enum service-feasibility-check {
+        value 5;
+      }
+      enum service-feasibility-check-bulk {
+        value 6;
+      }
+      enum service-roll {
+        value 7;
+      }
+      enum service-reconfigure {
+        value 8;
+      }
+      enum service-restoration {
+        value 9;
+      }
+      enum service-reroute {
+        value 10;
+      }
+      enum network-re-optimization {
+        value 11;
+      }
+      enum all {
+        value 12;
+      }
+    }
+  }
+
+  typedef restriction-type {
+    description
+      "Used to indicate type of restriction for site or node";
+    type enumeration {
+      enum add-drop {
+        value 1;
+        description 
+          "Add/drops are forbidden at the associated node (or site).
+          No service may add or drop at site/node";
+      }
+      enum pass-through {
+        value 2;
+        description
+          "Routing through the associated node (or site) is forbidden.
+          No service may pass-through at site/node";
+      } 
+      enum both {
+        value 3;
+        description
+          "Both adds/drops and through routing are forbidden for 
+          the associated node (or site).";
+      }
+    }
+  }
+
+  typedef regeneration-restriction-type {
+    description
+      "Used to indicate the type of restriction for the regeneration type";
+    type enumeration {
+      enum do-not-propose {
+        value 1;
+        description
+          "Proposing new regens (via a feasibility check) 
+          at the associated node (or site) is forbidden.";
+      }
+      enum do-not-use-existing {
+        value 2;
+        description
+          "Use of an existing regen at the associated node 
+          (or site) is forbidden.";
+      }
+      enum both {
+        value 3;
+        description
+          "Both use of existing regens and proposal of new regens
+           are forbidden at the associated node (or site).";
+      }
+    }
+  }
+
+  grouping spectrum-portion {
+    description
+      "Specifies a portion of the spectrum and its characteristics.";
+    leaf spectrum-portion-id {
+      type uint8;
+      description
+        "Identifies a spectrum portion with specific characteristics.";
+    }
+    leaf start-edge-frequency {
+      type org-openroadm-common-optical-channel-types:frequency-THz;
+      description
+        "If present, this parameter states the lowest frequency to start
+         filling the spectrum, or a spectrum portion if stop-bandwidth
+         is also defined.";
+    }
+    leaf stop-edge-frequency {
+      type org-openroadm-common-optical-channel-types:frequency-THz;
+      description
+        "If present and associated with a start frequency, this parameter
+         states the upper frequency broundary to fill the spectrum portion.
+         If present, in the absence of a start frequency, this parameter
+         states the highest frequency to start filling the spectrum.";
+    }
+    leaf-list dedicated-customer {
+      type string;
+      description
+        "Applies only to spectrum-portion (both start and stop edge frequencies
+         defined), when the spectrum-portion is dedicated to some customers.
+         This list shall includes customer-codes identifying specific customers.
+         No customer out of this list can share the bandwidth of this spectrum
+         portion";
+    }
+    leaf-list non-authorized-customer {
+      type string;
+      description
+        "Applies only to spectrum-portion (both start and stop edge frequencies
+         defined), when the spectrum-portion is dedicated to some customers.
+         This list shall includes customer-codes identifying specific customers,
+         that are not allowed to share the bandwidth of this spectrum portion";
+    }
+  }
+
+  grouping controller-parameters {
+    description
+      "Defines the structure of Service/controller-behaviour-settings container,
+       as well as the structure of controller-parameters-setting rpc input";
+    container non-rpc-related-notification-settings {
+      description
+        "Defines url, notification-type and type of events that shall / shall not
+         trigger notifications";
+      list non-rpc-related-notification-url-list {
+        key "non-rpc-related-notification-type";
+        description
+          "Used to record url to be used when forwarding non rpc related
+           notifications.";
+        leaf non-rpc-related-notification-type {
+          type non-rpc-related-notification-type;
+          description
+            "Type of notification will trigger specific leaves.";
+        }
+        leaf notification-url {
+          type string;
+          description
+            "Defines the url the notification is sent to.";
+        }
+        leaf-list events-disabling-notification {
+          when "../non-rpc-related-notification-type = 'topology-change'";
+          type notification-events;
+          description
+            "List of events for which notifications to SDN-Controller are
+             not desirabled. The filtering is currently activated only on topological
+             changes which could lead to large volumes of data.";
+        }
+        leaf-list events-triggering-notification {
+          when "../non-rpc-related-notification-type = 'topology-change'";
+          type notification-events;
+          description
+            "List of events for which notifications to SDN-Controller are
+             desirabled. Has the priority with regards to events-disabling-notification.
+             As an example if events-disabling-notification is set to all,
+             events set in events-triggering-notification will be the only
+             events to be notified";
+        }
+      }
+    }
+    container spectrum-filling {
+      description
+        "Spectrum may be filled according to specific rules to limit partitionning
+         or to dedicate part of the spectrum to some specific clients (customer-code)";
+      list spectrum-filling-rules {
+        key "rule-id";
+        description
+          "Defines a set of rules used to fill the spectrum";
+        leaf rule-id {
+          type uint16;
+          description
+            "defines the rule identifier";
+        }
+        leaf priority {
+          type uint8;
+          description
+            "The rules shall be applied sequentially according to their defined
+             priority (Highest:1, lowest:255). Rules with highest priority
+             will be applied first";
+        }
+        leaf RMSA-policy {
+          type rmsa-policy;
+          description
+            "Defines the Routing, Spectrum & Mode assignment policy to be applied";
+        }
+        container spectrum-range-of-appliance {
+          when "../RMSA-policy = 'customer-spectrum-partitioning' or ../RMSA-policy
+                              = 'fragmentation-limiting-partitioning'";
+          description
+            "Defines, when needed, the spectrum range to which the rule applies";
+          uses spectrum-portion;
+          leaf dedicated-signal-bandwidth-multiple {
+            when "../../RMSA-policy = 'fragmentation-limiting-partitioning'" {
+              description
+                "For fragmentation partitioning, defines which part of the spectrum
+                 will be used according to the signal spectral occupation";
+            }
+            type uint8;
+            description
+              "Used for spectrum partitioning to reduce fragmentation. Defines
+               the width of the service to be provisioned in the spectrum portion.
+               As an example a spectrum portion can be dedicated to signals with
+               a 50 GHz multiple spectral occupation, whereas another portion
+               of the spectrum is dedicated to signal with a 75 GHz multiple
+               spectral occupation";
+          }
+        }
+      }
+    }
+    container margins {
+      description
+        "defines all margins operator may want to specify";
+      leaf minimum-fiber-attenuation-bol-margin {
+        type org-openroadm-common-link-types:ratio-dB;
+        description
+          "Minimum fiber-attenuation margin to be considered for path calculation
+           at begining of life. The path calculation shall be made considering on
+           each link the engineered-spanloss (provided by an external sytem)
+           _The RNC shall raise an ALARM to the northbound Controller through
+           an insufficient-margin-crossing-alarm as soon as:
+           (span-loss-base + minimum-fiber-attenuation-bol-margin) - engineered-spanloss >
+           threshold-observed-vs-design-margin
+           _The RNC shall raise a WARNING to the northbound Controller through
+           an exceeded-attenuation-crossing-warning as soon as : (engineered-spanloss
+           - spanloss-current) < threshold-observed-vs-design-attenuation.";
+      }
+      leaf threshold-observed-vs-design-attenuation {
+        type org-openroadm-common-link-types:ratio-dB;
+        description
+          "Defines the threshold used to raise an alarm when fiber initial attenuation
+           is too close to the engineered-spanloss, meaning the value accounted for the
+           design has been underestimated and a new design shall triggered.";
+      }
+      leaf threshold-observed-vs-design-margin {
+        type org-openroadm-common-link-types:ratio-dB;
+        description
+          "Defines the threshold used to raise a warning when fiber measured attenuation
+           comes too close to the engineered-spanloss, so that remaining margin is considered
+           as too limited.";
+      }
+      list minimum-osnr-margins {
+        key "margin-id";
+        description
+          "osnr margins to be considered may differ according to the rate and the modulation format";
+        leaf margin-id {
+          type string;
+          description
+            "defines a margin for specific line-rates and modulation formats";
+        }
+        leaf minimum-osnr-margin-value {
+          type org-openroadm-common-link-types:ratio-dB;
+          description
+            "Minimum OSNR margin to be considered to keep an acceptable OSNR value
+              at end of life for the associated line-rates and modulation-formats";
+        }
+        leaf-list line-rates {
+          type uint64;
+          description
+            "Line-rates to which the osnr-margin applies";
+        }
+        leaf-list modulation-formats {
+          type org-openroadm-common-optical-channel-types:modulation-format;
+          description
+            "Modulation-formats to which the osnr-margin applies";
+        }
+      }
+    }
+    container metrics-policy {
+      description
+        "Defines how the RNC shall interpret the routing-metrics";
+      leaf composite-metric-versus-selective {
+        type boolean;
+        description
+          "Defines the way the RNC shall interpret the priorities defined
+           for the metrics: _ True corresponds to a weighted composite metric,
+           _ False corresponds to a selective priority based metric";
+      }
+    }
+    container regeneration-policy {
+      description
+        "Defines rules to place regenerators when a service-feasibility-check
+        rpc is invoked, or when a service-create rpc is invoked if spare
+        regenerators are already in place";
+      leaf global-placement {
+        type enumeration {
+          enum regenerator-banks {
+            value 1;
+          }
+          enum distributed {
+            value 2;
+          }
+        }
+        description
+          "To priviledge the positioning in specific locations";
+      }
+      leaf on-path-positioning {
+        type enumeration {
+          enum maximize-rate {
+            value 1;
+          }
+          enum latest-convenient-hop {
+            value 2;
+          }
+        }
+        description
+          "To position regenerators as far as possible on the path or optimizing
+          performances";
+      }
+      leaf path-symmetry {
+        type boolean;
+        description
+          "True corresponds to same location on A to Z and Z to A paths
+          False allows positioning regenerators in different nodes for A
+          to Z and Z to A paths";
+      }
+      leaf-list preferred-sites {
+          type string;
+          description
+            "CLLI's of the sites to be privileged when positioning regenerators
+            in specific locations";
+      }
+    }
+    container global-restriction {
+      container site-restriction {
+        leaf-list restriction-scopes {
+          description
+            "Set of the restriction scopes applicable for the site-restriction.
+            Default scope is set to all RPCs";
+          type restriction-scope;
+          default "all";
+        }
+        list site {
+          key "site-id";
+          description
+            "List of sites to be excluded from paths when routing.";
+          leaf site-id {
+            type string;
+          }
+          leaf restriction-type {
+            type restriction-type;
+            default "both";
+          }
+        }
+      }
+      container node-restriction {
+        leaf-list restriction-scopes {
+          description
+            "Set of the restriction scopes applicable for the node-restriction.
+            Default scope is set to all RPCs";
+          type restriction-scope;
+          default "all";
+        }
+        list node {
+          key "node-id";
+          description
+            "List of equipment nodes to be excluded from paths when routing.";
+          leaf node-id {
+            type org-openroadm-common-node-types:node-id-type;
+          }
+          leaf restriction-type {
+            type restriction-type;
+            default "both";
+          }
+        }
+      }
+      container regeneration-site-restriction {
+        leaf-list restriction-scopes {
+          description
+            "Set of the restriction scopes applicable for the regeneration-restriction.
+            Default scope is set to all RPCs";
+          type restriction-scope;
+          default "all";
+        }
+        list forbidden-site {
+          key "site-id";
+          description
+            "List of forbidden sites where regenerators shall not be placed";
+          leaf site-id {
+            type string;
+          }
+          leaf regeneration-restriction-type {
+            type regeneration-restriction-type;
+            default "both";
+          }
+        }
+      }
+      container regeneration-node-restriction {
+        leaf-list restriction-scopes {
+          description
+            "Set of the restriction scopes applicable for the regeneration-restriction.
+            Default scope is set to all RPCs";
+          type restriction-scope;
+          default "all";
+        }
+        list forbidden-node {
+          key "node-id";
+          description
+            "List of forbidden nodes where regenerators shall not be placed";
+          leaf node-id {
+            type org-openroadm-common-node-types:node-id-type;
+          }
+          leaf regeneration-restriction-type {
+            type regeneration-restriction-type;
+            default "both";
+          }
+        }
+      }
+      container link-restriction {
+        leaf-list restriction-scopes {
+          description
+            "Set of the resctriction scopes applicable for the link-restriction.
+            Default scope is set to all RPCs";
+          type restriction-scope;
+          default "all";
+        }
+        leaf-list link-id {
+          type string;
+          description
+            "List of links to be excluded from paths when routing.";
+        }
+      }
+      container supporting-service-restriction {
+        leaf-list restriction-scopes {
+          description
+            "Set of the resctriction scopes applicable for the supporting-services.
+            Default scope is set to all RPCs";
+          type restriction-scope;
+          default "all";
+        }
+        leaf-list supporting-services {
+          type string;
+          description
+            "List of supporting services to be excluded from paths when routing";
+        }
+      }
+    }
+    container default-behaviour {
+      description
+        "Parameters in this container are used to define default behaviour
+         in case optional parameters in rpc have not been defined";
+      leaf default-backup-path-number {
+        type uint16;
+        description
+          "0 means on the fly path calculation. Higher number corresponds
+           to backup path pre-calculation, and states the number of paths
+           to be calculated";
+      }
+      leaf reversion {
+        type boolean;
+        description
+          "Concerns reversion for service that have a resiliency defined
+           as restorable (restoration handled autonomously by the controller
+           at the WDM/OTN layer)";
+      }
+      leaf wait-to-restore {
+        type uint64;
+        units "ms";
+        description
+          "time delay to revert to initial path after conditions for reversion
+           are satisfied";
+      }
+      leaf holdoff-time {
+        type uint64;
+        units "ms";
+        description
+          "time delay to initiate a protection or restoration event";
+      }
+    }
+    container sla-definition {
+      description
+        "Definition of Service Level Agreements parameters";
+      list sla-parameters {
+        key "sla-id";
+        description
+          "Defines several SLA profiles and associated expected behaviour";
+        leaf sla-id {
+          type string;
+          description
+            "sla-id as defined by the operator";
+        }
+        leaf preemption {
+          type boolean;
+          description
+            "False : service shall never be preempted True : preemption of
+             the service is allowed";
+        }
+        leaf restoration-priority {
+          type uint8;
+          description
+            "The service shall be restored according to the defined priority
+             (First:1, latest:255). Services with highest priority will be restored first";
+        }
+      }
+    }
+    container failure-case-list {
+      description
+        "Use to provide information on failure cases associated with backup-path
+         pre-calculation: If PCE supports the calculation of multiple backup-paths,
+         these might be identified through a failure case-id corresponding
+         to a node, physical-link or logical-link failure";
+      list failure-case {
+        key "failure-case-id";
+        description
+          "Describes and identifies different failure-cases. Each of them can be
+           associated with one or several backup-paths in the context of backup-path
+           pre-calculation";
+        leaf failure-case-id {
+          type uint32;
+          description
+            "Identifies a failure case";
+        }
+        leaf failure-type {
+          type enumeration {
+            enum node-failure {
+              value 1;
+            }
+            enum logical-link-failure {
+              value 2;
+            }
+            enum physiscal-link-failure {
+              value 3;
+            }
+          }
+          description
+            "describes failure type that can be simulated in a planner or by a PCE
+             to calculate a backup path";
+        }
+        leaf-list nodes {
+          when "../failure-type = 'node-failure'" {
+            description
+              "List of nodes impacted by the failure (not only single failures
+               may be envisaged).";
+          }
+          type string;
+          description
+            "Nodes as they appear in the openroadm-topology or otn-topology
+             layer";
+        }
+        leaf-list logical-links {
+          when "../failure-type = 'logical-link-failure'" {
+            description
+              "List of logical links impacted by the failure (not only single
+               failures may be envisaged).";
+          }
+          type string;
+          description
+            "logical links as they appear in the otn-topology layer";
+        }
+        leaf-list physical-links {
+          when "../failure-type = 'physical-link-failure'" {
+            description
+              "List of physical links impacted by the failure (not only single
+               failures may be envisaged).";
+          }
+          type string;
+          description
+            "physical-links as they appear in the openroadm-topology layer";
+        }
+      }
+    }
+  }
+  
+  rpc controller-parameters-setting {
+    description
+      "Rpc used to populate controller parameters in the Data Store
+       of the RNC.";
+    input {
+      uses org-openroadm-common-service-types:sdnc-request-header;
+      uses controller-parameters;
+    }
+    output {
+      uses org-openroadm-common-service-types:configuration-response-common;
+      leaf-list unsupported-customization-options {
+        type string;
+        description
+          "Provides a list of customization parameters that are not supported by
+           the RNC controller. Leaflist items corresponds to the yang nodes of
+           controller-parameters that the RNC does not handle. It is assumed that
+           for a yang node provided in the list, all nodes/leaves at a lower level
+           in the hierarchy are also not supported by the RNC";
+      }
+    }
+  }
+}