module y-1564 {

    /*** NAMESPACE / PREFIX DEFINITION ***/

    namespace "http://www.microsemi.com/y1564";
    prefix "y1564";

    import svc-activation-types {
        prefix sa;
    }

    import msea-types {
        prefix msea;
        revision-date 2016-02-29;
    }

    /*** META INFORMATION ***/

    organization
    "Microsemi Inc., FTD Division";

    contact
    "Web URL: http://www.microsemi.com/
    E-mail: info@microsemi.com
    Postal: Microsemi Corporation Corporate Headquarters
    One Enterprise Aliso Viejo,
    CA 92656
    U.S.A.
    Phone: +1 949 380 6100
    Fax: +1 949 215-4996";

    description
    "This YANG module defines the interface for Rec. ITU-T Y.1564
    (03/2011) Ethernet service activation test methodology

    Copyright 2015 Microsemi Inc.
    All rights reserved.";

    revision "2015-10-29" {
        description
        "Initial version - Sean Condon, Microsemi
        This version does not cover frame reordering (Section 7.2.5)";
        reference "Initial implementation";
    }

    /*
     * Typedefs
     */

    /*
     * Groupings
     */
    grouping service-attributes-group {
        description
        "Attributes for service definition";
        leaf service-id {
            type uint8 {
                range 1..8;
            }
            mandatory true;
            description "The unique ID of the Service";
        }
    }
    grouping result-attributes-group {
        description "Common attributes in result";

        leaf status {
            type sa:test-status;
            mandatory true;
            description "Status of the test - Values are disabled,
                    running, pending, stopped, completed or failed";
        }

    }


    grouping pass-fail-group {
        leaf passed {
            type boolean;
            description
            "Flag that indicates whether the test component
            sucessfully met the test criteria.";
        }

        leaf fail-reason {
            type enumeration {
                enum notFailed {
                    value 0;
                    description "Test did not fail";
                }
                enum zeroTxCount {
                    value 1;
                    description "The test resulted in no transmitted packets";
                }
                enum zeroRxCount {
                    value 2;
                    description "No packets were received";
                }
                enum exceedFdvThreshold {
                    value 3;
                    description "The measured maximum Frame Delay Variation value exceeded the allowable threshold";
                }
                enum exceedFtdThreshold {
                    value 4;
                    description "The measured maximum Frame Transfer Delay value exceeded the allowable threshold";
                }
                enum exceedLossThreshold {
                    value 5;
                    description "The measured Frame Loss value exceeded the allowable threshold";
                }
                enum exceedAvailThreshold {
                    value 6;
                    description "The measured maximum Availability value exceeded the allowable threshold";
                }
                enum irAvgTooHigh {
                    value 7;
                    description "The measured Information Rate is above the maximum allowable rate";
                }
                enum irAvgTooLow {
                    value 8;
                    description "The measured Information Rate is below the maximum allowable rate";
                }
                enum targetUnknown {
                    value 9;
                    description "The MAC address of the target MEP was not known";
                }
            }
        }
    }

    grouping y1564-test-result-group {
        description "Common attributes in test result";
        leaf tf {
            type uint64;
            description
            "Count of the frames transmitted during the test period.";
        }

        leaf rf {
            type uint64;
            description
            "Count of the frames received during the test period.";
        }

        leaf fl {
            type uint64;
            description
            "Count of the frames lost during the test period.";
        }

        leaf flr {
            type uint32;
            units "m%";
            description "The Frame Loss Ratio achieved. Units are 0.001%";
        }

        leaf elapsed {
            type uint16;
            units "s";
            description
            "The number of number of seconds the test has been running";
        }

        leaf fs {
            type uint16;
            units byte;
            description "The Frame Size for which these results apply";
        }

        leaf ulr-min {
            type uint32;
            units "bit/s";
            description "The minimum Utilised Line Rate achieved";
        }

        leaf ulr-max {
            type uint32;
            units "bit/s";
            description "The maximum Utilised Line Rate achieved";
        }

        leaf ulr-avg {
            type uint32;
            units "bit/s";
            description "The average Utilised Line Rate achieved";
        }

        leaf ulr-meas {
            type uint32;
            units "bit/s";
            description
            "The instantaneous Utilised Line Rate measured 
            at the time of this result set";
        }

        leaf ftd-min {
            type uint32;
            units "μs";
            description "The minimum Frame Transfer Delay achieved";
        }

        leaf ftd-max {
            type uint32;
            units "μs";
            description "The maximum Frame Transfer Delay achieved";
        }

        leaf ftd-avg {
            type uint32;
            units "μs";
            description "The average Frame Transfer Delay achieved";
        }

        leaf ftd-meas {
            type uint32;
            units "μs";
            description
            "The instantaneous Frame Transfer Delay
            measured at the time of this result set";
        }

        leaf fdv-min {
            type uint32;
            units "μs";
            description "The minimum Frame Delay Variation achieved";
        }

        leaf fdv-max {
            type uint32;
            units "μs";
            description "The maximum Frame Delay Variation achieved";
        }

        leaf fdv-avg {
            type uint32;
            units "μs";
            description "The average Frame Delay Variation achieved";
        }

        leaf fdv-meas {
            type uint32;
            units "μs";
            description
            "The instantaneous Frame Delay Variation measured
            at the time of this result set";
        }
    }



    /*
     * Features
     */
    feature emix {
        description
        "This feature indicates that the device supports
        EMIX style of repeating frame rates patterns";
        reference
        "Rec. ITU-T Y.1564 (03/2011) Section 8.1.1";
    }

    /*
     * Configuration
     */
    container y1564-test {
        description "The overall configuration of the Y.1564
                tests are done through the 'service' entities";

        leaf config-step-duration {
            type uint16 {
                range 1..60;
            }
            units second;
            default 60;
            description "The duration of each step when
                    performing Configuration tests";
            reference "Rec. ITU-T Y.1564 (03/2011) Section 8.3";
        }

        choice performance-duration-choice {
            description
            "Duration can be chosen from enumerated values or
            specified as a duration in minutes";
            reference "Rec. ITU-T Y.1564 (03/2011) Section 8.2.1";

            case fixed-durations-renamed {
                leaf performance-duration-fixed {
                    type enumeration {
                        enum Test15m {
                            value 15;
                            description "15 minute test duration";
                        }
                        enum Test2h {
                            value 120;
                            description "2 hour test duration";
                        }
                        enum Test24h {
                            value 1440;
                            description "24 hour test duration";
                        }
                        enum Unbounded {
                            description "Unbounded test duration";
                        }
                    }
                    default Test15m;
                    description "Fixed durations set";
                }
            }


            case test-duration-minutes {
                leaf performance-duration {
                    type uint16 {
                        range 1..max;
                    }
                    units min;
                    description
                    "The duration of Performance tests specified in minutes";
                    reference "Rec. ITU-T Y.1564 (03/2011) Section 8.2.1";
                }
            }
        }

        leaf performance-frame-size {
            type sa:frame-size-type;
            units octet;
            default 512;
            description
            "The frame size used for the performance test.
            Frame sizes for configuration are configured at a
            the service level. This is a constant value per service (
            frame size repeating emix values are not supported)";
            reference "Rec. ITU-T Y.1564 (03/2011) Section 8.1.1";
        }

        list service-config {
            key service-id;
            description "The services can be configured on this device";

            uses service-attributes-group;

            leaf enabled {
                type boolean;
                default true;
                description "Toggles whether the service is enabled in tests";
            }


            container mep-config {
                presence "Presence indicates that a MEP has been configured";

                uses msea:mep-config-attribs-noref;

                leaf remote-mep-id {
                          type msea:mep-id-type;    
                    must "current()/../maintenance-association-end-point != current()" {
                        error-message "Remote MEP Id must not be the same as Local MEP Id";
                        error-app-tag "msea-svc-must-01";
                    }

                    //mandatory true; //Should not be mandatory in a top level container 
                    description "The Id of the remote MEP";
                }

                container overwrite-pcp {
                    presence "Enables PCP Overwrite";
                    description "If present allows attributes to be
                        specified for the PCP overwrite";

                        uses sa:overwrite-pcp-attribs;

                }
            }

            leaf config-frame-size {
                type sa:frame-size-type;
                units octet;
                default 512;
                description
                "The frame size used for the service configuration test.
                Frame sizes for performance test is configured at a
                higher level. This is a constant value per service (
                frame size repeating emix values are not supported)";
                reference "Rec. ITU-T Y.1564 (03/2011) Section 8.1.1";
            }

            leaf cir {
                type uint16 {
                    range min..1000;
                }
                units "Mb/s";
                default 1;
                description "Committed Information Rate. If 0 then will return zeros";
                reference "Rec. ITU-T Y.1564 (03/2011) Section 8.1";
            }

            leaf eir {
                type uint16 {
                    range min..1000;
                }
                units "Mb/s";
                description "Excess Information Rate. If 0 then this test is disabled";
                reference "Rec. ITU-T Y.1564 (03/2011) Section 8.1";
            }

            leaf colour-aware {
                type boolean;
                default true;
                description "Indicates if the service is colour aware or not";
                reference "Rec. ITU-T Y.1564 (03/2011) Section 6.2.1";
            }

            leaf m-factor {
                type uint16;
                units "kb/s";
                description "The M factor is added to allow for the effect of 
                the traffic policer's CBS and EBS settings, and test time.
                Experience will determine the values for M.
                Additional guidance on M is for further study.";
                reference "Rec. ITU-T Y.1564 (03/2011) Section 8.1.2 C.2";
            }

            container enable-step-test {
                presence "Enables step test";
                description "If this item is present then a step load test of
                CIR will be performed.
                Otherwise simple validation of CIR will be performed.";
                reference "Rec. ITU-T Y.1564 (03/2011) Section 8.1.2";

                leaf step-load-size-override {
                    type uint16 {
                        range 1..1000;
                    }
                    units "Mb/s";
                    description "A manually specified Step Load size in Mb/s.
                    A maximum of 4 steps will be taken. If not specified
                    the default behaviour means the CIR rate divided by
                    4 rounded up to nearest Mb/s. When CIR rate is below 4Mb/s
                    then a corresponding nuumber of steps will be used";
                    reference "Rec. ITU-T Y.1564 (03/2011) Section 8.1";
                }
            }

            container enable-policing-test {
                presence "Enables Policing test";
                description "If this item is present then a Policing
                test will be performed.
                Otherwise no Policing will be performed.";
                reference "Rec. ITU-T Y.1564 (03/2011) Section 8.1.2";
            }

            container service-acceptance-criteria {
                description "Attributes that tune the Service Acceptance
                Criteria per service.";

                leaf accepted-flr {
                    type uint32 {
                        range min..100000;
                    }
                    units "m%";
                    description "A measured Frame Loss Ratio greater than
                    or equal to this value will result in test fail.
                    Units are 0.001%. Default is 0";
                    reference "Rec. ITU-T Y.1564 (03/2011) Section 8.3";
                }

                leaf accepted-ftd {
                    type uint32;
                    units "μs";
                    mandatory true;
                    description "A measured Frame Transfer Delay greater than
                    or equal to this value will result in test fail.";
                    reference "Rec. ITU-T Y.1564 (03/2011) Section 8.3";
                }

                leaf accepted-fdv {
                    type uint32;
                    units "μs";
                    mandatory true;
                    description "A measured Frame Delay Variation greater than
                    or equal to this value will result in test fail.";
                    reference "Rec. ITU-T Y.1564 (03/2011) Section 8.3";
                }
                
                leaf accepted-availability {
                    type uint32 {
                        range min..100000;
                    }
                    units "m%";
                    default 100000;
                    description "A measured Availability for a performance
                    test must meet or exceed this value. Values are in
                    milli-percent. Default is 100%";
                }
            }
        }
    }

    container y1564-results {
        config false;
        description "Top level container for results from the tests";
        container configuration {
            description
            "The results of the Y.1564 Configuration tests on each
            service which was enabled when the test was run";
            reference "Rec. ITU-T Y.1564 (03/2011) Section 8.1.3";

            list service {
                key service-id;
                description "The results for the services configured on this device";

                uses service-attributes-group;

                uses sa:results-header-group;

                container cir-results {
                    description "Results for Committed Information Rate 
                            part of the test";

                    leaf steps {
                        type uint8;
                        description "Indicates the number if steps taken so far.";
                    }

                    list step {
                        key step-id;

                        description "A list of results for each of the steps for
                                the CIR test";

                        leaf step-id {
                            type uint8;
                            mandatory true;
                            description "The index of the step";
                        }

                        uses result-attributes-group;
                        uses pass-fail-group;

                        container green-frames {
                            uses y1564-test-result-group;
                            description "The details of frames marked green during 
                                    the step of the CIR test";
                        }
                    }

                }

                container eir-results {
                    description "Results for Excess Information Rate 
                            part of the test";
                    uses result-attributes-group;
                    uses pass-fail-group;

                    container green-frames {
                        uses y1564-test-result-group;
                        description
                        "The details of frames marked green of the EIR test";
                    }

                    container yellow-frames {
                        uses y1564-test-result-group;
                        description
                        "The details of frames marked yellow of the EIR test";
                    }
                }

                container policer-results {
                    presence "Can be omitted if policer test is
                            not enabled on this service";
                    description "Container for the policer results";
                    uses result-attributes-group;
                    uses pass-fail-group;
                    
                    container green-frames {
                        uses y1564-test-result-group;
                        description
                        "The details of frames marked green of the Policer test";
                    }

                    container yellow-frames {
                        uses y1564-test-result-group;
                        description
                        "The details of frames marked yellow of the Policer test";
                    }
                }

            }
        }

        container performance {
            description
            "The results of the Y.1564 Performance tests on each 
            service was 'enabled'";
            reference "Rec. ITU-T Y.1564 (03/2011) Section 8.2.2";

            uses sa:results-header-group;

            list service {
                key service-id;
                description "The services can be configured on this device";

                uses service-attributes-group;

                uses pass-fail-group;

                uses y1564-test-result-group;

                leaf avail-sec {
                    type uint32;
                    units "s";
                    description
                    "The count of seconds during the test period for which
                    service was Available";
                }
            }
        }
    }

    /*
     * RPCs
     */
    rpc run-y1564-test {
        description
        "Run the configured Y.1564 test on each service 
        that has been marked 'enabled'";

        input {
            leaf tests-enabled {
                type bits {
                    bit configuration {
                        description "Runs the configuration tests";
                    }
                    bit performance {
                        description "Runs the performance tests";
                    }
                }
                default "configuration performance";
                description
                "Bit mask to define which parts of the test are run.
                Specify as a set of space separated string values";
            }
        }
    }

    rpc stop-y1564-test {
        description
        "Stop the running Y.1564 test on all services";
    }

    /*
     * Notifications
     */
    notification y1564-test-updated {
        description 
          "A y1564-test-updated notification is sent
          when the state of a test changes.";

        uses sa:notification-group;

        leaf service-id {
            type uint16;
            mandatory true;
            description "The ID of the Service that is being tested";
        }
    }
}
