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;
    }
    import tapi-dsr {
        prefix tapi-dsr;
    }
    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-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/tapi-topology:topology-context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point" {
        container odu-node-edge-point-spec {
            uses odu-node-edge-point-spec;
            description "Augments the base LayerProtocol information in NodeEdgePoint with ODU-specific information";
        }
        description "Augments the base LayerProtocol information in NodeEdgePoint with ODU-specific information";
    }
    augment "/tapi-common:context/tapi-topology:topology-context/tapi-topology:topology/tapi-topology:node/tapi-topology:owned-node-edge-point/tapi-connectivity:cep-list/tapi-connectivity:connection-end-point" {
        container odu-connection-end-point-spec {
            uses odu-connection-end-point-spec;
            description "none";
        }
        description "none";
    }
    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:meg/tapi-oam:mep" {
        container odu-connection-end-point-spec {
            uses odu-connection-end-point-spec;
            description "none";
        }
        description "none";
    }
    augment "/tapi-common:context/tapi-oam:oam-context/tapi-oam:meg/tapi-oam:mip" {
        container odu-mip-spec {
            uses odu-mip-spec;
            description "none";
        }
        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 tapi-dsr:digital-signal-type;
            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
    **************************/
    identity ODU_TYPE {
        base tapi-common:LAYER_PROTOCOL_QUALIFIER;
        description "none";
    }
    identity ODU_TYPE_ODU0 {
        base ODU_TYPE;
        description "none";
    }
    identity ODU_TYPE_ODU1 {
        base ODU_TYPE;
        description "none";
    }
    identity ODU_TYPE_ODU2 {
        base ODU_TYPE;
        description "none";
    }
    identity ODU_TYPE_ODU2E {
        base ODU_TYPE;
        description "none";
    }
    identity ODU_TYPE_ODU3 {
        base ODU_TYPE;
        description "none";
    }
    identity ODU_TYPE_ODU4 {
        base ODU_TYPE;
        description "none";
    }
    identity ODU_TYPE_ODU_FLEX {
        base ODU_TYPE;
        description "none";
    }
    identity ODU_TYPE_ODU_CN {
        base ODU_TYPE;
        description "none";
    }
    typedef odu-type {
        type identityref {
            base ODU_TYPE;
        }
        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";
    }
}
