module g.874.1-model {
    namespace "urn:onf:params:xml:ns:yang:g.874.1-model";
    prefix g.874.1-model;

    import core-model {
        prefix core-model;
    }
    import ietf-yang-types {
        prefix yang;
    }

    organization "ONF (Open Networking Foundation) Open Transport Working Group - Wireless Transport Project";
    contact "WG Web: <https://www.opennetworking.org/technical-communities/areas/specification/1931-optical-transport>
             WG List:  <mailto:wireless-transport@login.opennetworking.org>
             WG Chair: Lyndon Ong
                       <mailto:lyong@ciena.com>
             WG Chair: Giorgio Cazzaniga
                       <mailto:giorgio.cazzaniga@sm-optics.com>
             Editors:  Thorsten Heinze
                       <mailto:thorsten.heinze@telefonica.com>
                       Martin Skorupski
                       <mailto:martin.skorupski@highstreet-technologies.com>";
    description "<p>Version 2.02; outcome of the 10/2013 Nuremberg meeting.<br>Version 2.03; updates for Geneva 03-2014<br>Version 2.04; updates for Shanghai 09-2014<br>Version 2.05; input to Geneva 11-2014<br>Version 2.06; output from Geneva 11-2014<br>Version 2.07; using OpenProfile 3-2015<br>Version 2.08; output from Geneva 06-2015</p>";
    revision 2017-03-20 {
        description "Initial version";
        reference "ONF TR 532: A YANG Data Model for Wireless Networks.";
    }
    /***********************
    * package object-classes
    **********************/ 
        grouping otn-current-data-g {
            leaf timestamp {
                type date-and-time;
                description "The timestamp associated with when the current data was collected.";
            }
            uses q.822-current-data-g;
            description "This object class is an abstract class from which the OTN layer-specific CurrentData object classes are inherited. This object class is a subclass of the Q.822 CurrentData object class, which in turn is a subclass of X.739 Scanner object class. It inherits the following attributes: scannerId, operationalState, granularityPeriod, administrativeState, suspectIntervalFlag, elapsedTime, observedObjectClass, and observedObjectInstance.";
        }
        grouping otn-history-data-g {
            leaf suspect-interval-flag {
                type boolean;
                default false;
                description "This attribute indicates that the data collected during the interval is suspect.";
            }
            uses q.822-history-data-g;
            description "This object class is an abstract class from which the OTN layer-specific HistoryData object classes are inherited. ";
        }

    /***********************
    * package type-definitions
    **********************/ 
        typedef directionality {
            type enumeration {
                enum sink {
                    description "none";
                }
                enum source {
                    description "none";
                }
                enum bidirectional {
                    description "none";
                }
            }
            description "The enumeration with the options for directionality of the termination point.";
        }
        typedef gcc-access {
            type enumeration {
                enum gcc1 {
                    description "none";
                }
                enum gcc2 {
                    description "none";
                }
                enum gcc1-and-gcc2 {
                    description "none";
                }
            }
            description "This enumeration indicates the GCC access represented by the entity.";
        }
        typedef operational-state {
            type enumeration {
                enum enabled {
                    description "none";
                }
                enum disabled {
                    description "none";
                }
            }
            description "The list of valid operational states for the connection.";
        }
        typedef oper-type {
            type enumeration {
                enum revertive {
                    description "none";
                }
                enum non-revertive {
                    description "none";
                }
            }
            description "The operation type associated with the protection mechanism (either non-revertive or revertive).";
        }
        typedef ext-cmd-operation {
            type enumeration {
                enum exercise {
                    description "none";
                }
                enum manual-switch {
                    description "none";
                }
                enum forced-switch {
                    description "none";
                }
                enum lockout {
                    description "none";
                }
                enum release-of-manual-switch {
                    description "none";
                }
                enum release-of-forced-switch {
                    description "none";
                }
                enum release-of-lockout {
                    description "none";
                }
            }
            description "This enumeration contains the options for the actions that instruct the protection system for performing specific protection switching operations.";
        }
        typedef administrative-state {
            type enumeration {
                enum unlocked {
                    description "none";
                }
                enum locked {
                    description "none";
                }
                enum shutting-down {
                    description "none";
                }
            }
            description "For more information on Administrative State, See ITU-T Recs. X.731 and M.3100.";
        }
        typedef oc-tk-nim-k-bit-rate {
            type enumeration {
                enum 2.5-g {
                    description "none";
                }
                enum 10-g {
                    description "none";
                }
                enum 40-g {
                    description "none";
                }
                enum 100-g {
                    description "none";
                }
            }
            description "Provides an enumeration with the meaning of each 'k' value.";
        }
        typedef tim-det-mo {
            type enumeration {
                enum dapi {
                    description "none";
                }
                enum sapi {
                    description "none";
                }
                enum both {
                    description "none";
                }
            }
            description "List of modes for trace identifier mismatch detection.";
        }
        typedef oc-tk-nim-problem-list {
            type enumeration {
                enum los-p {
                    description "Loss of Signal -- Payload";
                }
                enum oci {
                    description "Open Connection Indicator";
                }
                enum ssf-p {
                    description "Server Signal Failure -- Payload -- can not co-exist with SSF or SSF-O";
                }
                enum ssf-o {
                    description "Server Signal Failure -- Overhead; can not co-exist with SSF or SSF-P";
                }
                enum ssf {
                    description "Server Signal Failure; can not co-exist with SSF-P or SSF-O";
                }
                enum tim {
                    description "Trail Trace Identifier Mismatch";
                }
                enum deg {
                    description "Signal Degraded";
                }
                enum bdi {
                    description "Backward Defect Indication";
                }
            }
            description "The valid list of problems for the entity.";
        }
        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-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 ops-mnk-ttp-k-bit-rate {
            type enumeration {
                enum 40-g {
                    description "none";
                }
                enum 100-g {
                    description "none";
                }
            }
            description "Provides an enumeration with the meaning of each 'k' value.";
        }
        typedef ops-mnk-ttp-problem-list {
            type enumeration {
                enum los {
                    description "Loss of Signal";
                }
                enum lol {
                    description "Loss of Lane Alignment";
                }
            }
            description "The valid list of problems for the entity.";
        }
        typedef op-sn-ttp-problem-list {
            type enumeration {
                enum los {
                    description "Loss of Signal";
                }
            }
            description "The valid list of problems for the entity.";
        }
        typedef otm-n-k-bit-rates {
            type enumeration {
                enum 2.5-g {
                    description "none";
                }
                enum 10-g {
                    description "none";
                }
                enum 40-g {
                    description "none";
                }
                enum 2.5-10-g {
                    description "none";
                }
                enum 10-40-g {
                    description "none";
                }
                enum 2.5-10-40-g {
                    description "none";
                }
            }
            description "Provides an enumeration with the meaning of each 'k' value.";
        }
        typedef domain-interface {
            type enumeration {
                enum intra-domain {
                    description "none";
                }
                enum inter-domain {
                    description "none";
                }
            }
            description "This enumeration provides the options for the interface associated with OTMn.";
        }
        typedef otm-n-optical-reach {
            type enumeration {
                enum intra-office {
                    description "none";
                }
                enum shorthaul {
                    description "none";
                }
                enum longhaul {
                    description "none";
                }
            }
            description "The valid options for reach of the optical cable.";
        }
        typedef apr-status {
            type enumeration {
                enum on {
                    description "none";
                }
                enum off {
                    description "none";
                }
            }
            description "The enumeration of the options for the Automatic Power Reduction Status.";
        }
        typedef ot-sn-ttp-problem-list {
            type enumeration {
                enum bdi-p {
                    description "BDI-P (Backward Defect Indication - Payload); not co-exist with BDI-O or BDI";
                }
                enum bdi-o {
                    description "BDI-O (Backward Defect Indication - Overhead); not co-exist with BDI-P or BDI";
                }
                enum bdi {
                    description "BDI (Backward Defect Indication); not co-exist with BDI-P or BDI-O";
                }
                enum tim {
                    description "TIM (Trail Trace Identifier Mismatch);";
                }
                enum los-p {
                    description "-P (Loss of Signal - Payload); not co-exist with LOS-O or LOS";
                }
                enum los-o {
                    description "LOS-O (Loss of Signal - Overhead); not co-exist with LOS-P or LOS";
                }
                enum los {
                    description "LOS (Loss of Signal); not co-exist with LOS-P or LOS-O. ";
                }
            }
            description "The valid list of problems for the entity.";
        }
        typedef ot-uk-ctp-adaptation {
            type enumeration {
                enum regular {
                    description "i.e. OPSM/OTUk-a, OCh[r]/OTUk-a";
                }
                enum none {
                    description "i.e. OPSM/OTUk-b, OCh[r]/OTUk-b";
                }
                enum vendor-specific {
                    description "i.e. OCh[r]/OTUk-v";
                }
                enum functionally-standardized {
                    description "i.e. OCh[r]/OTUkV";
                }
            }
            description "The adaptation options for OTUk_ConnectionTermationPoints.";
        }
        typedef ot-uk-ctp-k-bit-rate {
            type enumeration {
                enum 2.5-g {
                    description "none";
                }
                enum 10-g {
                    description "none";
                }
                enum 40-g {
                    description "none";
                }
                enum 100-g {
                    description "none";
                }
            }
            description "Provides an enumeration with the meaning of each 'k' value.";
        }
        typedef ot-uk-ctp-problem-list {
            type enumeration {
                enum lof {
                    description "Loss of Frame";
                }
                enum ais {
                    description "Alarm Indication Signal";
                }
                enum lom {
                    description "Loss of MultiFrame";
                }
            }
            description "The valid list of problems for the entity.";
        }
        typedef ot-uk-ttp-problem-list {
            type enumeration {
                enum tim {
                    description "Trail Trace Identifier Mismatch";
                }
                enum deg {
                    description "Signal Degraded";
                }
                enum bdi {
                    description "Backward Defect Indication";
                }
                enum ssf {
                    description "Server Signal Failure";
                }
            }
            description "The valid list of problems for the entity.";
        }
        typedef monitored-direction {
            type enumeration {
                enum sink {
                    description "none";
                }
                enum source {
                    description "none";
                }
            }
            description "The enumeration with the options for directionality for nonintrusive monitoring.";
        }
        typedef deg-thr-type {
            type enumeration {
                enum percentage {
                    description "<p>Choice of % or Number of errored blocks</p>";
                }
                enum number-errored-blocks {
                    description "<p>Number of % or blocks</p>";
                }
            }
            description "<p>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.</p>";
        }
        typedef link-type {
            type enumeration {
                enum dwdm {
                    description "none";
                }
                enum cwdm {
                    description "none";
                }
                enum no-wdm {
                    description "none";
                }
            }
            description "none";
        }
        typedef application-identifier-type {
            type enumeration {
                enum standard {
                    description "none";
                }
                enum proprietary {
                    description "none";
                }
            }
            description "none";
        }
        typedef printable-string {
            type string;
            description "none";
        }
        typedef date-and-time {
            type string;
            description "This primitive type defines the date and time according to the following structure:
                'yyyyMMddhhmmss.s[Z|{+|-}HHMm]' where:
                yyyy    '0000'..'9999'    year
                MM        '01'..'12'            month
                dd        '01'..'31'            day
                hh        '00'..'23'            hour
                mm        '00'..'59'            minute
                ss        '00'..'59'            second
                s        '.0'..'.9'            tenth of second (set to '.0' if EMS or NE cannot support this granularity)
                Z        'Z'                    indicates UTC (rather than local time)
                {+|-}    '+' or '-'            delta from UTC
                HH        '00'..'23'            time zone difference in hours
                Mm        '00'..'59'            time zone difference in minutes.";
        }
        typedef aps-channel {
            type enumeration {
                enum path {
                    description "none";
                }
                enum tcm1 {
                    description "none";
                }
                enum tcm2 {
                    description "none";
                }
                enum tcm3 {
                    description "none";
                }
                enum tcm4 {
                    description "none";
                }
                enum tcm5 {
                    description "none";
                }
                enum tcm6 {
                    description "none";
                }
                enum section {
                    description "none";
                }
            }
            description "none";
        }
        typedef bit-string {
            type string;
            description "This primitive type defines a bit oriented string.
                The size of the BitString will be defined in the valueRange property of the attribute; according to ASN.1 (X.680).
                The semantic of each bit position will be defined in the Documentation field of the attribute.";
        }
        typedef delay-measurement-role {
            type enumeration {
                enum controller {
                    description "none";
                }
                enum responder {
                    description "none";
                }
            }
            description "none";
        }
        typedef resize-operation-type {
            type enumeration {
                enum increase-bw {
                    description "Increase Bandwidth";
                }
                enum decrease-bw {
                    description "Decrease Bandwidth";
                }
            }
            description "none";
        }
        typedef granularity-period-type {
            type enumeration {
                enum unknown {
                    description "none";
                }
                enum period-15-min {
                    description "none";
                }
                enum period-24-hours {
                    description "none";
                }
            }
            description "The enumeration with the options for granularity period of the performance data.";
        }

    /***********************
    * package illustrative-object-diagrams
    **********************/ 

    /***********************
    * package imported-information-object-classes
    **********************/ 
        /***********************
        * package q.822
        **********************/ 
            grouping q.822-current-data-g {
                leaf suspect-interval-flag {
                    type boolean;
                    description "This attribute is used to indicate that the performance data for the current period may not be reliable. Some reasons for this to occur are:- Suspect data were detected by the actual resource doing data collection.- Transition of the administrativeState attribute to/from the 'lock' state.- Transition of the operationalState to/from the 'disabled' state.- Scheduler setting that inhibits the collection function.- The performance counters were reset during the interval.- The currentData (or subclass) object instance was created during the monitoring period.";
                }
                leaf elapsed-time {
                    type int64;
                    description "none";
                }
                uses x.739-scanner-g;
                description "none";
            }
            grouping q.822-history-data-g {
                leaf history-data-id {
                    type string;
                    description "none";
                }
                leaf period-end-time {
                    type yang:date-and-time;
                    description "none";
                }
                leaf granularity-period {
                    type granularity-period-type;
                    description "none";
                }
                uses x.721-top-g;
                description "none";
            }

        /***********************
        * package x.739
        **********************/ 
            grouping x.739-scanner-g {
                leaf scanner-id {
                    type string;
                    description "none";
                }
                leaf granularity-period {
                    type granularity-period-type;
                    description "none";
                }
                leaf administrative-state {
                    type core-model:administrative-state;
                    description "none";
                }
                uses x.721-top-g;
                description "none";
            }

        /***********************
        * package x.721
        **********************/ 
            grouping x.721-top-g {
                leaf object-class {
                    type object-identifier;
                    description "ObjectClass ::= CHOICE{    globalForm    [0] OBJECT IDENTIFIER,
                        localForm    [1] INTEGER}";
                }
                leaf name-binding {
                    type object-identifier;
                    description "none";
                }
                description "This is the top level of managed object class hierarchy and every other managed object class is a specialization of either this generic class (top) or a specialization of subclass of top. The parameter miscellaneousError is to be used when a processing failure has occurred and the error condition encountered does not match any of object's defined specific error types.";
            }


    /***********************
    * package imported-data-types
    **********************/ 
        typedef object-instance {
            type string;
            description "none";
        }
        typedef name {
            type string;
            description "none";
        }
        typedef object-identifier {
            type string;
            description "none";
        }
        typedef generalized-time {
            type string;
            description "none";
        }
        typedef time-period {
            type string;
            description "This primitive Type is imported from X.739.";
        }

}
