Initial import of Microsemi Driver

Change-Id: I431d5f2c18e0b66a84c36273c3d9f0b84f223841

Added in BUCK files for building driver

Change-Id: I70681327f5b89f67e904c45d5974ab393652d51f

Corrected some syntax errors

Change-Id: I11150cc499c212005f80619e3900e747f1c23d96

Updated pom file to clean build

Change-Id: I6613ddc9e6802aa882e716cf04df210249870835

Added in utility functions for EA1000 Init

Change-Id: I51ffe0cf0daf9ffcea0e2479ee9982fcd1755440

Added YMS code to Microsemi Driver

Change-Id: I6f2a14e454c6909bf9e9f6025321c74c98c13c72

Updated driver to work with YMS and YCH

Change-Id: If7dbe3cd5bd1b6f902d09d6b2dc3895605d70f70

Implemented IetfSystemManager as a service and call on YMS as a service

Change-Id: If1c5e8482b1f53f578a3b0b770accd50024111cf

Moved YMS calls over in to Yang Service implementation

Change-Id: I044aad06f1ef7452bc48e88987787a683666cd72

improved unit test for IetfSystemManager

Change-Id: I48fbf831e7e5ca0e1ef3de8288e56da1b5ebb7a4

Major changes to IetfSystemManager to work in live system

Change-Id: I6e3aa118ba422151f314b9a666860d90905c9929

Added in retry mechanism for DeviceDescription to wait for YCH

Change-Id: If8e0f2c2f315ffd6db15627a11382a00217dd262

Added in implementation of MseaSaFiltering and unit tests

Change-Id: I34bf888e0e732bd4664d1fb8ef5abb679b1506fe

Updated driver with unit tests for MseaSaFiltering

Change-Id: I7ea2407a546622ff55d1ab21610c45697546d632

Modified removeFlowRules of Ea1000FlowRuleProgrammable

Change-Id: Ibb4a555f61887a8e6e42af588bb42f7b70f58efb

Added in manager for MseaUniEvc service with unit tests

Change-Id: Idc5853f46051548973f52a0659f7f88982ff960c

Implemented getFlowEntries() for EVCs from EA1000

Change-Id: Ie85dadfa7760f0b30a9bdf6ccd09cca9f097fff9

Added in translation of FlowRules in to EVC on EA1000

Change-Id: Icfb65171c3300c96b3ca4e18cbd327f0ed2190be

Added in handling of FlowRule deletion including complex ceVlanMaps

Change-Id: I7fd0bb0ef04d1b40e4b7d6a6db7f7ee662329780

Updated Service entries for new onos-yang-tools

Change-Id: I44e655202f3a45073e1e16f83737caed6e01afa8

Revert "Updated Service entries for new onos-yang-tools"

This reverts commit 642b550ef1de12ed59bad2eaa3a2da414d2e5e59.

Improved timeout mechanism for YANG model loading

Change-Id: If744ecd206372e822edf2b736c83226321a12256

Minor edits of EVC creation

Change-Id: Ib0a4763deaf6dce37625ba77f5095b39cd98272d

Added in CustomEvc and supporting classes

Change-Id: Iad60eb1bcd48d2aec55b894b2d419b51852c3b2f

Created CeVlanUtils to resolve loading problem

Change-Id: I0d63931ad2c5ad2725861ebc7dccc4d5fe7b9298

Modified startup check

Change-Id: I6e6bcfa7e615044cb08fe7ee2f8a6c8b89aabb21

Modified handlin of flow rules

Change-Id: I965a79c23298866122aeb94c6d9d584aafee3bd5

Fixed problem with ceVlanMap

Change-Id: If1458c35d0b95b5b25b6636f098292f9e91c06c6

Minor Pom edits

Change-Id: I5cefb18674aa04b1f50bd7e2306260c1c3ad3814

Commented out extension references in YANG files to avoid onos-yang-tools problems

Change-Id: I32fdb34c4f476f495fe28e75d0f410aaf14e2ec1

Corrected error in removing 0 in CeVlanMapUtils

Change-Id: I8cd1fd02788b81c2613364d5639ef6e090057f80

Changes in YMS to accomodate EA1000 driver

Change-Id: I6ae2b9bd2be49eae8d4ad2f929dfe3214c514550
diff --git a/drivers/microsemi/ea1000yang/src/main/yang/y-1564.yang b/drivers/microsemi/ea1000yang/src/main/yang/y-1564.yang
new file mode 100644
index 0000000..9f40ba8
--- /dev/null
+++ b/drivers/microsemi/ea1000yang/src/main/yang/y-1564.yang
@@ -0,0 +1,667 @@
+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";
+        }
+    }
+}