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/rfc-2544.yang b/drivers/microsemi/ea1000yang/src/main/yang/rfc-2544.yang
new file mode 100644
index 0000000..fb1a7c0
--- /dev/null
+++ b/drivers/microsemi/ea1000yang/src/main/yang/rfc-2544.yang
@@ -0,0 +1,509 @@
+module rfc-2544 {
+
+    /*** NAMESPACE / PREFIX DEFINITION ***/
+
+    namespace "http://www.microsemi.com/rfc2544";
+    prefix "rfc2544";
+
+    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 RFC 2544 Benchmarking Methodology for Network Interconnect Devices
+
+    Copyright 2015 Microsemi Inc.
+    All rights reserved.";
+
+    revision "2015-10-20" {
+        description
+        "Initial version - Sean Condon, Microsemi";
+    }
+
+    /*
+     * Typedefs
+     */
+
+
+    /*
+     * Groupings
+     */
+    grouping frame-size-group {
+
+        description "Frame sizes to use in the test";
+
+        leaf-list frame-size {
+            type sa:frame-size-type;
+            max-elements 8;
+            units "byte";
+            ordered-by user;
+            description "A range of frame sizes to use. 512 bytes will be used if nothing is specified";
+        }
+
+        reference "RFC 2544 Section 9 
+            All of the described tests SHOULD be performed at a number of frame
+            sizes. Specifically, the sizes SHOULD include the maximum and minimum
+            legitimate sizes for the protocol under test on the media under test
+            and enough sizes in between to be able to get a full characterization
+            of the DUT performance. Except where noted, at least five frame
+            sizes SHOULD be tested for each test condition.";
+    }
+
+    grouping throughput-group {
+        description
+        "Configuration parameters for throughput test.";
+
+        leaf step-size {
+            type uint8 {
+                range 1..10|20|25|30|40|50|100;
+            }
+            must "current() <= ((../max-rate) - (../min-rate))" {
+                error-app-tag "msea-2544-must-1";
+                error-message "step-size must be less than or equal to the difference between min- and max-rate";
+            }
+            units "Mb/s";
+            default 10;
+            description "The throughput rate step size from 1Mb/s to 1,000Mb/s (1 Gbps)";
+        }
+
+        leaf min-rate {
+            type uint16 {
+                range 1..999;
+            }
+            must "current() < ../max-rate" {
+                error-app-tag "msea-2544-must-2";
+                error-message "min-rate must not equal or exceed max-rate";
+            }
+            units "Mb/s";
+            default 10;
+            description "The minimum throughput rate from 1Mb/s to 1,000Mb/s (1Gbps)
+                    The test starts at the max-rate and reduces by step-size on each
+                    iteration until it drops below min-rate. For example with 
+                    max-rate=10, step-size=2 and min-rate=1, tests will be
+                    performed at 10,8,6,4 and 2 Mb/s";
+        }
+
+        leaf max-rate {
+            type uint16 {
+                range 2..1000;
+            }
+            units "Mb/s";
+            default 1000;
+            description "The maximum throughput rate from 1Mb/s to 1,000Mb/s (1Gbps)";
+        }
+
+        leaf trial-duration {
+            type uint32 {
+                range 1..max;
+            }
+            default 60;
+            units "s";
+            description "Trial duration";
+            reference "RFC 2544 Section 24 
+            The duration of the test portion of each trial SHOULD be
+            at least 60 seconds.";
+        }
+    }
+
+    grouping afl-group {
+        description
+        "Extra configuration parameters for throughput and latency test.";
+
+        leaf accepted-frame-loss {
+            type uint32 {
+                range min..100000;
+            }
+            units "m%";
+            default 0;
+            description "The acceptable Frame Loss ratio in units of 0.001%";
+        }
+    }
+
+    grouping result-common-group {
+        description
+        "Common attributes of by-frame-size result set.";
+        
+        leaf test-status {
+            type sa:test-status;
+            mandatory true;
+            description "The current status of the subset of tests";
+        }
+
+        leaf frame-size {
+            type sa:frame-size-type;
+            units "bytes";
+            description "The frame size used";
+        }
+
+        leaf elapsed-time {
+            type uint16;
+            units "s";
+            description "The number of seconds the test has been running";
+        }
+    }
+
+    /*
+     * Features
+     */
+    feature throughput {
+        description
+        "This feature indicates that the device supports throughput tests";
+        reference
+        "RFC 2544: Section 26.1";
+    }
+
+    feature latency {
+        description
+        "This feature indicates that the device supports Latency tests";
+        reference
+        "RFC 2544: Section 26.2";
+    }
+
+    feature frame-loss-rate {
+        description
+        "This feature indicates that the device supports Frame Loss Rate tests";
+        reference
+        "RFC 2544: Section 26.3";
+    }
+
+    feature back-to-back {
+        description
+        "This feature indicates that the device supports Back-to-Back (burst mode) tests";
+        reference
+        "RFC 2544: Section 26.4";
+    }
+
+    container rfc2544-test {
+        description
+        "A configured set of parameters for an RFC 2544 test";
+
+        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 overwrite-drop-eligible {
+                        type boolean;
+                        default false;
+                        description 
+                        "The Drop Eligible flag in the MEP's TAG is replaced 
+                        with this value if overwrite-pcp is present.";
+                    }
+            }
+        }
+
+        leaf binary-search-step-duration {
+            type uint16 {
+                range 1..10;
+            }
+            default 2;
+            units "s";
+            description
+                "The time in seconds for each step in the Throughput binary search. Range 1 to 10, default 2.";
+            reference "RFC 2544 Section 24";
+        }
+
+
+        container throughput {
+            if-feature throughput;
+            description "Configuration parameters for the Throughput part of the test";
+
+            uses throughput-group;
+            uses frame-size-group;
+            uses afl-group;
+        }
+
+        container latency {
+            if-feature latency;
+            description "Configuration parameters for the Latency part of the test";
+
+            uses throughput-group {
+                refine trial-duration {
+                    default 120;
+                }
+            }
+            uses frame-size-group;
+            uses afl-group;
+        }
+
+        container frame-loss {
+            if-feature frame-loss-rate;
+            description "Configuration parameters for the Frame Loss part of the test";
+
+            uses throughput-group;
+            uses frame-size-group;
+        }
+
+        container back-to-back {
+            if-feature back-to-back;
+            description "Configuration parameters for the Back-to-Back part of the test";
+
+            leaf trial-duration {
+                type uint32 {
+                    range 1..10000;
+                }
+                units "ms";
+                default 2000;
+                description "The duration of the Back-to-Back test in milliseconds";
+            }
+            
+            leaf iterations {
+                type uint16 {
+                    range 1..max;
+                }
+                default 50;
+                description "The number of times to run the test";
+            }
+            
+            uses frame-size-group;
+        }
+    }
+
+    container rfc2544-result {
+        config false;
+
+        description "A collection of the results from the RFC 2544 tests";
+
+        container throughput {
+            if-feature throughput;
+
+            description "Results for the Throughput test";
+
+            uses sa:results-header-group;
+
+            list result-item {
+                key frame-size;
+
+                description "The list of results by frame size";
+
+                reference "RFC 2544: Section 26.1";
+
+                uses result-common-group;
+
+                leaf frame-rate {
+                    type uint32;
+                    units "Mb/s";
+                    description "The throughput rate achieved for this packet size";
+                }
+            }
+        }
+
+        container latency {
+            if-feature latency;
+
+            description "Results for the Latency test";
+
+            uses sa:results-header-group;
+
+            list result-item {
+                key frame-size;
+
+                uses result-common-group;
+
+                leaf frame-rate {
+                    type uint32;
+                    units "Mb/s";
+                    description "The throughput rate achieved for this frame size";
+                }
+
+                leaf frame-delay-min {
+                    type uint32;
+                    units "μs";
+                    description "The Minimum Frame Delay measured at the throughput rate";
+                }
+
+                leaf frame-delay-max {
+                    type uint32;
+                    units "μs";
+                    description "The Maximum Frame Delay measured at the throughput rate";
+                }
+
+                leaf frame-delay-avg {
+                    type uint32;
+                    units "μs";
+                    description "The Average Frame Delay measured at the throughput rate";
+                }
+
+                leaf frame-delay-var-min {
+                    type uint32;
+                    units "μs";
+                    description "The Minimum Frame Delay Variation measured at the throughput rate";
+                }
+
+                leaf frame-delay-var-max {
+                    type uint32;
+                    units "μs";
+                    description "The Maximum Frame Delay Variation measured at the throughput rate";
+                }
+
+                leaf frame-delay-var-avg {
+                    type uint32;
+                    units "μs";
+                    description "The Average Frame Delay Variation measured at the throughput rate";
+                }
+            }
+        }
+
+        container frame-loss {
+            if-feature frame-loss-rate;
+
+            description "Results for the Frame Loss test";
+            reference "RFC-2544 Section 26.3";
+
+            uses sa:results-header-group;
+
+            list result-item {
+                key frame-size;
+
+                description "The frame-loss result set for this frame-size";
+
+                uses result-common-group;
+
+                leaf frame-steps {
+                    type uint8;
+                    description "The number of steps recorded during Frame Loss test. Maximum is 8";
+                }
+
+                list frame-rate {
+                    key rate;
+                    description "A list of the losses at each rate step. This shows up to the 8 most recent steps";
+
+                    leaf rate {
+                        type uint32;
+                        units "Mb/s";
+                        description "The test rate used for this step";
+                    }
+
+                    leaf frame-loss {
+                        type uint32;
+                        units "m%";
+                        description "The percentage frames lost for this rate step (in 0.001% units)";
+                    }
+                }
+            }
+        }
+
+        container back-to-back {
+            if-feature back-to-back;
+
+            description "Results for the Back-to-Back (burst mode) test";
+
+            uses sa:results-header-group;
+
+            list result-item {
+                key frame-size;
+
+                leaf test-status {
+                    type sa:test-status;
+                    mandatory true;
+                    description "The current status of the subset of tests";
+                }
+
+                leaf frame-size {
+                    type sa:frame-size-type;
+                    units "bytes";
+                    description "The frame size used";
+                }
+
+                leaf burst-duration {
+                    type uint16;
+                    units "ms";
+                    description "The duration of the burst in milliseconds";
+                }
+
+                leaf average-burst-frame-count {
+                    type uint32;
+                    description "An average of the count of received frames for the test for this frame size";
+                }
+            }
+
+        }
+
+    }
+
+
+
+    rpc run-rfc2544-test {
+
+        description
+        "Run the configured RFC 2544 test";
+
+        input {
+            leaf tests-enabled {
+                type bits {
+                    bit throughput;
+                    bit latency;
+                    bit frameLoss;
+                    bit backToBack;
+                }
+                default "throughput latency frameLoss backToBack";
+                description "Choose the test components to run - by default all are selected";
+            }
+            
+
+            leaf send-subtest-event {
+                type boolean;
+                default true;
+                description "If true then send events for all of the state changes of tests at the 'frame size' level.
+                        If false events are sent only for state changes in the top level tests e.g. throughput";
+            }
+        }
+    }
+
+    rpc stop-rfc2544-test {
+        description
+        "Stop the running RFC 2544 test";
+    }
+
+    notification rfc2544-test-updated {
+        description 
+          "A rfc2544-test-updated notification is sent when the state of a test changes.";
+
+        uses sa:notification-group;
+
+        leaf frame-size {
+            type sa:frame-size-type;
+            units "bytes";
+            description "The frame size that is being tested. If not present then 
+                    the notification pertains to the overall test type";
+        }
+    }
+}
\ No newline at end of file