module tapi-odu {
    namespace "urn:onf:otcc:yang:tapi-odu";
    prefix tapi-odu;
    import tapi-common {
        prefix tapi-common;
    }
    import tapi-connectivity {
        prefix tapi-connectivity;
    }
    import tapi-topology {
        prefix tapi-topology;
    }
    import tapi-oam {
        prefix tapi-oam;
    }
    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 Odu Model definitions.
        Source: TapiOdu.uml
        Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved.
        License: This module is distributed under the Apache License 2.0";
    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 version .
        <https://wiki.opennetworking.org/display/OIMT/IISOMI>
        Changes in this revision: <https://github.com/OpenNetworkingFoundation/TAPI/blob/develop/change-log.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/develop/UML>";
    }
    augment "/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point" {
        uses odu-node-edge-point-spec;
        description "Augments the base LayerProtocol information in NodeEdgePoint with ODU-specific information";
    }
    augment "/tapi-common:context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-connectivity:connection-end-point" {
        uses odu-connection-end-point-spec;
        description "none";
    }
    augment "/tapi-common:context/tapi-oam:meg/tapi-oam:mep" {
        uses odu-connection-end-point-spec;
        description "none";
    }
    augment "/tapi-common:context/tapi-oam:meg/tapi-oam:mip" {
        uses odu-mip-spec;
        description "none";
    }
    /***********************
    * package object-classes
    **********************/ 
        grouping odu-termination-and-client-adaptation-pac {
            leaf opu-tributary-slot-size {
                type odu-slot-size;
                config false;
                description "This attribute is applicable for ODU2 and ODU3 CTP only. It indicates the slot size of the ODU CTP.";
            }
            leaf auto-payload-type {
                type boolean;
                config false;
                description "This attribute is applicable when the ODU CTP object instance represents a lower order ODU CTP Source at the client layer of the ODUP/ODUj-21 adaptation function. The value of true of this attribute configures that the adaptation source function shall fall back to the payload type PT=20 if the conditions specified in 14.3.10.1/G.798 are satisfied. ";
            }
            leaf configured-client-type {
                type string;
                config false;
                description "This attribute configures the type of the client CTP of the server ODU TTP.";
            }
            leaf configured-mapping-type {
                type mapping-type;
                config false;
                description "This attributes indicates the configured mapping type.";
            }
            container accepted-payload-type {
                config false;
                uses odu-payload-type;
                description "This attribute is applicable when the ODU CTP object instance represents a lower order ODU CTP Sink at the client layer of the ODUP/ODU[i]j or ODUP/ODUj-21 adaptation function. 
                    This attribute is a 2-digit Hex code that indicates the new accepted payload type.
                    Valid values are defined in Table 15-8 of ITU-T Recommendation G.709 with one additional value UN_INTERPRETABLE.";
            }
            description "This Pac contains the attributes associated with the client adaptation function of the server layer TTP
                It is present only if the CEP contains a TTP";
        }
        grouping odu-connection-end-point-spec {
            container odu-common {
                uses odu-common-pac;
                description "none";
            }
            container odu-term-and-adapter {
                config false;
                uses odu-termination-and-client-adaptation-pac;
                description "none";
            }
            container odu-ctp {
                config false;
                uses odu-ctp-pac;
                description "none";
            }
            container odu-protection {
                config false;
                uses odu-protection-pac;
                description "none";
            }
            description "none";
        }
        grouping odu-pool-pac {
            leaf client-capacity {
                type uint64;
                description "none";
            }
            leaf max-client-instances {
                type uint64;
                config false;
                description "none";
            }
            leaf max-client-size {
                type uint64;
                config false;
                description "none";
            }
            description "none";
        }
        grouping odu-node-edge-point-spec {
            container odu-pool {
                config false;
                uses odu-pool-pac;
                description "none";
            }
            description "none";
        }
        grouping odu-ctp-pac {
            leaf-list tributary-slot-list {
                type uint64;
                config false;
                description "This attribute contains a set of distinct (i.e. unique) integers (e.g. 2, 3, 5, 9, 15 representing the tributary slots TS2, TS3, TS5, TS9 and TS15) which represents the resources occupied by the Low Order ODU Link Connection (e.g. carrying an ODUflex with a bit rate of 6.25G). 
                    This attribute applies when the LO ODU_ ConnectionTerminationPoint connects with an HO ODU_TrailTerminationPoint object. 
                    It will not apply if this ODU_ ConnectionTerminationPoint object directly connects to an OTU_TrailTerminationPoint object (i.e. OTU has no trib slots). 
                    The upper bound of the integer allowed in this set is a function of the HO-ODU server layer to which the ODU connection has been mapped (adapted). 
                    Thus, for example, M=8/32/80 for ODU2/ODU3/ODU4 server layers (respectively). Note that the value of this attribute can be changed only in the case of ODUflex and has to be through specific operations (i.e. not be changing the attribute tributarySlotList directly).";
            }
            leaf tributary-port-number {
                type uint64;
                config false;
                description "This attribute identifies the tributary port number that is associated with the ODU CTP.
                    range of type : The value range depends on the size of the Tributary Port Number (TPN) field used which depends on th server-layer ODU or OTU.
                    In case of ODUk mapping into OTUk, there is no TPN field, so the tributaryPortNumber shall be zero.
                    In case of LO ODUj mapping over ODU1, ODU2 or ODU3, the TPN is encoded in a 6-bit field so the value range is 0-63. See clause 14.4.1/G.709-2016.
                    In case of LO ODUj mapping over ODU4, the TPN is encoded in a 7-bit field so the value range is 0-127. See clause 14.4.1.4/G.709-2016.
                    In case of ODUk mapping over ODUCn, the TPN is encoded in a 14-bit field so the value range is 0-16383. See clause 20.4.1.1/G.709-2016.
                    ";
            }
            leaf accepted-msi {
                type string;
                config false;
                description "This attribute is applicable when the ODU CTP object instance represents a lower order ODU1 or ODU2 CTP Sink at the client layer of the ODU3P/ODU12 adaptation function or represents a lower order ODUj CTP Sink at the client layer of the ODUP/ODUj-21 adaptation function. This attribute is a 1-byte field that represents the accepted multiplex structure of the adaptation function. ";
            }
            description "This Pac contains the attributes associated with the CTP
                It is present only if the CEP contains a CTP";
        }
        grouping odu-mep-spec {
            container odu-mep {
                uses odu-mep-pac;
                description "none";
            }
            container odu-ncm {
                config false;
                uses odu-ncm-pac;
                description "none";
            }
            container odu-tcm {
                config false;
                uses odu-tcm-mep-pac;
                description "none";
            }
            container odu-defect {
                uses odu-defect-pac;
                description "none";
            }
            container odu-pm {
                uses odu-pm-pac;
                description "none";
            }
            description "none";
        }
        grouping odu-protection-pac {
            leaf aps-enable {
                type boolean;
                default "true";
                description "This attribute is for enabling/disabling the automatic protection switching (APS) capability at the transport adaptation function that is represented by the ODU_ConnectionTerminationPoint object class. It triggers the MI_APS_EN signal to the transport adaptation function.";
            }
            leaf aps-level {
                type uint64;
                description "This attribute is for configuring the automatic protection switching (APS) level that should operate at the transport adaptation function that is represented by the ODU_ConnectionTerminationPoint object class. It triggers the MI_APS_LVL signal to the transport adaptation function. The value 0 means path and the values 1 through 6 mean TCM level 1 through 6 respectively.";
            }
            description "none";
        }
        grouping odu-ncm-pac {
            leaf-list tcm-fields-in-use {
                type uint64;
                config false;
                description "This attribute indicates the used TCM fields of the ODU OH.";
            }
            description "none";
        }
        grouping odu-tcm-mep-pac {
            leaf tcm-extension {
                type tcm-extension;
                description "none";
            }
            leaf tcm-mode {
                type tcm-mode;
                description "This attribute specifies the TCM mode at the entity. Valid values are: Operational, Monitor, and Transparent.";
            }
            leaf codirectional {
                type boolean;
                config false;
                description "This attribute specifies the directionality of the ODUT MEP with respect to the associated ODU CEP. The value of TRUE means that the sink part of the ODUT MEP terminates the same signal direction as the sink part of the ODU CEP. The Source part behaves similarly. This attribute is meaningful only on objects instantiated under ODU CEP, and at least one among ODU CEP and the subordinate object is bidirectional.";
            }
            leaf ac-status-source {
                type tcm-status;
                config false;
                description "This attribute indicates the status of the accepted TCM. ";
            }
            leaf ac-status-sink {
                type tcm-status;
                config false;
                description "This attribute indicates the status of the accepted TCM. ";
            }
            leaf admin-state-source {
                type tapi-common:administrative-state;
                description "This attribute provides the capability to provision the LOCK signal at the source, which is one of the ODU maintenance signals.  When a Tandem Connection endpoint is set to admin state locked, it will insert the ODU-LCK signal in the source direction.";
            }
            leaf admin-state-sink {
                type tapi-common:administrative-state;
                description "This attribute provides the capability to provision the LOCK signal at the sink, which is one of the ODU maintenance signals. When a Tandem Connection endpoint is set to admin state locked, it will insert the ODU-LCK signal in the downstream direction.";
            }
            uses odu-tcm-mip-pac;
            description "none";
        }
        grouping odu-mip-spec {
            container odu-mip {
                config false;
                uses odu-mip-pac;
                description "none";
            }
            container odu-ncm {
                config false;
                uses odu-ncm-pac;
                description "none";
            }
            container odu-tcm {
                config false;
                uses odu-tcm-mip-pac;
                description "none";
            }
            container odu-pm {
                uses odu-pm-pac;
                description "none";
            }
            container odu-defect {
                uses odu-defect-pac;
                description "none";
            }
            description "none";
        }
        grouping odu-mip-pac {
            leaf acti {
                type string;
                config false;
                description "The Trail Trace Identifier (TTI) information recovered (Accepted) from the TTI overhead position at the sink of a trail.";
            }
            leaf ex-dapi {
                type string;
                description "The Expected Destination Access Point Identifier (ExDAPI), provisioned by the managing system, to be compared with the TTI accepted at the overhead position of the sink for the purpose of checking the integrity of connectivity.";
            }
            leaf ex-sapi {
                type string;
                description "The Expected Source Access Point Identifier (ExSAPI), provisioned by the managing system, to be compared with the TTI accepted at the overhead position of the sink for the purpose of checking the integrity of connectivity.
                    ";
            }
            leaf tim-act-disabled {
                type boolean;
                default "true";
                description "This attribute provides the control capability for the managing system to enable or disable the Consequent Action function when detecting Trace Identifier Mismatch (TIM) at the trail termination sink.";
            }
            leaf tim-det-mode {
                type tim-det-mo;
                description "This attribute indicates the mode of the Trace Identifier Mismatch (TIM) Detection function allowed values: OFF, SAPIonly, DAPIonly, SAPIandDAPI";
            }
            leaf deg-m {
                type uint64;
                description "This attribute indicates the threshold level for declaring a Degraded Signal defect (dDEG). A dDEG shall be declared if DegM consecutive bad PM Seconds are detected.";
            }
            container deg-thr {
                uses deg-thr;
                description "This attribute indicates the threshold level for declaring a performance monitoring (PM) Second to be bad. The value of the threshold can be provisioned in terms of number of errored blocks or in terms of percentage of errored blocks. For percentage-based specification, in order to support provision of less than 1%, the specification consists of two fields. The first field indicates the granularity of percentage. For examples, in 1%, in 0.1%, or in 0.01%, etc. The second field indicates the multiple of the granularity. For number of errored block based, the value is a positive integer.";
            }
            description "none";
        }
        grouping odu-tcm-mip-pac {
            leaf tcm-field {
                type uint64;
                config false;
                description "This attribute indicates the tandem connection monitoring field of the ODU OH.";
            }
            description "none";
        }
        grouping odu-mep-pac {
            leaf dm-source {
                type boolean;
                description "This attribute is for configuring the delay measurement process at the trail termination function represented by the subject TTP object class. It models the MI_DM_Source MI signal. If MI_DM_Source is false, then the value of the DMp bit is determined by the RI_DM. If MI_DM_Source is true, then the value of the DMp bit is set to MI_DMValue.";
            }
            leaf dm-value {
                type boolean;
                description "This attribute is for setting the DMp and DMti bits of the delay measurement process. The value of 'true' sets the DMp and DMti bits to 0 and the value of 'false' to 1.";
            }
            leaf txti {
                type string;
                description "The Trail Trace Identifier (TTI) information, provisioned by the managing system at the termination source, to be placed in the TTI overhead position of the source of a trail for transmission.
                    ";
            }
            uses odu-mip-pac;
            description "none";
        }
        grouping odu-common-pac {
            leaf odu-type {
                type odu-type;
                config false;
                description "This attribute specifies the type of the ODU termination point.";
            }
            leaf odu-rate {
                type uint64;
                config false;
                description "This attribute indicates the rate of the ODU terminatino point. 
                    This attribute is Set at create; i.e., once created it cannot be changed directly. 
                    In case of resizable ODU flex, its value can be changed via HAO (not directly on the attribute). 
                    ";
            }
            leaf odu-rate-tolerance {
                type uint64;
                config false;
                description "This attribute indicates the rate tolerance of the ODU termination point. 
                    Valid values are real value in the unit of ppm. 
                    Standardized values are defined in Table 7-2/G.709.";
            }
            description "none";
        }
        grouping odu-pm-pac {
            leaf n-bbe {
                type uint64;
                description "Near-end Background Block Error";
            }
            leaf f-bbe {
                type uint64;
                config false;
                description "Far-end Background Block Error";
            }
            leaf n-ses {
                type uint64;
                description "Near-end Severely Errored Second";
            }
            leaf f-ses {
                type uint64;
                description "Far-end Severely Errored Second";
            }
            container uas {
                uses uas-choice;
                description "UnAvailable Second";
            }
            description "Instance of this object class contains the ODUP layer-specific Current Data. This object class is a subclass of the OTN_CurrentData object class.
                PM data attributes: fBbe, fSes, nBbe, nSes. uas";
        }
        grouping odu-defect-pac {
            leaf bdi {
                type boolean;
                config false;
                description "Backward Defect Indication";
            }
            leaf deg {
                type boolean;
                config false;
                description "Signal Degraded";
            }
            leaf lck {
                type boolean;
                config false;
                description "Locked";
            }
            leaf oci {
                type boolean;
                config false;
                description "Open Connection Indicator";
            }
            leaf ssf {
                type boolean;
                config false;
                description "Server Signal Failure";
            }
            leaf tim {
                type boolean;
                config false;
                description "Trail Trace Identifier Mismatch";
            }
            description "The valid list of defects raised on the entity. If the value of any attribute is true, then the corresponding defect is raised.";
        }

    /***********************
    * package type-definitions
    **********************/ 
        typedef odu-type {
            type enumeration {
                enum ODU0 {
                    description "none";
                }
                enum ODU1 {
                    description "none";
                }
                enum ODU2 {
                    description "none";
                }
                enum ODU2E {
                    description "none";
                }
                enum ODU3 {
                    description "none";
                }
                enum ODU4 {
                    description "none";
                }
                enum ODU_FLEX {
                    description "none";
                }
                enum ODU_CN {
                    description "none";
                }
            }
            description "none";
        }
        typedef mapping-type {
            type enumeration {
                enum AMP {
                    description "none";
                }
                enum BMP {
                    description "none";
                }
                enum GFP-F {
                    description "none";
                }
                enum GMP {
                    description "none";
                }
                enum TTP_GFP_BMP {
                    description "none";
                }
                enum NULL {
                    description "none";
                }
            }
            description "none";
        }
        typedef tim-det-mo {
            type enumeration {
                enum DAPI {
                    description "none";
                }
                enum SAPI {
                    description "none";
                }
                enum BOTH {
                    description "none";
                }
                enum OFF {
                    description "none";
                }
            }
            description "List of modes for trace identifier mismatch detection.";
        }
        typedef odu-slot-size {
            type enumeration {
                enum 1G25 {
                    description "none";
                }
                enum 2G5 {
                    description "none";
                }
            }
            description "none";
        }
        grouping odu-payload-type {
            leaf named-payload-type {
                type odu-named-payload-type;
                description "none";
            }
            leaf hex-payload-type {
                type uint64;
                description "none";
            }
            description "none";
        }
        typedef odu-named-payload-type {
            type enumeration {
                enum UNKNOWN {
                    description "none";
                }
                enum UNINTERPRETABLE {
                    description "none";
                }
            }
            description "none";
        }
        grouping deg-thr {
            leaf deg-thr-value {
                type uint64;
                description "Percentage of detected errored blocks";
            }
            leaf deg-thr-type {
                type deg-thr-type;
                description "Number of errored blocks";
            }
            leaf percentage-granularity {
                type percentage-granularity;
                description "none";
            }
            description "Degraded Threshold, specify either the percentage or the number of Errored Blocks in the defined interval. 
                degThrValue when type is PERCENTAGE:
                percentageGranularity is used to indicate the number of decimal points
                So if percentageGranularity is ones, a value of 1 in degThrValue would indicate 1%, a value of 10 = 10%, a value of 100 = 100%
                So if percentageGranularity is thousandths a value of 1 in degThrValue would indicate 0.001%, a value of 1000 = 1%, a value of 1000000 = 100%
                degThrValue when type is NUMBER_ERROR_BLOCKS:
                Number of Errored Blocks is captured in an integer value.";
        }
        typedef deg-thr-type {
            type enumeration {
                enum PERCENTAGE {
                    description "Choice of % or Number of errored blocks";
                }
                enum NUMBER_ERRORED_BLOCKS {
                    description "Number of % or blocks";
                }
            }
            description "The value of the threshold can be provisioned in terms of number of errored blocks or in terms of percentage of errored blocks. For percentage-based specification, in order to support provision of less than 1%, the specification consists of two fields. The first field indicates the granularity of percentage. For examples, in 1%, in 0.1%, or in 0.01%, etc. The second field indicates the multiple of the granularity. For number of errored block based, the value is a positive integer.";
        }
        typedef tcm-status {
            type enumeration {
                enum NO_SOURCE_TC {
                    description "TCM byte 3 (bits 6 7 8) -- 0 0 0, No source Tandem Connection";
                }
                enum IN_USE_WITHOUT_IAE {
                    description "TCM byte 3 (bits 6 7 8) -- 0 0 1,  In use without IAE (Incoming Alignment Error)";
                }
                enum IN_USE_WITH_IAE {
                    description "TCM byte 3 (bits 6 7 8) -- 0 1 0, In use with IAE (Incoming Alignment Error)";
                }
                enum RESERVED_1 {
                    description "TCM byte 3 (bits 6 7 8) -- 0 1 1, Reserved for future international standardization";
                }
                enum RESERVED_2 {
                    description "TCM byte 3 (bits 6 7 8) -- 1 0 0, Reserved for future international standardization";
                }
                enum LCK {
                    description "TCM byte 3 (bits 6 7 8) -- 1 0 1, Maintenance signal: ODU-LCK";
                }
                enum OCI {
                    description "TCM byte 3 (bits 6 7 8) -- 1 1 0, Maintenance signal: ODU-OCI";
                }
                enum AIS {
                    description "TCM byte 3 (bits 6 7 8) -- 1 1 1, Maintenance signal: ODU-AIS";
                }
            }
            description "See Table 15-5/G.709/Y.1331 ";
        }
        typedef tcm-mode {
            type enumeration {
                enum OPERATIONAL {
                    description "none";
                }
                enum TRANSPARENT {
                    description "none";
                }
                enum MONITOR {
                    description "none";
                }
            }
            description "List of value modes for the sink side of the tandem connection monitoring function.";
        }
        typedef tcm-monitoring {
            type enumeration {
                enum INTRUSIVE {
                    description "none";
                }
                enum NON-INTRUSIVE {
                    description "none";
                }
            }
            description "Monitoring types for the tandem connection monitoring function.";
        }
        typedef tcm-extension {
            type enumeration {
                enum NORMAL {
                    description "none";
                }
                enum PASS-THROUGH {
                    description "none";
                }
                enum ERASE {
                    description "none";
                }
            }
            description "none";
        }
        typedef percentage-granularity {
            type enumeration {
                enum ONES {
                    description "none";
                }
                enum ONE_TENTHS {
                    description "value * (1/10)";
                }
                enum ONE_HUNDREDTHS {
                    description "value * (1/100)";
                }
                enum ONE_THOUSANDTHS {
                    description "value * (1/1000)";
                }
            }
            description "none";
        }
        grouping uas-choice {
            leaf bidirectional {
                type boolean;
                default "true";
                description "none";
            }
            leaf uas {
                type uint64;
                description "none";
            }
            leaf nuas {
                type uint64;
                description "none";
            }
            leaf fuas {
                type uint64;
                description "none";
            }
            description "If bidirectional is TRUE then use the uas attribute, if bidirectional is FALSE use the nuas, and fuas attributes";
        }

}
