module tapi-connectivity {
    namespace "urn:onf:otcc:yang:tapi-connectivity";
    prefix tapi-connectivity;
    import tapi-common {
        prefix tapi-common;
    }
    import tapi-topology {
        prefix tapi-topology;
    }
    import tapi-path-computation {
        prefix tapi-path-computation;
    }
    organization "ONF OTCC (Open Transport Configuration & Control) Project";
    contact "
         Project Web: <https://wiki.opennetworking.org/display/OTCC/TAPI>
         Project List: <mailto:transport-api@opennetworking.org>
         Editor: Karthik Sethuraman
                 <mailto:karthik.sethuraman@necam.com>";
    description "
        This module contains TAPI Connectivity Model definitions.
        Source: TapiConnectivity.uml
        - The TAPI YANG models included in this TAPI release are a *normative* part of the TAPI SDK.
        - The YANG specifications have been generated from the corresponding UML model using the [ONF EAGLE UML2YANG mapping tool]
          <https://github.com/OpenNetworkingFoundation/EagleUmlYang>
          and further edited manually to comply with the [ONF IISOMI UML2YANG mapping guidelines]
          <https://wiki.opennetworking.org/display/OIMT/UML+-+YANG+Guidelines>
        - Status of YANG model artifacts can be determined by referring to the corresponding UML artifacts.
          As described in the UML models, some artifacts are considered *experimental*, and thus the corresponding YANG artifacts.
        - The ONF TAPI release process does not guarantee backward compatibility of YANG models across major versions of TAPI releases.
          The YANG model backward compatibility criteria are outlined in section 11 of <https://tools.ietf.org/html/rfc7950>.
          YANG models included in this release may not be backward compatible with previous TAPI releases.
        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
        License: This module is distributed under the Apache License 2.0";
    revision 2018-12-10 {
        description "ONF Transport API version 2.1.1.
                   Changes included in this TAPI release (v2.1.1) are listed in
                   <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.1.1.md>";
        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 7950, RFC 6087 and ONF TAPI UML model
                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.1.0/UML>";
    }
    revision 2018-10-16 {
        description "ONF Transport API version 2.1.0.
                   Changes included in this TAPI release (v2.1.0) are listed in
                   <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.1.0.md>";
        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 7950, RFC 6087 and ONF TAPI UML model
                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.1.0/UML>";
    }
    revision 2018-03-07 {
        description "ONF Transport API version 2.0.2
        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.2.md>";
        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.2/UML>";
    }
    revision 2018-02-16 {
        description "ONF Transport API version 2.0.1
        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.1.md>";
        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.1/UML>";
    }
    revision 2018-01-02 {
        description "ONF Transport API version 2.0.0
        This YANG module has been generated from the TAPI UML Model using the IISOMI-Eagle xmi2yang mapping tool.
        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/CHANGE_LOG/change-log.2.0.0.md>";
        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020, RFC 6087 and ONF TAPI UML model
                  <https://github.com/OpenNetworkingFoundation/TAPI/tree/v2.0.0/UML>";
    }
    augment "/tapi-common:context" {
        container connectivity-context {
            uses connectivity-context;
            description "Augments the base TAPI Context with ConnectivityService information";
        }
        description "Augments the base TAPI Context with ConnectivityService information";
    }
    augment "/tapi-common:context/tapi-topology:topology-context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point" {
        container cep-list {
            uses cep-list;
            description "none";
        }
        description "none";
    }

   /**************************
    * definitions of references
    **************************/
    grouping connectivity-service-ref {
        leaf connectivity-service-uuid {
            type leafref {
                path '/tapi-common:context/tapi-connectivity:connectivity-context/tapi-connectivity:connectivity-service/tapi-connectivity:uuid';
            }
            description "none";
        }
        description "none";
    }
    grouping connectivity-service-end-point-ref {
        uses connectivity-service-ref;
        leaf connectivity-service-end-point-local-id {
            type leafref {
                path '/tapi-common:context/tapi-connectivity:connectivity-context/tapi-connectivity:connectivity-service/tapi-connectivity:end-point/tapi-connectivity:local-id';
            }
            description "none";
        }
        description "none";
    }
    grouping connection-end-point-ref {
        uses tapi-topology:node-edge-point-ref;
        leaf connection-end-point-uuid {
            type leafref {
                path '/tapi-common:context/tapi-topology:topology-context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-connectivity:cep-list/tapi-connectivity:connection-end-point/tapi-connectivity:uuid';
            }
            description "none";
        }
        description "none";
    }
    grouping connection-ref {
        leaf connection-uuid {
            type leafref {
                path '/tapi-common:context/tapi-connectivity:connectivity-context/tapi-connectivity:connection/tapi-connectivity:uuid';
            }
            description "none";
        }
        description "none";
    }
    grouping switch-control-ref {
        uses connection-ref;
        leaf switch-control-uuid {
            type leafref {
                path '/tapi-common:context/tapi-connectivity:connectivity-context/tapi-connectivity:connection/tapi-connectivity:switch-control/tapi-connectivity:uuid';
            }
            description "none";
        }
        description "none";
    }
    grouping route-ref {
        uses connection-ref;
        leaf route-local-id {
            type leafref {
                path '/tapi-common:context/tapi-connectivity:connectivity-context/tapi-connectivity:connection/tapi-connectivity:route/tapi-connectivity:local-id';
            }
            description "none";
        }
        description "none";
    }

   /**************************
    * package object-classes
    **************************/
    grouping connection {
        list connection-end-point {
            uses connection-end-point-ref;
            key 'topology-uuid node-uuid node-edge-point-uuid connection-end-point-uuid';
            config false;
            min-elements 2;
            description "none";
        }
        list lower-connection {
            uses connection-ref;
            key 'connection-uuid';
            config false;
            description "An Connection object supports a recursive aggregation relationship such that the internal construction of an Connection can be exposed as multiple lower level Connection objects (partitioning).
                Aggregation is used as for the Node/Topology  to allow changes in hierarchy.
                Connection aggregation reflects Node/Topology aggregation.
                The FC represents a Cross-Connection in an NE. The Cross-Connection in an NE is not necessarily the lowest level of FC partitioning.";
        }
        list supported-client-link {
            uses tapi-topology:link-ref;
            key 'topology-uuid link-uuid';
            config false;
            description "none";
        }
        list route {
            key 'local-id';
            config false;
            uses route;
            description "none";
        }
        list switch-control {
            key 'uuid';
            config false;
            uses switch-control;
            description "none";
        }
        leaf direction {
            type tapi-common:forwarding-direction;
            config false;
            description "none";
        }
        leaf layer-protocol-name {
            type tapi-common:layer-protocol-name;
            config false;
            description "none";
        }
        uses tapi-common:resource-spec;
        uses tapi-common:operational-state-pac;
        description "The ForwardingConstruct (FC) object class models enabled potential for forwarding between two or more LTPs and like the LTP supports any transport protocol including all circuit and packet forms.
            At the lowest level of recursion, a FC represents a cross-connection within an NE.";
    }
    grouping connection-end-point {
        leaf layer-protocol-name {
            type tapi-common:layer-protocol-name;
            config false;
            description "none";
        }
        leaf layer-protocol-qualifier {
            type tapi-common:layer-protocol-qualifier;
            config false;
            description "none";
        }
        container parent-node-edge-point {
            uses tapi-topology:node-edge-point-ref;
            config false;
            description "none";
        }
        list client-node-edge-point {
            uses tapi-topology:node-edge-point-ref;
            key 'topology-uuid node-uuid node-edge-point-uuid';
            config false;
            description "none";
        }
        list aggregated-connection-end-point {
            uses connection-end-point-ref;
            key 'topology-uuid node-uuid node-edge-point-uuid connection-end-point-uuid';
            config false;
            description "none";
        }
        leaf connection-port-direction {
            type tapi-common:port-direction;
            config false;
            description "The orientation of defined flow at the EndPoint.";
        }
        leaf connection-port-role {
            type tapi-common:port-role;
            config false;
            description "Each EP of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root)  in the context of the FC with respect to the FC function. ";
        }
        uses tapi-common:resource-spec;
        uses tapi-common:operational-state-pac;
        uses tapi-common:termination-pac;
        description "The LogicalTerminationPoint (LTP) object class encapsulates the termination and adaptation functions of one or more transport layers.
            The structure of LTP supports all transport protocols including circuit and packet forms.";
    }
    grouping connectivity-constraint {
        leaf service-layer {
            type tapi-common:layer-protocol-name;
            description "none";
        }
        leaf service-type {
            type service-type;
            description "none";
        }
        leaf service-level {
            type string;
            description "An abstract value the meaning of which is mutually agreed – typically represents metrics such as - Class of service, priority, resiliency, availability";
        }
        container requested-capacity {
            uses tapi-common:capacity;
            description "none";
        }
        leaf connectivity-direction {
            type tapi-common:forwarding-direction;
            description "none";
        }
        container schedule {
            uses tapi-common:time-range;
            description "none";
        }
        container coroute-inclusion {
            uses connectivity-service-ref;
            description "none";
        }
        list diversity-exclusion {
            uses connectivity-service-ref;
            key 'connectivity-service-uuid';
            description "none";
        }
        description "none";
    }
    grouping connectivity-service {
        list end-point {
            key 'local-id';
            min-elements 2;
            uses connectivity-service-end-point;
            description "none";
        }
        list connection {
            uses connection-ref;
            key 'connection-uuid';
            config false;
            description "none";
        }
        uses tapi-common:service-spec;
        uses connectivity-constraint;
        uses tapi-path-computation:routing-constraint;
        uses tapi-path-computation:topology-constraint;
        uses resilience-constraint;
        uses tapi-common:admin-state-pac;
        description "The ForwardingConstruct (FC) object class models enabled potential for forwarding between two or more LTPs and like the LTP supports any transport protocol including all circuit and packet forms.
            At the lowest level of recursion, a FC represents a cross-connection within an NE.";
    }
    grouping connectivity-service-end-point {
        leaf layer-protocol-name {
            type tapi-common:layer-protocol-name;
            description "none";
        }
        leaf layer-protocol-qualifier {
            type tapi-common:layer-protocol-qualifier;
            description "none";
        }
        container service-interface-point {
            uses tapi-common:service-interface-point-ref;
            description "none";
        }
        list connection-end-point {
            uses connection-end-point-ref;
            key 'topology-uuid node-uuid node-edge-point-uuid connection-end-point-uuid';
            config false;
            description "none";
        }
        container capacity {
            uses tapi-common:capacity;
            description "none";
        }
        leaf direction {
            type tapi-common:port-direction;
            description "The orientation of defined flow at the EndPoint.";
        }
        leaf role {
            type tapi-common:port-role;
            description "Each EP of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root)  in the context of the FC with respect to the FC function. ";
        }
        leaf protection-role {
            type protection-role;
            description "To specify the protection role of this Port when create or update ConnectivityService.";
        }
        uses tapi-common:local-class;
        uses tapi-common:admin-state-pac;
        description "The association of the FC to LTPs is made via EndPoints.
            The EndPoint (EP) object class models the access to the FC function.
            The traffic forwarding between the associated EPs of the FC depends upon the type of FC and may be associated with FcSwitch object instances.
            In cases where there is resilience the EndPoint may convey the resilience role of the access to the FC.
            It can represent a protected (resilient/reliable) point or a protecting (unreliable working or protection) point.
            The EP replaces the Protection Unit of a traditional protection model.
            The ForwadingConstruct can be considered as a component and the EndPoint as a Port on that component";
    }
    grouping route {
        list connection-end-point {
            uses connection-end-point-ref;
            key 'topology-uuid node-uuid node-edge-point-uuid connection-end-point-uuid';
            config false;
            min-elements 2;
            description "none";
        }
        uses tapi-common:local-class;
        description "The FC Route (FcRoute) object class models the individual routes of an FC.
            The route of an FC object is represented by a list of FCs at a lower level.
            Note that depending on the service supported by an FC, an the FC can have multiple routes.";
    }
    grouping connectivity-context {
        list connectivity-service {
            key 'uuid';
            uses connectivity-service;
            description "none";
        }
        list connection {
            key 'uuid';
            config false;
            uses connection;
            description "none";
        }
        description "none";
    }
    grouping switch {
        list selected-connection-end-point {
            uses connection-end-point-ref;
            key 'topology-uuid node-uuid node-edge-point-uuid connection-end-point-uuid';
            min-elements 1;
            description "none";
        }
        list selected-route {
            uses route-ref;
            key 'connection-uuid route-local-id';
            min-elements 1;
            description "none";
        }
        leaf selection-control {
            type selection-control;
            description "Degree of administrative control applied to the switch selection.";
        }
        leaf selection-reason {
            type selection-reason;
            config false;
            description "The reason for the current switch selection.";
        }
        leaf switch-direction {
            type tapi-common:port-direction;
            description "Indicates whether the switch selects from ingress to the FC or to egress of the FC, or both.";
        }
        uses tapi-common:local-class;
        description "The class models the switched forwarding of traffic (traffic flow) between FcPorts (ConnectionEndPoints) and is present where there is protection functionality in the FC (Connection).
            If an FC exposes protection (having two or more FcPorts that provide alternative identical inputs/outputs), the FC will have one or more associated FcSwitch objects to represent the alternative flow choices visible at the edge of the FC.
            The FC switch represents and defines a protection switch structure encapsulated in the FC.
            Essentially performs one of the functions of the Protection Group in a traditional model. It associates to 2 or more FcPorts each playing the role of a Protection Unit.
            One or more protection, i.e. standby/backup, FcPorts provide protection for one or more working (i.e. regular/main/preferred) FcPorts where either protection or working can feed one or more protected FcPort.
            The switch may be used in revertive or non-revertive (symmetric) mode. When in revertive mode it may define a waitToRestore time.
            It may be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as 1+1 and 1:1).
            It may be locked out (prevented from switching), force switched or manual switched.
            It will indicate switch state and change of state.
            The switch can be switched away from all sources such that it becomes open and hence two coordinated switches can both feed the same LTP so long as at least one of the two is switched away from all sources (is 'open').
            The ability for a Switch to be 'high impedance' allows bidirectional ForwardingConstructs to be overlaid on the same bidirectional LTP where the appropriate control is enabled to prevent signal conflict.
            This ability allows multiple alternate routes to be present that otherwise would be in conflict.";
    }
    grouping switch-control {
        list sub-switch-control {
            uses switch-control-ref;
            key 'connection-uuid switch-control-uuid';
            description "none";
        }
        list switch {
            key 'local-id';
            uses switch;
            description "none";
        }
        uses tapi-common:resource-spec;
        uses resilience-constraint;
        description "Represents the capability to control and coordinate switches, to add/delete/modify FCs and to add/delete/modify LTPs/LPs so as to realize a protection scheme.";
    }
    grouping resilience-constraint {
        container resilience-type {
            uses tapi-topology:resilience-type;
            description "none";
        }
        leaf restoration-coordinate-type {
            type coordinate-type;
            description " The coordination mechanism between multi-layers.";
        }
        leaf restore-priority {
            type uint64;
            description "none";
        }
        leaf reversion-mode {
            type reversion-mode;
            description "Indcates whether the protection scheme is revertive or non-revertive.";
        }
        leaf wait-to-revert-time {
            type uint64;
            default "15";
            description "If the protection system is revertive, this attribute specifies the time, in minutes, to wait after a fault clears on a higher priority (preferred) resource before reverting to the preferred resource.";
        }
        leaf hold-off-time {
            type uint64;
            description "This attribute indicates the time, in milliseconds, between declaration of signal degrade or signal fail, and the initialization of the protection switching algorithm.";
        }
        leaf is-lock-out {
            type boolean;
            description "The resource is configured to temporarily not be available for use in the protection scheme(s) it is part of.
                This overrides all other protection control states including forced.
                If the item is locked out then it cannot be used under any circumstances.
                Note: Only relevant when part of a protection scheme.";
        }
        leaf is-frozen {
            type boolean;
            description "Temporarily prevents any switch action to be taken and, as such, freezes the current state.
                Until the freeze is cleared, additional near-end external commands are rejected and fault condition changes and received APS messages are ignored.
                All administrative controls of any aspect of protection are rejected.";
        }
        leaf is-coordinated-switching-both-ends {
            type boolean;
            description "Is operating such that switching at both ends of each flow acorss the FC is coordinated at both ingress and egress ends.";
        }
        leaf max-switch-times {
            type uint64;
            description "Used to limit the maximum swtich times. When work fault disappears , and traffic return to the original work path, switch counter reset.";
        }
        leaf-list preferred-restoration-layer {
            type tapi-common:layer-protocol-name;
            description "Indicate which layer this resilience parameters package configured for.";
        }
        description "A list of control parameters to apply to a switch.";
    }
    grouping cep-list {
        list connection-end-point {
            key 'uuid';
            uses connection-end-point;
            description "none";
        }
        description "none";
    }

   /**************************
    * package type-definitions
    **************************/
    typedef service-type {
        type enumeration {
            enum POINT_TO_POINT_CONNECTIVITY {
                description "none";
            }
            enum POINT_TO_MULTIPOINT_CONNECTIVITY {
                description "none";
            }
            enum MULTIPOINT_CONNECTIVITY {
                description "none";
            }
            enum ROOTED_MULTIPOINT_CONNECTIVITY {
                description "none";
            }
        }
        description "none";
    }
    typedef reversion-mode {
        type enumeration {
            enum REVERTIVE {
                description "An FC switched to a lower priority (non-preferred) resource will revert to a higher priority (preferred) resource when that recovers (potentially after some hold-off time).";
            }
            enum NON-REVERTIVE {
                description "An FC switched to a lower priority (non-preferred) resource will not revert to a higher priority (preferred) resource when that recovers.";
            }
        }
        description "The reversion mode associated with protection.";
    }
    typedef selection-control {
        type enumeration {
            enum LOCK_OUT {
                description "The resource is configured to temporarily not be available for use in the protection scheme(s) it is part of.
                    This overrides all other protection control states including forced.
                    If the item is locked out then it cannot be used under any circumstances.
                    Note: Only relevant when part of a protection scheme.";
            }
            enum NORMAL {
                description "none";
            }
            enum MANUAL {
                description "none";
            }
            enum FORCED {
                description "none";
            }
        }
        description "Possible degrees of administrative control applied to the Route selection.";
    }
    typedef selection-reason {
        type enumeration {
            enum LOCKOUT {
                description "none";
            }
            enum NORMAL {
                description "none";
            }
            enum MANUAL {
                description "none";
            }
            enum FORCED {
                description "none";
            }
            enum WAIT_TO_REVERT {
                description "none";
            }
            enum SIGNAL_DEGRADE {
                description "none";
            }
            enum SIGNAL_FAIL {
                description "none";
            }
        }
        description "The cause of the current route selection.";
    }
    typedef coordinate-type {
        type enumeration {
            enum NO_COORDINATE {
                description "none";
            }
            enum HOLD_OFF_TIME {
                description "none";
            }
            enum WAIT_FOR_NOTIFICATION {
                description "none";
            }
        }
        description "none";
    }
    typedef protection-role {
        type enumeration {
            enum WORK {
                description "none";
            }
            enum PROTECT {
                description "none";
            }
            enum PROTECTED {
                description "none";
            }
            enum NA {
                description "none";
            }
            enum WORK_RESTORE {
                description "none";
            }
            enum PROTECT_RESTORE {
                description "none";
            }
        }
        description "none";
    }

   /**************************
    * package interfaces
    **************************/
    rpc get-connection-details {
        description "none";
        input {
            leaf connection-id-or-name {
                type string;
                description "none";
            }
        }
        output {
            container connection {
                uses connection;
                description "none";
            }
        }
    }
    rpc get-connectivity-service-list {
        description "none";
        output {
            list service {
                key 'uuid';
                uses connectivity-service;
                description "none";
            }
        }
    }
    rpc get-connectivity-service-details {
        description "none";
        input {
            leaf service-id-or-name {
                type string;
                description "none";
            }
        }
        output {
            container service {
                uses connectivity-service;
                description "none";
            }
        }
    }
    rpc create-connectivity-service {
        description "none";
        input {
            list end-point {
                key 'local-id';
                min-elements 2;
                uses connectivity-service-end-point;
                description "none";
            }
            container connectivity-constraint {
                uses connectivity-constraint;
                description "none";
            }
            container routing-constraint {
                uses tapi-path-computation:routing-constraint;
                description "none";
            }
            container topology-constraint {
                uses tapi-path-computation:topology-constraint;
                description "none";
            }
            container resilience-constraint {
                uses resilience-constraint;
                description "none";
            }
            leaf state {
                type string;
                description "none";
            }
        }
        output {
            container service {
                uses connectivity-service;
                description "none";
            }
        }
    }
    rpc update-connectivity-service {
        description "none";
        input {
            leaf service-id-or-name {
                type string;
                description "none";
            }
            list end-point {
                key 'local-id';
                uses connectivity-service-end-point;
                description "none";
            }
            container connectivity-constraint {
                uses connectivity-constraint;
                description "none";
            }
            container routing-constraint {
                uses tapi-path-computation:routing-constraint;
                description "none";
            }
            container topology-constraint {
                uses tapi-path-computation:topology-constraint;
                description "none";
            }
            container resilience-constraint {
                uses resilience-constraint;
                description "none";
            }
            leaf state {
                type string;
                description "none";
            }
        }
        output {
            container service {
                uses connectivity-service;
                description "none";
            }
        }
    }
    rpc delete-connectivity-service {
        description "none";
        input {
            leaf service-id-or-name {
                type string;
                description "none";
            }
        }
    }
    rpc get-connection-end-point-details {
        description "none";
        input {
            leaf topology-id-or-name {
                type string;
                description "none";
            }
            leaf node-id-or-name {
                type string;
                description "none";
            }
            leaf nep-id-or-name {
                type string;
                description "none";
            }
            leaf cep-id-or-name {
                type string;
                description "none";
            }
        }
        output {
            container connection-end-point {
                uses connection-end-point;
                description "none";
            }
        }
    }
}
