module tapi-connectivity {
    namespace "urn:onf:params:xml:ns: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 "Open Networking Foundation (ONF) / Open Transport Working Group(OTWG) / Transport API (TAPI) Project";
    contact "
        WG Web: TAPI SDK Project <http://opensourcesdn.org/projects/project-snowmass/>
        WG List: TAPI Discussion list <mailto: transport-api@login.opennetworking.org>,
        WG Chair: Karthik Sethuraman <mailto:karthik.sethuraman@necam.com>,
        Editor: Ricard Vilalta <mailto:ricard.vilalta@cttc.es>";
    description "none";
    revision 2017-05-31 {
        description "TAPI SDK 2.0-alpha";
        reference "ONF-TR-527, ONF-TR-512, ONF-TR-531, RFC 6020 and RFC 6087";
    }
    augment "/tapi-common:context" {
        uses connectivity-context;
        description "Augments the base TAPI Context with ConnectivityService information";
    }
    augment "/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point" {
        uses cep-list;
        description "none";
    }
    /***********************
    * package object-classes
    **********************/ 
        grouping connection {
            leaf-list connection-end-point {
                type leafref {
                    path '/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-connectivity:connection-end-point/tapi-connectivity:uuid';
                }
                config false;
                min-elements 2;
                description "none";
            }
            leaf-list lower-connection {
                type leafref {
                    path '/tapi-common:context/tapi-connectivity:connection/tapi-connectivity:uuid';
                }
                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 route {
                key 'local-id';
                config false;
                uses route;
                description "none";
            }
            list switch-control {
                key 'local-id';
                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 connectivity-service-end-point {
                type leafref {
                    path '/tapi-common:context/tapi-connectivity:connectivity-service/tapi-connectivity:end-point/tapi-connectivity:local-id';
                }
                description "none";
            }
            leaf-list parent-node-edge-point {
                type leafref {
                    path '/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-topology:uuid';
                }
                config false;
                min-elements 1;
                description "none";
            }
            leaf-list client-node-edge-point {
                type leafref {
                    path '/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-topology: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-type {
                type service-type;
                config false;
                description "none";
            }
            leaf service-level {
                type string;
                config false;
                description "An abstract value the meaning of which is mutually agreed – typically represents metrics such as - Class of service, priority, resiliency, availability";
            }
            leaf is-exclusive {
                type boolean;
                default "true";
                description "To distinguish if the resources are exclusive to the service  - for example between EPL(isExclusive=true) and EVPL (isExclusive=false), or between EPLAN (isExclusive=true) and EVPLAN (isExclusive=false)";
            }
            container requested-capacity {
                config false;
                uses tapi-common:capacity;
                description "none";
            }
            container schedule {
                uses tapi-common:time-range;
                description "none";
            }
            list cost-characteristic {
                key 'cost-name';
                config false;
                uses tapi-topology:cost-characteristic;
                description "The list of costs where each cost relates to some aspect of the TopologicalEntity.";
            }
            list latency-characteristic {
                key 'traffic-property-name';
                config false;
                uses tapi-topology:latency-characteristic;
                description "The effect on the latency of a queuing process. This only has significant effect for packet based systems and has a complex characteristic.";
            }
            leaf coroute-inclusion {
                type leafref {
                    path '/tapi-common:context/tapi-connectivity:connectivity-service/tapi-connectivity:uuid';
                }
                config false;
                description "none";
            }
            leaf-list diversity-exclusion {
                type leafref {
                    path '/tapi-common:context/tapi-connectivity:connectivity-service/tapi-connectivity:uuid';
                }
                config false;
                description "none";
            }
            uses tapi-connectivity:route-compute-policy;
            description "none";
        }
        grouping connectivity-service {
            list end-point {
                key 'local-id';
                min-elements 2;
                uses connectivity-service-end-point;
                description "none";
            }
            leaf-list connection {
                type leafref {
                    path '/tapi-common:context/tapi-connectivity:connection/tapi-connectivity:uuid';
                }
                config false;
                description "none";
            }
            leaf direction {
                type tapi-common:forwarding-direction;
                description "none";
            }
            leaf layer-protocol-name {
                type tapi-common:layer-protocol-name;
                description "none";
            }
            uses tapi-common:service-spec;
            uses tapi-connectivity:connectivity-constraint;
            uses tapi-connectivity:topology-constraint;
            uses tapi-common:admin-state-pac;
            uses tapi-connectivity:resilience-constraint;
            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 service-interface-point {
                type leafref {
                    path '/tapi-common:context/tapi-common:service-interface-point/tapi-common:uuid';
                }
                description "none";
            }
            container capacity {
                uses tapi-common:capacity-pac;
                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 {
            leaf-list connection-end-point {
                type leafref {
                    path '/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-connectivity:connection-end-point/tapi-connectivity: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 {
            leaf-list selected-connection-end-point {
                type leafref {
                    path '/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-connectivity:connection-end-point/tapi-connectivity:uuid';
                }
                min-elements 1;
                description "none";
            }
            leaf-list selected-route {
                type leafref {
                    path '/tapi-common:context/tapi-connectivity:connection/tapi-connectivity:route/tapi-connectivity: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 {
            leaf-list sub-switch-control {
                type leafref {
                    path '/tapi-common:context/tapi-connectivity:connection/tapi-connectivity:switch-control/tapi-connectivity:local-id';
                }
                description "none";
            }
            list switch {
                key 'local-id';
                uses switch;
                description "none";
            }
            uses tapi-common:local-class;
            uses tapi-connectivity: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 layer-protocol {
                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 topology-constraint {
            leaf-list include-topology {
                type leafref {
                    path '/tapi-common:context/tapi-topology:topology/tapi-topology:uuid';
                }
                config false;
                description "none";
            }
            leaf-list avoid-topology {
                type leafref {
                    path '/tapi-common:context/tapi-topology:topology/tapi-topology:uuid';
                }
                config false;
                description "none";
            }
            leaf-list include-path {
                type leafref {
                    path '/tapi-common:context/tapi-path-computation:path/tapi-path-computation:uuid';
                }
                config false;
                description "none";
            }
            leaf-list exclude-path {
                type leafref {
                    path '/tapi-common:context/tapi-path-computation:path/tapi-path-computation:uuid';
                }
                config false;
                description "none";
            }
            leaf-list include-link {
                type leafref {
                    path '/tapi-common:context/tapi-topology:topology/tapi-topology:link/tapi-topology:uuid';
                }
                config false;
                description "This is a loose constraint - that is it is unordered and could be a partial list ";
            }
            leaf-list exclude-link {
                type leafref {
                    path '/tapi-common:context/tapi-topology:topology/tapi-topology:link/tapi-topology:uuid';
                }
                config false;
                description "none";
            }
            leaf-list include-node {
                type leafref {
                    path '/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:uuid';
                }
                config false;
                description "This is a loose constraint - that is it is unordered and could be a partial list";
            }
            leaf-list exclude-node {
                type leafref {
                    path '/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:uuid';
                }
                config false;
                description "none";
            }
            leaf-list preferred-transport-layer {
                type tapi-common:layer-protocol-name;
                config false;
                description "soft constraint requested by client to indicate the layer(s) of transport connection that it prefers to carry the service. This could be same as the service layer or one of the supported server layers";
            }
            description "none";
        }
        grouping cep-list {
            list connection-end-point {
                key 'uuid';
                uses connection-end-point;
                description "none";
            }
            description "none";
        }
        grouping route-compute-policy {
            leaf route-objective-function {
                type route-objective-function;
                description "none";
            }
            leaf diversity-policy {
                type diversity-policy;
                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 route-objective-function {
            type enumeration {
                enum MIN_WORK_ROUTE_HOP {
                    description "none";
                }
                enum MIN_WORK_ROUTE_COST {
                    description "none";
                }
                enum MIN_WORK_ROUTE_LATENCY {
                    description "none";
                }
                enum MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_HOP {
                    description "none";
                }
                enum MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_COST {
                    description "none";
                }
                enum MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_LATENCY {
                    description "none";
                }
                enum LOAD_BALANCE_MAX_UNUSED_CAPACITY {
                    description "none";
                }
            }
            description "none";
        }
        typedef diversity-policy {
            type enumeration {
                enum SRLG {
                    description "none";
                }
                enum SRNG {
                    description "none";
                }
                enum SNG {
                    description "none";
                }
                enum NODE {
                    description "none";
                }
                enum LINK {
                    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 service-id-or-name {
                    type string;
                    description "none";
                }
                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 {
                    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 {
                    min-elements 2;
                    uses connectivity-service-end-point;
                    description "none";
                }
                container conn-constraint {
                    uses connectivity-constraint;
                    description "none";
                }
                container topo-constraint {
                    uses topology-constraint;
                    description "none";
                }
                list 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";
                }
                container end-point {
                    uses connectivity-service-end-point;
                    description "none";
                }
                container conn-constraint {
                    uses connectivity-constraint;
                    description "none";
                }
                container topo-constraint {
                    uses topology-constraint;
                    description "none";
                }
                list 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";
                }
            }
            output {
                container service {
                    uses connectivity-service;
                    description "none";
                }
            }
        }

}
