module tapi-topology {
    namespace "urn:onf:otcc:yang:tapi-topology";
    prefix tapi-topology;
    import tapi-common {
        prefix tapi-common;
    }
    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 Topology Model definitions.
        Source: TapiTopology.uml
        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
        License: This module is distributed under the Apache License 2.0";
    revision 2018-10-16 {
        description "ONF Transport API version 2.1.0.
          - The TAPI YANG models included in this TAPI release (v2.1.0) 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 are not backward compatible with previous TAPI releases.
          - 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 topology-context {
            uses topology-context;
            description "Augments the base TAPI Context with TopologyService information";
        }
        description "Augments the base TAPI Context with TopologyService information";
    }

   /**************************
    * definitions of refrences
    **************************/
    grouping topology-ref {
        leaf topology-uuid {
            type leafref {
                path '/tapi-common:context/tapi-topology:topology-context/tapi-topology:topology/tapi-topology:uuid';
            }
            description "none";
        }
        description "none";
    }
    grouping link-ref {
        uses topology-ref;
        leaf link-uuid {
            type leafref {
                path '/tapi-common:context/tapi-topology:topology-context/tapi-topology:topology/tapi-topology:link/tapi-topology:uuid';
            }
            description "none";
        }
        description "none";
    }
    grouping node-ref {
        uses topology-ref;
        leaf node-uuid {
            type leafref {
                path '/tapi-common:context/tapi-topology:topology-context/tapi-topology:topology/tapi-topology:node/tapi-topology:uuid';
            }
            description "none";
        }
        description "none";
    }
    grouping node-edge-point-ref {
        uses node-ref;
        leaf node-edge-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-topology:uuid';
            }
            description "none";
        }
        description "none";
    }
    grouping node-rule-group-ref {
        uses node-ref;
        leaf node-rule-group-uuid {
            type leafref {
                path '/tapi-common:context/tapi-topology:topology-context/tapi-topology:topology/tapi-topology:node/tapi-topology:node-rule-group/tapi-topology:uuid';
            }
            description "none";
        }
        description "none";
    }

   /**************************
    * package object-classes
    **************************/
    grouping link {
        list node-edge-point {
            uses node-edge-point-ref;
            key 'topology-uuid node-uuid node-edge-point-uuid';
            config false;
            min-elements 2;
            description "none";
        }
        leaf-list layer-protocol-name {
            type tapi-common:layer-protocol-name;
            config false;
            min-elements 1;
            description "none";
        }
        leaf direction {
            type tapi-common:forwarding-direction;
            config false;
            description "The directionality of the Link.
                Is applicable to simple Links where all LinkEnds are BIDIRECTIONAL (the Link will be BIDIRECTIONAL) or UNIDIRECTIONAL (the Link will be UNIDIRECTIONAL).
                Is not present in more complex cases.";
        }
        container resilience-type {
            uses resilience-type;
            description "none";
        }
        uses tapi-common:resource-spec;
        uses tapi-common:admin-state-pac;
        uses tapi-common:capacity-pac;
        uses transfer-cost-pac;
        uses transfer-integrity-pac;
        uses transfer-timing-pac;
        uses risk-parameter-pac;
        uses validation-pac;
        uses layer-protocol-transition-pac;
        description "The Link object class models effective adjacency between two or more ForwardingDomains (FD). ";
    }
    grouping node {
        list owned-node-edge-point {
            key 'uuid';
            config false;
            uses node-edge-point;
            description "none";
        }
        list aggregated-node-edge-point {
            uses node-edge-point-ref;
            key 'topology-uuid node-uuid node-edge-point-uuid';
            config false;
            description "none";
        }
        list node-rule-group {
            key 'uuid';
            uses node-rule-group;
            description "none";
        }
        container encap-topology {
            uses topology-ref;
            config false;
            description "none";
        }
        leaf-list layer-protocol-name {
            type tapi-common:layer-protocol-name;
            config false;
            min-elements 1;
            description "none";
        }
        uses tapi-common:resource-spec;
        uses tapi-common:admin-state-pac;
        uses tapi-common:capacity-pac;
        uses transfer-cost-pac;
        uses transfer-integrity-pac;
        uses transfer-timing-pac;
        description "The ForwardingDomain (FD) object class models the ForwardingDomain topological component which is used to effect forwarding of transport characteristic information and offers the potential to enable forwarding.
            At the lowest level of recursion, an FD (within a network element (NE)) represents a switch matrix (i.e., a fabric). Note that an NE can encompass multiple switch matrices (FDs). ";
    }
    grouping topology {
        list node {
            key 'uuid';
            config false;
            uses node;
            description "none";
        }
        list link {
            key 'uuid';
            config false;
            uses link;
            description "none";
        }
        leaf-list layer-protocol-name {
            type tapi-common:layer-protocol-name;
            config false;
            min-elements 1;
            description "none";
        }
        uses tapi-common:resource-spec;
        description "The ForwardingDomain (FD) object class models the ForwardingDomain topological component which is used to effect forwarding of transport characteristic information and offers the potential to enable forwarding.
            At the lowest level of recursion, an FD (within a network element (NE)) represents a switch matrix (i.e., a fabric). Note that an NE can encompass multiple switch matrices (FDs). ";
    }
    grouping layer-protocol-transition-pac {
        leaf-list transitioned-layer-protocol-name {
            type string;
            min-elements 2;
            description "Provides the ordered structure of layer protocol transitions encapsulated in the TopologicalEntity. The ordering relates to the LinkPort role.";
        }
        description "Relevant for a Link that is formed by abstracting one or more LTPs (in a stack) to focus on the flow and deemphasize the protocol transformation.
            This abstraction is relevant when considering multi-layer routing. 
            The layer protocols of the LTP and the order of their application to the signal is still relevant and need to be accounted for. This is derived from the LTP spec details.
            This Pac provides the relevant abstractions of the LTPs and provides the necessary association to the LTPs involved.
            Links that included details in this Pac are often referred to as Transitional Links.";
    }
    grouping node-edge-point {
        leaf layer-protocol-name {
            type tapi-common:layer-protocol-name;
            config false;
            description "none";
        }
        leaf-list supported-cep-layer-protocol-qualifier {
            type tapi-common:layer-protocol-qualifier;
            min-elements 1;
            description "none";
        }
        list aggregated-node-edge-point {
            uses node-edge-point-ref;
            key 'topology-uuid node-uuid node-edge-point-uuid';
            config false;
            description "none";
        }
        list mapped-service-interface-point {
            uses tapi-common:service-interface-point-ref;
            key 'service-interface-point-uuid';
            config false;
            description "NodeEdgePoint mapped to more than ServiceInterfacePoint (slicing/virtualizing) or a ServiceInterfacePoint mapped to more than one NodeEdgePoint (load balancing/Resilience) should be considered experimental";
        }
        leaf link-port-direction {
            type tapi-common:port-direction;
            config false;
            description "The orientation of defined flow at the LinkEnd.";
        }
        leaf link-port-role {
            type tapi-common:port-role;
            config false;
            description "Each LinkEnd of the Link has a role (e.g., symmetric, hub, spoke, leaf, root)  in the context of the Link with respect to the Link function. ";
        }
        uses tapi-common:resource-spec;
        uses tapi-common:admin-state-pac;
        uses tapi-common:termination-pac;
        uses tapi-common:capacity-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 risk-parameter-pac {
        list risk-characteristic {
            key 'risk-characteristic-name';
            config false;
            min-elements 1;
            uses risk-characteristic;
            description "A list of risk characteristics for consideration in an analysis of shared risk. Each element of the list represents a specific risk consideration.";
        }
        description "The risk characteristics of a TopologicalEntity come directly from the underlying physical realization.
            The risk characteristics propagate from the physical realization to the client and from the server layer to the client layer, this propagation may be modified by protection.
            A TopologicalEntity may suffer degradation or failure as a result of a problem in a part of the underlying realization.
            The realization can be partitioned into segments which have some relevant common failure modes.
            There is a risk of failure/degradation of each segment of the underlying realization.
            Each segment is a part of a larger physical/geographical unit that behaves as one with respect to failure (i.e. a failure will have a high probability of impacting the whole unit (e.g. all cables in the same duct).
            Disruptions to that larger physical/geographical unit will impact (cause failure/errors to) all TopologicalEntities that use any part of that larger physical/geographical entity.
            Any TopologicalEntity that uses any part of that larger physical/geographical unit will suffer impact and hence each TopologicalEntity shares risk.
            The identifier of each physical/geographical unit that is involved in the realization of each segment of a Topological entity can be listed in the RiskParameter_Pac of that TopologicalEntity.
            A segment has one or more risk characteristic.
            Shared risk between two TopologicalEntities compromises the integrity of any solution that use one of those TopologicalEntity as a backup for the other.
            Where two TopologicalEntities have a common risk characteristic they have an elevated probability of failing simultaneously compared to two TopologicalEntities that do not share risk characteristics.";
    }
    grouping transfer-cost-pac {
        list cost-characteristic {
            key 'cost-name';
            config false;
            min-elements 1;
            uses cost-characteristic;
            description "The list of costs where each cost relates to some aspect of the TopologicalEntity.";
        }
        description "The cost characteristics of a TopologicalEntity not necessarily correlated to the cost of the underlying physical realization.
            They may be quite specific to the individual TopologicalEntity e.g. opportunity cost. Relates to layer capacity
            There may be many perspectives from which cost may be considered  for a particular TopologicalEntity and hence many specific costs and potentially cost algorithms.
            Using an entity will incur a cost. ";
    }
    grouping transfer-integrity-pac {
        leaf error-characteristic {
            type string;
            config false;
            description "Describes the degree to which the signal propagated can be errored.
                Applies to TDM systems as the errored signal will be propagated and not packet as errored packets will be discarded.";
        }
        leaf loss-characteristic {
            type string;
            config false;
            description "Describes the acceptable characteristic of lost packets where loss may result from discard due to errors or overflow.
                Applies to packet systems and not TDM (as for TDM errored signals are propagated unless grossly errored and overflow/underflow turns into timing slips).";
        }
        leaf repeat-delivery-characteristic {
            type string;
            config false;
            description "Primarily applies to packet systems where a packet may be delivered more than once (in fault recovery for example).
                It can also apply to TDM where several frames may be received twice due to switching in a system with a large differential propagation delay.";
        }
        leaf delivery-order-characteristic {
            type string;
            config false;
            description "Describes the degree to which packets will be delivered out of sequence.
                Does not apply to TDM as the TDM protocols maintain strict order.";
        }
        leaf unavailable-time-characteristic {
            type string;
            config false;
            description "Describes the duration for which there may be no valid signal propagated.";
        }
        leaf server-integrity-process-characteristic {
            type string;
            config false;
            description "Describes the effect of any server integrity enhancement process on the characteristics of the TopologicalEntity.";
        }
        description "Transfer intergrity characteristic covers expected/specified/acceptable characteristic of degradation of the transfered signal.
            It includes all aspects of possible degradation of signal content as well as any damage of any form to the total TopologicalEntity and to the carried signals.
            Note that the statement is of total impact to the TopologicalEntity so any partial usage of the TopologicalEntity (e.g. a signal that does not use full capacity) will only suffer its portion of the impact.";
    }
    grouping transfer-timing-pac {
        list latency-characteristic {
            key 'traffic-property-name';
            config false;
            min-elements 1;
            uses 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.";
        }
        description "A TopologicalEntity will suffer effects from the underlying physical realization related to the timing of the information passed by the TopologicalEntity.";
    }
    grouping validation-pac {
        list validation-mechanism {
            key 'validation-mechanism';
            config false;
            min-elements 1;
            uses validation-mechanism;
            description "Provides details of the specific validation mechanism(s) used to confirm the presence of an intended topologicalEntity.";
        }
        description "Validation covers the various adjacenct discovery and reachability verification protocols. Also may cover Information source and degree of integrity.";
    }
    grouping network-topology-service {
        list topology {
            uses topology-ref;
            key 'topology-uuid';
            config false;
            description "none";
        }
        uses tapi-common:service-spec;
        description "none";
    }
    grouping topology-context {
        container nw-topology-service {
            config false;
            uses network-topology-service;
            description "none";
        }
        list topology {
            key 'uuid';
            config false;
            uses topology;
            description "none";
        }
        description "none";
    }
    grouping inter-rule-group {
        list rule {
            key 'local-id';
            min-elements 1;
            uses rule;
            description "none";
        }
        list associated-node-rule-group {
            uses node-rule-group-ref;
            key 'topology-uuid node-uuid node-rule-group-uuid';
            min-elements 2;
            description "none";
        }
        uses tapi-common:resource-spec;
        uses tapi-common:capacity-pac;
        uses transfer-cost-pac;
        uses transfer-timing-pac;
        uses risk-parameter-pac;
        description "none";
    }
    grouping node-rule-group {
        list rule {
            key 'local-id';
            min-elements 1;
            uses rule;
            description "none";
        }
        list node-edge-point {
            uses node-edge-point-ref;
            key 'topology-uuid node-uuid node-edge-point-uuid';
            min-elements 1;
            description "none";
        }
        list composed-rule-group {
            uses node-rule-group-ref;
            key 'topology-uuid node-uuid node-rule-group-uuid';
            description "none";
        }
        list inter-rule-group {
            key 'uuid';
            uses inter-rule-group;
            description "none";
        }
        uses tapi-common:resource-spec;
        uses tapi-common:capacity-pac;
        uses transfer-cost-pac;
        uses transfer-timing-pac;
        uses risk-parameter-pac;
        description "none";
    }
    grouping rule {
        leaf rule-type {
            type rule-type;
            description "none";
        }
        leaf forwarding-rule {
            type forwarding-rule;
            description "none";
        }
        leaf override-priority {
            type uint64;
            description "none";
        }
        uses tapi-common:local-class;
        description "none";
    }

   /**************************
    * package type-definitions
    **************************/
    grouping cost-characteristic {
        leaf cost-name {
            type string;
            description "The cost characteristic will related to some aspect of the TopologicalEntity (e.g. $ cost, routing weight). This aspect will be conveyed by the costName.";
        }
        leaf cost-value {
            type string;
            description "The specific cost.";
        }
        leaf cost-algorithm {
            type string;
            description "The cost may vary based upon some properties of the TopologicalEntity. The rules for the variation are conveyed by the costAlgorithm.";
        }
        description "The information for a particular cost characteristic.";
    }
    grouping latency-characteristic {
        leaf traffic-property-name {
            type string;
            description "The identifier of the specific traffic property to which the queuing latency applies.";
        }
        leaf fixed-latency-characteristic {
            type string;
            config false;
            description "A TopologicalEntity suffers delay caused by the realization of the servers (e.g. distance related; FEC encoding etc.) along with some client specific processing. This is the total average latency effect of the TopologicalEntity";
        }
        leaf queing-latency-characteristic {
            type string;
            description "The specific queuing latency for the traffic property.";
        }
        leaf jitter-characteristic {
            type string;
            config false;
            description "High frequency deviation from true periodicity of a signal and therefore a small high rate of change of transfer latency.
                Applies to TDM systems (and not packet).";
        }
        leaf wander-characteristic {
            type string;
            config false;
            description "Low frequency deviation from true periodicity of a signal and therefore a small low rate of change of transfer latency.
                Applies to TDM systems (and not packet).";
        }
        description "Provides information on latency characteristic for a particular stated trafficProperty.";
    }
    grouping risk-characteristic {
        leaf risk-characteristic-name {
            type string;
            description "The name of the risk characteristic. The characteristic may be related to a specific degree of closeness.
                For example a particular characteristic may apply to failures that are localized (e.g. to one side of a road) where as another characteristic may relate to failures that have a broader impact (e.g. both sides of a road that crosses a bridge).
                Depending upon the importance of the traffic being routed different risk characteristics will be evaluated.";
        }
        leaf-list risk-identifier-list {
            type string;
            min-elements 1;
            description "A list of the identifiers of each physical/geographic unit (with the specific risk characteristic) that is related to a segment of the TopologicalEntity.";
        }
        description "The information for a particular risk characteristic where there is a list of risk identifiers related to that characteristic.";
    }
    grouping validation-mechanism {
        leaf validation-mechanism {
            type string;
            description "Name of mechanism used to validate adjacency";
        }
        leaf layer-protocol-adjacency-validated {
            type string;
            description "State of validatiion";
        }
        leaf validation-robustness {
            type string;
            description "Quality of validation (i.e. how likely is the stated validation to be invalid)";
        }
        description "Identifies the validation mechanism and describes the characteristics of that mechanism";
    }
    typedef forwarding-rule {
        type enumeration {
            enum MAY_FORWARD_ACROSS_GROUP {
                description "none";
            }
            enum MUST_FORWARD_ACROSS_GROUP {
                description "none";
            }
            enum CANNOT_FORWARD_ACROSS_GROUP {
                description "none";
            }
            enum NO_STATEMENT_ON_FORWARDING {
                description "none";
            }
        }
        description "none";
    }
    typedef rule-type {
        type enumeration {
            enum FORWARDING {
                description "none";
            }
            enum CAPACITY {
                description "none";
            }
            enum COST {
                description "none";
            }
            enum TIMING {
                description "none";
            }
            enum RISK {
                description "none";
            }
            enum GROUPING {
                description "none";
            }
        }
        description "none";
    }
    grouping resilience-type {
        leaf restoration-policy {
            type restoration-policy;
            description "none";
        }
        leaf protection-type {
            type protection-type;
            description "none";
        }
        description "none";
    }
    typedef restoration-policy {
        type enumeration {
            enum PER_DOMAIN_RESTORATION {
                description "none";
            }
            enum END_TO_END_RESTORATION {
                description "none";
            }
            enum NA {
                description "none";
            }
        }
        description "none";
    }
    typedef protection-type {
        type enumeration {
            enum NO_PROTECTON {
                description "none";
            }
            enum ONE_PLUS_ONE_PROTECTION {
                description "none";
            }
            enum ONE_PLUS_ONE_PROTECTION_WITH_DYNAMIC_RESTORATION {
                description "none";
            }
            enum PERMANENT_ONE_PLUS_ONE_PROTECTION {
                description "none";
            }
            enum ONE_FOR_ONE_PROTECTION {
                description "none";
            }
            enum DYNAMIC_RESTORATION {
                description "none";
            }
            enum PRE_COMPUTED_RESTORATION {
                description "none";
            }
        }
        description "none";
    }

   /**************************
    * package interfaces
    **************************/
    rpc get-topology-details {
        description "none";
        input {
            leaf topology-id-or-name {
                type string;
                description "none";
            }
        }
        output {
            container topology {
                uses topology;
                description "none";
            }
        }
    }
    rpc get-node-details {
        description "none";
        input {
            leaf topology-id-or-name {
                type string;
                description "none";
            }
            leaf node-id-or-name {
                type string;
                description "none";
            }
        }
        output {
            container node {
                uses node;
                description "none";
            }
        }
    }
    rpc get-node-edge-point-details {
        description "none";
        input {
            leaf topology-id-or-name {
                type string;
                description "none";
            }
            leaf node-id-or-name {
                type string;
                description "none";
            }
            leaf ep-id-or-name {
                type string;
                description "none";
            }
        }
        output {
            container node-edge-point {
                uses node-edge-point;
                description "none";
            }
        }
    }
    rpc get-link-details {
        description "none";
        input {
            leaf topology-id-or-name {
                type string;
                description "none";
            }
            leaf link-id-or-name {
                type string;
                description "none";
            }
        }
        output {
            container link {
                uses link;
                description "none";
            }
        }
    }
    rpc get-topology-list {
        description "none";
        output {
            list topology {
                key 'uuid';
                uses topology;
                description "none";
            }
        }
    }
}
