Updating Microsemi Driver to onos-yang-tools 2.x

Change-Id: I80e3348087518a8f9a742c813b6238371a3f8f97
diff --git a/drivers/microsemi/ea1000driver/BUCK.ignore b/drivers/microsemi/BUCK
similarity index 60%
rename from drivers/microsemi/ea1000driver/BUCK.ignore
rename to drivers/microsemi/BUCK
index bee66fb..2787032 100644
--- a/drivers/microsemi/ea1000driver/BUCK.ignore
+++ b/drivers/microsemi/BUCK
@@ -3,29 +3,31 @@
     '//drivers/utilities:onos-drivers-utilities',
     '//protocols/netconf/api:onos-protocols-netconf-api',
     '//protocols/netconf/ctl:onos-protocols-netconf-ctl',
-    '//drivers/microsemi/ea1000yang:onos-drivers-microsemi-ea1000yang',
-    '//drivers/microsemi/ea1000yang:onos-drivers-microsemi-ea1000yang-gen',
+    '//models/microsemi:onos-models-microsemi',
     '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
     '//incubator/api:onos-incubator-api',
-]
+] + YANG_TOOLS
 
 TEST_DEPS = [
     '//lib:TEST_ADAPTERS',
     '//core/api:onos-api-tests',
     '//drivers/netconf:onos-drivers-netconf-tests',
-    '//drivers/microsemi/ea1000yang:onos-drivers-microsemi-ea1000yang-tests',
+    '//utils/osgi:onlab-osgi-tests'
 ]
 
-BUNDLES = [
-    '//drivers/utilities:onos-drivers-utilities',
-    '//drivers/microsemi/ea1000yang:onos-drivers-microsemi-ea1000yang',
+APPS = [
+    'org.onosproject.yang',
+#     'org.onosproject.yang-gui',
+    'org.onosproject.config',
+    'org.onosproject.netconf',
+    'org.onosproject.netconfsb',
+    'org.onosproject.drivers.netconf',
+    'org.onosproject.models.microsemi'
 ]
 
 osgi_jar_with_tests (
     deps = COMPILE_DEPS,
     test_deps = TEST_DEPS,
-    srcs = glob(['src/main/java/**/*.java']),
     resources_root = 'src/main/resources',
     resources = glob(['src/main/resources/**']),
 )
@@ -36,6 +38,5 @@
     category = 'Drivers',
     url = 'http://onosproject.org',
     description = 'ONOS Microsemi device drivers application.',
-    included_bundles = BUNDLES,
-    required_apps = [ 'org.onosproject.netconf', 'org.onosproject.yms' ],
+    required_apps = APPS,
 )
diff --git a/drivers/microsemi/ea1000driver/README.md b/drivers/microsemi/README.md
similarity index 78%
rename from drivers/microsemi/ea1000driver/README.md
rename to drivers/microsemi/README.md
index 4187039..1737b08 100755
--- a/drivers/microsemi/ea1000driver/README.md
+++ b/drivers/microsemi/README.md
@@ -7,60 +7,45 @@
 Currently only a subset of it's functionality is supported through ONOS, but this will expand to full functionality in future releases.
 
 #Compile and Installation
-Currently this driver is **not** built using BUCK (because it depends on an older version of onos-yang-tools, while BUCK points to the newer version of the onos-yang-tools)<br/>
+Currently this driver is built using BUCK and uses version 2.1 of onos-yang-tools<br/>
 
-Before this driver can work successfully one problem with the Yang Management System (YMS) App has to be taken in to account. This is that the Yang Codec Handler (YCH) part needs to be built in Maven (when compiled in Buck something is not configured properly).<br/>
-
-To build YMS with Maven:
-1. Change directory to onos/apps/yms/app
-2. Run the command "mvn clean install" (or use the shortcut 'mci')
-3. With onos running, **reinstall** the generated OAR file for YMS on the target machine (could be localhost - replace {bracketed} values with real values)
-    * onos-app {onos-server} reinstall! target/onos-app-yms-{version}.oar
-
-
-Then this Microsemi driver has to be built using Maven and installed. To build it:
-1. Change directory to onos/drivers/microsemi
-2. Run the command "mvn clean install" (or use the shortcut 'mci')
-3. With onos running, install the 2 generated OAR files on the target machine (could be localhost - replace {bracketed} values with real values)
-    * onos-app {onos-server} install ea1000yang/target/onos-drivers-microsemi-ea1000yang-{version}.oar
-    * onos-app {onos-server} install ea1000driver/target/onos-drivers-microsemi-ea1000-{version}.oar
-4. Verify that they are installed by calling **apps -s | grep microsemi** at the onos> prompt
-5. Activate the modules at the onos prompt
-    * onos:app activate org.onosproject.drivers.netconf org.onosproject.drivers.microsemi.yang org.onosproject.drivers.microsemi
+All that is required to activate the driver is to run the following at the ONOS CLI<br/>
+**`onos:app activate org.onosproject.drivers.microsemi`**<br/>
+This will load any dependent apps also. To verify the driver has been loaded run the command<br/>
+**onos:apps -a -s**
 
 #Change NETCONF default connection timeout
 Connection timeouts need to be increased from default values when using EA1000. At ONOS command line run
 
-`onos:cfg set org.onosproject.netconf.ctl.NetconfControllerImpl netconfConnectTimeout 150`<br/>
-`onos:cfg set org.onosproject.netconf.ctl.NetconfControllerImpl netconfReplyTimeout 150`<br/>
+`onos:cfg set org.onosproject.netconf.ctl.impl.NetconfControllerImpl netconfConnectTimeout 50`<br/>
+`onos:cfg set org.onosproject.netconf.ctl.impl.NetconfControllerImpl netconfReplyTimeout 50`<br/>
 
 #Creating Devices
 EA1000 Devices will not be automatically discovered at present in ONOS. They have to be created through the network/configuration REST interface in ONOS.
 
-* The name must follow the format **netconf:<ipaddr>:<port>**
+* The name must follow the format **netconf:ipaddr:port**
 * The **ip** and **port** must correspond to the ip and port in the name (above).
 
 `{`<br/>
-`&nbsp;"devices": {`<br/>
-`&nbsp;&nbsp;"netconf:192.168.56.10:830": {`<br/>
-`&nbsp;&nbsp;&nbsp;"netconf": {`<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"username": "admin",`<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"password": "admin",`<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"ip": "192.168.56.10",`<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"port": "830"`<br/>
-`&nbsp;&nbsp;&nbsp;},`<br/>
-`&nbsp;&nbsp;&nbsp;"basic": {`<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;"driver": "microsemi-netconf",`<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;"type": "SWITCH",`<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;"manufacturer": "Microsemi",`<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;"hwVersion": "EA1000"`<br/>
-`&nbsp;&nbsp;&nbsp;}`<br/>
-`&nbsp;&nbsp;}`<br/>
-`&nbsp;}`<br/>
+&nbsp;`"devices": {`<br/>
+&nbsp;&nbsp;`"netconf:192.168.56.10:830": {`<br/>
+&nbsp;&nbsp;&nbsp;`"netconf": {`<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`"username": "admin",`<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`"password": "admin",`<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`"ip": "192.168.56.10",`<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`"port": "830"`<br/>
+&nbsp;&nbsp;&nbsp;`},`<br/>
+&nbsp;&nbsp;&nbsp;`"basic": {`<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;`"driver": "microsemi-netconf",`<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;`"type": "SWITCH",`<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;`"manufacturer": "Microsemi",`<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;`"hwVersion": "EA1000"`<br/>
+&nbsp;&nbsp;&nbsp;`}`<br/>
+&nbsp;&nbsp;`}`<br/>
+&nbsp;`}`<br/>
 `}`<br/>
 
 
-
 #Connected Device
 When the EA1000 is configured and connected is should be visible in ONOS through the **devices** command.
 
@@ -94,22 +79,22 @@
 
 `POST /onos/v1/flows/ HTTP/1.1`<br/>
 `{`<br/>
-`&nbsp;"flows": [`<br/>
-`&nbsp;&nbsp;{`<br/>
-`&nbsp;&nbsp;&nbsp;"priority": 40000,`<br/>
-`&nbsp;&nbsp;&nbsp;"timeout": 0,`<br/>
-`&nbsp;&nbsp;&nbsp;"isPermanent": true,`<br/>
-`&nbsp;&nbsp;&nbsp;"deviceId": "netconf:192.168.56.10:830",`<br/>
-`&nbsp;&nbsp;&nbsp;"tableId": 8,`<br/>
-`&nbsp;&nbsp;&nbsp;"treatment": {`<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;"instructions": [  {"type": "NOACTION"} ],`<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;"deferred": []`<br/>
-`&nbsp;&nbsp;&nbsp;},`<br/>
-`&nbsp;&nbsp;&nbsp;"selector": {`<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;"criteria": [  {`<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"type": "IPV4_SRC", "ip": "192.168.8.0/24"`<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;},{`<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"type": "IN_PORT", "port": "0"`<br/>
+&nbsp;`"flows": [`<br/>
+&nbsp;&nbsp;`{`<br/>
+&nbsp;&nbsp;&nbsp;`"priority": 50000,`<br/>
+&nbsp;&nbsp;&nbsp;`"timeout": 0,`<br/>
+&nbsp;&nbsp;&nbsp;`"isPermanent": true,`<br/>
+&nbsp;&nbsp;&nbsp;`"deviceId": "netconf:192.168.56.10:830",`<br/>
+&nbsp;&nbsp;&nbsp;`"tableId": 8,`<br/>
+&nbsp;&nbsp;&nbsp;`"treatment": {`<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;`"instructions": [  {"type": "NOACTION"} ],`<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;`"deferred": []`<br/>
+&nbsp;&nbsp;&nbsp;`},`<br/>
+&nbsp;&nbsp;&nbsp;`"selector": {`<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;`"criteria": [  {`<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`"type": "IPV4_SRC", "ip": "192.168.8.0/24"`<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;`},{`<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`"type": "IN_PORT", "port": "0"`<br/>
 `} ] } } ] }`<br/>
 
 ## Vlan Tag Manipulation
@@ -306,34 +291,34 @@
 
 `admin@192.168.56.10> sget-config /mef-services/uni source=running`<br/>
 `rpc-reply {`<br/>
-`&nbsp;data {`<br/>
-`&nbsp;&nbsp;mef-services {`<br/>
-`&nbsp;&nbsp;&nbsp;uni {`  -- There is only one UNI on the EA1000<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;name Uni-on-192.168.56.10:830`  -- Automatically assigned<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;evc  1 {`  -- From the VLAN 1 from CE app<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;evc-index 1`<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name EVC-1`  -- Automatically assigned<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;evc-per-uni {`<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;evc-per-uni-c {`  -- The UNI-C side<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ce-vlan-map 101`  -- Could be a range of values<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flow-mapping {`<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ce-vlan-id 101`<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flow-id 31243725464268887`  -- For tracking with ONOS<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}`<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ingress-bwp-group-index 0`  -- No meters<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tag-push {`  -- Push on an a VLAN<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;push-tag-type pushStag`  -- Push type is S-TAG<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outer-tag-vlan 1`  -- Push value is 1<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}`<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}`<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;evc-per-uni-n {`  -- For the UNI-N side<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ce-vlan-map 1`  -- The VLAN to match for egress on this side<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flow-mapping {`<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ce-vlan-id 1`<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flow-id 31243723770830293`<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}`<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ingress-bwp-group-index 0`<br/>
-`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tag-pop {`  -- Pop off the S-TAG<br/>
+&nbsp;data `{`<br/>
+&nbsp;&nbsp;`mef-services {`<br/>
+&nbsp;&nbsp;&nbsp;`uni {`  -- There is only one UNI on the EA1000<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;`name Uni-on-192.168.56.10:830`  -- Automatically assigned<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;`evc  1 {`  -- From the VLAN 1 from CE app<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`evc-index 1`<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`name EVC-1`  -- Automatically assigned<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`evc-per-uni {`<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`evc-per-uni-c {`  -- The UNI-C side<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`ce-vlan-map 101`  -- Could be a range of values<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`flow-mapping {`<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`ce-vlan-id 101`<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`flow-id 31243725464268887`  -- For tracking with ONOS<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`}`<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`ingress-bwp-group-index 0`  -- No meters<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`tag-push {`  -- Push on an a VLAN<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`push-tag-type pushStag`  -- Push type is S-TAG<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`outer-tag-vlan 1`  -- Push value is 1<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`}`<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`}`<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`evc-per-uni-n {`  -- For the UNI-N side<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`ce-vlan-map 1`  -- The VLAN to match for egress on this side<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`flow-mapping {`<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`ce-vlan-id 1`<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`flow-id 31243723770830293`<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`}`<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`ingress-bwp-group-index 0`<br/>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`tag-pop {`  -- Pop off the S-TAG<br/>
 `} } } } } } } }`<br/>
 `admin@192.168.56.10>`<br/>
 
diff --git a/drivers/microsemi/ea1000driver/pom.xml b/drivers/microsemi/ea1000driver/pom.xml
deleted file mode 100644
index 3ba11e8..0000000
--- a/drivers/microsemi/ea1000driver/pom.xml
+++ /dev/null
@@ -1,100 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- ~ Copyright 2016 Open Networking Laboratory ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); ~ you may not use this file except in compliance with the License. ~ You may obtain a copy of the License at ~ ~ http://www.apache.org/licenses/LICENSE-2.0 ~ ~ Unless required by applicable law or agreed to in writing, software ~ distributed under the License is distributed on an "AS IS" BASIS, ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <artifactId>onos-drivers-microsemi</artifactId>
-        <groupId>org.onosproject</groupId>
-        <version>1.11.0-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>onos-drivers-microsemi-ea1000</artifactId>
-    <packaging>bundle</packaging>
-
-    <description>Microsemi EA1000 device drivers for ONOS</description>
-    <url>http://www.microsemi.com</url>
-
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <onos.version>${project.version}</onos.version>
-        <onos.app.name>org.onosproject.drivers.microsemi</onos.app.name>
-        <onos.app.title>Microsemi Device Drivers</onos.app.title>
-        <onos.app.origin>Microsemi, Inc.</onos.app.origin>
-        <onos.app.category>Drivers</onos.app.category>
-        <onos.app.url>http://onosproject.org</onos.app.url>
-        <onos.app.readme>For various Microsemi Devices including EdgeAssure
-            1000 SFP-NID</onos.app.readme>
-        <onos.app.requires>org.onosproject.netconf</onos.app.requires>
-        <onos.app.requires>org.onosproject.drivers.netconf</onos.app.requires>
-        <onos.app.requires>org.onosproject.yms</onos.app.requires>
-        <onos.app.requires>org.onosproject.drivers.microsemi.yang</onos.app.requires>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>com.google.guava</groupId>
-            <artifactId>guava</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-netconf-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-incubator-api</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-drivers-microsemi-ea1000yang</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-drivers-microsemi-ea1000yang</artifactId>
-            <version>${project.version}</version>
-            <type>test-jar</type>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-app-yms-api</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-app-yms</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-drivers-netconf</artifactId>
-            <version>${project.version}</version>
-            <type>test-jar</type>
-            <scope>test</scope>
-        </dependency>
-
-
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <extensions>true</extensions>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/drivers/microsemi/ea1000driver/src/main/java/org/onosproject/drivers/microsemi/EA1000MeterProvider.java b/drivers/microsemi/ea1000driver/src/main/java/org/onosproject/drivers/microsemi/EA1000MeterProvider.java
deleted file mode 100644
index 2ecc70f..0000000
--- a/drivers/microsemi/ea1000driver/src/main/java/org/onosproject/drivers/microsemi/EA1000MeterProvider.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onosproject.drivers.microsemi;
-
-
-import static org.slf4j.LoggerFactory.getLogger;
-
-import java.util.concurrent.atomic.AtomicInteger;
-
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Deactivate;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.onosproject.core.CoreService;
-import org.onosproject.drivers.microsemi.yang.MseaUniEvcServiceNetconfService;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.meter.Band;
-import org.onosproject.net.meter.Meter.Unit;
-import org.onosproject.net.meter.MeterOperation;
-import org.onosproject.net.meter.MeterOperations;
-import org.onosproject.net.meter.MeterProvider;
-import org.onosproject.net.meter.MeterProviderRegistry;
-import org.onosproject.net.meter.MeterProviderService;
-import org.onosproject.net.provider.AbstractProvider;
-import org.onosproject.net.provider.ProviderId;
-import org.onosproject.netconf.NetconfController;
-import org.onosproject.netconf.NetconfException;
-import org.onosproject.netconf.NetconfSession;
-import org.onosproject.netconf.TargetConfig;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.types.rev20160229.mseatypes.CosColorType;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.types.rev20160229.mseatypes.PriorityType;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.types.rev20160229.mseatypes.coscolortype.CosColorTypeEnum;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.MseaUniEvcService;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.MseaUniEvcService.OnosYangOpType;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.MseaUniEvcServiceOpParam;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.DefaultMefServices;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.MefServices;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.DefaultProfiles;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.DefaultProfiles.ProfilesBuilder;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.profiles.BwpGroup;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.profiles.Cos;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.profiles.DefaultBwpGroup;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.profiles.DefaultCos;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.profiles.bwpgroup.Bwp;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.profiles.bwpgroup.DefaultBwp;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.profiles.cos.costypechoice.DefaultEvcCosTypeEvcColorId;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.profiles.cos.costypechoice.evccostypeevccolorid.DefaultEvcCosTypeAll8PrioTo1EvcColor;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.profiles.cos.costypechoice.evccostypeevccolorid.EvcCosTypeAll8PrioTo1EvcColor;
-import org.slf4j.Logger;
-
-/**
- * Provider which uses an NETCONF controller to handle meters.
- */
-@Component(immediate = true, enabled = true)
-public class EA1000MeterProvider extends AbstractProvider implements MeterProvider {
-
-    private final Logger log = getLogger(getClass());
-
-    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
-    protected NetconfController controller;
-
-    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
-    protected MeterProviderRegistry providerRegistry;
-
-    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
-    protected CoreService coreService;
-
-    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
-    protected MseaUniEvcServiceNetconfService mseaUniEvcServiceSvc;
-
-    private MeterProviderService providerService;
-
-    private static final int COS_INDEX_1 = 1;
-    private static final short DEFAULT_OUTGOING_PRIO = 3;
-
-    /**
-     * Creates a OpenFlow meter provider.
-     */
-    public EA1000MeterProvider() {
-        super(new ProviderId("netconf", "org.onosproject.provider.meter.microsemi"));
-    }
-
-    @Activate
-    public void activate() {
-        providerService = providerRegistry.register(this);
-
-    }
-
-    @Deactivate
-    public void deactivate() {
-        providerRegistry.unregister(this);
-
-        providerService = null;
-    }
-
-    @Override
-    public void performMeterOperation(DeviceId deviceId, MeterOperations meterOps) {
-        log.debug("Adding meterOps to Microsemi Meter Store");
-    }
-
-    @Override
-    public void performMeterOperation(DeviceId deviceId, MeterOperation meterOp) {
-        if (meterOp == null || deviceId == null) {
-            log.warn("Missing argument for performMeterOperation()");
-            return;
-        }
-        log.debug("{} meterOp {} to Microsemi Meter Store", meterOp.type(), meterOp);
-
-        long meterId = meterOp.meter().id().id();
-        String deviceName = deviceId.uri().getSchemeSpecificPart();
-        Unit unit = meterOp.meter().unit();
-
-        ProfilesBuilder profilesBuilder = DefaultProfiles.builder();
-        if (meterOp.type() == MeterOperation.Type.ADD || meterOp.type() == MeterOperation.Type.MODIFY) {
-            Bwp.BwpBuilder bwpBuilder = DefaultBwp.builder()
-                    .cosIndex(COS_INDEX_1)
-                    .name("BWP-" + String.valueOf(meterId) + "-" + deviceName);
-
-            long cirRateKbps = 0L;
-            long cbsRateKbps = 0L;
-            long eirRateKbps = 0L;
-            long ebsRateKbps = 0L;
-            for (Band band:meterOp.meter().bands()) {
-                if (band.type() == Band.Type.REMARK) {
-                    //This relates to CIR/CBS
-                    cirRateKbps = toBitsPerSec(band.rate(), unit);
-                    cbsRateKbps = band.burst(); //Already in kbps
-                } else if (band.type() == Band.Type.DROP) {
-                    //This relates to EIR/EBS
-                    eirRateKbps = toBitsPerSec(band.rate(), unit);
-                    ebsRateKbps = band.burst(); //Already in kbps
-                }
-            }
-            bwpBuilder.committedInformationRate(cirRateKbps).excessInformationRate(eirRateKbps - cirRateKbps);
-            if (meterOp.meter().isBurst()) {
-                bwpBuilder.committedBurstSize(cbsRateKbps).excessBurstSize(ebsRateKbps - cbsRateKbps);
-            }
-
-            BwpGroup.BwpGroupBuilder bwpgBuilder =
-                    DefaultBwpGroup.builder()
-                    .groupIndex((short) meterId)
-                    .addToBwp(bwpBuilder.build());
-
-            //Create cos-1 as referenced above - we only support 1 at the moment
-            Cos.CosBuilder cosBuilder = DefaultCos.builder()
-                    .cosIndex(COS_INDEX_1)
-                    .name("COS-1")
-                    .outgoingCosValue(PriorityType.of(DEFAULT_OUTGOING_PRIO))
-                    .colorAware(true)
-                    .colorForward(true);
-            EvcCosTypeAll8PrioTo1EvcColor ect =
-                    DefaultEvcCosTypeAll8PrioTo1EvcColor.builder()
-                        .evcAll8ColorTo(CosColorType.of(CosColorTypeEnum.GREEN)).build();
-            profilesBuilder
-                    .addToBwpGroup(bwpgBuilder.build())
-                    .addToCos(cosBuilder.cosTypeChoice(
-                                    DefaultEvcCosTypeEvcColorId.builder()
-                                    .evcCosTypeAll8PrioTo1EvcColor(ect).build()).build())
-                    .build();
-        } else if (meterOp.type() == MeterOperation.Type.REMOVE) {
-            BwpGroup.BwpGroupBuilder bwpgBuilder =
-                    DefaultBwpGroup.builder()
-                    .groupIndex((short) meterId)
-                    .yangBwpGroupOpType(OnosYangOpType.DELETE);
-
-            profilesBuilder.addToBwpGroup(bwpgBuilder.build()).build();
-        }
-
-        MefServices mefServices = DefaultMefServices.builder().profiles(profilesBuilder.build()).build();
-
-        MseaUniEvcService.MseaUniEvcServiceBuilder evcUniBuilder =
-                new MseaUniEvcServiceOpParam.MseaUniEvcServiceBuilder();
-
-        MseaUniEvcServiceOpParam mseaUniEvcServiceFilter =
-                (MseaUniEvcServiceOpParam) evcUniBuilder.mefServices(mefServices).build();
-        NetconfSession session = controller.getDevicesMap().get(deviceId).getSession();
-        try {
-            mseaUniEvcServiceSvc.setMseaUniEvcService(mseaUniEvcServiceFilter, session, TargetConfig.RUNNING);
-        } catch (NetconfException e) {
-            //This can fail if the BWP Group is deleted before the EVC that is dependent on it
-            //The delete of the EVC will be called on a separate thread to that should proceed
-            //within a few seconds after which we should try again
-            AtomicInteger retry = new AtomicInteger(4);
-            if (meterOp.type() == MeterOperation.Type.REMOVE &&
-                    e.getMessage().startsWith("Failed to run edit-config through NETCONF")) {
-                while (retry.getAndDecrement() > 0) {
-                    try {
-                        Thread.sleep(1000L);
-                        log.debug("Retrying deletion of Bandwith Profile Group {}", String.valueOf(meterId));
-                        mseaUniEvcServiceSvc.setMseaUniEvcService(mseaUniEvcServiceFilter,
-                                session, TargetConfig.RUNNING);
-                        return; //If it did not throw an exception
-                    } catch (InterruptedException e1) {
-                        // TODO Auto-generated catch block
-                        e1.printStackTrace();
-                    } catch (NetconfException e1) {
-                        log.debug("NETCONF failed to delete profile - trying again in 1 sec");
-                        e1.printStackTrace();
-                    }
-                }
-                log.error("Error deleting BWPGroup {} from {} after 4 tries: {}", meterId, deviceId, e.getMessage());
-            } else {
-                log.error("Error adding BWPGroup {} from {}: {}", meterId, deviceId, e.getMessage());
-                throw new UnsupportedOperationException(e);
-            }
-            e.printStackTrace();
-        }
-    }
-
-    private static long toBitsPerSec(long rate, Unit unit) {
-        if (unit == Unit.KB_PER_SEC) {
-            return rate * 8;
-        } else {
-            return -1;
-        }
-    }
-}
diff --git a/drivers/microsemi/ea1000yang/BUCK.ignore b/drivers/microsemi/ea1000yang/BUCK.ignore
deleted file mode 100644
index 73d20c0..0000000
--- a/drivers/microsemi/ea1000yang/BUCK.ignore
+++ /dev/null
@@ -1,36 +0,0 @@
-YANG_DEPS = [
-  '//lib:CORE_DEPS',
-  '//lib:onos-yang-datamodel',
-  '//lib:onos-yang-utils-generator',
-]
-
-COMPILE_DEPS = [
-  '//lib:CORE_DEPS',
-  '//apps/yms/api:onos-apps-yms-api',
-  '//protocols/netconf/api:onos-protocols-netconf-api',
-  '//lib:onos-yang-datamodel',
-  '//lib:onos-yang-utils-generator',
-  '//lib:org.apache.servicemix.bundles.dom4j',
-  '//drivers/microsemi/ea1000yang:onos-drivers-microsemi-ea1000yang-gen',
-]
-
-TEST_DEPS = [
-  '//lib:TEST_ADAPTERS',
-  '//apps/yms/app:onos-apps-yms-app',
-  '//drivers/netconf:onos-drivers-netconf-tests',
-  '//protocols/netconf/ctl:onos-protocols-netconf-ctl',
-]
-
-yang_osgi_jar(
-  deps = YANG_DEPS,
-  name = 'onos-drivers-microsemi-ea1000yang-gen',
-  srcs = glob(['src/main/yang/**/*.yang']),
-  visibility = [ 'PUBLIC' ],
-)
-
-osgi_jar_with_tests(
-  deps = COMPILE_DEPS,
-  test_deps = TEST_DEPS,
-  visibility = [ 'PUBLIC' ],
-  srcs = glob(['src/main/**/*.java'])
-)
diff --git a/drivers/microsemi/ea1000yang/pom.xml b/drivers/microsemi/ea1000yang/pom.xml
deleted file mode 100644
index edf21d6..0000000
--- a/drivers/microsemi/ea1000yang/pom.xml
+++ /dev/null
@@ -1,144 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- ~ Copyright 2016 Open Networking Laboratory ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); ~ you may not use this file except in compliance with the License. ~ You may obtain a copy of the License at ~ ~ http://www.apache.org/licenses/LICENSE-2.0 ~ ~ Unless required by applicable law or agreed to in writing, software ~ distributed under the License is distributed on an "AS IS" BASIS, ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <artifactId>onos-drivers-microsemi</artifactId>
-        <groupId>org.onosproject</groupId>
-        <version>1.11.0-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>onos-drivers-microsemi-ea1000yang</artifactId>
-    <packaging>bundle</packaging>
-
-    <description>Microsemi YANG model for EA1000</description>
-    <url>http://www.microsemi.com</url>
-
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <onos.version>${project.version}</onos.version>
-        <onos.app.name>org.onosproject.drivers.microsemi.yang</onos.app.name>
-        <onos.app.title>Microsemi Device Drivers YANG</onos.app.title>
-        <onos.app.origin>Microsemi, Inc.</onos.app.origin>
-        <onos.app.category>Drivers</onos.app.category>
-        <onos.app.url>http://onosproject.org</onos.app.url>
-        <onos.app.readme>For various Microsemi Devices including EdgeAssure
-            1000 SFP-NID</onos.app.readme>
-        <onos.yang.version>1.11</onos.yang.version>
-    </properties>
-
-
-    <dependencies>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-netconf-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-yang-utils-generator</artifactId>
-            <version>${onos.yang.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-yang-datamodel</artifactId>
-            <version>${onos.yang.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-app-yms-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onlab-junit</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-app-yms</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-drivers-netconf</artifactId>
-            <version>${project.version}</version>
-            <type>test-jar</type>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.onosproject</groupId>
-                <artifactId>onos-yang-maven-plugin</artifactId>
-                <version>${onos.yang.version}</version>
-                <executions>
-                    <execution>
-                        <configuration>
-                            <classFileDir>target/generated-sources</classFileDir>
-                        </configuration>
-                        <goals>
-                            <goal>yang2java</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Include-Resource>yang/resources/YangMetaData.ser=target/classes/yang/resources/YangMetaData.ser</Include-Resource>
-                    </instructions>
-                </configuration>
-            </plugin>
-
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-clean-plugin</artifactId>
-                <version>3.0.0</version>
-                <executions>
-                    <execution>
-                        <id>onos-yang-plugin-workaround</id>
-                        <!-- yang plugin cannot handle non-clean compilation -->
-                        <phase>initialize</phase>
-                        <goals>
-                            <goal>clean</goal>
-                        </goals>
-                        <configuration>
-                            <excludeDefaultDirectories>true</excludeDefaultDirectories>
-                            <filesets>
-                                <fileset>
-                                    <directory>target/generated-sources</directory>
-                                </fileset>
-                            </filesets>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-
-            <plugin>
-                <groupId>org.jacoco</groupId>
-                <artifactId>jacoco-maven-plugin</artifactId>
-                <configuration>
-                    <excludes>
-                        <exclude>**/delaymeasurement/*</exclude>
-                        <exclude>**/lossmeasurement/*</exclude>
-                    </excludes>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
diff --git a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/MseaSaFilteringNetconfService.java b/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/MseaSaFilteringNetconfService.java
deleted file mode 100644
index 9e35df0..0000000
--- a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/MseaSaFilteringNetconfService.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onosproject.drivers.microsemi.yang;
-
-import org.onosproject.netconf.NetconfException;
-import org.onosproject.netconf.NetconfSession;
-import org.onosproject.netconf.TargetConfig;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.sa.filtering.rev20160412.MseaSaFiltering;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.sa.filtering.rev20160412.MseaSaFilteringOpParam;
-
-/**
- * Extension of mseaSaFilteringService to include NETCONF sessions.
- *
- * This is manually extended and should be revised if the msea-sa-filtering.yang file changes
- */
-public interface MseaSaFilteringNetconfService {
-    /**
-     * Returns the attribute mseaSaFiltering.
-     *
-     * @param mseaSaFiltering value of mseaSaFiltering
-     * @param session  An active NETCONF session
-     * @return mseaSaFiltering
-     * @throws NetconfException if the session has any error
-     */
-    MseaSaFiltering getMseaSaFiltering(
-            MseaSaFilteringOpParam mseaSaFiltering, final NetconfSession session)
-            throws NetconfException;
-
-    /**
-     * Sets the value to attribute mseaSaFiltering.
-     *
-     * @param mseaSaFiltering value of mseaSaFiltering
-     * @param session An active NETCONF session
-     * @param targetDs The NETCONF datastore to edit
-     * @throws NetconfException if the session has any error
-     */
-    void setMseaSaFiltering(MseaSaFilteringOpParam mseaSaFiltering, NetconfSession session, TargetConfig targetDs)
-            throws NetconfException;
-
-}
diff --git a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/impl/AbstractYangServiceImpl.java b/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/impl/AbstractYangServiceImpl.java
deleted file mode 100644
index 7b65a75..0000000
--- a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/impl/AbstractYangServiceImpl.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.drivers.microsemi.yang.impl;
-
-import static org.onosproject.yms.ych.YangProtocolEncodingFormat.XML;
-import static org.onosproject.yms.ydt.YmsOperationType.EDIT_CONFIG_REQUEST;
-import static org.onosproject.yms.ydt.YmsOperationType.QUERY_REPLY;
-import static org.onosproject.yms.ydt.YmsOperationType.QUERY_REQUEST;
-
-import java.util.List;
-
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Deactivate;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.apache.felix.scr.annotations.Service;
-import org.onosproject.core.ApplicationId;
-import org.onosproject.core.CoreService;
-import org.onosproject.netconf.NetconfException;
-import org.onosproject.netconf.NetconfSession;
-import org.onosproject.netconf.TargetConfig;
-import org.onosproject.yms.ych.YangCodecHandler;
-import org.onosproject.yms.ych.YangCompositeEncoding;
-import org.onosproject.yms.ymsm.YmsService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Abstract class that implements some of the core functions of a YANG model service.
- *
- */
-@Component(immediate = true)
-@Service
-public abstract class AbstractYangServiceImpl {
-    protected final Logger log = LoggerFactory.getLogger(getClass());
-    protected boolean alreadyLoaded = false;
-
-    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
-    protected CoreService coreService;
-
-    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
-    protected YmsService ymsService;
-
-    protected ApplicationId appId;
-
-    // YCH is not a service and is a class variable. Can be lost on deactivate.
-    // Must be recreated on activate
-    protected YangCodecHandler ych;
-
-    @Activate
-    public abstract void activate();
-
-    @Deactivate
-    public void deactivate() {
-        alreadyLoaded = false;
-    }
-
-    /**
-     * Internal method to generically make a NETCONF get query from YANG objects.
-     * @param yangObjectOpParamFilter A YANG object model
-     * @param session A NETCONF session
-     * @return YangObjectModel
-     * @throws NetconfException if the session has any error
-     */
-    protected final Object getNetconfObject(
-            Object yangObjectOpParamFilter, NetconfSession session)
-                throws NetconfException {
-        if (session == null) {
-            throw new NetconfException("Session is null when calling getNetconfObject()");
-        }
-        if (yangObjectOpParamFilter == null) {
-            throw new NetconfException("Query object cannot be null");
-        }
-        //Convert the param to XML to use as a filter
-        YangCompositeEncoding xmlQuery =
-                ych.encodeCompositeOperation(null, null,
-                        yangObjectOpParamFilter, XML, QUERY_REQUEST);
-
-        String xmlQueryStr = xmlQuery.getResourceInformation().replace("<>", "").replace("</>", "").trim();
-        log.debug("Sending <get> query on NETCONF session " + session.getSessionId() +
-                ":\n" + xmlQueryStr);
-
-        String xmlResult = session.get(xmlQueryStr, null);
-
-        List<Object> objectList = ych.decode(xmlResult, XML, QUERY_REPLY);
-        if (objectList != null && objectList.size() > 0) {
-            Object systemObject = objectList.get(0);
-            return systemObject;
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * Internal method to generically make a NETCONF get-config query from YANG objects.
-     *
-     * @param yangObjectOpParamFilter A YANG object model
-     * @param session A NETCONF session
-     * @param targetDs - running,candidate or startup
-     * @return YangObjectModel
-     * @throws NetconfException if the session has any error
-     */
-    protected final Object getConfigNetconfObject(
-            Object yangObjectOpParamFilter, NetconfSession session, TargetConfig targetDs)
-                throws NetconfException {
-        if (session == null) {
-            throw new NetconfException("Session is null when calling getConfigNetconfObject()");
-        }
-
-        if (yangObjectOpParamFilter == null) {
-            throw new NetconfException("Query object cannot be null");
-        }
-        //Convert the param to XML to use as a filter
-        YangCompositeEncoding xmlQuery =
-                ych.encodeCompositeOperation(null, null,
-                        yangObjectOpParamFilter, XML, QUERY_REQUEST);
-
-        String xmlQueryStr = xmlQuery.getResourceInformation().replace("<>", "").replace("</>", "").trim();
-        log.debug("Sending <get-config> for " + targetDs +
-                " query on NETCONF session " + session.getSessionId() +
-                ":\n" + xmlQueryStr);
-
-        String xmlResult = session.getConfig(targetDs, xmlQueryStr);
-
-        List<Object> objectList = ych.decode(xmlResult, XML, QUERY_REPLY);
-        if (objectList != null && objectList.size() > 0) {
-            Object systemObject = objectList.get(0);
-            return systemObject;
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * Internal method to generically make a NETCONF edit-config call from a set of YANG objects.
-     *
-     * @param yangObjectOpParamFilter A YANG object model
-     * @param session A NETCONF session
-     * @param targetDs - running,candidate or startup
-     * @throws NetconfException if the session has any error
-     */
-    protected final void setNetconfObject(
-            Object yangObjectOpParamFilter, NetconfSession session, TargetConfig targetDs)
-                throws NetconfException {
-        if (yangObjectOpParamFilter == null) {
-            throw new NetconfException("Query object cannot be null");
-        } else if (session == null) {
-            throw new NetconfException("Session is null when calling getMseaSaFiltering()");
-        }
-        //Convert the param to XML to use as a filter
-        YangCompositeEncoding xmlContent =
-                ych.encodeCompositeOperation(null, null,
-                        yangObjectOpParamFilter, XML, EDIT_CONFIG_REQUEST);
-
-        String xmlContentStr = xmlContent.getResourceInformation()
-                .replace("<>", "").replace("</>", "")
-                //FIXME: Necessary for MEP ccmInterval
-                .replaceAll("yangAutoPrefix", "")
-                .trim();
-
-        log.debug("Sending XML <edit-config> on NETCONF session " + session.getSessionId() +
-                ":\n" + xmlContentStr);
-
-        boolean succeeded = session.editConfig(targetDs, null, xmlContentStr);
-        if (succeeded) {
-            log.debug("<edit-config> succeeded through NETCONF");
-        } else {
-            throw new NetconfException("Failed to run edit-config through NETCONF");
-        }
-    }
-}
diff --git a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/impl/MseaSaFilteringManager.java b/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/impl/MseaSaFilteringManager.java
deleted file mode 100644
index eeba11e..0000000
--- a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/impl/MseaSaFilteringManager.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.drivers.microsemi.yang.impl;
-
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Deactivate;
-import org.apache.felix.scr.annotations.Service;
-import org.onosproject.drivers.microsemi.yang.MseaSaFilteringNetconfService;
-import org.onosproject.netconf.NetconfException;
-import org.onosproject.netconf.NetconfSession;
-import org.onosproject.netconf.TargetConfig;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.sa.filtering.rev20160412.MseaSaFiltering;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.sa.filtering.rev20160412.MseaSaFilteringOpParam;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.sa.filtering.rev20160412.MseaSaFilteringService;
-
-/**
- * Implementation of the MseaSaFiltering YANG model service.
- */
-@Component(immediate = true, inherit = true)
-@Service
-public class MseaSaFilteringManager extends AbstractYangServiceImpl
-    implements MseaSaFilteringNetconfService {
-    public static final String MSEA_SA_FILTERING = "org.onosproject.drivers.microsemi.yang.mseasafiltering";
-
-    @Activate
-    public void activate() {
-        appId = coreService.registerApplication(MSEA_SA_FILTERING);
-        ych = ymsService.getYangCodecHandler();
-        ych.addDeviceSchema(MseaSaFilteringService.class);
-        log.info("MseaSaFilteringManager Started");
-    }
-
-    @Deactivate
-    public void deactivate() {
-        super.deactivate();
-        ymsService.unRegisterService(this, MseaSaFilteringService.class);
-        ych = null;
-        log.info("MseaSaFilteringManager Stopped");
-    }
-
-    /**
-     * Get a filtered subset of the model.
-     * This is meant to filter the current live model
-     * against the attribute(s) given in the argument
-     * and return the filtered model.
-     */
-    @Override
-    public MseaSaFiltering getMseaSaFiltering(MseaSaFilteringOpParam mseaSaFilteringFilter, NetconfSession session)
-            throws NetconfException {
-        return (MseaSaFiltering) getNetconfObject(mseaSaFilteringFilter, session);
-    }
-
-    /**
-     * Call NETCONF edit-config with a configuration.
-     */
-    @Override
-    public void setMseaSaFiltering(
-            MseaSaFilteringOpParam mseaSaFiltering, NetconfSession session, TargetConfig ncDs)
-            throws NetconfException {
-        setNetconfObject(mseaSaFiltering, session, ncDs);
-    }
-}
diff --git a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/yang/gen/v1/http/www/microsemi/com/microsemi/edge/assure/msea/uni/evc/service/rev20160317/mseaunievcservice/mefservices/uni/CustomEvc.java b/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/yang/gen/v1/http/www/microsemi/com/microsemi/edge/assure/msea/uni/evc/service/rev20160317/mseaunievcservice/mefservices/uni/CustomEvc.java
deleted file mode 100644
index 722fe78..0000000
--- a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/yang/gen/v1/http/www/microsemi/com/microsemi/edge/assure/msea/uni/evc/service/rev20160317/mseaunievcservice/mefservices/uni/CustomEvc.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service
-    .rev20160317.mseaunievcservice.mefservices.uni;
-
-import org.onosproject.drivers.microsemi.yang.UniSide;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.types
-    .rev20160229.mseatypes.ServiceListType;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.evcperuniextensionattributes.FlowMapping;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service
-    .rev20160317.mseaunievcservice.mefservices.uni.evc.CustomEvcPerUni;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.uni.evc.evcperuni.EvcPerUnic;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.uni.evc.evcperuni.EvcPerUnin;
-
-/**
- * A custom implementation of the DefaultEvc - especially its Builder.
- *
- * This allows the Evc to be modified after creation. These additions to the
- * builder are necessary because in the EA1000 YANG model many different Open Flow
- * flows can be associated with one EVC - each one has its own Ce-Vlan-Id and
- * Flow Reference
- */
-public class CustomEvc extends DefaultEvc {
-
-    public static EvcBuilder builder(Evc evc) {
-        return new EvcBuilder(evc);
-    }
-
-    public static class EvcBuilder extends DefaultEvc.EvcBuilder {
-
-        /**
-         * Allow a builder to be constructed from an existing EVC
-         * @param evc An existing EVC
-         */
-        public EvcBuilder(Evc evc) {
-            this.evcPerUni = evc.evcPerUni();
-            this.evcStatus = evc.evcStatus();
-            this.evcIndex = evc.evcIndex();
-            this.mtuSize = evc.mtuSize();
-            this.cevlanCosPreservation = evc.cevlanCosPreservation();
-            this.cevlanIdPreservation = evc.cevlanIdPreservation();
-            this.name = evc.name();
-            this.yangEvcOpType = evc.yangEvcOpType();
-            this.yangAugmentedInfoMap = evc.yangAugmentedInfoMap();
-            this.name = evc.name();
-            this.serviceType = evc.serviceType();
-            this.selectLeafFlags = evc.selectLeafFlags();
-            this.uniEvcId = evc.uniEvcId();
-            this.valueLeafFlags = evc.valueLeafFlags();
-        }
-
-        /**
-         * Method to allow ceVlanMap to be modified.
-         * @param additionalCeVlanMap An addition to the existing ceVlanMap
-         * @param side The Uni Side - Customer or Network
-         * @return The updated builder
-         */
-        public EvcBuilder addToCeVlanMap(ServiceListType additionalCeVlanMap, UniSide side) {
-            evcPerUni = CustomEvcPerUni.builder(evcPerUni).addToCeVlanMap(additionalCeVlanMap, side).build();
-            return this;
-        }
-
-        /**
-         * Method to allow the Flow Mapping list to be modified.
-         * @param fm the flow mapping
-         * @param side The Uni Side - Customer or Network
-         * @return The updated builder
-         */
-        public EvcBuilder addToFlowMapping(FlowMapping fm, UniSide side) {
-            evcPerUni = CustomEvcPerUni.builder(evcPerUni).addToFlowMapping(fm, side).build();
-            return this;
-        }
-
-        /**
-         * Method to allow an EVC side to be added.
-         * @param evcUniN An EVCPerUni object
-         * @return The updated builder
-         */
-        public EvcBuilder addUniN(EvcPerUnin evcUniN) {
-            evcPerUni = CustomEvcPerUni.builder(evcPerUni).addUniN(evcUniN).build();
-            return this;
-        }
-
-        /**
-         * Method to allow an EVC side to be added.
-         * @param evcUniC An EVCPerUni object
-         * @return The updated builder
-         */
-        public EvcBuilder addUniC(EvcPerUnic evcUniC) {
-            evcPerUni = CustomEvcPerUni.builder(evcPerUni).addUniC(evcUniC).build();
-            return this;
-        }
-    }
-}
diff --git a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/yang/gen/v1/http/www/microsemi/com/microsemi/edge/assure/msea/uni/evc/service/rev20160317/mseaunievcservice/mefservices/uni/evc/CustomEvcPerUni.java b/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/yang/gen/v1/http/www/microsemi/com/microsemi/edge/assure/msea/uni/evc/service/rev20160317/mseaunievcservice/mefservices/uni/evc/CustomEvcPerUni.java
deleted file mode 100644
index ed53593..0000000
--- a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/yang/gen/v1/http/www/microsemi/com/microsemi/edge/assure/msea/uni/evc/service/rev20160317/mseaunievcservice/mefservices/uni/evc/CustomEvcPerUni.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service
-    .rev20160317.mseaunievcservice.mefservices.uni.evc;
-
-import org.onosproject.drivers.microsemi.yang.UniSide;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.types
-    .rev20160229.mseatypes.ServiceListType;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.evcperuniextensionattributes.FlowMapping;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service
-    .rev20160317.mseaunievcservice.mefservices.uni.evc.evcperuni.CustomEvcPerUnic;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service
-    .rev20160317.mseaunievcservice.mefservices.uni.evc.evcperuni.CustomEvcPerUnin;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.uni.evc.evcperuni.EvcPerUnic;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.uni.evc.evcperuni.EvcPerUnin;
-
-/**
- * A custom implementation of the DefaultEvcPerUni - especially its Builder.
- *
- * This allows the EvcPerUni to be modified after creation. These additions to the
- * builder are necessary because in the EA1000 YANG model the EvcPerUni side can
- * be added at separate stages
- */
-public class CustomEvcPerUni extends DefaultEvcPerUni {
-
-    public static EvcPerUniBuilder builder(EvcPerUni evcPerUni) {
-        return new EvcPerUniBuilder(evcPerUni);
-    }
-
-    public static class EvcPerUniBuilder extends DefaultEvcPerUni.EvcPerUniBuilder {
-
-        /**
-         * Allow a builder to be constructed from an existing EvcPerUni
-         * @param evcPerUni An existing EvcPerUni
-         */
-        public EvcPerUniBuilder(EvcPerUni evcPerUni) {
-            this.evcPerUnic = evcPerUni.evcPerUnic();
-            this.evcPerUnin = evcPerUni.evcPerUnin();
-            this.evcUniType = evcPerUni.evcUniType();
-            this.yangEvcPerUniOpType = evcPerUni.yangEvcPerUniOpType();
-            this.valueLeafFlags = evcPerUni.valueLeafFlags();
-            this.selectLeafFlags = evcPerUni.selectLeafFlags();
-            this.yangAugmentedInfoMap = evcPerUni.yangAugmentedInfoMap();
-        }
-
-        /**
-         * Method to allow ceVlanMap to be modified.
-         * @param additionalCeVlanMap An addition to the existing ceVlanMap
-         * @param side The Uni Side - Customer or Network
-         * @return The updated builder
-         */
-        public EvcPerUniBuilder addToCeVlanMap(ServiceListType additionalCeVlanMap, UniSide side) {
-            if (side == UniSide.NETWORK) {
-                evcPerUnin = CustomEvcPerUnin.builder(evcPerUnin).addToCeVlanMap(additionalCeVlanMap).build();
-            } else {
-                evcPerUnic = CustomEvcPerUnic.builder(evcPerUnic).addToCeVlanMap(additionalCeVlanMap).build();
-            }
-
-            return this;
-        }
-
-        /**
-         * Method to allow the Flow Mapping list to be modified.
-         * @param fm the flow mapping
-         * @param side The Uni Side - Customer or Network
-         * @return The updated builder
-         */
-        public EvcPerUniBuilder addToFlowMapping(FlowMapping fm, UniSide side) {
-            if (side == UniSide.NETWORK) {
-                evcPerUnin = CustomEvcPerUnin.builder(evcPerUnin).addToFlowMapping(fm).build();
-            } else {
-                evcPerUnic = CustomEvcPerUnic.builder(evcPerUnic).addToFlowMapping(fm).build();
-            }
-            return this;
-        }
-
-        /**
-         * Method to allow an EVC side to be added.
-         * @param evcUniN An EVCPerUni object
-         * @return The updated builder
-         */
-        public EvcPerUniBuilder addUniN(EvcPerUnin evcUniN) {
-            this.evcPerUnin = evcUniN;
-            return this;
-        }
-
-        /**
-         * Method to allow an EVC side to be added.
-         * @param evcUniC An EVCPerUni object
-         * @return The updated builder
-         */
-        public EvcPerUniBuilder addUniC(EvcPerUnic evcUniC) {
-            this.evcPerUnic = evcUniC;
-            return this;
-        }
-    }
-}
diff --git a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/yang/gen/v1/http/www/microsemi/com/microsemi/edge/assure/msea/uni/evc/service/rev20160317/mseaunievcservice/mefservices/uni/evc/evcperuni/CustomEvcPerUnic.java b/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/yang/gen/v1/http/www/microsemi/com/microsemi/edge/assure/msea/uni/evc/service/rev20160317/mseaunievcservice/mefservices/uni/evc/evcperuni/CustomEvcPerUnic.java
deleted file mode 100644
index 2e8dfc6..0000000
--- a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/yang/gen/v1/http/www/microsemi/com/microsemi/edge/assure/msea/uni/evc/service/rev20160317/mseaunievcservice/mefservices/uni/evc/evcperuni/CustomEvcPerUnic.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service
-    .rev20160317.mseaunievcservice.mefservices.uni.evc.evcperuni;
-
-import org.onosproject.drivers.microsemi.yang.utils.CeVlanMapUtils;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.types
-    .rev20160229.mseatypes.ServiceListType;
-
-/**
- * A custom implementation of the DefaultEvcPerUnic - especially its Builder.
- *
- * This allows the EvcPerUniC to be modified after creation. These additions to the
- * builder are necessary because in the EA1000 YANG model the EvcPerUniC can
- * be added at separate stages
- */
-public class CustomEvcPerUnic extends DefaultEvcPerUnic {
-    public static EvcPerUnicBuilder builder(EvcPerUnic evcPerUnic) {
-        return new EvcPerUnicBuilder(evcPerUnic);
-    }
-
-    public static EvcPerUnicBuilder builder() {
-        return new EvcPerUnicBuilder();
-    }
-
-    public static class EvcPerUnicBuilder extends DefaultEvcPerUnic.EvcPerUnicBuilder {
-
-        /**
-         * Allow a new builder to be constructed
-         */
-        public EvcPerUnicBuilder() {
-            valueLeafFlags.set(LeafIdentifier.CEVLANMAP.getLeafIndex());
-            this.ceVlanMap = new ServiceListType("0");
-            valueLeafFlags.set(LeafIdentifier.INGRESSBWPGROUPINDEX.getLeafIndex());
-            this.ingressBwpGroupIndex = 0;
-        }
-
-        /**
-         * Allow a builder to be constructed from an existing EvcPerUnic
-         * @param evcPerUnic An existing EvcPerUnic
-         */
-        public EvcPerUnicBuilder(EvcPerUnic evcPerUnic) {
-            this.ceVlanMap = evcPerUnic.ceVlanMap();
-            this.evcPerUniServiceType = evcPerUnic.evcPerUniServiceType();
-            this.ingressBwpGroupIndex = evcPerUnic.ingressBwpGroupIndex();
-            this.tagManipulation = evcPerUnic.tagManipulation();
-            this.flowMapping = evcPerUnic.flowMapping();
-            this.yangEvcPerUnicOpType = evcPerUnic.yangEvcPerUnicOpType();
-            this.yangAugmentedInfoMap = evcPerUnic.yangAugmentedInfoMap();
-            this.selectLeafFlags = evcPerUnic.selectLeafFlags();
-            this.valueLeafFlags = evcPerUnic.valueLeafFlags();
-        }
-
-        /**
-         * Method to allow ceVlanMap to be modified.
-         * @param additionalCeVlanMap An addition to the existing ceVlanMap
-         * @return The updated builder
-         */
-        public EvcPerUnicBuilder addToCeVlanMap(ServiceListType additionalCeVlanMap) {
-            String combinedCeVlanMap =
-                    CeVlanMapUtils.combineVlanSets(ceVlanMap.string(), additionalCeVlanMap.string());
-            //If it contains 0 we should remove it
-            ceVlanMap = new ServiceListType(
-                    CeVlanMapUtils.removeZeroIfPossible(combinedCeVlanMap));
-
-            return this;
-        }
-    }
-}
diff --git a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/yang/gen/v1/http/www/microsemi/com/microsemi/edge/assure/msea/uni/evc/service/rev20160317/mseaunievcservice/mefservices/uni/evc/evcperuni/CustomEvcPerUnin.java b/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/yang/gen/v1/http/www/microsemi/com/microsemi/edge/assure/msea/uni/evc/service/rev20160317/mseaunievcservice/mefservices/uni/evc/evcperuni/CustomEvcPerUnin.java
deleted file mode 100644
index 47b438e..0000000
--- a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/yang/gen/v1/http/www/microsemi/com/microsemi/edge/assure/msea/uni/evc/service/rev20160317/mseaunievcservice/mefservices/uni/evc/evcperuni/CustomEvcPerUnin.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service
-    .rev20160317.mseaunievcservice.mefservices.uni.evc.evcperuni;
-
-import org.onosproject.drivers.microsemi.yang.utils.CeVlanMapUtils;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.types
-    .rev20160229.mseatypes.ServiceListType;
-
-/**
- * A custom implementation of the DefaultEvcPerUnin - especially its Builder.
- *
- * This allows the EvcPerUniN to be modified after creation. These additions to the
- * builder are necessary because in the EA1000 YANG model the EvcPerUniN can
- * be added at separate stages
- */
-public class CustomEvcPerUnin extends DefaultEvcPerUnin {
-    public static EvcPerUninBuilder builder(EvcPerUnin evcPerUnin) {
-        return new EvcPerUninBuilder(evcPerUnin);
-    }
-
-    public static EvcPerUninBuilder builder() {
-        return new EvcPerUninBuilder();
-    }
-
-    public static class EvcPerUninBuilder extends DefaultEvcPerUnin.EvcPerUninBuilder {
-
-        /**
-         * Allow a new builder to be constructed
-         */
-        public EvcPerUninBuilder() {
-            valueLeafFlags.set(LeafIdentifier.CEVLANMAP.getLeafIndex());
-            this.ceVlanMap = new ServiceListType("0");
-            valueLeafFlags.set(LeafIdentifier.INGRESSBWPGROUPINDEX.getLeafIndex());
-            this.ingressBwpGroupIndex = 0;
-        }
-
-        /**
-         * Allow a builder to be constructed from an existing EvcPerUnin
-         * @param evcPerUnin An existing EvcPerUnin
-         */
-        public EvcPerUninBuilder(EvcPerUnin evcPerUnin) {
-            this.ceVlanMap = evcPerUnin.ceVlanMap();
-            this.evcPerUniServiceType = evcPerUnin.evcPerUniServiceType();
-            this.ingressBwpGroupIndex = evcPerUnin.ingressBwpGroupIndex();
-            this.tagManipulation = evcPerUnin.tagManipulation();
-            this.flowMapping = evcPerUnin.flowMapping();
-            this.yangEvcPerUninOpType = evcPerUnin.yangEvcPerUninOpType();
-            this.yangAugmentedInfoMap = evcPerUnin.yangAugmentedInfoMap();
-            this.selectLeafFlags = evcPerUnin.selectLeafFlags();
-            this.valueLeafFlags = evcPerUnin.valueLeafFlags();
-        }
-
-        /**
-         * Method to allow ceVlanMap to be modified.
-         * @param additionalCeVlanMap An addition to the existing ceVlanMap
-         * @return The updated builder
-         */
-        public EvcPerUninBuilder addToCeVlanMap(ServiceListType additionalCeVlanMap) {
-            String combinedCeVlanMap =
-                    CeVlanMapUtils.combineVlanSets(ceVlanMap.string(), additionalCeVlanMap.string());
-            //If it contains 0 we should remove it
-            ceVlanMap = new ServiceListType(
-                    CeVlanMapUtils.removeZeroIfPossible(combinedCeVlanMap));
-            return this;
-        }
-    }
-}
\ No newline at end of file
diff --git a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/yang/gen/v1/http/www/microsemi/com/microsemi/edge/assure/msea/uni/evc/service/rev20160317/mseaunievcservice/mefservices/uni/evc/evcperuni/package-info.java b/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/yang/gen/v1/http/www/microsemi/com/microsemi/edge/assure/msea/uni/evc/service/rev20160317/mseaunievcservice/mefservices/uni/evc/evcperuni/package-info.java
deleted file mode 100644
index 3617d86..0000000
--- a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/yang/gen/v1/http/www/microsemi/com/microsemi/edge/assure/msea/uni/evc/service/rev20160317/mseaunievcservice/mefservices/uni/evc/evcperuni/package-info.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Package for Microsemi device drivers support for NETCONF for EA1000.
- */
-package org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service
-    .rev20160317.mseaunievcservice.mefservices.uni.evc.evcperuni;
\ No newline at end of file
diff --git a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/yang/gen/v1/http/www/microsemi/com/microsemi/edge/assure/msea/uni/evc/service/rev20160317/mseaunievcservice/mefservices/uni/evc/package-info.java b/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/yang/gen/v1/http/www/microsemi/com/microsemi/edge/assure/msea/uni/evc/service/rev20160317/mseaunievcservice/mefservices/uni/evc/package-info.java
deleted file mode 100644
index 7813b61..0000000
--- a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/yang/gen/v1/http/www/microsemi/com/microsemi/edge/assure/msea/uni/evc/service/rev20160317/mseaunievcservice/mefservices/uni/evc/package-info.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Package for Microsemi device drivers support for NETCONF for EA1000.
- */
-package org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service
-    .rev20160317.mseaunievcservice.mefservices.uni.evc;
\ No newline at end of file
diff --git a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/yang/gen/v1/http/www/microsemi/com/microsemi/edge/assure/msea/uni/evc/service/rev20160317/mseaunievcservice/mefservices/uni/package-info.java b/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/yang/gen/v1/http/www/microsemi/com/microsemi/edge/assure/msea/uni/evc/service/rev20160317/mseaunievcservice/mefservices/uni/package-info.java
deleted file mode 100644
index 3bdeda0..0000000
--- a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/yang/gen/v1/http/www/microsemi/com/microsemi/edge/assure/msea/uni/evc/service/rev20160317/mseaunievcservice/mefservices/uni/package-info.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Package for Microsemi device drivers support for NETCONF for EA1000.
- */
-package org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service
-    .rev20160317.mseaunievcservice.mefservices.uni;
\ No newline at end of file
diff --git a/drivers/microsemi/ea1000yang/src/main/resources/YangMetaData.ser b/drivers/microsemi/ea1000yang/src/main/resources/YangMetaData.ser
deleted file mode 100644
index 581bd77..0000000
--- a/drivers/microsemi/ea1000yang/src/main/resources/YangMetaData.ser
+++ /dev/null
Binary files differ
diff --git a/drivers/microsemi/ea1000yang/src/main/yang/ENTITY-STATE-TC-MIB.yang b/drivers/microsemi/ea1000yang/src/main/yang/ENTITY-STATE-TC-MIB.yang
deleted file mode 100644
index c2d8a59..0000000
--- a/drivers/microsemi/ea1000yang/src/main/yang/ENTITY-STATE-TC-MIB.yang
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * This module has been generated by smidump 0.4.8:
- *
- *      smidump -f yang ENTITY-STATE-TC-MIB
- *
- * Do not edit. Edit the source file instead!
- */
-
-module ENTITY-STATE-TC-MIB {
-
-  /*** NAMESPACE / PREFIX DEFINITION ***/
-
-  namespace "urn:ietf:params:xml:ns:yang:smiv2:ENTITY-STATE-TC-MIB";
-  prefix "entity-state";
-
-  /*** LINKAGE (IMPORTS / INCLUDES) ***/
-
-
-  /*** META INFORMATION ***/
-
-  organization
-   "IETF Entity MIB Working Group";
-
-  contact
-   "General Discussion: entmib@ietf.org
-    To Subscribe:
-    http://www.ietf.org/mailman/listinfo/entmib
-
-    http://www.ietf.org/html.charters/entmib-charter.html
-
-    Sharon Chisholm
-    Nortel Networks
-    PO Box 3511 Station C
-    Ottawa, Ont.  K1Y 4H7
-    Canada
-    schishol@nortel.com
-
-    David T. Perkins
-    548 Qualbrook Ct
-    San Jose, CA 95110
-    USA
-    Phone: 408 394-8702
-    dperkins@snmpinfo.com";
-
-  description
-   "This MIB defines state textual conventions.
-
-    Copyright (C) The Internet Society 2005.  This version
-    of this MIB module is part of RFC 4268;  see the RFC
-    itself for full legal notices.";
-
-  revision "2005-11-22" {
-    description
-     "Initial version, published as RFC 4268.";
-  }
-
-  /*** TYPE DEFINITIONS ***/
-
-  typedef EntityAdminState {
-    type enumeration {
-      enum unknown      { value 1; }
-      enum locked       { value 2; }
-      enum shuttingDown { value 3; }
-      enum unlocked     { value 4; }
-    }
-    description
-     " Represents the various possible administrative states.
-
-
-
-
-
-      A value of 'locked' means the resource is administratively
-      prohibited from use.  A value of 'shuttingDown' means that
-      usage is administratively limited to current instances of
-      use.  A value of 'unlocked' means the resource is not
-      administratively prohibited from use.  A value of
-      'unknown' means that this resource is unable to
-      report administrative state.";
-  }
-
-  typedef EntityOperState {
-    type enumeration {
-      enum unknown  { value 1; }
-      enum disabled { value 2; }
-      enum enabled  { value 3; }
-      enum testing  { value 4; }
-    }
-    description
-     " Represents the possible values of operational states.
-
-      A value of 'disabled' means the resource is totally
-      inoperable.  A value of 'enabled' means the resource
-      is partially or fully operable.  A value of 'testing'
-      means the resource is currently being tested
-      and cannot therefore report whether it is operational
-      or not.  A value of 'unknown' means that this
-      resource is unable to report operational state.";
-  }
-
-  typedef EntityUsageState {
-    type enumeration {
-      enum unknown { value 1; }
-      enum idle    { value 2; }
-      enum active  { value 3; }
-      enum busy    { value 4; }
-    }
-    description
-     " Represents the possible values of usage states.
-      A value of 'idle' means the resource is servicing no
-      users.  A value of 'active' means the resource is
-      currently in use and it has sufficient spare capacity
-      to provide for additional users.  A value of 'busy'
-      means the resource is currently in use, but it
-      currently has no spare capacity to provide for
-      additional users.  A value of 'unknown' means
-      that this resource is unable to report usage state.";
-  }
-
-  typedef EntityAlarmStatus {
-    type bits {
-      bit unknown       { position 0; }
-      bit underRepair   { position 1; }
-      bit critical      { position 2; }
-      bit major         { position 3; }
-      bit minor         { position 4; }
-      bit warning       { position 5; }
-      bit indeterminate { position 6; }
-    }
-    description     
-     " Represents the possible values of alarm status.
-      An Alarm [RFC3877] is a persistent indication
-      of an error or warning condition.
-
-      When no bits of this attribute are set, then no active
-      alarms are known against this entity and it is not under
-      repair.
-
-      When the 'value of underRepair' is set, the resource is
-      currently being repaired, which, depending on the
-      implementation, may make the other values in this bit
-      string not meaningful.
-
-      When the value of 'critical' is set, one or more critical
-      alarms are active against the resource.  When the value
-      of 'major' is set, one or more major alarms are active
-      against the resource.  When the value of 'minor' is set,
-      one or more minor alarms are active against the resource.
-      When the value of 'warning' is set, one or more warning
-      alarms are active against the resource.  When the value
-      of 'indeterminate' is set, one or more alarms of whose
-      perceived severity cannot be determined are active
-      against this resource.
-
-      A value of 'unknown' means that this resource is
-      unable to report alarm state.";
-  }
-
-  typedef EntityStandbyStatus {
-    type enumeration {
-      enum unknown          { value 1; }
-      enum hotStandby       { value 2; }
-      enum coldStandby      { value 3; }
-      enum providingService { value 4; }
-    }
-    description     
-     " Represents the possible values of standby status.
-
-      A value of 'hotStandby' means the resource is not
-      providing service, but it will be immediately able to
-      take over the role of the resource to be backed up,
-      without the need for initialization activity, and will
-      contain the same information as the resource to be
-      backed up.  A value of 'coldStandy' means that the
-      resource is to back up another resource, but will not
-      be immediately able to take over the role of a resource
-      to be backed up, and will require some initialization
-      activity.  A value of 'providingService' means the
-      resource is providing service.  A value of
-      'unknown' means that this resource is unable to
-      report standby state.";
-  }
-
-} /* end of module ENTITY-STATE-TC-MIB */
diff --git a/drivers/microsemi/ea1000yang/src/main/yang/fpga-internal.yang b/drivers/microsemi/ea1000yang/src/main/yang/fpga-internal.yang
deleted file mode 100644
index 87fabb1..0000000
--- a/drivers/microsemi/ea1000yang/src/main/yang/fpga-internal.yang
+++ /dev/null
@@ -1,266 +0,0 @@
-module fpga-internal {
-
-	/*** NAMESPACE / PREFIX DEFINITION ***/
-
-	namespace "http://www.microsemi.com/fpga-int";
-	prefix "fpga-int";
-
-	/*** 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 add internal procedures to access FPAA hardware
-
-	Copyright 2015 Microsemi Inc.
-	All rights reserved.";
-
-	revision "2015-11-30" {
-		description
-		"Initial version - Sean Condon, Microsemi";
-	}
-
-	typedef sixteen-bit-hex {
-		type string {
-			pattern '0x[0-9a-fA-F]{4}';
-		}
-
-		description
-		"A 16-bit address represented as a hexadecimal number";
-	}
-
-	typedef thirtytwo-bit-hex {
-		type string {
-			pattern '0x[0-9a-fA-F]{8}';
-		}
-
-		description
-		"A 32-bit address represented as a hexadecimal number";
-	}
-	
-	typedef thirtytwobit-data {
-		type string {
-			pattern '([0-9a-fA-F]{8}(:[0-9a-fA-F]{8})*)?';
-		}
-
-		description
-		"A set of 32 bit data values represented as colon separated 
-		hex strings e.g. 'A1B2C3D4:B2C3D4F5:C3D4E5F6'";
-	}
-
-	typedef select-ram-enum {
-		type enumeration {
-			enum pkt-store-sel {value 0;}
-			enum probe-store-sel {value 1;}
-			enum xconn-store-sel {value 2;}
-			enum rmep-err-store-sel {value 3;}
-			enum rx-lmep-map-sel {value 4;}
-			enum cpu-sys-capt-fifo-sel {value 5;}
-			enum rmep-ram-sel {value 6;}
-			enum xconn-ram-sel {value 7;}
-			enum rmep-err-ram-sel {value 8;}
-			enum tx-lmep-map-sel {value 9;}
-			enum ext-sram-sel {value 10;}
-			enum car-rmac-sel {value 11;}
-			enum sys-mac-sel {value 12;}
-			enum rx-carr-data-fifo-sel {value 13;}
-			enum line-stats-ram-sel {value 14;}
-			enum cpu-sys-capt-info-fifo-sel {value 15;}
-			enum vlan-info-ram-sel {value 16;}
-			enum lbm-store-sel {value 17;}
-			enum lbr-ram-sel {value 18;}
-			enum mc-lbr-store-sel {value 19;}
-			enum port-mac-ram-sel {value 20;}
-			enum pm-db-ram-sel {value 22;}
-			enum tx-lb-ram-sel {value 24;}
-			enum tlv-ram-sel {value 25;}
-			enum cpu-capt-fifo-sel {value 26;}
-			enum cpu-capt-info-fifo-sel {value 27;}
-			enum policer-cfg-ram-sel {value 28;}
-			enum policer-ctxt-ram-sel {value 29;}
-			enum cpu-sys-tx-ram-sel {value 30;}
-			enum policer-stats-ram-sel {value 31;}
-		}
-	}
-	
-	
-	container fpga-internal {
-		presence "Supports FPGA direct access";
-	}
-	
-	rpc read-registers {
-
-		description "Method to read directly from hardware registers";
-		input {
-			choice hex-or-dec {
-				
-				description "Enter the starting address in either decimal (0-65535) 
-						or hexadecimal (preceeded with 0x)";
-				mandatory true;
-
-				case hex {
-					leaf start-address-hex {
-						type sixteen-bit-hex;
-					}
-				}
-
-				case decimal {
-					leaf start-address-dec {
-						type uint16;
-					}
-				}
-			}
-
-			leaf num-locations {
-				type uint8 {
-					range 1..max;
-				}
-				description "The number of following locations (addresses) to read from";
-				default 1;
-			}
-		}
-
-		output {
-            anyxml data {
-				description "A set of 32 bit data values represented 
-						as colon separated 8 character hexadecimal values";
-			}
-		}
-	}
-	
-
-	rpc write-registers {
-
-		description "Method to write directly to hardware registers.
-				If a number of data values are given then subsequent
-				locations are written to";
-		input {
-			choice hex-or-dec {
-				
-				description "Enter the starting address in either decimal (0-65535) 
-						or hexadecimal (preceeded with 0x)";
-				
-				case hex {
-					leaf start-address-hex {
-						type sixteen-bit-hex;
-					}
-				}
-
-				case decimal {
-					leaf start-address-dec {
-						type uint16;
-					}
-				}
-			}
-
-			leaf value-hex-32 {
-				type thirtytwobit-data;
-				description "A set of 32 bit data values represented 
-						as colon separated 8 character hexadecimal values
-						e.g. ffffffff:ffffffff:ffffffff
-						The number of locations written to will be 
-						determinted by the number of such values given";
-			}
-		}
-	}
-
-	rpc read-ram {
-
-		description "Method to read directly from hardware RAM";
-		input {
-			leaf ram {
-				type select-ram-enum;
-				mandatory true;
-				description "The type of RAM to read from";
-			}
-			
-			choice hex-or-dec {
-				
-				description "Enter the starting address in either decimal (0-65535) 
-						or hexadecimal (preceeded with 0x)";
-				mandatory true;
-
-				case hex {
-					leaf start-address-hex {
-						type thirtytwo-bit-hex;
-					}
-				}
-
-				case decimal {
-					leaf start-address-dec {
-						type uint32;
-					}
-				}
-			}
-			
-			leaf num-locations {
-				type uint8 {
-					range 1..max;
-				}
-				description "The number of following locations (addresses) to read from";
-				default 1;
-			}
-		}
-
-		output {
-            anyxml data {
-				description "A set of 32 bit data values represented 
-						as colon separated 8 character hexadecimal values";
-			}
-		}
-	}
-
-	rpc write-ram {
-
-		description "Method to write directly to RAM registers.
-				If a number of data values are given then subsequent
-				locations are written to";
-		input {
-			leaf ram {
-				type select-ram-enum;
-				mandatory true;
-				description "The type of RAM to read from";
-			}
-
-			choice hex-or-dec {
-				
-				description "Enter the starting address in either decimal (0-65535) 
-						or hexadecimal (preceeded with 0x)";
-				mandatory true;
-				
-				case hex {
-					leaf start-address-hex {
-						type thirtytwo-bit-hex;
-					}
-				}
-
-				case decimal {
-					leaf start-address-dec {
-						type uint32;
-					}
-				}
-			}
-
-			leaf value-hex-32 {
-				type thirtytwobit-data;
-				description "A set of 32 bit data values represented 
-						as colon separated 8 character hexadecimal values
-						e.g. ffffffff:ffffffff:ffffffff
-						The number of locations written to will be 
-						determinted by the number of such values given";
-			}
-		}
-	}
-
-}
\ No newline at end of file
diff --git a/drivers/microsemi/ea1000yang/src/main/yang/iana-crypt-hash.yang b/drivers/microsemi/ea1000yang/src/main/yang/iana-crypt-hash.yang
deleted file mode 100644
index 3a9ef55..0000000
--- a/drivers/microsemi/ea1000yang/src/main/yang/iana-crypt-hash.yang
+++ /dev/null
@@ -1,121 +0,0 @@
-module iana-crypt-hash {
-  namespace "urn:ietf:params:xml:ns:yang:iana-crypt-hash";
-  prefix ianach;
-
-  organization "IANA";
-  contact
-    "        Internet Assigned Numbers Authority
-
-     Postal: ICANN
-             12025 Waterfront Drive, Suite 300
-             Los Angeles, CA  90094-2536
-             United States
-
-     Tel:    +1 310 301 5800
-     E-Mail: iana@iana.org>";
-  description
-    "This YANG module defines a type for storing passwords
-     using a hash function and features to indicate which hash
-     functions are supported by an implementation.
-
-     The latest revision of this YANG module can be obtained from
-     the IANA web site.
-
-     Requests for new values should be made to IANA via
-     email (iana@iana.org).
-
-     Copyright (c) 2014 IETF Trust and the persons identified as
-     authors of the code.  All rights reserved.
-
-     Redistribution and use in source and binary forms, with or
-     without modification, is permitted pursuant to, and subject
-     to the license terms contained in, the Simplified BSD License
-     set forth in Section 4.c of the IETF Trust's Legal Provisions
-     Relating to IETF Documents
-     (http://trustee.ietf.org/license-info).
-
-     The initial version of this YANG module is part of RFC 7317;
-     see the RFC itself for full legal notices.";
-
-  revision 2014-08-06 {
-    description
-      "Initial revision.";
-    reference
-      "RFC 7317: A YANG Data Model for System Management";
-  }
-
-  typedef crypt-hash {
-    type string {
-      pattern
-        '$0$.*' //Escaped all $ as Java Pattern matcher will interpret them otherwise 
-      + '|$1$[a-zA-Z0-9./]{1,8}$[a-zA-Z0-9./]{22}'
-      + '|$5$(rounds=\d+$)?[a-zA-Z0-9./]{1,16}$[a-zA-Z0-9./]{43}'
-      + '|$6$(rounds=\d+$)?[a-zA-Z0-9./]{1,16}$[a-zA-Z0-9./]{86}';
-    }
-    description
-      "The crypt-hash type is used to store passwords using
-       a hash function.  The algorithms for applying the hash
-       function and encoding the result are implemented in
-       various UNIX systems as the function crypt(3).
-
-       A value of this type matches one of the forms:
-
-         $0$<clear text password>
-         $<id>$<salt>$<password hash>
-         $<id>$<parameter>$<salt>$<password hash>
-
-       The '$0$' prefix signals that the value is clear text.  When
-       such a value is received by the server, a hash value is
-       calculated, and the string '$<id>$<salt>$' or
-       $<id>$<parameter>$<salt>$ is prepended to the result.  This
-       value is stored in the configuration data store.
-
-       If a value starting with '$<id>$', where <id> is not '0', is
-       received, the server knows that the value already represents a
-       hashed value and stores it 'as is' in the data store.
-
-       When a server needs to verify a password given by a user, it
-       finds the stored password hash string for that user, extracts
-       the salt, and calculates the hash with the salt and given
-       password as input.  If the calculated hash value is the same
-       as the stored value, the password given by the client is
-       accepted.
-
-       This type defines the following hash functions:
-
-         id | hash function | feature
-         ---+---------------+-------------------
-          1 | MD5           | crypt-hash-md5
-          5 | SHA-256       | crypt-hash-sha-256
-          6 | SHA-512       | crypt-hash-sha-512
-
-       The server indicates support for the different hash functions
-       by advertising the corresponding feature.";
-    reference
-      "IEEE Std 1003.1-2008 - crypt() function
-       RFC 1321: The MD5 Message-Digest Algorithm
-       FIPS.180-4.2012: Secure Hash Standard (SHS)";
-  }
-
-  feature crypt-hash-md5 {
-    description
-      "Indicates that the device supports the MD5
-       hash function in 'crypt-hash' values.";
-    reference "RFC 1321: The MD5 Message-Digest Algorithm";
-  }
-
-  feature crypt-hash-sha-256 {
-    description
-      "Indicates that the device supports the SHA-256
-       hash function in 'crypt-hash' values.";
-    reference "FIPS.180-4.2012: Secure Hash Standard (SHS)";
-  }
-
-  feature crypt-hash-sha-512 {
-    description
-      "Indicates that the device supports the SHA-512
-       hash function in 'crypt-hash' values.";
-    reference "FIPS.180-4.2012: Secure Hash Standard (SHS)";
-  }
-
-}
diff --git a/drivers/microsemi/ea1000yang/src/main/yang/iana-if-type.yang b/drivers/microsemi/ea1000yang/src/main/yang/iana-if-type.yang
deleted file mode 100644
index fb48b6b..0000000
--- a/drivers/microsemi/ea1000yang/src/main/yang/iana-if-type.yang
+++ /dev/null
@@ -1,1507 +0,0 @@
-   module iana-if-type {
-     namespace "urn:ietf:params:xml:ns:yang:iana-if-type";
-     prefix ianaift;
-
-     import ietf-interfaces {
-       prefix if;
-     }
-
-     organization "IANA";
-     contact
-       "        Internet Assigned Numbers Authority
-
-        Postal: ICANN
-                4676 Admiralty Way, Suite 330
-                Marina del Rey, CA 90292
-
-        Tel:    +1 310 823 9358
-        <mailto:iana@iana.org>";
-
-     description
-       "This YANG module defines YANG identities for IANA-registered
-        interface types.
-
-        This YANG module is maintained by IANA and reflects the
-        'ifType definitions' registry.
-
-        The latest revision of this YANG module can be obtained from
-        the IANA web site.
-
-        Requests for new values should be made to IANA via
-        email (iana@iana.org).
-
-        Copyright (c) 2014 IETF Trust and the persons identified as
-        authors of the code.  All rights reserved.
-
-        Redistribution and use in source and binary forms, with or
-        without modification, is permitted pursuant to, and subject
-        to the license terms contained in, the Simplified BSD License
-        set forth in Section 4.c of the IETF Trust's Legal Provisions
-        Relating to IETF Documents
-        (http://trustee.ietf.org/license-info).
-
-        The initial version of this YANG module is part of RFC 7224;
-        see the RFC itself for full legal notices.";
-       reference
-         "IANA 'ifType definitions' registry.
-          <http://www.iana.org/assignments/smi-numbers>";
-
-     revision 2014-05-08 {
-       description
-         "Initial revision.";
-       reference
-         "RFC 7224: IANA Interface Type YANG Module";
-     }
-
-     identity iana-interface-type {
-       base if:interface-type;
-       description
-         "This identity is used as a base for all interface types
-          defined in the 'ifType definitions' registry.";
-     }
-     identity other {
-       base iana-interface-type;
-     }
-     identity regular1822 {
-       base iana-interface-type;
-     }
-     identity hdh1822 {
-       base iana-interface-type;
-     }
-     identity ddnX25 {
-       base iana-interface-type;
-     }
-     identity rfc877x25 {
-       base iana-interface-type;
-       reference
-         "RFC 1382 - SNMP MIB Extension for the X.25 Packet Layer";
-     }
-     identity ethernetCsmacd {
-       base iana-interface-type;
-       description
-         "For all Ethernet-like interfaces, regardless of speed,
-          as per RFC 3635.";
-       reference
-         "RFC 3635 - Definitions of Managed Objects for the
-                     Ethernet-like Interface Types";
-     }
-     identity iso88023Csmacd {
-       base iana-interface-type;
-       status deprecated;
-       description
-         "Deprecated via RFC 3635.
-          Use ethernetCsmacd(6) instead.";
-       reference
-         "RFC 3635 - Definitions of Managed Objects for the
-                     Ethernet-like Interface Types";
-     }
-     identity iso88024TokenBus {
-       base iana-interface-type;
-     }
-     identity iso88025TokenRing {
-       base iana-interface-type;
-     }
-     identity iso88026Man {
-       base iana-interface-type;
-     }
-     identity starLan {
-       base iana-interface-type;
-       status deprecated;
-       description
-         "Deprecated via RFC 3635.
-          Use ethernetCsmacd(6) instead.";
-       reference
-         "RFC 3635 - Definitions of Managed Objects for the
-                     Ethernet-like Interface Types";
-     }
-     identity proteon10Mbit {
-       base iana-interface-type;
-     }
-     identity proteon80Mbit {
-       base iana-interface-type;
-     }
-     identity hyperchannel {
-       base iana-interface-type;
-     }
-     identity fddi {
-       base iana-interface-type;
-       reference
-         "RFC 1512 - FDDI Management Information Base";
-     }
-     identity lapb {
-       base iana-interface-type;
-       reference
-         "RFC 1381 - SNMP MIB Extension for X.25 LAPB";
-     }
-     identity sdlc {
-       base iana-interface-type;
-     }
-     identity ds1 {
-       base iana-interface-type;
-       description
-         "DS1-MIB.";
-       reference
-         "RFC 4805 - Definitions of Managed Objects for the
-                     DS1, J1, E1, DS2, and E2 Interface Types";
-     }
-     identity e1 {
-       base iana-interface-type;
-       status obsolete;
-       description
-         "Obsolete; see DS1-MIB.";
-       reference
-         "RFC 4805 - Definitions of Managed Objects for the
-                     DS1, J1, E1, DS2, and E2 Interface Types";
-     }
-     identity basicISDN {
-       base iana-interface-type;
-       description
-         "No longer used.  See also RFC 2127.";
-     }
-     identity primaryISDN {
-       base iana-interface-type;
-       description
-         "No longer used.  See also RFC 2127.";
-     }
-     identity propPointToPointSerial {
-       base iana-interface-type;
-       description
-         "Proprietary serial.";
-     }
-     identity ppp {
-       base iana-interface-type;
-     }
-     identity softwareLoopback {
-       base iana-interface-type;
-     }
-     identity eon {
-       base iana-interface-type;
-       description
-         "CLNP over IP.";
-     }
-     identity ethernet3Mbit {
-       base iana-interface-type;
-     }
-     identity nsip {
-       base iana-interface-type;
-       description
-         "XNS over IP.";
-     }
-     identity slip {
-       base iana-interface-type;
-       description
-         "Generic SLIP.";
-     }
-     identity ultra {
-       base iana-interface-type;
-       description
-         "Ultra Technologies.";
-     }
-     identity ds3 {
-       base iana-interface-type;
-       description
-         "DS3-MIB.";
-       reference
-         "RFC 3896 - Definitions of Managed Objects for the
-                     DS3/E3 Interface Type";
-     }
-     identity sip {
-       base iana-interface-type;
-       description
-         "SMDS, coffee.";
-       reference
-         "RFC 1694 - Definitions of Managed Objects for SMDS
-                     Interfaces using SMIv2";
-     }
-     identity frameRelay {
-       base iana-interface-type;
-       description
-         "DTE only.";
-       reference
-         "RFC 2115 - Management Information Base for Frame Relay
-                     DTEs Using SMIv2";
-     }
-     identity rs232 {
-       base iana-interface-type;
-       reference
-         "RFC 1659 - Definitions of Managed Objects for RS-232-like
-                     Hardware Devices using SMIv2";
-     }
-     identity para {
-       base iana-interface-type;
-       description
-         "Parallel-port.";
-       reference
-         "RFC 1660 - Definitions of Managed Objects for
-                     Parallel-printer-like Hardware Devices using
-                     SMIv2";
-     }
-     identity arcnet {
-       base iana-interface-type;
-       description
-         "ARCnet.";
-     }
-     identity arcnetPlus {
-       base iana-interface-type;
-       description
-         "ARCnet Plus.";
-     }
-     identity atm {
-       base iana-interface-type;
-       description
-         "ATM cells.";
-     }
-     identity miox25 {
-       base iana-interface-type;
-       reference
-         "RFC 1461 - SNMP MIB extension for Multiprotocol
-                     Interconnect over X.25";
-     }
-     identity sonet {
-       base iana-interface-type;
-       description
-         "SONET or SDH.";
-     }
-     identity x25ple {
-       base iana-interface-type;
-       reference
-         "RFC 2127 - ISDN Management Information Base using SMIv2";
-     }
-     identity iso88022llc {
-       base iana-interface-type;
-     }
-     identity localTalk {
-       base iana-interface-type;
-     }
-     identity smdsDxi {
-       base iana-interface-type;
-     }
-     identity frameRelayService {
-       base iana-interface-type;
-       description
-         "FRNETSERV-MIB.";
-       reference
-         "RFC 2954 - Definitions of Managed Objects for Frame
-                     Relay Service";
-     }
-     identity v35 {
-       base iana-interface-type;
-     }
-     identity hssi {
-       base iana-interface-type;
-     }
-     identity hippi {
-       base iana-interface-type;
-     }
-     identity modem {
-       base iana-interface-type;
-       description
-         "Generic modem.";
-     }
-     identity aal5 {
-       base iana-interface-type;
-       description
-         "AAL5 over ATM.";
-     }
-     identity sonetPath {
-       base iana-interface-type;
-     }
-     identity sonetVT {
-       base iana-interface-type;
-     }
-     identity smdsIcip {
-       base iana-interface-type;
-       description
-         "SMDS InterCarrier Interface.";
-     }
-     identity propVirtual {
-       base iana-interface-type;
-       description
-         "Proprietary virtual/internal.";
-       reference
-         "RFC 2863 - The Interfaces Group MIB";
-     }
-     identity propMultiplexor {
-       base iana-interface-type;
-       description
-         "Proprietary multiplexing.";
-       reference
-         "RFC 2863 - The Interfaces Group MIB";
-     }
-     identity ieee80212 {
-       base iana-interface-type;
-       description
-         "100BaseVG.";
-     }
-     identity fibreChannel {
-       base iana-interface-type;
-       description
-         "Fibre Channel.";
-     }
-     identity hippiInterface {
-       base iana-interface-type;
-       description
-         "HIPPI interfaces.";
-     }
-     identity frameRelayInterconnect {
-       base iana-interface-type;
-       status obsolete;
-       description
-         "Obsolete; use either
-          frameRelay(32) or frameRelayService(44).";
-     }
-     identity aflane8023 {
-       base iana-interface-type;
-       description
-         "ATM Emulated LAN for 802.3.";
-     }
-     identity aflane8025 {
-       base iana-interface-type;
-       description
-         "ATM Emulated LAN for 802.5.";
-     }
-     identity cctEmul {
-       base iana-interface-type;
-       description
-         "ATM Emulated circuit.";
-     }
-     identity fastEther {
-       base iana-interface-type;
-       status deprecated;
-       description
-         "Obsoleted via RFC 3635.
-          ethernetCsmacd(6) should be used instead.";
-       reference
-         "RFC 3635 - Definitions of Managed Objects for the
-                     Ethernet-like Interface Types";
-     }
-     identity isdn {
-       base iana-interface-type;
-       description
-         "ISDN and X.25.";
-       reference
-         "RFC 1356 - Multiprotocol Interconnect on X.25 and ISDN
-                     in the Packet Mode";
-     }
-     identity v11 {
-       base iana-interface-type;
-       description
-         "CCITT V.11/X.21.";
-     }
-     identity v36 {
-       base iana-interface-type;
-       description
-         "CCITT V.36.";
-     }
-     identity g703at64k {
-       base iana-interface-type;
-       description
-         "CCITT G703 at 64Kbps.";
-     }
-     identity g703at2mb {
-       base iana-interface-type;
-       status obsolete;
-       description
-         "Obsolete; see DS1-MIB.";
-     }
-     identity qllc {
-       base iana-interface-type;
-       description
-         "SNA QLLC.";
-     }
-     identity fastEtherFX {
-       base iana-interface-type;
-       status deprecated;
-       description
-         "Obsoleted via RFC 3635.
-          ethernetCsmacd(6) should be used instead.";
-       reference
-         "RFC 3635 - Definitions of Managed Objects for the
-                     Ethernet-like Interface Types";
-     }
-     identity channel {
-       base iana-interface-type;
-       description
-         "Channel.";
-     }
-     identity ieee80211 {
-       base iana-interface-type;
-       description
-         "Radio spread spectrum.";
-     }
-     identity ibm370parChan {
-       base iana-interface-type;
-       description
-         "IBM System 360/370 OEMI Channel.";
-     }
-     identity escon {
-       base iana-interface-type;
-       description
-         "IBM Enterprise Systems Connection.";
-     }
-     identity dlsw {
-       base iana-interface-type;
-       description
-         "Data Link Switching.";
-     }
-     identity isdns {
-       base iana-interface-type;
-       description
-         "ISDN S/T interface.";
-     }
-     identity isdnu {
-       base iana-interface-type;
-       description
-         "ISDN U interface.";
-     }
-     identity lapd {
-       base iana-interface-type;
-       description
-         "Link Access Protocol D.";
-     }
-     identity ipSwitch {
-       base iana-interface-type;
-       description
-         "IP Switching Objects.";
-     }
-     identity rsrb {
-       base iana-interface-type;
-       description
-         "Remote Source Route Bridging.";
-     }
-     identity atmLogical {
-       base iana-interface-type;
-       description
-         "ATM Logical Port.";
-       reference
-         "RFC 3606 - Definitions of Supplemental Managed Objects
-                     for ATM Interface";
-     }
-     identity ds0 {
-       base iana-interface-type;
-       description
-         "Digital Signal Level 0.";
-       reference
-         "RFC 2494 - Definitions of Managed Objects for the DS0
-                     and DS0 Bundle Interface Type";
-     }
-     identity ds0Bundle {
-       base iana-interface-type;
-       description
-         "Group of ds0s on the same ds1.";
-       reference
-         "RFC 2494 - Definitions of Managed Objects for the DS0
-                     and DS0 Bundle Interface Type";
-     }
-     identity bsc {
-       base iana-interface-type;
-       description
-         "Bisynchronous Protocol.";
-     }
-     identity async {
-       base iana-interface-type;
-       description
-         "Asynchronous Protocol.";
-     }
-     identity cnr {
-       base iana-interface-type;
-       description
-         "Combat Net Radio.";
-     }
-     identity iso88025Dtr {
-       base iana-interface-type;
-       description
-         "ISO 802.5r DTR.";
-     }
-     identity eplrs {
-       base iana-interface-type;
-       description
-         "Ext Pos Loc Report Sys.";
-     }
-     identity arap {
-       base iana-interface-type;
-       description
-         "Appletalk Remote Access Protocol.";
-     }
-     identity propCnls {
-       base iana-interface-type;
-       description
-         "Proprietary Connectionless Protocol.";
-     }
-     identity hostPad {
-       base iana-interface-type;
-       description
-         "CCITT-ITU X.29 PAD Protocol.";
-     }
-     identity termPad {
-       base iana-interface-type;
-       description
-         "CCITT-ITU X.3 PAD Facility.";
-     }
-     identity frameRelayMPI {
-       base iana-interface-type;
-       description
-         "Multiproto Interconnect over FR.";
-     }
-     identity x213 {
-       base iana-interface-type;
-       description
-         "CCITT-ITU X213.";
-     }
-     identity adsl {
-       base iana-interface-type;
-       description
-         "Asymmetric Digital Subscriber Loop.";
-     }
-     identity radsl {
-       base iana-interface-type;
-       description
-         "Rate-Adapt. Digital Subscriber Loop.";
-     }
-     identity sdsl {
-       base iana-interface-type;
-       description
-         "Symmetric Digital Subscriber Loop.";
-     }
-     identity vdsl {
-       base iana-interface-type;
-       description
-         "Very H-Speed Digital Subscrib. Loop.";
-     }
-     identity iso88025CRFPInt {
-       base iana-interface-type;
-       description
-         "ISO 802.5 CRFP.";
-     }
-     identity myrinet {
-       base iana-interface-type;
-       description
-         "Myricom Myrinet.";
-     }
-     identity voiceEM {
-       base iana-interface-type;
-       description
-         "Voice recEive and transMit.";
-     }
-     identity voiceFXO {
-       base iana-interface-type;
-       description
-         "Voice Foreign Exchange Office.";
-     }
-     identity voiceFXS {
-       base iana-interface-type;
-       description
-         "Voice Foreign Exchange Station.";
-     }
-     identity voiceEncap {
-       base iana-interface-type;
-       description
-         "Voice encapsulation.";
-     }
-     identity voiceOverIp {
-       base iana-interface-type;
-       description
-         "Voice over IP encapsulation.";
-     }
-     identity atmDxi {
-       base iana-interface-type;
-       description
-         "ATM DXI.";
-     }
-     identity atmFuni {
-       base iana-interface-type;
-       description
-         "ATM FUNI.";
-     }
-     identity atmIma {
-       base iana-interface-type;
-       description
-         "ATM IMA.";
-     }
-     identity pppMultilinkBundle {
-       base iana-interface-type;
-       description
-         "PPP Multilink Bundle.";
-     }
-     identity ipOverCdlc {
-       base iana-interface-type;
-       description
-         "IBM ipOverCdlc.";
-     }
-     identity ipOverClaw {
-       base iana-interface-type;
-       description
-         "IBM Common Link Access to Workstn.";
-     }
-     identity stackToStack {
-       base iana-interface-type;
-       description
-         "IBM stackToStack.";
-     }
-     identity virtualIpAddress {
-       base iana-interface-type;
-       description
-         "IBM VIPA.";
-     }
-     identity mpc {
-       base iana-interface-type;
-       description
-         "IBM multi-protocol channel support.";
-     }
-     identity ipOverAtm {
-       base iana-interface-type;
-       description
-         "IBM ipOverAtm.";
-       reference
-         "RFC 2320 - Definitions of Managed Objects for Classical IP
-                     and ARP Over ATM Using SMIv2 (IPOA-MIB)";
-     }
-     identity iso88025Fiber {
-       base iana-interface-type;
-       description
-         "ISO 802.5j Fiber Token Ring.";
-     }
-     identity tdlc {
-       base iana-interface-type;
-       description
-         "IBM twinaxial data link control.";
-     }
-     identity gigabitEthernet {
-       base iana-interface-type;
-       status deprecated;
-       description
-         "Obsoleted via RFC 3635.
-          ethernetCsmacd(6) should be used instead.";
-       reference
-         "RFC 3635 - Definitions of Managed Objects for the
-                     Ethernet-like Interface Types";
-     }
-     identity hdlc {
-       base iana-interface-type;
-       description
-         "HDLC.";
-     }
-     identity lapf {
-       base iana-interface-type;
-       description
-         "LAP F.";
-     }
-     identity v37 {
-       base iana-interface-type;
-       description
-         "V.37.";
-     }
-     identity x25mlp {
-       base iana-interface-type;
-       description
-         "Multi-Link Protocol.";
-     }
-     identity x25huntGroup {
-       base iana-interface-type;
-       description
-         "X25 Hunt Group.";
-     }
-     identity transpHdlc {
-       base iana-interface-type;
-       description
-         "Transp HDLC.";
-     }
-     identity interleave {
-       base iana-interface-type;
-       description
-         "Interleave channel.";
-     }
-     identity fast {
-       base iana-interface-type;
-       description
-         "Fast channel.";
-     }
-     identity ip {
-       base iana-interface-type;
-       description
-         "IP (for APPN HPR in IP networks).";
-     }
-     identity docsCableMaclayer {
-       base iana-interface-type;
-       description
-         "CATV Mac Layer.";
-     }
-     identity docsCableDownstream {
-       base iana-interface-type;
-       description
-         "CATV Downstream interface.";
-     }
-     identity docsCableUpstream {
-       base iana-interface-type;
-       description
-         "CATV Upstream interface.";
-     }
-     identity a12MppSwitch {
-       base iana-interface-type;
-       description
-         "Avalon Parallel Processor.";
-     }
-     identity tunnel {
-       base iana-interface-type;
-       description
-         "Encapsulation interface.";
-     }
-     identity coffee {
-       base iana-interface-type;
-       description
-         "Coffee pot.";
-       reference
-         "RFC 2325 - Coffee MIB";
-     }
-     identity ces {
-       base iana-interface-type;
-       description
-         "Circuit Emulation Service.";
-     }
-     identity atmSubInterface {
-       base iana-interface-type;
-       description
-         "ATM Sub Interface.";
-     }
-     identity l2vlan {
-       base iana-interface-type;
-       description
-         "Layer 2 Virtual LAN using 802.1Q.";
-     }
-     identity l3ipvlan {
-       base iana-interface-type;
-       description
-         "Layer 3 Virtual LAN using IP.";
-     }
-     identity l3ipxvlan {
-       base iana-interface-type;
-       description
-         "Layer 3 Virtual LAN using IPX.";
-     }
-     identity digitalPowerline {
-       base iana-interface-type;
-       description
-         "IP over Power Lines.";
-     }
-     identity mediaMailOverIp {
-       base iana-interface-type;
-       description
-         "Multimedia Mail over IP.";
-     }
-     identity dtm {
-       base iana-interface-type;
-       description
-         "Dynamic synchronous Transfer Mode.";
-     }
-     identity dcn {
-       base iana-interface-type;
-       description
-         "Data Communications Network.";
-     }
-     identity ipForward {
-       base iana-interface-type;
-       description
-         "IP Forwarding Interface.";
-     }
-     identity msdsl {
-       base iana-interface-type;
-       description
-         "Multi-rate Symmetric DSL.";
-     }
-     identity ieee1394 {
-       base iana-interface-type;
-       description
-         "IEEE1394 High Performance Serial Bus.";
-     }
-     identity if-gsn {
-       base iana-interface-type;
-       description
-         "HIPPI-6400.";
-     }
-     identity dvbRccMacLayer {
-       base iana-interface-type;
-       description
-         "DVB-RCC MAC Layer.";
-     }
-     identity dvbRccDownstream {
-       base iana-interface-type;
-       description
-         "DVB-RCC Downstream Channel.";
-     }
-     identity dvbRccUpstream {
-       base iana-interface-type;
-       description
-         "DVB-RCC Upstream Channel.";
-     }
-     identity atmVirtual {
-       base iana-interface-type;
-       description
-         "ATM Virtual Interface.";
-     }
-     identity mplsTunnel {
-       base iana-interface-type;
-       description
-         "MPLS Tunnel Virtual Interface.";
-     }
-     identity srp {
-       base iana-interface-type;
-       description
-         "Spatial Reuse Protocol.";
-     }
-     identity voiceOverAtm {
-       base iana-interface-type;
-       description
-         "Voice over ATM.";
-     }
-     identity voiceOverFrameRelay {
-       base iana-interface-type;
-       description
-         "Voice Over Frame Relay.";
-     }
-     identity idsl {
-       base iana-interface-type;
-       description
-         "Digital Subscriber Loop over ISDN.";
-     }
-     identity compositeLink {
-       base iana-interface-type;
-       description
-         "Avici Composite Link Interface.";
-     }
-     identity ss7SigLink {
-       base iana-interface-type;
-       description
-         "SS7 Signaling Link.";
-     }
-     identity propWirelessP2P {
-       base iana-interface-type;
-       description
-         "Prop. P2P wireless interface.";
-     }
-     identity frForward {
-       base iana-interface-type;
-       description
-         "Frame Forward Interface.";
-     }
-     identity rfc1483 {
-       base iana-interface-type;
-       description
-         "Multiprotocol over ATM AAL5.";
-       reference
-         "RFC 1483 - Multiprotocol Encapsulation over ATM
-                     Adaptation Layer 5";
-     }
-     identity usb {
-       base iana-interface-type;
-       description
-         "USB Interface.";
-     }
-     identity ieee8023adLag {
-       base iana-interface-type;
-       description
-         "IEEE 802.3ad Link Aggregate.";
-     }
-     identity bgppolicyaccounting {
-       base iana-interface-type;
-       description
-         "BGP Policy Accounting.";
-     }
-     identity frf16MfrBundle {
-       base iana-interface-type;
-       description
-         "FRF.16 Multilink Frame Relay.";
-     }
-     identity h323Gatekeeper {
-       base iana-interface-type;
-       description
-         "H323 Gatekeeper.";
-     }
-     identity h323Proxy {
-       base iana-interface-type;
-       description
-         "H323 Voice and Video Proxy.";
-     }
-     identity mpls {
-       base iana-interface-type;
-       description
-         "MPLS.";
-     }
-     identity mfSigLink {
-       base iana-interface-type;
-       description
-         "Multi-frequency signaling link.";
-     }
-     identity hdsl2 {
-       base iana-interface-type;
-       description
-         "High Bit-Rate DSL - 2nd generation.";
-     }
-     identity shdsl {
-       base iana-interface-type;
-       description
-         "Multirate HDSL2.";
-     }
-     identity ds1FDL {
-       base iana-interface-type;
-       description
-         "Facility Data Link (4Kbps) on a DS1.";
-     }
-     identity pos {
-       base iana-interface-type;
-       description
-         "Packet over SONET/SDH Interface.";
-     }
-     identity dvbAsiIn {
-       base iana-interface-type;
-       description
-         "DVB-ASI Input.";
-     }
-     identity dvbAsiOut {
-       base iana-interface-type;
-       description
-         "DVB-ASI Output.";
-     }
-     identity plc {
-       base iana-interface-type;
-       description
-         "Power Line Communications.";
-     }
-     identity nfas {
-       base iana-interface-type;
-       description
-         "Non-Facility Associated Signaling.";
-     }
-     identity tr008 {
-       base iana-interface-type;
-       description
-         "TR008.";
-     }
-     identity gr303RDT {
-       base iana-interface-type;
-       description
-         "Remote Digital Terminal.";
-     }
-     identity gr303IDT {
-       base iana-interface-type;
-       description
-         "Integrated Digital Terminal.";
-     }
-     identity isup {
-       base iana-interface-type;
-       description
-         "ISUP.";
-     }
-     identity propDocsWirelessMaclayer {
-       base iana-interface-type;
-       description
-         "Cisco proprietary Maclayer.";
-     }
-     identity propDocsWirelessDownstream {
-       base iana-interface-type;
-       description
-         "Cisco proprietary Downstream.";
-     }
-     identity propDocsWirelessUpstream {
-       base iana-interface-type;
-       description
-         "Cisco proprietary Upstream.";
-     }
-     identity hiperlan2 {
-       base iana-interface-type;
-       description
-         "HIPERLAN Type 2 Radio Interface.";
-     }
-     identity propBWAp2Mp {
-       base iana-interface-type;
-       description
-         "PropBroadbandWirelessAccesspt2Multipt (use of this value
-          for IEEE 802.16 WMAN interfaces as per IEEE Std 802.16f
-          is deprecated, and ieee80216WMAN(237) should be used
-          instead).";
-     }
-     identity sonetOverheadChannel {
-       base iana-interface-type;
-       description
-         "SONET Overhead Channel.";
-     }
-     identity digitalWrapperOverheadChannel {
-       base iana-interface-type;
-       description
-         "Digital Wrapper.";
-     }
-     identity aal2 {
-       base iana-interface-type;
-       description
-         "ATM adaptation layer 2.";
-     }
-     identity radioMAC {
-       base iana-interface-type;
-       description
-         "MAC layer over radio links.";
-     }
-     identity atmRadio {
-       base iana-interface-type;
-       description
-         "ATM over radio links.";
-     }
-     identity imt {
-       base iana-interface-type;
-       description
-         "Inter-Machine Trunks.";
-     }
-     identity mvl {
-       base iana-interface-type;
-       description
-         "Multiple Virtual Lines DSL.";
-     }
-     identity reachDSL {
-       base iana-interface-type;
-       description
-         "Long Reach DSL.";
-     }
-     identity frDlciEndPt {
-       base iana-interface-type;
-       description
-         "Frame Relay DLCI End Point.";
-     }
-     identity atmVciEndPt {
-       base iana-interface-type;
-       description
-         "ATM VCI End Point.";
-     }
-     identity opticalChannel {
-       base iana-interface-type;
-       description
-         "Optical Channel.";
-     }
-     identity opticalTransport {
-       base iana-interface-type;
-       description
-         "Optical Transport.";
-     }
-     identity propAtm {
-       base iana-interface-type;
-       description
-         "Proprietary ATM.";
-     }
-     identity voiceOverCable {
-       base iana-interface-type;
-       description
-         "Voice Over Cable Interface.";
-     }
-     identity infiniband {
-       base iana-interface-type;
-       description
-         "Infiniband.";
-     }
-     identity teLink {
-       base iana-interface-type;
-       description
-         "TE Link.";
-     }
-     identity q2931 {
-       base iana-interface-type;
-       description
-         "Q.2931.";
-     }
-     identity virtualTg {
-       base iana-interface-type;
-       description
-         "Virtual Trunk Group.";
-     }
-     identity sipTg {
-       base iana-interface-type;
-       description
-         "SIP Trunk Group.";
-     }
-     identity sipSig {
-       base iana-interface-type;
-       description
-         "SIP Signaling.";
-     }
-     identity docsCableUpstreamChannel {
-       base iana-interface-type;
-       description
-         "CATV Upstream Channel.";
-     }
-     identity econet {
-       base iana-interface-type;
-       description
-         "Acorn Econet.";
-     }
-     identity pon155 {
-       base iana-interface-type;
-       description
-         "FSAN 155Mb Symetrical PON interface.";
-     }
-     identity pon622 {
-       base iana-interface-type;
-       description
-         "FSAN 622Mb Symetrical PON interface.";
-     }
-     identity bridge {
-       base iana-interface-type;
-       description
-         "Transparent bridge interface.";
-     }
-     identity linegroup {
-       base iana-interface-type;
-       description
-         "Interface common to multiple lines.";
-     }
-     identity voiceEMFGD {
-       base iana-interface-type;
-       description
-         "Voice E&M Feature Group D.";
-     }
-     identity voiceFGDEANA {
-       base iana-interface-type;
-       description
-         "Voice FGD Exchange Access North American.";
-     }
-     identity voiceDID {
-       base iana-interface-type;
-       description
-         "Voice Direct Inward Dialing.";
-     }
-     identity mpegTransport {
-       base iana-interface-type;
-       description
-         "MPEG transport interface.";
-     }
-     identity sixToFour {
-       base iana-interface-type;
-       status deprecated;
-       description
-         "6to4 interface (DEPRECATED).";
-       reference
-         "RFC 4087 - IP Tunnel MIB";
-     }
-     identity gtp {
-       base iana-interface-type;
-       description
-         "GTP (GPRS Tunneling Protocol).";
-     }
-     identity pdnEtherLoop1 {
-       base iana-interface-type;
-       description
-         "Paradyne EtherLoop 1.";
-     }
-     identity pdnEtherLoop2 {
-       base iana-interface-type;
-       description
-         "Paradyne EtherLoop 2.";
-     }
-     identity opticalChannelGroup {
-       base iana-interface-type;
-       description
-         "Optical Channel Group.";
-     }
-     identity homepna {
-       base iana-interface-type;
-       description
-         "HomePNA ITU-T G.989.";
-     }
-     identity gfp {
-       base iana-interface-type;
-       description
-         "Generic Framing Procedure (GFP).";
-     }
-     identity ciscoISLvlan {
-       base iana-interface-type;
-       description
-         "Layer 2 Virtual LAN using Cisco ISL.";
-     }
-     identity actelisMetaLOOP {
-       base iana-interface-type;
-       description
-         "Acteleis proprietary MetaLOOP High Speed Link.";
-     }
-     identity fcipLink {
-       base iana-interface-type;
-       description
-         "FCIP Link.";
-     }
-     identity rpr {
-       base iana-interface-type;
-       description
-         "Resilient Packet Ring Interface Type.";
-     }
-     identity qam {
-       base iana-interface-type;
-       description
-         "RF Qam Interface.";
-     }
-     identity lmp {
-       base iana-interface-type;
-       description
-         "Link Management Protocol.";
-       reference
-         "RFC 4327 - Link Management Protocol (LMP) Management
-                     Information Base (MIB)";
-     }
-     identity cblVectaStar {
-       base iana-interface-type;
-       description
-         "Cambridge Broadband Networks Limited VectaStar.";
-     }
-     identity docsCableMCmtsDownstream {
-       base iana-interface-type;
-       description
-         "CATV Modular CMTS Downstream Interface.";
-     }
-     identity adsl2 {
-       base iana-interface-type;
-       status deprecated;
-       description
-         "Asymmetric Digital Subscriber Loop Version 2
-          (DEPRECATED/OBSOLETED - please use adsl2plus(238)
-          instead).";
-       reference
-         "RFC 4706 - Definitions of Managed Objects for Asymmetric
-                     Digital Subscriber Line 2 (ADSL2)";
-     }
-     identity macSecControlledIF {
-       base iana-interface-type;
-       description
-         "MACSecControlled.";
-     }
-     identity macSecUncontrolledIF {
-       base iana-interface-type;
-       description
-         "MACSecUncontrolled.";
-     }
-     identity aviciOpticalEther {
-       base iana-interface-type;
-       description
-         "Avici Optical Ethernet Aggregate.";
-     }
-     identity atmbond {
-       base iana-interface-type;
-       description
-         "atmbond.";
-     }
-     identity voiceFGDOS {
-       base iana-interface-type;
-       description
-         "Voice FGD Operator Services.";
-     }
-     identity mocaVersion1 {
-       base iana-interface-type;
-       description
-         "MultiMedia over Coax Alliance (MoCA) Interface
-          as documented in information provided privately to IANA.";
-     }
-     identity ieee80216WMAN {
-       base iana-interface-type;
-       description
-         "IEEE 802.16 WMAN interface.";
-     }
-     identity adsl2plus {
-       base iana-interface-type;
-       description
-         "Asymmetric Digital Subscriber Loop Version 2 -
-          Version 2 Plus and all variants.";
-     }
-     identity dvbRcsMacLayer {
-       base iana-interface-type;
-       description
-         "DVB-RCS MAC Layer.";
-       reference
-         "RFC 5728 - The SatLabs Group DVB-RCS MIB";
-     }
-     identity dvbTdm {
-       base iana-interface-type;
-       description
-         "DVB Satellite TDM.";
-       reference
-         "RFC 5728 - The SatLabs Group DVB-RCS MIB";
-     }
-     identity dvbRcsTdma {
-       base iana-interface-type;
-       description
-         "DVB-RCS TDMA.";
-       reference
-         "RFC 5728 - The SatLabs Group DVB-RCS MIB";
-     }
-     identity x86Laps {
-       base iana-interface-type;
-       description
-         "LAPS based on ITU-T X.86/Y.1323.";
-     }
-     identity wwanPP {
-       base iana-interface-type;
-       description
-         "3GPP WWAN.";
-     }
-     identity wwanPP2 {
-       base iana-interface-type;
-       description
-         "3GPP2 WWAN.";
-     }
-     identity voiceEBS {
-       base iana-interface-type;
-       description
-         "Voice P-phone EBS physical interface.";
-     }
-     identity ifPwType {
-       base iana-interface-type;
-       description
-         "Pseudowire interface type.";
-       reference
-         "RFC 5601 - Pseudowire (PW) Management Information Base (MIB)";
-     }
-     identity ilan {
-       base iana-interface-type;
-       description
-         "Internal LAN on a bridge per IEEE 802.1ap.";
-     }
-     identity pip {
-       base iana-interface-type;
-       description
-         "Provider Instance Port on a bridge per IEEE 802.1ah PBB.";
-     }
-     identity aluELP {
-       base iana-interface-type;
-       description
-         "Alcatel-Lucent Ethernet Link Protection.";
-     }
-     identity gpon {
-       base iana-interface-type;
-       description
-         "Gigabit-capable passive optical networks (G-PON) as per
-          ITU-T G.948.";
-     }
-     identity vdsl2 {
-       base iana-interface-type;
-       description
-         "Very high speed digital subscriber line Version 2
-          (as per ITU-T Recommendation G.993.2).";
-       reference
-         "RFC 5650 - Definitions of Managed Objects for Very High
-                     Speed Digital Subscriber Line 2 (VDSL2)";
-     }
-     identity capwapDot11Profile {
-       base iana-interface-type;
-       description
-         "WLAN Profile Interface.";
-       reference
-         "RFC 5834 - Control and Provisioning of Wireless Access
-                     Points (CAPWAP) Protocol Binding MIB for
-                     IEEE 802.11";
-     }
-     identity capwapDot11Bss {
-       base iana-interface-type;
-       description
-         "WLAN BSS Interface.";
-       reference
-         "RFC 5834 - Control and Provisioning of Wireless Access
-                     Points (CAPWAP) Protocol Binding MIB for
-                     IEEE 802.11";
-     }
-     identity capwapWtpVirtualRadio {
-       base iana-interface-type;
-       description
-         "WTP Virtual Radio Interface.";
-       reference
-         "RFC 5833 - Control and Provisioning of Wireless Access
-                     Points (CAPWAP) Protocol Base MIB";
-     }
-     identity bits {
-       base iana-interface-type;
-       description
-         "bitsport.";
-     }
-     identity docsCableUpstreamRfPort {
-       base iana-interface-type;
-       description
-         "DOCSIS CATV Upstream RF Port.";
-     }
-     identity cableDownstreamRfPort {
-       base iana-interface-type;
-       description
-         "CATV downstream RF Port.";
-     }
-     identity vmwareVirtualNic {
-       base iana-interface-type;
-       description
-         "VMware Virtual Network Interface.";
-     }
-     identity ieee802154 {
-       base iana-interface-type;
-       description
-         "IEEE 802.15.4 WPAN interface.";
-       reference
-         "IEEE 802.15.4-2006";
-     }
-     identity otnOdu {
-       base iana-interface-type;
-       description
-         "OTN Optical Data Unit.";
-     }
-     identity otnOtu {
-       base iana-interface-type;
-       description
-         "OTN Optical channel Transport Unit.";
-     }
-     identity ifVfiType {
-       base iana-interface-type;
-       description
-         "VPLS Forwarding Instance Interface Type.";
-     }
-     identity g9981 {
-       base iana-interface-type;
-       description
-         "G.998.1 bonded interface.";
-     }
-     identity g9982 {
-       base iana-interface-type;
-       description
-         "G.998.2 bonded interface.";
-     }
-     identity g9983 {
-       base iana-interface-type;
-       description
-         "G.998.3 bonded interface.";
-     }
-     identity aluEpon {
-       base iana-interface-type;
-       description
-         "Ethernet Passive Optical Networks (E-PON).";
-     }
-     identity aluEponOnu {
-       base iana-interface-type;
-       description
-         "EPON Optical Network Unit.";
-     }
-     identity aluEponPhysicalUni {
-       base iana-interface-type;
-       description
-         "EPON physical User to Network interface.";
-     }
-     identity aluEponLogicalLink {
-       base iana-interface-type;
-       description
-         "The emulation of a point-to-point link over the EPON
-          layer.";
-     }
-     identity aluGponOnu {
-       base iana-interface-type;
-       description
-         "GPON Optical Network Unit.";
-       reference
-         "ITU-T G.984.2";
-     }
-     identity aluGponPhysicalUni {
-       base iana-interface-type;
-       description
-         "GPON physical User to Network interface.";
-       reference
-         "ITU-T G.984.2";
-     }
-     identity vmwareNicTeam {
-       base iana-interface-type;
-       description
-         "VMware NIC Team.";
-     }
-   }
diff --git a/drivers/microsemi/ea1000yang/src/main/yang/ieee-types.yang b/drivers/microsemi/ea1000yang/src/main/yang/ieee-types.yang
deleted file mode 100644
index 5ff5c1d..0000000
--- a/drivers/microsemi/ea1000yang/src/main/yang/ieee-types.yang
+++ /dev/null
@@ -1,79 +0,0 @@
-   module ieee-types {
-
-       // XXX namespace to be allocated by IANA
-
-       namespace "urn:ietf:params:xml:ns:yang:ieee-types";
-       prefix "ieee";
-
-       import ietf-yang-types {
-           prefix yang;
-       }
-
-       organization
-           "YANG Language Design Team";
-
-       contact
-           "Juergen Schoenwaelder (Editor)
-            <j.schoenwaelder@jacobs-university.de>";
-
-       description
-           "This module contains standard derived YANG types
-            for IEEE 802 addresses and related things.";
-
-       revision 2008-05-22 {
-           description "Initial revision.";
-       }
-
-       /*
-        * collection of IEEE address type definitions
-        */
-
-       typedef mac-address {
-           type yang:phys-address {
-               pattern '([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}';
-           }
-           description
-              "The mac-address type represents an 802 MAC address
-               represented in the `canonical' order defined by
-               IEEE 802.1a, i.e., as if it were transmitted least
-               significant bit first, even though 802.5 (in contrast
-               to other 802.x protocols) requires MAC addresses to
-               be transmitted most significant bit first.";
-           reference
-              "RFC 2579 STD 58";
-       }
-
-       /*
-        * collection of IEEE 802 related identifier types
-        */
-
-       typedef bridgeid {
-           type string {
-               pattern '[0-9a-fA-F]{4}:'
-                     + '([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}';
-           }
-           description
-              "The bridgeid type represents identifers that uniquely
-               identify a bridge.  Its first four hexadecimal digits
-               contain a priority value followed by a colon. The
-               remaining characters contain the MAC address used to
-               refer to a bridge in a unique fashion (typically, the
-               numerically smallest MAC address of all ports on the
-               bridge).";
-           reference
-              "RFC 4188";
-       }
-
-       typedef vlanid {
-           type uint16 {
-               range "1..4094";
-           }
-           description
-              "The vlanid type uniquely identifies a VLAN. This is
-               the 12-bit VLAN-ID used in the VLAN Tag header. The
-               range is defined by the referenced specification.";
-           reference
-              "IEEE Std 802.1Q 2003 Edition, Virtual Bridged Local
-               Area Networks.";
-       }
-   }
diff --git a/drivers/microsemi/ea1000yang/src/main/yang/ietf-inet-types.yang b/drivers/microsemi/ea1000yang/src/main/yang/ietf-inet-types.yang
deleted file mode 100644
index 5388b03..0000000
--- a/drivers/microsemi/ea1000yang/src/main/yang/ietf-inet-types.yang
+++ /dev/null
@@ -1,461 +0,0 @@
-module ietf-inet-types {
-
-  namespace "urn:ietf:params:xml:ns:yang:ietf-inet-types";
-  prefix "inet";
-
-  organization
-   "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
-
-  contact
-   "WG Web:   <http://tools.ietf.org/wg/netmod/>
-    WG List:  <mailto:netmod@ietf.org>
-
-    WG Chair: David Kessens
-              <mailto:david.kessens@nsn.com>
-
-    WG Chair: Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>
-
-    Editor:   Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>";
-
-  description
-   "This module contains a collection of generally useful derived
-    YANG data types for Internet addresses and related things.
-
-    Copyright (c) 2013 IETF Trust and the persons identified as
-    authors of the code.  All rights reserved.
-
-    Redistribution and use in source and binary forms, with or
-    without modification, is permitted pursuant to, and subject
-    to the license terms contained in, the Simplified BSD License
-    set forth in Section 4.c of the IETF Trust's Legal Provisions
-    Relating to IETF Documents
-    (http://trustee.ietf.org/license-info).
-
-    This version of this YANG module is part of RFC 6991; see
-    the RFC itself for full legal notices.";
-
-  revision 2013-07-15 {
-    description
-     "This revision adds the following new data types:
-      - ip-address-no-zone
-      - ipv4-address-no-zone
-      - ipv6-address-no-zone";
-    reference
-     "RFC 6991: Common YANG Data Types";
-  }
-
-  revision 2010-09-24 {
-    description
-     "Initial revision.";
-    reference
-     "RFC 6021: Common YANG Data Types";
-  }
-
-  /*** collection of types related to protocol fields ***/
-
-  typedef ip-version {
-    type enumeration {
-      enum unknown {
-        value "0";
-        description
-         "An unknown or unspecified version of the Internet
-          protocol.";
-      }
-      enum ipv4 {
-        value "1";
-        description
-         "The IPv4 protocol as defined in RFC 791.";
-      }
-      enum ipv6 {
-        value "2";
-        description
-         "The IPv6 protocol as defined in RFC 2460.";
-      }
-    }
-    description
-     "This value represents the version of the IP protocol.
-
-      In the value set and its semantics, this type is equivalent
-      to the InetVersion textual convention of the SMIv2.";
-    reference
-     "RFC  791: Internet Protocol
-      RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
-      RFC 4001: Textual Conventions for Internet Network Addresses";
-  }
-
-  typedef dscp {
-    type uint8 {
-      range "0..63";
-    }
-    description
-     "The dscp type represents a Differentiated Services Code Point
-      that may be used for marking packets in a traffic stream.
-      In the value set and its semantics, this type is equivalent
-      to the Dscp textual convention of the SMIv2.";
-    reference
-     "RFC 3289: Management Information Base for the Differentiated
-                Services Architecture
-      RFC 2474: Definition of the Differentiated Services Field
-                (DS Field) in the IPv4 and IPv6 Headers
-      RFC 2780: IANA Allocation Guidelines For Values In
-                the Internet Protocol and Related Headers";
-  }
-
-  typedef ipv6-flow-label {
-    type uint32 {
-      range "0..1048575";
-    }
-    description
-     "The ipv6-flow-label type represents the flow identifier or Flow
-      Label in an IPv6 packet header that may be used to
-      discriminate traffic flows.
-
-      In the value set and its semantics, this type is equivalent
-      to the IPv6FlowLabel textual convention of the SMIv2.";
-    reference
-     "RFC 3595: Textual Conventions for IPv6 Flow Label
-      RFC 2460: Internet Protocol, Version 6 (IPv6) Specification";
-  }
-
-  typedef port-number {
-    type uint16 {
-      range "0..65535";
-    }
-    description
-     "The port-number type represents a 16-bit port number of an
-      Internet transport-layer protocol such as UDP, TCP, DCCP, or
-      SCTP.  Port numbers are assigned by IANA.  A current list of
-      all assignments is available from <http://www.iana.org/>.
-
-      Note that the port number value zero is reserved by IANA.  In
-      situations where the value zero does not make sense, it can
-      be excluded by subtyping the port-number type.
-      In the value set and its semantics, this type is equivalent
-      to the InetPortNumber textual convention of the SMIv2.";
-    reference
-     "RFC  768: User Datagram Protocol
-      RFC  793: Transmission Control Protocol
-      RFC 4960: Stream Control Transmission Protocol
-      RFC 4340: Datagram Congestion Control Protocol (DCCP)
-      RFC 4001: Textual Conventions for Internet Network Addresses";
-  }
-
-  /*** collection of types related to autonomous systems ***/
-
-  typedef as-number {
-    type uint32;
-    description
-     "The as-number type represents autonomous system numbers
-      which identify an Autonomous System (AS).  An AS is a set
-      of routers under a single technical administration, using
-      an interior gateway protocol and common metrics to route
-      packets within the AS, and using an exterior gateway
-      protocol to route packets to other ASes.  IANA maintains
-      the AS number space and has delegated large parts to the
-      regional registries.
-
-      Autonomous system numbers were originally limited to 16
-      bits.  BGP extensions have enlarged the autonomous system
-      number space to 32 bits.  This type therefore uses an uint32
-      base type without a range restriction in order to support
-      a larger autonomous system number space.
-
-      In the value set and its semantics, this type is equivalent
-      to the InetAutonomousSystemNumber textual convention of
-      the SMIv2.";
-    reference
-     "RFC 1930: Guidelines for creation, selection, and registration
-                of an Autonomous System (AS)
-      RFC 4271: A Border Gateway Protocol 4 (BGP-4)
-      RFC 4001: Textual Conventions for Internet Network Addresses
-      RFC 6793: BGP Support for Four-Octet Autonomous System (AS)
-                Number Space";
-  }
-
-  /*** collection of types related to IP addresses and hostnames ***/
-
-  typedef ip-address {
-    type union {
-      type inet:ipv4-address;
-      type inet:ipv6-address;
-    }
-    description
-     "The ip-address type represents an IP address and is IP
-      version neutral.  The format of the textual representation
-      implies the IP version.  This type supports scoped addresses
-      by allowing zone identifiers in the address format.";
-    reference
-     "RFC 4007: IPv6 Scoped Address Architecture";
-  }
-
-  typedef ipv4-address {
-    type string {
-      pattern
-        '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
-      +  '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
-      + '(%[\p{N}\p{L}]+)?';
-    }
-    description
-      "The ipv4-address type represents an IPv4 address in
-       dotted-quad notation.  The IPv4 address may include a zone
-       index, separated by a % sign.
-
-       The zone index is used to disambiguate identical address
-       values.  For link-local addresses, the zone index will
-       typically be the interface index number or the name of an
-       interface.  If the zone index is not present, the default
-       zone of the device will be used.
-
-       The canonical format for the zone index is the numerical
-       format";
-  }
-
-  typedef ipv6-address {
-    type string {
-      pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
-            + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
-            + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
-            + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
-            + '(%[\p{N}\p{L}]+)?';
-      pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
-            + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
-            + '(%.+)?';
-    }
-    description
-     "The ipv6-address type represents an IPv6 address in full,
-      mixed, shortened, and shortened-mixed notation.  The IPv6
-      address may include a zone index, separated by a % sign.
-
-      The zone index is used to disambiguate identical address
-      values.  For link-local addresses, the zone index will
-      typically be the interface index number or the name of an
-      interface.  If the zone index is not present, the default
-      zone of the device will be used.
-
-
-
-      The canonical format of IPv6 addresses uses the textual
-      representation defined in Section 4 of RFC 5952.  The
-      canonical format for the zone index is the numerical
-      format as described in Section 11.2 of RFC 4007.";
-    reference
-     "RFC 4291: IP Version 6 Addressing Architecture
-      RFC 4007: IPv6 Scoped Address Architecture
-      RFC 5952: A Recommendation for IPv6 Address Text
-                Representation";
-  }
-
-  typedef ip-address-no-zone {
-    type union {
-      type inet:ipv4-address-no-zone;
-      type inet:ipv6-address-no-zone;
-    }
-    description
-     "The ip-address-no-zone type represents an IP address and is
-      IP version neutral.  The format of the textual representation
-      implies the IP version.  This type does not support scoped
-      addresses since it does not allow zone identifiers in the
-      address format.";
-    reference
-     "RFC 4007: IPv6 Scoped Address Architecture";
-  }
-
-  typedef ipv4-address-no-zone {
-    type inet:ipv4-address {
-      pattern '[0-9\.]*';
-    }
-    description
-      "An IPv4 address without a zone index.  This type, derived from
-       ipv4-address, may be used in situations where the zone is
-       known from the context and hence no zone index is needed.";
-  }
-
-  typedef ipv6-address-no-zone {
-    type inet:ipv6-address {
-      pattern '[0-9a-fA-F:\.]*';
-    }
-    description
-      "An IPv6 address without a zone index.  This type, derived from
-       ipv6-address, may be used in situations where the zone is
-       known from the context and hence no zone index is needed.";
-    reference
-     "RFC 4291: IP Version 6 Addressing Architecture
-      RFC 4007: IPv6 Scoped Address Architecture
-      RFC 5952: A Recommendation for IPv6 Address Text
-                Representation";
-  }
-
-  typedef ip-prefix {
-    type union {
-      type inet:ipv4-prefix;
-      type inet:ipv6-prefix;
-    }
-    description
-     "The ip-prefix type represents an IP prefix and is IP
-      version neutral.  The format of the textual representations
-      implies the IP version.";
-  }
-
-  typedef ipv4-prefix {
-    type string {
-      pattern
-         '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
-       +  '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
-       + '/(([0-9])|([1-2][0-9])|(3[0-2]))';
-    }
-    description
-     "The ipv4-prefix type represents an IPv4 address prefix.
-      The prefix length is given by the number following the
-      slash character and must be less than or equal to 32.
-
-      A prefix length value of n corresponds to an IP address
-      mask that has n contiguous 1-bits from the most
-      significant bit (MSB) and all other bits set to 0.
-
-      The canonical format of an IPv4 prefix has all bits of
-      the IPv4 address set to zero that are not part of the
-      IPv4 prefix.";
-  }
-
-  typedef ipv6-prefix {
-    type string {
-      pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
-            + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
-            + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
-            + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
-            + '(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))';
-      pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
-            + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
-            + '(/.+)';
-    }
-
-
-    description
-     "The ipv6-prefix type represents an IPv6 address prefix.
-      The prefix length is given by the number following the
-      slash character and must be less than or equal to 128.
-
-      A prefix length value of n corresponds to an IP address
-      mask that has n contiguous 1-bits from the most
-      significant bit (MSB) and all other bits set to 0.
-
-      The IPv6 address should have all bits that do not belong
-      to the prefix set to zero.
-
-      The canonical format of an IPv6 prefix has all bits of
-      the IPv6 address set to zero that are not part of the
-      IPv6 prefix.  Furthermore, the IPv6 address is represented
-      as defined in Section 4 of RFC 5952.";
-    reference
-     "RFC 5952: A Recommendation for IPv6 Address Text
-                Representation";
-  }
-
-  /*** collection of domain name and URI types ***/
-
-  typedef domain-name {
-    type string {
-      pattern
-        '((([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.)*'
-      + '([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)'
-      + '|\.';
-      length "1..253";
-    }
-    description
-     "The domain-name type represents a DNS domain name.  The
-      name SHOULD be fully qualified whenever possible.
-
-      Internet domain names are only loosely specified.  Section
-      3.5 of RFC 1034 recommends a syntax (modified in Section
-      2.1 of RFC 1123).  The pattern above is intended to allow
-      for current practice in domain name use, and some possible
-      future expansion.  It is designed to hold various types of
-      domain names, including names used for A or AAAA records
-      (host names) and other records, such as SRV records.  Note
-      that Internet host names have a stricter syntax (described
-      in RFC 952) than the DNS recommendations in RFCs 1034 and
-      1123, and that systems that want to store host names in
-      schema nodes using the domain-name type are recommended to
-      adhere to this stricter standard to ensure interoperability.
-
-      The encoding of DNS names in the DNS protocol is limited
-      to 255 characters.  Since the encoding consists of labels
-      prefixed by a length bytes and there is a trailing NULL
-      byte, only 253 characters can appear in the textual dotted
-      notation.
-
-      The description clause of schema nodes using the domain-name
-      type MUST describe when and how these names are resolved to
-      IP addresses.  Note that the resolution of a domain-name value
-      may require to query multiple DNS records (e.g., A for IPv4
-      and AAAA for IPv6).  The order of the resolution process and
-      which DNS record takes precedence can either be defined
-      explicitly or may depend on the configuration of the
-      resolver.
-
-      Domain-name values use the US-ASCII encoding.  Their canonical
-      format uses lowercase US-ASCII characters.  Internationalized
-      domain names MUST be A-labels as per RFC 5890.";
-    reference
-     "RFC  952: DoD Internet Host Table Specification
-      RFC 1034: Domain Names - Concepts and Facilities
-      RFC 1123: Requirements for Internet Hosts -- Application
-                and Support
-      RFC 2782: A DNS RR for specifying the location of services
-                (DNS SRV)
-      RFC 5890: Internationalized Domain Names in Applications
-                (IDNA): Definitions and Document Framework";
-  }
-
-  typedef host {
-    type union {
-      type inet:ip-address;
-      type inet:domain-name;
-    }
-    description
-     "The host type represents either an IP address or a DNS
-      domain name.";
-  }
-
-  typedef uri {
-    type string;
-    description
-     "The uri type represents a Uniform Resource Identifier
-      (URI) as defined by STD 66.
-
-      Objects using the uri type MUST be in US-ASCII encoding,
-      and MUST be normalized as described by RFC 3986 Sections
-      6.2.1, 6.2.2.1, and 6.2.2.2.  All unnecessary
-      percent-encoding is removed, and all case-insensitive
-      characters are set to lowercase except for hexadecimal
-      digits, which are normalized to uppercase as described in
-      Section 6.2.2.1.
-
-      The purpose of this normalization is to help provide
-      unique URIs.  Note that this normalization is not
-      sufficient to provide uniqueness.  Two URIs that are
-      textually distinct after this normalization may still be
-      equivalent.
-
-      Objects using the uri type may restrict the schemes that
-      they permit.  For example, 'data:' and 'urn:' schemes
-      might not be appropriate.
-
-      A zero-length URI is not a valid URI.  This can be used to
-      express 'URI absent' where required.
-
-      In the value set and its semantics, this type is equivalent
-      to the Uri SMIv2 textual convention defined in RFC 5017.";
-    reference
-     "RFC 3986: Uniform Resource Identifier (URI): Generic Syntax
-      RFC 3305: Report from the Joint W3C/IETF URI Planning Interest
-                Group: Uniform Resource Identifiers (URIs), URLs,
-                and Uniform Resource Names (URNs): Clarifications
-                and Recommendations
-      RFC 5017: MIB Textual Conventions for Uniform Resource
-                Identifiers (URIs)";
-  }
-
-}
diff --git a/drivers/microsemi/ea1000yang/src/main/yang/ietf-interfaces.yang b/drivers/microsemi/ea1000yang/src/main/yang/ietf-interfaces.yang
deleted file mode 100644
index b18d5d3..0000000
--- a/drivers/microsemi/ea1000yang/src/main/yang/ietf-interfaces.yang
+++ /dev/null
@@ -1,731 +0,0 @@
-module ietf-interfaces {
-
-  namespace "urn:ietf:params:xml:ns:yang:ietf-interfaces";
-  prefix if;
-
-  import ietf-yang-types {
-    prefix yang;
-  }
-
-  organization
-    "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
-
-  contact
-    "WG Web:   <http://tools.ietf.org/wg/netmod/>
-     WG List:  <mailto:netmod@ietf.org>
-
-     WG Chair: Thomas Nadeau
-               <mailto:tnadeau@lucidvision.com>
-
-     WG Chair: Juergen Schoenwaelder
-               <mailto:j.schoenwaelder@jacobs-university.de>
-
-     Editor:   Martin Bjorklund
-               <mailto:mbj@tail-f.com>";
-
-  description
-    "This module contains a collection of YANG definitions for
-     managing network interfaces.
-
-     Copyright (c) 2014 IETF Trust and the persons identified as
-     authors of the code.  All rights reserved.
-
-     Redistribution and use in source and binary forms, with or
-     without modification, is permitted pursuant to, and subject
-     to the license terms contained in, the Simplified BSD License
-     set forth in Section 4.c of the IETF Trust's Legal Provisions
-     Relating to IETF Documents
-     (http://trustee.ietf.org/license-info).
-
-     This version of this YANG module is part of RFC 7223; see
-     the RFC itself for full legal notices.";
-
-  revision 2014-05-08 {
-    description
-      "Initial revision.";
-    reference
-      "RFC 7223: A YANG Data Model for Interface Management";
-  }
-
-  /*
-   * Typedefs
-   */
-
-  typedef interface-ref {
-    type leafref {
-      path "/if:interfaces/if:interface/if:name";
-    }
-    description
-      "This type is used by data models that need to reference
-       configured interfaces.";
-  }
-
-  typedef interface-state-ref {
-    type leafref {
-      path "/if:interfaces-state/if:interface/if:name";
-    }
-    description
-      "This type is used by data models that need to reference
-       the operationally present interfaces.";
-  }
-
-  /*
-   * Identities
-   */
-
-  identity interface-type {
-    description
-      "Base identity from which specific interface types are
-       derived.";
-  }
-
-  /*
-   * Features
-   */
-
-  feature arbitrary-names {
-    description
-      "This feature indicates that the device allows user-controlled
-       interfaces to be named arbitrarily.";
-  }
-  feature pre-provisioning {
-    description
-      "This feature indicates that the device supports
-       pre-provisioning of interface configuration, i.e., it is
-       possible to configure an interface whose physical interface
-       hardware is not present on the device.";
-  }
-
-  feature if-mib {
-    description
-      "This feature indicates that the device implements
-       the IF-MIB.";
-    reference
-      "RFC 2863: The Interfaces Group MIB";
-  }
-
-  /*
-   * Configuration data nodes
-   */
-
-  container interfaces {
-    description
-      "Interface configuration parameters.";
-
-    list interface {
-      key "name";
-
-      description
-        "The list of configured interfaces on the device.
-
-         The operational state of an interface is available in the
-         /interfaces-state/interface list.  If the configuration of a
-         system-controlled interface cannot be used by the system
-         (e.g., the interface hardware present does not match the
-         interface type), then the configuration is not applied to
-         the system-controlled interface shown in the
-         /interfaces-state/interface list.  If the configuration
-         of a user-controlled interface cannot be used by the system,
-         the configured interface is not instantiated in the
-         /interfaces-state/interface list.";
-
-     leaf name {
-        type yang:yang-identifier;
-        
-        must ".='eth0' or .='eth1' or .='lo'" {
-        	error-app-tag "if-must-1";
-        	error-message "Interface name must only be eth0, eth1 or lo";
-        }
-        
-        description
-          "The name of the interface.
-
-           A device MAY restrict the allowed values for this leaf,
-           possibly depending on the type of the interface.
-           For system-controlled interfaces, this leaf is the
-           device-specific name of the interface.  The 'config false'
-           list /interfaces-state/interface contains the currently
-           existing interfaces on the device.
-
-           If a client tries to create configuration for a
-           system-controlled interface that is not present in the
-           /interfaces-state/interface list, the server MAY reject
-           the request if the implementation does not support
-           pre-provisioning of interfaces or if the name refers to
-           an interface that can never exist in the system.  A
-           NETCONF server MUST reply with an rpc-error with the
-           error-tag 'invalid-value' in this case.
-
-           If the device supports pre-provisioning of interface
-           configuration, the 'pre-provisioning' feature is
-           advertised.
-
-           If the device allows arbitrarily named user-controlled
-           interfaces, the 'arbitrary-names' feature is advertised.
-
-           When a configured user-controlled interface is created by
-           the system, it is instantiated with the same name in the
-           /interface-state/interface list.";
-      }
-
-      leaf description {
-        type string;
-        description
-          "A textual description of the interface.
-
-           A server implementation MAY map this leaf to the ifAlias
-           MIB object.  Such an implementation needs to use some
-           mechanism to handle the differences in size and characters
-           allowed between this leaf and ifAlias.  The definition of
-           such a mechanism is outside the scope of this document.
-
-           Since ifAlias is defined to be stored in non-volatile
-           storage, the MIB implementation MUST map ifAlias to the
-           value of 'description' in the persistently stored
-           datastore.
-
-           Specifically, if the device supports ':startup', when
-           ifAlias is read the device MUST return the value of
-           'description' in the 'startup' datastore, and when it is
-           written, it MUST be written to the 'running' and 'startup'
-           datastores.  Note that it is up to the implementation to
-
-           decide whether to modify this single leaf in 'startup' or
-           perform an implicit copy-config from 'running' to
-           'startup'.
-
-           If the device does not support ':startup', ifAlias MUST
-           be mapped to the 'description' leaf in the 'running'
-           datastore.";
-        reference
-          "RFC 2863: The Interfaces Group MIB - ifAlias";
-      }
-
-      leaf type {
-        type identityref {
-          base interface-type;
-        }
-        mandatory true;
-        description
-          "The type of the interface.
-
-           When an interface entry is created, a server MAY
-           initialize the type leaf with a valid value, e.g., if it
-           is possible to derive the type from the name of the
-           interface.
-
-           If a client tries to set the type of an interface to a
-           value that can never be used by the system, e.g., if the
-           type is not supported or if the type does not match the
-           name of the interface, the server MUST reject the request.
-           A NETCONF server MUST reply with an rpc-error with the
-           error-tag 'invalid-value' in this case.";
-        reference
-          "RFC 2863: The Interfaces Group MIB - ifType";
-      }
-
-//      leaf enabled { //Removed as per EAG-32 we never want to disable the whole interface
-//        type boolean;
-//        default "true";
-//        description
-//          "This leaf contains the configured, desired state of the
-//           interface.
-//
-//           Systems that implement the IF-MIB use the value of this
-//           leaf in the 'running' datastore to set
-//           IF-MIB.ifAdminStatus to 'up' or 'down' after an ifEntry
-//           has been initialized, as described in RFC 2863.
-//
-//
-//
-//           Changes in this leaf in the 'running' datastore are
-//           reflected in ifAdminStatus, but if ifAdminStatus is
-//           changed over SNMP, this leaf is not affected.";
-//        reference
-//          "RFC 2863: The Interfaces Group MIB - ifAdminStatus";
-//      }
-
-      leaf link-up-down-trap-enable {
-        if-feature if-mib;
-        type enumeration {
-          enum enabled {
-            value 1;
-          }
-          enum disabled {
-            value 2;
-          }
-        }
-        description
-          "Controls whether linkUp/linkDown SNMP notifications
-           should be generated for this interface.
-
-           If this node is not configured, the value 'enabled' is
-           operationally used by the server for interfaces that do
-           not operate on top of any other interface (i.e., there are
-           no 'lower-layer-if' entries), and 'disabled' otherwise.";
-        reference
-          "RFC 2863: The Interfaces Group MIB -
-                     ifLinkUpDownTrapEnable";
-      }
-    }
-  }
-
-  /*
-   * Operational state data nodes
-   */
-
-  container interfaces-state {
-    config false;
-    description
-      "Data nodes for the operational state of interfaces.";
-
-    list interface {
-      key "name";
-
-
-
-
-
-      description
-        "The list of interfaces on the device.
-
-         System-controlled interfaces created by the system are
-         always present in this list, whether they are configured or
-         not.";
-
-      leaf name {
-        type string;
-        description
-          "The name of the interface.
-
-           A server implementation MAY map this leaf to the ifName
-           MIB object.  Such an implementation needs to use some
-           mechanism to handle the differences in size and characters
-           allowed between this leaf and ifName.  The definition of
-           such a mechanism is outside the scope of this document.";
-        reference
-          "RFC 2863: The Interfaces Group MIB - ifName";
-      }
-
-      leaf type {
-        type identityref {
-          base interface-type;
-        }
-        mandatory true;
-        description
-          "The type of the interface.";
-        reference
-          "RFC 2863: The Interfaces Group MIB - ifType";
-      }
-
-      leaf admin-status {
-        if-feature if-mib;
-        type enumeration {
-          enum up {
-            value 1;
-            description
-              "Ready to pass packets.";
-          }
-          enum down {
-            value 2;
-            description
-              "Not ready to pass packets and not in some test mode.";
-          }
-
-
-
-          enum testing {
-            value 3;
-            description
-              "In some test mode.";
-          }
-        }
-        mandatory true;
-        description
-          "The desired state of the interface.
-
-           This leaf has the same read semantics as ifAdminStatus.";
-        reference
-          "RFC 2863: The Interfaces Group MIB - ifAdminStatus";
-      }
-
-      leaf oper-status {
-        type enumeration {
-          enum up {
-            value 1;
-            description
-              "Ready to pass packets.";
-          }
-          enum down {
-            value 2;
-            description
-              "The interface does not pass any packets.";
-          }
-          enum testing {
-            value 3;
-            description
-              "In some test mode.  No operational packets can
-               be passed.";
-          }
-          enum unknown {
-            value 4;
-            description
-              "Status cannot be determined for some reason.";
-          }
-          enum dormant {
-            value 5;
-            description
-              "Waiting for some external event.";
-          }
-          enum not-present {
-            value 6;
-            description
-              "Some component (typically hardware) is missing.";
-          }
-          enum lower-layer-down {
-            value 7;
-            description
-              "Down due to state of lower-layer interface(s).";
-          }
-        }
-        mandatory true;
-        description
-          "The current operational state of the interface.
-
-           This leaf has the same semantics as ifOperStatus.";
-        reference
-          "RFC 2863: The Interfaces Group MIB - ifOperStatus";
-      }
-
-      leaf last-change {
-        type yang:date-and-time;
-        description
-          "The time the interface entered its current operational
-           state.  If the current state was entered prior to the
-           last re-initialization of the local network management
-           subsystem, then this node is not present.";
-        reference
-          "RFC 2863: The Interfaces Group MIB - ifLastChange";
-      }
-
-      leaf if-index {
-        if-feature if-mib;
-        type int32 {
-          range "1..2147483647";
-        }
-        mandatory true;
-        description
-          "The ifIndex value for the ifEntry represented by this
-           interface.";
-        reference
-          "RFC 2863: The Interfaces Group MIB - ifIndex";
-      }
-
-      leaf phys-address {
-        type yang:phys-address;
-        description
-          "The interface's address at its protocol sub-layer.  For
-           example, for an 802.x interface, this object normally
-           contains a Media Access Control (MAC) address.  The
-           interface's media-specific modules must define the bit
-
-
-           and byte ordering and the format of the value of this
-           object.  For interfaces that do not have such an address
-           (e.g., a serial line), this node is not present.";
-        reference
-          "RFC 2863: The Interfaces Group MIB - ifPhysAddress";
-      }
-
-      leaf-list higher-layer-if {
-        type interface-state-ref;
-        description
-          "A list of references to interfaces layered on top of this
-           interface.";
-        reference
-          "RFC 2863: The Interfaces Group MIB - ifStackTable";
-      }
-
-      leaf-list lower-layer-if {
-        type interface-state-ref;
-        description
-          "A list of references to interfaces layered underneath this
-           interface.";
-        reference
-          "RFC 2863: The Interfaces Group MIB - ifStackTable";
-      }
-
-      leaf speed {
-        type yang:gauge64;
-        units "bits/second";
-        description
-            "An estimate of the interface's current bandwidth in bits
-             per second.  For interfaces that do not vary in
-             bandwidth or for those where no accurate estimation can
-             be made, this node should contain the nominal bandwidth.
-             For interfaces that have no concept of bandwidth, this
-             node is not present.";
-        reference
-          "RFC 2863: The Interfaces Group MIB -
-                     ifSpeed, ifHighSpeed";
-      }
-
-
-
-
-
-
-
-
-
-      container statistics {
-        description
-          "A collection of interface-related statistics objects.";
-
-        leaf discontinuity-time {
-          type yang:date-and-time;
-          mandatory true;
-          description
-            "The time on the most recent occasion at which any one or
-             more of this interface's counters suffered a
-             discontinuity.  If no such discontinuities have occurred
-             since the last re-initialization of the local management
-             subsystem, then this node contains the time the local
-             management subsystem re-initialized itself.";
-        }
-
-        leaf in-octets {
-          type yang:counter64;
-          description
-            "The total number of octets received on the interface,
-             including framing characters.
-
-             Discontinuities in the value of this counter can occur
-             at re-initialization of the management system, and at
-             other times as indicated by the value of
-             'discontinuity-time'.";
-          reference
-            "RFC 2863: The Interfaces Group MIB - ifHCInOctets";
-        }
-
-        leaf in-unicast-pkts {
-          type yang:counter64;
-          description
-            "The number of packets, delivered by this sub-layer to a
-             higher (sub-)layer, that were not addressed to a
-             multicast or broadcast address at this sub-layer.
-
-             Discontinuities in the value of this counter can occur
-             at re-initialization of the management system, and at
-             other times as indicated by the value of
-             'discontinuity-time'.";
-          reference
-            "RFC 2863: The Interfaces Group MIB - ifHCInUcastPkts";
-        }
-
-
-
-
-        leaf in-broadcast-pkts {
-          type yang:counter64;
-          description
-            "The number of packets, delivered by this sub-layer to a
-             higher (sub-)layer, that were addressed to a broadcast
-             address at this sub-layer.
-
-             Discontinuities in the value of this counter can occur
-             at re-initialization of the management system, and at
-             other times as indicated by the value of
-             'discontinuity-time'.";
-          reference
-            "RFC 2863: The Interfaces Group MIB -
-                       ifHCInBroadcastPkts";
-        }
-
-        leaf in-multicast-pkts {
-          type yang:counter64;
-          description
-            "The number of packets, delivered by this sub-layer to a
-             higher (sub-)layer, that were addressed to a multicast
-             address at this sub-layer.  For a MAC-layer protocol,
-             this includes both Group and Functional addresses.
-
-             Discontinuities in the value of this counter can occur
-             at re-initialization of the management system, and at
-             other times as indicated by the value of
-             'discontinuity-time'.";
-          reference
-            "RFC 2863: The Interfaces Group MIB -
-                       ifHCInMulticastPkts";
-        }
-
-        leaf in-discards {
-          type yang:counter32;
-          description
-            "The number of inbound packets that were chosen to be
-             discarded even though no errors had been detected to
-             prevent their being deliverable to a higher-layer
-             protocol.  One possible reason for discarding such a
-             packet could be to free up buffer space.
-
-             Discontinuities in the value of this counter can occur
-             at re-initialization of the management system, and at
-             other times as indicated by the value of
-             'discontinuity-time'.";
-
-
-          reference
-            "RFC 2863: The Interfaces Group MIB - ifInDiscards";
-        }
-
-        leaf in-errors {
-          type yang:counter32;
-          description
-            "For packet-oriented interfaces, the number of inbound
-             packets that contained errors preventing them from being
-             deliverable to a higher-layer protocol.  For character-
-             oriented or fixed-length interfaces, the number of
-             inbound transmission units that contained errors
-             preventing them from being deliverable to a higher-layer
-             protocol.
-
-             Discontinuities in the value of this counter can occur
-             at re-initialization of the management system, and at
-             other times as indicated by the value of
-             'discontinuity-time'.";
-          reference
-            "RFC 2863: The Interfaces Group MIB - ifInErrors";
-        }
-
-        leaf in-unknown-protos {
-          type yang:counter32;
-          description
-            "For packet-oriented interfaces, the number of packets
-             received via the interface that were discarded because
-             of an unknown or unsupported protocol.  For
-             character-oriented or fixed-length interfaces that
-             support protocol multiplexing, the number of
-             transmission units received via the interface that were
-             discarded because of an unknown or unsupported protocol.
-             For any interface that does not support protocol
-             multiplexing, this counter is not present.
-
-             Discontinuities in the value of this counter can occur
-             at re-initialization of the management system, and at
-             other times as indicated by the value of
-             'discontinuity-time'.";
-          reference
-            "RFC 2863: The Interfaces Group MIB - ifInUnknownProtos";
-        }
-
-
-
-
-
-        leaf out-octets {
-          type yang:counter64;
-          description
-            "The total number of octets transmitted out of the
-             interface, including framing characters.
-
-             Discontinuities in the value of this counter can occur
-             at re-initialization of the management system, and at
-             other times as indicated by the value of
-             'discontinuity-time'.";
-          reference
-            "RFC 2863: The Interfaces Group MIB - ifHCOutOctets";
-        }
-
-        leaf out-unicast-pkts {
-          type yang:counter64;
-          description
-            "The total number of packets that higher-level protocols
-             requested be transmitted, and that were not addressed
-             to a multicast or broadcast address at this sub-layer,
-             including those that were discarded or not sent.
-
-             Discontinuities in the value of this counter can occur
-             at re-initialization of the management system, and at
-             other times as indicated by the value of
-             'discontinuity-time'.";
-          reference
-            "RFC 2863: The Interfaces Group MIB - ifHCOutUcastPkts";
-        }
-
-        leaf out-broadcast-pkts {
-          type yang:counter64;
-          description
-            "The total number of packets that higher-level protocols
-             requested be transmitted, and that were addressed to a
-             broadcast address at this sub-layer, including those
-             that were discarded or not sent.
-
-             Discontinuities in the value of this counter can occur
-             at re-initialization of the management system, and at
-             other times as indicated by the value of
-             'discontinuity-time'.";
-          reference
-            "RFC 2863: The Interfaces Group MIB -
-                       ifHCOutBroadcastPkts";
-        }
-
-
-        leaf out-multicast-pkts {
-          type yang:counter64;
-          description
-            "The total number of packets that higher-level protocols
-             requested be transmitted, and that were addressed to a
-             multicast address at this sub-layer, including those
-             that were discarded or not sent.  For a MAC-layer
-             protocol, this includes both Group and Functional
-             addresses.
-
-             Discontinuities in the value of this counter can occur
-             at re-initialization of the management system, and at
-             other times as indicated by the value of
-             'discontinuity-time'.";
-          reference
-            "RFC 2863: The Interfaces Group MIB -
-                       ifHCOutMulticastPkts";
-        }
-
-        leaf out-discards {
-          type yang:counter32;
-          description
-            "The number of outbound packets that were chosen to be
-             discarded even though no errors had been detected to
-             prevent their being transmitted.  One possible reason
-             for discarding such a packet could be to free up buffer
-             space.
-
-             Discontinuities in the value of this counter can occur
-             at re-initialization of the management system, and at
-             other times as indicated by the value of
-             'discontinuity-time'.";
-          reference
-            "RFC 2863: The Interfaces Group MIB - ifOutDiscards";
-        }
-
-        leaf out-errors {
-          type yang:counter32;
-          description
-            "For packet-oriented interfaces, the number of outbound
-             packets that could not be transmitted because of errors.
-             For character-oriented or fixed-length interfaces, the
-             number of outbound transmission units that could not be
-             transmitted because of errors.
-
-
-
-
-             Discontinuities in the value of this counter can occur
-             at re-initialization of the management system, and at
-             other times as indicated by the value of
-             'discontinuity-time'.";
-          reference
-            "RFC 2863: The Interfaces Group MIB - ifOutErrors";
-        }
-      }
-    }
-  }
-}
diff --git a/drivers/microsemi/ea1000yang/src/main/yang/ietf-netconf-acm.yang b/drivers/microsemi/ea1000yang/src/main/yang/ietf-netconf-acm.yang
deleted file mode 100644
index f0c6fe3..0000000
--- a/drivers/microsemi/ea1000yang/src/main/yang/ietf-netconf-acm.yang
+++ /dev/null
@@ -1,449 +0,0 @@
-module ietf-netconf-acm {
-
-  namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-acm";
-
-  prefix "nacm";
-
-  import ietf-yang-types {
-    prefix yang;
-  }
-
-  organization
-    "IETF NETCONF (Network Configuration) Working Group";
-
-  contact
-    "WG Web:   <http://tools.ietf.org/wg/netconf/>
-     WG List:  <mailto:netconf@ietf.org>
-
-     WG Chair: Mehmet Ersue
-               <mailto:mehmet.ersue@nsn.com>
-
-     WG Chair: Bert Wijnen
-               <mailto:bertietf@bwijnen.net>
-
-     Editor:   Andy Bierman
-               <mailto:andy@yumaworks.com>
-
-     Editor:   Martin Bjorklund
-               <mailto:mbj@tail-f.com>";
-
-  description
-    "NETCONF Access Control Model.
-
-     Copyright (c) 2012 IETF Trust and the persons identified as
-     authors of the code.  All rights reserved.
-
-     Redistribution and use in source and binary forms, with or
-     without modification, is permitted pursuant to, and subject
-     to the license terms contained in, the Simplified BSD
-     License set forth in Section 4.c of the IETF Trust's
-     Legal Provisions Relating to IETF Documents
-     (http://trustee.ietf.org/license-info).
-
-     This version of this YANG module is part of RFC 6536; see
-     the RFC itself for full legal notices.";
-
-  revision "2012-02-22" {
-    description
-      "Initial version";
-    reference
-      "RFC 6536: Network Configuration Protocol (NETCONF)
-                 Access Control Model";
-  }
-
-  /*
-   * Extension statements
-   */
-
-  extension default-deny-write {
-    description
-      "Used to indicate that the data model node
-       represents a sensitive security system parameter.
-
-       If present, and the NACM module is enabled (i.e.,
-       /nacm/enable-nacm object equals 'true'), the NETCONF server
-       will only allow the designated 'recovery session' to have
-       write access to the node.  An explicit access control rule is
-       required for all other users.
-
-       The 'default-deny-write' extension MAY appear within a data
-       definition statement.  It is ignored otherwise.";
-  }
-
-  extension default-deny-all {
-    description
-      "Used to indicate that the data model node
-       controls a very sensitive security system parameter.
-
-       If present, and the NACM module is enabled (i.e.,
-       /nacm/enable-nacm object equals 'true'), the NETCONF server
-       will only allow the designated 'recovery session' to have
-       read, write, or execute access to the node.  An explicit
-       access control rule is required for all other users.
-
-       The 'default-deny-all' extension MAY appear within a data
-       definition statement, 'rpc' statement, or 'notification'
-       statement.  It is ignored otherwise.";
-  }
-
-  /*
-   * Derived types
-   */
-
-  typedef user-name-type {
-    type string {
-      length "1..max";
-    }
-    description
-      "General Purpose Username string.";
-  }
-
-  typedef matchall-string-type {
-    type string {
-      pattern "\*";
-    }
-    description
-      "The string containing a single asterisk '*' is used
-       to conceptually represent all possible values
-       for the particular leaf using this data type.";
-  }
-
-  typedef access-operations-type {
-    type bits {
-      bit create {
-        description
-          "Any protocol operation that creates a
-           new data node.";
-      }
-      bit read {
-        description
-          "Any protocol operation or notification that
-           returns the value of a data node.";
-      }
-      bit update {
-        description
-          "Any protocol operation that alters an existing
-           data node.";
-      }
-      bit delete {
-        description
-          "Any protocol operation that removes a data node.";
-      }
-      bit exec {
-        description
-          "Execution access to the specified protocol operation.";
-      }
-    }
-    description
-      "NETCONF Access Operation.";
-  }
-
-  typedef group-name-type {
-    type string {
-      length "1..max";
-      pattern "[^\*].*";
-    }
-    description
-      "Name of administrative group to which
-       users can be assigned.";
-  }
-
-  typedef action-type {
-    type enumeration {
-      enum permit {
-        description
-          "Requested action is permitted.";
-      }
-      enum deny {
-        description
-          "Requested action is denied.";
-      }
-    }
-    description
-      "Action taken by the server when a particular
-       rule matches.";
-  }
-
-  typedef node-instance-identifier {
-    type yang:xpath1.0;
-    description
-      "Path expression used to represent a special
-       data node instance identifier string.
-
-       A node-instance-identifier value is an
-       unrestricted YANG instance-identifier expression.
-       All the same rules as an instance-identifier apply
-       except predicates for keys are optional.  If a key
-       predicate is missing, then the node-instance-identifier
-       represents all possible server instances for that key.
-
-       This XPath expression is evaluated in the following context:
-
-        o  The set of namespace declarations are those in scope on
-           the leaf element where this type is used.
-
-        o  The set of variable bindings contains one variable,
-           'USER', which contains the name of the user of the current
-            session.
-
-        o  The function library is the core function library, but
-           note that due to the syntax restrictions of an
-           instance-identifier, no functions are allowed.
-
-        o  The context node is the root node in the data tree.";
-  }
-
-  /*
-   * Data definition statements
-   */
-
-  container nacm {
-//    nacm:default-deny-all;
-
-    description
-      "Parameters for NETCONF Access Control Model.";
-
-    leaf enable-nacm {
-      type boolean;
-      default true;
-      description
-        "Enables or disables all NETCONF access control
-         enforcement.  If 'true', then enforcement
-         is enabled.  If 'false', then enforcement
-         is disabled.";
-    }
-
-    leaf read-default {
-      type action-type;
-      default "permit";
-      description
-        "Controls whether read access is granted if
-         no appropriate rule is found for a
-         particular read request.";
-    }
-
-    leaf write-default {
-      type action-type;
-      default "deny";
-      description
-        "Controls whether create, update, or delete access
-         is granted if no appropriate rule is found for a
-         particular write request.";
-    }
-
-    leaf exec-default {
-      type action-type;
-      default "permit";
-      description
-        "Controls whether exec access is granted if no appropriate
-         rule is found for a particular protocol operation request.";
-    }
-
-    leaf enable-external-groups {
-      type boolean;
-      default true;
-      description
-        "Controls whether the server uses the groups reported by the
-         NETCONF transport layer when it assigns the user to a set of
-         NACM groups.  If this leaf has the value 'false', any group
-         names reported by the transport layer are ignored by the
-         server.";
-    }
-
-    leaf denied-operations {
-      type yang:zero-based-counter32;
-      config false;
-      mandatory true;
-      description
-        "Number of times since the server last restarted that a
-         protocol operation request was denied.";
-    }
-
-    leaf denied-data-writes {
-      type yang:zero-based-counter32;
-      config false;
-      mandatory true;
-      description
-        "Number of times since the server last restarted that a
-         protocol operation request to alter
-         a configuration datastore was denied.";
-    }
-
-    leaf denied-notifications {
-      type yang:zero-based-counter32;
-      config false;
-      mandatory true;
-      description
-        "Number of times since the server last restarted that
-         a notification was dropped for a subscription because
-         access to the event type was denied.";
-    }
-
-    container groups {
-      description
-        "NETCONF Access Control Groups.";
-
-      list group {
-        key name;
-
-        description
-          "One NACM Group Entry.  This list will only contain
-           configured entries, not any entries learned from
-           any transport protocols.";
-
-        leaf name {
-          type group-name-type;
-          description
-            "Group name associated with this entry.";
-        }
-
-        leaf-list user-name {
-          type user-name-type;
-          description
-            "Each entry identifies the username of
-             a member of the group associated with
-             this entry.";
-        }
-      }
-    }
-
-    list rule-list {
-      key "name";
-      ordered-by user;
-      description
-        "An ordered collection of access control rules.";
-
-      leaf name {
-        type string {
-          length "1..max";
-        }
-        description
-          "Arbitrary name assigned to the rule-list.";
-      }
-      leaf-list group {
-        type union {
-          type matchall-string-type;
-          type group-name-type;
-        }
-        description
-          "List of administrative groups that will be
-           assigned the associated access rights
-           defined by the 'rule' list.
-
-           The string '*' indicates that all groups apply to the
-           entry.";
-      }
-
-      list rule {
-        key "name";
-        ordered-by user;
-        description
-          "One access control rule.
-
-           Rules are processed in user-defined order until a match is
-           found.  A rule matches if 'module-name', 'rule-type', and
-           'access-operations' match the request.  If a rule
-           matches, the 'action' leaf determines if access is granted
-           or not.";
-
-        leaf name {
-          type string {
-            length "1..max";
-          }
-          description
-            "Arbitrary name assigned to the rule.";
-        }
-
-        leaf module-name {
-          type union {
-            type matchall-string-type;
-            type string;
-          }
-          default "*";
-          description
-            "Name of the module associated with this rule.
-
-             This leaf matches if it has the value '*' or if the
-             object being accessed is defined in the module with the
-             specified module name.";
-        }
-        choice rule-type {
-          description
-            "This choice matches if all leafs present in the rule
-             match the request.  If no leafs are present, the
-             choice matches all requests.";
-          case protocol-operation {
-            leaf rpc-name {
-              type union {
-                type matchall-string-type;
-                type string;
-              }
-              description
-                "This leaf matches if it has the value '*' or if
-                 its value equals the requested protocol operation
-                 name.";
-            }
-          }
-          case notification {
-            leaf notification-name {
-              type union {
-                type matchall-string-type;
-                type string;
-              }
-              description
-                "This leaf matches if it has the value '*' or if its
-                 value equals the requested notification name.";
-            }
-          }
-          case data-node {
-            leaf path {
-              type node-instance-identifier;
-              mandatory true;
-              description
-                "Data Node Instance Identifier associated with the
-                 data node controlled by this rule.
-
-                 Configuration data or state data instance
-                 identifiers start with a top-level data node.  A
-                 complete instance identifier is required for this
-                 type of path value.
-
-                 The special value '/' refers to all possible
-                 datastore contents.";
-            }
-          }
-        }
-
-        leaf access-operations {
-          type union {
-            type matchall-string-type;
-            type access-operations-type;
-          }
-          default "*";
-          description
-            "Access operations associated with this rule.
-
-             This leaf matches if it has the value '*' or if the
-             bit corresponding to the requested operation is set.";
-        }
-
-        leaf action {
-          type action-type;
-          mandatory true;
-          description
-            "The access control action associated with the
-             rule.  If a rule is determined to match a
-             particular request, then this object is used
-             to determine whether to permit or deny the
-             request.";
-        }
-
-        leaf comment {
-          type string;
-          description
-            "A textual description of the access rule.";
-        }
-      }
-    }
-  }
-}
diff --git a/drivers/microsemi/ea1000yang/src/main/yang/ietf-netconf-monitoring.yang b/drivers/microsemi/ea1000yang/src/main/yang/ietf-netconf-monitoring.yang
deleted file mode 100644
index 8130bfd..0000000
--- a/drivers/microsemi/ea1000yang/src/main/yang/ietf-netconf-monitoring.yang
+++ /dev/null
@@ -1,559 +0,0 @@
-
-module ietf-netconf-monitoring {
-
-  namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring";
-  prefix "ncm";
-
-  import ietf-yang-types { prefix yang; }
-  import ietf-inet-types { prefix inet; }
-
-  organization
-    "IETF NETCONF (Network Configuration) Working Group";
-
-  contact
-    "WG Web:   <http://tools.ietf.org/wg/netconf/>
-     WG List:  <mailto:netconf@ietf.org>
-
-     WG Chair: Mehmet Ersue
-               <mailto:mehmet.ersue@nsn.com>
-
-     WG Chair: Bert Wijnen
-               <mailto:bertietf@bwijnen.net>
-
-     Editor:   Mark Scott
-               <mailto:mark.scott@ericsson.com>
-
-     Editor:   Martin Bjorklund
-               <mailto:mbj@tail-f.com>";
-
-  description
-    "NETCONF Monitoring Module.
-     All elements in this module are read-only.
-
-     Copyright (c) 2010 IETF Trust and the persons identified as
-     authors of the code. All rights reserved.
-
-     Redistribution and use in source and binary forms, with or
-     without modification, is permitted pursuant to, and subject
-     to the license terms contained in, the Simplified BSD
-     License set forth in Section 4.c of the IETF Trust's
-     Legal Provisions Relating to IETF Documents
-     (http://trustee.ietf.org/license-info).
-
-     This version of this YANG module is part of RFC 6022; see
-     the RFC itself for full legal notices.";
-
-  revision 2010-10-04 {
-    description
-      "Initial revision.";
-    reference
-      "RFC 6022: YANG Module for NETCONF Monitoring";
-  }
-
-  typedef netconf-datastore-type {
-    type enumeration {
-      enum running;
-      enum candidate;
-      enum startup;
-    }
-    description
-      "Enumeration of possible NETCONF datastore types.";
-    reference
-      "RFC 4741: NETCONF Configuration Protocol";
-  }
-
-  identity transport {
-    description
-      "Base identity for NETCONF transport types.";
-  }
-
-  identity netconf-ssh {
-    base transport;
-    description
-      "NETCONF over Secure Shell (SSH).";
-    reference
-      "RFC 4742: Using the NETCONF Configuration Protocol
-                 over Secure SHell (SSH)";
-  }
-
-  identity netconf-soap-over-beep {
-    base transport;
-    description
-      "NETCONF over Simple Object Access Protocol (SOAP) over
-       Blocks Extensible Exchange Protocol (BEEP).";
-    reference
-      "RFC 4743: Using NETCONF over the Simple Object
-                 Access Protocol (SOAP)";
-  }
-
-  identity netconf-soap-over-https {
-    base transport;
-    description
-      "NETCONF over Simple Object Access Protocol (SOAP)
-      over Hypertext Transfer Protocol Secure (HTTPS).";
-    reference
-      "RFC 4743: Using NETCONF over the Simple Object
-                 Access Protocol (SOAP)";
-  }
-
-  identity netconf-beep {
-    base transport;
-    description
-      "NETCONF over Blocks Extensible Exchange Protocol (BEEP).";
-    reference
-      "RFC 4744: Using the NETCONF Protocol over the
-                 Blocks Extensible Exchange Protocol (BEEP)";
-  }
-
-  identity netconf-tls {
-    base transport;
-    description
-      "NETCONF over Transport Layer Security (TLS).";
-    reference
-      "RFC 5539: NETCONF over Transport Layer Security (TLS)";
-  }
-
-  identity schema-format {
-    description
-      "Base identity for data model schema languages.";
-  }
-
-  identity xsd {
-    base schema-format;
-    description
-      "W3C XML Schema Definition.";
-    reference
-      "W3C REC REC-xmlschema-1-20041028:
-         XML Schema Part 1: Structures";
-  }
-
-  identity yang {
-    base schema-format;
-    description
-      "The YANG data modeling language for NETCONF.";
-    reference
-      "RFC 6020:  YANG - A Data Modeling Language for the
-                  Network Configuration Protocol (NETCONF)";
-  }
-
-  identity yin {
-    base schema-format;
-    description
-      "The YIN syntax for YANG.";
-    reference
-      "RFC 6020:  YANG - A Data Modeling Language for the
-                  Network Configuration Protocol (NETCONF)";
-  }
-
-  identity rng {
-    base schema-format;
-    description
-      "Regular Language for XML Next Generation (RELAX NG).";
-    reference
-      "ISO/IEC 19757-2:2008: RELAX NG";
-  }
-
-  identity rnc {
-    base schema-format;
-    description
-      "Relax NG Compact Syntax";
-    reference
-      "ISO/IEC 19757-2:2008: RELAX NG";
-  }
-
-  grouping common-counters {
-    description
-      "Counters that exist both per session, and also globally,
-       accumulated from all sessions.";
-
-    leaf in-rpcs {
-      type yang:zero-based-counter32;
-      description
-        "Number of correct <rpc> messages received.";
-    }
-    leaf in-bad-rpcs {
-      type yang:zero-based-counter32;
-      description
-        "Number of messages received when an <rpc> message was expected,
-         that were not correct <rpc> messages.  This includes XML parse
-         errors and errors on the rpc layer.";
-    }
-    leaf out-rpc-errors {
-      type yang:zero-based-counter32;
-      description
-        "Number of <rpc-reply> messages sent that contained an
-         <rpc-error> element.";
-    }
-    leaf out-notifications {
-      type yang:zero-based-counter32;
-      description
-        "Number of <notification> messages sent.";
-    }
-  }
-
-  container netconf-state {
-    config false;
-    description
-      "The netconf-state container is the root of the monitoring
-       data model.";
-
-    container capabilities {
-      description
-        "Contains the list of NETCONF capabilities supported by the
-         server.";
-
-      leaf-list capability {
-        type inet:uri;
-        description
-          "List of NETCONF capabilities supported by the server.";
-      }
-    }
-
-    container datastores {
-      description
-        "Contains the list of NETCONF configuration datastores.";
-
-      list datastore {
-        key name;
-        description
-          "List of NETCONF configuration datastores supported by
-           the NETCONF server and related information.";
-
-        leaf name {
-          type netconf-datastore-type;
-          description
-            "Name of the datastore associated with this list entry.";
-        }
-        container locks {
-          presence
-            "This container is present only if the datastore
-             is locked.";
-          description
-            "The NETCONF <lock> and <partial-lock> operations allow
-             a client to lock specific resources in a datastore.  The
-             NETCONF server will prevent changes to the locked
-             resources by all sessions except the one that acquired
-             the lock(s).
-
-             Monitoring information is provided for each datastore
-             entry including details such as the session that acquired
-             the lock, the type of lock (global or partial) and the
-             list of locked resources.  Multiple locks per datastore
-             are supported.";
-
-          grouping lock-info {
-            description
-              "Lock related parameters, common to both global and
-               partial locks.";
-
-            leaf locked-by-session {
-              type uint32;
-              mandatory true;
-              description
-                "The session ID of the session that has locked
-                 this resource.  Both a global lock and a partial
-                 lock MUST contain the NETCONF session-id.
-
-                 If the lock is held by a session that is not managed
-                 by the NETCONF server (e.g., a CLI session), a session
-                 id of 0 (zero) is reported.";
-              reference
-                "RFC 4741: NETCONF Configuration Protocol";
-            }
-            leaf locked-time {
-              type yang:date-and-time;
-              mandatory true;
-              description
-                "The date and time of when the resource was
-                 locked.";
-            }
-          }
-
-          choice lock-type {
-            description
-              "Indicates if a global lock or a set of partial locks
-               are set.";
-
-            container global-lock {
-              description
-                "Present if the global lock is set.";
-              uses lock-info;
-            }
-
-            list partial-lock {
-              key lock-id;
-              description
-                "List of partial locks.";
-              reference
-                "RFC 5717: Partial Lock Remote Procedure Call (RPC) for
-                           NETCONF";
-
-              leaf lock-id {
-                type uint32;
-                description
-                  "This is the lock id returned in the <partial-lock>
-                   response.";
-              }
-              uses lock-info;
-              leaf-list select {
-                type yang:xpath1.0;
-                min-elements 1;
-                description
-                  "The xpath expression that was used to request
-                   the lock.  The select expression indicates the
-                   original intended scope of the lock.";
-              }
-              leaf-list locked-node {
-                type instance-identifier;
-                description
-                  "The list of instance-identifiers (i.e., the
-                   locked nodes).
-
-                   The scope of the partial lock is defined by the list
-                   of locked nodes.";
-              }
-            }
-          }
-        }
-      }
-    }
-
-    container schemas {
-      description
-        "Contains the list of data model schemas supported by the
-         server.";
-
-      list schema {
-        key "identifier version format";
-
-        description
-          "List of data model schemas supported by the server.";
-
-        leaf identifier {
-          type string;
-          description
-            "Identifier to uniquely reference the schema.  The
-             identifier is used in the <get-schema> operation and may
-             be used for other purposes such as file retrieval.
-
-             For modeling languages that support or require a data
-             model name (e.g., YANG module name) the identifier MUST
-             match that name.  For YANG data models, the identifier is
-             the name of the module or submodule.  In other cases, an
-             identifier such as a filename MAY be used instead.";
-        }
-        leaf version {
-          type string;
-          description
-            "Version of the schema supported.  Multiple versions MAY be
-             supported simultaneously by a NETCONF server.  Each
-             version MUST be reported individually in the schema list,
-             i.e., with same identifier, possibly different location,
-             but different version.
-
-             For YANG data models, version is the value of the most
-             recent YANG 'revision' statement in the module or
-             submodule, or the empty string if no 'revision' statement
-             is present.";
-        }
-        leaf format {
-          type identityref {
-            base schema-format;
-          }
-          description
-            "The data modeling language the schema is written
-             in (currently xsd, yang, yin, rng, or rnc).
-             For YANG data models, 'yang' format MUST be supported and
-             'yin' format MAY also be provided.";
-        }
-        leaf namespace {
-          type inet:uri;
-          mandatory true;
-          description
-            "The XML namespace defined by the data model.
-
-             For YANG data models, this is the module's namespace.
-             If the list entry describes a submodule, this field
-             contains the namespace of the module to which the
-             submodule belongs.";
-        }
-        leaf-list location {
-          type union {
-            type enumeration {
-              enum "NETCONF";
-            }
-            type inet:uri;
-          }
-          description
-            "One or more locations from which the schema can be
-             retrieved.  This list SHOULD contain at least one
-             entry per schema.
-
-             A schema entry may be located on a remote file system
-             (e.g., reference to file system for ftp retrieval) or
-             retrieved directly from a server supporting the
-             <get-schema> operation (denoted by the value 'NETCONF').";
-        }
-      }
-    }
-
-    container sessions {
-      description
-        "The sessions container includes session-specific data for
-         NETCONF management sessions.  The session list MUST include
-         all currently active NETCONF sessions.";
-
-      list session {
-        key session-id;
-        description
-          "All NETCONF sessions managed by the NETCONF server
-           MUST be reported in this list.";
-
-        leaf session-id {
-          type uint32 {
-            range "1..max";
-          }
-          description
-            "Unique identifier for the session.  This value is the
-             NETCONF session identifier, as defined in RFC 4741.";
-          reference
-            "RFC 4741: NETCONF Configuration Protocol";
-        }
-        leaf transport {
-          type identityref {
-            base transport;
-          }
-          mandatory true;
-          description
-            "Identifies the transport for each session, e.g.,
-            'netconf-ssh', 'netconf-soap', etc.";
-        }
-        leaf username  {
-          type string;
-          mandatory true;
-          description
-            "The username is the client identity that was authenticated
-            by the NETCONF transport protocol.  The algorithm used to
-            derive the username is NETCONF transport protocol specific
-            and in addition specific to the authentication mechanism
-            used by the NETCONF transport protocol.";
-        }
-        leaf source-host {
-          type inet:host;
-          description
-            "Host identifier of the NETCONF client.  The value
-             returned is implementation specific (e.g., hostname,
-             IPv4 address, IPv6 address)";
-        }
-        leaf login-time {
-          type yang:date-and-time;
-          mandatory true;
-          description
-            "Time at the server at which the session was established.";
-        }
-        uses common-counters {
-          description
-            "Per-session counters.  Zero based with following reset
-             behaviour:
-               - at start of a session
-               - when max value is reached";
-        }
-      }
-    }
-
-    container statistics {
-      description
-        "Statistical data pertaining to the NETCONF server.";
-
-      leaf netconf-start-time {
-        type yang:date-and-time;
-        description
-          "Date and time at which the management subsystem was
-           started.";
-      }
-      leaf in-bad-hellos {
-        type yang:zero-based-counter32;
-        description
-          "Number of sessions silently dropped because an
-          invalid <hello> message was received.  This includes <hello>
-          messages with a 'session-id' attribute, bad namespace, and
-          bad capability declarations.";
-      }
-      leaf in-sessions {
-        type yang:zero-based-counter32;
-        description
-          "Number of sessions started.  This counter is incremented
-           when a <hello> message with a <session-id> is sent.
-
-          'in-sessions' - 'in-bad-hellos' =
-              'number of correctly started netconf sessions'";
-      }
-      leaf dropped-sessions {
-        type yang:zero-based-counter32;
-        description
-          "Number of sessions that were abnormally terminated, e.g.,
-           due to idle timeout or transport close.  This counter is not
-           incremented when a session is properly closed by a
-           <close-session> operation, or killed by a <kill-session>
-           operation.";
-      }
-      uses common-counters {
-        description
-          "Global counters, accumulated from all sessions.
-           Zero based with following reset behaviour:
-             - re-initialization of NETCONF server
-             - when max value is reached";
-      }
-    }
-  }
-
-  rpc get-schema {
-    description
-      "This operation is used to retrieve a schema from the
-       NETCONF server.
-
-       Positive Response:
-         The NETCONF server returns the requested schema.
-
-       Negative Response:
-         If requested schema does not exist, the <error-tag> is
-         'invalid-value'.
-
-         If more than one schema matches the requested parameters, the
-         <error-tag> is 'operation-failed', and <error-app-tag> is
-         'data-not-unique'.";
-
-    input {
-      leaf identifier {
-        type string;
-        mandatory true;
-        description
-          "Identifier for the schema list entry.";
-      }
-      leaf version {
-        type string;
-        description
-          "Version of the schema requested.  If this parameter is not
-           present, and more than one version of the schema exists on
-           the server, a 'data-not-unique' error is returned, as
-           described above.";
-      }
-      leaf format {
-        type identityref {
-          base schema-format;
-        }
-        description
-           "The data modeling language of the schema.  If this
-            parameter is not present, and more than one formats of
-            the schema exists on the server, a 'data-not-unique' error
-            is returned, as described above.";
-      }
-    }
-    output {
-        anyxml data {
-          description
-            "Contains the schema content.";
-      }
-    }
-  }
-}
diff --git a/drivers/microsemi/ea1000yang/src/main/yang/ietf-netconf-notifications.yang b/drivers/microsemi/ea1000yang/src/main/yang/ietf-netconf-notifications.yang
deleted file mode 100644
index 4ec1dea..0000000
--- a/drivers/microsemi/ea1000yang/src/main/yang/ietf-netconf-notifications.yang
+++ /dev/null
@@ -1,337 +0,0 @@
-module ietf-netconf-notifications {
-
-   namespace
-     "urn:ietf:params:xml:ns:yang:ietf-netconf-notifications";
-
-   prefix ncn;
-
-   import ietf-inet-types { prefix inet; }
-   import ietf-netconf { prefix nc; }
-
-   organization
-    "IETF NETCONF (Network Configuration Protocol) Working Group";
-
-   contact
-    "WG Web:   <http://tools.ietf.org/wg/netconf/>
-     WG List:  <mailto:netconf@ietf.org>
-
-     WG Chair: Bert Wijnen
-               <mailto:bertietf@bwijnen.net>
-
-     WG Chair: Mehmet Ersue
-               <mailto:mehmet.ersue@nsn.com>
-
-     Editor: Andy Bierman
-             <mailto:andy@netconfcentral.org>";
-
-   description
-    "This module defines a YANG data model for use with the
-     NETCONF protocol that allows the NETCONF client to
-     receive common NETCONF base event notifications.
-
-	 Copyright (c) 2012 IETF Trust and the persons identified as
-     the document authors.  All rights reserved.
-
-     Redistribution and use in source and binary forms, with or
-     without modification, is permitted pursuant to, and subject
-     to the license terms contained in, the Simplified BSD License
-     set forth in Section 4.c of the IETF Trust's Legal Provisions
-     Relating to IETF Documents
-     (http://trustee.ietf.org/license-info).
-
-     This version of this YANG module is part of RFC 6470; see
-     the RFC itself for full legal notices.";
-
-   revision "2012-02-06" {
-     description
-       "Initial version.";
-     reference
-      "RFC 6470: NETCONF Base Notifications";
-   }
-
-  grouping common-session-parms {
-    description
-      "Common session parameters to identify a
-       management session.";
-
-    leaf username {
-      type string;
-      mandatory true;
-      description
-        "Name of the user for the session.";
-    }
-
-    leaf session-id {
-      type nc:session-id-or-zero-type;
-      mandatory true;
-      description
-        "Identifier of the session.
-         A NETCONF session MUST be identified by a non-zero value.
-         A non-NETCONF session MAY be identified by the value zero.";
-    }
-
-    leaf source-host {
-      type inet:ip-address;
-      description
-        "Address of the remote host for the session.";
-    }
-  }
-
-  grouping changed-by-parms {
-    description
-      "Common parameters to identify the source
-       of a change event, such as a configuration
-       or capability change.";
-
-	container changed-by {
-      description
-        "Indicates the source of the change.
-         If caused by internal action, then the
-         empty leaf 'server' will be present.
-         If caused by a management session, then
-         the name, remote host address, and session ID
-         of the session that made the change will be reported.";
-      choice server-or-user {
-        mandatory true;
-        leaf server {
-          type empty;
-          description
-            "If present, the change was caused
-             by the server.";
-        }
-
-        case by-user {
-          uses common-session-parms;
-        }
-      } // choice server-or-user
-    } // container changed-by-parms
-  }
-
-
-  notification netconf-config-change {
-    description
-      "Generated when the NETCONF server detects that the
-       <running> or <startup> configuration datastore
-       has been changed by a management session.
-       The notification summarizes the edits that
-       have been detected.
-
-       The server MAY choose to also generate this
-       notification while loading a datastore during the
-       boot process for the device.";
-
-    uses changed-by-parms;
-
-    leaf datastore {
-      type enumeration {
-        enum running {
-          description "The <running> datastore has changed.";
-        }
-        enum startup {
-          description "The <startup> datastore has changed";
-        }
-      }
-      default "running";
-      description
-        "Indicates which configuration datastore has changed.";
-      }
-
-    list edit {
-      description
-        "An edit record SHOULD be present for each distinct
-         edit operation that the server has detected on
-         the target datastore.  This list MAY be omitted
-         if the detailed edit operations are not known.
-         The server MAY report entries in this list for
-         changes not made by a NETCONF session (e.g., CLI).";
-
-      leaf target {
-        type instance-identifier;
-        description
-          "Topmost node associated with the configuration change.
-           A server SHOULD set this object to the node within
-           the datastore that is being altered.  A server MAY
-           set this object to one of the ancestors of the actual
-           node that was changed, or omit this object, if the
-           exact node is not known.";
-      }
-
-      leaf operation {
-        type nc:edit-operation-type;
-        description
-          "Type of edit operation performed.
-           A server MUST set this object to the NETCONF edit
-           operation performed on the target datastore.";
-      }
-    } // list edit
-  } // notification netconf-config-change
-
-  notification netconf-capability-change {
-    description
-      "Generated when the NETCONF server detects that
-       the server capabilities have changed.
-       Indicates which capabilities have been added, deleted,
-       and/or modified.  The manner in which a server
-       capability is changed is outside the scope of this
-       document.";
-
-    uses changed-by-parms;
-
-    leaf-list added-capability {
-      type inet:uri;
-      description
-        "List of capabilities that have just been added.";
-    }
-
-    leaf-list deleted-capability {
-      type inet:uri;
-      description
-        "List of capabilities that have just been deleted.";
-    }
-
-    leaf-list modified-capability {
-      type inet:uri;
-      description
-        "List of capabilities that have just been modified.
-         A capability is considered to be modified if the
-         base URI for the capability has not changed, but
-         one or more of the parameters encoded at the end of
-         the capability URI have changed.
-         The new modified value of the complete URI is returned.";
-    }
-  } // notification netconf-capability-change
-
-
-  notification netconf-session-start {
-    description
-      "Generated when a NETCONF server detects that a
-       NETCONF session has started.  A server MAY generate
-       this event for non-NETCONF management sessions.
-       Indicates the identity of the user that started
-       the session.";
-    uses common-session-parms;
-  } // notification netconf-session-start
-
-  notification netconf-session-end {
-    description
-      "Generated when a NETCONF server detects that a
-       NETCONF session has terminated.
-       A server MAY optionally generate this event for
-       non-NETCONF management sessions.  Indicates the
-       identity of the user that owned the session,
-       and why the session was terminated.";
-
-    uses common-session-parms;
-
-    leaf killed-by {
-      when "../termination-reason = 'killed'";
-      type nc:session-id-type;
-      description
-        "The ID of the session that directly caused this session
-         to be abnormally terminated.  If this session was abnormally
-         terminated by a non-NETCONF session unknown to the server,
-         then this leaf will not be present.";
-    }
-
-    leaf termination-reason {
-      type enumeration {
-        enum "closed" {
-          description
-            "The session was terminated by the client in normal
-             fashion, e.g., by the NETCONF <close-session>
-             protocol operation.";
-        }
-        enum "killed" {
-          description
-            "The session was terminated in abnormal
-             fashion, e.g., by the NETCONF <kill-session>
-             protocol operation.";
-        }
-        enum "dropped" {
-          description
-            "The session was terminated because the transport layer
-             connection was unexpectedly closed.";
-        }
-        enum "timeout" {
-          description
-            "The session was terminated because of inactivity,
-             e.g., waiting for the <hello> message or <rpc>
-             messages.";
-        }
-        enum "bad-hello" {
-          description
-            "The client's <hello> message was invalid.";
-        }
-        enum "other" {
-          description
-            "The session was terminated for some other reason.";
-        }
-      }
-      mandatory true;
-      description
-        "Reason the session was terminated.";
-     }
-  } // notification netconf-session-end
-
-
-  notification netconf-confirmed-commit {
-    description
-      "Generated when a NETCONF server detects that a
-       confirmed-commit event has occurred.  Indicates the event
-       and the current state of the confirmed-commit procedure
-       in progress.";
-    reference
-      "RFC 6241, Section 8.4";
-
-    uses common-session-parms {
-      when "../confirm-event != 'timeout'";
-    }
-
-    leaf confirm-event {
-      type enumeration {
-        enum "start" {
-          description
-            "The confirmed-commit procedure has started.";
-        }
-        enum "cancel" {
-          description
-            "The confirmed-commit procedure has been canceled,
-             e.g., due to the session being terminated, or an
-             explicit <cancel-commit> operation.";
-        }
-        enum "timeout" {
-          description
-            "The confirmed-commit procedure has been canceled
-             due to the confirm-timeout interval expiring.
-             The common session parameters will not be present
-             in this sub-mode.";
-        }
-        enum "extend" {
-          description
-            "The confirmed-commit timeout has been extended,
-             e.g., by a new <confirmed-commit> operation.";
-        }
-        enum "complete" {
-          description
-            "The confirmed-commit procedure has been completed.";
-        }
-      }
-      mandatory true;
-      description
-        "Indicates the event that caused the notification.";
-    }
-
-    leaf timeout {
-      when
-       "../confirm-event = 'start' or ../confirm-event = 'extend'";
-      type uint32;
-      units "seconds";
-      description
-        "The configured timeout value if the event type
-         is 'start' or 'extend'.  This value represents
-         the approximate number of seconds from the event
-         time when the 'timeout' event might occur.";
-    }
-  } // notification netconf-confirmed-commit
-
-}
diff --git a/drivers/microsemi/ea1000yang/src/main/yang/ietf-netconf-with-defaults.yang b/drivers/microsemi/ea1000yang/src/main/yang/ietf-netconf-with-defaults.yang
deleted file mode 100644
index 1c569a2..0000000
--- a/drivers/microsemi/ea1000yang/src/main/yang/ietf-netconf-with-defaults.yang
+++ /dev/null
@@ -1,165 +0,0 @@
- module ietf-netconf-with-defaults {
-
-    namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults";
-
-    prefix ncwd;
-
-    import ietf-netconf { prefix nc; }
-
-    organization
-     "IETF NETCONF (Network Configuration Protocol) Working Group";
-
-    contact
-     "WG Web:   <http://tools.ietf.org/wg/netconf/>
-      WG List:  <mailto:netconf@ietf.org>
-
-      WG Chair: Bert Wijnen
-                <mailto:bertietf@bwijnen.net>
-
-      WG Chair: Mehmet Ersue
-                <mailto:mehmet.ersue@nsn.com>
-
-      Editor: Andy Bierman
-              <mailto:andy.bierman@brocade.com>
-
-      Editor: Balazs Lengyel
-              <mailto:balazs.lengyel@ericsson.com>";
-
-    description
-     "This module defines an extension to the NETCONF protocol
-      that allows the NETCONF client to control how default
-      values are handled by the server in particular NETCONF operations.
-
-      Copyright (c) 2010 IETF Trust and the persons identified as
-      the document authors.  All rights reserved.
-
-      Redistribution and use in source and binary forms, with or
-      without modification, is permitted pursuant to, and subject
-      to the license terms contained in, the Simplified BSD License
-      set forth in Section 4.c of the IETF Trust's Legal Provisions
-      Relating to IETF Documents
-      (http://trustee.ietf.org/license-info).
-
-      This version of this YANG module is part of RFC XXXX; see
-      the RFC itself for full legal notices.";
-    // RFC Ed.: replace XXXX with actual RFC number and remove this note
-
-    // RFC Ed.: remove this note
-    // Note: extracted from draft-ietf-netmod-with-defaults-10.txt
-
-    revision 2010-06-09 {
-      description
-        "Initial version.";
-      reference
-       "RFC XXXX: With-defaults capability for NETCONF";
-    }
-    // RFC Ed.: replace XXXX with actual
-    // RFC number and remove this note
-
-    typedef with-defaults-mode {
-       description
-         "Possible modes to report default data.";
-       reference
-          "RFC XXXX; section 3.";
-          // RFC Ed.: replace XXXX with actual
-          // RFC number and remove this note
-
-       type enumeration {
-          enum report-all {
-              description
-                "All default data is reported.";
-              reference
-                "RFC XXXX; section 3.1";
-                // RFC Ed.: replace XXXX with actual
-                // RFC number and remove this note
-
-          }
-          enum report-all-tagged {
-              description
-                "All default data is reported.
-                 Any nodes considered to be default data
-                 will contain a 'wd:default' XML attribute,
-                 set to 'true'.";
-              reference
-                "RFC XXXX; section 3.4";
-                // RFC Ed.: replace XXXX with actual
-                // RFC number and remove this note
-          }
-          enum trim {
-              description
-                "Values are not reported if they contain the default.";
-              reference
-                "RFC XXXX; section 3.2";
-                // RFC Ed.: replace XXXX with actual
-                // RFC number and remove this note
-
-          }
-          enum explicit {
-              description
-                "Report values that contain the definition of
-                 explicitly set data.";
-              reference
-                "RFC XXXX; section 3.3";
-                // RFC Ed.: replace XXXX with actual
-                // RFC number and remove this note
-          }
-      }
-    }
-
-    grouping with-defaults-parameters {
-      description
-        "Contains the <with-defaults> parameter for control
-         of defaults in NETCONF retrieval operations.";
-
-      leaf with-defaults {
-        description
-          "The explicit defaults processing mode requested.";
-        reference
-          "RFC XXXX; section 4.6.1";
-          // RFC Ed.: replace XXXX with actual
-          // RFC number and remove this note
-
-        type with-defaults-mode;
-      }
-    }
-
-    // extending the get-config operation
-    augment /nc:get-config/nc:input {
-        description
-          "Adds the <with-defaults> parameter to the
-           input of the NETCONF <get-config> operation.";
-        reference
-          "RFC XXXX; section 4.6.1";
-          // RFC Ed.: replace XXXX with actual
-          // RFC number and remove this note
-
-        uses with-defaults-parameters;
-    }
-
-    // extending the get operation
-    augment /nc:get/nc:input {
-        description
-          "Adds the <with-defaults> parameter to
-           the input of the NETCONF <get> operation.";
-        reference
-          "RFC XXXX; section 4.6.1";
-          // RFC Ed.: replace XXXX with actual
-          // RFC number and remove this note
-
-        uses with-defaults-parameters;
-    }
-
-    // extending the copy-config operation
-    augment /nc:copy-config/nc:input {
-        description
-          "Adds the <with-defaults> parameter to
-           the input of the NETCONF <copy-config> operation.";
-        reference
-          "RFC XXXX; section 4.6.1";
-          // RFC Ed.: replace XXXX with actual
-          // RFC number and remove this note
-
-        uses with-defaults-parameters;
-    }
-
- }
diff --git a/drivers/microsemi/ea1000yang/src/main/yang/ietf-netconf.yang b/drivers/microsemi/ea1000yang/src/main/yang/ietf-netconf.yang
deleted file mode 100644
index 2595a12..0000000
--- a/drivers/microsemi/ea1000yang/src/main/yang/ietf-netconf.yang
+++ /dev/null
@@ -1,980 +0,0 @@
-module ietf-netconf {
-
-  // the namespace for NETCONF XML definitions is unchanged
-  // from RFC 4741, which this document replaces
-  namespace "urn:ietf:params:xml:ns:netconf:base:1.0";
-
-  prefix nc;
-
-  import ietf-inet-types {
-    prefix inet;
-  }
-
-  organization
-    "IETF NETCONF (Network Configuration) Working Group";
-
-  contact
-    "WG Web:   <http://tools.ietf.org/wg/netconf/>
-     WG List:  <netconf@ietf.org>
-
-     WG Chair: Bert Wijnen
-               <bertietf@bwijnen.net>
-
-     WG Chair: Mehmet Ersue
-               <mehmet.ersue@nsn.com>
-
-     Editor:   Martin Bjorklund
-               <mbj@tail-f.com>
-
-     Editor:   Juergen Schoenwaelder
-               <j.schoenwaelder@jacobs-university.de>
-
-     Editor:   Andy Bierman
-               <andy.bierman@brocade.com>";
-  description
-    "NETCONF Protocol Data Types and Protocol Operations.
-
-     Copyright (c) 2011 IETF Trust and the persons identified as
-     the document authors.  All rights reserved.
-
-     Redistribution and use in source and binary forms, with or
-     without modification, is permitted pursuant to, and subject
-     to the license terms contained in, the Simplified BSD License
-     set forth in Section 4.c of the IETF Trust's Legal Provisions
-     Relating to IETF Documents
-     (http://trustee.ietf.org/license-info).
-
-     This version of this YANG module is part of RFC 6241; see
-     the RFC itself for full legal notices.";
-
-  revision 2011-06-01 {
-    description
-      "Initial revision;";
-    reference
-      "RFC 6241: Network Configuration Protocol";
-  }
-
-  extension get-filter-element-attributes {
-    description
-      "If this extension is present within an 'anyxml'
-       statement named 'filter', which must be conceptually
-       defined within the RPC input section for the <get>
-       and <get-config> protocol operations, then the
-       following unqualified XML attribute is supported
-       within the <filter> element, within a <get> or
-       <get-config> protocol operation:
-
-         type : optional attribute with allowed
-                value strings 'subtree' and 'xpath'.
-                If missing, the default value is 'subtree'.
-
-       If the 'xpath' feature is supported, then the
-       following unqualified XML attribute is
-       also supported:
-
-         select: optional attribute containing a
-                 string representing an XPath expression.
-                 The 'type' attribute must be equal to 'xpath'
-                 if this attribute is present.";
-  }
-
-  // NETCONF capabilities defined as features
-  feature writable-running {
-    description
-      "NETCONF :writable-running capability;
-       If the server advertises the :writable-running
-       capability for a session, then this feature must
-       also be enabled for that session.  Otherwise,
-       this feature must not be enabled.";
-    reference "RFC 6241, Section 8.2";
-  }
-
-  feature candidate {
-    description
-      "NETCONF :candidate capability;
-       If the server advertises the :candidate
-       capability for a session, then this feature must
-       also be enabled for that session.  Otherwise,
-       this feature must not be enabled.";
-    reference "RFC 6241, Section 8.3";
-  }
-
-  feature confirmed-commit {
-    if-feature candidate;
-    description
-      "NETCONF :confirmed-commit:1.1 capability;
-       If the server advertises the :confirmed-commit:1.1
-       capability for a session, then this feature must
-       also be enabled for that session.  Otherwise,
-       this feature must not be enabled.";
-
-    reference "RFC 6241, Section 8.4";
-  }
-
-  feature rollback-on-error {
-    description
-      "NETCONF :rollback-on-error capability;
-       If the server advertises the :rollback-on-error
-       capability for a session, then this feature must
-       also be enabled for that session.  Otherwise,
-       this feature must not be enabled.";
-    reference "RFC 6241, Section 8.5";
-  }
-
-  feature validate {
-    description
-      "NETCONF :validate:1.1 capability;
-       If the server advertises the :validate:1.1
-       capability for a session, then this feature must
-       also be enabled for that session.  Otherwise,
-       this feature must not be enabled.";
-    reference "RFC 6241, Section 8.6";
-  }
-
-  feature startup {
-    description
-      "NETCONF :startup capability;
-       If the server advertises the :startup
-       capability for a session, then this feature must
-       also be enabled for that session.  Otherwise,
-       this feature must not be enabled.";
-    reference "RFC 6241, Section 8.7";
-  }
-
-  feature url {
-    description
-      "NETCONF :url capability;
-       If the server advertises the :url
-       capability for a session, then this feature must
-       also be enabled for that session.  Otherwise,
-       this feature must not be enabled.";
-    reference "RFC 6241, Section 8.8";
-  }
-
-  feature xpath {
-    description
-      "NETCONF :xpath capability;
-       If the server advertises the :xpath
-       capability for a session, then this feature must
-       also be enabled for that session.  Otherwise,
-       this feature must not be enabled.";
-    reference "RFC 6241, Section 8.9";
-  }
-
-  // NETCONF Simple Types
-
-  typedef session-id-type {
-    type uint32 {
-      range "1..max";
-    }
-    description
-      "NETCONF Session Id";
-  }
-
-  typedef session-id-or-zero-type {
-    type uint32;
-    description
-      "NETCONF Session Id or Zero to indicate none";
-  }
-  typedef error-tag-type {
-    type enumeration {
-       enum in-use {
-         description
-           "The request requires a resource that
-            already is in use.";
-       }
-       enum invalid-value {
-         description
-           "The request specifies an unacceptable value for one
-            or more parameters.";
-       }
-       enum too-big {
-         description
-           "The request or response (that would be generated) is
-            too large for the implementation to handle.";
-       }
-       enum missing-attribute {
-         description
-           "An expected attribute is missing.";
-       }
-       enum bad-attribute {
-         description
-           "An attribute value is not correct; e.g., wrong type,
-            out of range, pattern mismatch.";
-       }
-       enum unknown-attribute {
-         description
-           "An unexpected attribute is present.";
-       }
-       enum missing-element {
-         description
-           "An expected element is missing.";
-       }
-       enum bad-element {
-         description
-           "An element value is not correct; e.g., wrong type,
-            out of range, pattern mismatch.";
-       }
-       enum unknown-element {
-         description
-           "An unexpected element is present.";
-       }
-       enum unknown-namespace {
-         description
-           "An unexpected namespace is present.";
-       }
-       enum access-denied {
-         description
-           "Access to the requested protocol operation or
-            data model is denied because authorization failed.";
-       }
-       enum lock-denied {
-         description
-           "Access to the requested lock is denied because the
-            lock is currently held by another entity.";
-       }
-       enum resource-denied {
-         description
-           "Request could not be completed because of
-            insufficient resources.";
-       }
-       enum rollback-failed {
-         description
-           "Request to roll back some configuration change (via
-            rollback-on-error or <discard-changes> operations)
-            was not completed for some reason.";
-
-       }
-       enum data-exists {
-         description
-           "Request could not be completed because the relevant
-            data model content already exists.  For example,
-            a 'create' operation was attempted on data that
-            already exists.";
-       }
-       enum data-missing {
-         description
-           "Request could not be completed because the relevant
-            data model content does not exist.  For example,
-            a 'delete' operation was attempted on
-            data that does not exist.";
-       }
-       enum operation-not-supported {
-         description
-           "Request could not be completed because the requested
-            operation is not supported by this implementation.";
-       }
-       enum operation-failed {
-         description
-           "Request could not be completed because the requested
-            operation failed for some reason not covered by
-            any other error condition.";
-       }
-       enum partial-operation {
-         description
-           "This error-tag is obsolete, and SHOULD NOT be sent
-            by servers conforming to this document.";
-       }
-       enum malformed-message {
-         description
-           "A message could not be handled because it failed to
-            be parsed correctly.  For example, the message is not
-            well-formed XML or it uses an invalid character set.";
-       }
-     }
-     description "NETCONF Error Tag";
-     reference "RFC 6241, Appendix A";
-  }
-
-  typedef error-severity-type {
-    type enumeration {
-      enum error {
-        description "Error severity";
-      }
-      enum warning {
-        description "Warning severity";
-      }
-    }
-    description "NETCONF Error Severity";
-    reference "RFC 6241, Section 4.3";
-  }
-
-  typedef edit-operation-type {
-    type enumeration {
-      enum merge {
-        description
-          "The configuration data identified by the
-           element containing this attribute is merged
-           with the configuration at the corresponding
-           level in the configuration datastore identified
-           by the target parameter.";
-      }
-      enum replace {
-        description
-          "The configuration data identified by the element
-           containing this attribute replaces any related
-           configuration in the configuration datastore
-           identified by the target parameter.  If no such
-           configuration data exists in the configuration
-           datastore, it is created.  Unlike a
-           <copy-config> operation, which replaces the
-           entire target configuration, only the configuration
-           actually present in the config parameter is affected.";
-      }
-      enum create {
-        description
-          "The configuration data identified by the element
-           containing this attribute is added to the
-           configuration if and only if the configuration
-           data does not already exist in the configuration
-           datastore.  If the configuration data exists, an
-           <rpc-error> element is returned with an
-           <error-tag> value of 'data-exists'.";
-      }
-      enum delete {
-        description
-          "The configuration data identified by the element
-           containing this attribute is deleted from the
-           configuration if and only if the configuration
-           data currently exists in the configuration
-           datastore.  If the configuration data does not
-           exist, an <rpc-error> element is returned with
-           an <error-tag> value of 'data-missing'.";
-      }
-      enum remove {
-        description
-          "The configuration data identified by the element
-           containing this attribute is deleted from the
-           configuration if the configuration
-           data currently exists in the configuration
-           datastore.  If the configuration data does not
-           exist, the 'remove' operation is silently ignored
-           by the server.";
-      }
-    }
-    default "merge";
-    description "NETCONF 'operation' attribute values";
-    reference "RFC 6241, Section 7.2";
-  }
-
-  // NETCONF Standard Protocol Operations
-
-  rpc get-config {
-    description
-      "Retrieve all or part of a specified configuration.";
-
-    reference "RFC 6241, Section 7.1";
-
-    input {
-      container source {
-        description
-          "Particular configuration to retrieve.";
-
-        choice config-source {
-          mandatory true;
-          description
-            "The configuration to retrieve.";
-          case candidate {
-          leaf candidate {
-            if-feature candidate;
-            type empty;
-            description
-              "The candidate configuration is the config source.";
-          }
-          }
-          case running {
-          leaf running {
-            type empty;
-            description
-              "The running configuration is the config source.";
-          }
-          }
-          case startup {
-          leaf startup {
-            if-feature startup;
-            type empty;
-            description
-              "The startup configuration is the config source.
-               This is optional-to-implement on the server because
-               not all servers will support filtering for this
-               datastore.";
-          }
-          }
-        }
-      }
-
-      anyxml filter {
-        description
-          "Subtree or XPath filter to use.";
-//        nc:get-filter-element-attributes;
-      }
-    }
-
-    output {
-      anyxml data {
-        description
-          "Copy of the source datastore subset that matched
-           the filter criteria (if any).  An empty data container
-           indicates that the request did not produce any results.";
-      }
-    }
-  }
-
-  rpc edit-config {
-    description
-      "The <edit-config> operation loads all or part of a specified
-       configuration to the specified target configuration.";
-
-    reference "RFC 6241, Section 7.2";
-
-    input {
-      container target {
-        description
-          "Particular configuration to edit.";
-
-        choice config-target {
-          mandatory true;
-          description
-            "The configuration target.";
-          case candidate {
-            leaf candidate {
-              if-feature candidate;
-              type empty;
-              description
-                "The candidate configuration is the config target.";
-            }
-          }
-          case running {
-            leaf running {
-              if-feature writable-running;
-              type empty;
-              description
-                "The running configuration is the config source.";
-            }
-          }
-        }
-      }
-
-      leaf default-operation {
-        type enumeration {
-          enum merge {
-            description
-              "The default operation is merge.";
-          }
-          enum replace {
-            description
-              "The default operation is replace.";
-          }
-          enum none {
-            description
-              "There is no default operation.";
-          }
-        }
-        default "merge";
-        description
-          "The default operation to use.";
-      }
-
-      leaf test-option {
-        if-feature validate;
-        type enumeration {
-          enum test-then-set {
-            description
-              "The server will test and then set if no errors.";
-          }
-          enum set {
-            description
-              "The server will set without a test first.";
-          }
-
-          enum test-only {
-            description
-              "The server will only test and not set, even
-               if there are no errors.";
-          }
-        }
-        default "test-then-set";
-        description
-          "The test option to use.";
-      }
-
-      leaf error-option {
-        type enumeration {
-          enum stop-on-error {
-            description
-              "The server will stop on errors.";
-          }
-          enum continue-on-error {
-            description
-              "The server may continue on errors.";
-          }
-          enum rollback-on-error {
-            description
-              "The server will roll back on errors.
-               This value can only be used if the 'rollback-on-error'
-               feature is supported.";
-          }
-        }
-        default "stop-on-error";
-        description
-          "The error option to use.";
-      }
-
-      choice edit-content {
-        mandatory true;
-        description
-          "The content for the edit operation.";
-		case config {
-        anyxml config {
-          description
-            "Inline Config content.";
-        }
-        }
-        case url {
-        leaf url {
-          if-feature url;
-          type inet:uri;
-          description
-            "URL-based config content.";
-        }
-        }
-      }
-    }
-  }
-
-  rpc copy-config {
-    description
-      "Create or replace an entire configuration datastore with the
-       contents of another complete configuration datastore.";
-
-    reference "RFC 6241, Section 7.3";
-
-    input {
-      container target {
-        description
-          "Particular configuration to copy to.";
-
-        choice config-target {
-          mandatory true;
-          description
-            "The configuration target of the copy operation.";
-		  case candidate {
-          leaf candidate {
-            if-feature candidate;
-            type empty;
-            description
-              "The candidate configuration is the config target.";
-          }
-          }
-          case running {
-          leaf running {
-            if-feature writable-running;
-            type empty;
-            description
-              "The running configuration is the config target.
-               This is optional-to-implement on the server.";
-          }
-          }
-          case startup {
-          leaf startup {
-            if-feature startup;
-            type empty;
-            description
-              "The startup configuration is the config target.";
-          }
-          }
-          case url {
-          leaf url {
-            if-feature url;
-            type inet:uri;
-            description
-              "The URL-based configuration is the config target.";
-          }
-          }
-        }
-      }
-
-      container source {
-        description
-          "Particular configuration to copy from.";
-
-        choice config-source {
-          mandatory true;
-          description
-            "The configuration source for the copy operation.";
-
-		  case candidate {
-          leaf candidate {
-            if-feature candidate;
-            type empty;
-            description
-              "The candidate configuration is the config source.";
-          }
-          }
-          case running {
-          leaf running {
-            type empty;
-            description
-              "The running configuration is the config source.";
-          }
-          }
-          case startup {
-          leaf startup {
-            if-feature startup;
-            type empty;
-            description
-              "The startup configuration is the config source.";
-          }
-          }
-          case url {
-          leaf url {
-            if-feature url;
-            type inet:uri;
-            description
-              "The URL-based configuration is the config source.";
-          }
-          }
-          case config {
-          anyxml config {
-            description
-              "Inline Config content: <config> element.  Represents
-               an entire configuration datastore, not
-               a subset of the running datastore.";
-          }
-          }
-        }
-      }
-    }
-  }
-
-  rpc delete-config {
-    description
-      "Delete a configuration datastore.";
-
-    reference "RFC 6241, Section 7.4";
-
-    input {
-      container target {
-        description
-          "Particular configuration to delete.";
-
-        choice config-target {
-          mandatory true;
-          description
-            "The configuration target to delete.";
-		  case startup {
-          leaf startup {
-            if-feature startup;
-            type empty;
-            description
-              "The startup configuration is the config target.";
-          }
-          }
-          case url {
-          leaf url {
-            if-feature url;
-            type inet:uri;
-            description
-              "The URL-based configuration is the config target.";
-          }
-          }
-        }
-      }
-    }
-  }
-
-  rpc lock {
-    description
-      "The lock operation allows the client to lock the configuration
-       system of a device.";
-
-    reference "RFC 6241, Section 7.5";
-
-    input {
-      container target {
-        description
-          "Particular configuration to lock.";
-
-        choice config-target {
-          mandatory true;
-          description
-            "The configuration target to lock.";
-		  case candidate {
-          leaf candidate {
-            if-feature candidate;
-            type empty;
-            description
-              "The candidate configuration is the config target.";
-          }
-          }
-          case running {
-          leaf running {
-            type empty;
-            description
-              "The running configuration is the config target.";
-          }
-          }
-          case startup {
-          leaf startup {
-            if-feature startup;
-            type empty;
-            description
-              "The startup configuration is the config target.";
-          }
-          }
-        }
-      }
-    }
-  }
-
-  rpc unlock {
-    description
-      "The unlock operation is used to release a configuration lock,
-       previously obtained with the 'lock' operation.";
-
-    reference "RFC 6241, Section 7.6";
-
-    input {
-      container target {
-        description
-          "Particular configuration to unlock.";
-
-        choice config-target {
-          mandatory true;
-          description
-            "The configuration target to unlock.";
-		  case candidate {
-          leaf candidate {
-            if-feature candidate;
-            type empty;
-            description
-              "The candidate configuration is the config target.";
-          }
-          }
-          case running {
-          leaf running {
-            type empty;
-            description
-              "The running configuration is the config target.";
-          }
-          }
-          case startup {
-          leaf startup {
-            if-feature startup;
-            type empty;
-            description
-              "The startup configuration is the config target.";
-          }
-          }
-        }
-      }
-    }
-  }
-
-  rpc get {
-    description
-      "Retrieve running configuration and device state information.";
-
-    reference "RFC 6241, Section 7.7";
-
-    input {
-      anyxml filter {
-        description
-          "This parameter specifies the portion of the system
-           configuration and state data to retrieve.";
-//        nc:get-filter-element-attributes;
-      }
-    }
-
-    output {
-      anyxml data {
-        description
-          "Copy of the running datastore subset and/or state
-           data that matched the filter criteria (if any).
-           An empty data container indicates that the request did not
-           produce any results.";
-      }
-    }
-  }
-
-  rpc close-session {
-    description
-      "Request graceful termination of a NETCONF session.";
-
-    reference "RFC 6241, Section 7.8";
-  }
-
-  rpc kill-session {
-    description
-      "Force the termination of a NETCONF session.";
-
-    reference "RFC 6241, Section 7.9";
-
-    input {
-      leaf session-id {
-        type session-id-type;
-        mandatory true;
-        description
-          "Particular session to kill.";
-      }
-    }
-  }
-
-  rpc commit {
-    if-feature candidate;
-
-    description
-      "Commit the candidate configuration as the device's new
-       current configuration.";
-
-    reference "RFC 6241, Section 8.3.4.1";
-
-    input {
-      leaf confirmed {
-        if-feature confirmed-commit;
-        type empty;
-        description
-          "Requests a confirmed commit.";
-        reference "RFC 6241, Section 8.3.4.1";
-      }
-
-      leaf confirm-timeout {
-        if-feature confirmed-commit;
-        type uint32 {
-          range "1..max";
-        }
-        units "seconds";
-        default "600";   // 10 minutes
-        description
-          "The timeout interval for a confirmed commit.";
-        reference "RFC 6241, Section 8.3.4.1";
-      }
-
-      leaf persist {
-        if-feature confirmed-commit;
-        type string;
-        description
-          "This parameter is used to make a confirmed commit
-           persistent.  A persistent confirmed commit is not aborted
-           if the NETCONF session terminates.  The only way to abort
-           a persistent confirmed commit is to let the timer expire,
-           or to use the <cancel-commit> operation.
-
-           The value of this parameter is a token that must be given
-           in the 'persist-id' parameter of <commit> or
-           <cancel-commit> operations in order to confirm or cancel
-           the persistent confirmed commit.
-
-           The token should be a random string.";
-        reference "RFC 6241, Section 8.3.4.1";
-      }
-
-      leaf persist-id {
-        if-feature confirmed-commit;
-        type string;
-        description
-          "This parameter is given in order to commit a persistent
-           confirmed commit.  The value must be equal to the value
-           given in the 'persist' parameter to the <commit> operation.
-           If it does not match, the operation fails with an
-          'invalid-value' error.";
-        reference "RFC 6241, Section 8.3.4.1";
-      }
-
-    }
-  }
-
-  rpc discard-changes {
-    if-feature candidate;
-
-    description
-      "Revert the candidate configuration to the current
-       running configuration.";
-    reference "RFC 6241, Section 8.3.4.2";
-  }
-
-  rpc cancel-commit {
-    if-feature confirmed-commit;
-    description
-      "This operation is used to cancel an ongoing confirmed commit.
-       If the confirmed commit is persistent, the parameter
-       'persist-id' must be given, and it must match the value of the
-       'persist' parameter.";
-    reference "RFC 6241, Section 8.4.4.1";
-
-    input {
-      leaf persist-id {
-        type string;
-        description
-          "This parameter is given in order to cancel a persistent
-           confirmed commit.  The value must be equal to the value
-           given in the 'persist' parameter to the <commit> operation.
-           If it does not match, the operation fails with an
-          'invalid-value' error.";
-      }
-    }
-  }
-
-  rpc validate {
-    if-feature validate;
-
-    description
-      "Validates the contents of the specified configuration.";
-
-    reference "RFC 6241, Section 8.6.4.1";
-
-    input {
-      container source {
-        description
-          "Particular configuration to validate.";
-
-        choice config-source {
-          mandatory true;
-          description
-            "The configuration source to validate.";
-
-		  case candidate {
-          leaf candidate {
-            if-feature candidate;
-            type empty;
-            description
-              "The candidate configuration is the config source.";
-          }
-          }
-          case running {
-          leaf running {
-            type empty;
-            description
-              "The running configuration is the config source.";
-          }
-          }
-          case startup {
-          leaf startup {
-            if-feature startup;
-            type empty;
-            description
-              "The startup configuration is the config source.";
-          }
-          }
-          case url {
-          leaf url {
-            if-feature url;
-            type inet:uri;
-            description
-              "The URL-based configuration is the config source.";
-          }
-          }
-          case config {
-          anyxml config {
-            description
-              "Inline Config content: <config> element.  Represents
-               an entire configuration datastore, not
-               a subset of the running datastore.";
-          }
-          }
-        }
-      }
-    }
-  }
-
-}
\ No newline at end of file
diff --git a/drivers/microsemi/ea1000yang/src/main/yang/ietf-system-microsemi.yang b/drivers/microsemi/ea1000yang/src/main/yang/ietf-system-microsemi.yang
deleted file mode 100644
index b88ba26..0000000
--- a/drivers/microsemi/ea1000yang/src/main/yang/ietf-system-microsemi.yang
+++ /dev/null
@@ -1,527 +0,0 @@
-module ietf-system-microsemi {
-
-    namespace "http://www.microsemi.com/microsemi-edge-assure/msea-system";
-    prefix "sys-ms";
-
-    import ietf-yang-types {
-        prefix yang;
-        revision-date 2013-07-15;
-    }
-
-    import ietf-inet-types {
-        prefix inet;
-        revision-date 2013-07-15;
-    }
-
-    import msea-types {
-        prefix msea;
-        revision-date 2016-02-29;
-    }
-
-    import ietf-system {
-        prefix sys;
-        revision-date 2014-08-06;
-    }
-
-    import ietf-netconf-acm {
-        prefix nacm;
-        revision-date 2012-02-22;
-    }
-
-    /*** 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 extends the IETF System objects with some extra configuration attributes
-
-    Copyright 2015 Microsemi Inc.
-    All rights reserved.";
-
-    reference "RFC 7317: A YANG Data Model for System Management";
-
-    revision "2016-05-05" {
-        description
-        "Updated for ZTP support - Sean Condon, Microsemi";
-    }
-
-    revision "2015-10-01" {
-        description
-        "Initial version to augment IETF-SYSTEM YANG module - Sean Condon, Microsemi";
-    }
-
-    typedef identifier {
-        type string {
-            length "1..255";
-            pattern "[a-zA-Z0-9\-._]*";
-        }
-        description
-        "A simple string with only alphabetic or numeric and dash, dot and underscore";
-    }
-
-    grouping upgrade-file-attributes {
-        leaf file-name {
-            type string;
-            description "The name of the update TAR file as found on the device";
-        }
-
-        leaf file-date {
-            type yang:date-and-time;
-            description "The date of the update TAR file as found on the device";
-        }
-
-        leaf file-size {
-            type uint32;
-            description "The size of the update TAR file as found on the device";
-        }
-    }
-
-
-    grouping upgrade-attributes {
-        description "Attributes from the /update.tar file";
-
-        leaf version {
-            type uint32;
-            description "The version of this portion of the /update.tar";
-        }
-
-        leaf crc32 {
-            type uint32;
-            description "The CRC32 value of this portion of the /update.tar";
-        }
-
-        leaf length {
-            type uint32;
-            description "The length of this portion of the /update.tar";
-        }
-    }
-
-    grouping ddm-attributes {
-
-        leaf high-alarm-thresh {
-            description "The high alarm threshold value";
-            type decimal64 {
-                fraction-digits 6;
-            }
-        }
-
-        leaf high-warn-thresh {
-            description "The high warn threshold value";
-            type decimal64 {
-                fraction-digits 6;
-            }
-        }
-
-        leaf low-warn-thresh {
-            description "The low warn threshold value";
-            type decimal64 {
-                fraction-digits 6;
-            }
-        }
-
-        leaf low-alarm-thresh {
-            description "The low alarm threshold value";
-            type decimal64 {
-                fraction-digits 6;
-            }
-        }
-    }
-
-    feature serial-number {
-        description "Set of readonly attributes that identify the hardware";
-    }
-
-    feature remote-upgrade {
-        description
-        "Indicates that the device supports upgrade of fabric, linux and fabric header.
-        This expects a file /update.tar on the device -
-        put there through SFTP or some other file transfer method";
-    }
-
-
-    augment "/sys:system" {
-        description
-        "Extends the SYSTEM with some extra configuration attributes required for setup.";
-
-        leaf asset-tag { //Microsemi specific configuration attribute
-            type identifier;
-            description
-            "An asset tag field for the device.";
-        }
-
-        leaf description { //Microsemi specific configuration attribute
-            type string {
-                length "0..256";
-                pattern "[a-zA-Z0-9\\-_. ,]*";
-            }
-            description "A description for the device.";
-        }
-
-        leaf longitude { //Microsemi specific configuration attribute
-            type decimal64 {
-                fraction-digits 7;
-                range "-180..180";
-            }
-            description
-            "Longitude for the device expressed in decimal degrees.
-            Positive values represent East and negative values represent West";
-        }
-
-        leaf latitude { //Microsemi specific configuration attribute
-            type decimal64 {
-                fraction-digits 7;
-                range "-90..90";
-            }
-            description
-            "Latitude for the device expressed in decimal degrees
-            Positive values represent North and negative values represent South";
-        }
-    }
-
-
-    augment "/sys:system-state" {
-        description
-        "Extends the SYSTEM-STATE with some extra configuration attributes required for setup.
-
-        All attributes are automatically config=false because they extend system-state";
-
-        container remote-upgrade {
-            description "Details of the /update.tar file present on the system.
-                    These are all read-only because they are under system-state";
-
-            choice file-present-choice {
-                case not-present {
-                    leaf file-not-found {
-                        type string;
-                        description "Gives the name of the expected file. Usually /update.tar";
-                    }
-                }
-
-                case file-present {
-                    uses upgrade-file-attributes;
-
-                    leaf file-validity {
-                        type string;
-                        description "Gives an indication if the file is valid, or if not, the reason why";
-                    }
-
-                    container fabric-image {
-                        uses upgrade-attributes;
-                    }
-
-                    container linux-image {
-                        uses upgrade-attributes;
-                    }
-                }
-            }
-        }
-
-        leaf hostname {
-            type string;
-            description "The hostname of the system. When DHCP or ZTP
-                  is active the hostname will not be configured through NETCONF";
-        }
-
-        container ntp {
-          if-feature sys:ntp;
-          description "The list of NTP servers active on the system. When DHCP or ZTP
-                  is active the NTP servers will not be configured through NETCONF";
-
-          leaf-list server {
-              type string;
-              description "An NTP server active on the system";
-          }
-        }
-
-        container dns-resolver {
-          description "The list of DNS servers active on the system. When DHCP or ZTP
-                  is active the DNS servers will not be configured through NETCONF";
-
-          leaf-list server {
-              type string;
-              description "A DNS server active on the system";
-          }
-
-          leaf-list search {
-              type string;
-              description "A DNS search domain active on the system";
-          }
-
-        }
-
-        container diagnostic-monitoring {
-
-            container temperature {
-                description "The temperature and thresholds of the device";
-
-                leaf measured {
-                    description "The measured transceiver temperature at the current time";
-                    type decimal64 {
-                        fraction-digits 6;
-                    }
-                    units "°C";
-                    reference
-                    "SFF-8472 Specification for Diagnostic Monitoring Interface for Optical 
-                    Transceivers Rev 12.1 September 12, 2014 Section 9.1";
-                }
-
-                uses ddm-attributes;
-            }
-
-            container voltage {
-                description "The core voltage and thresholds of the device";
-
-                leaf measured {
-                    description "The measured voltage at the current time";
-                    type decimal64 {
-                        fraction-digits 6;
-                    }
-                    units "V";
-                    reference
-                    "SFF-8472 Specification for Diagnostic Monitoring Interface for Optical 
-                    Transceivers Rev 12.1 September 12, 2014 Section 9.1";
-                }
-                
-                uses ddm-attributes;
-            }
-
-            container tx-bias {
-                description "The transmit (Tx) bias and thresholds of the device";
-
-                leaf measured {
-                    description "The measured transmit (Tx) bias at the current time";
-                    type decimal64 {
-                        fraction-digits 6;
-                    }
-                    units "mA";
-                    reference
-                    "SFF-8472 Specification for Diagnostic Monitoring Interface for Optical 
-                    Transceivers Rev 12.1 September 12, 2014 Section 9.1";
-                }
-
-                uses ddm-attributes;
-            }
-
-            container tx-power {
-                description "The transmit (Tx) power and thresholds of the device";
-
-                leaf measured {
-                    description "The measured transmit (Tx) power at the current time";
-                    type decimal64 {
-                        fraction-digits 6;
-                    }
-                    units "mV";
-                    reference
-                    "SFF-8472 Specification for Diagnostic Monitoring Interface for Optical 
-                    Transceivers Rev 12.1 September 12, 2014 Section 9.1";
-                }
-
-                uses ddm-attributes;
-            }
-            
-            container rx-power {
-                description "The receive (Rx) power and thresholds of the device";
-
-                leaf measured {
-                    description "The measured receive (Rx) power at the current time";
-                    type decimal64 {
-                        fraction-digits 6;
-                    }
-                    units "mV";
-                    reference
-                    "SFF-8472 Specification for Diagnostic Monitoring Interface for Optical 
-                    Transceivers Rev 12.1 September 12, 2014 Section 9.1";
-                }
-
-                uses ddm-attributes;
-            }
-        }
-    }
-
-    augment "/sys:system-state/sys:platform" {
-        description
-        "Extends the SYSTEM-STATE with some extra configuration attributes required for setup.
-
-        All attributes are automatically config=false because they extend system-state";
-
-        container device-identification {
-            if-feature serial-number;
-            config false;
-
-            leaf vendor-name {
-                type string;
-                description
-                "Device Vendor Name";
-                reference
-                "SFF-8472 Specification for Diagnostic Monitoring Interface for Optical
-                Transceivers Rev 12.1 September 12, 2014 Table 4-1 Address A0H Bytes 20-35";
-            }
-
-            leaf vendor-part-number {
-                type string;
-                description
-                "Device Vendor Part Number";
-                reference
-                "SFF-8472 Specification for Diagnostic Monitoring Interface for Optical
-                Transceivers Rev 12.1 September 12, 2014 Table 4-1 Address A0H Bytes 40-55";
-            }
-
-            leaf vendor-revision {
-                type string;
-                description
-                "Device Vendor Revision";
-                reference
-                "SFF-8472 Specification for Diagnostic Monitoring Interface for Optical
-                Transceivers Rev 12.1 September 12, 2014 Table 4-1 Address A0H Bytes 56-59";
-            }
-
-            leaf serial-number {
-                type string;
-                description
-                "Device Serial Number";
-                reference
-                "SFF-8472 Specification for Diagnostic Monitoring Interface for Optical
-                Transceivers Rev 12.1 September 12, 2014 Table 4-1 Address A0H Bytes 68-83";
-            }
-
-            container processor {
-                description "Details of the processor hardware in the device";
-
-                leaf serialnumber {
-                    type yang:hex-string;
-                    description "The serial number of the processor";
-                }
-
-                leaf x509-device-certificate-pem {
-                    type string;
-                    description "X509 Device certificate in PEM (Base 64 format)";
-                }
-            }
-        }
-    }
-
-    rpc do-upgrade-and-reboot {
-//        nacm:default-deny-all;
-        if-feature remote-upgrade;
-
-        description "Method to perform an upgrade of the device. This
-        expects a file /update.tar to have be present on the device.
-        The system-state/remote-upgrade attributes can be used to
-        verify the contents of the file before calling this action.
-        If there is a problem performing the upgrade
-        these will be described in any error thrown";
-
-        input {
-            leaf reset-option {
-                type enumeration {
-                    enum nuclear {
-                        description "Erases all configuration and resets the device to
-                                factory defaults.";
-                    }
-                    enum allnetconf {
-                        description "Reset all NETCONF data - leaves only logs and SSH keys.
-                            If a lesser reset is required use system-restart with a
-                            suitable reset-option";
-                    }
-                }
-                description "Optionally specify a parameter that can be
-                    used to reset the device to factory defaults";
-            }
-        }
-
-        output {
-            anyxml data {
-                description "A message describing the result.
-                    The result might not be seen as it schedules a reboot of the device";
-            }
-        }
-    }
-
-
-    rpc pull-update-tar-from-tftp {
-//        nacm:default-deny-all;
-        if-feature remote-upgrade;
-
-        description "Pulls a specified file from the specifed host and copies it
-                to the local device (usually at /update.tar
-                It also expects the file to be signed with GnuPG and the signature
-                file to exist on the TFTP server at <tftp-file>.asc";
-
-        input {
-            leaf tftp-file {
-                type msea:file-name;
-                mandatory true;
-                description "The name of a file to pull from the TFTP server at the host name specified";
-            }
-
-            leaf tftp-host {
-                type inet:host;
-                mandatory true;
-                description "The hostname of a TFTP server where an update TAR file can be pulled from";
-            }
-        }
-    }
-
-    rpc read-from-syslog {
-        description "A method of reading the entries from syslog. If no
-                argument is given will read the last 100 lines";
-
-        input {
-            leaf start-line {
-                type int16 {
-                    range -10000..-1;
-                }
-                default -100;
-                description "The number of lines to read from the end of syslog.";
-            }
-        }
-
-        output {
-            anyxml data {
-                description "Syslog entries represented as XML";
-            }
-        }
-    }
-
-//    notification upgrade-notification {
-//        description
-//            "Generated when a remote upgrade is in progress.";
-//
-//        leaf upgrade-stage {
-//            type enumeration {
-//                enum "check" {
-//                    description
-//                    "Checking the upgrade file is valid";
-//                }
-//                enum "erase" {
-//                    description    "Erasing old image";
-//                }
-//                enum "write" {
-//                    description "Writing new image";
-//                }
-//                enum "complete" {
-//                    description "Upgrade complete";
-//                }
-//            }
-//            mandatory true;
-//        }
-//
-//        leaf upgrade-detail {
-//            description "Textual description of the stage of upgrade";
-//            type string {
-//                length 0..100;
-//            }
-//        }
-//    } // upgrade-notification
-}
\ No newline at end of file
diff --git a/drivers/microsemi/ea1000yang/src/main/yang/ietf-system-tls-auth.yang b/drivers/microsemi/ea1000yang/src/main/yang/ietf-system-tls-auth.yang
deleted file mode 100644
index c1cbf4c..0000000
--- a/drivers/microsemi/ea1000yang/src/main/yang/ietf-system-tls-auth.yang
+++ /dev/null
@@ -1,215 +0,0 @@
-module ietf-system-tls-auth {
-
-    yang-version 1;
-
-    namespace
-      "urn:ietf:params:xml:ns:yang:ietf-system-tls-auth";
-
-    prefix system-tls-auth;
-
-    import ietf-system {
-      prefix sys;
-    }
-    import ietf-netconf-acm {
-      prefix nacm;
-    }
-    import ietf-yang-types {
-      prefix yang;
-    }
-    import ietf-x509-cert-to-name {
-      prefix x509c2n;
-    }
-
-    organization
-      "IETF NETCONF (Network Configuration) Working Group";
-
-    contact
-      "WG Web:   <http://tools.ietf.org/wg/netconf/>
-    WG List:  <mailto:netconf@ietf.org>
-
-    WG Chair: Mehmet Ersue
-              <mailto:mehmet.ersue@nsn.com>
-
-    WG Chair: Bert Wijnen
-              <mailto:bertietf@bwijnen.net>
-
-    Editor:   Kent Watsen
-              <mailto:kwatsen@juniper.net>
-
-              Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>";
-
-    description
-      "This module augments the ietf-system module in order to
-    add TLS authentication configuration nodes to the
-    'authentication' container.
-
-    Copyright (c) 2014 IETF Trust and the persons identified as
-    authors of the code. All rights reserved.
-
-    Redistribution and use in source and binary forms, with or
-    without modification, is permitted pursuant to, and subject
-    to the license terms contained in, the Simplified BSD
-    License set forth in Section 4.c of the IETF Trust's
-    Legal Provisions Relating to IETF Documents
-    (http://trustee.ietf.org/license-info).
-
-    This version of this YANG module is part of RFC XXXX; see
-    the RFC itself for full legal notices.";
-
-    revision "2014-05-24" {
-      description "Initial version";
-      reference
-        "RFC XXXX: NETCONF Server Configuration Model";
-
-    }
-
-
-    feature tls-map-certificates {
-      description
-        "The tls-map-certificates feature indicates that the
-      NETCONF server implements mapping X.509 certificates to NETCONF
-      usernames.";
-    }
-
-    feature tls-map-pre-shared-keys {
-      description
-        "The tls-map-pre-shared-keys feature indicates that the
-      NETCONF server implements mapping TLS pre-shared keys to NETCONF
-      usernames.";
-    }
-
-    grouping tls-global-config {
-      container trusted-ca-certs {
-        description
-          "A list of Certificate Authority (CA) certificates that a
-         NETCONF server can use to authenticate a NETCONF client's
-         certificate.  A client's certificate is authenticated if
-         its Issuer matches one of the configured trusted CA
-         certificates.";
-        leaf-list trusted-ca-cert {
-          type binary;
-          description
-            "The binary certificate structure, as
-           specified by RFC 5246, Section 7.4.6, i.e.,:
-
-             opaque ASN.1Cert<1..2^24>;
-
-          ";
-          reference
-            "RFC 5246: The Transport Layer Security (TLS)
-            	  Protocol Version 1.2";
-
-        }
-      }  // container trusted-ca-certs
-
-      container trusted-client-certs {
-        description
-          "A list of client certificates that a NETCONF server can
-         use to authenticate a NETCONF client's certificate.  A
-         client's certificate is authenticated if it is an exact
-         match to one of the configured trusted client certificates.";
-        leaf-list trusted-client-cert {
-          type binary;
-          description
-            "The binary certificate structure, as
-           specified by RFC 5246, Section 7.4.6, i.e.,:
-
-             opaque ASN.1Cert<1..2^24>;
-
-          ";
-          reference
-            "RFC 5246: The Transport Layer Security (TLS)
-            	  Protocol Version 1.2";
-
-        }
-      }  // container trusted-client-certs
-
-      container cert-maps {
-        if-feature tls-map-certificates;
-        description
-          "The cert-maps container is used by a NETCONF server to
-        map the NETCONF client's presented X.509 certificate to
-        a NETCONF username.
-
-        If no matching and valid cert-to-name list entry can be
-        found, then the NETCONF server MUST close the connection,
-        and MUST NOT accept NETCONF messages over it.";
-        uses x509c2n:cert-to-name;
-      }  // container cert-maps
-
-      container psk-maps {
-        if-feature tls-map-pre-shared-keys;
-        description
-          "During the TLS Handshake, the client indicates which
-         key to use by including a PSK identity in the TLS
-         ClientKeyExchange message. On the NETCONF server side,
-         this PSK identity is used to look up an entry in the psk-map
-         list. If such an entry is found, and the pre-shared keys
-         match, then the client is authenticated. The NETCONF
-         server uses the value from the user-name leaf in the
-         psk-map list as the NETCONF username.  If the NETCONF
-         server cannot find an entry in the psk-map list, or if
-         the pre-shared keys do not match, then the NETCONF
-         server terminates the connection.";
-        reference
-          "RFC 4279: Pre-Shared Key Ciphersuites for Transport Layer
-          	  Security (TLS)";
-
-        list psk-map {
-          key "psk-identity";
-          leaf psk-identity {
-            type string;
-            description
-              "The PSK identity encoded as a UTF-8 string. For
-             details how certain common PSK identity formats can
-             be encoded in UTF-8, see section 5.1. of RFC 4279.";
-            reference
-              "RFC 4279: Pre-Shared Key Ciphersuites for Transport
-              Layer Security (TLS)";
-
-          }
-
-          leaf user-name {
-            type nacm:user-name-type;
-            mandatory true;
-            description
-              "The NETCONF username associated with this PSK
-             identity.";
-          }
-
-          leaf not-valid-before {
-            type yang:date-and-time;
-            description
-              "This PSK identity is not valid before the given date
-             and time.";
-          }
-
-          leaf not-valid-after {
-            type yang:date-and-time;
-            description
-              "This PSK identity is not valid after the given date
-             and time.";
-          }
-
-          leaf key {
-//            nacm:default-deny-all;
-            type yang:hex-string;
-            mandatory true;
-            description
-              "The key associated with the PSK identity";
-            reference
-              "RFC 4279: Pre-Shared Key Ciphersuites for Transport
-              Layer Security (TLS)";
-
-          }
-        }  // list psk-map
-      }  // container psk-maps
-    }  // grouping tls-global-config
-
-    augment /sys:system/sys:authentication {
-      container tls {
-        uses tls-global-config;
-      }  // container tls
-    }
-  }  // module ietf-system-tls-auth
diff --git a/drivers/microsemi/ea1000yang/src/main/yang/ietf-system.yang b/drivers/microsemi/ea1000yang/src/main/yang/ietf-system.yang
deleted file mode 100644
index 12e6a9f..0000000
--- a/drivers/microsemi/ea1000yang/src/main/yang/ietf-system.yang
+++ /dev/null
@@ -1,832 +0,0 @@
-module ietf-system {
-  namespace "urn:ietf:params:xml:ns:yang:ietf-system";
-  prefix "sys";
-
-  import ietf-yang-types {
-    prefix yang;
-  }
-
-  import ietf-inet-types {
-    prefix inet;
-  }
-
-  import ietf-netconf-acm {
-    prefix nacm;
-  }
-
-  import iana-crypt-hash {
-    prefix ianach;
-  }
-
-  import msea-types {
-    prefix msea;
-    revision-date 2016-02-29;
-  }
-
-  organization
-    "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
-
-  contact
-    "WG Web:   <http://tools.ietf.org/wg/netmod/>
-     WG List:  <mailto:netmod@ietf.org>
-
-     WG Chair: Thomas Nadeau
-               <mailto:tnadeau@lucidvision.com>
-
-     WG Chair: Juergen Schoenwaelder
-               <mailto:j.schoenwaelder@jacobs-university.de>
-
-     Editor:   Andy Bierman
-               <mailto:andy@yumaworks.com>
-
-     Editor:   Martin Bjorklund
-               <mailto:mbj@tail-f.com>";
-
-  description
-    "This module contains a collection of YANG definitions for the
-     configuration and identification of some common system
-     properties within a device containing a NETCONF server.  This
-     includes data node definitions for system identification,
-     time-of-day management, user management, DNS resolver
-     configuration, and some protocol operations for system
-     management.
-
-     Copyright (c) 2014 IETF Trust and the persons identified as
-     authors of the code.  All rights reserved.
-
-     Redistribution and use in source and binary forms, with or
-     without modification, is permitted pursuant to, and subject
-     to the license terms contained in, the Simplified BSD License
-     set forth in Section 4.c of the IETF Trust's Legal Provisions
-     Relating to IETF Documents
-     (http://trustee.ietf.org/license-info).
-
-     This version of this YANG module is part of RFC 7317; see
-     the RFC itself for full legal notices.";
-
-  revision 2014-08-06 {
-    description
-      "Initial revision.";
-    reference
-      "RFC 7317: A YANG Data Model for System Management";
-  }
-
- /*
-  * Typedefs
-  */
-
-  typedef timezone-name {
-    type string;
-    description
-      "A time zone name as used by the Time Zone Database,
-       sometimes referred to as the 'Olson Database'.
-
-       The exact set of valid values is an implementation-specific
-       matter.  Client discovery of the exact set of time zone names
-       for a particular server is out of scope.";
-    reference
-      "RFC 6557: Procedures for Maintaining the Time Zone Database";
-   }
-
-  /*
-   * Features
-   */
-
-  feature radius {
-    description
-      "Indicates that the device can be configured as a RADIUS
-       client.";
-    reference
-      "RFC 2865: Remote Authentication Dial In User Service (RADIUS)";
-  }
-
-  feature authentication {
-    description
-      "Indicates that the device supports configuration of
-       user authentication.";
-  }
-
-  feature local-users {
-    if-feature authentication;
-    description
-      "Indicates that the device supports configuration of
-       local user authentication.";
-  }
-
-  feature radius-authentication {
-    if-feature radius;
-    if-feature authentication;
-    description
-      "Indicates that the device supports configuration of user
-       authentication over RADIUS.";
-    reference
-      "RFC 2865: Remote Authentication Dial In User Service (RADIUS)
-       RFC 5607: Remote Authentication Dial-In User Service (RADIUS)
-                 Authorization for Network Access Server (NAS)
-                 Management";
-  }
-
-  feature ntp {
-    description
-      "Indicates that the device can be configured to use one or
-       more NTP servers to set the system date and time.";
-  }
-
-  feature ntp-udp-port {
-    if-feature ntp;
-    description
-      "Indicates that the device supports the configuration of
-       the UDP port for NTP servers.
-
-       This is a 'feature', since many implementations do not support
-       any port other than the default port.";
-  }
-
-  feature timezone-name {
-    description
-      "Indicates that the local time zone on the device
-       can be configured to use the TZ database
-       to set the time zone and manage daylight saving time.";
-    reference
-      "RFC 6557: Procedures for Maintaining the Time Zone Database";
-  }
-
-  feature dns-udp-tcp-port {
-    description
-      "Indicates that the device supports the configuration of
-       the UDP and TCP port for DNS servers.
-
-       This is a 'feature', since many implementations do not support
-       any port other than the default port.";
-  }
-
-  /*
-   * Identities
-   */
-
-  identity authentication-method {
-    description
-      "Base identity for user authentication methods.";
-  }
-
-  identity radius {
-    base authentication-method;
-    description
-      "Indicates user authentication using RADIUS.";
-    reference
-      "RFC 2865: Remote Authentication Dial In User Service (RADIUS)
-       RFC 5607: Remote Authentication Dial-In User Service (RADIUS)
-                 Authorization for Network Access Server (NAS)
-                 Management";
-  }
-
-  identity local-users {
-    base authentication-method;
-    description
-      "Indicates password-based authentication of locally
-       configured users.";
-  }
-
-  identity radius-authentication-type {
-    description
-      "Base identity for RADIUS authentication types.";
-  }
-
-  identity radius-pap {
-    base radius-authentication-type;
-    description
-      "The device requests Password Authentication Protocol (PAP)
-       authentication from the RADIUS server.";
-    reference
-      "RFC 2865: Remote Authentication Dial In User Service (RADIUS)";
-  }
-
-  identity radius-chap {
-    base radius-authentication-type;
-    description
-      "The device requests Challenge Handshake Authentication
-       Protocol (CHAP) authentication from the RADIUS server.";
-    reference
-      "RFC 2865: Remote Authentication Dial In User Service (RADIUS)";
-  }
-
-  /*
-   * Configuration data nodes
-   */
-
-  container system {
-    description
-      "System group configuration.";
-
-    leaf contact {
-      type string;
-      description
-        "The administrator contact information for the system.
-
-         A server implementation MAY map this leaf to the sysContact
-         MIB object.  Such an implementation needs to use some
-         mechanism to handle the differences in size and characters
-         allowed between this leaf and sysContact.  The definition of
-         such a mechanism is outside the scope of this document.";
-      reference
-        "RFC 3418: Management Information Base (MIB) for the
-                   Simple Network Management Protocol (SNMP)
-                   SNMPv2-MIB.sysContact";
-    }
-
-    leaf hostname {
-      type inet:domain-name;
-     description
-       "The name of the host.  This name can be a single domain
-        label or the fully qualified domain name of the host.";
-
-    }
-
-    leaf location {
-      type string;
-      description
-        "The system location.
-
-         A server implementation MAY map this leaf to the sysLocation
-         MIB object.  Such an implementation needs to use some
-         mechanism to handle the differences in size and characters
-         allowed between this leaf and sysLocation.  The definition
-         of such a mechanism is outside the scope of this document.";
-
-      reference
-        "RFC 3418: Management Information Base (MIB) for the
-                   Simple Network Management Protocol (SNMP)
-                   SNMPv2-MIB.sysLocation";
-    }
-
-    container clock {
-      description
-        "Configuration of the system date and time properties.";
-
-      choice timezone {
-        description
-          "The system time zone information.";
-
-        case timezone-name {
-          if-feature timezone-name;
-          leaf timezone-name {
-            type timezone-name;
-            description
-              "The TZ database name to use for the system, such
-               as 'Europe/Stockholm'.";
-          }
-        }
-        case timezone-utc-offset {
-          leaf timezone-utc-offset {
-            type int16 {
-              range "-1500 .. 1500";
-            }
-            units "minutes";
-            description
-              "The number of minutes to add to UTC time to
-               identify the time zone for this system.  For example,
-               'UTC - 8:00 hours' would be represented as '-480'.
-               Note that automatic daylight saving time adjustment
-               is not provided if this object is used.";
-          }
-        }
-      }
-    }
-
-    container ntp {
-      if-feature ntp;
-      presence
-        "Enables the NTP client unless the 'enabled' leaf
-         (which defaults to 'true') is set to 'false'";
-      description
-        "Configuration of the NTP client.";
-
-      leaf enabled {
-        type boolean;
-        default true;
-        description
-          "Indicates that the system should attempt to
-           synchronize the system clock with an NTP server
-           from the 'ntp/server' list.";
-      }
-      list server {
-        key name;
-        max-elements 3;
-        description
-          "List of NTP servers to use for system clock
-           synchronization.  If '/system/ntp/enabled'
-           is 'true', then the system will attempt to
-           contact and utilize the specified NTP servers.
-           If DHCP retrieves NTP servers then these values
-           are used in addition to those";
-
-        leaf name {
-          type string;
-          description
-            "An arbitrary name for the NTP server.";
-        }
-        choice transport {
-          mandatory true;
-          description
-            "The transport-protocol-specific parameters for this
-             server.";
-
-          case udp {
-            container udp {
-              description
-                "Contains UDP-specific configuration parameters
-                 for NTP.";
-              leaf address {
-                type inet:host;
-                mandatory true;
-                description
-                  "The address of the NTP server.";
-              }
-//              leaf port {
-//                if-feature ntp-udp-port;
-//                type inet:port-number;
-//                default 123;
-//                description
-//                  "The port number of the NTP server.";
-//              }
-            }
-          }
-        }
-
-//        leaf association-type { //These elements are omitted because MSEA1000 does not support these options
-//          type enumeration {
-//            enum server {
-//              description
-//                "Use client association mode.  This device
-//                 will not provide synchronization to the
-//                 configured NTP server.";
-//            }
-//            enum peer {
-//              description
-//                "Use symmetric active association mode.
-//                 This device may provide synchronization
-//                 to the configured NTP server.";
-//            }
-//            enum pool {
-//              description
-//                "Use client association mode with one or
-//                 more of the NTP servers found by DNS
-//                 resolution of the domain name given by
-//                 the 'address' leaf.  This device will not
-//                 provide synchronization to the servers.";
-//            }
-//          }
-//          default server;
-//          description
-//            "The desired association type for this NTP server.";
-//        }
-//        leaf iburst {
-//          type boolean;
-//          default false;
-//          description
-//            "Indicates whether this server should enable burst
-//             synchronization or not.";
-//        }
-//        leaf prefer {
-//          type boolean;
-//          default false;
-//          description
-//            "Indicates whether this server should be preferred
-//             or not.";
-//        }
-      }
-    }
-
-    container dns-resolver {
-      presence "If defined enables the DNS servers to be configured.";
-
-      description
-        "Configuration of the DNS resolver. If DHCP retrieves DNS
-         servers or search domains then these values are used in
-         addition to those";
-
-      leaf-list search {
-        type inet:domain-name;
-        max-elements 3;
-        ordered-by user;
-        description
-          "An ordered list of domains to search when resolving
-           a host name.";
-      }
-      list server {
-        key name;
-        max-elements 3;
-        ordered-by user;
-        description
-          "List of the DNS servers that the resolver should query.
-
-           When the resolver is invoked by a calling application, it
-           sends the query to the first name server in this list.  If
-           no response has been received within 'timeout' seconds,
-           the resolver continues with the next server in the list.
-           If no response is received from any server, the resolver
-           continues with the first server again.  When the resolver
-           has traversed the list 'attempts' times without receiving
-           any response, it gives up and returns an error to the
-           calling application.
-
-           Implementations MAY limit the number of entries in this
-           list.";
-
-        leaf name {
-          type string;
-          description
-            "An arbitrary name for the DNS server.";
-        }
-        choice transport {
-          mandatory true;
-          description
-            "The transport-protocol-specific parameters for this
-             server.";
-
-          case udp-and-tcp {
-            container udp-and-tcp {
-              description
-                "Contains UDP- and TCP-specific configuration
-                 parameters for DNS.";
-              reference
-                "RFC 1035: Domain Names - Implementation and
-                           Specification
-                 RFC 5966: DNS Transport over TCP - Implementation
-                           Requirements";
-
-              leaf address {
-                type inet:ip-address;
-                mandatory true;
-                description
-                  "The address of the DNS server.";
-              }
-//              leaf port {
-//                if-feature dns-udp-tcp-port;
-//                type inet:port-number;
-//                default 53;
-//                description
-//                  "The UDP and TCP port number of the DNS server.";
-//              }
-            }
-          }
-        }
-      }
-//      container options { //These elements are omitted because MSEA1000 does not support these options
-//        description
-//          "Resolver options.  The set of available options has been
-//           limited to those that are generally available across
-//           different resolver implementations and generally useful.";
-//        leaf timeout {
-//          type uint8 {
-//            range "1..max";
-//          }
-//          units "seconds";
-//          default "5";
-//          description
-//            "The amount of time the resolver will wait for a
-//             response from each remote name server before
-//             retrying the query via a different name server.";
-//        }
-//        leaf attempts {
-//          type uint8 {
-//            range "1..max";
-//          }
-//          default "2";
-//          description
-//            "The number of times the resolver will send a query to
-//             all of its name servers before giving up and returning
-//             an error to the calling application.";
-//        }
-//      }
-    }
-
-    container radius {
-      if-feature radius;
-
-      description
-        "Configuration of the RADIUS client.";
-
-      list server {
-        key name;
-        ordered-by user;
-        description
-          "List of RADIUS servers used by the device.
-
-           When the RADIUS client is invoked by a calling
-           application, it sends the query to the first server in
-           this list.  If no response has been received within
-           'timeout' seconds, the client continues with the next
-           server in the list.  If no response is received from any
-           server, the client continues with the first server again.
-           When the client has traversed the list 'attempts' times
-           without receiving any response, it gives up and returns an
-           error to the calling application.";
-
-        leaf name {
-          type string;
-          description
-            "An arbitrary name for the RADIUS server.";
-        }
-        choice transport {
-          mandatory true;
-          description
-            "The transport-protocol-specific parameters for this
-             server.";
-
-          case udp {
-            container udp {
-              description
-                "Contains UDP-specific configuration parameters
-                 for RADIUS.";
-              leaf address {
-                type inet:host;
-                mandatory true;
-                description
-                  "The address of the RADIUS server.";
-              }
-
-              leaf authentication-port {
-                type inet:port-number;
-                default "1812";
-                description
-                  "The port number of the RADIUS server.";
-              }
-              leaf shared-secret {
-                type string;
-                mandatory true;
-//                nacm:default-deny-all;
-                description
-                  "The shared secret, which is known to both the
-                   RADIUS client and server.";
-                reference
-                  "RFC 2865: Remote Authentication Dial In User
-                             Service (RADIUS)";
-              }
-            }
-          }
-        }
-        leaf authentication-type {
-          type identityref {
-            base radius-authentication-type;
-          }
-          default radius-pap;
-          description
-            "The authentication type requested from the RADIUS
-             server.";
-        }
-      }
-      container options {
-        description
-          "RADIUS client options.";
-
-        leaf timeout {
-          type uint8 {
-            range "1..max";
-          }
-          units "seconds";
-          default "5";
-          description
-            "The number of seconds the device will wait for a
-             response from each RADIUS server before trying with a
-             different server.";
-        }
-
-        leaf attempts {
-          type uint8 {
-            range "1..max";
-          }
-          default "2";
-          description
-            "The number of times the device will send a query to
-             all of its RADIUS servers before giving up.";
-        }
-      }
-    }
-
-    container authentication {
-//      nacm:default-deny-write;
-      if-feature authentication;
-
-       description
-         "The authentication configuration subtree.";
-
-       leaf-list user-authentication-order {
-         type identityref {
-           base authentication-method;
-         }
-         must '(. != "sys:radius" or ../../radius/server)' {
-           error-message
-             "When 'radius' is used, a RADIUS server"
-           + " must be configured.";
-           description
-             "When 'radius' is used as an authentication method,
-              a RADIUS server must be configured.";
-         }
-         ordered-by user;
-
-         description
-           "When the device authenticates a user with a password,
-            it tries the authentication methods in this leaf-list in
-            order.  If authentication with one method fails, the next
-            method is used.  If no method succeeds, the user is
-            denied access.
-
-            An empty user-authentication-order leaf-list still allows
-            authentication of users using mechanisms that do not
-            involve a password.
-
-            If the 'radius-authentication' feature is advertised by
-            the NETCONF server, the 'radius' identity can be added to
-            this list.
-
-            If the 'local-users' feature is advertised by the
-            NETCONF server, the 'local-users' identity can be
-            added to this list.";
-       }
-
-       list user {
-         if-feature local-users;
-         key name;
-         description
-           "The list of local users configured on this device.";
-
-         leaf name {
-           type string;
-           description
-            "The user name string identifying this entry.";
-
-           must ".='netconf' or .='admin' or .='readonly'" {
-               error-message "The set of users is not changeable on this device. Must have admin, netconf and readonly";
-               error-app-tag "msea-sys-must-01";
-           }
-         }
-         leaf password {
-           type ianach:crypt-hash;
-           description
-             "The password for this entry.";
-         }
-         list authorized-key {
-           key name;
-           description
-             "A list of public SSH keys for this user.  These keys
-              are allowed for SSH authentication, as described in
-              RFC 4253.";
-           reference
-             "RFC 4253: The Secure Shell (SSH) Transport Layer
-                        Protocol";
-
-           leaf name {
-             type string;
-             description
-               "An arbitrary name for the SSH key.";
-           }
-
-           leaf algorithm {
-             type string;
-             mandatory true;
-             description
-               "The public key algorithm name for this SSH key.
-
-                Valid values are the values in the IANA 'Secure Shell
-                (SSH) Protocol Parameters' registry, Public Key
-                Algorithm Names.";
-             reference
-               "IANA 'Secure Shell (SSH) Protocol Parameters'
-                registry, Public Key Algorithm Names";
-           }
-           leaf key-data {
-             type binary;
-             mandatory true;
-             description
-               "The binary public key data for this SSH key, as
-                specified by RFC 4253, Section 6.6, i.e.:
-
-                  string    certificate or public key format
-                            identifier
-                  byte[n]   key/certificate data.";
-             reference
-               "RFC 4253: The Secure Shell (SSH) Transport Layer
-                          Protocol";
-           }
-         }
-       }
-     }
-  }
-
-  /*
-   * Operational state data nodes
-   */
-
-  container system-state {
-    config false;
-    description
-      "System group operational state.";
-
-    container platform {
-      description
-        "Contains vendor-specific information for
-         identifying the system platform and operating system.";
-      reference
-        "IEEE Std 1003.1-2008 - sys/utsname.h";
-
-      leaf os-name {
-        type string;
-        description
-          "The name of the operating system in use -
-           for example, 'Linux'.";
-        reference
-          "IEEE Std 1003.1-2008 - utsname.sysname";
-      }
-      leaf os-release {
-        type string;
-        description
-          "The current release level of the operating
-           system in use.  This string MAY indicate
-           the OS source code revision.";
-        reference
-          "IEEE Std 1003.1-2008 - utsname.release";
-      }
-      leaf os-version {
-        type string;
-        description
-          "The current version level of the operating
-           system in use.  This string MAY indicate
-           the specific OS build date and target variant
-           information.";
-        reference
-          "IEEE Std 1003.1-2008 - utsname.version";
-      }
-      leaf machine {
-        type string;
-        description
-          "A vendor-specific identifier string representing
-           the hardware in use.";
-        reference
-          "IEEE Std 1003.1-2008 - utsname.machine";
-      }
-    }
-
-    container clock {
-      description
-        "Monitoring of the system date and time properties.";
-
-      leaf current-datetime {
-        type yang:date-and-time;
-        description
-          "The current system date and time.";
-      }
-
-      leaf boot-datetime {
-        type yang:date-and-time;
-        description
-          "The system date and time when the system last restarted.";
-      }
-    }
-  }
-
-  rpc set-current-datetime {
-//    nacm:default-deny-all;
-    description
-      "Set the /system-state/clock/current-datetime leaf
-       to the specified value.
-
-       If the system is using NTP (i.e., /system/ntp/enabled
-       is set to 'true'), then this operation will fail with
-       error-tag 'operation-failed' and error-app-tag value of
-       'ntp-active'.";
-    input {
-      leaf current-datetime {
-        type yang:date-and-time;
-        mandatory true;
-        description
-          "The current system date and time.";
-      }
-    }
-  }
-
-  rpc system-restart {
-//    nacm:default-deny-all;
-    description
-      "Request that the entire system be restarted immediately.
-       A server SHOULD send an rpc reply to the client before
-       restarting the system.";
-    input {
-        leaf reset-option {
-            type msea:reset-config-options;
-            description "Optionally specify a parameter that can be
-                used to reset the configuration on the device or
-                reset it to factory defaults";
-        }
-    }
-  }
-
-  rpc system-shutdown {
-//    nacm:default-deny-all;
-    description
-      "Request that the entire system be shut down immediately.
-       A server SHOULD send an rpc reply to the client before
-       shutting down the system.";
-  }
-
-}
diff --git a/drivers/microsemi/ea1000yang/src/main/yang/ietf-x509-cert-to-name.yang b/drivers/microsemi/ea1000yang/src/main/yang/ietf-x509-cert-to-name.yang
deleted file mode 100644
index 2996954..0000000
--- a/drivers/microsemi/ea1000yang/src/main/yang/ietf-x509-cert-to-name.yang
+++ /dev/null
@@ -1,248 +0,0 @@
-module ietf-x509-cert-to-name {
-  namespace "urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name";
-  prefix x509c2n;
-
-  import ietf-yang-types {
-    prefix yang;
-  }
-
-  organization "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
-  contact
-    "WG Web:   <http://tools.ietf.org/wg/netmod/>
-     WG List:  <mailto:netmod@ietf.org>
-
-     WG Chair: David Kessens
-               <mailto:david.kessens@nsn.com>
-
-     WG Chair: Juergen Schoenwaelder
-               <mailto:j.schoenwaelder@jacobs-university.de>
-
-     Editor:   Martin Bjorklund
-               <mailto:mbj@tail-f.com>
-
-     Editor:   Juergen Schoenwaelder
-               <mailto:j.schoenwaelder@jacobs-university.de>";
-  description
-    "This module contains a collection of YANG definitions for
-     extracting a name from a X.509 certificate.
-
-     The algorithm used to extract a name from a X.509 certificate
-     was first defined in RFC 6353.
-
-     Copyright (c) 2013 IETF Trust and the persons identified as
-     authors of the code.  All rights reserved.
-
-     Redistribution and use in source and binary forms, with or
-     without modification, is permitted pursuant to, and subject
-     to the license terms contained in, the Simplified BSD License
-     set forth in Section 4.c of the IETF Trust's Legal Provisions
-     Relating to IETF Documents
-     (http://trustee.ietf.org/license-info).
-
-     This version of this YANG module is part of RFC XXXX; see
-     the RFC itself for full legal notices.";
-  reference
-    "RFC6353: Transport Layer Security (TLS) Transport Model for
-              the Simple Network Management Protocol (SNMP)";
-
-  revision 2013-03-26 {
-    description
-      "Initial revision.";
-    reference "RFC XXXX: A YANG Data Model for SNMP Configuration";
-  }
-
-  typedef tls-fingerprint {
-    type yang:hex-string {
-      pattern "([0-9a-fA-F]){2}(:([0-9a-fA-F]){2}){0,254}";
-    }
-    description
-      "A fingerprint value that can be used to uniquely reference
-       other data of potentially arbitrary length.
-
-       An tls-fingerprint value is composed of a 1-octet hashing
-       algorithm identifier followed by the fingerprint value.  The
-       first octet value identifying the hashing algorithm is taken
-       from the IANA TLS HashAlgorithm Registry (RFC 5246).  The
-       remaining octets are filled using the results of the hashing
-       algorithm.";
-    reference "SNMP-TLS-TM-MIB.SnmpTLSFingerprint";
-  }
-
-  identity cert-to-name {
-    description
-      "Base identity for algorithms to derive a name from a
-       certificate.";
-  }
-
-  identity specified {
-    base cert-to-name;
-    description
-      "Directly specifies the name to be used for the certificate.
-       The value of the leaf 'name' in 'cert-to-name' list is used.";
-    reference "SNMP-TLS-TM-MIB.snmpTlstmCertSpecified";
-  }
-
-  identity san-rfc822-name {
-    base cert-to-name;
-    description
-      "Maps a subjectAltName's rfc822Name to a name.  The local part
-       of the rfc822Name is passed unaltered but the host-part of the
-       name must be passed in lowercase.  This mapping results in a
-       1:1 correspondence between equivalent subjectAltName
-       rfc822Name values and name values except that the host-part
-       of the name MUST be passed in lowercase. For example, the
-       rfc822Name field FooBar@Example.COM is mapped to name
-       FooBar@example.com.";
-    reference "SNMP-TLS-TM-MIB.snmpTlstmCertSANRFC822Name";
-  }
-
-  identity san-dns-name {
-    base cert-to-name;
-    description
-      "Maps a subjectAltName's dNSName to a name after first
-       converting it to all lowercase (RFC 5280 does not specify
-       converting to lowercase so this involves an extra step).
-       This mapping results in a 1:1 correspondence between
-       subjectAltName dNSName values and the name values.";
-    reference "SNMP-TLS-TM-MIB.snmpTlstmCertSANDNSName";
-  }
-
-  identity san-ip-address {
-    base cert-to-name;
-    description
-      "Maps a subjectAltName's iPAddress to a name by
-       transforming the binary encoded address as follows:
-
-         1) for IPv4, the value is converted into a
-            decimal-dotted quad address (e.g., '192.0.2.1').
-
-         2) for IPv6 addresses, the value is converted into a
-            32-character all lowercase hexadecimal string
-            without any colon separators.
-
-       This mapping results in a 1:1 correspondence between
-       subjectAltName iPAddress values and the name values.";
-    reference "SNMP-TLS-TM-MIB.snmpTlstmCertSANIpAddress";
-  }
-
-  identity san-any {
-    base cert-to-name;
-    description
-      "Maps any of the following fields using the corresponding
-       mapping algorithms:
-
-         +------------+-----------------+
-         | Type       | Algorithm       |
-         |------------+-----------------|
-         | rfc822Name | san-rfc822-name |
-         | dNSName    | san-dns-name    |
-         | iPAddress  | san-ip-address  |
-         +------------+-----------------+
-
-       The first matching subjectAltName value found in the
-       certificate of the above types MUST be used when deriving
-       the name.  The mapping algorithm specified in the
-       'Algorithm' column MUST be used to derive the name.
-
-       This mapping results in a 1:1 correspondence between
-       subjectAltName values and name values.  The three sub-mapping
-       algorithms produced by this combined algorithm cannot produce
-       conflicting results between themselves.";
-    reference "SNMP-TLS-TM-MIB.snmpTlstmCertSANAny";
-  }
-
-  identity common-name {
-    base cert-to-name;
-    description
-      "Maps a certificate's CommonName to a name after converting
-       it to a UTF-8 encoding.  The usage of CommonNames is
-       deprecated and users are encouraged to use subjectAltName
-       mapping methods instead.  This mapping results in a 1:1
-       correspondence between certificate CommonName values and name
-       values.";
-    reference "SNMP-TLS-TM-MIB.snmpTlstmCertCommonName";
-  }
-
-  grouping cert-to-name {
-    description
-      "Defines nodes for mapping certificates to names.  Modules
-       that uses this grouping should describe how the resulting
-       name is used.";
-    list cert-to-name {
-      key "id";
-      description
-        "This list defines how certificates are mapped to names.
-         The name is derived by considering each cert-to-name
-         list entry in order. The cert-to-name entry's fingerprint
-         determines whether the list entry is a match:
-
-         1) If the cert-to-name list entry's fingerprint value
-            matches that of the presented certificate, then consider
-            the list entry as a successful match.
-
-         2) If the cert-to-name list entry's fingerprint value
-            matches that of a locally held copy of a trusted CA
-            certificate, and that CA certificate was part of the CA
-            certificate chain to the presented certificate, then
-            consider the list entry as a successful match.
-
-         Once a matching cert-to-name list entry has been found, the
-         map-type is used to determine how the name associated with
-         the certificate should be determined.  See the map-type
-         leaf's description for details on determining the name value.
-         If it is impossible to determine a name from the cert-to-name
-         list entry's data combined with the data presented in the
-         certificate, then additional cert-to-name list entries MUST
-         be searched looking for another potential match.
-
-         Security administrators are encouraged to make use of
-         certificates with subjectAltName fields that can be mapped to
-         names so that a single root CA certificate can allow all
-         child certificate's subjectAltName to map directly to a name
-         via a 1:1 transformation.";
-      reference "SNMP-TLS-TM-MIB.snmpTlstmCertToTSNEntry";
-      leaf id {
-        type uint32;
-        description
-          "The id specifies the order in which the entries in the
-           cert-to-name list are searched.  Entries with lower
-           numbers are searched first.";
-        reference "SNMP-TLS-TM-MIB.snmpTlstmCertToTSNID";
-      }
-      leaf fingerprint {
-        type x509c2n:tls-fingerprint;
-        mandatory true;
-        description
-          "Specifies a value with which the fingerprint of the
-           certificate presented by the peer is compared.  If the
-           fingerprint of the certificate presented by the peer does
-           not match the fingerprint configured, then the entry is
-           skipped and the search for a match continues.";
-        reference "SNMP-TLS-TM-MIB.snmpTlstmCertToTSNFingerprint";
-      }
-      leaf map-type {
-        type identityref {
-          base cert-to-name;
-        }
-        mandatory true;
-        description
-          "Specifies the algorithm used to map the certificate
-           presented by the peer to a name.
-
-           Mappings that need additional configuration objects should
-           use the 'when' statement to make them conditional based on
-           the 'map-type'.";
-        reference "SNMP-TLS-TM-MIB.snmpTlstmCertToTSNMapType";
-      }
-      leaf name {
-        when "../map-type = 'x509c2n:specified'";
-        type string;
-        mandatory true;
-        description
-          "Directly specifies the NETCONF username when the
-           'map-type' is 'specified'.";
-        reference "SNMP-TLS-TM-MIB.snmpTlstmCertToTSNData";
-      }
-    }
-  }
-}
diff --git a/drivers/microsemi/ea1000yang/src/main/yang/ietf-yang-types.yang b/drivers/microsemi/ea1000yang/src/main/yang/ietf-yang-types.yang
deleted file mode 100644
index 371a091..0000000
--- a/drivers/microsemi/ea1000yang/src/main/yang/ietf-yang-types.yang
+++ /dev/null
@@ -1,480 +0,0 @@
-module ietf-yang-types {
-
-  namespace "urn:ietf:params:xml:ns:yang:ietf-yang-types";
-  prefix "yang";
-
-  organization
-   "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
-
-  contact
-   "WG Web:   <http://tools.ietf.org/wg/netmod/>
-    WG List:  <mailto:netmod@ietf.org>
-
-    WG Chair: David Kessens
-              <mailto:david.kessens@nsn.com>
-
-    WG Chair: Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>
-
-    Editor:   Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>";
-
-  description
-   "This module contains a collection of generally useful derived
-    YANG data types.
-
-    Copyright (c) 2013 IETF Trust and the persons identified as
-    authors of the code.  All rights reserved.
-
-    Redistribution and use in source and binary forms, with or
-    without modification, is permitted pursuant to, and subject
-    to the license terms contained in, the Simplified BSD License
-    set forth in Section 4.c of the IETF Trust's Legal Provisions
-    Relating to IETF Documents
-    (http://trustee.ietf.org/license-info).
-
-    This version of this YANG module is part of RFC 6991; see
-    the RFC itself for full legal notices.";
-
-  revision 2013-07-15 {
-    description
-     "This revision adds the following new data types:
-      - yang-identifier
-      - hex-string
-      - uuid
-      - dotted-quad";
-    reference
-     "RFC 6991: Common YANG Data Types";
-  }
-
-  revision 2010-09-24 {
-    description
-     "Initial revision.";
-    reference
-     "RFC 6021: Common YANG Data Types";
-  }
-
-  /*** collection of counter and gauge types ***/
-
-  typedef counter32 {
-    type uint32;
-    description
-     "The counter32 type represents a non-negative integer
-      that monotonically increases until it reaches a
-      maximum value of 2^32-1 (4294967295 decimal), when it
-      wraps around and starts increasing again from zero.
-
-      Counters have no defined 'initial' value, and thus, a
-      single value of a counter has (in general) no information
-      content.  Discontinuities in the monotonically increasing
-      value normally occur at re-initialization of the
-      management system, and at other times as specified in the
-      description of a schema node using this type.  If such
-      other times can occur, for example, the creation of
-      a schema node of type counter32 at times other than
-      re-initialization, then a corresponding schema node
-      should be defined, with an appropriate type, to indicate
-      the last discontinuity.
-
-      The counter32 type should not be used for configuration
-      schema nodes.  A default statement SHOULD NOT be used in
-      combination with the type counter32.
-
-      In the value set and its semantics, this type is equivalent
-      to the Counter32 type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef zero-based-counter32 {
-    type yang:counter32;
-    default "0";
-    description
-     "The zero-based-counter32 type represents a counter32
-      that has the defined 'initial' value zero.
-
-      A schema node of this type will be set to zero (0) on creation
-      and will thereafter increase monotonically until it reaches
-      a maximum value of 2^32-1 (4294967295 decimal), when it
-      wraps around and starts increasing again from zero.
-
-      Provided that an application discovers a new schema node
-      of this type within the minimum time to wrap, it can use the
-      'initial' value as a delta.  It is important for a management
-      station to be aware of this minimum time and the actual time
-      between polls, and to discard data if the actual time is too
-      long or there is no defined minimum time.
-
-      In the value set and its semantics, this type is equivalent
-      to the ZeroBasedCounter32 textual convention of the SMIv2.";
-    reference
-      "RFC 4502: Remote Network Monitoring Management Information
-                 Base Version 2";
-  }
-
-  typedef counter64 {
-    type uint64;
-    description
-     "The counter64 type represents a non-negative integer
-      that monotonically increases until it reaches a
-      maximum value of 2^64-1 (18446744073709551615 decimal),
-      when it wraps around and starts increasing again from zero.
-
-      Counters have no defined 'initial' value, and thus, a
-      single value of a counter has (in general) no information
-      content.  Discontinuities in the monotonically increasing
-      value normally occur at re-initialization of the
-      management system, and at other times as specified in the
-      description of a schema node using this type.  If such
-      other times can occur, for example, the creation of
-      a schema node of type counter64 at times other than
-      re-initialization, then a corresponding schema node
-      should be defined, with an appropriate type, to indicate
-      the last discontinuity.
-
-      The counter64 type should not be used for configuration
-      schema nodes.  A default statement SHOULD NOT be used in
-      combination with the type counter64.
-
-      In the value set and its semantics, this type is equivalent
-      to the Counter64 type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef zero-based-counter64 {
-    type yang:counter64;
-    default "0";
-    description
-     "The zero-based-counter64 type represents a counter64 that
-      has the defined 'initial' value zero.
-
-
-
-
-      A schema node of this type will be set to zero (0) on creation
-      and will thereafter increase monotonically until it reaches
-      a maximum value of 2^64-1 (18446744073709551615 decimal),
-      when it wraps around and starts increasing again from zero.
-
-      Provided that an application discovers a new schema node
-      of this type within the minimum time to wrap, it can use the
-      'initial' value as a delta.  It is important for a management
-      station to be aware of this minimum time and the actual time
-      between polls, and to discard data if the actual time is too
-      long or there is no defined minimum time.
-
-      In the value set and its semantics, this type is equivalent
-      to the ZeroBasedCounter64 textual convention of the SMIv2.";
-    reference
-     "RFC 2856: Textual Conventions for Additional High Capacity
-                Data Types";
-  }
-
-  typedef gauge32 {
-    type uint32;
-    description
-     "The gauge32 type represents a non-negative integer, which
-      may increase or decrease, but shall never exceed a maximum
-      value, nor fall below a minimum value.  The maximum value
-      cannot be greater than 2^32-1 (4294967295 decimal), and
-      the minimum value cannot be smaller than 0.  The value of
-      a gauge32 has its maximum value whenever the information
-      being modeled is greater than or equal to its maximum
-      value, and has its minimum value whenever the information
-      being modeled is smaller than or equal to its minimum value.
-      If the information being modeled subsequently decreases
-      below (increases above) the maximum (minimum) value, the
-      gauge32 also decreases (increases).
-
-      In the value set and its semantics, this type is equivalent
-      to the Gauge32 type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef gauge64 {
-    type uint64;
-    description
-     "The gauge64 type represents a non-negative integer, which
-      may increase or decrease, but shall never exceed a maximum
-      value, nor fall below a minimum value.  The maximum value
-      cannot be greater than 2^64-1 (18446744073709551615), and
-      the minimum value cannot be smaller than 0.  The value of
-      a gauge64 has its maximum value whenever the information
-      being modeled is greater than or equal to its maximum
-      value, and has its minimum value whenever the information
-      being modeled is smaller than or equal to its minimum value.
-      If the information being modeled subsequently decreases
-      below (increases above) the maximum (minimum) value, the
-      gauge64 also decreases (increases).
-
-      In the value set and its semantics, this type is equivalent
-      to the CounterBasedGauge64 SMIv2 textual convention defined
-      in RFC 2856";
-    reference
-     "RFC 2856: Textual Conventions for Additional High Capacity
-                Data Types";
-  }
-
-  /*** collection of identifier-related types ***/
-
-  typedef object-identifier {
-    type string {
-      pattern '(([0-1](\.[1-3]?[0-9]))|(2\.(0|([1-9]\d*))))'
-            + '(\.(0|([1-9]\d*)))*';
-    }
-    description
-     "The object-identifier type represents administratively
-      assigned names in a registration-hierarchical-name tree.
-
-      Values of this type are denoted as a sequence of numerical
-      non-negative sub-identifier values.  Each sub-identifier
-      value MUST NOT exceed 2^32-1 (4294967295).  Sub-identifiers
-      are separated by single dots and without any intermediate
-      whitespace.
-
-      The ASN.1 standard restricts the value space of the first
-      sub-identifier to 0, 1, or 2.  Furthermore, the value space
-      of the second sub-identifier is restricted to the range
-      0 to 39 if the first sub-identifier is 0 or 1.  Finally,
-      the ASN.1 standard requires that an object identifier
-      has always at least two sub-identifiers.  The pattern
-      captures these restrictions.
-
-      Although the number of sub-identifiers is not limited,
-      module designers should realize that there may be
-      implementations that stick with the SMIv2 limit of 128
-      sub-identifiers.
-
-      This type is a superset of the SMIv2 OBJECT IDENTIFIER type
-      since it is not restricted to 128 sub-identifiers.  Hence,
-      this type SHOULD NOT be used to represent the SMIv2 OBJECT
-      IDENTIFIER type; the object-identifier-128 type SHOULD be
-      used instead.";
-    reference
-     "ISO9834-1: Information technology -- Open Systems
-      Interconnection -- Procedures for the operation of OSI
-      Registration Authorities: General procedures and top
-      arcs of the ASN.1 Object Identifier tree";
-  }
-
-  typedef object-identifier-128 {
-    type object-identifier {
-      pattern '\d*(\.\d*){1,127}';
-    }
-    description
-     "This type represents object-identifiers restricted to 128
-      sub-identifiers.
-
-      In the value set and its semantics, this type is equivalent
-      to the OBJECT IDENTIFIER type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef yang-identifier {
-    type string {
-      length "1..max";
-      pattern '[a-zA-Z_][a-zA-Z0-9\-_.]*';
-      pattern '.|..|[^xX].*|.[^mM].*|..[^lL].*';
-    }
-    description
-      "A YANG identifier string as defined by the 'identifier'
-       rule in Section 12 of RFC 6020.  An identifier must
-       start with an alphabetic character or an underscore
-       followed by an arbitrary sequence of alphabetic or
-       numeric characters, underscores, hyphens, or dots.
-
-       A YANG identifier MUST NOT start with any possible
-       combination of the lowercase or uppercase character
-       sequence 'xml'.";
-    reference
-      "RFC 6020: YANG - A Data Modeling Language for the Network
-                 Configuration Protocol (NETCONF)";
-  }
-
-  /*** collection of types related to date and time***/
-
-  typedef date-and-time {
-    type string {
-      pattern '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?'
-            + '(Z|[\+\-]\d{2}:\d{2})';
-    }
-    description
-     "The date-and-time type is a profile of the ISO 8601
-      standard for representation of dates and times using the
-      Gregorian calendar.  The profile is defined by the
-      date-time production in Section 5.6 of RFC 3339.
-
-      The date-and-time type is compatible with the dateTime XML
-      schema type with the following notable exceptions:
-
-      (a) The date-and-time type does not allow negative years.
-
-      (b) The date-and-time time-offset -00:00 indicates an unknown
-          time zone (see RFC 3339) while -00:00 and +00:00 and Z
-          all represent the same time zone in dateTime.
-
-      (c) The canonical format (see below) of data-and-time values
-          differs from the canonical format used by the dateTime XML
-          schema type, which requires all times to be in UTC using
-          the time-offset 'Z'.
-
-      This type is not equivalent to the DateAndTime textual
-      convention of the SMIv2 since RFC 3339 uses a different
-      separator between full-date and full-time and provides
-      higher resolution of time-secfrac.
-
-      The canonical format for date-and-time values with a known time
-      zone uses a numeric time zone offset that is calculated using
-      the device's configured known offset to UTC time.  A change of
-      the device's offset to UTC time will cause date-and-time values
-      to change accordingly.  Such changes might happen periodically
-      in case a server follows automatically daylight saving time
-      (DST) time zone offset changes.  The canonical format for
-      date-and-time values with an unknown time zone (usually
-      referring to the notion of local time) uses the time-offset
-      -00:00.";
-    reference
-     "RFC 3339: Date and Time on the Internet: Timestamps
-      RFC 2579: Textual Conventions for SMIv2
-      XSD-TYPES: XML Schema Part 2: Datatypes Second Edition";
-  }
-
-  typedef timeticks {
-    type uint32;
-    description
-     "The timeticks type represents a non-negative integer that
-      represents the time, modulo 2^32 (4294967296 decimal), in
-      hundredths of a second between two epochs.  When a schema
-      node is defined that uses this type, the description of
-      the schema node identifies both of the reference epochs.
-
-      In the value set and its semantics, this type is equivalent
-      to the TimeTicks type of the SMIv2.";
-    reference
-     "RFC 2578: Structure of Management Information Version 2
-                (SMIv2)";
-  }
-
-  typedef timestamp {
-    type yang:timeticks;
-    description
-     "The timestamp type represents the value of an associated
-      timeticks schema node at which a specific occurrence
-      happened.  The specific occurrence must be defined in the
-      description of any schema node defined using this type.  When
-      the specific occurrence occurred prior to the last time the
-      associated timeticks attribute was zero, then the timestamp
-      value is zero.  Note that this requires all timestamp values
-      to be reset to zero when the value of the associated timeticks
-      attribute reaches 497+ days and wraps around to zero.
-
-      The associated timeticks schema node must be specified
-      in the description of any schema node using this type.
-
-      In the value set and its semantics, this type is equivalent
-      to the TimeStamp textual convention of the SMIv2.";
-    reference
-     "RFC 2579: Textual Conventions for SMIv2";
-  }
-
-  /*** collection of generic address types ***/
-
-  typedef phys-address {
-    type string {
-      pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
-    }
-
-
-
-
-    description
-     "Represents media- or physical-level addresses represented
-      as a sequence octets, each octet represented by two hexadecimal
-      numbers.  Octets are separated by colons.  The canonical
-      representation uses lowercase characters.
-
-      In the value set and its semantics, this type is equivalent
-      to the PhysAddress textual convention of the SMIv2.";
-    reference
-     "RFC 2579: Textual Conventions for SMIv2";
-  }
-
-  typedef mac-address {
-    type string {
-      pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}';
-    }
-    description
-     "The mac-address type represents an IEEE 802 MAC address.
-      The canonical representation uses lowercase characters.
-
-      In the value set and its semantics, this type is equivalent
-      to the MacAddress textual convention of the SMIv2.";
-    reference
-     "IEEE 802: IEEE Standard for Local and Metropolitan Area
-                Networks: Overview and Architecture
-      RFC 2579: Textual Conventions for SMIv2";
-  }
-
-  /*** collection of XML-specific types ***/
-
-  typedef xpath1.0 {
-    type string;
-    description
-     "This type represents an XPATH 1.0 expression.
-
-      When a schema node is defined that uses this type, the
-      description of the schema node MUST specify the XPath
-      context in which the XPath expression is evaluated.";
-    reference
-     "XPATH: XML Path Language (XPath) Version 1.0";
-  }
-
-  /*** collection of string types ***/
-
-  typedef hex-string {
-    type string {
-      pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
-    }
-    description
-     "A hexadecimal string with octets represented as hex digits
-      separated by colons.  The canonical representation uses
-      lowercase characters.";
-  }
-
-  typedef uuid {
-    type string {
-      pattern '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-'
-            + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12}';
-    }
-    description
-     "A Universally Unique IDentifier in the string representation
-      defined in RFC 4122.  The canonical representation uses
-      lowercase characters.
-
-      The following is an example of a UUID in string representation:
-      f81d4fae-7dec-11d0-a765-00a0c91e6bf6
-      ";
-    reference
-     "RFC 4122: A Universally Unique IDentifier (UUID) URN
-                Namespace";
-  }
-
-  typedef dotted-quad {
-    type string {
-      pattern
-        '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
-      + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])';
-    }
-    description
-      "An unsigned 32-bit number expressed in the dotted-quad
-       notation, i.e., four octets written as decimal numbers
-       and separated with the '.' (full stop) character.";
-  }
-}
diff --git a/drivers/microsemi/ea1000yang/src/main/yang/msea-cfm.yang b/drivers/microsemi/ea1000yang/src/main/yang/msea-cfm.yang
deleted file mode 100644
index 1049008..0000000
--- a/drivers/microsemi/ea1000yang/src/main/yang/msea-cfm.yang
+++ /dev/null
@@ -1,2065 +0,0 @@
-module msea-cfm {

-

-    namespace "http://www.microsemi.com/microsemi-edge-assure/msea-cfm";

-    prefix "msea-cfm"; //MicroSemi EdgeAssure (msea)

-

-    import ietf-yang-types {

-        prefix yang;

-        revision-date 2013-07-15;

-    }

-    import ietf-inet-types {

-        prefix inet;

-        revision-date 2013-07-15;

-    }

-    import msea-types {

-        prefix msea;

-        revision-date 2016-02-29;

-    }

-

-    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 is a fork of the original mef-cfm YANG Module defined in MEF 38

-    This fork is done specifically to suit the EdgeAssure SFP which has some extra

-    constraints that are not handled by the original YANG.

-

-    Consideration was given to using 'deviations' in a separate YANG file as an

-    alternative to forking, but due to lack of full support for deviations in

-    Cisco/Tail-f NSO 4.1.1 (Jan 2016) this was not feasible.

-

-    This YANG is meant to mirror exactly the initial behaviour of the EdgeAssure

-    and present that to Client systems at the interface level (the alternative

-    being to raise exceptions when a constraint is broken). This is mostly

-    implemented through 'must' statements.

-

-    Copyright 2016 Microsemi Inc.

-    All rights reserved.";

-

-    revision "2016-02-29" {

-        description

-        "Initial EdgeAssure version forked from mef-cfm 2012-04-16 - Sean Condon, Microsemi";

-        reference

-        "Service OAM Fault Management YANG Modules (MEF 38), April 2012";

-    }

-

-    //

-    // Type definitions related to CFM

-    //

-

-    typedef lbm-transaction-id-type {

-        type uint32;

-

-        description

-        "A loopback transaction identifier";

-        reference

-        "[802.1q] 21.7.3";

-    }

-

-    typedef fault-alarm-defect-type {

-        type enumeration {

-            enum remote-rdi {

-                description "Indicates the aggregate health of the remote MEPs.";

-            }

-            enum remote-mac-error {

-                description "Indicates that one or more of the remote MEPs is

-                reporting a failure in its Port Status TLV or

-                Interface Status TLV.";

-            }

-            enum remote-invalid-ccm {

-                description "Indicates that at least one of the Remote MEP

-                state machines is not receiving valid CCMs

-                from its remote MEP.";

-            }

-            enum invalid-ccm {

-                description "Indicates that one or more invalid CCMs has been

-                received and that 3.5 times that CCMs transmission

-                interval has not yet expired.";

-            }

-            enum cross-connect-ccm {

-                description "Indicates that one or more cross connect CCMs has been

-                received and that 3.5 times of at least one of those

-                CCMs transmission interval has not yet expired.";

-            }

-            enum none {

-                description "Indicates that all defects of all types should

-                        be ignored.";

-            }

-        }

-

-        description

-        "An enumerated value indicating the highest priority defect.";

-        reference

-        "[802.1q] 20.33.9";

-    }

-

-    typedef fault-alarm-defect-bits-type {

-        type bits {

-            bit remote-rdi {

-                description "Indicates that at least one of the Remote MEP state machines is

-                receiving valid CCMs from its remote MEP that has the RDI bit set.";

-            }

-            bit remote-mac-error {

-                description "One or more of the remote MEPs is reporting a failure

-                in its Port Status TLV or Interface Status";

-            }

-            bit remote-invalid-ccm {

-                description "At least one of the Remote MEP state machines is not

-                receiving valid CCMs from its remote MEP";

-            }

-            bit invalid-ccm {

-                description "One or more invalid CCMs has been received";

-            }

-            bit cross-connect-ccm {

-                description "One or more cross connect CCMs has been received";

-            }

-        }

-

-        description

-        "A set of bits indicating the the current defects";

-        reference

-        "[802.1q] 20.33.9";

-    }

-

-    typedef remote-mep-state-type {

-        type enumeration {

-            enum idle {

-                description

-                "Indicates momentary state during reset.";

-            }

-            enum start {

-                description

-                "Indicates the timer has not expired since the state machine was

-                reset, and no valid CCM has yet been received.";

-            }

-            enum failed {

-                description

-                "Indicates The timer has expired, both since the state machine

-                was reset, and since a valid CCM was received.";

-            }

-            enum ok {

-                description

-                "Indicates The timer has not expired since a valid CCM was

-                received.";

-            }

-        }

-        description

-        "An enumerated value indicating the operational state of a Remote

-        MEP state machine for a remote MEP.";

-        reference

-        "[802.1q] 12.14.7.6.3:b

-        IEEE8021-CFM-MIB.Dot1agCfmRemoteMepState";

-    }

-

-    typedef ltm-transaction-id-type {

-        type uint32;

-

-        description

-        "A linktrace transaction identifier";

-        reference

-        "[802.1q] 21.8.3";

-    }

-

-    //

-    // Groupings related to CFM

-    //

-

-    grouping target-address-group {

-        description

-        "An indication of a destination MEP, either:

-        1) The MEPID of a MEP; or

-        2) An Individual destination MAC address";

-

-        reference "[802.1q] 12.14.7.3.2:b";

-

-        choice address-type {

-            description "Either a mac address or a MEP id for the target";

-            case mac-address {

-                leaf mac-address {

-                    type yang:mac-address;

-                    description

-                    "Target MAC address";

-                }

-            }

-            case mep-id {

-                leaf mep-id {

-                    type msea:mep-id-type;

-                    description

-                    "Target MEP ID";

-                }

-            }

-        }

-    }

-

-    grouping maintenance-domain-reference {

-        description

-        "This grouping uniquely identifies a maintenance domain.";

-

-        leaf maintenance-domain {

-            type leafref {

-                path "/msea-cfm:mef-cfm/msea-cfm:maintenance-domain/msea-cfm:id";

-            }

-            description

-            "A reference to a specific Maintenance Domain.";

-        }

-    }

-

-    grouping maintenance-association-reference {

-        description

-        "This grouping uniquely identifies a maintenance association. It consists

-        of a maintence-domain-reference and a maintenance-association leafref";

-

-        uses maintenance-domain-reference;

-

-        leaf maintenance-association {

-            type leafref {

-                path "/msea-cfm:mef-cfm/msea-cfm:maintenance-domain[msea-cfm:id=current()/../maintenance-domain]/msea-cfm:maintenance-association/msea-cfm:id";

-            }

-            description

-            "A reference to a specific Maintenance Association.";

-        }

-    }

-

-    grouping maintenance-association-end-point-reference {

-        description

-        "This grouping uniquely identifies a maintenance association. It consists

-        of a maintence-association-reference and a maintenance-association-end-point

-        leafref";

-

-        uses maintenance-association-reference;

-

-        leaf maintenance-association-end-point {

-            type leafref {

-                path "/msea-cfm:mef-cfm/msea-cfm:maintenance-domain[msea-cfm:id=current()/../maintenance-domain]/msea-cfm:maintenance-association[msea-cfm:id=current()/../maintenance-association]/msea-cfm:maintenance-association-end-point/msea-cfm:mep-identifier";

-            }

-            description

-            "A reference to a specific Maintenance association End Point.";

-        }

-    }

-

-    grouping mep-notification-reference {

-

-        description "A simple MEP reference that can be used in notifications";

-        leaf maintenance-domain {

-            type uint8;

-            description

-            "A reference to a specific Maintenance Domain.";

-        }

-

-        leaf maintenance-association {

-            type uint8;

-            description

-            "A reference to a specific Maintenance Association.";

-        }

-

-        leaf maintenance-association-end-point {

-            type msea:mep-id-type;

-            description

-            "A reference to a specific Maintenance association End Point.";

-        }

-

-    }

-

-    grouping linktrace-parameters-group {

-        description

-        "This is the group of parameters associated with linktrace sessions. It is

-        used for linktrace RPC input as well as linktrace database entries.";

-

-        container target-address {

-            description

-            "Target MAC address or MEP ID for the Linktrace session.";

-            uses target-address-group;

-        }

-

-        leaf transmit-ltm-flags {

-            type bits {

-                bit use-fdb-only {

-                    description

-                    "If set, indicates that only MAC addresses learned in a

-                    Bridge’s FDB, and not information saved in the MIP CCM

-                    Database, is to be used to determine the Egress Port.";

-                    reference "[802.1q] 21.8.1";

-                }

-            }

-

-            description

-            "The Flags field for LTMs transmitted by the MEP";

-            reference

-            "[802.1q] 12.14.7.4.2:b";

-        }

-

-        leaf default-ttl {

-            type uint8;

-            default 64;

-

-            description

-            "An initial value for the LTM TTL field";

-            reference

-            "[802.1q] 12.14.7.4.2:d";

-        }

-    } //End of linktrace-parameters-group

-

-

-    grouping port-id-tlv-group {

-        description

-        "Data definitions associated with the Port ID TLV";

-

-        reference

-        "[802.1AB] 9.5.3";

-

-        choice port-id-subtype {

-            leaf interface-alias {

-                type string {

-                    length "0..64";

-                }

-                description

-                "The ifAlias field from the Interfaces Group MIB";

-                reference

-                "[RFC2863]";

-            }

-

-            leaf port-component {

-                type string {

-                    length "0..32";

-                }

-                description

-                "EntPhysicalAlias when entPhysClass has a value of port(10) or

-                backplane(4)";

-                reference

-                "[RFC2737]";

-            }

-            leaf mac-address {

-                type yang:mac-address;

-                description

-                "A MAC address";

-            }

-            leaf network-address {

-                type string;

-                description

-                "network-address is an octet string that identifies a particular network

-                address family and an associated network address that are

-                encoded in network octet order. An IP address, for example,

-                would be encoded with the first octet containing the IANA

-                Address Family Numbers enumeration value for the specific

-                address type and octets 2 through n containing the address

-                value";

-                reference

-                "[802.1AB] Table 9.2";

-            }

-

-            leaf interface-name {

-                type string {

-                    length "0..64";

-                }

-                description

-                "The ifName field from the Interfaces Group MIB";

-                reference

-                "[RFC2863]";

-            }

-            leaf agent-circuit-id {

-                type string;

-                description

-                "Agent circuit ID";

-                reference

-                "[RFC3046]";

-            }

-            leaf local {

-                type string;

-                description

-                "A locally defined identifier";

-                reference

-                "[802.1AB] Table 9.3";

-            }

-        }

-    }  //End of port-id-tlv-group

-

-

-    grouping sender-id-tlv-group {

-        description

-        "Data definitions associated with the Sender ID TLV";

-

-        reference

-        "[802.1q] 21.5.3";

-

-        choice chassis-id-subtype {

-            description

-            "The chassis-id-subtype contains the chassis ID entity that is listed in

-            the chassis ID field. This is a combination of the 'Chassis ID Subtype'

-            and 'chsssis ID' fields";

-

-            reference

-            "[802.1AB] 9.5.2.2";

-

-            leaf chassis-component {

-                type string {

-                    length "0..32";

-                }

-                description

-                "This leaf contains the content of EntPhysicalAlias when entPhysClass has

-                a value of chassis(3)'";

-                reference

-                "[RFC2737]";

-            }

-

-            leaf interface-alias {

-                type string {

-                    length "0..64";

-                }

-                description

-                "The IfAlias field from the Interfaces Group MIB";

-                reference

-                "[RFC2863]";

-            }

-

-            leaf port-component {

-                type string {

-                    length "0..32";

-                }

-                description

-                "The EntPhysicalAlias from the Interfaces Group MIB when entPhysClass has

-                a value of port(10) or backplane(4)";

-                reference

-                "[RFC2737]";

-            }

-

-            leaf mac-address-type {

-                type yang:mac-address;

-

-                description

-                "An IEEE 802-2001 Ethernet MAC Address";

-                reference

-                "[802-2001]";

-            }

-

-            leaf network-address {

-                type string;

-                description

-                "network-address is an octet string that identifies a particular network

-                address family and an associated network address that are encoded in

-                network octet order. An IP address, for example, would be encoded with

-                the first octet containing the IANA Address Family Numbers enumeration

-                value for the specific address type and octets 2 through n containing

-                the address value";

-                reference

-                "[802.1AB] Table 9.2";

-            }

-

-            leaf interface-name {

-                type string {

-                    length "0..64";

-                }

-                description

-                "IfName";

-                reference

-                "[RFC2863]";

-            }

-

-            leaf local {

-                type string;

-                description

-                "A locally assigned alpha-numeric string.";

-                reference

-                "[802.1AB] Table 9.2";

-            }

-        }

-

-        container management-address {

-            description

-            "Data definitions related to the management address fields defined

-            in a Sender ID TLV";

-            reference

-            "[802.1Q] Section 21.5.3";

-            choice management-address-choice {

-                case udp-ipv4 {

-                    description

-                    "Represents an IPv4 UDP transport address consisting of an IPv4 address,

-                    and a port number.";

-                    reference

-                    "[RFC3419] TRANSPORT-ADDRESS-MIB.transportDomainUdpIpv4";

-                    leaf udp-ipv4-address {

-                        type inet:ipv4-address;

-                    }

-                    leaf udp-ipv4-port {

-                        type inet:port-number;

-                    }

-                }

-

-                case udp-ipv6 {

-                    description

-                    "Represents an IPv6 UDP transport address consisting of an IPv6 address,

-                    and a port number.";

-                    reference

-                    "[RFC3419] TRANSPORT-ADDRESS-MIB.transportDomainUdpIpv6";

-                    leaf udp-ipv6-address {

-                        type inet:ipv6-address;

-                    }

-                    leaf udp-ipv6-port {

-                        type inet:port-number;

-                    }

-                }

-

-                case udp-ipv4z {

-                    description

-                    "Represents a UDP transport address consisting of an IPv4 address, a zone

-                    index and a port number.";

-                    reference

-                    "[RFC3419] TRANSPORT-ADDRESS-MIB.transportDomainUdpIpv4z";

-                    leaf udp-ipv4z-address {

-                        type inet:ipv4-address;

-                    }

-                    leaf udp-ipv4z-index {

-                        type uint32;

-                    }

-                    leaf udp-ipv4z-port {

-                        type inet:port-number;

-                    }

-                }

-

-                case udp-ipv6z {

-                    description

-                    "Represents a UDP transport address consisting of an IPv6 address, a zone

-                    index and a port number.";

-                    reference

-                    "[RFC3419] TRANSPORT-ADDRESS-MIB.transportDomainUdpIpv6z";

-                    leaf udp-ipv6z-address {

-                        type inet:ipv6-address;

-                    }

-                    leaf udp-ipv6z-index {

-                        type uint32;

-                    }

-                    leaf udp-ipv6z-port {

-                        type inet:port-number;

-                    }

-                }

-

-                case tcp-ipv4 {

-                    description

-                    "Represents an IPv4 TCP transport address consisting of an IPv4 address,

-                    and a port number.";

-                    reference

-                    "[RFC3419] TRANSPORT-ADDRESS-MIB.transportDomainTcpIpv4";

-                    leaf tcp-ipv4-address {

-                        type inet:ipv4-address;

-                    }

-                    leaf tcp-ipv4-port {

-                        type inet:port-number;

-                    }

-                }

-

-                case tcp-ipv6 {

-                    description

-                    "Represents an IPv6 TCP transport address consisting of an IPv6 address,

-                    and a port number.";

-                    reference

-                    "[RFC3419] TRANSPORT-ADDRESS-MIB.transportDomainTcpIpv6";

-                    leaf tcp-ipv6-address {

-                        type inet:ipv6-address;

-                    }

-                    leaf tcp-ipv6-port {

-                        type inet:port-number;

-                    }

-                }

-

-                case tcp-ipv4z {

-                    description

-                    "Represents a TCP IPv4 transport address consisting of an IPv4 address, a

-                    zone index and a port number.";

-                    reference

-                    "[RFC3419] TRANSPORT-ADDRESS-MIB.transportDomainTcpIpv4z";

-                    leaf tcp-ipv4z-address {

-                        type inet:ipv4-address;

-                    }

-                    leaf tcp-ipv4z-index {

-                        type uint32;

-                    }

-                    leaf tcp-ipv4z-port {

-                        type inet:port-number;

-                    }

-                }

-

-                case tcp-ipv6z {

-                    description

-                    "Represents a TCP IPv6 transport address consisting of an IPv6 address,

-                    a zone index and a port number.";

-                    reference

-                    "[RFC3419] TRANSPORT-ADDRESS-MIB.transportDomainTcpIpv6z";

-                    leaf tcp-ipv6z-address {

-                        type inet:ipv6-address;

-                    }

-                    leaf tcp-ipv6z-index {

-                        type uint32;

-                    }

-                    leaf tcp-ipv6z-port {

-                        type inet:port-number;

-                    }

-                }

-

-                case sctp-ipv4 {

-                    description

-                    "Represents an IPv4 SCTP transport address consisting of an IPv4 address,

-                    and a port number.";

-                    reference

-                    "[RFC3419] TRANSPORT-ADDRESS-MIB.transportDomainSctpIpv4";

-                    leaf sctp-ipv4-address {

-                        type inet:ipv4-address;

-                    }

-                    leaf sctp-ipv4-port {

-                        type inet:port-number;

-                    }

-                }

-

-                case sctp-ipv6 {

-                    description

-                    "Represents an IPv6 SCTP transport address consisting of an IPv6 address,

-                    and a port number.";

-                    reference

-                    "[RFC3419] TRANSPORT-ADDRESS-MIB.transportDomainSctpIpv6";

-                    leaf sctp-ipv6-address {

-                        type inet:ipv6-address;

-                    }

-                    leaf sctp-ipv6-port {

-                        type inet:port-number;

-                    }

-                }

-

-                case sctp-ipv4z {

-                    description

-                    "Represents an SCTP IPv4 transport address consisting of an IPv4

-                    address, a zone index and a port number.";

-                    reference

-                    "[RFC3419] TRANSPORT-ADDRESS-MIB.transportDomainSctpIpv4z";

-                    leaf sctp-ipv4z-address {

-                        type inet:ipv4-address;

-                    }

-                    leaf sctp-ipv4z-index {

-                        type uint32;

-                    }

-                    leaf sctp-ipv4z-port {

-                        type inet:port-number;

-                    }

-                }

-

-                case sctp-ipv6z {

-                    description

-                    "Represents an SCTP IPv6 transport address consisting of an IPv6

-                    address, a zone index and a port number.";

-                    reference

-                    "[RFC3419] TRANSPORT-ADDRESS-MIB.transportDomainSctpIpv6z";

-                    leaf sctp-ipv6z-address {

-                        type inet:ipv6-address;

-                    }

-                    leaf sctp-ipv6z-index {

-                        type uint32;

-                    }

-                    leaf sctp-ipv6z-port {

-                        type inet:port-number;

-                    }

-                }

-

-                case local {

-                    leaf local-address {

-                        type string {

-                            length "1..255";

-                        }

-                        description

-                        "Represents a POSIX Local IPC transport address.";

-                    }

-                }

-

-                case udp-dns {

-                    leaf udp-dns-address {

-                        type string {

-                            length "1..255";

-                        }

-                        description

-                        "The UDP transport domain using fully qualified domain names. Represents

-                        a DNS domain name followed by a colon ':' (ASCII character

-                        0x3A) and a port number in ASCII. The name SHOULD be fully

-                        qualified whenever possible.";

-                        reference

-                        "[RFC3419] TRANSPORT-ADDRESS-MIB.transportDomainUdpDns";

-                    }

-                }

-                case tcp-dns {

-                    leaf tcp-dns-address {

-                        type string {

-                            length "1..255";

-                        }

-                        description

-                        "The TCP transport domain using fully qualified domain names. Represents

-                        a DNS domain name followed by a colon ':' (ASCII character

-                        0x3A) and a port number in ASCII. The name SHOULD be fully

-                        qualified whenever possible.";

-                        reference

-                        "[RFC3419] TRANSPORT-ADDRESS-MIB.transportDomainTcpDns";

-                    }

-                }

-                case sctp-dns {

-                    leaf sctp-dns-address {

-                        type string {

-                            length "1..255";

-                        }

-                        description

-                        "The SCTP transport domain using fully qualified domain names.

-                        Represents a DNS domain name followed by a colon ':' (ASCII

-                        character 0x3A) and a port number in ASCII. The name SHOULD be

-                        fully qualified whenever possible.";

-                        reference

-                        "[RFC3419] TRANSPORT-ADDRESS-MIB.transportDomainSctpDns";

-                    }

-                }

-                case unidentified {

-                    leaf management-domain-binary {

-                        type binary;

-                        description "The management address domain found in the

-                            Sender ID TLV encoded to base 64";

-                        reference

-                        "[802.1Q] Section 21.5.3";

-                    }

-

-                    leaf management-address-binary {

-                        type binary;

-                        description "The management address found in the

-                            Sender ID TLV encoded to base 64";

-                        reference

-                        "[802.1Q] Section 21.5.3";

-                    }

-                }

-            }

-        }

-    } //End of sender-id-tlv-group

-

-

-    grouping linktrace-reply-grouping {

-

-        description

-        "The attributes of a Linktrace reply.";

-

-        leaf transaction-id {

-            type ltm-transaction-id-type;

-

-            description

-            "The LTM Transaction Identifier to which the LTR entries will be

-            attached";

-            reference

-            "[802.1q] 12.14.7.5.2:b";

-        }

-

-        uses linktrace-parameters-group;

-

-        list reply {

-            key reply-order;

-

-            description

-            "The list of LTRs associated with a specific Linktrace

-            transaction.";

-            leaf reply-order {

-                type uint32;

-

-                description

-                "An index to distinguish among multiple LTRs with the same LTR

-                transaction-id field value. reply-order are

-                assigned sequentially from 1, in the order that the

-                Linktrace Initiator received the LTR";

-                reference "[802.1q] 12.14.7.5.2:c";

-            }

-

-            leaf reply-ttl {

-                type uint32;

-

-                description

-                "The integer Reply TTL field value returned in the LTR.";

-                reference

-                "[802.1q] 12.14.7.5.3:b";

-            }

-

-            leaf forwarded {

-                type boolean;

-

-                description

-                "A Boolean value stating whether an LTM was forwarded by

-                the responding MP.";

-                reference

-                "[802.1q] 12.14.7.5.3:c";

-            }

-

-            leaf terminal-mep {

-                type boolean;

-

-                description

-                "A Boolean value stating whether the forwarded LTM reached

-                a MEP for its MA.";

-                reference

-                "[802.1q] 12.14.7.5.3:d";

-            }

-

-            leaf last-egress-identifier {

-                type binary {

-                    length 8;

-                }

-

-                description

-                "An octet string holding the Last Egress Identifier field

-                returned in the LTR Egress Identifier TLV of the LTR.";

-                reference

-                "[802.1q] 12.14.7.5.3:e";

-            }

-

-            leaf next-egress-identifier {

-                type binary {

-                    length 8;

-                }

-

-                description

-                "An octet string holding the Next Egress Identifier field

-                returned in the LTR Egress Identifier TLV of the LTR";

-                reference

-                "[802.1q] 12.14.7.5.3:f";

-            }

-

-            leaf ltr-relay {

-                type enumeration {

-                    enum hit {

-                        description "Indicates the LTM reached an MP whose MAC

-                        address matches the target MAC address.";

-                    }

-                    enum filtering-database {

-                        description "Indicates the Egress Port was determined by

-                        consulting the Filtering Database.";

-                    }

-                    enum mip-ccm-database {

-                        description "Indicates the Egress Port was determined by

-                        consulting the MIP CCM Database.";

-                    }

-                }

-

-                description

-                "An enumerated value indicating the value returned in the

-                Relay Action field.";

-                reference

-                "[802.1q] 12.14.7.5.3:g, Table 21-27

-                IEEE8021-CFM-MIB.Dot1agCfmRelayActionFieldValue";

-            }

-

-            uses sender-id-tlv-group;

-

-            leaf ingress-action {

-                type enumeration {

-                    enum ok {

-                        description "Indicates the target data frame would be

-                        passed through to the MAC Relay Entity.";

-                    }

-                    enum down {

-                        description "Indicates the Bridge Ports MAC Operational

-                        parameter is false.";

-                    }

-                    enum blocked {

-                        description "Indicates the target data frame would not

-                        be forwarded if received on this Port due

-                        to active topology enforement.";

-                    }

-                    enum vid {

-                        description "Indicates the ingress port is not in the

-                        member set of the LTMs VID, and ingress

-                        filtering is enabled, so the target data

-                        frame would be filtered by ingress filtering.";

-                    }

-                }

-

-                description

-                "An enumerated value indicating the value returned in the

-                Ingress Action field. This leaf is not present if no value

-                is returned in the LTR.";

-                reference

-                "[802.1q] 12.14.7.5.3:k, Table 21-30

-                IEEE8021-CFM-MIB.Dot1agCfmIngressActionFieldValue";

-            }

-

-            leaf ingress-mac {

-                type yang:mac-address;

-

-                description

-                "The MAC address returned in the Ingress MAC Address field.

-                This leaf is not present if no value is returned in the LTR.";

-                reference

-                "[802.1q] 12.14.7.5.3:l";

-            }

-

-            container ingress-port-id {

-                uses port-id-tlv-group;

-

-                description

-                "The Ingress Port ID field and the corresponding port ID value.

-                This leaf is not present if no value is returned in the LTR.";

-                reference

-                "[802.1q] 12.14.7.5.3:m";

-            }

-

-            leaf egress-action {

-                type enumeration {

-                    enum ok {

-                        description "Indicates the targeted data frame would be

-                        forwarded.";

-                    }

-                    enum down {

-                        description "Indicates the Egress Port can be identified,

-                        but that Bridge Ports MAC Operational

-                        parameter is false.";

-                    }

-                    enum blocked {

-                        description "Indicates the Egress Port can be identified,

-                        but the data frame would not pass through the

-                        the Egress Port due to active topology

-                        management, i.e., the Bridge Port is not in the

-                        Forwarding state.";

-                    }

-                    enum vid {

-                        description "Indicates the Egress Port can be identified,

-                        but the Bridge Port is not in the LTMs VIDs

-                        member set, so would be filtered by egress

-                        filtering.";

-                    }

-                }

-

-                description

-                "An enumerated value indicating the value returned in the

-                Egress Action field. This leaf is not present if no value

-                is returned in the LTR.";

-                reference

-                "[802.1q] 12.14.7.5.3:o, Table 21-32

-                IEEE8021-CFM-MIB.Dot1agCfmIngressActionFieldValue";

-            }

-

-            leaf egress-mac {

-                type yang:mac-address;

-

-                description

-                "The MAC address returned in the Egress MAC Address field.

-                This leaf is not present if no value is returned in the LTR.";

-                reference

-                "[802.1q] 12.14.7.5.3:p";

-            }

-

-            container egress-port-id {

-                uses port-id-tlv-group;

-

-                description

-                "The Egress Port ID field and the corresponding port ID value.

-                This leaf is not present if no value is returned in the LTR.";

-                reference

-                "[802.1q] 12.14.7.5.3:p, 12.14.7.5.3:q";

-            }

-

-            leaf organization-specific-tlv {

-                type binary {

-                    length "0|4 .. 1500";

-                }

-                description

-                "The OUI and contents of any Organization-Specific TLVs. This

-                leaf is not present if no value is returned in the LTR.";

-                reference

-                "[802.1q] 12.14.7.5.3:s";

-            }

-        }

-    }    //End of linktrace-reply-grouping

-

-

-    //

-    // Data definitions related to CFM

-    //

-

-    container mef-cfm {

-        description "The top level container to group the  

-        maintenance-domain(s)";

-

-        reference "RFC 6087 Section 4.9 ";

-

-        must "not(contains('/y1564:y1564-test/y1564:service-config/y1564:mep-config/y1564:maintenance-domain | /y1564:y1564-test/y1564:service-config/y1564:mep-config/y1564:maintenance-association | /y1564:y1564-test/y1564:service-config/y1564:mep-config/y1564:maintenance-association-end-point | /y1564:y1564-test/y1564:service-config/y1564:mep-config/y1564:remote-mep-id','msea-internal-optional'))" {

-            error-app-tag "msea-cfm-must-01";

-            error-message "A MEP cannot be deleted while it is still referenced from a Y1564 service config";

-//            msea:xref-module "y-1564";

-        }

-

-        must "not(contains('/rfc2544:rfc2544-test/rfc2544:mep-config/rfc2544:maintenance-domain | /rfc2544:rfc2544-test/rfc2544:mep-config/rfc2544:maintenance-association | /rfc2544:rfc2544-test/rfc2544:mep-config/rfc2544:maintenance-association-end-point | /rfc2544:rfc2544-test/rfc2544:mep-config/rfc2544:remote-mep-id','msea-internal-optional'))" {

-            error-app-tag "msea-cfm-must-02";

-            error-message "A MEP cannot be deleted while it is still referenced from an RFC2544 config";

-//            msea:xref-module "rfc-2544";

-        }

-

-        container pm-global {

-//            presence "Global level attributes for PM related measurements can be specified if present";

-            description "A placeholder for global level Performance Measurement PM related attributes";

-        }

-

-        container cfm-role {

-            presence "When present defines the role of this device in a Maintenance Domain";

-            description "Optional attributes that help to describe this devices role in a CFM configuration";

-

-            leaf role { //Microsemi specific configuration attribute

-                description "The role that this device will play in a Maitenance Domain";

-                type enumeration {

-                    enum customer {

-                        description "The customer role";

-                    }

-                    enum provider{

-                        description "The provider role";

-                    }

-                    enum operator {

-                        description "The operator role";

-                    }

-                    enum physical {

-                        description "The physical role";

-                    }

-                }

-                mandatory true;

-                reference "IEEE 802.1Q-2014 Clause 18";

-            }

-

-            leaf side { //Microsemi specific configuration attribute

-                description "An optional attribute to indicate which end of the Maintenance Domain ";

-                type enumeration {

-                    enum left {

-                        description "The device plays its role on the left side of the Maintenance Domain";

-                    }

-                    enum right {

-                        description "The device plays its role on the right side of the Maintenance Domain";

-                    }

-                }

-                default left;

-                reference "IEEE 802.1Q-2014 Clause 18";

-            }

-

-            leaf name { //Microsemi specific configuration attribute

-                description "An identifier relating to the cfm-role that device plays in CFM.

-                        This could be the name of a customer or an operator for example";

-                type string {

-                    length "1..40";

-                    pattern "[a-zA-Z0-9\\-_. ,]*";

-                }

-                mandatory true;

-                reference "IEEE 802.1Q-2014 Clause 18";

-            }

-        }

-

-

-        list maintenance-domain {

-            key id;

-

-            max-elements 64;

-

-            description

-            "A Maintenance Domain managed object is required in order to create an MA

-            with a MAID that includes that Maintenance Domain's Name. From

-            this Maintenance Domain managed object, all Maintenance

-            Association managed objects associated with that Maintenance

-            Domain managed object can be accessed, and thus controlled.";

-            reference

-            "[802.1q] 12.14.5";

-

-            leaf id {

-                type uint8 {

-                    range 1..64;

-                }

-                description

-                "A unique identifier of a Maintenance Domain. Changed to uint8 from string";

-                reference

-                "[802.1q] 12.14.5";

-            }

-

-            choice md-name-and-type-combo {

-                description

-                "The value Maintenance Domain Name depends on name-type.

-                Since the name-type defines the format for name they are

-                combined together here";

-

-                mandatory true;

-

-                case name-none {

-                    leaf name-type-none {

-                        type empty;

-                        description "Indicates that name-type is none.

-                            When name-type is 'none' then the

-                            MA name can be up to 45 chars, because len

-                            of MD is not used";

-                        reference

-                        "[802.1q] 21.6.5.1 (Table 21-19), 12.14.5.3.2:a";

-//                        msea:not-changeable;

-                    }

-                }

-

-

-                case name-character-string {

-                    leaf name { //Keep the old name

-                        type msea:identifier45 {length 1..43;}

-

-                        description

-                        "When the name-type is 'character-string' then the name must be of

-                        type string (restricted to 43 chars - 48 bytes are allowed overall

-                        for the MD+MA incl 1 byte for type and 1 byte for len on each.

-                        Leaving 1 char for MA name, the max MD name is 43 chars)";

-                        reference

-                        "[802.1q] 21.6.5.1 (Table 21-19), 12.14.5.3.2:a";

-

-                        must "count(/msea-cfm:mef-cfm/msea-cfm:maintenance-domain[msea-cfm:name = current()]) <= 1" { 

-                            error-message "The MD 'name' (if specified) must be unique across all character string names of MDs on the device";

-                            error-app-tag "msea-cfm-must-05";

-                        }

-

-//                        msea:not-changeable;

-                    }

-                }

-

-                case name-domain-name {

-                    leaf name-domain-name {

-                        type union {

-                          type inet:ip-address;

-                          type inet:domain-name { length 1..43;    }

-                        }

-

-                        description "When the name-type is 'domain-name' then the name

-                                must be of type inet:host";

-                        reference

-                        "[802.1q] 21.6.5.1 (Table 21-19), 12.14.5.3.2:a";

-

-                        must "count(/msea-cfm:mef-cfm/msea-cfm:maintenance-domain[msea-cfm:name-domain-name = current()]) <= 1" { 

-                            error-message "The MD 'name-domain-name' (if specified) must be unique across all name-domain-names of MDs on the device";

-                            error-app-tag "msea-cfm-must-06";

-                        }

-//                        msea:not-changeable;

-                    }

-                }

-

-                case mac-address-and-uint {

-                    leaf name-mac-address-and-uint {

-                        type msea:mac-address-and-uint-str;

-                        description "When the name-type is 'mac-address-and-uint'

-                                then the name must be a colon separated mac

-                                address followed by a number between 0 and 65536

-                                e.g. AA:BB:CC:DD:EE:FF:65536

-                                The effective length when encoded is 8 bytes";

-                        reference

-                        "[802.1q] 21.6.5.1 (Table 21-19), 12.14.5.3.2:a";

-                        must "count(/msea-cfm:mef-cfm/msea-cfm:maintenance-domain[msea-cfm:name-mac-address-and-uint = current()]) <= 1" { 

-                            error-message "The MD 'name-mac-address-and-uint' (if specified) must be unique across all name-mac-address-and-uints of MDs on the device";

-                            error-app-tag "msea-cfm-must-07";

-                        }

-//                        msea:not-changeable;

-                    }

-                }

-            }

-

-            leaf md-level {

-                type msea:md-level-type;

-                mandatory true;

-

-//                msea:not-changeable;

-

-                description

-                "Integer identifying the Maintenance Domain Level (MD Level).  Higher

-                numbers correspond to higher Maintenance Domains, those with the

-                greatest physical reach, with the highest values for customers'

-                CFM PDUs. Lower numbers correspond to lower Maintenance

-                Domains, those with more limited physical reach, with the lowest

-                values for CFM PDUs protecting single bridges or physical links.

-                Changed to mandatory";

-

-                reference

-                "[802.1q] 12.14.5.1.3:b";

-            }

-

-            list maintenance-association {

-                key id;

-                max-elements 64;

-

-                description

-                "This list represents Maintenance Entity Groups (Y.1731) or

-                Maintenance Associations (802.1ag). MEGs/MAs are sets of

-                MEPs, each configured to the same service inside a common

-                OAM domain.";

-

-                leaf id {

-                    type uint8 {

-                        range 1..64;

-                    }

-                    description

-                    "A unique identifier of a Maintenance Association. Changed to uint8 from string";

-                    reference

-                    "[802.1q] 12.14.6";

-                }

-

-                choice ma-name-and-type-combo {

-                    description

-                    "The value Maintenance Association Name depends on name-type.

-                    Since the name-type defines the format for name, they are

-                    combined together here";

-

-                    mandatory true;

-

-                    case name-character-string {

-                        leaf name {

-                            type msea:identifier45;

-

-                            must "count(/msea-cfm:mef-cfm/msea-cfm:maintenance-domain[msea-cfm:id = current()/../../msea-cfm:id]/msea-cfm:maintenance-association[msea-cfm:name = current()]) <= 1" { 

-                                error-message "The MA 'name' (if specified) must be unique across all MAs within this MD";

-                                error-app-tag "msea-cfm-must-10";

-                            }

-

-                            must "string-length(current()/../../msea-cfm:name) + string-length(current()/../../msea-cfm:name-domain-name) + 8 * boolean(current()/../../msea-cfm:name-mac-address-and-uint) -1 * boolean(current()/../../msea-cfm:name-type-none) + string-length(current()) <= 44" {

-                                error-message "The MA 'name' and MD 'name' length together must not exceed 44 chars when MD is not name-type-none or 45 chars for MA name when MD is name-type-none";

-                                error-app-tag "msea-cfm-must-11";

-                            }

-

-//                            msea:not-changeable;

-

-                            description

-                            "When the name-type is 'character-string' then the name must be of

-                            type string. Length can be 45 when MD name-type is none (as 1 byte

-                            is used on each for type, and 1 byte used on MA for len out of an 

-                            allowed 48 bytes). When MD name-type is not 'none' then the 

-                            combined length of both is 44 chars)";

-                            reference

-                            "[802.1q] 12.14.5.3.2:b, 21.6.5.4 Table 21-20";

-                        }

-                    }

-

-                    case name-primary-vid {

-                        leaf name-primary-vid {

-                            type union {

-                                type enumeration {

-                                    enum 0 {description "0 to use the MA's VID";}

-                                }

-                                type msea:vlan-id-type;

-                            }

-//                            msea:not-changeable;

-

-                            must "count(/msea-cfm:mef-cfm/msea-cfm:maintenance-domain[msea-cfm:id = current()/../../msea-cfm:id]/msea-cfm:maintenance-association[msea-cfm:name-primary-vid = current()]) <= 1" {

-                                error-message "The MA 'name-primary-vid' (if specified) must be unique across all MAs within this MD";

-                                error-app-tag "msea-cfm-must-12";

-                            }

-

-                            must "string-length(current()/../../msea-cfm:name) + string-length(current()/../../msea-cfm:name-domain-name) + 2 <= 44" {

-                                error-message "The MA 'primary-vid' (2 octets) and MD 'name' length together must not exceed 44 bytes.";

-                                error-app-tag "msea-cfm-must-13";

-                            }

-

-                            description

-                            "When the name-type is 'primary-vid' then the name must be of type

-                            vlan-id-type";

-                            reference

-                            "[802.1q] 12.14.5.3.2:b, 21.6.5.4 Table 21-20";

-                        }

-                    }

-

-                    case name-uint16 {

-                        leaf name-uint16 {

-                            type uint16;

-//                            msea:not-changeable;

-

-                            must "count(/msea-cfm:mef-cfm/msea-cfm:maintenance-domain[msea-cfm:id = current()/../../msea-cfm:id]/msea-cfm:maintenance-association[msea-cfm:name-uint16 = current()]) <= 1" {

-                                error-message "The MA 'name-uint16' (if specified) must be unique across all MAs within this MD";

-                                error-app-tag "msea-cfm-must-14";

-                            }

-

-                            must "string-length(current()/../../msea-cfm:name) + string-length(current()/../../msea-cfm:name-domain-name) + 2 <= 44" {

-                                error-message "The MA 'name-uint16' (2 octets) and MD 'name' or 'name'domain-name' length together must not exceed 44 bytes";

-                                error-app-tag "msea-cfm-must-15";

-                            }

-

-                            description

-                            "When the name-type is 'uint16' then the name must be 0-65535";

-                            reference

-                            "[802.1q] 12.14.5.3.2:b, 21.6.5.4 Table 21-20";

-                        }

-                    }

-

-                    case name-rfc2685-vpn-id {

-                        leaf name-rfc2685-vpn-id {

-                            type binary {

-                                length 7;

-                            }

-//                            msea:not-changeable;

-

-                            must "count(/msea-cfm:mef-cfm/msea-cfm:maintenance-domain[msea-cfm:id = current()/../../msea-cfm:id]/msea-cfm:maintenance-association[msea-cfm:name-rfc2685-vpn-id = current()]) <= 1" { 

-                                error-message "The MA 'name-rfc2685-vpn-id' (if specified) must be unique across all MAs within this MD";

-                                error-app-tag "msea-cfm-must-16";

-                            }

-

-                            must "string-length(current()/../../msea-cfm:name) + string-length(current()/../../msea-cfm:name-domain-name) + 7 <= 44" {

-                                error-message "The MA 'name-rfc2685-vpn-id' (7 octets) and MD 'name' or 'name'domain-name' length together must not exceed 44 bytes";

-                                error-app-tag "msea-cfm-must-17";

-                            }

-

-

-                            description

-                            "When the name-type is 'rfc2685-vpn-id' then the name 

-                            must be of 7 bytes encoded as base64";

-                            reference

-                            "[802.1q] 12.14.5.3.2:b, 21.6.5.4 Table 21-20";

-                        }

-                    }

-

-                    case name-y1731-icc {

-                        leaf name-y1731-icc {

-                            type yang:yang-identifier {

-                                length 8..13;

-                            }

-

-//                            msea:not-changeable;

-

-                            must "boolean(/msea-cfm:mef-cfm/msea-cfm:maintenance-domain[msea-cfm:id = current()/../../msea-cfm:id]/msea-cfm:maintenance-association/msea-cfm:y1731-compliant)" {

-                                error-message "The MA 'name-y1731-icc' can only be specified if y1731-compliant is present";

-                                error-app-tag "msea-cfm-must-18";

-                            }

-

-                            must "count(/msea-cfm:mef-cfm/msea-cfm:maintenance-domain[msea-cfm:id = current()/../../msea-cfm:id]/msea-cfm:maintenance-association[msea-cfm:name-y1731-icc = current()]) <= 1" {

-                                error-message "The MA 'name-y1731-icc' (if specified) must be unique across all MAs within this MD";

-                                error-app-tag "msea-cfm-must-19";

-                            }

-

-                            must "boolean(/msea-cfm:mef-cfm/msea-cfm:maintenance-domain[msea-cfm:id = current()/../../msea-cfm:id]/msea-cfm:name-type-none)" {

-                                error-message "name-y1731-icc can only be specified when MD name type is name-type-none";

-                                error-app-tag "msea-cfm-must-20";

-                            }

-

-                            description

-                            "ICC-based MEG ID Format, thirteen octet field. It consists of two

-                            subfields: the ITU Carrier Code (ICC) followed by a unique MEG

-                            ID code (UMC). The ITU Carrier Code consists of 1-6

-                            left-justified characters, alphabetic, or leading alphabetic

-                            with trailing numeric. The UMC code immediately follows the ICC

-                            and shall consist of 7-12 characters, with trailing NULLs,

-                            completing the 13-character MEG ID Value. Changed type to yang-identifier";

-                            reference

-                            "[Y.1731] Annex A";

-                        }

-                    }

-

-                }

-

-                container y1731-compliant {

-                  presence "When present indicates compliance with Y-1731";

-//                  msea:not-changeable;

-

-                  must "boolean(/msea-cfm:mef-cfm/msea-cfm:maintenance-domain[msea-cfm:id = current()/../../msea-cfm:id]/msea-cfm:name-type-none)" {

-                      error-message "Parent MD must have a name-type-none when y1731-compilant is present";

-                      error-app-tag "msea-cfm-must-21";

-                  }

-

-                  description

-                    "A boolean flag to indicate whether the MEG ID/MAID for this MEG operates

-                     in conformance with 802.1q (if false) or Y.1731 (if true).

-                     When set to false:

-                      - The format of the MAID (Maintenance Association ID) is controlled

-                        by the name-type and name in the maintenance-association instance,

-                        and the name-type and name in the maintenance-domain instance.

-                      - The meg-id-format and meg-level leafs are ignored.

-                      - The level is controlled by the md-level leaf.

-                     When set to true:

-                      - The MEG shall be in a maintenance-domain where name-type has the value

-                        none(1).

-                      - The format of the MEG ID is as defined by meg-id-format.

-                      - The name-type in the maintenance-association is ignored.

-                      - The name leaf contains the MEG ID value unless the meg-id-format

-                        is set to 'icc-based' in which case it contains the value of the

-                        'icc-name-value' leaf

-                      - The md-level leaf is ignored, and the level is controlled

-                        by the meg-level leaf.";

-                  reference

-                    "[MEF31], MEF-SOAM-FM-MIB.mefSoamNetCfgY1731Compliant";

-                }

-

-                container component-list {

-

-                    description

-                    "A list of components each of which can be managed in a manner

-                    essentially equivalent to an 802.1Q bridge.

-                    Only one is allowed for Edge Assure, so changed to a container";

-                    reference

-                    "[802.1q] IEEE8021-CFM-V2-MIB.ieee8021CfmMaCompTable";

-

-                    leaf-list vid {

-                        type msea:vlan-id-type;

-//                        msea:not-changeable;

-

-                        must "current()/../tag-type != 'vlan-none'" {

-                            error-message "No VID should be specified when Tag Type is 'vlan-none'";

-                            error-app-tag "msea-cfm-must-25";

-                        }

-

-                        must "count(/msea-cfm:mef-cfm/msea-cfm:maintenance-domain[msea-cfm:id = current()/../../../id]/msea-cfm:maintenance-association/msea-cfm:component-list[msea-cfm:vid = current()]) <= 1" {

-                            error-message "The 'vid' (VLan ID) in a Maintenance Association must be unique in a Maintenance Domain";

-                            error-app-tag "msea-cfm-must-26";

-                        }

-

-                        max-elements 1;

-                        ordered-by user;

-

-                        description

-                        "The VID(s) monitored by this MA, or 0, if the MA is not attached to any

-                        VID. The first VID returned is the MA's Primary VID";

-                        reference

-                        "[802.1q] 12.14.5.3.2:b";

-                    }

-

-                    leaf tag-type {

-                        type enumeration {

-                            enum vlan-none {

-                                description "No tag applied";

-                            }

-                            enum vlan-ctag {

-                                description "Ctags applied";

-                            }

-                            enum vlan-stag {

-                                description "Stags applied";

-                            }

-                        }

-                        must "count(/msea-cfm:mef-cfm/msea-cfm:maintenance-domain/msea-cfm:maintenance-association/msea-cfm:component-list[msea-cfm:tag-type = 'vlan-none']) <= 1" {

-                            error-message "A maximum of 1 MA with tag-type = vlan_none can be specified across all MAs in the device";

-                            error-app-tag "msea-cfm-must-27";

-                        }

-

-                        must "(current() != 'vlan-none' and count(current()/../vid) = 1) or (current() = 'vlan-none' and count(current()/../vid) = 0)" {

-                            error-message "A 'vid' must exist when tag-type is vlan-ctag or vlan-stag and must not exist when tag-type is vlan-none";

-                            error-app-tag "msea-cfm-must-28";

-                        }

-

-                        mandatory true;

-//                        msea:not-changeable;

-                        description "The type of tag to apply to packets in this VLAN";

-                    }

-

-                } // end of component-list

-

-                leaf ccm-interval {

-                    type enumeration {

-                        enum 3.3ms {

-                            description "CCMs are sent every 3 1/3 milliseconds (300Hz).";

-                        }

-                        enum 10ms {

-                            description "CCMs are sent every 10 milliseconds.";

-                        }

-                        enum 100ms {

-                            description "CCMs are sent every 100 milliseconds.";

-                        }

-                        enum 1s {

-                            description "CCMs are sent every 1 second.";

-                        }

-                    }

-                    mandatory true;

-

-                    description

-                    "The interval between CCM transmissions to be used by all MEPs in the MA";

-                    reference

-                    "[802.1q] 12.14.6.1.3:e

-                    IEEE8021-CFM-MIB.Dot1agCfmCcmInterval";

-                }

-

-                leaf-list remote-meps {

-                    type msea:mep-id-type;

-                    max-elements 9; //The local MEP and up to 8 remote meps

-

-                    must "(count(/msea-cfm:mef-cfm/msea-cfm:maintenance-domain/msea-cfm:maintenance-association/msea-cfm:remote-meps) - count(/msea-cfm:mef-cfm/msea-cfm:maintenance-domain/msea-cfm:maintenance-association)) <= 64" {

-                        error-message "The maximum number of remote MEPs on the device across all MDs and MAs must not exceed 64";

-                        error-app-tag "msea-cfm-must-29";

-                    }

-

-                    description

-                    "A list of the MEPIDs of the MEPs in the MA. The list

-                        consists of the ids of the local MEP (defined below)

-                        and up to 8 remote meps. A maximum of 64 remote MEPs

-                        can be configured on all MAs on the device";

-                    reference

-                    "[802.1q] 12.14.6.1.3:g";

-                }

-

-                list maintenance-association-end-point {

-                    must "count(/msea-cfm:mef-cfm/msea-cfm:maintenance-domain/msea-cfm:maintenance-association/msea-cfm:maintenance-association-end-point) <= 64" {

-                        error-message "The maximum number of MEPs on the whole device must not exceed 64";

-                        error-app-tag "msea-cfm-must-30";

-                    }

-

-                    key "mep-identifier";

-

-                    max-elements 1; //Only one local MEP is allowed per MA

-

-                    description

-                    "The list of Maintenance association End Points in a specific Maintance Association.";

-

-                    leaf mep-identifier {

-                        type msea:mep-id-type;

-

-                        must "count(/msea-cfm:mef-cfm/msea-cfm:maintenance-domain[msea-cfm:id = current()/../../../msea-cfm:id]/msea-cfm:maintenance-association[msea-cfm:id = current()/../../msea-cfm:id]/msea-cfm:remote-meps[text() = current()]) = 1" {

-                            error-message "The MEP ID must be listed in the 'remote-meps' list for this MA";

-                            error-app-tag "msea-cfm-must-31";

-                        }

-

-                        description

-                        "Integer that is unique among all the MEPs in the same MA. Other

-                        definition is: a small integer, unique over a given

-                        Maintenance Association, identifying a specific Maintenance

-                        association End Point.";

-                        reference

-                        "[802.1q] 12.14.6.3.2:b";

-                    }

-

-                    leaf interface {

-                        type enumeration {

-                            enum eth0 {

-                                description "Optics/eth0/WAN - commonly the Carrier port.";

-                            }

-                            enum eth1 {

-                                description "Host/eth1/LAN  - commonly the System port.";

-                            }

-                        }

-

-                        must "count(/msea-cfm:mef-cfm/msea-cfm:maintenance-domain[msea-cfm:md-level = current()/../../../md-level]/msea-cfm:maintenance-association[msea-cfm:component-list/msea-cfm:vid = current()/../../component-list/vid]/msea-cfm:maintenance-association-end-point[msea-cfm:interface = current()]) <= 1" {

-                            error-message "The combination of 'md-level', 'vid', 'direction' and 'interface' must be unique for all MEPs on the system";

-                            error-app-tag "msea-cfm-must-32";

-                            description "Check that this interface is unique for all MEPs in this Maintenance Association. 

-                            The Maintanance Association already checks that the VID is unique for the Maintenance Domain.";

-                        }

-

-                        mandatory true;

-//                        msea:not-changeable;

-

-                        description

-                        "An interface, either a Bridge Port or an aggregated IEEE 802.3 port

-                        within a Bridge Port, to which the MEP is attached. Each interface in

-                        the system is uniquely identified by an interface-name. The structure

-                        and content of the name is outside the scope of this specification.

-

-                        Added restriction for Edge Assure that the interface name can only be eth0 or eth1";

-                        reference

-                        "[802.1q] 12.14.7.1.3:b";

-                    }

-

-                    leaf direction {

-                        type enumeration {

-                            enum down {

-                                description "Indicates when CFM frames are transmitted towards and 

-                                received from the wire.";

-                            }

-                        }

-                        default down;

-//                        msea:not-changeable;

-

-                        description

-                        "A value indicating the direction in which the MEP faces on the 

-                        interface. For EdgeAssure can only be 'down' Changed from

-                        mandatory to default = down";

-

-                        reference

-                        "[802.1q] 12.14.7.1.3:c";

-                    }

-

-                    leaf primary-vid {

-                        type union {

-                            type enumeration {

-                                enum 0 {description "0 to use the MA's VID";}

-                            }

-                            type msea:vlan-id-type;

-                        }

-

-                        must "current() = 0 or count(/msea-cfm:mef-cfm/msea-cfm:maintenance-domain[msea-cfm:id = current()/../../../id]/msea-cfm:maintenance-association[msea-cfm:id = current()/../../id]/msea-cfm:component-list/msea-cfm:vid[text() = current()]) = 1" {

-                            error-message "PrimaryVID of MEP must be either 0 or from the range of VIDs in component-list of the MA";

-                            error-app-tag "msea-cfm-must-33";

-                        }

-

-                        default 0;

-

-                        description

-                        "The Primary VID of the MEP. The value 0 indicates that either the

-                        Primary VID is that of the MEP's MA or that the MEP's MA is

-                        associated with no VID. Must be either 0 or from the range of VIDs in the

-                        component-list of this MA. Changed to default=0 from mandatory";

-                        reference

-                        "[802.1q] 12.14.7.1.3:d";

-                    }

-

-                    leaf administrative-state {

-                        type boolean;

-                        mandatory true;

-

-                        description

-                        "The administrative state of the MEP";

-                        reference

-                        "[802.1q] 12.14.7.1.3:e";

-                    }

-

-                    leaf mac-address {

-                        type yang:mac-address;

-                        config false;

-

-                        description

-                        "The MAC address of the MEP";

-                        reference

-                        "[802.1q] 12.14.7.1.3:i";

-                    }

-

-                    leaf ccm-ltm-priority {

-                        type msea:priority-type;

-                        mandatory true;

-

-                        description

-                        "The priority parameter for CCMs and LTMs transmitted by the MEP.";

-                        reference

-                        "[802.1q] 12.14.7.1.3:h";

-                    }

-

-                    container continuity-check {

-                        description

-                        "Data definitions related to the Continuity Check function.";

-

-                        leaf cci-enabled {

-                            type boolean;

-                            default false;

-

-                            description

-                            "Configuration of whether the MEP is or is not to generate CCMs";

-                            reference

-                            "[802.1q] 12.14.7.1.3:g";

-                        }

-

-                        leaf fng-state {

-                            type enumeration {

-                                enum reset {

-                                    description "No defect has been present since the

-                                    fng-reset-time timer expired, or since

-                                    the state machine was last reset.";

-                                }

-                                enum defect {

-                                    description "A defect is present, but not for a long enough 

-                                    time to be reported (fng-alarm-time).";

-                                }

-                                enum report-defect {

-                                    description "A momentary state during which the defect is 

-                                    reported by sending a fault-alarm notification,

-                                    if that action is enabled.";

-                                }

-                                enum defect-reported {

-                                    description "A defect is present, and some defect has been 

-                                    reported.";

-                                }

-                                enum defect-clearing {

-                                    description "No defect is present, but the fng-reset-time timer has

-                                    not yet expired.";

-                                }

-                            }

-                            default reset;

-                            config false;

-

-                            description

-                            "A value indicating the current state of the MEP Fault Notification

-                            Generator state machine";

-                            reference

-                            "[802.1q] 12.14.7.1.3:f, 20.35

-                            IEEE8021-CFM-MIB.Dot1agCfmFngState";

-                        }

-

-                        leaf lowest-fault-priority-defect {

-                            type fault-alarm-defect-type;

-

-                            description

-                            "The lowest priority defect that is allowed to generate a Fault

-                            Alarm.";

-

-                            default remote-mac-error;

-

-                            reference

-                            "[802.1q] 12.14.7.1.3:k";

-                        }

-

-                        leaf highest-priority-defect-found {

-                            type fault-alarm-defect-type;

-                            config false;

-

-                            description

-                            "Value indicating the highest-priority defect that has been 

-                            present since the MEP Fault Notification Generator state machine

-                            was last in the FNG_RESET state The non-existence of this

-                            leaf represents that no defect has been present since the

-                            last FNG_RESET state";

-                            reference

-                            "[802.1q] 12.14.7.1.3:n";

-                        }

-

-                        leaf fng-alarm-time {

-                            type yang:timeticks {

-                                range 250..1000;

-                            }

-                            default 250;

-

-                            description

-                            "The time that defects must be present before a Fault Alarm is 

-                            issued in hundredths of seconds";

-                            reference

-                            "[802.1q] 12.14.7.1.3:l, 20.33.3";

-                        }

-

-                        leaf fng-reset-time {

-                            type yang:timeticks {

-                                range 250..1000;

-                            }

-                            default 1000;

-

-                            description

-                            "The time that defects must be absent before resetting a Fault Alarm 

-                            in hundredths of seconds";

-                            reference

-                            "[802.1q] 12.14.7.1.3:m, 20.33.4";

-                        }

-

-                        leaf active-defects {

-                            type fault-alarm-defect-bits-type;

-                            config false;

-

-                            description

-                            "A bit field of potential active defects. The values are the same as the

-                            content of the fault-alarm-defect-type (except if it is 'none' then 

-                            nothing will be listed).";

-                            reference

-                            "[802.1q] 12.14.7.1.3:o, p, q, r, s";

-                        }

-

-                        leaf last-error-ccm {

-                            type binary {

-                                length "1..1522";

-                            }

-                            config false;

-

-                            description

-                            "The last-received CCM that triggered an invalid-ccm fault";

-                            reference

-                            "[802.1q] 12.14.7.1.3:t";

-                        }

-

-                        leaf last-cross-connect-ccm {

-                            type binary {

-                                length "1..1522";

-                            }

-                            config false;

-

-                            description

-                            "The last-received CCM that triggered a cross-connect-ccm fault";

-                            reference

-                            "[802.1q] 12.14.7.1.3:u";

-                        }

-

-                        leaf ccm-sequence-error-count {

-                            type yang:counter32;

-                            config false;

-                            mandatory true;

-

-                            description

-                            "The total number of out-of-sequence CCMs received from all remote

-                            MEPs.";

-                            reference

-                            "[802.1q] 12.14.7.1.3:v";

-                        }

-

-                        leaf sent-ccms {

-                            type yang:counter32;

-                            config false;

-                            mandatory true;

-

-                            description

-                            "The total number of CCMs transmitted.";

-                            reference

-                            "[802.1q] 12.14.7.1.3:w";

-                        }

-                    }

-

-                    container loopback {

-                        description

-                        "Data definitions related to the Loopback function.";

-

-                        //config false; Commented out to let config attribs on mef-soam-pm work 08Dec15 SC Microsemi 

-

-                        leaf replies-received {

-                            type yang:counter32;

-                            config false;

-                            mandatory true;

-

-                            description

-                            "The total number of valid, in-order LBRs received.";

-                            reference

-                            "[802.1q] 12.14.7.1.3:y";

-                        }

-

-                        leaf replies-transmitted {

-                            type yang:counter32;

-                            config false;

-                            mandatory true;

-

-                            description

-                            "The total number of LBRs transmitted.";

-                            reference

-                            "[802.1q] 12.14.7.1.3:ad";

-                        }

-                    } //End of loopback

-

-                    container remote-mep-database {

-                        config false;

-                        description

-                        "The MEP CCM database";

-

-                        list remote-mep {

-                            key remote-mep-id;

-                            description

-                            "The list of remote MEPs in the MEP CCM database";

-                            reference

-                            "[802.1q] 12.14.7.6";

-

-                            leaf remote-mep-id {

-                                type msea:mep-id-type;

-

-                                description

-                                "The MEPID of a remote MEP";

-                                reference

-                                "[802.1q] 12.14.7.6.2";

-                            }

-

-                            leaf remote-mep-state {

-                                type remote-mep-state-type;

-

-                                description

-                                "An enumerated value indicating the operational state of the 

-                                Remote MEP state machine for this remote MEP.";

-                                reference

-                                "[802.1q] 12.14.7.6.3:b

-                                IEEE8021-CFM-MIB.Dot1agCfmRemoteMepState";

-                            }

-

-                            leaf failed-ok-time {

-                                type yang:timeticks;

-

-                                description

-                                "The time (SysUpTime, IETF RFC 3418) at which the Remote MEP state

-                                machine last entered either the RMEP_FAILED or RMEP_OK

-                                state, or 0 if it has not yet entered either of those

-                                states";

-                                reference

-                                "[802.1q] 12.14.7.6.3:c";

-                            }

-

-                            leaf mac-address {

-                                type yang:mac-address;

-

-                                description

-                                "The MAC address of the remote MEP.";

-                                reference

-                                "[802.1q] 12.14.7.6.3:d";

-                            }

-

-                            leaf rdi {

-                                type boolean;

-

-                                description

-                                "An indication of the state of the RDI bit in the last received CCM,

-                                true for RDI = 1, or false for RDI = 0 or if none has been

-                                received.";

-                                reference

-                                "[802.1q] 12.14.7.6.3:e";

-                            }

-

-                            leaf port-status-tlv {

-                                type msea:port-status-type;

-

-                                description

-                                "The enumerated value from the Port Status TLV from the last 

-                                CCM received from the remote MEP.";

-                                reference

-                                "[802.1q] 12.14.7.6.3:f";

-                            }

-

-                            leaf interface-status-tlv {

-                                type msea:interface-status-type;

-

-                                description

-                                "The enumerated value from the Interface Status TLV from the 

-                                last CCM received from the remote MEP";

-                                reference

-                                "[802.1q] 12.14.7.6.3:g";

-                            }

-                        }

-                    } //end remote-mep-database

-

-

-                    container linktrace {

-                        config false;

-                        description

-                        "Data definitions related to the Linktrace function.";

-

-                        leaf unexpected-replies-received {

-                            type yang:counter32;

-

-                            description

-                            "The total number of unexpected LTRs received.";

-                            reference

-                            "[802.1q] 12.14.7.1.3:ac";

-                        }

-

-                        container linktrace-database {

-                            description

-                            "Data definitions related to the Linktrace database for a specific MEP";

-

-                            list linktrace {

-                                key "transaction-id";

-

-                                description

-                                "The list of entries in a Linktrace database.";

-

-                                uses linktrace-reply-grouping;

-                            }

-                        }

-                    } //End linktrace

-                }

-            }

-        }

-    }

-    //

-    // RPCs related to CFM

-    //

-

-    rpc transmit-loopback {

-        description

-        "Start a loopback session on a specific MEP

-

-        The counters in the loopback container of the associated MEP will be updated

-        with the result of the loopback session until the configured number of messages

-        have been sent.";

-//    reference --Removed as Tail-f NSO 4.1 can't handle references on RPCs. Also cannot remove using a deviate statement since reference is not a valid deviate sub-statement

-//      "[802.1q] 12.14.7.3";

-

-        input {

-            uses maintenance-association-end-point-reference; //Added 08Dec15 SC Microsemi

-

-            container target-address {

-                description

-                "Target MAC address or MEP ID for the Loopback session.";

-                uses target-address-group;

-            }

-

-            leaf number-of-messages {

-                type uint32 {

-                    range "1..1024";

-                }

-                default 1;

-

-                description

-                "The number of LBM transmissions in a session.";

-                reference

-                "[802.1q] 12.14.7.3.2:c, [MEF30] R39";

-            }

-

-            leaf data-tlv {

-                type binary;

-

-                description

-                "An arbitrary amount of data to be included in a Data TLV.";

-                reference

-                "[802.1q] 12.14.7.3.d, IEEE8021-CFM-MIB.dot1agCfmMepTransmitLbmDataTlv";

-            }

-

-            leaf vlan-priority {

-                type msea:priority-type;

-

-                description

-                "The priority parameter to be used in the transmitted LBMs";

-                reference

-                "[802.1q] 12.14.7.3.2:e";

-            }

-

-            leaf vlan-drop-eligible {

-                type boolean;

-                default true;

-

-                description

-                "The drop eligible parameter to be used in the transmitted LBMs";

-                reference

-                "[802.1q] 12.14.7.3.2:e";

-            }

-        }

-    }

-

-    rpc abort-loopback {

-        description

-        "Administratively abort a loopback session in progress on a specific MEP";

-//    reference --Removed as Tail-f NSO 4.1 can't handle references on RPCs. Also cannot remove using a deviate statement since reference is not a valid deviate sub-statement

-//      "[MEF30] 8.2, R28";

-

-        input {

-            uses maintenance-association-end-point-reference; //Added 08Dec15 SC Microsemi

-

-        }

-    }

-

-    rpc transmit-linktrace {

-        description

-        "Start a linktrace session on a specific remote MEP associated

-        with a local MEP.

-

-        This RPC will wait 6 seconds for the linktrace replies to be

-        gathered from remote MEP and any intermediate MIPs and will

-        display them in line. The information about the last linktrace

-        transaction will also be visible in the state data beneath the

-        local MEP until the next linktrace is run. Only one

-        instance of linktrace can be run at a time";

-        // reference

-        //      "[802.1q] 12.14.7.4";

-

-        input {

-            uses maintenance-association-end-point-reference; //Added 08Dec15 SC Microsemi

-

-            uses linktrace-parameters-group;

-        }

-

-        output {

-            anyxml data {

-                description "The complete response from the Linktrace

-                including the individual replies from remote MEPs

-                and any intermediate MIPs";

-            }

-        }

-    }

-

-

-    //

-    // Notifications related to CFM

-    //

-

-    notification fault-alarm {

-        description

-        "A notification that a specific MEP has a persistent defect condition.";

-        reference

-        "[802.1q] 12.14.7.7";

-

-        container alarm {

-            description

-            "Data definitions related to a persistent defect on a specific MEP.";

-

-            uses mep-notification-reference;

-

-            leaf remote-mep {

-                type msea:mep-id-type;

-                description "Remote MEP identifier";

-            }

-

-            leaf highest-defect {

-                type fault-alarm-defect-type;

-                description "The highest priority defect currently asserted when the alarm occurs on the MEP.";

-            }

-        }

-    }

-}

-

diff --git a/drivers/microsemi/ea1000yang/src/main/yang/msea-sa-filtering.yang b/drivers/microsemi/ea1000yang/src/main/yang/msea-sa-filtering.yang
deleted file mode 100644
index 72534a9..0000000
--- a/drivers/microsemi/ea1000yang/src/main/yang/msea-sa-filtering.yang
+++ /dev/null
@@ -1,149 +0,0 @@
-module msea-sa-filtering {
-
-    /*** NAMESPACE / PREFIX DEFINITION ***/
-
-    namespace "http://www.microsemi.com/microsemi-edge-assure/msea-sa-filtering";
-    prefix "msea-saf";
-
-    import ietf-inet-types {
-        prefix inet;
-        revision-date 2013-07-15;
-    }
-
-    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 add Source Address Filtering for IPv4 packets to
-    the Optics(eth0) port (only) of the Edge Assure device.
-
-    Copyright 2016 Microsemi Inc.
-    All rights reserved.";
-
-    revision "2016-04-12" {
-        description
-        "Initial version - Sean Condon, Microsemi";
-    }
-
-
-    container source-ipaddress-filtering {
-        presence "Supports IPv4 Source Address Filtering";
-
-        container interface-eth0 {
-
-            leaf filter-admin-state {
-                type enumeration {
-                    enum inactive {
-                        description "Source address filtering is inactive";
-                    }
-                    enum whitelist {
-                        description "Only IPv4 packets from the source
-                        address ranges are allowed in to the device on the
-                        Optics(eth0) port. All non IPv4 packets are not
-                        filtered by this whitelist";
-                    }
-                    enum blacklist {
-                        description "All IPv4 packets from the source 
-                        address ranges are blocked from entering the device 
-                        on the Optics(eth0) port. All other packets are not
-                        filtered by this blacklist";
-                    }
-                }
-                default inactive;
-                description "This attribute sets the address range to be used as
-                either a whitelist or a blacklist of IPv4 packets.
-                When activating the filter the user should be careful not to
-                block or exclude the management IP address of the manager";
-            }
-
-            list source-address-range {
-                key range-id;
-                max-elements 10;
-                unique ipv4-address-prefix;
-                unique name;
-
-                leaf range-id {
-                    type uint8 {
-                        range "1..10";
-                    }
-                }
-
-                leaf name {
-                    type string{
-                        length "1..45";
-                    }
-                    description "An optional name for the filter range";
-                }
-
-                leaf ipv4-address-prefix {
-                    type string {
-                      pattern
-                         '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
-                       +  '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
-                       + '/(([1-9])|(1[0-9])|(2[0-7]))';
-                    }
-
-                    mandatory true;
-//                    msea:not-changeable;
-
-                    description
-                     "The ipv4-address-prefix type represents an IPv4 address prefix
-                      in CIDR notation format. e.g. a.b.c.d/n
-
-                      It consists of an address part and a mask length part.
-                      The address part is only used up to the number of bits
-                      specified in the length (1-27, given after the slash).
-
-                      For example the value 10.10.159.211/20 will mean an
-                      effective range from 10.10.144.0 - 10.10.159.255 and
-                      a count of 2^12 = 4096. The last 12 bits (32-20=12)
-                      of the address is ignored because it is not within the
-                      mask length.";
-                }
-
-
-                container effective-address-range {
-                    config false;
-
-                    leaf start-of-range {
-                        type inet:ipv4-address-no-zone;
-                        description "The calculated start of the address range";
-                    }
-
-                    leaf end-of-range {
-                        type inet:ipv4-address-no-zone;
-                        description "The calculated end of the address range";
-                    }
-
-                    leaf count {
-                        type uint32;
-                        description "The number of IPv4 addresses that match the filter";
-                    }
-
-                    description "The effective start and end addresses calculated
-                    from the ipv4-address-prefix";
-                }
-
-                description "A set of address ranges to be either blacklisted or
-                whitelisted on ingress to the eth0(Optics) port of the device";
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/drivers/microsemi/ea1000yang/src/main/yang/msea-soam-fm.yang b/drivers/microsemi/ea1000yang/src/main/yang/msea-soam-fm.yang
deleted file mode 100644
index 35a95c9..0000000
--- a/drivers/microsemi/ea1000yang/src/main/yang/msea-soam-fm.yang
+++ /dev/null
@@ -1,545 +0,0 @@
-module msea-soam-fm {

-    

-  namespace "http://www.microsemi.com/microsemi-edge-assure/msea-soam-fm";

-  prefix "msea-soam-fm"; //MicroSemi EdgeAssure (msea)

-  

-  import ietf-yang-types {

-    prefix yang;

-    revision-date 2013-07-15;

-  }

-  

-  import msea-cfm {

-    prefix msea-cfm;

-  }

-  

-  import msea-types {

-    prefix msea;

-  }

-

-  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 is a fork of the original mef-soam-fm YANG Module defined in MEF 38

-    for the management of Ethernet Services Operations, Administration and

-    Maintenance for Fault Management and extends the Connectivity Fault

-    Management (CFM) YANG modules.

-    This fork is done specifically to suit the EdgeAssure which has some extra

-    constraints that are not handled by the original YANG.

-    

-    Copyright 2016 Microsemi Inc.

-    All rights reserved.";

-

-  revision "2016-02-29" {

-    description     

-     "Initial EdgeAssure version forked from mef-soam-fm@2012-04-16 - Sean Condon, Microsemi";

-    reference

-      "Service OAM Fault Management YANG Modules (MEF 38), April 2012";

-  }

-    

-  //

-  // Type definitions related to MEF SOAM FM

-  //

-

-  typedef operational-state-type {

-    type enumeration {

-      enum enabled {

-        description

-          "The MEP is able to provide OAM capabilities and has been set to

-           active via the 'administrative-state' leaf.";

-      }

-      enum disabled {

-        description

-          "The MEP is not able to provide OAM capabilities, for example

-           because it has been disabled via the administrative-state leaf,

-           has detected an operational failure condition, or has failed an

-           internal test.";

-      }

-      enum testing {

-        description

-          "The MEP has been placed into a test mode, either a troubleshooting

-           mode or ETH-Test 'Out-of-service' mode.";

-      }

-      enum unknown {

-        description

-          "The MEP is unable to report the operational state.";

-      }

-    }

-    description

-      "This attribute indicates the operational state (current capability) of

-       a MEP.";

-    reference

-      "[MEF7.1] 9.2.5";

-  }

-

- 

-

-  //

-  // Augments into CFM related to MEF SOAM FM

-  //

-  augment "/msea-cfm:mef-cfm/msea-cfm:maintenance-domain/msea-cfm:maintenance-association" {

-    description

-      "This set of data definitions represents the Maintenance Entity Group (Y.1731) 

-       configuration that is unique from the Maintenance Association.";

-

-    leaf meg-level {

-      type msea:md-level-type;

-      

-//      msea:not-changeable;

-      

-      must "../msea-cfm:y1731-compliant" {

-    	  error-message "meg-level can only be set when y1731-compliant is present";

-		  error-app-tag "msea-soam-fm-must-04";

-      }

-      

-      must "/msea-cfm:mef-cfm/msea-cfm:maintenance-domain[msea-cfm:id = current()/../../msea-cfm:id]/msea-cfm:md-level = current()" {

-    	  error-message "meg-level must be the same as its parent MD md-level";

-		  error-app-tag "msea-soam-fm-must-05";

-      }

-      

-      description

-        "This attribute indicates the MEG Level of the MEG. It has to be the same as the

-        MDs level, which is a way of ensuring that all MEG under this MD have the same level";

-      

-      reference

-        "[MEF31] MEF-SOAM-FM-MIB.mefSoamNetCfgMegLevel";      

-    }

-  }

-  

-  

-  

-  

-

-  augment "/msea-cfm:mef-cfm/msea-cfm:maintenance-domain/msea-cfm:maintenance-association/msea-cfm:component-list" {

-    description

-      "This set of data definitions extends the component list of the Maintenance

-       Entity Group (as defined in Y.1731) or Maintenance Association (as defined

-       in 802.1q)";

-    reference

-      "[MEF7.1] 9.2.2";

-

-    leaf mep-port-status-tlv-included {

-      type boolean;

-      default true;

-

-      description

-        "Indicates whether a Port Status TLV is included in CCM frame

-         transmission. A value of 'true' indicates that the Port Status

-         TLV is to be included. A value of 'false' indicates that the

-         Port Status TLV is not to be included.";

-      reference

-        "[MEF7.1] 9.2.2";

-    }

-

-    leaf mep-interface-status-tlv-included {

-      type boolean;

-      default true;

-

-      description

-        "Indicates whether a Interface Status TLV is included in CCM frame

-         transmission. A value of 'true' indicates that the Interface Status TLV

-         is to be included. A value of 'false' indicates that the Interface

-         Status TLV is not to be included.";

-      reference

-        "[MEF7.1] 9.2.2";

-    }

-  }

-  

-  

-  

-

-  augment "/msea-cfm:mef-cfm/msea-cfm:maintenance-domain/msea-cfm:maintenance-association/msea-cfm:maintenance-association-end-point" {

-    description

-      "This set of data definitions extends the MEG End Point (as described in

-       Y.1731) or Maintenance association End Point (as described in 802.1q)

-       defined in the MEF CFM module (MEF-CFM)";

-    reference

-      "[MEF7.1] 9.2.2";

-

-    leaf operational-state {

-      type operational-state-type;

-

-      config false;

-

-      description

-        "This attribute indicates the operational state (current capability) of

-         the MEP.";

-      reference

-        "[MEF7.1] 9.2.5";

-    }

-

-    leaf connectivity-status {

-      type enumeration {

-        enum active {

-        description

-          "Refers to the ability to exchange SOAM PDU frames among all the UNIs 

-           of an EVC.";

-        }

-        enum partially-active {

-        description

-          "Refers to the ability to exchange SOAM PDU frames among some but not

-           all the UNIs of an EVC.";

-        }

-        enum inactive {

-        description

-          "Refers to the ability to exchange SOAM PDU frames among any of the UNIs

-           of an EVC.";

-        }

-      }

-      config false;

-

-      description

-        "This attribute indicates the connectivity status for a MEP in an EVC

-         MEs. An 'active' MEP Connectivity Status refers to the ability

-         to exchange SOAM PDU frames among all the UNIs of an EVC. A

-         'partially-active' MEP Connectivity Status refers to the

-         ability to exchange SOAM PDU frames among some but not all the

-         UNIs of an EVC. An 'inactive' MEP Connectivity Status refers to

-         the inability to exchange SOAM PDU frames among any of the UNIs

-         of an EVC.";

-      reference

-        "[MEF7.1] 9.2.5";

-    }

-

-    leaf port-status {

-      type msea:port-status-type;

-      config false;

-

-      description

-        "An enumerated value of the Port status TLV sent in the last CCM from the

-         local MEP or the default value psNoPortStateTLV indicating no

-         CCM has been sent or no Port Status TLV has been sent.";

-      reference

-        "[802.1q] 17.5";

-    }

-

-    leaf interface-status {

-      type msea:interface-status-type;

-      config false;

-

-      description

-        "An enumerated value of the Interface status TLV sent in the last CCM

-         from the local MEP or the default value no-status-tlv

-         indicating no CCM has been sent or no Interface Status TLV has

-         been sent.";

-      reference

-        "[802.1q] 17.5";

-    }

-

-    leaf last-defect-sent {

-      type msea-cfm:fault-alarm-defect-bits-type;

-      config false;

-

-      description

-        "This attribute indicates the state of the previous MEP defects,

-         that was sent with the previous

-         mep-defect-alarm notification. It is always some *previous*

-         value of cfm:active-defects. Once an mep-defect-alarm is sent

-         the mep-defect-alarm that was sent in the notification

-         updates the contents of this leaf.

-

-         If no mep-defect-alarm notification has been sent the value of

-         this leaf is '0'.";

-      reference

-        "[MEF31] MEF-SOAM-FM-MIB.mefSoamMepStatusLastDefectSentStatus";

-    }

-

-    leaf rdi-transmit-status {

-      type boolean;

-      config false;

-

-      description

-        "Indicates whether the local MEP is generating a RDI bit in the CCM that

-         it transmits. A value of 'true' indicates that a RDI bit was

-         set in the last CCM that the MEP transmitted. A value of

-         'false' indicates that the last CCM transmitted by the MEP did

-         not set the RDI bit or that a CCM has never been transmitted by

-         the MEP.";

-      reference

-        "[MEF7.1] 9.2.2";

-    }

-

-  } //end of MEP augmentation

-

-

-  augment "/msea-cfm:mef-cfm/msea-cfm:maintenance-domain/msea-cfm:maintenance-association/msea-cfm:maintenance-association-end-point/msea-cfm:loopback" {

-    description

-      "This set of data definitions extends on-demand Ethernet OAM Fault

-       Management Loopback function (ETH-LB) as defined in Y.1731 and

-       802.1q and defined in MEF-CFM";

-    reference

-      "[MEF7.1] 9.3.2";

-

-    leaf multicast-enabled {

-      type boolean;

-      default false;

-

-      description

-        "This attribute specifies whether a MEP uses unicast or multicast

-         to send the ETH-LB messages (LBM). The 802.1ag standard only allows

-         unicast LBM. ITU-T Y.1731 allows LBM to be multicast. This attribute

-         allows the MEP to send either multicast or unicast LBM on a per MEP

-         basis.

-

-         The value 'true' indicates multicast is enabled.

-

-         The value 'false' indicates unicast is enabled.";

-      reference

-        "[MEF7.1] 9.3.2.1";

-    }

-

-    leaf interval {

-      type uint16 {

-        range "0..2096";

-      }

-      units milliseconds;

-      default 1000;

-

-      description

-        "This attribute specifies the period between LBM transmissions in an LB

-         Session. For an LB Session, the period for LBM transmission

-         is configurable in the range 0 and 2096 milliseconds . Granularity is 1 ms.


-         The transmission of the next LBM is not dependent upon the

-         reception the first LBR. The next LBM is sent out based upon

-         the interval count.

-

-         An interval count of '0' indicates that the subsequent LBM is sent

-         out with the minimum possible delay.";

-      reference

-        "[MEF7.1] 9.3.2.1";

-    }

-

-    leaf frame-size {

-      type uint16 {

-        range "64..9600";

-      }

-      units "bytes";

-

-      description

-        "This attribute specifies the LBM frame size. For an LB Session, the size

-         of the LBM frame is configurable to any Ethernet frame size

-         between 64 Bytes and the maximum transmission unit of the EVC.

-

-         The range of frame sizes from 64 through 2000 octets, in 4 octet increments,

-         MUST be supported, and the range of frame sizes from 2004 through 9600

-         octets, in 4 octet increments, SHOULD be supported.

-

-         The adjustment to the frame size of the standard LBM PDU size is accomplished

-         by the addition of a Data TLV or a Test TLV.";

-      reference

-        "[MEF7.1] 9.3.2.1";

-    }

-

-

-    leaf timeout {

-      type yang:gauge32 {

-        range "5000";

-      }

-      default 5000;

-

-      description

-        "This attribute specifies the maximum amount of time to receive an LBR in

-         response to a LBM. If a LBR is not received within the timeout

-         value it is considered lost.";

-      reference

-        "[MEF31] MEF-SOAM-FM-MIB.mefSoamLbCfgTimeout";

-    }

-

-    list responses {

-      key "receive-order";

-      config false;

-

-      description

-        "A list of responses from a Multicast Loopback Message. This are shown only when multicast is enabled";

-      reference

-        "[MEF31] MEF-SOAM-FM-MIB.mefSoamLbrMulticastTable";

-

-      leaf receive-order {

-        type int8;

-

-        description

-          "Loopback transaction identifier returned by a previous loopback message

-           command, indicating which loopback request is returned.";

-        reference

-          "[MEF31] MEF-SOAM-FM-MIB.mefSoamLbrMulticastTransId";

-      }

-      

-      leaf multicast-reply-mac {

-        type yang:mac-address;

-          

-        description

-          "Source MAC address returned in the LBR Ethernet frame";

-        reference

-          "[802.1q] 21.7, [Y.1731] 7.2,

-           [MEF31] MEF-SOAM-FM-MIB.mefSoamLbrMulticastReplyMac";

-      }

-    }

-  }

-  

-  

-  

-  augment "/msea-cfm:mef-cfm/msea-cfm:maintenance-domain/msea-cfm:maintenance-association/msea-cfm:maintenance-association-end-point/msea-cfm:linktrace" {

-		description

-		"Augments to support the enhanced CFM Linktrace functionality";

-		reference

-		"[MEF30] 8.4";

-

-		leaf ltm-msgs-transmitted {

-			type yang:zero-based-counter32;

-			config false;

-

-			description

-			"This attribute contains the count of the total number of LTM messages

-			transmitted by the MEP";

-			reference

-			"[MEF31] MEF-SOAM-FM-MIB.mefSoamLtLtmTransmitted";

-		}

-

-		leaf ltr-msgs-received {

-			type yang:zero-based-counter32;

-			config false;

-

-			description

-			"This attribute contains the count of the total number of LTR messages

-			received by the MEP";

-			reference

-			"[MEF31] MEF-SOAM-FM-MIB.mefSoamLtLtrReceived";

-		}

-

-		leaf ltm-msgs-received {

-			type yang:zero-based-counter32;

-			config false;

-

-			description

-			"This attribute contains the count of the total number of LTM messages

-			received by the MEP";

-			reference

-			"[MEF31] MEF-SOAM-FM-MIB.mefSoamLtLtmReceived";

-		}

-

-		leaf ltr-msgs-transmitted {

-			type yang:zero-based-counter32;

-			config false;

-

-			description

-			"This attribute contains the count of the total number of LTR messages

-			transmitted by the MEP";

-			reference

-			"[MEF31] MEF-SOAM-FM-MIB.mefSoamLtLtrTransmitted";

-		}

-	}

-

-

-  //

-  // Data definitions related to MEF SOAM FM

-  //

-  augment "/msea-cfm:mef-cfm" {

-	description 

-      "A set of data definitions related to FM event notifications.";

-    reference

-      "[MEF31] MEF-SOAM-FM-MIB.mefSoamFmNotificationCfg";

-	  

-	  container notification-configuration {

-		description

-		  "A set of data definitions related to FM event notifications.";

-		reference

-		  "[MEF31] MEF-SOAM-FM-MIB.mefSoamFmNotificationCfg";

-		

-		leaf active-alarms {

-			type bits {

-			  bit fault-alarm { 

-				  description "Send notifications when a specific MEP has a persistent defect condition";

-			  }

-

-			  bit mep-defect-alarm { 

-				  description "Send notifications when the value of mep-defects changes";

-			  }

-			  

-			  bit mep-operational-state-changed { 

-				  description "Send notifications when the value of a MEP's operational-state changes";

-			  }

-			}

-			description "Configure the fault notification generator to enable the alarms given in 

-				the bitmask list.";

-		}

-	  }

-  }

-

-  //

-  // Notifications related to MEF SOAM FM

-  //

-

-  notification mep-defect-alarm {

-    description

-      "A mep-defect-alarm notification is generated when the value of

-       mep-defects changes. It indicates a persistent defect in

-       the MEP. This notification is sent whenever the

-       cfm:active-defects of the MEP changes, regardless of the

-       cfm:highest-priority-defect-found leaf.

-

-       The inclusion of the cfm:remote-mep-state leaf is

-       optional. It shall not be included if the defect is not based

-       upon a specific MEP instance, e.g.. bDefErrorCCM.";

-

-    reference

-      "[MEF31] MEF-SOAM-FM-MIB.mefSoamMepDefectAlarm";

-

-	uses msea-cfm:mep-notification-reference;

-	

-	leaf remote-mep {

-		type msea:mep-id-type;

-		description "Remote MEP identifier";

-	}

-

-    leaf last-defect-sent {

-      type msea-cfm:fault-alarm-defect-type;

-

-      description

-        "The last defect sent on the specific MEP";

-    }

-    leaf active-defects {

-      type msea-cfm:fault-alarm-defect-bits-type;

-      description

-        "The currently active defects on the specific MEP.";

-    }

-    

-    leaf remote-mep-state {

-      type msea-cfm:remote-mep-state-type;

-

-      description

-        "The value of the remote MEP state on a specific MEP";      

-      reference

-        "[802.1q] 12.14.7.6.3:b";

-    }

-  }

-  

-  notification mep-operational-state-changed {

-    description

-      "A mep-operational-state-changed notification is sent when the value of a

-       MEP's operational-state changes. It indicates an operational

-       state change in the MEP. This notification is sent whenever the

-       operational status of the MEP changes.";

-    reference

-      "[MEF31] MEF-SOAM-FM-MIB.mefSoamMepOperStatusAlarm";

-

-	uses msea-cfm:mep-notification-reference;

-

-    leaf operational-state {

-      type operational-state-type;

-

-      description

-        "The operational-state leaf of the affected MEP";

-    }

-  }

-}

-

diff --git a/drivers/microsemi/ea1000yang/src/main/yang/msea-soam-pm.yang b/drivers/microsemi/ea1000yang/src/main/yang/msea-soam-pm.yang
deleted file mode 100644
index 21c05a6..0000000
--- a/drivers/microsemi/ea1000yang/src/main/yang/msea-soam-pm.yang
+++ /dev/null
@@ -1,1479 +0,0 @@
-module msea-soam-pm {

-

-	namespace "http://www.microsemi.com/microsemi-edge-assure/msea-soam-pm";

-	prefix "msea-soam-pm"; //MicroSemi EdgeAssure (msea)

-

-	import ietf-yang-types {

-		prefix yang;

-		revision-date 2013-07-15;

-	}

-

-	import msea-cfm {

-		prefix msea-cfm;

-	}

-

-	import msea-types {

-		prefix msea;

-	}

-

-	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 is a fork of the original mef-soam-pm YANG Module defined in MEF 39

-	for the management of Ethernet Services Operations, Administration and

-	Maintenance for Performance Monitoring and extends the Connectivity Fault

-	Management (CFM) YANG modules.

-	This fork is done specifically to suit the EdgeAssure which has some extra

-	constraints that are not handled by the original YANG.

-

-	Copyright 2016 Microsemi Inc.

-	All rights reserved.";

-

-	revision "2016-02-29" {

-		description

-		"Initial EdgeAssure version forked from mef-soam-pm@2012-04-16 - Sean Condon, Microsemi";

-		reference

-		"Service OAM Fault Management YANG Modules (MEF 39), April 2012";

-	}

-

-	//

-	// Type definitions related to MEF SOAM PM

-	//

-

-	typedef suspect-status-type {

-		type boolean;

-		description

-		"This boolean data type indicates whether the measurement interval

-		has been marked as suspect.

-

-		The object is set to false at the start of a measurement

-		interval. It is set to true when there is a discontinuity in the

-		performance measurements during the measurement interval.

-		Conditions for a discontinuity include, but are not limited to

-		the following:

-

-		1 - The local time-of-day clock is adjusted by at least 10

-		seconds

-		2 - The conducting of a performance measurement is halted before

-		the current measurement interval is completed

-		3 - A local test, failure, or reconfiguration that disrupts

-		service";

-		reference

-		"[MEF SOAM PM IA] R39, R40, 41 and R42";

-	}

-

-	typedef performance-monitoring-interval-type {

-		type uint32 {

-			range "3..3600000";

-		}

-		units ms;

-		description

-		"This integer data type indicates the transmission time between the

-		SOAM PM frames for session, in ms.";

-	}

-

-

-	typedef session-status-type {

-		type enumeration {

-			enum active {

-				description

-				"Indicates the measurement instance is active.";

-			}

-			enum not-active {

-				description

-				"Indicates the measurement instance is not active.";

-			}

-		}

-

-		description

-		"This enumeration data type defines the status of PM session of a MEP.";

-		reference

-		"MEF-SOAM-TC-MIB.MefSoamTcStatusType";

-	}

-

-

-	typedef measurement-bin-type {

-		type enumeration {

-			enum two-way-frame-delay {

-				description

-				"Indicates a measurement bin for two-way Frame Delay.";

-			}

-

-			enum two-way-inter-frame-delay-variation {

-				description

-				"Indicates a measurement bin for two-way Inter-frame Delay

-				Variation.";

-			}

-		}

-

-		description

-		"This enumeration data type indicates whether the bin number is for Frame

-		Delay and Inter-Frame Delay Variation.";

-		reference

-		"MEF-SOAM-TC-MIB.MefSoamTcDelayMeasurementBinType";

-	}

-

-	//

-	// Groupings related to MEF SOAM PM

-	//

-

-	grouping remote-mep-group {

-		description

-		"This grouping includes objects which identify a remote MEP.";

-		choice remote-mep {

-			mandatory true;

-			description

-			"The remote MEP can be identified by either a MAC address or a MEP ID";

-

-			case mac-address {

-				leaf mac-address {

-					type yang:mac-address;

-//					msea:not-changeable;

-

-					description

-					"The Target MAC Address Field to be transmitted: A unicast

-					destination MAC address.

-

-					This object is only valid for the entity transmitting the

-					SOAM Loss and Delay Measurement frames and is ignored by

-					the entity receiving SOAM Loss and Delay Measurement

-					frames.";

-				}

-			}

-			case mep-id {

-				leaf mep-id {

-					type leafref {

-						path "/msea-cfm:mef-cfm/msea-cfm:maintenance-domain/msea-cfm:maintenance-association/msea-cfm:remote-meps";

-					}

-//					msea:not-changeable;

-					

-					description

-					"The Maintenance Association End Point Identifier of another MEP in

-					the same Maintenance Association to which the SOAM Loss or Delay

-					Measurement frame is to be sent.

-

-					This object is only valid for the entity transmitting the

-					SOAM Loss Measurement or Delay Measurement frames and is

-					ignored by the entity receiving SOAM Loss Measurement or

-					Delay Measurement frames.";

-				}

-			}

-		}

-	}

-

-	grouping measurement-timing-group {

-		description

-		"This grouping includes objects used for proactive and on-demand

-		scheduling of PM measurement sessions.";

-

-		container start-time {

-			description

-			"This container defines the session start time";

-

-			choice start-time {

-				default immediate;

-				description

-				"Measurement session start time can be immediate, relative or

-				absolute.";

-

-				container immediate {

-					presence "Start the measurement session immediately.";

-

-					description

-					"This object specifies the start time to be immediately at the time

-					of session creation.";

-				}

-			}

-		}

-

-		container stop-time {

-			description

-			"This container defines the session stop time";

-

-			choice stop-time {

-				default none;

-				description

-				"Measurement session stop time can be none, relative or

-				absolute.";

-

-				container none {

-					presence "Never end the measurement session.";

-

-					description

-					"This object specifies the measurement session to never end.";

-				}

-			}

-		}

-	}

-

-	grouping loss-measurement-stats-group {

-		description

-		"This grouping includes statistics objects for a SOAM Loss Measurement

-		session.";

-

-		leaf suspect-status {

-			type suspect-status-type;

-

-			description

-			"Whether the Measurement Interval has been marked as suspect.

-

-			The object is set to false at the start of a measurement

-			interval. It is set to true when there is a discontinuity in

-			the performance measurements during the Measurement Interval.

-			Conditions for a discontinuity include, but are not limited to

-			the following:

-

-			1 - The local time-of-day clock is adjusted by at least 10 seconds

-			2 - The conducting of a performance measurement is halted before the

-			current Measurement Interval is completed

-			3 - A local test, failure, or reconfiguration that disrupts service";

-			reference

-			"MEF-SOAM-PM-MIB.mefSoamLmCurrentStatsSuspect";

-		}

-

-		leaf forward-transmitted-frames {

-			type yang:gauge32;

-			mandatory true;

-

-			description

-			"This object contains the number of frames transmitted in the forward

-			direction by this MEP.

-

-			For a PM Session of types lmm or ccm this includes Ethernet

-			Service Frames and SOAM PDUs that are in a higher MEG level

-			only.

-

-			For a PM Session of type slm this includes the count of SOAM

-			ETH-SLM frames only.";

-			reference

-			"MEF-SOAM-PM-MIB.mefSoamLmCurrentStatsForwardTransmittedFrames";

-		}

-

-		leaf forward-received-frames {

-			type yang:gauge32;

-			mandatory true;

-

-			description

-			"This object contains the number of frames received in the forward

-			direction by this MEP.

-

-			For a PM Session of types lmm or ccm this includes Ethernet

-			Service Frames and SOAM PDUs that are in a higher MEG level only.

-

-			For a PM Session of type slm this includes the count of SOAM

-			ETH-SLM frames only.";

-			reference

-			"MEF-SOAM-PM-MIB.mefSoamLmCurrentStatsForwardReceivedFrames";

-		}

-

-		leaf forward-average-frame-loss-ratio {

-			type uint32 {

-				range "0..100000";

-			}

-			units milli-percent;

-

-			description

-			"This object contains the average one-way frame loss ratio in the

-			forward direction calculated by this MEP for this Measurement

-			Interval. The FLR value is a ratio that is expressed as a

-			percent with a value of 0 (ratio 0.00) through 100000 (ratio

-					1.00).

-

-			Units are in milli-percent, where 1 indicates 0.001 percent.";

-			reference

-			"MEF-SOAM-PM-MIB.mefSoamLmCurrentStatsForwardAvgFlr";

-		}

-

-		leaf backward-transmitted-frames {

-			type yang:gauge32;

-			mandatory true;

-

-			description

-			"This object contains the number of frames transmitted in the backward

-			direction by this MEP.

-

-			For a PM Session of type lmm or ccm this includes Ethernet

-			Service Frames and SOAM PDUs that are in a higher MEG level

-			only.

-

-			For a PM Session of type slm this includes the count of SOAM

-			ETH-SLM frames only.";

-			reference

-			"MEF-SOAM-PM-MIB.mefSoamLmCurrentStatsBackwardTransmittedFrames";

-		}

-

-		leaf backward-received-frames {

-			type yang:gauge32;

-			mandatory true;

-

-			description

-			"This object contains the number of frames received in the backward

-			direction by this MEP.

-

-			For a PM Session of type lmm this includes Ethernet Service

-			Frames and SOAM PDUs that are in a higher MEG level only.

-

-			For a PM Session of type slm this includes the count of SOAM

-			ETH-SLM frames only.";

-			reference

-			"MEF-SOAM-PM-MIB.mefSoamLmCurrentStatsBackwardReceivedFrames";

-		}

-

-		leaf backward-average-frame-loss-ratio {

-			type uint32 {

-				range "0..100000";

-			}

-			units milli-percent;

-

-			description

-			"This object contains the average one-way frame loss ratio in the

-			backward direction calculated by this MEP for this Measurement

-			Interval. The FLR value is a ratio that is expressed as a

-			percent with a value of 0 (ratio 0.00) through 100000 (ratio

-					1.00).

-

-			Units are in milli-percent, where 1 indicates 0.001 percent.";

-			reference

-			"MEF-SOAM-PM-MIB.mefSoamLmCurrentStatsBackwardAvgFlr";

-		}

-

-		leaf soam-pdus-sent {

-			type yang:gauge32;

-			description

-			"This object contains the count of the number of SOAM PDUs sent during

-			this Measurement Interval.

-

-			This object applies when type is lmm, slm or ccm. It indicates

-			the number of LMM, CCM, or SLM SOAM frames transmitted.";

-			reference

-			"MEF-SOAM-PM-MIB.mefSoamLmCurrentStatsSoamPdusSent";

-		}

-

-		leaf soam-pdus-received {

-			type yang:gauge32;

-

-			description

-			"This object contains the count of the number of SOAM PDUs PDUs received

-			in this Measurement Interval.

-

-			This object applies when type is lmm, slm, or ccm. This object

-			indicates the number of LMR, CCM, or SLR SOAM frames received.";

-			reference

-			"MEF-SOAM-PM-MIB.mefSoamLmCurrentStatsSoamPdusReceived";

-		}

-	}

-

-	grouping delay-measurement-stats-group {

-		description

-		"This grouping includes statistics objects for a SOAM Delay Measurement

-		session.";

-

-		leaf suspect-status {

-			type suspect-status-type;

-			description

-			"Whether the Measurement Interval has been marked as suspect.

-

-			The object is to be set to false at the start of a measurement

-			interval. It is set to true when there is a discontinuity in

-			the performance measurements during the Measurement Interval.

-			Conditions for a discontinuity include, but are not limited to

-			the following:

-

-			1 - The local time-of-day clock is adjusted by at least 10 seconds

-			2 - The conducting of a performance measurement is halted before the

-			current Measurement Interval is completed

-			3 - A local test, failure, or reconfiguration that disrupts service";

-		}

-

-		leaf frame-delay-two-way-min {

-			type yang:gauge32;

-			units "μs";

-

-			description

-			"This object contains the minimum two-way frame delay calculated by this

-			MEP for this Measurement Interval.

-

-			This object is undefined if measurement-type is dm1-transmitted

-			or dm1-received.";

-		}

-

-		leaf frame-delay-two-way-max {

-			type yang:gauge32;

-			units "μs";

-

-			description

-			"This object contains the maximum two-way frame delay calculated by this

-			MEP for this Measurement Interval.

-

-			This object is undefined if measurement-type is dm1DmTx or

-			dm1-received.";

-		}

-

-		leaf frame-delay-two-way-average {

-			type yang:gauge32;

-			units "μs";

-

-			description

-			"This object contains the average two-way frame delay calculated by this

-			MEP for this Measurement Interval.

-

-			This object is undefined if measurement-type is dm1-transmitted or

-			dm1-received.";

-		}

-

-		leaf inter-frame-delay-variation-two-way-min {

-			type yang:gauge32;

-			units "μs";

-

-			description

-			"This object contains the minimum two-way inter-frame delay interval

-			calculated by this MEP for this Measurement Interval.

-

-			The value of this object is undefined when measurement-type is

-			dm1-transmitted or dm1-received.";

-		}

-

-		leaf inter-frame-delay-variation-two-way-max {

-			type yang:gauge32;

-			units "μs";

-

-			description

-			"This object contains the maximum two-way inter-frame delay interval

-			calculated by this MEP for this Measurement Interval.

-

-			The value of this object is undefined when measurement-type is

-			dm1-transmitted or dm1-received.";

-		}

-

-		leaf inter-frame-delay-variation-two-way-average {

-			type yang:gauge32;

-			units "μs";

-

-			description

-			"This object contains the average two-way inter-frame delay interval

-			calculated by this MEP for this Measurement Interval.

-

-			The value of this object is undefined when measurement-type is

-			dm1-transmitted or dm1-received.";

-		}

-

-		leaf soam-pdus-received {

-			type yang:gauge32;

-			description

-			"This object contains the count of the number of SOAM PDUs received in

-			this Measurement Interval.

-

-			This object indicates the number of DMR and 1DM SOAM frames

-			received. This object applies when measurement-type is dmm or

-			dm1-received and is undefined if measurement-type is

-			dm1-transmitted.";

-		}

-	}

-

-	grouping delay-measurement-bins-content-group {

-		description

-		"This grouping contains result measurement bin objects for a SOAM Delay

-		Measurement session.";

-

-		leaf type {

-			type measurement-bin-type;

-

-			description

-			"This object specifies whether the bin number is for Frame Delay and

-			Inter-Frame Delay Variation.";

-		}

-

-		leaf number {

-			type uint8 {

-				range "1..4";

-			}

-

-			description

-			"This object specifies the bin number for the configured boundary.  The

-			first bin has bin number 1.";

-		}

-

-		leaf lower-bound {

-			type yang:gauge32;

-			units "μs";

-

-			description

-			"This object specifies the lower boundary for a measurement bin. The

-			upper boundary is defined by the next bin value or infinite for

-			the last bin defined. The measurement boundary for each

-			measurement bin is to be larger than the measurement boundary

-			of the preceding measurement bin. By default, the next bin is

-			set to 5000us larger than the lower bin boundary.

-

-			The values in a bin boundary object represents the time range

-			used to segregate delay data into the appropriate statistical

-			data bin. For five bins with default values, each bin has the

-			following time range:

-

-			bin 1 = 0, range is 0us

-			bin 2 = 5000, range is 5,000us

-			bin 3 = 10000, range is 10,000us

-			bin 4 = 15000, range is 15,000us

-			bin 5 = 20000, range is 20,000us

-

-			The first bin boundary (number set to 1) always contains the

-			value of 0. Attempting to write a non-zero value to this bin

-			will result in an error.";

-		}

-

-		leaf counter {

-			type yang:gauge32;

-			config false;

-

-			description

-			"This object contains the count of the number of completed measurements

-			initiated in this Measurement Interval whose value falls within

-			the range specified for this bin (that is, greater than or

-					equal to the measurement boundary for the bin, and (unless the

-							bin is the last bin) less than the measurement boundary for the

-					following bin.";

-			reference

-			"MEF-SOAM-PM-MIB.mefSoamDmCurrentStatsBinsCounter";

-		}

-	}

-

-	grouping delay-measurement-bins-group {

-		description

-		"This grouping contains the top-level structure for the three types of

-		measurements (frame delay and inter frame delay variation)";

-

-		container bins {

-			description

-			"This container defines the bins content for FD, IFDR, and FDR

-			sessions.";

-

-			list frame-delay {

-				key "type number";

-				uses delay-measurement-bins-content-group;

-

-				description

-				"Data definitions related to frame delay bins content.";

-			}

-

-			list inter-frame-delay-variation {

-				key "type number";

-				uses delay-measurement-bins-content-group;

-

-				description

-				"Data definitions related to inter frame delay bins content.";

-			}

-

-		}

-	}

-	

-	

-	grouping bin-lower-limit-override-attribs {

-		

-		description 

-		"Bin 1 of each type will always be 0.

-		The upper limit of each bin will be defined by the lower

-		limit of the next bin. The upper limit of the last bin 

-		is unbounded.";

-		

-		leaf bin2-lower-limit {

-			type uint32 {

-				range "10..max";

-			}

-			units "μs";

-			must "current() < ../bin3-lower-limit" {

-				error-message "Bin 2 must be between 0 and bin 3 lower limit";

-				error-app-tag "msea-soampm-must-01";

-			}

-			description "The lower limit of the bin 2 in microseconds";

-		}

-

-		leaf bin3-lower-limit {

-			type uint32 {

-				range "10..max";

-			}

-			units "μs";

-			must "current() > ../bin2-lower-limit and current() < ../bin4-lower-limit" {

-				error-message "Bin 3 must be between bin 2 and bin 4 lower limits";

-				error-app-tag "msea-soampm-must-02";

-			}

-			description "The lower limit of the bin 3 in microseconds";

-		}

-

-		leaf bin4-lower-limit {

-			type uint32 {

-				range "10..max";

-			}

-			units "μs";

-			must "current() > ../bin3-lower-limit" {

-				error-message "Bin 4 must be greater than 3 lower limit";

-				error-app-tag "msea-soampm-must-03";

-			}

-			description "The lower limit of the bin 4 in microseconds";

-		}

-	}

-

-	//

-	// Augments into CFM related to MEF SOAM PM

-	//

-	

-	augment "/msea-cfm:mef-cfm/msea-cfm:pm-global" {

-		

-		description "High level attributes that apply to the whole device generally

-				or that apply equally across all instances of a child entity.

-				Delay measurement services should be stopped before changing 

-				these values, including the limit overrides";

-		

-		leaf dm-bins-per-fd-interval {

-			type uint16 {

-				range "4";

-			}

-			default 4;

-

-			description

-			"This object specifies the number of measurement bins per Measurement

-			Interval for Frame Delay measurements.

-

-			Fixed at 4.";

-		}

-

-		leaf dm-bins-per-ifdv-interval {

-			type uint16 {

-				range "4";

-			}

-			default 4;

-

-			description

-			"This object specifies the number of measurement bins per Measurement

-			Interval for Inter-Frame Delay Variation measurements.

-

-			Fixed at 4.";

-		}

-		

-			

-		container bin-lower-limit-override-two-way-frame-delay {

-

-			uses bin-lower-limit-override-attribs {

-				refine bin2-lower-limit {

-					default 10000;

-				}

-				refine bin3-lower-limit {

-					default 20000;

-				}

-				refine bin4-lower-limit {

-					default 37000;

-				}

-			}

-

-			description "Override of the default Measurement Bin default 

-					lower limits for Two Way Frame Delay.";

-

-		}

-

-		container bin-lower-limit-override-two-way-ifdv {

-

-			uses bin-lower-limit-override-attribs {

-				refine bin2-lower-limit {

-					default 3000;

-				}

-				refine bin3-lower-limit {

-					default 8000;

-				}

-				refine bin4-lower-limit {

-					default 100000;

-				}

-			}

-

-			description "Override of the default Measurement Bin default 

-					lower limits for Two Way Interframe Delay Variation.";

-		}

-	}

-	

-

-	augment "/msea-cfm:mef-cfm/msea-cfm:maintenance-domain/msea-cfm:maintenance-association" +

-	"/msea-cfm:maintenance-association-end-point" {

-		description

-		"This set of data definitions extends the MEG End Point (as described

-		Y.1731) or Maintenance End Point (as described in 802.1q) defined

-		in the MEF CFM module (MEF-CFM), specifically with regards to

-		Loss Measurement and Delay Measurement.";

-

-		container loss-measurements {

-			description

-			"This container contains a collection of data definitions related to

-			Loss Measurements.";

-

-			list loss-measurement {

-				key lm-id;

-				max-elements 16;

-

-				description

-				"A list of Loss Measurement PM Sessions where each instance is uniquely

-				identified by an id attribute.

-				This grouping includes configuration objects for the Frame Loss

-				Measurement function defined in [Y.1731] and [MEF SOAM PM IA].";

-				reference

-				"MEF-SOAM-PM-MIB.mefSoamLmCfgTable, [Y.1731] and [MEF SOAM PM IA]";

-

-				leaf lm-id {

-					type uint8 {

-						range 1..16;

-					}

-

-					description

-					"This object uniquely identifies a scheduled loss measurement.";

-				}

-				

-				must "count(/msea-cfm:mef-cfm/msea-cfm:maintenance-domain/msea-cfm:maintenance-association/msea-cfm:maintenance-association-end-point/msea-soam-pm:loss-measurement) <= 128" {

-					error-message "The maximum number of LMs on the whole device must not exceed 128";

-					error-app-tag "msea-soampm-must-04";

-				}

-

-				uses remote-mep-group;

-				uses measurement-timing-group;

-				

-				leaf administrative-state {

-					type boolean;

-					default false;

-

-					description

-					"The administrative state of the MEP. Setting to true starts this Loss Measurement";

-				}

-

-				leaf measurement-type {

-					type enumeration {

-						enum slm {

-							description

-							"SLM SOAM PDU generated and received SLR responses tracked.";

-						}

-					}

-					default slm;

-

-					description

-					"This object specifies what type of Loss Measurement will be

-					performed.";

-					reference

-					"MEF-SOAM-PM-MIB.mefSoamLmCfgType";

-				}

-

-				leaf version {

-					type enumeration {

-						enum Y.1731-2008 {

-							description

-							"Indicates the PDU formats defined in Y.1731-2008";

-						}

-					}

-					default Y.1731-2008;

-

-					description

-					"This object indicates the version of the PDUs used to perform Loss

-					Measurement.

-					The exact PDUs to use are specified by this object in

-					combination with measurement-type.";

-					reference

-					"MEF-SOAM-PM-MIB.mefSoamLmCfgVersion";

-				}

-

-				leaf enabled-counters {

-					type bits {

-						bit forward-transmitted-frames {description "Count the number of frames transmitted in the forward direction by this MEP";}

-						bit forward-received-frames {description "Count the number of frames received in the forward direction by this MEP";}

-						bit forward-average-flr {description "Calculate the average one-way frame loss ratio in the forward direction calculated by this MEP";}

-						bit backward-transmitted-frames {description "Count the number of frames transmitted in the backward direction by this MEP";}

-						bit backward-received-frames {description "Count the number of frames received in the backward direction by this MEP";}

-						bit backward-average-flr {description "Calculate the average one-way frame loss ratio in the backward direction calculated by this MEP";}

-						bit soam-pdus-sent {description "Count of the number of SOAM PDUs sent during this Measurement Interval";}

-						bit soam-pdus-received {description "Count of the number of SOAM PDUs received during this Measurement Interval";}

-				        bit measured-stats-forward-measured-flr {description "Measure the Frame Loss Ratio in the forward direction calculated by this MEP from the last received SOAM PDU";}

-				        bit measured-stats-backward-measured-flr {description "Measure the Frame Loss Ratio in the backward direction calculated by this MEP from the last received SOAM PDU";}

-

-					}

-					default "";

-

-//					msea:not-changeable;

-					

-					description

-					"A vector of bits that indicates the type of SOAM LM counters found in

-					the current-stats and history-stats that are enabled.

-

-					A present bit enables the specific SOAM LM counter. A not present

-					bit disables the SOAM LM counter.

-

-					If a particular SOAM LM counter is not supported the BIT value

-					is not present.

-

-					Not all SOAM LM counters are supported for all SOAM LM types. ";

-					reference

-					"MEF-SOAM-PM-MIB.mefSoamLmCfgMeasurementEnable";

-				}

-

-				leaf message-period {

-					type enumeration {

-						enum 1000ms {

-							description "The default 1000ms message period for LM";

-						}

-						enum 100ms {

-							description "100ms message period for LM";

-						}

-						enum 10ms {

-							description "10ms message period for LM";

-						}

-						enum 3ms {

-							description "3ms message period for LM";

-						}

-					}

-					default 1000ms;

-//					msea:not-changeable;

-

-					description

-					"This object specifies the interval between Loss Measurement OAM message

-					transmission. For Loss Measurement monitoring applications the

-					default value is 1 sec.

-

-					This object is not applicable if measurement-type is set to

-					'ccm' and is ignored for that Loss Measurement Type.";

-					reference

-					"MEF-SOAM-PM-MIB.mefSoamLmCfgMessagePeriod";

-				}

-

-				leaf priority {

-					type msea:priority-type;

-					mandatory true;

-//					msea:not-changeable;

-

-					must "count(/msea-cfm:mef-cfm/msea-cfm:maintenance-domain[msea-cfm:id = current()/../../../../../msea-cfm:id]/msea-cfm:maintenance-association[msea-cfm:id = current()/../../../../msea-cfm:id]/msea-cfm:maintenance-association-end-point[msea-cfm:mep-identifier=current()/../../../msea-cfm:mep-identifier]/msea-soam-pm:loss-measurements/msea-soam-pm:loss-measurement[msea-soam-pm:priority=current()]) <= 1" {

-						error-message "The priority of a Loss Measurement must be unique within its MEP";

-						error-app-tag "msea-soampm-must-05";

-					}

-

-					description

-					"This object specifies the priority of frames with Performance

-					Monitoring OAM message information.";

-					reference

-					"MEF-SOAM-PM-MIB.mefSoamLmCfgPriority";

-				}

-

-				leaf frame-size {

-					type uint32 {

-						range "64 .. 9600";

-					}

-					units bytes;

-					default 64;

-//					msea:not-changeable;

-

-					description

-					"This object specifies the Loss Measurement frame size between 64 bytes

-					and the maximum transmission unit of the EVC.

-

-					The range of frame sizes from 64 through 2000 octets need to be

-					supported, and the range of frame sizes from 2001 through 9600

-					octets is suggested be supported.

-

-					The adjustment to the frame size of the standard frame size is

-					accomplished by the addition of a Data or Test TLV. A Data or

-					Test TLV is only added to the frame if the frame size is greater

-					than 64 bytes.";

-					reference

-					"MEF-SOAM-PM-MIB.mefSoamLmCfgFrameSize";

-				}

-

-				leaf measurement-interval {

-					type uint32 {

-						range "1..525600";

-					}

-					units minutes;

-					default 15;

-//					msea:not-changeable;

-

-					description

-					"This object specifies the Measurement Interval for FLR statistics, in

-					minutes.

-

-					A Measurement Interval of 15 minutes needs to be supported,

-					other intervals may be supported.";

-					reference

-					"MEF-SOAM-PM-MIB.mefSoamLmCfgMeasurementInterval";

-				}

-				

-			    leaf number-intervals-stored {

-			      type uint32 {

-			        range "32";

-			      }

-			      default 32;

-			      

-			      description 

-			        "This object specifies the number of completed measurement intervals to

-			         store in the history statistic table.

-			                 

-			         At least 32 completed measurement intervals are to be

-			         stored.";

-			      reference

-			        "MEF-SOAM-PM-MIB.mefSoamLmCfgNumIntervalsStored";

-			    }

-

-				leaf number-intervals-returned {

-					type uint32 {

-						range "2..32";

-					}

-					default 32;

-

-					description

-					"This object specifies the number of completed measurement intervals to

-					return from the history statistic table.

-					The number stored on the device is fixed at 32";

-				}

-

-				leaf session-status {

-					type session-status-type;

-					config false;

-

-					description

-					"This object indicates the current status of the LM session. A value

-					of 'active' indicates the current LM session is active,

-					i.e. the current time lies between the start time and the

-					stop time, and enabled is true. A value of 'not-active'


-					indicates the current LM session is not active, i.e. it has

-					not started yet, has stopped upon reaching the stop time,

-					or is disabled.";

-				}

-

-				leaf measured-forward-flr {

-					type yang:gauge32 {

-						range "0..100000";

-					}

-					units milli-percent;

-					config false;

-

-					description

-					"This object contains the Frame Loss Ratio in the forward direction

-					calculated by this MEP from the last received SOAM PDU. The

-					FLR value is a ratio that is expressed as a percent with a

-					value of 0 (ratio 0.00) through 100000 (ratio 1.00).

-

-					Units are in milli-percent, where 1 indicates 0.001

-					per-cent.";

-					reference

-					"MEF-SOAM-PM-MIB.mefSoamLmMeasuredStatsForwardFlr";

-				}

-

-				leaf measured-backward-flr {

-					type yang:gauge32 {

-						range "0..100000";

-					}

-					units milli-percent;

-					config false;

-

-					description

-					"This object contains the Frame Loss Ratio in the backward direction

-					calculated by this MEP from the last received SOAM PDU. The

-					FLR value is a ratio that is expressed as a percent with a

-					value of 0 (ratio 0.00) through 100000 (ratio 1.00).

-

-					Units are in milli-percent, where 1 indicates 0.001

-					percent.";

-					reference

-					"MEF-SOAM-PM-MIB.mefSoamLmMeasuredStatsBackwardFlr";

-				}

-

-				container current-measurement-stats {

-					config false;

-

-					description

-					"This container contains the results for the current Measurement

-					Interval in a SOAM Loss Measurement session gathered during

-					the interval indicated by measurement-interval.";

-

-					leaf id {

-						type uint32;

-

-						description

-						"The index for the current Measurement Interval for this PM

-						session. This value will become the value for id of the

-						history-measurement-stats list once the Measurement

-						Interval is completed.";

-					}

-

-					leaf start-time {

-						type yang:date-and-time;

-						mandatory true;

-

-						description

-						"The time that the current Measurement Interval started.";

-					}

-

-					leaf elapsed-time {

-						type uint32 {

-							range "0..2147483647";

-						}

-						units "0.01s";

-						mandatory true;

-

-						description

-						"The time that the current Measurement Interval has been running,

-						in 0.01 seconds.";

-					}

-

-					uses loss-measurement-stats-group;

-				}

-

-				list history-measurement-stats {

-					key id;

-					config false;

-					description

-					"This list contains the results for history Measurement

-					Intervals in a SOAM Loss Measurement session.";

-

-					leaf id {

-						type uint32;

-

-						description

-						"The index for the Measurement Interval within this

-						PM session.";

-					}

-

-					leaf end-time {

-						type yang:date-and-time;

-						mandatory true;

-

-						description

-						"The time that the Measurement Interval ended.";

-					}

-

-					leaf elapsed-time {

-						type uint32 {

-							range "0..2147483647";

-						}

-						mandatory true;

-

-						description

-						"The length of time that the Measurement Interval ran for,

-						in 0.01 seconds.";

-					}

-

-					uses loss-measurement-stats-group;

-				}

-			}

-		}

-

-		container delay-measurements {

-			description

-			"This container contains a collection of data definitions related to

-			Delay Measurements. The measurements are persisted as config data

-			with results being retrieved from the device as needed";

-

-			list delay-measurement {

-				key dm-id;

-				max-elements 16;

-

-				description

-				"A list of Delay Measurements where each instance is

-				uniquely identified by an id attribute.

-				This includes configuration objects for the Delay Measurement

-				function defined in [Y.1731] and [MEF SOAM PM IA].";

-				reference

-				"MEF-SOAM-PM-MIB.mefSoamDmCfgTable, [Y.1731], and [MEF SOAM PM IA].";

-

-				leaf dm-id {

-					type uint8 {

-						range 1..16;

-					}

-

-					description

-					"This object uniquely identifies a scheduled delay measurement.";

-				}

-				

-				must "count(/msea-cfm:mef-cfm/msea-cfm:maintenance-domain/msea-cfm:maintenance-association/msea-cfm:maintenance-association-end-point/msea-soam-pm:delay-measurement) <= 128" {

-					error-message "The maximum number of DMs on the whole device must not exceed 128";

-					error-app-tag "msea-soampm-must-06";

-				}

-

-				uses remote-mep-group;

-				uses measurement-timing-group;

-

-				leaf administrative-state {

-					type boolean;

-					default false;

-

-					description

-					"The administrative state of the MEP. Setting to true starts this Delay Measurement";

-				}

-

-				leaf measurement-type {

-					type enumeration {

-						enum dmm {

-							description

-							"DMM SOAM PDU generated, DMR responses received (one-way or two-way

-							measurements).";

-						}

-					}

-					default dmm;

-

-					description

-					"This object indicates what type of Delay Measurement is to be

-					performed.

-

-					The exact PDUs to use are specified by this object in

-					combination with version.";

-				}

-

-				leaf version {

-					type enumeration {

-						enum Y.1731-2011 {

-							description

-							"Indicates the PDU formats defined in Y.1731-2011.";

-						}

-					}

-					default Y.1731-2011;

-

-					description

-					"This object indicates the version of the PDUs used to perform Delay

-					Measurement.

-

-					The exact PDUs to use are specified by this object in

-					combination with measurement-type.";

-					reference

-					"[Y.1731]";

-				}

-

-				leaf measurement-enable {

-					type bits {

-						bit soam-pdus-received {description "Count of the number of SOAM PDUs received";}

-						bit frame-delay-two-way-bins {description "Capture the two-way frame delay in bins";}

-						bit frame-delay-two-way-min {description "Capture the minimum two-way frame delay";}

-						bit frame-delay-two-way-max {description "Capture the maximum two-way frame delay";}

-						bit frame-delay-two-way-average {description "Calculate the average two-way frame delay";}

-						bit inter-frame-delay-variation-two-way-bins {description "Capture the two-way inter-frame-delay-variation in bins";}

-						bit inter-frame-delay-variation-two-way-min {description "Capture the minimum inter-frame-delay-variation frame delay";}

-						bit inter-frame-delay-variation-two-way-max {description "Capture the maximum inter-frame-delay-variation frame delay";}

-						bit inter-frame-delay-variation-two-way-average {description "Calculate the average inter-frame-delay-variation frame delay";}

-					}

-					default "";

-//					msea:not-changeable;

-

-					description

-					"A vector of bits that indicates the type of SOAM DM counters that

-					are enabled.

-

-					A present bit enables the specific SOAM DM counter.

-

-					A not present bit disables the SOAM DM counter.

-

-					If a particular SOAM DM counter is not supported the BIT value

-					is not present.

-

-					Not all SOAM DM counters are supported for all SOAM DM types.";

-				}

-

-				leaf message-period {

-					type enumeration {

-						enum 1000ms {

-							description "1000ms message period for DM";

-						}

-						enum 100ms {

-							description "100ms message period for DM";

-						}

-						enum 10ms {

-							description "10ms message period for DM";

-						}

-						enum 3ms {

-							description "3ms message period for DM";

-						}

-					}

-					default 100ms;

-//					msea:not-changeable;

-

-					description

-					"This object specifies the interval between Delay Measurement OAM

-					message transmission. For Delay Measurement monitoring applications,

-					the default value is 100ms.";

-				}

-

-				leaf priority {

-					type msea:priority-type;

-					mandatory true;

-//					msea:not-changeable;

-

-					description

-					"This object specifies the priority of frames with Performance

-					Monitoring OAM message information.";

-				}

-

-				leaf frame-size {

-					type uint32 {

-						range "64 .. 9600";

-					}

-					default 64;

-//					msea:not-changeable;

-

-					description

-					"This object specifies the Delay Measurement frame size between 64 bytes

-					and the maximum transmission unit of the EVC.

-

-					The range of frame sizes from 64 through 2000 octets need to be

-					supported, and the range of frame sizes from 2001 through 9600

-					octets is suggested to be supported.

-

-					The adjustment to the frame size of the standard frame size is

-					accomplished by the addition of a Data or Test TLV. A Data or

-					Test TLV is only added to the frame if the frame size is

-					greater than 64 bytes.";

-				}

-

-				leaf measurement-interval {

-					type uint32 {

-						range "1..1440";

-					}

-					units minutes;

-					default 15;

-//					msea:not-changeable;

-

-					description

-					"This object specifies a Measurement Interval in minutes.

-

-					A Measurement Interval 15 minutes needs to be supported, other

-					intervals may be supported.";

-					reference

-					"MEF-SOAM-PM-MIB.mefSoamDmCfgMeasurementInterval";

-				}

-

-			    leaf number-intervals-stored {

-			      type uint32 {

-			        range "32";

-			      }

-			      default 32;

-			      description 

-			        "This object specifies the number of completed measurement intervals to

-			         store in the history statistic table.

-			                 

-			         At least 32 completed measurement intervals are to be

-			         stored.";

-			      reference

-			        "MEF-SOAM-PM-MIB.mefSoamLmCfgNumIntervalsStored";

-			    }

-

-				leaf number-intervals-returned {

-					type uint32 {

-						range "2..32";

-					}

-					default 32;

-

-					description

-					"This object specifies the number of completed measurement intervals to

-					return from the history statistic table.

-					The number of intervals stored is fixed at 32 on the device";

-

-				}

-

-				leaf session-status {

-					type session-status-type;

-					config false;

-

-					description

-					"This object indicates the current status of the DM session. A value

-					of 'active' indicates the current DM session is active,

-					i.e. the current time lies between the start time and the

-					stop time, and enabled is true. A value of 'not-active'


-					indicates the current DM session is not active, i.e. it has

-					not started yet, has stopped upon reaching the stop time,

-					or is disabled.";

-				}

-

-				leaf frame-delay-two-way {

-					type yang:gauge32;

-					units microseconds;

-					config false;

-

-					description

-					"This object contains the two-way frame delay calculated by this MEP

-					from the last received SOAM PDU.

-

-					This object is undefined is measurement-type is

-					dm1-transmitted or dm1-received.";

-					reference

-					"MEF-SOAM-PM-MIB.mefSoamDmMeasuredStatsFrameDelayTwoWay";

-				}

-

-				leaf inter-frame-delay-variation-two-way {

-					type yang:gauge32;

-					units microseconds;

-					config false;

-

-					description

-					"This object contains the last two-way inter-frame delay interval

-					calculated by this MEP.

-

-					The value of this object is undefined when measurement-type

-					is dm1-transmitted or dm1-received.";

-					reference

-					"MEF-SOAM-PM-MIB.mefSoamDmMeasuredStatsIfdvTwoWay";

-				}

-

-				container current-stats {

-					config false;

-

-					description

-					"This container contains the results for the current Measurement

-					Interval in a SOAM Delay Measurement session gathered

-					during the interval indicated by measurement-interval.";

-

-					leaf id {

-						type uint32;

-

-						description

-						"The index for the current Measurement Interval for this PM

-						session. This value will become the value for id of the

-						history-measurement-stats list once the Measurement

-						Interval is completed.";

-					}

-					

-					leaf start-time {

-						type yang:date-and-time;

-						mandatory true;

-

-						description

-						"The time that the current Measurement Interval started.";

-					}

-

-					leaf elapsed-time {

-						type uint32 {

-							range "0..2147483647";

-						}

-						mandatory true;

-

-						description

-						"The time that the current Measurement Interval has been running,

-						in 0.01 seconds.";

-					}

-

-					uses delay-measurement-stats-group;

-					uses delay-measurement-bins-group;

-				}

-

-				list history-stats {

-					key id;

-					config false;

-					description

-					"This list contains the results for history Measurement Intervals in

-					a SOAM Delay Measurement session.";

-

-					leaf id {

-						type uint32;

-

-						description

-						"The identifier for the Measurement Interval within this

-						PM session.";

-					}

-

-					leaf end-time {

-						type yang:date-and-time;

-						mandatory true;

-

-						description

-						"The time that the Measurement Interval ended.";

-					}

-

-					leaf elapsed-time {

-						type uint32 {

-							range "0..2147483647";

-						}

-						mandatory true;

-

-						description

-						"The length of time that the Measurement Interval ran for, in 0.01

-						seconds.";

-					}

-

-					uses delay-measurement-stats-group;

-					uses delay-measurement-bins-group;

-				}

-			}

-		}

-	}

-

-	//

-	// RPCs related to MEF SOAM PM

-	//

-	

-  rpc clear-loss-history-stats {

-	description 

-	  "Clear the Loss Measurement history list (history-availability-stats and

-	   history-measurement-stats) for a specific session. All instance

-	   data is deleted.";

-

-	input {

-	  uses msea-cfm:maintenance-association-end-point-reference {

-		  refine maintenance-domain { 

-			  mandatory true; 

-		  }

-		  refine maintenance-association { 

-			  mandatory true; 

-		  }

-		  refine maintenance-association-end-point { 

-			  mandatory true; 

-		  }

-	  }

-

-	  leaf lm-id {

-		type leafref {

-			path "/msea-cfm:mef-cfm/msea-cfm:maintenance-domain/msea-cfm:maintenance-association/msea-cfm:maintenance-association-end-point/msea-soam-pm:loss-measurements/msea-soam-pm:loss-measurement/msea-soam-pm:lm-id";

-		}

-		mandatory true;

-

-		description

-		  "The LM ID of the loss measurement session of which the loss

-		   measurement history should be cleared";

-	  }

-	}

-  }

-

-	

-	

-	

-  rpc clear-delay-history-stats {

-	description 

-	  "Clear the Delay Measurement history list (history-stats) for a specific

-	   session. All instance data is deleted.";

-

-	input {

-		uses msea-cfm:maintenance-association-end-point-reference { //Added to specify the MEP SC 10-Dec-15

-		  refine maintenance-domain { 

-			  mandatory true; 

-		  }

-		  refine maintenance-association { 

-			  mandatory true; 

-		  }

-		  refine maintenance-association-end-point { 

-			  mandatory true; 

-		  }

-		}

-

-

-	  leaf dm-id {

-		type leafref {

-			path "/msea-cfm:mef-cfm/msea-cfm:maintenance-domain/msea-cfm:maintenance-association/msea-cfm:maintenance-association-end-point/msea-soam-pm:delay-measurements/msea-soam-pm:delay-measurement/msea-soam-pm:dm-id";

-		}

-		mandatory true;

-

-		description

-		  "The DM ID of the loss measurement session of which the loss

-		   measurement history should be cleared";

-	  }

-	}

-  }

-

-	//

-	// Notifications related to MEF SOAM PM

-	//

-

-}

-

diff --git a/drivers/microsemi/ea1000yang/src/main/yang/msea-types.yang b/drivers/microsemi/ea1000yang/src/main/yang/msea-types.yang
deleted file mode 100644
index 8b05aac..0000000
--- a/drivers/microsemi/ea1000yang/src/main/yang/msea-types.yang
+++ /dev/null
@@ -1,385 +0,0 @@
-module msea-types {

-    

-  namespace "http://www.microsemi.com/microsemi-edge-assure/msea-types";

-  prefix "msea-types"; //MicroSemi EdgeAssure (msea)

-

-  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 module contains a collection of generally useful derived

-    YANG data types for VLans and Meps and such.

-	

-    Copyright 2016 Microsemi Inc.

-    All rights reserved.";

-

-  revision "2016-02-29" {

-    description     

-     "Initial version - Sean Condon, Microsemi";

-    reference

-	 "Eagle EANTC Tail-f Inter-operation Summary Revision 1.0 16th Feb 2016";

-  }

-

-  //

-  // Extensions related to Edge Assure

-  //

-  extension not-changeable {

-	description

-	  "Marks the leaf as being settable at creation time 

-	   only and not writable thereafter";

-  }

-  

-  extension xref-module {

-	description

-	  "For leaf items that have type leafref, this attribute defines

-	  the netopeer module that supports that reference if it is outside

-	  the current module";

-	argument module-name;

-  }

-  

-  extension deprecated {

-	  description 

-	  "For leaf items that have become obsolete. This should generate a 

-	  warning to the user that they are using a deprected attribute";

-  }

-    

-  //

-  // Type definitions related to Edge Assure

-  //

-  typedef mep-id-type {

-    type uint16 {

-      range "1..8191";

-    }

-

-    description

-      "Maintenance association End Point Identifier (MEPID): A small integer,

-       unique over a given Maintenance Association, identifying a

-       specific MEP.";

-    reference

-      "[802.1q] 3.19 and 19.2.1";

-  }

-

-  typedef vlan-id-type {

-    type uint16 {

-      range "1..4094";

-    }

-

-    description

-      "The VLAN-ID that uniquely identifies a VLAN.  This is the 12-bit VLAN-ID

-       used in the VLAN Tag header.";

-

-    reference

-      "[802.1q] 9.6";

-  }

-

-  typedef port-status-type {

-    type enumeration {

-      enum no-status-tlv {

-          description "Indicates either that no CCM has been received or that 

-                       no port status TLV was present in the last CCM received.";

-      }

-      enum blocked {

-          description "Ordinary data cannot pass freely through the port on 

-                       which the remote MEP resides. Value of enableRmepDefect 

-                       is equal to false.";

-      }

-      enum up {

-          description "Ordinary data can pass freely through the port on which

-                       the remote MEP resides. Value of enableRmepDefect is 

-                       equal to true.";

-      }

-    }    

-

-    description

-      "The set of values available from the Port Status TLV in CCM PDUs

-       including the default no-status-tlv";

-

-    reference

-      "[802.1q] 20.19.3, 12.14.7.6.3:f

-       IEEE8021-CFM-MIB.Dot1agCfmPortStatus";

-  }

-

-  typedef interface-status-type {

-    type enumeration {

-      enum no-status-tlv {

-          description "Indicates either that no CCM has been received or that

-                       no interface status TLV was present in the last CCM received.";

-      }

-      enum up {

-          description "The interface is ready to pass packets.";

-      }

-      enum down {

-          description "The interface cannot pass packets.";

-      }

-      enum testing {

-          description "The interface is in some test mode.";

-      }

-      enum unknown {

-          description "The interface status cannot be determined for some reason.";

-      }

-      enum dormant {

-          description "The interface is not in a state to pass
		  	  packets but is in a pending state, waiting
			  for some external event.";

-      }

-      enum not-present {

-          description "Some component of the interface is missing.";

-      }

-      enum lower-layer-down {

-          description "The interface is down due to state of the lower layer 

-                       interfaces.";

-      }

-    }

-

-    description

-      "The set of values available from the Interface Status TLV in CCM PDUs

-       including the default no-status-tlv";

-    reference

-      "[802.1q] 20.19.4, 12.14.7.6.3:g

-       IEEE8021-CFM-MIB.Dot1agCfmInterfaceStatus";

-  }

-  

-  typedef mac-address-and-uint-type {

-    type binary {

-      length "8";

-    } 

-    description

-      "A MAC address and a two-octet unsigned integer";

-    reference

-      "[802.1q] IEEE8021-CFM-MIB.Dot1agCfmMaintDomainNameType";

-  }

-  

-  typedef mac-address-and-uint-str {

-    type string {

-      pattern '([0-9a-fA-F]{2}[:-]){6}([0-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-5][0-9][0-9][0-9][0-9]|6[0-4][0-9][0-9][0-9]|65[0-4][0-9][0-9]|655[0-2][0-9]|6553[0-5])';

-    }

-    description

-     "The mac-address type represents an IEEE 802 MAC address.

-      The canonical representation uses lowercase characters.

-

-      In the value set and its semantics, this type is equivalent

-      to the MacAddress textual convention of the SMIv2.";

-    reference

-     "IEEE 802: IEEE Standard for Local and Metropolitan Area

-                Networks: Overview and Architecture

-      RFC 2579: Textual Conventions for SMIv2";

-  }

-  

-

-  typedef md-level-type {

-    type uint8 {

-      range "0..7";

-    }

-

-    description

-      "Maintenance Domain Level (MD Level) identifier.  Higher numbers

-       correspond to higher Maintenance Domains, those with the greatest

-       physical reach, with the highest values for customers' CFM PDUs.

-       Lower numbers correspond to lower Maintenance Domains, those with

-       more limited physical reach, with the lowest values for CFM PDUs

-       protecting single bridges or physical links.";

-

-    reference

-      "[802.1q] 18.3, 21.4.1, IEEE8021-CFM-MIB.Dot1agCfmMDLevel";

-  }

-

-  typedef priority-type {

-    type uint8 {

-      range "0..7";

-    }

-

-    description

-      "A 3 bit priority value to be used in the VLAN tag, if present

-       in the transmitted frame.";

-    reference

-      "[802.1q] 12.14.7.3.2:e";

-  }

-  

-  typedef cos-color-type {

-    type enumeration {

-      enum "green" {

-    	  description "Change color to green";

-      }

-      enum "yellow" {

-    	  description "Change color to yellow";

-      }

-      enum "drop" {

-    	  description "Delete color information";

-      }

-    }

-    description

-      "TBD";

-    reference "[MEF23.1].";

-  }

-  

-  typedef service-list-type {

-    type string {

-      length "0..255";

-      pattern "\d*([,:]\d*)*";

-    }

-    description     

-     "An octet string containing a list of item values.

-      

-      An item value is an arbitrary string of octets from

-      ASCII character 0x30 - 0x39, but may not contain 

-      a delimiter character. Delimiter characters are 

-      defined to be one of the following:

-      

-          -  An ASCII comma character (0x2C)

-          -  An ASCII colon character (0x3A)

-      

-      Delimiter characters are used to separate item values

-      in a item list.  Only a single delimiter character may

-      occur between two item values.  A item value may not

-      have a zero length.  These constraints imply certain

-      restrictions on the contents of this object:

-      

-          - There cannot be a leading or trailing delimiter

-            character.

-      

-          - There cannot be multiple adjacent delimiter

-            characters.

-      

-      The 'comma' delimiter separates individual items or a

-      sequence of items. The 'colon' delimiter indicates a range

-      of items from the first item before the colon through the

-      last item after the colon. Individual ranges in the same

-      item list need to be separated by a 'comma'.

-      

-      Some examples of valid item lists are:

-      

-          - ''            -- an empty list

-          - '1234'        -- list of one item

-          - '10,11,12'    -- list of several items

-          - '10:20'       -- a list containing all the valid values from

-                             10 through 20

-      

-      Note that although an item value may not have a length of

-      zero, an empty string is still valid.  This indicates

-      an empty list (i.e. there are no tag values in the list).

-      

-      The use of the item list is to select one or more items at

-      one time with a single object instead of having separate row

-      entries in a table for each individual item.";

-  }

-  

-  

-  typedef service-preservation-type {

-    type enumeration {

-      enum preserve   { 

-		description "The type of service is preserved, either CE-VLAN ID or 

-			CE-VLAN CoS as indicated by the specific object";

-		}

-      enum noPreserve { 

-		description "The type of service is not preserved, either CE-VLAN ID

-			or CE-VLAN CoS as indicated by the specific object.";

-		}

-    }

-    description     

-     "Configures the EVC preservation attributes.";

-    reference       

-     "[MEF 6.1] 6.1; [MEF 7.2] 6.2.1.3";

-  }

-

-  typedef service-delivery-type {

-    type enumeration {

-      enum discard { 

-	description "Service Frames are discarded";

-	}

-      enum unconditional { 

-	description "Service Frames are unconditionally delivered no matter the 

-		content of the Service Frame. An example of this is a 

-		Point-to-Point EVC";

-	}

-      enum conditional { 

-	description "Service Frame are conditionally delivered to the 

-		destination UNI. The condition is specified, for example via a

-		bandwidth profile or unicast MAC address learning.";

-	}

-    }

-    description    

-     "A MEF service can have one of three different delivery types.";

-    reference       

-     "[MEF 6.1] 6.0";

-  }

-

-  

-  typedef identifier45 {

-    type string {

-      length "min..45";

-    }

-    description

-      "This type definition accepts any visible ASCII character " +

-      "plus the <space> character.The string must be RFC 2579 " +

-      "Display " +

-      "String but not contain the characters 0.00 through 0.1f " +

-      "It does not accept the <delete> character despite the " +

-      "current MEF specification.";

-    reference "MEF 10.3 [R8], [R9]";

-  }

-  

-  typedef file-name {

-    type string {

-      length "1..45";

-      pattern '[a-zA-Z0-9\-_.]*';

-    }

-    description "Valid file names only";

-  }

-  

-  typedef reset-config-options {

-	  type enumeration {

-		  enum operational {

-			  description "Reset any operational data on the device. Configuration 

-					  for CFM, Y-1564, RFC-2544 and UNI";

-		  }

-		  enum safiltering {

-			  description "Reset only safiltering data on the device.";

-		  }

-		  enum permissions {

-			  description "Reset only permissions data on the device.";

-		  }

-		  enum allnetconf {

-			  description "Reset all NETCONF data - leaves only logs and SSH keys.";

-		  }

-		  enum nuclear {

-			  description "Remove all configuration and history on the device.

-					  Deletes SSH keys. Resets device to factory defaults";

-		  }

-	  }

-  }

-  

-  	grouping mep-config-attribs-noref {

-		description 

-		"Attributes related to the configuration of a MEP";

-	

-		leaf maintenance-domain {

-                type uint8 {

-                   range 1..64;

-                }

-		  description

-		  "A reference to a specific Maintenance Domain.";

-		}

-		

-		leaf maintenance-association {

-                type uint8 {

-                   range 1..64;

-                }

-			description

-			"A reference to a specific Maintenance Association.";

-		}

-		

-		leaf maintenance-association-end-point {

-			type mep-id-type;

-			description

-			"A reference to a specific Maintenance association End Point.";

-		}

-	}

-}

diff --git a/drivers/microsemi/ea1000yang/src/main/yang/msea-uni-evc-interface.yang b/drivers/microsemi/ea1000yang/src/main/yang/msea-uni-evc-interface.yang
deleted file mode 100644
index c63acea..0000000
--- a/drivers/microsemi/ea1000yang/src/main/yang/msea-uni-evc-interface.yang
+++ /dev/null
@@ -1,1208 +0,0 @@
-module msea-uni-evc-interface {
-
-	namespace "http://www.microsemi.com/microsemi-edge-assure/msea-uni-evc-interface";
-	prefix "msea-if"; //MicroSemi EdgeAssure (msea)
-
-	import ietf-yang-types {
-		prefix yang;
-		revision-date 2013-07-15;
-	}
-
-	import msea-types {
-		prefix msea;
-		revision-date 2016-02-29;
-	}
-
-	import ietf-interfaces {
-		prefix "if";
-	}
-
-	import ietf-inet-types {
-		prefix inet;
-	}
-
-	import iana-if-type {
-		prefix "ianaift";
-	}
-	
-	import ietf-netconf-acm {
-		prefix nacm;
-	}
-
-	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 is based on the MEF 40 SNMP model, for the management 
-	objects for the management of User Network Interfaces (UNIs).
-	It has been converted to YANG and modified slightly to suit the
-	EdgeAssure SFP which has some extra constraints that are not handled by
-	the original model
-
-	Copyright 2016 Microsemi Inc.
-	All rights reserved.";
-
-	reference
-	"***************************************************************************
-	Reference Overview
-
-	A number of base documents have been used to create this MIB. The following
-	are the abbreviations for the baseline documents:
-	[MEF 40] refers to SNMP MIB
-	[MEF6.1] refers to MEF 6.1 'Ethernet Services Definitions - Phase 2',
-	April 2008
-	[MEF 6.1.1] refers to MEF 6.1.1 'Layer 2 Control Protocol Handling Amendment
-	to MEF 6.1', January 2012
-	[MEF 7.2] refers to MEF 7.2 'Carrier Ethernet Management Information Model',
-	January 2013
-	[MEF 10.2] refers to MEF 10.2 'Ethernet Services Attributes Phase 2',
-	October 2009
-	[MEF 26.1] refers to MEF 26.1 'External Network Network Interface (ENNI) -
-	Phase 2', January 2012
-	[Q.840.1] refers to 'ITU-T Requirements and analysis for NMS-EMS
-	management interface of Ethernet over Transport and Metro Ethernet
-	Network (EoT/MEN)', March 2007
-	****************************************************************************";
-
-	revision "2016-03-17" {
-		description
-		"Initial Version. Sean Condon - Microsemi";
-		reference "MEF 6.2";
-	}
-
-	typedef MefServiceInterfaceType {
-		type bits {
-//      bit bUni1d1;
-//      bit bUni1d2;
-			bit bUni2d1 {description "Only bUni2d1 is supported by EdgeAssure 1000";}
-//      bit bUni2d2;
-//      bit bEnni;
-//      bit bEnniVuni;
-		}
-
-		default "bUni2d1";
-		description
-		"A MEF Interface can be one of several types:
-
-		bUni1d1 UNI Type 1.1 See MEF 13. Non-multiplexed UNI for services such as EPL,
-		bUni1d2 UNI Type 1.2 See MEF 13. Multiplexed UNI for services such as EVPL,
-		bUni2d1 UNI Type 2.1 See MEF 20 section 7
-		bUni2d2 UNI Type 2.2 See MEF 20 section 7
-		bEnni ENNI
-		bEnniVuni VUNI on an ENNI";
-		reference
-		"[MEF 6.1] 6.0";
-	}
-
-	typedef l2cp-dest-mac-address {
-		type string {
-			pattern '01-80-[cC]2-(00-){2}[02][0-9a-fA-F]|01:80:[cC]2:(00:){2}[02][0-9a-fA-F]';
-		}
-		description
-		"The L2CP Destination MAC address for CoS 
-		Identifier type of 'l2cp' and is ignored for other types.
-
-		Valid values are 01-80-C2-00-00-00 through 01-80-C2-00-00-0F and
-		01-80-C2-00-00-20 through 01-80-C2-00-00-2F
-
-		Values can be upper or lower case and can be separated by hyphen or colon (but not both)";
-	}
-
-	typedef l2cp-destination-address {
-		type enumeration {
-			enum destinationAddressOnly {
-				description "L2CP selection is determined by
-				MAC Destination Address only";
-			}
-
-//						enum daPlusProtocol {
-//							description "L2CP selection is determined by
-//								MAC Destination Address plus
-//								Ethernet protocol";
-//						}
-//						
-//						enum daPlusProtocolPlusSubtype {
-//							description "L2CP selection is determined by
-//							MAC Destination Address plus
-//							Ethernet protocol plus subtype";
-//						}
-		}
-	}
-	
-    typedef ip-address-origin {
-      type enumeration {
-        enum "other" {
-          value 0;
-          description
-            "None of the following.";
-        }
-        enum "static" {
-          value 1;
-          description
-            "Indicates that the address has been statically
-          configured - for example, using NETCONF or a Command Line
-          Interface.";
-        }
-        enum "dhcp" {
-          value 2;
-          description
-            "Indicates an address that has been assigned to this
-          system by a DHCP server.";
-        }
-        enum "link-layer" {
-          value 3;
-          description
-            "Indicates an address created by IPv6 stateless
-          autoconfiguration that embeds a link-layer address in its
-          interface identifier.";
-        }
-        enum "random" {
-          value 4;
-          description
-            "Indicates an address chosen by the system at
-
-          random, e.g., an IPv4 address within 169.254/16, an
-          RFC 4941 temporary address, or an RFC 7217 semantically
-          opaque address.";
-          reference
-            "RFC 4941: Privacy Extensions for Stateless Address
-            	  Autoconfiguration in IPv6
-             RFC 7217: A Method for Generating Semantically Opaque
-            	  Interface Identifiers with IPv6 Stateless
-            	  Address Autoconfiguration (SLAAC)";
-
-        }
-      }
-      description
-        "The origin of an address.";
-    }
-
-    typedef neighbor-origin {
-      type enumeration {
-        enum "other" {
-          value 0;
-          description
-            "None of the following.";
-        }
-        enum "static" {
-          value 1;
-          description
-            "Indicates that the mapping has been statically
-          configured - for example, using NETCONF or a Command Line
-          Interface.";
-        }
-        enum "dynamic" {
-          value 2;
-          description
-            "Indicates that the mapping has been dynamically resolved
-          using, e.g., IPv4 ARP or the IPv6 Neighbor Discovery
-          protocol.";
-        }
-      }
-      description
-        "The origin of a neighbor entry.";
-    }
-	
-    feature ipv4-non-contiguous-netmasks {
-      description
-        "Indicates support for configuring non-contiguous
-      subnet masks.";
-    }
-
-	/*** OBJECT DEFINITIONS ***/
-	augment "/if:interfaces" {
-		leaf l2cp-group-index { //aka mefServiceInterfaceCfgL2cpGrpIndex
-			type leafref {
-				path "/if:interfaces/msea-if:interface-profiles/msea-if:l2cp-group/msea-if:group-index";
-			}
-			description
-			"This object is the index of the L2CP profile group
-			(mefServiceL2cpGrpCfgIndex) associated with the current interface. A
-			value of 0 indicates that no interface L2CP profile group is associated
-			with the interface. The L2CP group must be the same for both interfaces";
-			reference
-			"[MEF 6.1] 6.0; [MEF 6.1.1] 8.0; [MEF 7.2] 6.2.1.2";
-
-//        must "count(//if:interfaces/if:interface[msea-if:l2cp-group-index = current()]) = 2" {
-//        	  error-app-tag "msea-if-must-01";
-//        	  error-message "The same L2CP Group must be used on both interfaces of this device";
-//          }
-		}
-
-		leaf mef-service-type { //aka mefServiceInterfaceCfgType
-			type MefServiceInterfaceType;
-			description
-			"This object indicates the configured interface type. One
-			bit in the vector can be set at one time based upon the
-			possible values indicated by mefServiceInterfaceStatusType.";
-			//default bUni1d1; --These defaults break the validation - not using them in Eagle
-			reference
-			"[MEF 6.1] 6.0; [MEF 7.2] 6.2.1.1, 6.2.1.2, 6.2.1.3";
-		}
-
-		leaf dhcp-timeout {
-			type uint16 {range 0..max;}
-			units seconds;
-			default 0;
-			description "The DHCP timeout in seconds, after which it will use fixed IP addreses
-			A zero value specifies it should never timeout"; 
-		}
-
-		container zero-touch-provisioning {
-			presence "When present sets this device to be configured through Zero Touch Provisioning";
-
-			description "Setting Zero Touch Provisioning (ZTP) configures the setting up 
-			of the management interface through an LLDP server
-			When ZTP is active any DHCP or fixed IP address settings must not be specified.
-			
-			If this attribute is set during a NETCONF session it will have no effect until the
-			next time the device is rebooted.";
-
-			must "count(/if:interfaces/if:interface/msea-if:ipv4/msea-if:address) = 0" {
-				error-app-tag "msea-if-must-01";
-				error-message "When ZTP is specified there must not be a manually specified IP address for either interface";
-			}
-
-			must "not(/if:interfaces/if:interface[msea-if:dhcp-addressing = 'true']) " {
-				error-app-tag "msea-if-must-02";
-				error-message "When ZTP is specified there must not be a DHCP Specification for either interface";
-			}
-
-		}
-
-		container interface-profiles {
-
-			list interface-bwp-group { //aka mefServiceBwpGrpCfgEntry
-
-				key "group-index";
-				max-elements 64;
-				description
-				"Bandwidth profile group settings table entry.";
-
-				leaf group-index { //aka mefServiceBwpGrpCfgIndex
-					type uint8;
-					description
-					"Bandwidth profile group index number";
-				}
-
-				list interface-bwp { //aka mefServiceBwpCfgEntry
-					key "cos-index";//Changed to cos-index (from bwp-index) based on MEP 40 6.4.2 
-					unique name;
-					max-elements 64;
-
-					description
-					"Bandwidth profile. This maps 1:1 with a COS instance. This object is 
-					maintained here to keep the traditional layout of BWPGroup-BWP-COS, but does
-					not have any other purpose in the current implementation";
-
-					leaf cos-index { //aka mefServiceBwpCfgCosIndex
-						type leafref {
-							path "/if:interfaces/msea-if:interface-profiles/msea-if:interface-cos/msea-if:cos-index";
-						}
-						description
-						"This object is the index number of the CoS ID profile
-						associated with the current bandwidth profile. A value of 0 indicates
-						that no CoS ID profile is associated with the bandwidth profile and the
-						bandwidth profile applies to all CoS IDs.
-
-						This index indicates a specific CoS ID profile previously configured via
-						mefServiceCosCfgTable as indicated by the mefServiceCosCfgIndex object.";
-						reference
-						"[MEF 6.1] 6.1; [MEF 7.2] 6.2.1.3";
-
-						must "current()/../../msea-if:group-index > 0" {
-							error-app-tag "msea-if-must-10";
-							error-message "No BWP's can be added to the Bandwidth Profile Group 0, as this index represents a special case";
-						}
-					}
-
-					leaf name { //mefServiceBwpCfgIdentifier
-						type string {
-							length "1..45";
-						}
-						mandatory true;
-						description
-						"This object indicates the bandwidth profile identifier for the
-						associated bandwidth profile index and is an arbitrary
-						text string that is used to identify a bandwidth profile. Unique
-						string values are chosen to uniquely identify the bandwidth
-						profile.
-
-						Octet values of 0x00 through 0x1f are illegal.
-
-						MEF 26.1 restricts the maximum size identifiers to 45 octets.";
-						reference
-						"[MEF 6.1] 6.0, 6.1, 6.2, 6.3; [MEF 7.2] 6.2.1.2, 6.2.1.3";
-					}
-
-
-				} //End bwp
-
-			} //End bwp-group
-
-			list interface-cos { //aka mefServiceCosCfgEntry
-				key "cos-index";
-				unique name;
-				max-elements 64;
-				description
-				"Class of Service Identifier settings table entry.";
-
-				leaf cos-index { //aka mefServiceCosCfgIndex
-					type uint32 {
-						range 1..max;
-					}
-					description
-					"Class of Service Identifier profile index number.";
-				}
-
-				leaf name { //aka mefServiceCosCfgIdentifier
-					type string {
-						length 1..45;
-					}
-
-					description
-					"This object indicates the Class of Service Name for the
-					associated CoS profile index and is an arbitrary text string that is
-					used to identify a CoS ID profile. Unique string values are chosen to
-					uniquely identify the profile.
-
-					Octet values of 0x00 through 0x1f are illegal.
-
-					MEF 26.1 restricts the maximum size identifiers to 45 octets.";
-					reference
-					"[MEF 6.1] 6.0, 6.1, 6.2, 6.3; [MEF 7.2] 6.2.1.2, 6.2.1.3";
-				}
-
-				container dscp-cos-type {
-					description "Indicates that the CoS profile is associated
-					with the incoming frame's DSCP field if it is an IP frame.
-					If it is not an IP frame no action is taken on it";
-
-					choice dscp-id-choice {
-						case dscp-bits-list {
-							leaf dscp-group-bit-list {
-								type bits {
-									bit dscp-0-7 {
-										description "The set of DSCP identifiers from 0-7";
-									}
-									bit dscp-8-15 {
-										description "The set of DSCP identifiers from 8-15";
-									}
-									bit dscp-16-23 {
-										description "The set of DSCP identifiers from 16-23";
-									}
-									bit dscp-24-31 {
-										description "The set of DSCP identifiers from 24-31";
-									}
-									bit dscp-32-39 {
-										description "The set of DSCP identifiers from 32-39";
-									}
-									bit dscp-40-47 {
-										description "The set of DSCP identifiers from 40-47";
-									}
-									bit dscp-48-55 {
-										description "The set of DSCP identifiers from 48-55";
-									}
-									bit dscp-56-63 {
-										description "The set of DSCP identifiers from 56-63";
-									}
-								}
-							}
-						}
-
-						case dscp-0-63 {
-							container dscp-0-63 {
-								presence "The full set of DSCP identifiers from 0-63";
-							}
-						}
-
-						case specific-values {
-							leaf-list dscp-id {
-								type uint16 {
-									range 0..64;
-								}
-								ordered-by system;
-								description "The set of DSCP identifiers handled by this COS";
-							}
-						}
-						mandatory true;
-//						msea:not-changeable;
-					}
-
-					choice color-specification {
-						case all-green {
-							container color-all-green {
-								presence "Color for all specified DSCPs mapped to green";
-							}
-						}
-						case all-yellow {
-							container color-all-yellow {
-								presence "Color for all specified DSCPs mapped to yellow";
-							}
-						}
-						case all-dropped {
-							container color-all-dropped {
-								presence "Color for all specified DSCPs mapped to dropped";
-							}
-						}
-
-						case dscp-to-color-map {
-							list dscp-color {
-								key dscp-id;
-								ordered-by system;
-								description "A list of DSCP values that apply to this COS.
-								When the COS type is DSCP a subset of the values can
-								be specified. Other DSCP values can be specified in
-								additional COS profiles. In total the same priority
-								cannot be repeated in a BWP Group";
-
-								leaf dscp-id {
-									type uint16 {
-										range 0..64;
-									}
-								}
-
-								leaf color {
-									description "Color to apply to incoming IP frames
-									with this DSCP id";
-
-									type msea:cos-color-type;
-								}
-							}
-						}
-						default all-green;
-//						msea:not-changeable;
-					}
-				}
-
-				leaf outgoing-cos-value {
-					type msea:priority-type;
-					mandatory true;
-//					msea:not-changeable;
-
-					description
-					"Used to set the egress COS to use for all ingress COS explicitly listed";
-					reference
-					"Edge Assure internal API";
-				}
-			}
-
-			list l2cp-group { //aka mefServiceL2cpGrpCfgEntry
-				key "group-index";
-				max-elements 64;
-				description
-				"L2CP profile group settings table entry on an interface.";
-
-				leaf group-index { //aka mefServiceL2cpGrpCfgIndex
-					type uint32;
-					description
-					"L2CP profile group index number, indicating the specific L2CP profile 
-					group";
-				}
-
-				list l2cp { //aka mefServiceL2cpCfgEntry
-					key "index";
-					max-elements 64;
-					description
-					"L2CP settings table entry on an interface or a service.";
-
-					leaf index { //aka mefServiceL2cpCfgIndex
-						type uint32;
-						description
-						"This object configures the L2CP index number on an interface or a 
-						Service and is used to create/access a L2CP profile within a L2CP
-						group.";
-
-						must "current()/../../msea-if:group-index > 0" {
-							error-app-tag "msea-if-must-11";
-							error-message "No L2CP's can be added to the L2CP Group 0, as this index represents a special case";
-						}
-					}
-
-					leaf handling { //aka mefServiceL2cpCfgType
-						type enumeration {
-							enum discard {description "The indicated L2CP is discarded";}
-
-							enum tunnel {description "The indicated L2CP is tunneled (passed)";}
-
-							enum peer {description "The indicated L2CP is peered with the NE";}
-
-							//						enum passToEvc {description "the indicated L2CP is passed to the EVC for
-							//							EVC processing of the L2CP. Final L2CP
-							//							disposition is based the L2CP profile for
-							//							the EVC to be tunneled, discarded, or peered.
-							//							This value is not valid for EVC based L2CP";
-							//						}
-						}
-						default tunnel;
-//						msea:not-changeable;
-
-						description
-						"This object configures the handling of matching L2CP frames.";
-						reference
-						"[MEF 6.1] 6.0, 8.0; [MEF 6.1.1] 8.0; [MEF 7.2] 6.2.1.2";
-					}
-
-					leaf match-scope { //aka mefServiceL2cpCfgMatchScope
-						type l2cp-destination-address;
-						default destinationAddressOnly;
-//						msea:not-changeable;
-
-						description
-						"This object configures the L2CP selection matching scope.";
-						reference
-						"[MEF 6.1] 6.0, 8.0; [MEF 6.1.1] 8.0; [MEF 7.2] 6.2.1.2";
-
-					}
-
-					leaf mac-address { //aka mefServiceL2cpCfgMacAddress
-						type l2cp-dest-mac-address;
-						mandatory true;
-//						msea:not-changeable;
-
-						description
-						"This object configures the L2CP Destination MAC address.
-
-						Valid values are 01-80-C2-00-00-00 through 01-80-C2-00-00-0F and
-						01-80-C2-00-00-20 through 01-80-C2-00-00-2F";
-
-						must "count(current()/../../msea-if:l2cp[msea-if:mac-address = current()]) <= 1" {
-							error-app-tag "msea-if-must-12";
-							error-message "A destination address can only appear once in an L2CP Group";
-						}
-					}
-				} //End l2cp
-
-			} //End l2cp-group
-
-		} //End profiles
-	} //end augment interfaces
-
-	//
-	// Augments ietf-interfaces (only of type ethernetCsmacd) with MEF Services
-	//
-	augment "/if:interfaces/if:interface" {
-		
-		//Copied IPV4 over from ietf-ip because 
-		//  i) We do not want to have to include IPv6
-		// ii) libnetconf only supports augmenting any container 
-		//      from one file (i.e. cannot augment interface here and 
-		//		also in ietf-ip.yang
-		
-		
-	      container ipv4 {
-	        presence
-	          "Enables IPv4 unless the 'enabled' leaf
-	        (which defaults to 'true') is set to 'false'";
-	        description
-	          "Parameters for the IPv4 address family.";
-	        
-	        leaf enabled {
-	          type boolean;
-	          default true;
-
-	          description
-	            "Controls whether IPv4 is enabled or disabled on this
-	             interface.  When IPv4 is enabled, this interface is
-	             connected to an IPv4 stack, and the interface can send
-	             and receive IPv4 packets. When ZTP is configured it
-				 will treat both interfaces as enabled and will ignore
-				 what this value is set to";
-
-				must "count(/if:interfaces/if:interface[if:name='eth0' or if:name='eth1']/msea-if:ipv4[msea-if:enabled = 'true']) >= 1" {
-					error-app-tag "msea-if-must-20";
-					error-message "At least one of the interfaces eth0 and eth1 must be enabled";
-				}
-	        }
-
-	        leaf forwarding {
-	          type boolean;
-	          default false;
-	          description
-	            "Controls IPv4 packet forwarding of datagrams received by,
-	          but not addressed to, this interface.  IPv4 routers
-	          forward datagrams.  IPv4 hosts do not (except those
-	          source-routed via the host).";
-	        }
-
-	        leaf mtu {
-	          type uint16 {
-	            range "68..max";
-	          }
-	          units "octets";
-	          description
-	            "The size, in octets, of the largest IPv4 packet that the
-	          interface will send and receive.
-
-	          The server may restrict the allowed values for this leaf,
-	          depending on the interface's type.
-
-	          If this leaf is not configured, the operationally used MTU
-	          depends on the interface's type.";
-	          reference
-	            "RFC 791: Internet Protocol";
-
-	        }
-
-	        container address { 
-	          when "not (../../msea-if:dhcp-addressing = 'true')";
-	          presence "This address being present indicates the interface has been configured";
-	        
-	          description
-	            "The configured IPv4 addresses on the interface.";
-	          leaf ip {
-	            type inet:ipv4-address-no-zone;
-	            description
-	              "The IPv4 address on the interface.";
-	          }
-
-	          choice subnet {
-	            mandatory true;
-	            description
-	              "The subnet can be specified as a prefix-length, or,
-	            if the server supports non-contiguous netmasks, as
-	            a netmask.";
-	            leaf prefix-length {
-	              type uint8 {
-	                range "0..32";
-	              }
-	              description
-	                "The length of the subnet prefix.";
-	            }
-	            leaf netmask {
-	              if-feature ipv4-non-contiguous-netmasks;
-	              type yang:dotted-quad;
-	              description
-	                "The subnet specified as a netmask.";
-	            }
-	          }  // choice subnet
-	          
-	          leaf gateway {
-				type inet:ipv4-address-no-zone;
-
-				description "This will be ignored if ZTP or DHCP are configured 
-				for management addressing. If unspecified then 0.0.0.0 will be used.";
-
-	          }
-	        }  // container address
-	      }  // container ipv4
-
-		
-
-		leaf frame-format { //aka mefServiceInterfaceCfgFrameFormat
-			when "../if:type='ianaift:ethernetCsmacd' and (../if:name='eth0' or ../if:name='eth1')";
-			type enumeration {
-				enum noTag {
-					description "Indicates that all data on the interface 
-					is regarded as untagged, regardless of it ingress type";
-				}
-				enum ctag {
-					description "Ingress frames with CTAG(vlan>0) will be 
-					regared as 'VLAN tagged'; with CTAG(vlan=0) as Priority; otherwise untagged";
-				}
-				enum stag {
-					description "Ingress frames with STAG(vlan>0) will be 
-					regared as 'VLAN tagged'; with STAG(vlan=0) as Priority; otherwise untagged";
-				}
-//          enum stagCtag { description "Indicates that service traffic identified 
-//				with both an S-TAG (outer tag) and a C-TAG 
-//				(inner tag)"; }
-				//default noTag; --These defaults break the validation - not using them in Eagle
-			}
-			description
-			"This object indicates the interface frame format type that the
-			interface can recognize. Default is noTag";
-			reference
-			"[MEF 6.1] 6.0";
-		} //end frame-format
-
-		leaf interface-ingress-bwp-group-index { //aka mefServiceInterfaceCfgIngressBwpGrpIndex
-			when "../if:type='ianaift:ethernetCsmacd' and (../if:name='eth0' or ../if:name='eth1')";
-			type leafref {
-				path "/if:interfaces/msea-if:interface-profiles/msea-if:interface-bwp-group/msea-if:group-index";
-			}
-			description
-			"This object is the index number of the ingress bandwidth profile group
-			associated with the current interface. A value of 0 indicates that no
-			interface ingress bandwidth profile group is associated with the
-			interface.
-
-			This index indicates the specific bandwidth profile group previously
-			configured via mefServiceBwpGrpCfgTable and mefServiceBwpCfgTable
-			using this value for mefServiceBwpGrpCfgIndex. There may be multiple
-			entries in mefServiceBwpCfgTable using this index, each containing
-			bandwidth parameters for a different Class of Service Identifier.";
-			reference
-			"[MEF 6.1] 6.0; [MEF 7.2] 6.2.1.2";
-		}
-
-		leaf ce-vid-untagged { //aka mefServiceUniCfgCeVidUntagged
-			when "../if:type='ianaift:ethernetCsmacd' and (../if:name='eth0' or ../if:name='eth1')";
-			type msea:vlan-id-type;
-
-//			mandatory true;
-			description
-			"Configures the CE VLAN ID associated with untagged and priority
-			Service Frames. It allows the identification of untagged and
-			priority tagged traffic with a specific CE-VLAN ID. This object
-			is ignored for all to one bundling at the UNI.
-			This attribute has been placed on the interface (rather than the UNI)
-			as it can be defined regardless of whether a UNI exists or not";
-			reference
-			"[MEF 6.1] 6.0, [MEF 7.2] 6.2.1.2";
-		}
-
-		leaf ce-priority-untagged { //aka mefServiceUniCfgCePriorityUntagged
-			when "../if:type='ianaift:ethernetCsmacd' and (../if:name='eth0' or ../if:name='eth1')";
-			type msea:priority-type;
-//			mandatory true;
-
-			description
-			"Configures the CE VLAN Priority associated with untagged Service
-			Frames. It allows the assignment of a specific VLAN priority to
-			untagged traffic. This object is ignored for all to one bundling
-			at the UNI.
-			This attribute has been placed on the interface (rather than the UNI)
-			as it can be defined regardless of whether a UNI exists or not";
-			reference
-			"[MEF 7.2] 6.2.1.2";
-		}
-
-		leaf admittance-criteria {
-			when "../if:type='ianaift:ethernetCsmacd' and (../if:name='eth0' or ../if:name='eth1')";
-			type enumeration {
-				enum admitAll {
-					description "Admit all frames";
-				}
-//					enum admitPrioUntaggedOnly {description "Admit only frames that are not Priority tagged";}
-//					enum admitVlanOnly {description "Admit only frames that are VLAN tagged";}
-			}
-
-//				default admitAll; 
-
-			description "Criteria for admitting packets to this interface. 
-			The Frame Format attribute to determintes how frames are tagged";
-		}
-		
-		leaf color-aware {
-		  type boolean;
-		  default true;
-
-		  description
-		    "Defines whether the interface should handle color mappings. 
-		    If true the color is extracted from the packet tag (DEI bit) 
-		  	or for IPv4 packets, the DSCP field.
-			If false the packet is always assumed to be green.";
-	      reference   
-			 "Edge Assure internal API";
-		}
-		
-		leaf color-forward {
-		  type boolean;
-		  default true;
-
-		  description
-		    "Defines whether the interface should handle color mappings. 
-		    If true color mappings defined in the interface-cos
-			associated with the active interface-ingress-bwp-group will be applied";
-	      reference   
-			 "Edge Assure internal API";
-		}
-		
-		leaf dhcp-addressing {
-			when "../if:type='ianaift:ethernetCsmacd' and (../if:name='eth0' or ../if:name='eth1')";
-			type boolean;
-
-			description "This element can only be specified when ZTP 
-			is not specified.
-
-			If this element is not present and ZTP is not
-			present then the fixed IP addresses specified at
-			/if:interfaces/if:interface/msea-if:ipv4
-			will be used
-
-			This element is specified per interface";
-			
-			must "(not(/if:interfaces/if:interface[if:name = current()/../if:name]/msea-if:ipv4/msea-if:address) and not(/if:interfaces/msea-if:zero-touch-provisioning) and current() = 'true') or ((boolean(/if:interfaces/if:interface[if:name = current()/../if:name]/msea-if:ipv4/msea-if:address) or boolean(/if:interfaces/if:interface[if:name = current()/../if:name]/msea-if:ipv4[msea-if:enabled='false']) or (/if:interfaces/msea-if:zero-touch-provisioning)) and current() = 'false')" {
-				error-app-tag "msea-if-must-21";
-				error-message "When DHCP is 'true' there must be neither a fixed IP address for that interface NOR a ZTP node. When DHCP is 'false' there must be either a fixed IP address for that interface, a disabled interface OR a ZTP node";
-			}
-
-		}
-	} //End augment "/if:interfaces/if:interface
-
-		augment "/if:interfaces-state" {
-			leaf mef-service-type-options { //aka mefServiceInterfaceStatusType
-				type MefServiceInterfaceType;
-				description
-				"This object is a vector of bits that indicates the possible
-				interface types that an interface can be configured to. An interface,
-				for instance, can be configured to be a UNI type 1 or 2, or an ENNI.
-
-				All the possible capabilities of an interface are indicated, one bit
-				per possible type. At least one bit must be set for MEF compliant NEs.";
-				reference
-				"[MEF 6.1] 6.0";
-			}
-
-			leaf zero-touch-provisioning-state {
-				type enumeration {
-					enum complete {
-						description "The device was configured through ZTP at last reboot";
-					}
-					enum incomplete {
-						description "The device was configured through ZTP at last reboot but is not yet complete";
-					}
-					enum dhcp-failed {
-						description "Communication with DHCP server found through ZTP failed 
-								and default values were used instead.";
-					}
-					enum needs-reboot {
-						description "ZTP was added to the configuration since last reboot";
-					}
-				}
-				description "A read only set of attributes indicating the status of
-				Zero Touch Provisioning. This only appears when ZTP is configured";
-			}
-		} //End augment "/if:interfaces-state
-
-		
-		augment "/if:interfaces-state/if:interface" {
-			
-		  container ipv4 {
-			presence
-			  "Present if IPv4 is enabled on this interface";
-			config false;
-			description
-			  "Interface-specific parameters for the IPv4 address family.";
-			leaf forwarding {
-			  type boolean;
-			  description
-				"Indicates whether IPv4 packet forwarding is enabled or
-			  disabled on this interface.";
-			}
-
-			leaf mtu {
-			  type uint16 {
-				range "68..max";
-			  }
-			  units "octets";
-			  description
-				"The size, in octets, of the largest IPv4 packet that the
-			  interface will send and receive.";
-			  reference
-				"RFC 791: Internet Protocol";
-
-			}
-
-			container address {
-			  description
-				"The list of IPv4 addresses on the interface.";
-			  leaf ip {
-				type inet:ipv4-address-no-zone;
-				description
-				  "The IPv4 address on the interface.";
-			  }
-
-			  choice subnet {
-				description
-				  "The subnet can be specified as a prefix-length, or,
-				if the server supports non-contiguous netmasks, as
-				a netmask.";
-				leaf prefix-length {
-				  type uint8 {
-					range "0..32";
-				  }
-				  description
-					"The length of the subnet prefix.";
-				}
-				leaf netmask {
-				  if-feature ipv4-non-contiguous-netmasks;
-				  type yang:dotted-quad;
-				  description
-					"The subnet specified as a netmask.";
-				}
-			  }  // choice subnet
-
-			  leaf origin {
-				type ip-address-origin;
-				description
-				  "The origin of this address.";
-			  }
-			}  // list address
-
-			leaf gateway {
-				type inet:ipv4-address;
-				description "The gateway IP address assigned through ZTP";
-			}
-
-			list neighbor {
-			  key "ip";
-			  description
-				"A list of mappings from IPv4 addresses to
-			  link-layer addresses.
-
-			  This list represents the ARP Cache.";
-			  reference
-				"RFC 826: An Ethernet Address Resolution Protocol";
-
-			  leaf ip {
-				type inet:ipv4-address-no-zone;
-				description
-				  "The IPv4 address of the neighbor node.";
-			  }
-
-			  leaf link-layer-address {
-				type yang:phys-address;
-				description
-				  "The link-layer address of the neighbor node.";
-			  }
-
-			  leaf origin {
-				type neighbor-origin;
-				description
-				  "The origin of this neighbor entry.";
-			  }
-			}  // list neighbor
-		  }  // container ipv4
-		      
-			leaf max-vc { //aka mefServiceInterfaceStatusMaxVc
-				type uint32 {
-					range "1..4095";
-				}
-				description
-				"This object indicates the maximum number of EVCs that the
-				interface can support.";
-				reference
-				"[MEF 6.1] 6.0; [MEF 7.2] 6.2.1.2";
-			}
-
-			  leaf configured-by {
-				type enumeration {
-					enum zero-touch-provisioning {
-						description "ZTP is active and has configured this interface";
-					}
-					enum dhcp {
-						description "Interface has been configured by a DHCP server without ZTP";
-					}
-					enum fixed-ipv4 {
-						description "Interface has been configured manually";
-					}
-				}
-			  }
-		} //End augment "/if:interfaces-state/if:interface"
-
-
-		augment "/if:interfaces-state/if:interface/if:statistics" {
-
-			leaf ingress-undersized { //aka mefServiceInterfaceStatisticsIngressUndersized
-				type yang:counter32;
-				units "Ethernet frames";
-				description
-				"This object is incremented for each frame received
-				on a NE interface that was smaller than 64 octets.
-
-				This object defaults to '0'. ";
-				reference
-				"[MEF 15] 8.2; [Q.840.1] 6.2.4";
-			}
-
-			leaf ingress-oversized { //aka mefServiceInterfaceStatisticsIngressOversized
-				type yang:counter32;
-				units "Ethernet frames";
-				description
-				"This object is incremented for each frame received
-				on a NE interface that was larger than the maximum MTU size.
-
-				This object defaults to '0'.";
-				reference
-				"[MEF 15] 8.2; [Q.840.1] 6.2.4";
-			}
-
-			leaf ingress-fragments { //aka mefServiceInterfaceStatisticsIngressFragments
-				type yang:counter32;
-				units "Ethernet frames";
-				description
-				"This object is incremented for each frame received
-				on a NE interface that was less than 64 octets in length
-				(excluding framing bits but including FCS octets) and had
-				either a bad Frame Check Sequence (FCS) with an integral
-				number of octets (FCS Error) or a bad FCS with a non-integral
-				number of octets (Alignment Error).
-
-				Note that it is entirely normal for this counter to
-				increment. This is because it counts both runts (which are
-						normal occurrences due to collisions) and noise hits.
-
-				This object defaults to '0'.";
-				reference
-				"[MEF 15] 8.2; [Q.840.1] 6.2.4";
-			}
-
-			leaf ingress-crc-alignment { //aka mefServiceInterfaceStatisticsIngressCrcAlignment
-				type yang:counter32;
-				units "Ethernet frames";
-				description
-				"This object is incremented for each frame received
-				on a NE interface that was from 64 octets to the maximum MTU
-				size in length, but had either a bad Frame Check Sequence (FCS)
-				with an integral number of octets (FCS Error) or a bad FCS with
-				a non-integral number of octets (Alignment Error).
-
-				This object defaults to '0'.";
-				reference
-				"[MEF 15] 8.2; [Q.840.1] 6.2.4";
-			}
-
-			leaf ingress-invalid-vid { //aka mefServiceInterfaceStatisticsIngressInvalidVid
-				type yang:counter32;
-				units "Ethernet frames";
-				description
-				"This object is incremented for each frame received
-				on a NE interface with an invalid VLAN ID.
-
-				This object defaults to '0'.";
-				reference
-				"[MEF 15] 8.2; [Q.840.1] 6.2.4";
-			}
-
-			leaf ingress-octets { //aka mefServiceInterfaceStatisticsIngressOctets
-				type yang:counter64;
-				units "octets";
-				description
-				"This object is incremented by the number of octets in a
-				valid frame received on a NE interface.
-
-				This object defaults to '0'.";
-				reference
-				"[MEF 15] 8.2; [Q.840.1] 6.2.4";
-			}
-
-			leaf ingress-unicast { //aka mefServiceInterfaceStatisticsIngressUnicast
-				type yang:counter64;
-				units "Ethernet frames";
-				description
-				"This object is incremented for each valid unicast frame received
-				on a NE interface.
-
-				NEs that do not support 64 bit counters can return the
-				upper half of the counter as all zeros.
-
-				This object defaults to '0'.";
-				reference
-				"[MEF 15] 8.2; [Q.840.1] 6.2.4";
-			}
-
-			leaf ingress-multicast { //aka mefServiceInterfaceStatisticsIngressMulticast
-				type yang:counter64;
-				units "Ethernet frames";
-				description
-				"This object is incremented for each valid multicast frame received
-				on a NE interface.
-
-				ME-NEs that do not support 64 bit counters can return the
-				upper half of the counter as all zeros.
-
-				This object defaults to '0'.";
-				reference
-				"[MEF 15] 8.2; [Q.840.1] 6.2.4";
-			}
-
-			leaf ingress-broadcast { //aka mefServiceInterfaceStatisticsIngressBroadcast
-				type yang:counter64;
-				units "Ethernet frames";
-				description
-				"This object is incremented for each valid broadcast frame received
-				on a NE interface.
-
-				ME-NEs that do not support 64 bit counters can return the
-				upper half of the counter as all zeros.
-
-				This object defaults to '0'.";
-				reference
-				"[MEF 15] 8.2; [Q.840.1] 6.2.4";
-			}
-
-			leaf egress-octets { //aka mefServiceInterfaceStatisticsEgressOctets
-				type yang:counter64;
-				units "octets";
-				description
-				"This object is incremented by the number of octets in a frame 
-				transmitted on a NE interface.
-
-				This object defaults to '0'.";
-				reference
-				"[MEF 15] 8.2; [Q.840.1] 6.2.4";
-			}
-
-			leaf egress-unicast { //aka mefServiceInterfaceStatisticsEgressUnicast
-				type yang:counter64;
-				units "Ethernet frames";
-				description
-				"This object is incremented for each unicast frame transmitted on a
-				NE interface.
-
-				ME-NEs that do not support 64 bit counters can return the
-				upper half of the counter as all zeros.
-
-				This object defaults to '0'.";
-				reference
-				"[MEF 15] 8.2; [Q.840.1] 6.2.4";
-			}
-
-			leaf egress-multicast { //aka mefServiceInterfaceStatisticsEgressMulticast
-				type yang:counter64;
-				units "Ethernet frames";
-				description
-				"This object is incremented for each multicast frame transmitted on a
-				NE interface.
-
-				ME-NEs that do not support 64 bit counters can return the
-				upper half of the counter as all zeros.
-
-				This object defaults to '0'.";
-				reference
-				"[MEF 15] 8.2; [Q.840.1] 6.2.4";
-			}
-
-			leaf egress-broadcast { //aka mefServiceInterfaceStatisticsEgressBroadcast
-				type yang:counter64;
-				units "Ethernet frames";
-				description
-				"This object is incremented for each broadcast frame transmitted on a
-				NE interface.
-
-				ME-NEs that do not support 64 bit counters can return the
-				upper half of the counter as all zeros.
-
-				This object defaults to '0'.";
-				reference
-				"[MEF 15] 8.2; [Q.840.1] 6.2.4";
-			}
-		} //End augment "/if:interfaces-state/if:interface/if:statistics
-
-
-		
-		rpc ztp-reset-and-reboot {
-//			nacm:default-deny-all;
-			description
-			"Request that the ZTP system should be reset and the system rebooted. 
-			This can only be run when the zero-touch-provisioning element 
-			already exists on the interfaces element
-			
-			If the zero-touch-provisioning element has been added since the last
-			reboot then the reset will be pending already and will be brought
-			in to effect by this reboot.";
-		}
-		
-	} /* end of module msea-uni-evc-interface */
diff --git a/drivers/microsemi/ea1000yang/src/main/yang/msea-uni-evc-service.yang b/drivers/microsemi/ea1000yang/src/main/yang/msea-uni-evc-service.yang
deleted file mode 100644
index 5075ffb..0000000
--- a/drivers/microsemi/ea1000yang/src/main/yang/msea-uni-evc-service.yang
+++ /dev/null
@@ -1,1070 +0,0 @@
-module msea-uni-evc-service {
-
-	namespace "http://www.microsemi.com/microsemi-edge-assure/msea-uni-evc-service";
-	prefix "msea-svcs"; //MicroSemi EdgeAssure (msea)
-
-
-	import msea-types {
-		prefix msea;
-		revision-date 2016-02-29;
-	}
-
-//	import ietf-interfaces { prefix if; }
-//	import mef-uni-evc-interface { prefix mef-interface; }
-	import ENTITY-STATE-TC-MIB {prefix "entity-state";}
-
-	/*** 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 is based on the MEF 40 SNMP model, for the management 
-	objects for the management of User Network Interfaces (UNIs) and Ethernet
-	Virtual Connections (EVCs). It has been converted to YANG and modified
-	slightly to suit the EdgeAssure SFP which has some extra
-	constraints that are not handled by the original model
-
-	Copyright 2016 Microsemi Inc.
-	All rights reserved.";
-
-	reference
-	"***************************************************************************
-	Reference Overview
-
-	A number of base documents have been used to create this MIB. The following
-	are the abbreviations for the baseline documents:
-	[MEF 40] refers to SNMP MIB
-	[MEF6.1] refers to MEF 6.1 'Ethernet Services Definitions - Phase 2',
-	April 2008
-	[MEF 6.1.1] refers to MEF 6.1.1 'Layer 2 Control Protocol Handling Amendment
-	to MEF 6.1', January 2012
-	[MEF 7.2] refers to MEF 7.2 'Carrier Ethernet Management Information Model',
-	January 2013
-	[MEF 10.2] refers to MEF 10.2 'Ethernet Services Attributes Phase 2',
-	October 2009
-	[MEF 26.1] refers to MEF 26.1 'External Network Network Interface (ENNI) -
-	Phase 2', January 2012
-	[Q.840.1] refers to 'ITU-T Requirements and analysis for NMS-EMS
-	management interface of Ethernet over Transport and Metro Ethernet
-	Network (EoT/MEN)', March 2007
-	****************************************************************************";
-
-	revision "2016-03-17" {
-		description
-		"Initial Version. Sean Condon - Microsemi";
-		reference "MEF 6.2";
-	}
-
-	
-
-    
-    grouping uni-attributes {
-    	
-    	description "Common UNI attributes";
-
-		leaf bundling-multiplex { //aka mefServiceUniCfgBundlingMultiplex
-			type enumeration {
-				enum allToOne {
-					description 
-					"All to One Bundling, used for Private services: 
-						EPL, EP-LAN, and EP-Tree";
-				}
-				
-				enum bundling {
-					description 
-						"Bundling, indicates one or more 
-						CE-VLANS per service, used for virtual private CE-VLAN
-						preservation services: EVPL, EVP-LAN, EVP-Tree";
-				}
-						
-				enum multiplex {
-					description 
-						"Service Multiplexing, indicates 
-						one or more EVCs per UNI, used for virtual private
-						CE-VLAN preservation or non-preservation services:
-						EVPL, EVP-LAN, EVP-Tree";
-				}
-				
-				enum bundlingMultiplex {
-					description 
-					"Service Multiplexing plus 
-					Bundling, indicates one or more EVCs per UNI that are
-					composed of one or more CE-VLANs, used for virtual
-					CE-VLAN preservation services: EVPL, EVP-LAN, EVP-Tree";
-				}
-			}
-			
-			default allToOne;
-//			msea:not-changeable;
-
-			description
-				"Configures bundling and multiplexing options for the UNI. This object
-				is an enumerated list of possible multiplexing and bundling options
-				on a UNI that is unambiguous and provides only the legal possibilities.";
-
-			reference
-				"[MEF 6.1] 6.0, [MEF 7.2] 6.2.1.2";
-		}
-
-    }
-    
-	
-	grouping evc-per-uni-extension-attributes {
-		description "EVC attributes that are configured depending on
-				the UNI side.";
-
-		leaf ce-vlan-map { //aka mefServiceEvcPerUniCfgCeVlanMap
-			type msea:service-list-type;
-			
-			mandatory true;
-			description
-			"This object indicates the CE-VLANs associated with the specific
-			EVC on a UNI. CE-VLAN IDs have value of 0 to 4095. The CE-VLAN ID
-			list can be a single value or multiple values separated by a delimiter.
-	
-			Some valid values are: '100', '1:10', '10,20,30', '1:4095'. In the
-			first example only CE-VLAN ID 100 is associated with the VLAN map.
-			In the second example the CE-VLAN map includes CE-VLAN IDs 1 through
-			10 (range of values). The third example indicates three separate values
-			that make up the CE-VLAN map. The last example indicates all CE-VLAN IDs
-			are included in the map (range of values). ";
-			reference
-			"[MEF 6.1] 6.1; [MEF 7.2] 6.2.1.3";
-		}
-
-		
-		leaf ingress-bwp-group-index { //aka mefServiceEvcPerUniCfgIngressBwpGrpIndex
-			type leafref {
-				path "/msea-svcs:mef-services/msea-svcs:profiles/msea-svcs:bwp-group/msea-svcs:group-index";
-			}
-			
-			mandatory true;
-	
-			description
-			"This object is the index number of the ingress bandwidth profile group
-			associated with the current EVC on a UNI. A value of 0 indicates that
-			no ingress bandwidth profile group is associated with the EVC on a UNI.
-	
-			This index indicates the specific bandwidth profile group previously
-			configured via mefServiceBwpGrpCfgTable and mefServiceBwpCfgTable
-			using this value for mefServiceBwpGrpCfgIndex. There may be multiple
-			entries in mefServiceBwpCfgTable using this index, each containing
-			bandwidth parameters for a different Class of Service Identifier.";
-			reference
-			"[MEF 6.1] 6.1; [MEF 7.2] 6.2.1.3";
-		}
-		
-
-        choice tag-manipulation {
-          description "Tag Action to take for an EVC. 
-		  	  If no case is specified then the default noAction will apply";
-          //case noAction - if not specified then noAction will be taken
-          case tagPop {
-          	container tag-pop {
-          		description "Pop the tag.";
-          		presence "Tag pop.";
-          	}
-          }
-          
-          case tagPush {
-          	container tag-push {
-          		description "Push the tag.";
-          		
-        		leaf push-tag-type { //Microsemi Eagle specific configuration attribute
-        			type enumeration {
-        			  enum pushCtag  { description "Use Ctag type on push"; }
-        			  enum pushStag    { description "Use Stag type on push"; }
-        			}
-        			default pushCtag;
-
-        			description 
-        			  "Specify what tag type should be used is if tagAction is 'push'.";
-        			reference   
-        			 "Edge Assure internal API";
-        		}
-        		
-    			leaf outer-tag-vlan { //Microsemi Eagle specific configuration attribute
-    				type msea:vlan-id-type;
-    				mandatory true;
-    				description 
-    				  "The VLan value to use as the outer tag's vlan.";
-    				reference   
-    				 "Edge Assure internal API";
-    			}
-          	}
-          }
-          
-          case tagOverwrite {
-        	  container tag-overwrite {
-        		  description "Overwrite the tag";
-        		  
-        			leaf outer-tag-vlan { //Microsemi Eagle specific configuration attribute
-        				type msea:vlan-id-type;
-        				mandatory true;
-        				description 
-        				  "The VLan value to use as the outer tag's vlan.";
-        				reference   
-        				 "Edge Assure internal API";
-        			}
-        	  }
-          }
-		}
-        
-		leaf evc-per-uni-service-type { //aka mefServiceEvcPerUniCfgServiceType
-			type enumeration {
-				enum epl {
-					description "Ethernet Private Line Service (EPL)
-					Point-to-Point EVC, all to one bundling";
-				}
-				
-				enum evpl {
-					description "Ethernet Virtual Private Line (EVPL)
-					Point-to-Point EVC, bundling and/or multiplexing";
-				}
-				
-				enum eplan {
-					description "Ethernet Private LAN Service (EP-LAN)
-					Multipoint-to-Multipoint EVC, all to one bundling";
-				}
-				
-				enum evplan {
-					description "Ethernet Virtual Private LAN Service (EVP-LAN)
-					Multipoint-to-Multipoint EVC, bundling and/or multiplexing"; 
-				}
-				
-				enum eptree {
-					description "Ethernet Private Tree Service (EP-Tree)
-					Rooted-Multipoint EVC, all to one bundling";
-				}
-				
-				enum evptree {
-					description "Ethernet Virtual Private Tree Service (EVP-Tree)
-					Rooted-Multipoint EVC, bundling and/or multiplexing";
-				}
-			}
-			config false;
-				
-			description
-			"This object indicates the specific Ethernet service type. The value is 
-			derived from the EVC object 'mefServiceEvcCfgType' and the UNI object
-			'mefServiceUniCfgBundlingMultiplex'.";
-	
-			reference
-			"[MEF 6.1] 6.1; [MEF 7.2] 6.2.1.3";
-		}
-		
-		list flow-mapping {
-			description "A list to track the VLANs relationship to a Flow";
-			key ce-vlan-id;
-			leaf ce-vlan-id {
-				type msea:vlan-id-type;
-				description "A VLan Id";
-			}
-			leaf flow-id {
-				type uint64;
-				description "An identifier for a Flow Rule related to this VLan Id";
-			}
-		}
-	}
-	
-	
-	grouping pcp-color-map-grouping {
-		description "The PCP identifiers for the COS";
-		leaf pcp-id {
-			description "The priority level";
-			type msea:priority-type;
-		}
-		
-		leaf pcp-color {
-			description "The color to apply to this Priority";
-			type msea:cos-color-type;
-//			msea:not-changeable;
-		}
-	}
-	
-	container mef-services {
-		description
-		"This acts as a container of the MEF (6.2) Services configuration.";
-
-		container uni {
-//			must "count(/if:interfaces/if:interface/[mef-interface:mef-service-type = 'bUni2d1']) = 2" {
-//				error-message "The interfaces must be configured as a UNI";
-//				error-app-tag "msea-uni-must-01";
-//			} //Unenforceable as the interface resides in a different module - may have to be implemented in the TransAPI
-
-			presence "If present this device acts as a UNI";
-
-			description "This Edge Assure device support only one UNI.
-				This device supports only one UNI even though it has two interfaces. 
-				One of the interfaces corresponds to the UNI-N side of the UNI, 
-				while the other interface corresponds to the UNI-C side of the interface.
-				Each side performs the mapping to and from the EVC on the ingress
-				of packets to the device.";
-
-		    	
-			leaf name { //aka mefServiceUniCfgIdentifier
-				type msea:identifier45;
-				mandatory true;
-				description
-				"This object indicates the UNI identifier. 
-				MEF 26.1 restricts the maximum size identifiers to 45 octets.";
-				reference
-				"[MEF 6.1] 6.0, [MEF 7.2] 6.2.1.2";
-			}
-			
-			leaf uni-side-interface-assignment {
-				type enumeration {
-					enum uni-c-on-host {
-						description "Uni-C (Customer) is the Host/eth1/LAN  - commonly the System port. 
-							Uni-N (Network) is the Optics/eth0/WAN - commonly the Carrier port";
-					}
-					enum uni-c-on-optics {
-						description "Uni-C (Customer) is the Optics/eth0/WAN - commonly the Carrier port.
-							Uni-N (Network) is the Host/eth1/LAN  - commonly the System port";
-					}
-				}
-				
-				default uni-c-on-host;
-//				msea:not-changeable;
-
-
-				description "An attribute to configure the assignment of UNI-C (Customer) and 
-						UNI-N (Network) to the interfaces.
-						This Edge Assure supports only one UNI over its two interfaces. 
-						One of the interfaces corresponds to the UNI-N side of the UNI, 
-						while the other interface corresponds to the UNI-C side of the interface.
-						Each side acts on packets only on ingress at each interface";
-			}
-			
-			container uni-c { //aka mefServiceUniCfgEntry
-				presence "If present this configures the UNI-C";
-
-				uses uni-attributes;
-				
-				must "//msea-svcs:mef-services/msea-svcs:uni/msea-svcs:uni-n" {
-					error-app-tag "msea-svcs-must-00";
-					error-message "Both UNI-C and UNI-N must be specified";
-				}
-
-				description "The configuration of the UNI-C side of the UNI.
-						UNI-C refers to eth1 by default but can be changed through the 
-						uni-side-interface-assignment attribute.
-						The interface used must have been configured as a UNI";
-			}
-
-			container uni-n { //aka mefServiceUniCfgEntry
-				presence "If present this configures the UNI-N";
-
-				uses uni-attributes;
-
-				must "//msea-svcs:mef-services/msea-svcs:uni/msea-svcs:uni-c" {
-					error-app-tag "msea-svcs-must-01";
-					error-message "Both UNI-C and UNI-N must be specified";
-				}
-
-				description "The configuration of the UNI-C side of the UNI.
-						UNI-N refers to eth0 by default but can be changed through the 
-						uni-side-interface-assignment attribute.
-						The interface used must have been configured as a UNI";
-			}
-
-			list evc { //aka mefServiceEvcPerUniCfgEntry
-				key evc-index;
-				max-elements 32;
-				description "The UNI can support one or more EVCs";
-				
-				
-				leaf evc-index { //aka mefServiceEvcCfgIndex
-					type uint32 {
-						range 1..max;
-					}
-					description
-					"The specific instance of an EVC number.";
-				}
-		
-				leaf name { //aka mefServiceEvcCfgIdentifier
-					type msea:identifier45;
-					mandatory true;
-					
-					description
-					"This object indicates the EVC identifier. The identifier is
-					an arbitrary text string that is used to identify an EVC.
-					Unique string values are chosen to uniquely identify the EVC.
-		
-					Octet values of 0x00 through 0x1f are illegal.
-		
-					MEF 26.1 restricts the maximum size identifiers to 45 octets.";
-					reference
-					"[MEF 6.1] 6.1; [MEF 7.2] 6.2.1.3";
-				}
-
-				
-				leaf uni-evc-id { //aka mefServiceEvcCfgIdentifier
-					type msea:identifier45;
-					config false;
-					description
-					"The UNI EVC ID is a string formed by the concatenation of 
-					the UNI ID (Section 9.1) and the EVC ID (Section 8.2) that
-					is used to identify an EVC at the UNI. It is intended for 
-					management and control purposes.";
-					reference
-					"[MEF 10.3] 10.1";
-				}
-				
-				leaf service-type { //aka mefServiceEvcCfgServiceType
-					type enumeration {
-						enum pointToPoint {
-							description "EVC Point-to-Point service,
-							used for EPL and EVPL services"; 
-						}
-						
-						enum multipointToMultipoint {
-							description "EVC Multipoint-to-Multipoint 
-							Service, used for EP-LAN and EVP-LAN
-							services"; 
-						}
-						
-						enum rootedMultipoint {
-							description "EVC Rooted-Multipoint Service,
-							used for EP-Tree and EVP-Tree services"; 
-						}
-						
-					}
-					default pointToPoint;
-//					msea:not-changeable;
-
-					description
-					"This object configures the EVC service type for the ME-NE.";
-
-					reference
-					"[MEF 6.1] 6.1; [MEF 7.2] 6.2.1.3";
-				}
-
-				leaf mtu-size { //aka mefServiceEvcCfgMtuSize
-					type uint32 {
-						range "9600";
-					}
-					units "octets";
-					default 9600;
-					description
-					"This object indicates the configured EVC maximum service frame format
-					size. It must be less than or equal to the
-					mefServiceEvcStatusMaxMtuSize.";
-					reference
-					"[MEF 6.1] 6.1; [MEF 7.2] 6.2.1.3";
-				}
-
-				leaf cevlan-id-preservation { //aka mefServiceEvcCfgCevlanIdPreservation
-					type msea:service-preservation-type;
-					default preserve;
-//					msea:not-changeable;
-					
-					description
-					"This object configures the EVC CE-VLAN ID preservation.
-
-					preserve(1) The CE-VLAN ID is preserved. The ingress CE-VLAN
-					is the CE-VLAN ID at the egress UNI
-					noPreserve(2) The CE-VLAN ID is not preserved. The ingress
-					CE-VLAN ID may not be the CE-VLAN ID at the egress
-					UNI";
-					reference
-					"[MEF 6.1] 6.1; [MEF 7.2] 6.2.1.3";
-				}
-
-				leaf cevlan-cos-preservation { //aka mefServiceEvcCfgCevlanCosPreservation
-					type msea:service-preservation-type;
-					default preserve;
-//					msea:not-changeable;
-
-					description
-					"This object configures EVC CE-VLAN CoS preservation.
-
-					preserve(1) The CE-VLAN CoS is preserved. The ingress CE-VLAN
-					CoS is the CE-VLAN CoS at the egress UNI
-					noPreserve(2) The CE-VLAN CoS is not preserved. The ingress
-					CE-VLAN CoS may not be the CE-VLAN CoS at the
-					egress UNI";
-					reference
-					"[MEF 6.1] 6.1; [MEF 7.2] 6.2.1.3";
-				}
-
-				container evc-status { //aka mefServiceEvcStatusEntry
-					config false;
-					description
-					"The conceptual row of mefServiceEvcStatusTable.";
-
-					leaf max-mtu-size { //aka mefServiceEvcStatusMaxMtuSize
-						type uint32 {
-							range "1522..16384";
-						}
-						units "octets";
-						description
-						"This object indicates the EVC maximum configurable service
-						frame format size. The actual configured size is set via the
-						mefServiceEvcCfgMtuSize object.";
-						reference
-						"[MEF 6.1] 6.1; [MEF 7.2] 6.2.1.3";
-					}
-
-					leaf max-num-uni { //aka mefServiceEvcStatusMaxNumUni
-						type uint32 {
-							range "2..16384";
-						}
-						description
-						"This object indicates the maximum number of UNIs in an EVC. For
-						a Point-to-Point EVC this value is '2'. For a Multipoint EVC the
-						value can be '2' or greater.";
-						reference
-						"[MEF 6.1] 6.1; [MEF 7.2] 6.2.1.3";
-					}
-
-					leaf operational-state { //aka mefServiceEvcStatusOperationalState
-						type entity-state:EntityOperState;
-						description
-						"This object indicates the operational state (current
-						capability) of the EVC.
-
-						If the value is 'enabled', the EVC is able to ingress and
-						egress service frames and has been set to active.
-
-						If the value is 'disabled' the EVC is not able to ingress and
-						egress service frames, has detected an operational failure
-						condition, or has failed an internal test.
-
-						If the value is 'testing' the EVC has been placed into a test mode,
-						either a troubleshooting mode or a test mode.
-
-						If the value is 'unknown' the EVC is unable to report the operational
-						state.";
-						reference
-						"[MEF 7.2] 6.2.1.3";
-					}
-				} //End evc-status
-
-				container evc-per-uni {
-					leaf evc-uni-type { //aka mefServiceEvcUniCfgType
-						type enumeration {
-							enum root {
-								description "Valid setting for all service types. A UNI set
-								to this value may send frames to UNIs configured
-								as 'root' or 'leaf'";
-							}
-						}						
-						default root;
-						description
-						"This object configures UNI type on an EVC.";
-						reference
-						"[MEF 10.2]";
-	
-					}
-					
-					container evc-per-uni-c { //aka mefServiceUniCfgEntry
-	
-						description "The configuration of the UNI-C side of the EVC-per-UNI.";
-						
-						uses evc-per-uni-extension-attributes;
-							
-					} //End evc-per-uni-c
-					
-					
-					container evc-per-uni-n { //aka mefServiceUniCfgEntry
-	
-						description "The configuration of the UNI-N side of the EVC-per-UNI";
-			
-						uses evc-per-uni-extension-attributes;
-							
-					} //End evc-per-uni-n
-				}
-			} //End evc
-		} //end of uni
-		
-		
-	container profiles {
-
-		list bwp-group { //aka mefServiceBwpGrpCfgEntry
-
-			key "group-index";
-			max-elements 64;
-			description
-			"Bandwidth profile group settings table entry.";
-
-			leaf group-index { //aka mefServiceBwpGrpCfgIndex
-				type uint8;
-				description
-				"Bandwidth profile group index number";
-			}
-
-			list bwp { //aka mefServiceBwpCfgEntry
-				key "cos-index";//Changed to cos-index (from bwp-index) based on MEP 40 6.4.2 
-				unique name;
-				max-elements 64;
-				
-				description
-				"Bandwidth profile settings table entry.";
-
-				leaf cos-index { //aka mefServiceBwpCfgCosIndex
-					type leafref {
-						path "/msea-svcs:mef-services/msea-svcs:profiles/msea-svcs:cos/msea-svcs:cos-index";
-					}
-					description
-					"This object is the index number of the CoS ID profile
-					associated with the current bandwidth profile. A value of 0 indicates
-					that no CoS ID profile is associated with the bandwidth profile and the
-					bandwidth profile applies to all CoS IDs.
-
-					This index indicates a specific CoS ID profile previously configured via
-					mefServiceCosCfgTable as indicated by the mefServiceCosCfgIndex object.";
-					reference
-					"[MEF 6.1] 6.1; [MEF 7.2] 6.2.1.3";
-					
-					must "count(//msea-svcs:mef-services/msea-svcs:profiles/msea-svcs:cos[msea-svcs:cos-index=//msea-svcs:mef-services/msea-svcs:profiles/msea-svcs:bwp-group[msea-svcs:group-index=current()/../../msea-svcs:group-index]/msea-svcs:bwp/msea-svcs:cos-index]/msea-svcs:*/priority[.='0']) <= 1" {
-						error-app-tag "msea-svcs-must-02";
-						error-message "Priority 0 can be specified only once in the COS's related to a BWP Group";
-					}
-
-					must "count(//msea-svcs:mef-services/msea-svcs:profiles/msea-svcs:cos[msea-svcs:cos-index=//msea-svcs:mef-services/msea-svcs:profiles/msea-svcs:bwp-group[msea-svcs:group-index=current()/../../msea-svcs:group-index]/msea-svcs:bwp/msea-svcs:cos-index]/msea-svcs:*/priority[.='1']) <= 1" {
-						error-app-tag "msea-svcs-must-03";
-						error-message "Priority 1 can be specified only once in the COS's related to a BWP Group";
-					}
-
-					must "count(//msea-svcs:mef-services/msea-svcs:profiles/msea-svcs:cos[msea-svcs:cos-index=//msea-svcs:mef-services/msea-svcs:profiles/msea-svcs:bwp-group[msea-svcs:group-index=current()/../../msea-svcs:group-index]/msea-svcs:bwp/msea-svcs:cos-index]/msea-svcs:*/priority[.='2']) <= 1" {
-						error-app-tag "msea-svcs-must-04";
-						error-message "Priority 2 can be specified only once in the COS's related to a BWP Group";
-					}
-
-					must "count(//msea-svcs:mef-services/msea-svcs:profiles/msea-svcs:cos[msea-svcs:cos-index=//msea-svcs:mef-services/msea-svcs:profiles/msea-svcs:bwp-group[msea-svcs:group-index=current()/../../msea-svcs:group-index]/msea-svcs:bwp/msea-svcs:cos-index]/msea-svcs:*/priority[.='3']) <= 1" {
-						error-app-tag "msea-svcs-must-05";
-						error-message "Priority 3 can be specified only once in the COS's related to a BWP Group";
-					}
-
-					must "count(//msea-svcs:mef-services/msea-svcs:profiles/msea-svcs:cos[msea-svcs:cos-index=//msea-svcs:mef-services/msea-svcs:profiles/msea-svcs:bwp-group[msea-svcs:group-index=current()/../../msea-svcs:group-index]/msea-svcs:bwp/msea-svcs:cos-index]/msea-svcs:*/priority[.='4']) <= 1" {
-						error-app-tag "msea-svcs-must-06";
-						error-message "Priority 4 can be specified only once in the COS's related to a BWP Group";
-					}
-
-					must "count(//msea-svcs:mef-services/msea-svcs:profiles/msea-svcs:cos[msea-svcs:cos-index=//msea-svcs:mef-services/msea-svcs:profiles/msea-svcs:bwp-group[msea-svcs:group-index=current()/../../msea-svcs:group-index]/msea-svcs:bwp/msea-svcs:cos-index]/msea-svcs:*/priority[.='5']) <= 1" {
-						error-app-tag "msea-svcs-must-07";
-						error-message "Priority 5 can be specified only once in the COS's related to a BWP Group";
-					}
-
-					must "count(//msea-svcs:mef-services/msea-svcs:profiles/msea-svcs:cos[msea-svcs:cos-index=//msea-svcs:mef-services/msea-svcs:profiles/msea-svcs:bwp-group[msea-svcs:group-index=current()/../../msea-svcs:group-index]/msea-svcs:bwp/msea-svcs:cos-index]/msea-svcs:*/priority[.='6']) <= 1" {
-						error-app-tag "msea-svcs-must-08";
-						error-message "Priority 6 can be specified only once in the COS's related to a BWP Group";
-					}
-
-					must "count(//msea-svcs:mef-services/msea-svcs:profiles/msea-svcs:cos[msea-svcs:cos-index=//msea-svcs:mef-services/msea-svcs:profiles/msea-svcs:bwp-group[msea-svcs:group-index=current()/../../msea-svcs:group-index]/msea-svcs:bwp/msea-svcs:cos-index]/msea-svcs:*/priority[.='7']) <= 1" {
-						error-app-tag "msea-svcs-must-09";
-						error-message "Priority 7 can be specified only once in the COS's related to a BWP Group";
-					}
-
-					
-					must "count(//msea-svcs:mef-services/msea-svcs:profiles/msea-svcs:cos[msea-svcs:cos-index=//msea-svcs:mef-services/msea-svcs:profiles/msea-svcs:bwp-group[msea-svcs:group-index=current()/../../msea-svcs:group-index]/msea-svcs:bwp/msea-svcs:cos-index]/msea-svcs:evc-cos-type-all-8-prio-to-1-evc-color) <= 1" {
-						error-app-tag "msea-svcs-must-10";
-						error-message "Only one COS can be specified in a Bandwidth Profile Group when the cos-type is 'evc-cos-type-all-8-prio-to-1-evc-color' ";
-					}
-
-					must "count(//msea-svcs:mef-services/msea-svcs:profiles/msea-svcs:cos[msea-svcs:cos-index=//msea-svcs:mef-services/msea-svcs:profiles/msea-svcs:bwp-group[msea-svcs:group-index=current()/../../msea-svcs:group-index]/msea-svcs:bwp/msea-svcs:cos-index]/msea-svcs:evc-cos-type-all-8-prio-to-1-pcp-color) <= 1" {
-						error-app-tag "msea-svcs-must-11";
-						error-message "Only one COS can be specified in a Bandwidth Profile Group when the cos-type is 'evc-cos-type-all-8-prio-to-1-pcp-color' ";
-					}
-
-					must "count(//msea-svcs:mef-services/msea-svcs:profiles/msea-svcs:cos[msea-svcs:cos-index=//msea-svcs:mef-services/msea-svcs:profiles/msea-svcs:bwp-group[msea-svcs:group-index=current()/../../msea-svcs:group-index]/msea-svcs:bwp/msea-svcs:cos-index]/msea-svcs:evc-cos-type-all-8-prio-to-1-dei-color) <= 1" {
-						error-app-tag "msea-svcs-must-12";
-						error-message "Only one COS can be specified in a Bandwidth Profile Group when the cos-type is 'evc-cos-type-all-8-prio-to-1-dei-color' ";
-					}
-
-					must "current()/../../msea-svcs:group-index > 0" {
-						error-app-tag "msea-svcs-must-15";
-						error-message "No BWP's can be added to the Bandwidth Profile Group 0, as this index represents a special case";
-					}
-				}
-
-				leaf name { //mefServiceBwpCfgIdentifier
-					type string {
-						length "1..45";
-					}
-					mandatory true;
-					description
-					"This object indicates the bandwidth profile identifier for the
-					associated bandwidth profile index and is an arbitrary
-					text string that is used to identify a bandwidth profile. Unique
-					string values are chosen to uniquely identify the bandwidth
-					profile.
-
-					Octet values of 0x00 through 0x1f are illegal.
-
-					MEF 26.1 restricts the maximum size identifiers to 45 octets.";
-					reference
-					"[MEF 6.1] 6.0, 6.1, 6.2, 6.3; [MEF 7.2] 6.2.1.2, 6.2.1.3";
-				}
-
-				leaf committed-information-rate { //aka mefServiceBwpCfgCir
-					type uint32 {
-						range "0..10000000";
-					}
-					units "kbits/s";
-					default 1000000;
-//					msea:not-changeable;
-					
-					description
-					"This object indicates the Committed Information Rate (CIR) in kbits/s
-					and defines the average rate in kbits/sec up to which
-					the network delivers Service Frames. Service Frames that meet
-					the CIR are said to be in profile or in conformance to performance
-					objectives. These frames are generally identified as 'Green' 
-					Service Frames.";
-					reference
-					"[MEF 6.1] 6.0, 6.1, 6.2, 6.3; [MEF 7.2] 6.2.1.2, 6.2.1.3";
-				}
-
-				leaf committed-burst-size { //aka mefServiceBwpCfgCbs
-					type uint32 {
-						range "0..10000000";
-					}
-					units "bytes";
-					default 12;
-//					msea:not-changeable;
-
-					description
-					"This object indicates the Committed Burst Size (CBS) in bytes. It limits
-					the maximum number of bytes available for a burst of Service Frames sent
-					at interface speed to remain CIR-conformant.";
-					reference
-					"[MEF 10.2]";
-				}
-
-				leaf excess-information-rate { //aka mefServiceBwpCfgEir
-					type uint32 {
-						range "0..10000000";
-					}
-					units "kbits/s";
-//					msea:not-changeable;
-
-					description
-					"This object indicates the Excess Information Rate (EIR) in kbits/s
-					and defines the average rate in kbits/sec of Service Frames up to
-					which the network may deliver Service Frames but without performance
-					objectives. Service Frames that meet the EIR as set to be in out-of-
-					profile or not in conformance to performance objectives. These
-					frames are not guaranteed to be delivered and are generally identified
-					as 'Yellow' service frames.";
-					reference
-					"[MEF 6.1] 6.0, 6.1, 6.2, 6.3; [MEF 7.2] 6.2.1.2, 6.2.1.3";
-				}
-
-				leaf excess-burst-size { //aka mefServiceBwpCfgEbs
-					type uint32 {
-						range "0..10000000";
-					}
-					units "bytes";
-//					msea:not-changeable;
-
-					description
-					"This object indicates the Excess Burst Size (EBS) in bytes. It limits
-					the maximum number of bytes available for a burst of Service Frames
-					sent at the interface speed to remain EIR-conformant.";
-					reference
-					"[MEF 6.1] 6.0, 6.1, 6.2, 6.3; [MEF 7.2] 6.2.1.2, 6.2.1.3";
-				}
-
-				leaf color-mode { //aka mefServiceBwpCfgCm
-					type enumeration {
-						enum colorBlind {description "A bandwidth profile property where ingress 
-							Service Frames are not pre-colored for either
-							green or yellow, and if present, is ignored when
-							determining the level of compliance for each
-							Service Frame";
-						}
-						
-						enum colorAware {
-							description "A bandwidth profile property were a pre-determined
-							level of Bandwidth Profile compliance for each
-							Service Frame is taken into account when determining
-							the level of compliance for each Service Frame.
-							Each service frame can be colored red (discarded),
-							yellow (conditional delivery), or green (unconditional
-							delivery.";
-						}
-					}
-					default colorBlind;
-//					msea:not-changeable;
-
-					description
-					"This object configures the bandwidth profile color mode.";
-
-					reference
-					"[MEF 6.1] 6.0, 6.1, 6.2, 6.3; [MEF 7.2] 6.2.1.2, 6.2.1.3";
-				}
-
-				leaf coupling-flag { //aka mefServiceBwpCfgCf
-					type enumeration {
-						enum couplingYellowEirOnly {
-							description "The long term average bit rate of Service
-							Frames that are declared Yellow is bounded by EIR."; 
-						}
-
-						enum couplingYellowEirPlusCir {
-							description "The long term average bit rate of Service
-							Frames that are declared Yellow is bounded
-							by CIR + EIR depending on the volume of
-							the offered Service Frames that are
-							declared Green.";
-						}
-					}
-					
-					default couplingYellowEirOnly;
-//					msea:not-changeable;
-
-					description
-					"This object configures the bandwidth profile coupling flag and has
-					the effect of controlling the volume of the Service Frames that are
-					declared Yellow.";
-
-					reference
-					"[MEF 6.1] 6.0, 6.1, 6.2, 6.3; [MEF 7.2] 6.2.1.2, 6.2.1.3";
-				}
-
-			} //End bwp
-
-		} //End bwp-group
-
-		list cos { //aka mefServiceCosCfgEntry
-			key "cos-index";
-			unique name;
-			max-elements 64;
-			description
-			"Class of Service Identifier settings table entry.";
-
-			leaf cos-index { //aka mefServiceCosCfgIndex
-				type uint32 {
-					range 1..max;
-				}
-				description
-				"Class of Service Identifier profile index number.";
-			}
-
-			leaf name { //aka mefServiceCosCfgIdentifier
-				type string {
-					length 1..45;
-				}
-				
-				description
-				"This object indicates the Class of Service Name for the
-				associated CoS profile index and is an arbitrary text string that is
-				used to identify a CoS ID profile. Unique string values are chosen to
-				uniquely identify the profile.
-
-				Octet values of 0x00 through 0x1f are illegal.
-
-				MEF 26.1 restricts the maximum size identifiers to 45 octets.";
-				reference
-				"[MEF 6.1] 6.0, 6.1, 6.2, 6.3; [MEF 7.2] 6.2.1.2, 6.2.1.3";
-			}
-			
-			choice cos-type-choice {
-				description "CoS configuration alternatives.";
-				//We have 6 choices in a single tier choice structure which is easier for client
-				//tools to represent automatically rather than a two tier choice structure
-				
-				case evc-cos-type-evc-color-id {
-					container evc-cos-type-all-8-prio-to-1-evc-color {
-						description "Indicates that the CoS profile is associated
-						with the virtual channel, i.e. EVC or OVC. All 8 priorities
-						are mapped to the outgoing-cos-value - therefore there can 
-						only be one of this type of COS specified in any BWP Group";
-								
-						leaf evc-all-8-color-to {
-							description "The color to be applied regardless of priority";
-							mandatory true;
-							type msea:cos-color-type;
-						}
-					}							
-				}
-				
-				case evc-cos-type-pcp-color-id {
-				
-					container evc-cos-type-all-8-prio-to-1-pcp-color {
-						description "Indicates that the CoS profile is associated
-						with the virtual channel, i.e. EVC or OVC. All 8 priorities
-						are mapped to the outgoing-cos-value - therefore there can 
-						only be one of this type of COS specified in any BWP Group";
-
-						list pcp-color-per-prio {
-							key pcp-id;
-							description "The PCP value of the incoming frame is 
-							used to lookup the following table to determine the 
-							frame's color";
-
-							min-elements 8;
-							max-elements 8;
-							uses pcp-color-map-grouping;
-						}
-					}
-				}
-							
-				case evc-cos-type-dei-color-id {
-					container evc-cos-type-all-8-prio-to-1-dei-color {
-						presence "Cos type EVC and Color Mapping DEI";
-						
-						description "Indicates that the CoS profile is associated
-						with the virtual channel, i.e. EVC or OVC. All 8 priorities
-						are mapped to the outgoing-cos-value - therefore there can 
-						only be one of this type of COS specified in any BWP Group
-						The source of the color is DEI of the
-						incoming frame. False (0) in the DEI field will set 
-						the color to Green and True (1) will set to Yellow";
-
-					}
-				}
-					
-				case pcp-cos-type-evc-color-id {
-					container pcp-cos-type-n-prio-to-1-evc-color {
-						description "Indicates that the CoS profile is associated
-							with the incoming frame's Priority Code Point (priority bits).";
-							
-						leaf-list priority {
-							type msea:priority-type;
-							ordered-by system;
-							
-							description "A list of priorities that apply to this COS.
-							When the COS type is PCP a subset of the priorities can 
-							be specified. Other priorities can be specified in 
-							additional COS profiles. In total the same priority
-							cannot be repeated in a BWP Group";
-
-							min-elements 1;
-							max-elements 8;
-						}
-						
-						leaf evc-all-8-colors-to {
-							description "The color to be applied regardless 
-							of priority. If multiple instances of this cos
-							type have different values then the color-type
-							of the last one will apply";
-
-							type msea:cos-color-type;
-							mandatory true;
-						}
-					}
-				}
-							
-				case pcp-cos-type-pcp-color-id {
-					container pcp-cos-type-n-prio-to-1-pcp-color {
-						description "Indicates that the CoS profile is associated
-							with the incoming frame's Priority Code Point (priority bits). 
-							The PCP value of the incoming frame is used to lookup the 
-							follwing table to determine the frame's color";
-							
-						leaf-list priority {
-							type msea:priority-type;
-							min-elements 1;
-							max-elements 8;
-							ordered-by system;
-
-							description "A list of priorities that apply to this COS.
-							When the COS type is PCP a subset of the priorities can 
-							be specified. Other priorities can be specified in 
-							additional COS profiles. In total the same priority
-							cannot be repeated in a BWP Group";
-						}
-						
-						list pcp-color-for-prio {
-							key pcp-id;
-							description "Each priority specified above must
-							have a corresponding color otherwise the default 
-							(green) will apply";
-
-							min-elements 1;
-							ordered-by system;
-
-							uses pcp-color-map-grouping {
-								refine pcp-id {
-									must "count(current()/../../msea-svcs:priority[.=current()]) = 1" {
-										error-message "Each element must already exist in the priority list";
-									}
-								}
-							}
-						}
-					}
-				}
-							
-
-				case pcp-cos-type-dei-color-id {
-					container pcp-cos-type-n-prio-to-1-dei-color {
-						description "Indicates that the CoS profile is associated
-							with the incoming frame's Priority Code Point (priority bits). 
-							The DEI value of the incoming frame is used to determine 
-							the frame's color. False (0) in the DEI field of the frame 
-							will set the color to Green and True (1) will set to Yellow";
-							
-						leaf-list priority {
-							type msea:priority-type;
-							min-elements 1;
-							max-elements 8;
-							ordered-by system;
-							
-							description "A list of priorities that apply to this COS.
-							When the COS type is PCP a subset of the priorities can 
-							be specified. Other priorities can be specified in 
-							additional COS profiles. In total the same priority
-							cannot be repeated in a BWP Group";
-						}
-					}
-				}
-				
-				mandatory true;
-//				msea:not-changeable;
-			}
-		    
-			leaf outgoing-cos-value {
-			  type msea:priority-type;
-			  mandatory true;
-//			  msea:not-changeable;
-
-		      description
-		        "Used to set the egress COS to use for all ingress COS explicitly listed";
-		      reference   
-				 "Edge Assure internal API";
-		    }
-
-			leaf color-aware {
-			  type boolean;
-			  mandatory true;
-//			  msea:not-changeable;
-
-			  description
-			    "Set if the profile should be treated as colour aware (true) or not (false)";
-		      reference   
-				 "Edge Assure internal API";
-			}
-			
-			leaf color-forward {
-			  type boolean;
-			  mandatory true;
-//			  msea:not-changeable;
-
-			  description
-			    "Used to override the colour mapping of the profile. If true the ingress colour is forwarded";
-		      reference   
-				 "Edge Assure internal API";
-			}
-
-		} //End cos
-		
-	      
-    } //End of profiles
-
-	} //End of mef-services
-
-} /* end of module msea-uni-evc-service */
\ No newline at end of file
diff --git a/drivers/microsemi/ea1000yang/src/main/yang/nc-notifications.yang b/drivers/microsemi/ea1000yang/src/main/yang/nc-notifications.yang
deleted file mode 100644
index 5636aeb..0000000
--- a/drivers/microsemi/ea1000yang/src/main/yang/nc-notifications.yang
+++ /dev/null
@@ -1,95 +0,0 @@
-module nc-notifications {
-
-    namespace "urn:ietf:params:xml:ns:netmod:notification";
-    prefix "manageEvent";
-
-    import ietf-yang-types{ prefix yang; }
-    import notifications { prefix ncEvent; }
-
-    organization
-      "IETF NETCONF WG";
-
-    contact
-      "netconf@ietf.org";
-
-    description
-      "Conversion of the 'manageEvent' XSD in the NETCONF
-       Notifications RFC.";
-
-    reference
-      "RFC 5277";
-
-    revision 2008-07-14 {
-      description "RFC 5277 version.";
-    }
-
-    container netconf {
-      description "Top-level element in the notification namespace";
-
-      config false;
-
-      container streams {
-        description 
-          "The list of event streams supported by the system. When
-           a query is issued, the returned set of streams is 
-           determined based on user privileges.";
-
-        list stream {
-          description 
-            "Stream name, description and other information.";
-          key name;
-          min-elements 1;
-
-          leaf name {
-            description
-              "The name of the event stream. If this is the default
-               NETCONF stream, this must have the value 'NETCONF'.";
-            type ncEvent:streamNameType;
-          }
-
-          leaf description {
-            description
-              "A description of the event stream, including such
-               information as the type of events that are sent over
-               this stream.";
-            type string;
-            mandatory true;
-          }
-
-          leaf replaySupport {
-            description
-              "A description of the event stream, including such
-               information as the type of events that are sent over
-               this stream.";
-            type boolean;
-            mandatory true;
-          }
-
-          leaf replayLogCreationTime {
-            description
-              "The timestamp of the creation of the log used to support
-               the replay function on this stream. Note that this might
-               be earlier then the earliest available notification in
-               the log. This object is updated if the log resets for 
-               some reason.  This object MUST be present if replay is
-               supported.";
-            type yang:date-and-time;   // xsd:dateTime is wrong!
-          }
-        }
-      }
-    }
-
-    notification replayComplete {
-      description
-        "This notification is sent to signal the end of a replay
-         portion of a subscription.";
-    }
-
-    notification notificationComplete {
-      description
-        "This notification is sent to signal the end of a notification
-         subscription. It is sent in the case that stopTime was
-         specified during the creation of the subscription..";
-    }
-
-}
diff --git a/drivers/microsemi/ea1000yang/src/main/yang/netopeer-cfgnetopeer.yang b/drivers/microsemi/ea1000yang/src/main/yang/netopeer-cfgnetopeer.yang
deleted file mode 100644
index 79f1566..0000000
--- a/drivers/microsemi/ea1000yang/src/main/yang/netopeer-cfgnetopeer.yang
+++ /dev/null
@@ -1,72 +0,0 @@
-module netopeer-cfgnetopeer {
-  namespace "urn:cesnet:tmc:netopeer:1.0";
-  prefix cfgnetopeer;
-
-  organization "CESNET, z.s.p.o.";
-  contact
-    "dkupka@cesnet.cz";
-  description
-    "Module specifying Netopeer module data model and RPC operation.";
-
-  revision 2013-02-14 {
-    description
-      "Modules are now configurable. Except implemented-rpcs which depends on module data model.";
-  }
-  revision 2012-11-13 {
-    description
-      "Removed parts implemented by library (RFC6022).";
-  }
-  revision 2011-10-20 {
-    description
-      "Initial revision";
-  }
-
-  container netopeer {
-    container modules {
-      list module {
-        key "name";
-        leaf name {
-          type string;
-          description
-            "Name of module";
-        }
-        leaf enabled {
-          type boolean;
-          default false;
-          description
-            "Specify whether or not the module is allowed to be managed over server.";
-        }
-      }
-    }
-  }
-  rpc netopeer-reboot {
-    description
-      "Operation allowing privileged user to restart netopeer-server.";
-    input {
-      leaf type {
-        type enumeration {
-          enum "soft";
-          enum "hard";
-        }
-        default "soft";
-        description
-          "Soft restart only unplugs all device modules and reloads configuration.
-           Hard restart also abort all connections and reload the binary.";
-      }
-    }
-  }
-  rpc reload-module {
-    description
-      "Unload and load any loaded module." ;
-    input {
-      leaf module {
-        type leafref {
-          path "/netopeer/modules/module/name";
-        }
-        mandatory true;
-        description
-          "Name of module to reload.";
-      }
-    }
-  }
-}
diff --git a/drivers/microsemi/ea1000yang/src/main/yang/notifications.yang b/drivers/microsemi/ea1000yang/src/main/yang/notifications.yang
deleted file mode 100644
index 1ae9cc2..0000000
--- a/drivers/microsemi/ea1000yang/src/main/yang/notifications.yang
+++ /dev/null
@@ -1,95 +0,0 @@
-module notifications {
-
-    namespace "urn:ietf:params:xml:ns:netconf:notification:1.0";
-    prefix "ncEvent";
-
-    import ietf-yang-types { prefix yang; }
-
-    organization
-      "IETF NETCONF WG";
-
-    contact
-      "netconf@ops.ietf.org";
-
-    description
-      "Conversion of the 'ncEvent' XSD in the 
-       NETCONF Notifications RFC.";
-         
-    reference
-      "RFC 5277.";
-
-    revision 2008-07-14 {
-      description "RFC 5277 version.";
-    }
-
-    typedef streamNameType {
-      description
-        "The name of an event stream.";
-      type string;
-    }
-
-    rpc create-subscription {
-      description
-        "The command to create a notification subscription. It
-         takes as argument the name of the notification stream
-         and filter. Both of those options limit the content of
-         the subscription. In addition, there are two time-related
-         parameters, startTime and stopTime, which can be used to 
-         select the time interval of interest to the notification
-         replay feature.";
-
-      input {
-        leaf stream {
-          description
-            "An optional parameter that indicates which stream of events
-             is of interest. If not present, then events in the default
-             NETCONF stream will be sent.";
-          type streamNameType;
-          default "NETCONF";
-        }
-
-        anyxml filter {
-          description
-            "An optional parameter that indicates which subset of all
-             possible events is of interest. The format of this
-             parameter is the same as that of the filter parameter
-             in the NETCONF protocol operations. If not present,
-             all events not precluded by other parameters will 
-             be sent.";
-        }
-
-        leaf startTime {
-          description
-            "A parameter used to trigger the replay feature and
-             indicates that the replay should start at the time
-             specified. If start time is not present, this is not a
-             replay subscription.";
-          type yang:date-and-time;
-        }
-
-        leaf stopTime {
-          // must ". >= ../startTime";
-          description
-            "An optional parameter used with the optional replay
-             feature to indicate the newest notifications of
-             interest. If stop time is not present, the notifications
-             will continue until the subscription is terminated.
-             Must be used with startTime.";
-          type yang:date-and-time;
-        }
-      }
-    }
-
-   container notification {
-      description "internal struct to start a notification";
-      config false;
-
-      leaf eventTime {
-         mandatory true;
-         type yang:date-and-time;
-      }
-
-      // eventType and any data content goes here
-   }  
-}
-
diff --git a/drivers/microsemi/ea1000yang/src/main/yang/rfc-2544.yang b/drivers/microsemi/ea1000yang/src/main/yang/rfc-2544.yang
deleted file mode 100644
index fb1a7c0..0000000
--- a/drivers/microsemi/ea1000yang/src/main/yang/rfc-2544.yang
+++ /dev/null
@@ -1,509 +0,0 @@
-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
diff --git a/drivers/microsemi/ea1000yang/src/main/yang/svc-activation-types.yang b/drivers/microsemi/ea1000yang/src/main/yang/svc-activation-types.yang
deleted file mode 100644
index f82227b..0000000
--- a/drivers/microsemi/ea1000yang/src/main/yang/svc-activation-types.yang
+++ /dev/null
@@ -1,190 +0,0 @@
-module svc-activation-types {
-
-    /*** NAMESPACE / PREFIX DEFINITION ***/
-
-    namespace "http://www.microsemi.com/svc-activation-types";
-    prefix "sa";
-
-    import ietf-yang-types {
-        prefix yang;
-        revision-date 2013-07-15;
-    }
-
-    import msea-types {
-        prefix msea;
-        revision-date 2016-02-29;
-    }
-
-    import msea-cfm {
-        prefix msea-cfm;
-        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 common types that 
-    are used in both RFC 2544 and ITU-T Y.1564
-
-    Copyright 2015 Microsemi Inc.
-    All rights reserved.";
-
-    revision "2015-10-27" {
-        description
-        "Initial version - Sean Condon, Microsemi";
-        reference "Initial revision";
-    }
-
-    /*
-     * Typedefs
-     */
-    typedef test-status {
-        type enumeration {
-            enum disabled {
-                value 0;
-                description "Test is disabled";
-            }
-            enum running {
-                value 1;
-                description "Test is running";
-            }
-            enum pending {
-                value 2;
-                description "Test is pending";
-            }
-            enum stopped {
-                value 3;
-                description "Test is stopped";
-            }
-            enum completed {
-                value 4;
-                description "Test is completed";
-            }
-            enum failed {
-                value 5;
-                description "Test is failed";
-            }
-        }
-        description "Enumerated values for the status of a test";
-    }
-
-    typedef frame-size-type {
-        type uint16 {
-            range 64..9600;
-        }
-        description "Frame size in bytes data type";
-    }
-
-    grouping mep-config-attribs {
-        description 
-        "Attributes related to the configuration of a MEP";
-
-        leaf maintenance-domain {
-            type leafref {
-                path "/msea-cfm:mef-cfm/msea-cfm:maintenance-domain/msea-cfm:id";
-//                msea:xref-module "msea-cfm";
-            }
-            description
-            "A reference to a specific Maintenance Domain.";
-        }
-
-        leaf maintenance-association {
-            type leafref {
-                path "/msea-cfm:mef-cfm/msea-cfm:maintenance-domain[msea-cfm:id=current()/../maintenance-domain]/msea-cfm:maintenance-association/msea-cfm:id";
-//                msea:xref-module "msea-cfm";
-            }
-            description
-            "A reference to a specific Maintenance Association.";
-        }
-
-        leaf maintenance-association-end-point {
-            type leafref {
-                path "/msea-cfm:mef-cfm/msea-cfm:maintenance-domain[msea-cfm:id=current()/../maintenance-domain]/msea-cfm:maintenance-association[msea-cfm:id=current()/../maintenance-association]/msea-cfm:maintenance-association-end-point/msea-cfm:mep-identifier";
-//                msea:xref-module "msea-cfm";
-            }
-            description
-            "A reference to a specific Maintenance association End Point.";
-        }
-
-
-        leaf remote-mep-id {
-            type leafref {
-                path "/msea-cfm:mef-cfm/msea-cfm:maintenance-domain[msea-cfm:id=current()/../maintenance-domain]/msea-cfm:maintenance-association[msea-cfm:id=current()/../maintenance-association]/msea-cfm:remote-meps";
-//                msea:xref-module "msea-cfm";
-            }
-
-            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";
-        }
-    }
-
-    grouping overwrite-pcp-attribs {
-        leaf overwrite-priority {
-            type msea:priority-type;
-            default 0;
-            description 
-            "The priority in the MEP's TAG is replaced 
-            with this priority if overwrite-pcp is present";
-        }
-    }
-
-    grouping results-header-group {
-        description
-        "Common attributes of a result set.";
-
-        leaf start-time {
-            type yang:date-and-time;
-            mandatory true;
-            description "Time at which the test was started.";
-        }
-
-        leaf end-time {
-            type yang:date-and-time;
-            description "Time at which the test ended. 
-                Not specified if test has ended.";
-        }
-
-        leaf test-status {
-            type test-status;
-            mandatory true;
-            description "The status of the test";
-        }
-    }
-
-    grouping notification-group {
-        description "Attributes related to notifications";
-        leaf new-status {
-          type sa:test-status;
-          mandatory true;
-          description "The new status of the test";
-        }
-        
-        leaf old-status {
-          type sa:test-status;
-          description "The old status of the test";
-        }
-
-        leaf test-type {
-            type string;
-            mandatory true;
-            description "Name of the test currently being performed";
-        }
-    }
-}
\ No newline at end of file
diff --git a/drivers/microsemi/ea1000yang/src/main/yang/y-1564.yang b/drivers/microsemi/ea1000yang/src/main/yang/y-1564.yang
deleted file mode 100644
index 9f40ba8..0000000
--- a/drivers/microsemi/ea1000yang/src/main/yang/y-1564.yang
+++ /dev/null
@@ -1,667 +0,0 @@
-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";
-        }
-    }
-}
diff --git a/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/MockIetfSystemManager.java b/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/MockIetfSystemManager.java
deleted file mode 100644
index 49723f0..0000000
--- a/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/MockIetfSystemManager.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.drivers.microsemi.yang;
-
-import java.io.IOException;
-import java.io.UncheckedIOException;
-
-import org.onosproject.drivers.microsemi.yang.impl.IetfSystemManager;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.system.rev20160505.IetfSystemMicrosemiService;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.system.rev20140806.IetfSystemService;
-import org.onosproject.yms.app.yab.MockYmsManager;
-
-public class MockIetfSystemManager extends IetfSystemManager {
-
-    @Override
-    public void activate() {
-        try {
-            ymsService = new MockYmsManager();
-            ych = ymsService.getYangCodecHandler();
-            ych.addDeviceSchema(IetfSystemService.class);
-            ych.addDeviceSchema(IetfSystemMicrosemiService.class);
-        } catch (InstantiationException | IllegalAccessException e) {
-            log.error("Failed to load YMS Manager: " + e.getMessage());
-            e.printStackTrace();
-        } catch (IOException e) {
-            log.error("Failed to load YMS Manager: " + e.getMessage());
-            throw new UncheckedIOException(e);
-        }
-    }
-}
diff --git a/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/MockMseaCfmManager.java b/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/MockMseaCfmManager.java
deleted file mode 100644
index af34a02..0000000
--- a/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/MockMseaCfmManager.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.drivers.microsemi.yang;
-
-import java.io.IOException;
-import java.io.UncheckedIOException;
-
-import org.onosproject.drivers.microsemi.yang.impl.MseaCfmManager;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.cfm.rev20160229.MseaCfmService;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.soam.fm.rev20160229.MseaSoamFmService;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.soam.pm.rev20160229.MseaSoamPmService;
-import org.onosproject.yms.app.yab.MockYmsManager;
-
-public class MockMseaCfmManager extends MseaCfmManager {
-
-    @Override
-    public void activate() {
-        try {
-            ymsService = new MockYmsManager();
-            ych = ymsService.getYangCodecHandler();
-            ych.addDeviceSchema(MseaCfmService.class);
-            ych.addDeviceSchema(MseaSoamFmService.class);
-            ych.addDeviceSchema(MseaSoamPmService.class);
-        } catch (InstantiationException | IllegalAccessException e) {
-            log.error("Failed to load YMS Manager: " + e.getMessage());
-            e.printStackTrace();
-        } catch (IOException e) {
-            log.error("Failed to load YMS Manager: " + e.getMessage());
-            throw new UncheckedIOException(e);
-        }
-    }
-}
diff --git a/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/MockMseaSaFilteringManager.java b/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/MockMseaSaFilteringManager.java
deleted file mode 100644
index 60aae90..0000000
--- a/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/MockMseaSaFilteringManager.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.drivers.microsemi.yang;
-
-import java.io.IOException;
-import java.io.UncheckedIOException;
-
-import org.onosproject.drivers.microsemi.yang.impl.MseaSaFilteringManager;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.sa.filtering.rev20160412.MseaSaFilteringService;
-import org.onosproject.yms.app.yab.MockYmsManager;
-
-public class MockMseaSaFilteringManager extends MseaSaFilteringManager {
-
-    @Override
-    public void activate() {
-        try {
-            ymsService = new MockYmsManager();
-            ych = ymsService.getYangCodecHandler();
-            ych.addDeviceSchema(MseaSaFilteringService.class);
-        } catch (InstantiationException | IllegalAccessException e) {
-            log.error("Failed to load YMS Manager: " + e.getMessage());
-            e.printStackTrace();
-        } catch (IOException e) {
-            log.error("Failed to load YMS Manager: " + e.getMessage());
-            throw new UncheckedIOException(e);
-        }
-    }
-}
diff --git a/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/MockMseaUniEvcServiceManager.java b/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/MockMseaUniEvcServiceManager.java
deleted file mode 100644
index c715e78..0000000
--- a/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/MockMseaUniEvcServiceManager.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.drivers.microsemi.yang;
-
-import java.io.IOException;
-import java.io.UncheckedIOException;
-
-import org.onosproject.drivers.microsemi.yang.impl.MseaUniEvcServiceManager;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.MseaUniEvcServiceService;
-import org.onosproject.yms.app.yab.MockYmsManager;
-
-public class MockMseaUniEvcServiceManager extends MseaUniEvcServiceManager {
-    @Override
-    public void activate() {
-        try {
-            ymsService = new MockYmsManager();
-            ych = ymsService.getYangCodecHandler();
-            ych.addDeviceSchema(MseaUniEvcServiceService.class);
-        } catch (InstantiationException | IllegalAccessException e) {
-            log.error("Failed to load YMS Manager: " + e.getMessage());
-            e.printStackTrace();
-        } catch (IOException e) {
-            log.error("Failed to load YMS Manager: " + e.getMessage());
-            throw new UncheckedIOException(e);
-        }
-    }
-}
diff --git a/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/MseaSaFilteringManagerTest.java b/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/MseaSaFilteringManagerTest.java
deleted file mode 100644
index b663554..0000000
--- a/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/MseaSaFilteringManagerTest.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.drivers.microsemi.yang;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
-
-import java.io.UncheckedIOException;
-import java.util.List;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.onlab.packet.Ip4Address;
-import org.onosproject.drivers.microsemi.yang.impl.MseaSaFilteringManager;
-import org.onosproject.netconf.NetconfDeviceInfo;
-import org.onosproject.netconf.NetconfException;
-import org.onosproject.netconf.NetconfSession;
-import org.onosproject.netconf.TargetConfig;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.sa.filtering.rev20160412.MseaSaFiltering;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.sa.filtering.rev20160412.MseaSaFilteringOpParam;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.sa.filtering.rev20160412.mseasafiltering.DefaultSourceIpaddressFiltering;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.sa.filtering.rev20160412.mseasafiltering.SourceIpaddressFiltering;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.sa.filtering.rev20160412.mseasafiltering.sourceipaddressfiltering.DefaultInterfaceEth0;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.sa.filtering.rev20160412.mseasafiltering.sourceipaddressfiltering.InterfaceEth0;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.sa.filtering.rev20160412.mseasafiltering.sourceipaddressfiltering.interfaceeth0.DefaultSourceAddressRange;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.sa.filtering.rev20160412.mseasafiltering.sourceipaddressfiltering.interfaceeth0.SourceAddressRange;
-import org.onosproject.yms.ymsm.YmsService;
-
-public class MseaSaFilteringManagerTest {
-
-    MseaSaFilteringManager mseaSaSvc;
-    YmsService ymsService;
-    NetconfSession session;
-
-    @Before
-    public void setUp() throws Exception {
-        try {
-            mseaSaSvc = new MockMseaSaFilteringManager();
-            mseaSaSvc.activate();
-        } catch (UncheckedIOException e) {
-            fail(e.getMessage());
-        }
-        NetconfDeviceInfo deviceInfo = new NetconfDeviceInfo("netconf", "netconf", Ip4Address.valueOf("1.2.3.4"), 830);
-        session = new MockNetconfSessionEa1000(deviceInfo);
-    }
-
-    @After
-    public void tearDown() throws Exception {
-    }
-
-    @Test
-    public void testGetMseaSaFilteringMseaSaFilteringOpParamNetconfSession() throws NetconfException {
-        SourceIpaddressFiltering.SourceIpaddressFilteringBuilder sipBuilder =
-                new DefaultSourceIpaddressFiltering.SourceIpaddressFilteringBuilder();
-
-        MseaSaFilteringOpParam.MseaSaFilteringBuilder opBuilder =
-                new MseaSaFilteringOpParam.MseaSaFilteringBuilder();
-        MseaSaFilteringOpParam mseaSaFilteringFilter =
-                (MseaSaFilteringOpParam) opBuilder
-                .sourceIpaddressFiltering(sipBuilder.build())
-                .build();
-
-        MseaSaFiltering result = mseaSaSvc.getMseaSaFiltering(mseaSaFilteringFilter, session);
-
-        //Results come from MockNetconfSession SAMPLE_MSEASAFILTERING_REPLY_INIT
-        assertNotNull(result.sourceIpaddressFiltering().interfaceEth0().sourceAddressRange());
-        List<SourceAddressRange> ranges = result.sourceIpaddressFiltering().interfaceEth0().sourceAddressRange();
-        assertEquals(2, ranges.size());
-
-        for (SourceAddressRange sa:ranges) {
-            if (sa.rangeId() == 1) {
-                assertEquals("10.10.10.10/16", sa.ipv4AddressPrefix());
-
-            } else if (sa.rangeId() == 2) {
-                assertEquals("20.30.40.50/18", sa.ipv4AddressPrefix());
-            }
-        }
-    }
-
-    @Test
-    public void testSetMseaSaFilteringMseaSaFilteringOpParamNetconfSessionNcDsType() {
-
-        MseaSaFilteringOpParam mseaSaFilteringConfig = createConfigForEdit("192.168.60.10/27", (short) 3, "Filter3");
-
-        //Calling on the edit-config just makes the change and hopefully does not throw a Netconf Exception
-        try {
-            mseaSaSvc.setMseaSaFiltering(mseaSaFilteringConfig, session, TargetConfig.RUNNING);
-        } catch (NetconfException e) {
-            e.printStackTrace();
-            fail("NETCONF Exception: " + e.getMessage());
-        }
-    }
-
-    /**
-     * This is also called from the test case EA1000FlowRuleProgrammableTest().
-     * In the ea1000driver project
-     * @return
-     */
-    public static MseaSaFilteringOpParam createConfigForEdit(String ipAddrPrefix, short rangeId, String rangeName) {
-        SourceAddressRange.SourceAddressRangeBuilder sarBuilder =
-                new DefaultSourceAddressRange.SourceAddressRangeBuilder();
-        SourceAddressRange saRange =
-                sarBuilder
-                .ipv4AddressPrefix(ipAddrPrefix)
-                .rangeId(rangeId)
-                .name(rangeName)
-                .build();
-
-        InterfaceEth0.InterfaceEth0Builder eth0Builder =
-                new DefaultInterfaceEth0.InterfaceEth0Builder();
-        InterfaceEth0 eth0 = eth0Builder.addToSourceAddressRange(saRange).build();
-
-        SourceIpaddressFiltering.SourceIpaddressFilteringBuilder sipBuilder =
-                new DefaultSourceIpaddressFiltering.SourceIpaddressFilteringBuilder();
-
-        SourceIpaddressFiltering sip = sipBuilder.interfaceEth0(eth0).build();
-
-        MseaSaFilteringOpParam.MseaSaFilteringBuilder opBuilder =
-                new MseaSaFilteringOpParam.MseaSaFilteringBuilder();
-        MseaSaFilteringOpParam mseaSaFilteringConfig =
-                (MseaSaFilteringOpParam) opBuilder
-                .sourceIpaddressFiltering(sipBuilder.build())
-                .build();
-
-        return mseaSaFilteringConfig;
-    }
-}
diff --git a/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/MseaUniEvcServiceManagerTest.java b/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/MseaUniEvcServiceManagerTest.java
deleted file mode 100644
index 79e3435..0000000
--- a/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/MseaUniEvcServiceManagerTest.java
+++ /dev/null
@@ -1,456 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.drivers.microsemi.yang;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
-
-import java.io.UncheckedIOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.onlab.packet.Ip4Address;
-import org.onosproject.drivers.microsemi.yang.impl.MseaUniEvcServiceManager;
-import org.onosproject.drivers.microsemi.yang.utils.CeVlanMapUtils;
-import org.onosproject.netconf.NetconfDeviceInfo;
-import org.onosproject.netconf.NetconfException;
-import org.onosproject.netconf.NetconfSession;
-import org.onosproject.netconf.TargetConfig;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.types.rev20160229.mseatypes.Identifier45;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.types.rev20160229.mseatypes.ServiceListType;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.types.rev20160229.mseatypes.VlanIdType;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.MseaUniEvcService;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.MseaUniEvcServiceOpParam;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.DefaultMefServices;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.MefServices;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.evcperuniextensionattributes.EvcPerUniServiceTypeEnum;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.evcperuniextensionattributes.tagmanipulation.TagPush;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.evcperuniextensionattributes.tagmanipulation.tagpush.tagpush.PushTagTypeEnum;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.evcperuniextensionattributes.tagmanipulation.DefaultTagPush;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.Profiles;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.DefaultProfiles;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.DefaultUni;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.Uni;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.profiles.BwpGroup;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.profiles.Cos;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.profiles.DefaultBwpGroup;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.profiles.DefaultCos;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.profiles.bwpgroup.Bwp;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.profiles.bwpgroup.DefaultBwp;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.profiles.bwpgroup.bwp.ColorModeEnum;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.uni.CustomEvc;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.uni.DefaultEvc;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.uni.Evc;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.uni.UniSideInterfaceAssignmentEnum;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.uni.evc.DefaultEvcPerUni;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.uni.evc.EvcPerUni;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.uni.evc.evcperuni.CustomEvcPerUnic;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.uni.evc.evcperuni.CustomEvcPerUnin;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.uni.evc.evcperuni.DefaultEvcPerUnic;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.uni.evc.evcperuni.DefaultEvcPerUnin;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.uni.evc.evcperuni.EvcPerUnic;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.uni.evc.evcperuni.EvcPerUnin;
-import org.onosproject.yms.ymsm.YmsService;
-
-public class MseaUniEvcServiceManagerTest {
-
-    MseaUniEvcServiceManager mseaUniEvcServiceSvc;
-    YmsService ymsService;
-    NetconfSession session;
-
-    @Before
-    public void setUp() throws Exception {
-        try {
-            mseaUniEvcServiceSvc = new MockMseaUniEvcServiceManager();
-            mseaUniEvcServiceSvc.activate();
-        } catch (UncheckedIOException e) {
-            fail(e.getMessage());
-        }
-        NetconfDeviceInfo deviceInfo = new NetconfDeviceInfo("netconf", "netconf", Ip4Address.valueOf("1.2.3.4"), 830);
-        session = new MockNetconfSessionEa1000(deviceInfo);
-    }
-
-    @After
-    public void tearDown() throws Exception {
-    }
-
-    @Test
-    public void testGetMseaUniEvcServiceMseaUniEvcServiceOpParamNetconfSession() {
-        Uni.UniBuilder uniBuilder = new DefaultUni.UniBuilder();
-
-        MefServices.MefServicesBuilder mefBuilder = new DefaultMefServices.MefServicesBuilder();
-        MefServices mefServices = mefBuilder.uni(uniBuilder.build()).build();
-
-        MseaUniEvcService.MseaUniEvcServiceBuilder evcUniBuilder =
-                new MseaUniEvcServiceOpParam.MseaUniEvcServiceBuilder();
-
-        MseaUniEvcServiceOpParam mseaUniEvcServiceFilter =
-                (MseaUniEvcServiceOpParam) evcUniBuilder.mefServices(mefServices).build();
-        MseaUniEvcService result = null;
-        try {
-            result =
-                    mseaUniEvcServiceSvc.getConfigMseaUniEvcService(
-                            mseaUniEvcServiceFilter, session, TargetConfig.RUNNING);
-        } catch (NetconfException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-            fail("Error: " + e.getMessage());
-        }
-
-        assertNotNull(result);
-    }
-
-    @Test
-    public void testSetMseaUniEvcServiceMseaUniEvcServiceOpParamEvcs() {
-      TagPush.TagPushBuilder tpBuilder1 = new DefaultTagPush.TagPushBuilder();
-      org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc
-          .service.rev20160317.mseaunievcservice.evcperuniextensionattributes.tagmanipulation
-          .tagpush.TagPush.TagPushBuilder tpInnerBuilder1 =
-              new org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea
-                  .uni.evc.service.rev20160317.mseaunievcservice.evcperuniextensionattributes
-                  .tagmanipulation.tagpush.DefaultTagPush.TagPushBuilder();
-      TagPush tp1 = tpBuilder1
-          .tagPush(tpInnerBuilder1
-                  .outerTagVlan(new VlanIdType(3))
-                  .pushTagType(PushTagTypeEnum.PUSHSTAG)
-                  .build())
-          .build();
-
-      EvcPerUnin.EvcPerUninBuilder epunBuilder1 = new DefaultEvcPerUnin.EvcPerUninBuilder();
-      EvcPerUnin epun1 = epunBuilder1
-              .evcPerUniServiceType(EvcPerUniServiceTypeEnum.EVPL)
-              .ceVlanMap(ServiceListType.fromString("10"))
-              .ingressBwpGroupIndex("0")
-              .tagManipulation(tp1)
-              .build();
-
-      EvcPerUnic.EvcPerUnicBuilder epucBuilder1 = new DefaultEvcPerUnic.EvcPerUnicBuilder();
-      EvcPerUnic epuc1 = epucBuilder1
-              .ceVlanMap(new ServiceListType("11"))
-              .ingressBwpGroupIndex("0")
-              .build();
-
-      EvcPerUni.EvcPerUniBuilder epuBuilder = new DefaultEvcPerUni.EvcPerUniBuilder();
-
-      List<Evc> evcList = new ArrayList<Evc>();
-      Evc.EvcBuilder evcBuilder1 = new DefaultEvc.EvcBuilder();
-      evcList.add(evcBuilder1
-              .evcIndex(1)
-              .name(new Identifier45("evc-1"))
-              .evcPerUni(epuBuilder.evcPerUnin(epun1).evcPerUnic(epuc1).build())
-              .build());
-
-
-      EvcPerUnin.EvcPerUninBuilder epunBuilder2 = new DefaultEvcPerUnin.EvcPerUninBuilder();
-      EvcPerUnin epun2 = epunBuilder2
-              .ceVlanMap(ServiceListType.fromString("13"))
-              .ingressBwpGroupIndex("0")
-              .build();
-
-      EvcPerUnic.EvcPerUnicBuilder epucBuilder2 = new DefaultEvcPerUnic.EvcPerUnicBuilder();
-      EvcPerUnic epuc2 = epucBuilder2
-              .ceVlanMap(new ServiceListType("12"))
-              .ingressBwpGroupIndex("0")
-              .build();
-
-      Evc.EvcBuilder evcBuilder2 = new DefaultEvc.EvcBuilder();
-      evcList.add(evcBuilder2
-              .evcIndex(2)
-              .name(new Identifier45("evc-2"))
-              .evcPerUni(epuBuilder.evcPerUnin(epun2).evcPerUnic(epuc2).build())
-              .build());
-
-      Uni.UniBuilder uniBuilder = new DefaultUni.UniBuilder();
-      Uni uni = uniBuilder.name(new Identifier45("testUni")).evc(evcList).build();
-
-      MefServices.MefServicesBuilder mefBuilder = new DefaultMefServices.MefServicesBuilder();
-      MefServices mefServices = mefBuilder.uni(uni).build();
-
-      MseaUniEvcService.MseaUniEvcServiceBuilder evcUniBuilder =
-              new MseaUniEvcServiceOpParam.MseaUniEvcServiceBuilder();
-
-      MseaUniEvcServiceOpParam mseaUniEvcServiceFilter =
-              (MseaUniEvcServiceOpParam) evcUniBuilder.mefServices(mefServices).build();
-      try {
-          mseaUniEvcServiceSvc.setMseaUniEvcService(mseaUniEvcServiceFilter, session, TargetConfig.RUNNING);
-      } catch (NetconfException e) {
-          // TODO Auto-generated catch block
-          e.printStackTrace();
-          fail("Error: " + e.getMessage());
-      }
-    }
-
-    @Test
-    public void testSetMseaUniEvcServiceMseaUniEvcServiceOpParamProfiles() {
-      List<Cos> cosList = new ArrayList<Cos>();
-      Cos.CosBuilder cosBuilder0 = new DefaultCos.CosBuilder();
-      cosList.add(cosBuilder0.cosIndex(0).name("cos0").build());
-      Cos.CosBuilder cosBuilder1 = new DefaultCos.CosBuilder();
-      cosList.add(cosBuilder1.cosIndex(1).name("cos1").build());
-
-      List<BwpGroup> bwpGroupList = new ArrayList<BwpGroup>();
-      BwpGroup.BwpGroupBuilder bwpGrpBuilder = new DefaultBwpGroup.BwpGroupBuilder();
-      bwpGroupList.add(bwpGrpBuilder.groupIndex((short) 0).build());
-
-      List<Bwp> bwpList = new ArrayList<Bwp>();
-      Bwp.BwpBuilder bwpBuilder1 = new DefaultBwp.BwpBuilder();
-      bwpList.add(bwpBuilder1.cosIndex(0).colorMode(ColorModeEnum.COLORAWARE).build());
-      Bwp.BwpBuilder bwpBuilder2 = new DefaultBwp.BwpBuilder();
-      bwpList.add(bwpBuilder2.cosIndex(1).colorMode(ColorModeEnum.COLORBLIND).build());
-
-      BwpGroup.BwpGroupBuilder bwpGrpBuilder1 = new DefaultBwpGroup.BwpGroupBuilder();
-      bwpGroupList.add(bwpGrpBuilder1.groupIndex((short) 1).bwp(bwpList).build());
-
-      Profiles.ProfilesBuilder profilesBuilder = new DefaultProfiles.ProfilesBuilder();
-      Profiles profiles = profilesBuilder.bwpGroup(bwpGroupList).build();
-
-      MefServices.MefServicesBuilder mefBuilder = new DefaultMefServices.MefServicesBuilder();
-      MefServices mefServices = mefBuilder.profiles(profiles).build();
-
-      MseaUniEvcService.MseaUniEvcServiceBuilder evcUniBuilder =
-              new MseaUniEvcServiceOpParam.MseaUniEvcServiceBuilder();
-
-      MseaUniEvcServiceOpParam mseaUniEvcServiceFilter =
-              (MseaUniEvcServiceOpParam) evcUniBuilder.mefServices(mefServices).build();
-      try {
-          mseaUniEvcServiceSvc.setMseaUniEvcService(mseaUniEvcServiceFilter, session, TargetConfig.RUNNING);
-      } catch (NetconfException e) {
-          // TODO Auto-generated catch block
-          e.printStackTrace();
-          fail("Error: " + e.getMessage());
-      }
-    }
-
-    @Test
-    public void testGetMseaUniEvcCeVlanMaps() {
-
-        try {
-            MseaUniEvcService ceVlanMapsResult7 =
-                    mseaUniEvcServiceSvc.getmseaUniEvcCeVlanMaps(session, TargetConfig.RUNNING);
-
-            assertNotNull(ceVlanMapsResult7.mefServices().uni().evc());
-
-            List<Evc> evcList = ceVlanMapsResult7.mefServices().uni().evc();
-            assertEquals(3, evcList.size());
-            for (Evc evc : evcList) {
-               assertNotNull(evc.evcPerUni().evcPerUnic().ceVlanMap());
-               assertNotNull(evc.evcPerUni().evcPerUnin().ceVlanMap());
-
-               if (evc.evcIndex() == 7) {
-                   assertEquals("700,710,720", evc.evcPerUni().evcPerUnic().ceVlanMap().string());
-                   assertEquals("701:703", evc.evcPerUni().evcPerUnin().ceVlanMap().string());
-               }
-            }
-
-        } catch (NetconfException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-            fail("Error: " + e.getMessage());
-        }
-    }
-
-    @Test
-    public void testChangeEvcCeVlanMap() {
-        EvcPerUnin.EvcPerUninBuilder epunBuilder1 = new DefaultEvcPerUnin.EvcPerUninBuilder();
-        EvcPerUnin epun1 = epunBuilder1
-                .evcPerUniServiceType(EvcPerUniServiceTypeEnum.EVPL)
-                .ceVlanMap(ServiceListType.fromString("10"))
-                .ingressBwpGroupIndex("0")
-                .build();
-
-        EvcPerUnic.EvcPerUnicBuilder epucBuilder1 = new DefaultEvcPerUnic.EvcPerUnicBuilder();
-        EvcPerUnic epuc1 = epucBuilder1
-                .ceVlanMap(new ServiceListType("11"))
-                .ingressBwpGroupIndex("0")
-                .build();
-
-        EvcPerUni.EvcPerUniBuilder epuBuilder = DefaultEvcPerUni.builder().evcPerUnic(epuc1).evcPerUnin(epun1);
-
-        Evc evc = CustomEvc.builder().evcPerUni(epuBuilder.build()).build();
-
-        assertEquals("10", evc.evcPerUni().evcPerUnin().ceVlanMap().string());
-        assertEquals("11", evc.evcPerUni().evcPerUnic().ceVlanMap().string());
-
-        evc = CustomEvc.builder(evc).addToCeVlanMap(new ServiceListType("12,13"), UniSide.NETWORK).build();
-
-        assertEquals("10,12:13", evc.evcPerUni().evcPerUnin().ceVlanMap().string());
-        assertEquals("11", evc.evcPerUni().evcPerUnic().ceVlanMap().string());
-
-    }
-
-    @Test
-    public void testChangeEvcCeVlanMapNoValues() {
-        EvcPerUnin.EvcPerUninBuilder epunBuilder1 = CustomEvcPerUnin.builder();
-        EvcPerUnin epun1 = epunBuilder1
-                .evcPerUniServiceType(EvcPerUniServiceTypeEnum.EVPL)
-                .ingressBwpGroupIndex("0")
-                .build();
-
-        EvcPerUnic.EvcPerUnicBuilder epucBuilder1 = CustomEvcPerUnic.builder();
-        EvcPerUnic epuc1 = epucBuilder1
-                .ingressBwpGroupIndex("0")
-                .build();
-
-        EvcPerUni.EvcPerUniBuilder epuBuilder = DefaultEvcPerUni.builder().evcPerUnic(epuc1).evcPerUnin(epun1);
-
-        Evc evc = CustomEvc.builder().evcPerUni(epuBuilder.build()).build();
-
-        assertEquals("0", evc.evcPerUni().evcPerUnin().ceVlanMap().string());
-        assertEquals("0", evc.evcPerUni().evcPerUnic().ceVlanMap().string());
-    }
-
-    @Test
-    public void testRemoveEvcUniFlowEntries() {
-
-        Map<Integer, String> ceVlanUpdates = new TreeMap<>();
-        ceVlanUpdates.put((1 << 2), "");
-        ceVlanUpdates.put((1 << 2) + 1, "");
-        ceVlanUpdates.put((2 << 2), "");
-        ceVlanUpdates.put((2 << 2) + 1, "");
-
-        ceVlanUpdates.put((7 << 2), "700,710,720");
-        ceVlanUpdates.put((7 << 2) + 1, "701:703");
-        ceVlanUpdates.put((8 << 2), "800,810,820");
-        ceVlanUpdates.put((8 << 2) + 1, "801,802,803");
-
-        Map<Integer, List<Short>> flowVlanIdMap = new HashMap<>();
-        //These should get ignored because whole EVC is being deleted
-        flowVlanIdMap.put(1 << 2, new ArrayList<Short>());
-        flowVlanIdMap.get(1 << 2).add((short) 11);
-
-        flowVlanIdMap.put((1 << 2) + 1, new ArrayList<Short>());
-        flowVlanIdMap.get((1 << 2) + 1).add((short) 12L);
-
-        //These are the EVCs being removed
-        flowVlanIdMap.put(7 << 2, new ArrayList<Short>());
-        flowVlanIdMap.get(7 << 2).add((short) 730L);
-        flowVlanIdMap.get(7 << 2).add((short) 740L);
-
-        flowVlanIdMap.put((7 << 2) + 1, new ArrayList<Short>());
-        flowVlanIdMap.get((7 << 2) + 1).add((short) 705L);
-        flowVlanIdMap.get((7 << 2) + 1).add((short) 706L);
-
-        flowVlanIdMap.put(8 << 2, new ArrayList<Short>());
-        flowVlanIdMap.get(8 << 2).add((short) 830L);
-        flowVlanIdMap.get(8 << 2).add((short) 840L);
-
-        flowVlanIdMap.put((8 << 2) + 1, new ArrayList<Short>());
-        flowVlanIdMap.get((8 << 2) + 1).add((short) 805L);
-        flowVlanIdMap.get((8 << 2) + 1).add((short) 806L);
-
-        try {
-            mseaUniEvcServiceSvc.removeEvcUniFlowEntries(
-                    ceVlanUpdates, flowVlanIdMap, session, TargetConfig.RUNNING,
-                    UniSideInterfaceAssignmentEnum.UNI_C_ON_OPTICS);
-        } catch (NetconfException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-            fail("Error: " + e.getMessage());
-        }
-    }
-
-    @Test
-    public void testGetVlanSet1() {
-        Short[] vlanIds = CeVlanMapUtils.getVlanSet("10");
-        assertEquals(1, vlanIds.length);
-    }
-
-    @Test
-    public void testGetVlanSet2() {
-        Short[] vlanIds = CeVlanMapUtils.getVlanSet("10:20");
-        assertEquals(11, vlanIds.length);
-        assertEquals(10, vlanIds[0].shortValue());
-        assertEquals(20, vlanIds[10].shortValue());
-    }
-
-    @Test
-    public void testGetVlanSet3() {
-        Short[] vlanIds = CeVlanMapUtils.getVlanSet("10:20,30:40");
-        assertEquals(22, vlanIds.length);
-        assertEquals(10, vlanIds[0].shortValue());
-        assertEquals(40, vlanIds[21].shortValue());
-    }
-
-    @Test
-    public void testGetVlanSet4() {
-        Short[] vlanIds = CeVlanMapUtils.getVlanSet("10,20,30");
-        assertEquals(3, vlanIds.length);
-        assertEquals(10, vlanIds[0].shortValue());
-        assertEquals(30, vlanIds[2].shortValue());
-    }
-
-    @Test
-    public void testVlanListAsString() {
-        assertEquals("20:22", CeVlanMapUtils.vlanListAsString(new Short[]{20, 21, 22}));
-
-        assertEquals("20:22,24:25",
-                CeVlanMapUtils.vlanListAsString(new Short[]{20, 21, 22, 24, 25}));
-
-        assertEquals("30,33,36:40",
-                CeVlanMapUtils.vlanListAsString(new Short[]{30, 33, 36, 37, 38, 39, 40}));
-
-        assertEquals("20", CeVlanMapUtils.vlanListAsString(new Short[]{20}));
-
-        assertEquals("20,22,24,26,28",
-                CeVlanMapUtils.vlanListAsString(new Short[]{20, 22, 24, 26, 28}));
-    }
-
-    @Test
-    public void testAddtoCeVlanMap() {
-        assertEquals("20,22:24,26,28",
-                CeVlanMapUtils.addtoCeVlanMap("20,22,24,26,28", (short) 23));
-
-        assertEquals("20:26,28",
-                CeVlanMapUtils.addtoCeVlanMap("20,21,22,24,25,26,28", (short) 23));
-
-        assertEquals("20,23",
-                CeVlanMapUtils.addtoCeVlanMap("20", (short) 23));
-
-        assertEquals("20,22:23",
-                CeVlanMapUtils.addtoCeVlanMap("20,22", (short) 23));
-    }
-
-    @Test
-    public void testCombineVlanSets() {
-        assertEquals("10:11,13:14", CeVlanMapUtils.combineVlanSets("10:11", "13:14"));
-
-        assertEquals("10:14", CeVlanMapUtils.combineVlanSets("10:11", "12:14"));
-
-        assertEquals("10:11,14", CeVlanMapUtils.combineVlanSets("10:11", "14"));
-
-        assertEquals("10:12", CeVlanMapUtils.combineVlanSets("10:11", "11:12"));
-    }
-
-    @Test
-    public void testRemoveZeroIfPossible() {
-        assertEquals("0", CeVlanMapUtils.removeZeroIfPossible(""));
-
-        assertEquals("0", CeVlanMapUtils.removeZeroIfPossible("0"));
-
-        assertEquals("1,3", CeVlanMapUtils.removeZeroIfPossible("0:1,3"));
-
-        assertEquals("1:2", CeVlanMapUtils.removeZeroIfPossible("0:2"));
-
-        assertEquals("10:12", CeVlanMapUtils.removeZeroIfPossible("0,10:12"));
-    }
-}
diff --git a/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/yms/app/yab/MockYmsManager.java b/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/yms/app/yab/MockYmsManager.java
deleted file mode 100644
index 7645a32..0000000
--- a/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/yms/app/yab/MockYmsManager.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onosproject.yms.app.yab;
-
-import static java.lang.String.valueOf;
-
-import java.io.IOException;
-import java.util.List;
-
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.onosproject.core.CoreService;
-import org.onosproject.core.IdGenerator;
-import org.onosproject.drivers.netconf.MockCoreService;
-import org.onosproject.yms.app.ych.DefaultYangCodecHandler;
-import org.onosproject.yms.app.ych.defaultcodecs.YangCodecRegistry;
-import org.onosproject.yms.app.ydt.YangRequestWorkBench;
-import org.onosproject.yms.app.ysr.DefaultYangModuleLibrary;
-import org.onosproject.yms.app.ysr.MockYangSchemaRegistry;
-import org.onosproject.yms.app.ysr.YangSchemaRegistry;
-import org.onosproject.yms.ych.YangCodecHandler;
-import org.onosproject.yms.ych.YangDataTreeCodec;
-import org.onosproject.yms.ych.YangProtocolEncodingFormat;
-import org.onosproject.yms.ydt.YdtBuilder;
-import org.onosproject.yms.ydt.YdtResponse;
-import org.onosproject.yms.ydt.YdtWalker;
-import org.onosproject.yms.ydt.YmsOperationType;
-import org.onosproject.yms.ymsm.YmsService;
-import org.onosproject.yms.ynh.YangNotificationService;
-import org.onosproject.yms.ysr.YangModuleIdentifier;
-import org.onosproject.yms.ysr.YangModuleLibrary;
-
-/**
- * Represents implementation of YANG application management system manager.
- */
-public class MockYmsManager
-        implements YmsService {
-    private static final String MODULE_ID = "module-id";
-
-    YangSchemaRegistry schemaRegistry;
-    private YangModuleLibrary library;
-    private IdGenerator moduleIdGenerator;
-
-    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
-    protected CoreService coreService;
-
-    public MockYmsManager()
-            throws InstantiationException, IllegalAccessException, IOException {
-        coreService = new MockCoreService();
-        moduleIdGenerator = coreService.getIdGenerator(MODULE_ID);
-        library = new DefaultYangModuleLibrary(getNewModuleId());
-        YangCodecRegistry.initializeDefaultCodec();
-    }
-
-    @Override
-    public YdtBuilder getYdtBuilder(String logicalRootName,
-                                    String rootNamespace,
-                                    YmsOperationType operationType) {
-        return new YangRequestWorkBench(logicalRootName, rootNamespace,
-                                        operationType, schemaRegistry, false);
-    }
-
-    @Override
-    public YdtBuilder getYdtBuilder(String logicalRootName,
-                                    String rootNamespace,
-                                    YmsOperationType operationType,
-                                    Object schemaRegistryForYdt) {
-        return null;
-    }
-
-    @Override
-    public YdtWalker getYdtWalker() {
-        return null;
-    }
-
-    @Override
-    public YdtResponse executeOperation(YdtBuilder operationRequest) {
-        YangApplicationBroker requestBroker =
-                new YangApplicationBroker(schemaRegistry);
-        switch (operationRequest.getYmsOperationType()) {
-            case EDIT_CONFIG_REQUEST:
-                try {
-                    return requestBroker.processEdit(operationRequest);
-                } catch (CloneNotSupportedException e) {
-                }
-                break;
-            case QUERY_CONFIG_REQUEST:
-            case QUERY_REQUEST:
-                return requestBroker.processQuery(operationRequest);
-            case RPC_REQUEST:
-                return requestBroker.processOperation(operationRequest);
-            default:
-        }
-        return null;
-    }
-
-    @Override
-    public YangNotificationService getYangNotificationService() {
-        return null;
-    }
-
-    @Override
-    public void registerService(Object appManager, Class<?> yangService,
-                                List<String> supportedFeatureList) {
-    }
-
-    @Override
-    public void unRegisterService(Object appManager, Class<?> yangService) {
-
-    }
-
-    @Override
-    public YangModuleLibrary getYangModuleLibrary() {
-        return library;
-    }
-
-    @Override
-    public String getYangFile(YangModuleIdentifier moduleIdentifier) {
-        return null;
-    }
-
-    @Override
-    public void registerDefaultCodec(YangDataTreeCodec defaultCodec,
-                                     YangProtocolEncodingFormat dataFormat) {
-    }
-
-    @Override
-    public YangCodecHandler getYangCodecHandler() {
-        YangSchemaRegistry registry = new MockYangSchemaRegistry();
-        DefaultYangCodecHandler handler = new DefaultYangCodecHandler(registry);
-        handler.setLibrary(new DefaultYangModuleLibrary(getNewModuleId()));
-        return handler;
-    }
-
-    private String getNewModuleId() {
-        return valueOf(moduleIdGenerator.getNewId());
-    }
-}
diff --git a/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/yms/app/yab/package-info.java b/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/yms/app/yab/package-info.java
deleted file mode 100644
index a8a971c..0000000
--- a/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/yms/app/yab/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Package for Microsemi device drivers support for NETCONF for EA1000.
- */
-package org.onosproject.yms.app.yab;
\ No newline at end of file
diff --git a/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/yms/app/ysr/MockYangSchemaRegistry.java b/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/yms/app/ysr/MockYangSchemaRegistry.java
deleted file mode 100644
index 5de56fd..0000000
--- a/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/yms/app/ysr/MockYangSchemaRegistry.java
+++ /dev/null
@@ -1,767 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onosproject.yms.app.ysr;
-
-import org.onosproject.yangutils.datamodel.YangInclude;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangSchemaNode;
-import org.onosproject.yangutils.datamodel.YangSubModule;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yms.ysr.YangModuleIdentifier;
-import org.onosproject.yms.ysr.YangModuleInformation;
-import org.onosproject.yms.ysr.YangModuleLibrary;
-import org.slf4j.Logger;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.UncheckedIOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.regex.Pattern;
-
-import static java.util.Collections.sort;
-import static org.apache.commons.io.FileUtils.deleteDirectory;
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.deSerializeDataModel;
-import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.HYPHEN;
-import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
-import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
-import static org.onosproject.yangutils.utils.UtilConstants.SERVICE;
-import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
-import static org.slf4j.LoggerFactory.getLogger;
-
-
-/**
- * Representation of default YANG schema registry. Yang schema registry
- * provides interface to an application to register its YANG schema
- * with YMS. It provides YANG schema nodes to YDT, YNB and YSB.
- */
-public class MockYangSchemaRegistry implements YangSchemaRegistry {
-
-    private static final String SYSTEM = SLASH + "system" + SLASH;
-    private static final String MAVEN = "mvn:";
-    private static final String JAR = ".jar";
-    private static final String USER_DIRECTORY = "user.dir";
-    private static final String AT = "@";
-    private static final String DATE_FORMAT = "yyyy-mm-dd";
-    private static final String ONOS = "org.onosproject";
-    private static final Logger log = getLogger(MockYangSchemaRegistry.class);
-
-    private static final String FS = File.separator;
-    private static final String USER_DIR = System.getProperty("user.dir").replaceAll("ea1000driver", "ea1000yang");
-//    private static final String BUCK_OUT_DIR = "/buck-out/gen/drivers/microsemi/ea1000yang/";
-    private static final String BUCK_OUT_BIN_LOC =
-            "/buck-out/bin/drivers/microsemi/ea1000yang/"
-            + "lib__onos-drivers-microsemi-ea1000yang__classes/YangMetaData.ser";
-    private static final String PATH = FS + "target" + FS + "classes" + FS;
-    private static final String SER_FILE_PATH = "yang" + FS + "resources" +
-            FS + "YangMetaData.ser";
-    private static final String RESOURCE = "src/test/resources";
-
-
-    /*
-     * Map for storing app objects.
-     */
-    private final ConcurrentMap<String, Object> appObjectStore;
-
-    /*
-     * Map for storing YANG schema nodes.
-     */
-    private final ConcurrentMap<String, ConcurrentMap<String, YangSchemaNode>>
-            yangSchemaStore;
-
-    /*
-     * Map for storing YANG schema nodes with respect to root's generated
-     * interface file name.
-     */
-    private final ConcurrentMap<String, YangSchemaNode> interfaceNameKeyStore;
-
-    /*
-     * Map for storing YANG schema nodes root's generated op param file name.
-     */
-    private final ConcurrentMap<String, YangSchemaNode> opParamNameKeyStore;
-
-    /*
-     * Map for storing YANG schema nodes with respect to notifications.
-     */
-    private final ConcurrentMap<String, YangSchemaNode> eventNameKeyStore;
-
-    /*
-     * Map for storing YANG schema nodes with respect to app name.
-     */
-    private final ConcurrentMap<String, YangSchemaNode> appNameKeyStore;
-
-    /*
-     * Map for storing registered classes.
-     */
-    private final ConcurrentMap<String, Class<?>> registerClassStore;
-
-    /*
-     * Map for storing YANG file details.
-     */
-    private final ConcurrentMap<YangModuleIdentifier, String> yangFileStore;
-
-    /**
-     * Map for storing schema nodes with respect to namespace.
-     */
-    private final ConcurrentMap<String, YangSchemaNode> nameSpaceSchemaStore;
-
-    private final ConcurrentMap<Object, Boolean> ynhRegistrationStore;
-    private final ConcurrentMap<String, String> jarPathStore;
-
-    /**
-     * Creates an instance of default YANG schema registry.
-     */
-    public MockYangSchemaRegistry() {
-        appObjectStore = new ConcurrentHashMap<>();
-        yangSchemaStore = new ConcurrentHashMap<>();
-        interfaceNameKeyStore = new ConcurrentHashMap<>();
-        opParamNameKeyStore = new ConcurrentHashMap<>();
-        eventNameKeyStore = new ConcurrentHashMap<>();
-        registerClassStore = new ConcurrentHashMap<>();
-        yangFileStore = new ConcurrentHashMap<>();
-        appNameKeyStore = new ConcurrentHashMap<>();
-        ynhRegistrationStore = new ConcurrentHashMap<>();
-        jarPathStore = new ConcurrentHashMap<>();
-        nameSpaceSchemaStore = new ConcurrentHashMap<>();
-    }
-
-
-    /**
-     * This is overridden for Maven and Buck.
-     *
-     * Because they don't have a Bundle Context, and the JAR file doesn't exist
-     * when this is called, we have to work with the .ser file
-     */
-    @Override
-    public void registerApplication(Object appObject, Class<?> serviceClass) {
-        synchronized (MockYangSchemaRegistry.class) {
-            doPreProcessing(serviceClass, appObject);
-            if (!verifyIfApplicationAlreadyRegistered(serviceClass)) {
-
-                List<YangNode> curNodes = new ArrayList<>();
-                Path serFile = Paths.get(USER_DIR, PATH, SER_FILE_PATH);
-                if (USER_DIR.contains("ea1000yang")) {
-                    serFile = Paths.get(USER_DIR, PATH, SER_FILE_PATH);
-                } else {
-                    serFile = Paths.get(USER_DIR, BUCK_OUT_BIN_LOC);
-                }
-
-                if (Files.notExists(serFile)) {
-                    throw new UncheckedIOException(
-                            new IOException("File " + serFile.toString() + " does not exist!"));
-                }
-
-                try {
-                    curNodes.addAll(deSerializeDataModel(serFile.toString()));
-                } catch (IOException e) {
-                    throw new UncheckedIOException(e);
-                }
-
-                // process application registration.
-                if (curNodes != null && !curNodes.isEmpty()) {
-                    jarPathStore.put(serviceClass.getName(), serFile.toString());
-                    processRegistration(serviceClass, serFile.toString(),
-                                        curNodes, appObject, false);
-                } else {
-                    throw new UncheckedIOException(
-                            new IOException("Unable to find Yang Nodes in serFile: " + serFile.toString()));
-                }
-            }
-        }
-    }
-
-    @Override
-    public void unRegisterApplication(Object managerObject,
-                                      Class<?> serviceClass) {
-        synchronized (MockYangSchemaRegistry.class) {
-            YangSchemaNode curNode;
-            String serviceName = serviceClass.getName();
-
-            //Check if service should be unregistered?
-            if (managerObject != null) {
-                verifyApplicationRegistration(managerObject, serviceClass);
-            }
-            //Remove registered class from store.
-            registerClassStore.remove(serviceName);
-            //check if service is in app store.
-            curNode = appNameKeyStore.get(serviceName);
-            if (curNode == null) {
-                curNode = interfaceNameKeyStore.get(serviceName);
-            }
-
-            if (curNode != null) {
-                removeSchemaNode(curNode);
-                eventNameKeyStore.remove(getEventClassName(curNode));
-                appObjectStore.remove(serviceName);
-                interfaceNameKeyStore.remove(getInterfaceClassName(curNode));
-                opParamNameKeyStore.remove(getOpParamClassName(curNode));
-                yangFileStore.remove(getModuleIdentifier(curNode));
-                appNameKeyStore.remove(serviceName);
-                nameSpaceSchemaStore.remove(curNode.getNameSpace()
-                                                    .getModuleNamespace());
-                removeYsrGeneratedTemporaryResources(jarPathStore.get(serviceName),
-                                                     serviceName);
-                log.info(" service {} is unregistered.",
-                         serviceClass.getSimpleName());
-            } else {
-                throw new RuntimeException(serviceClass.getSimpleName() +
-                                                   " service was not registered.");
-            }
-        }
-    }
-
-    @Override
-    public Object getRegisteredApplication(YangSchemaNode schemaNode) {
-        Object obj = null;
-        if (schemaNode != null) {
-            String name = getServiceName(schemaNode);
-            obj = appObjectStore.get(name);
-            if (obj == null) {
-                log.error("{} not found.", name);
-            }
-        }
-        return obj;
-    }
-
-    @Override
-    public YangSchemaNode getYangSchemaNodeUsingSchemaName(String schemaName) {
-        return getSchemaNodeUsingSchemaNameWithRev(schemaName);
-    }
-
-    @Override
-    public YangSchemaNode getYangSchemaNodeUsingAppName(String appName) {
-        YangSchemaNode node = appNameKeyStore.get(appName);
-        if (node == null) {
-            log.error("{} not found.", appName);
-        }
-        return node;
-    }
-
-    @Override
-    public YangSchemaNode
-    getYangSchemaNodeUsingGeneratedRootNodeInterfaceFileName(String name) {
-        YangSchemaNode node = interfaceNameKeyStore.get(name);
-        if (node == null) {
-            log.error("{} not found.", name);
-        }
-        return node;
-    }
-
-    @Override
-    public YangSchemaNode getYangSchemaNodeUsingGeneratedRootNodeOpPramFileName(
-            String name) {
-        YangSchemaNode node = opParamNameKeyStore.get(name);
-        if (node == null) {
-            log.error("{} not found.", name);
-        }
-        return node;
-    }
-
-    @Override
-    public YangSchemaNode getRootYangSchemaNodeForNotification(String name) {
-        YangSchemaNode node = eventNameKeyStore.get(name);
-        if (node == null) {
-            log.error("{} not found.", name);
-        }
-        return node;
-    }
-
-    @Override
-    public Class<?> getRegisteredClass(YangSchemaNode schemaNode) {
-        String interfaceName = getInterfaceClassName(schemaNode);
-        String serviceName = getServiceName(schemaNode);
-        Class<?> regClass = registerClassStore.get(serviceName);
-        if (regClass == null) {
-            regClass = registerClassStore.get(interfaceName);
-        }
-        return regClass;
-    }
-
-    @Override
-    public YangSchemaNode getSchemaWrtNameSpace(String nameSpace) {
-
-        YangSchemaNode node = nameSpaceSchemaStore.get(nameSpace);
-        if (node == null) {
-            log.error("node with {} namespace not found.", nameSpace);
-        }
-        return node;
-    }
-
-    @Override
-    public String getYangFile(YangModuleIdentifier moduleIdentifier) {
-        String file = yangFileStore.get(moduleIdentifier);
-        if (file == null) {
-            log.error("YANG files for corresponding module identifier {} not " +
-                              "found", moduleIdentifier);
-        }
-        return file;
-    }
-
-    @Override
-    public boolean verifyNotificationObject(Object appObj, Class<?> service) {
-        synchronized (MockYangSchemaRegistry.class) {
-            YangSchemaNode node = appNameKeyStore.get(service.getName());
-            if (node == null) {
-                log.error("application is not registered with YMS {}",
-                          service.getName());
-                return false;
-            }
-            try {
-                if (node.isNotificationPresent()) {
-                    if (appObj != null) {
-                        Boolean ifPresent = ynhRegistrationStore.get(appObj);
-                        if (ifPresent == null) {
-                            ynhRegistrationStore.put(appObj, true);
-                            return true;
-                        }
-                    }
-                }
-            } catch (DataModelException e) {
-                log.error("notification registration error: {} {}", e
-                        .getLocalizedMessage(), e);
-            }
-            return false;
-        }
-    }
-
-    @Override
-    public void flushYsrData() {
-        appObjectStore.clear();
-        yangSchemaStore.clear();
-        eventNameKeyStore.clear();
-        opParamNameKeyStore.clear();
-        interfaceNameKeyStore.clear();
-        registerClassStore.clear();
-        yangFileStore.clear();
-        nameSpaceSchemaStore.clear();
-    }
-
-    @Override
-    public void processModuleLibrary(String serviceName,
-                                     YangModuleLibrary library) {
-        synchronized (MockYangSchemaRegistry.class) {
-            YangSchemaNode node = appNameKeyStore.get(serviceName);
-            if (node != null) {
-                YangModuleInformation moduleInformation =
-                        new DefaultYangModuleInformation(getModuleIdentifier(node),
-                                                         node.getNameSpace());
-                addSubModuleIdentifier(node, (
-                        DefaultYangModuleInformation) moduleInformation);
-                //TODO: add feature list to module information.
-                ((DefaultYangModuleLibrary) library)
-                        .addModuleInformation(moduleInformation);
-            }
-        }
-    }
-
-    /**
-     * Process service class.
-     *
-     * @param serviceClass service class
-     * @param appObject    application object
-     */
-
-    void doPreProcessing(Class<?> serviceClass, Object appObject) {
-
-        //Check if service should be registered?
-        if (appObject != null) {
-            verifyApplicationRegistration(appObject, serviceClass);
-        }
-        String name = serviceClass.getName();
-        //Add app class to registered service store.
-        if (!registerClassStore.containsKey(name)) {
-            registerClassStore.put(name, serviceClass);
-        }
-    }
-
-    void updateServiceClass(Class<?> service) {
-        registerClassStore.put(service.getName(), service);
-    }
-
-    /**
-     * Process application registration.
-     *
-     * @param service  service class
-     * @param jarPath  jar path
-     * @param nodes    YANG nodes
-     * @param appObj   application object
-     * @param isFromUt if registration is being called form unit test
-     */
-    void processRegistration(Class<?> service, String jarPath,
-                             List<YangNode> nodes,
-                             Object appObj, boolean isFromUt) {
-
-        // process storing operations.
-        YangNode schemaNode = findNodeWhichShouldBeReg(service.getName(), nodes);
-        if (schemaNode != null) {
-            if (appObj != null) {
-                appObjectStore.put(service.getName(), appObj);
-            }
-            //Process application context for registrations.
-            processApplicationContext(schemaNode, service.getName(), isFromUt);
-            //Update YANG file store.
-            updateYangFileStore(schemaNode, jarPath);
-        }
-    }
-
-    /**
-     * Returns the node for which corresponding class is generated.
-     *
-     * @param name  generated class name
-     * @param nodes list of yang nodes
-     * @return node for which corresponding class is generated
-     */
-    private YangNode findNodeWhichShouldBeReg(String name, List<YangNode> nodes) {
-        for (YangNode node : nodes) {
-            if (name.equals(getServiceName(node)) ||
-                    name.equals(getInterfaceClassName(node))) {
-                return node;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Verifies if service class should be registered or not.
-     *
-     * @param appObject application object
-     * @param appClass  application class
-     */
-    private void verifyApplicationRegistration(Object appObject,
-                                               Class<?> appClass) {
-        Class<?> managerClass = appObject.getClass();
-        Class<?>[] services = managerClass.getInterfaces();
-        List<Class<?>> classes = new ArrayList<>();
-        Collections.addAll(classes, services);
-        if (!classes.contains(appClass)) {
-            throw new RuntimeException("service class " + appClass.getName() +
-                                               "is not being implemented by " +
-                                               managerClass.getName());
-        }
-    }
-
-    /**
-     * Verifies if application is already registered with YMS.
-     *
-     * @param appClass application class
-     * @return true if application already registered
-     */
-    private boolean verifyIfApplicationAlreadyRegistered(Class<?> appClass) {
-        String appName = appClass.getName();
-        return appObjectStore.containsKey(appName) ||
-                interfaceNameKeyStore.containsKey(appName);
-    }
-
-    /**
-     * Updates yang file store for YANG node.
-     *
-     * @param node    YANG node
-     * @param jarPath jar file path
-     */
-    private void updateYangFileStore(YangNode node, String jarPath) {
-        yangFileStore.put(getModuleIdentifier(node),
-                          getYangFilePath(jarPath, node.getFileName()));
-    }
-
-    /**
-     * Returns yang file path.
-     *
-     * @param jarPath          jar path
-     * @param metaDataFileName name of yang file from metadata
-     * @return yang file path
-     */
-    private String getYangFilePath(String jarPath, String metaDataFileName) {
-        String[] metaData = metaDataFileName.split(SLASH);
-        return jarPath + SLASH + metaData[metaData.length - 1];
-    }
-
-
-    /**
-     * Process an application an updates the maps for YANG schema registry.
-     *
-     * @param appNode  application YANG schema nodes
-     * @param name     class name
-     * @param isFormUt if method is being called from unit tests
-     */
-    private void processApplicationContext(YangSchemaNode appNode, String name,
-                                           boolean isFormUt) {
-
-        //Update map for which registrations is being called.
-        appNameKeyStore.put(name, appNode);
-
-        // Updates schema store.
-        addToSchemaStore(appNode);
-        // update interface store.
-        interfaceNameKeyStore.put(getInterfaceClassName(appNode), appNode);
-
-        //update op param store.
-        opParamNameKeyStore.put(getOpParamClassName(appNode), appNode);
-
-        //update namespaceSchema store.
-        nameSpaceSchemaStore.put(appNode.getNameSpace().getModuleNamespace(), appNode);
-
-        //Checks if notification is present then update notification store map.
-        String eventSubject = null;
-        try {
-            if (appNode.isNotificationPresent()) {
-                eventSubject = getEventClassName(appNode);
-            }
-        } catch (DataModelException e) {
-            log.error("failed to search notification from schema map : {}",
-                      e.getLocalizedMessage());
-        }
-        if (eventSubject != null) {
-            eventNameKeyStore.put(eventSubject, appNode);
-        }
-        if (!isFormUt) {
-            log.info("successfully registered this application {}", name);
-        }
-    }
-
-    /**
-     * Returns jar path from bundle mvnLocationPath.
-     *
-     * @param mvnLocationPath mvnLocationPath of bundle
-     * @return path of jar
-     */
-    private String getJarPathFromBundleLocation(String mvnLocationPath,
-                                                String currentDirectory) {
-        String path = currentDirectory + SYSTEM;
-        if (mvnLocationPath.contains(MAVEN)) {
-            String[] strArray = mvnLocationPath.split(MAVEN);
-            if (strArray[1].contains(File.separator)) {
-                String[] split = strArray[1].split(File.separator);
-                if (split[0].contains(PERIOD)) {
-                    String[] groupId = split[0].split(Pattern.quote(PERIOD));
-                    return path + groupId[0] + SLASH + groupId[1] + SLASH + split[1] +
-                            SLASH + split[2] + SLASH + split[1] + HYPHEN + split[2];
-                }
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Returns schema node based on the revision.
-     *
-     * @param name name of the schema node
-     * @return schema node based on the revision
-     */
-    private YangSchemaNode getSchemaNodeUsingSchemaNameWithRev(String name) {
-        ConcurrentMap<String, YangSchemaNode> revMap;
-        YangSchemaNode schemaNode;
-        if (name.contains(AT)) {
-            String[] revArray = name.split(AT);
-            revMap = yangSchemaStore.get(revArray[0]);
-            schemaNode = revMap.get(name);
-            if (schemaNode == null) {
-                log.error("{} not found.", name);
-            }
-            return schemaNode;
-        }
-        if (yangSchemaStore.containsKey(name)) {
-            revMap = yangSchemaStore.get(name);
-            if (revMap != null && !revMap.isEmpty()) {
-                YangSchemaNode node = revMap.get(name);
-                if (node != null) {
-                    return node;
-                }
-                String revName = getLatestVersion(revMap);
-                return revMap.get(revName);
-            }
-        }
-        log.error("{} not found.", name);
-        return null;
-    }
-
-    private String getLatestVersion(ConcurrentMap<String, YangSchemaNode> revMap) {
-        List<String> keys = new ArrayList<>();
-        for (Map.Entry<String, YangSchemaNode> entry : revMap.entrySet()) {
-            keys.add(entry.getKey());
-        }
-        sort(keys);
-        return keys.get(keys.size() - 1);
-    }
-
-    /**
-     * Adds schema node when different revision of node has received.
-     *
-     * @param schemaNode schema node
-     */
-    private void addToSchemaStore(YangSchemaNode schemaNode) {
-
-        String date = getDateInStringFormat(schemaNode);
-        String name = schemaNode.getName();
-        String revName = name;
-        if (date != null) {
-            revName = name + AT + date;
-        }
-        //check if already present.
-        if (!yangSchemaStore.containsKey(name)) {
-            ConcurrentMap<String, YangSchemaNode> revStore =
-                    new ConcurrentHashMap<>();
-            revStore.put(revName, schemaNode);
-            yangSchemaStore.put(name, revStore);
-        } else {
-            yangSchemaStore.get(name).put(revName, schemaNode);
-        }
-    }
-
-    /**
-     * Returns date in string format.
-     *
-     * @param schemaNode schema node
-     * @return date in string format
-     */
-    String getDateInStringFormat(YangSchemaNode schemaNode) {
-        if (schemaNode != null) {
-            if (((YangNode) schemaNode).getRevision() != null) {
-                return new SimpleDateFormat(DATE_FORMAT)
-                        .format(((YangNode) schemaNode).getRevision()
-                                        .getRevDate());
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Removes schema node from schema map.
-     *
-     * @param removableNode schema node which needs to be removed
-     */
-    private void removeSchemaNode(YangSchemaNode removableNode) {
-        String name = removableNode.getName();
-        String revName = name;
-        String date = getDateInStringFormat(removableNode);
-        if (date != null) {
-            revName = name + AT + date;
-        }
-        ConcurrentMap<String, YangSchemaNode> revMap = yangSchemaStore.get(name);
-        if (revMap != null && !revMap.isEmpty() && revMap.size() != 1) {
-            revMap.remove(revName);
-        } else {
-            yangSchemaStore.remove(removableNode.getName());
-        }
-    }
-
-    /**
-     * Adds sub module identifier.
-     *
-     * @param node        schema node
-     * @param information module information
-     */
-    private void addSubModuleIdentifier(
-            YangSchemaNode node, DefaultYangModuleInformation information) {
-        List<YangInclude> includeList = new ArrayList<>();
-        if (node instanceof YangModule) {
-            includeList = ((YangModule) node).getIncludeList();
-        } else if (node instanceof YangSubModule) {
-            includeList = ((YangSubModule) node).getIncludeList();
-        }
-        for (YangInclude include : includeList) {
-            information.addSubModuleIdentifiers(getModuleIdentifier(
-                    include.getIncludedNode()));
-        }
-    }
-
-    /**
-     * Returns module identifier for schema node.
-     *
-     * @param schemaNode schema node
-     * @return module identifier for schema node
-     */
-    private YangModuleIdentifier getModuleIdentifier(
-            YangSchemaNode schemaNode) {
-        return new DefaultYangModuleIdentifier(
-                schemaNode.getName(), getDateInStringFormat(schemaNode));
-    }
-
-    /**
-     * Returns schema node's generated interface class name.
-     *
-     * @param schemaNode schema node
-     * @return schema node's generated interface class name
-     */
-    String getInterfaceClassName(YangSchemaNode schemaNode) {
-        return schemaNode.getJavaPackage() + PERIOD +
-                getCapitalCase(schemaNode.getJavaClassNameOrBuiltInType());
-    }
-
-    /**
-     * Returns schema node's generated op param class name.
-     *
-     * @param schemaNode schema node
-     * @return schema node's generated op param class name
-     */
-    private String getOpParamClassName(YangSchemaNode schemaNode) {
-        return getInterfaceClassName(schemaNode) + OP_PARAM;
-    }
-
-    /**
-     * Returns schema node's generated event class name.
-     *
-     * @param schemaNode schema node
-     * @return schema node's generated event class name
-     */
-    private String getEventClassName(YangSchemaNode schemaNode) {
-        return getInterfaceClassName(schemaNode).toLowerCase() + PERIOD +
-                getCapitalCase(schemaNode.getJavaClassNameOrBuiltInType()) +
-                EVENT_STRING;
-    }
-
-    /**
-     * Returns schema node's generated service class name.
-     *
-     * @param schemaNode schema node
-     * @return schema node's generated service class name
-     */
-    String getServiceName(YangSchemaNode schemaNode) {
-        return getInterfaceClassName(schemaNode) + SERVICE;
-    }
-
-    /**
-     * Removes YSR generated temporary resources.
-     *
-     * @param rscPath resource path
-     * @param appName application name
-     */
-    private void removeYsrGeneratedTemporaryResources(String rscPath,
-                                                      String appName) {
-        if (rscPath != null) {
-            File jarPath = new File(rscPath);
-            if (jarPath.exists()) {
-                try {
-                    deleteDirectory(jarPath);
-                } catch (IOException e) {
-                    log.error("failed to delete ysr resources for {} : {}",
-                              appName, e.getLocalizedMessage());
-                }
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/drivers/microsemi/pom.xml b/drivers/microsemi/pom.xml
deleted file mode 100644
index c404100..0000000
--- a/drivers/microsemi/pom.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<!-- ~ Copyright 2016-present Open Networking Laboratory ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); ~ you may not use this file except in compliance with the License. ~ You may obtain a copy of the License at ~ ~ http://www.apache.org/licenses/LICENSE-2.0 ~ ~ Unless required by applicable law or agreed to in writing, software ~ distributed under the License is distributed on an "AS IS" BASIS, ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.onosproject</groupId>
-        <artifactId>onos-drivers-general</artifactId>
-        <version>1.11.0-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>onos-drivers-microsemi</artifactId>
-    <packaging>pom</packaging>
-
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    </properties>
-
-    <modules>
-        <module>ea1000yang</module>
-        <module>ea1000driver</module>
-    </modules>
-
-    <!-- FIXME this can be removed if/when buck-api is released -->
-    <repositories>
-        <repository>
-            <id>snapshots</id>
-            <url>https://oss.sonatype.org/content/repositories/snapshots</url>
-            <snapshots>
-                <enabled>true</enabled>
-                <updatePolicy>daily</updatePolicy>
-                <checksumPolicy>fail</checksumPolicy>
-            </snapshots>
-        </repository>
-    </repositories>
-
-    <dependencies>
-        <dependency>
-            <groupId>com.google.guava</groupId>
-            <artifactId>guava</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.hamcrest</groupId>
-            <artifactId>hamcrest-all</artifactId>
-            <version>1.3</version>
-            <scope>test</scope>
-        </dependency>
-
-    </dependencies>
-</project>
diff --git a/drivers/microsemi/ea1000driver/src/main/java/org/onosproject/drivers/microsemi/EA1000FlowRuleProgrammable.java b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/EA1000FlowRuleProgrammable.java
similarity index 64%
rename from drivers/microsemi/ea1000driver/src/main/java/org/onosproject/drivers/microsemi/EA1000FlowRuleProgrammable.java
rename to drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/EA1000FlowRuleProgrammable.java
index 3c593d6..4df22ec 100644
--- a/drivers/microsemi/ea1000driver/src/main/java/org/onosproject/drivers/microsemi/EA1000FlowRuleProgrammable.java
+++ b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/EA1000FlowRuleProgrammable.java
@@ -27,6 +27,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.Semaphore;
+import java.util.concurrent.TimeoutException;
 import java.util.stream.Collectors;
 
 import org.onlab.packet.EthType;
@@ -38,6 +39,8 @@
 import org.onosproject.drivers.microsemi.yang.MseaSaFilteringNetconfService;
 import org.onosproject.drivers.microsemi.yang.MseaUniEvcServiceNetconfService;
 import org.onosproject.drivers.microsemi.yang.UniSide;
+import org.onosproject.drivers.microsemi.yang.custom.CustomEvcPerUnic;
+import org.onosproject.drivers.microsemi.yang.custom.CustomEvcPerUnin;
 import org.onosproject.drivers.microsemi.yang.utils.CeVlanMapUtils;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.driver.AbstractHandlerBehaviour;
@@ -61,54 +64,50 @@
 import org.onosproject.net.flow.instructions.L2ModificationInstruction.ModVlanHeaderInstruction;
 import org.onosproject.net.flow.instructions.L2ModificationInstruction.ModVlanIdInstruction;
 import org.onosproject.net.meter.MeterId;
+import org.onosproject.netconf.DatastoreId;
 import org.onosproject.netconf.NetconfController;
+import org.onosproject.netconf.NetconfDevice;
 import org.onosproject.netconf.NetconfException;
 import org.onosproject.netconf.NetconfSession;
-import org.onosproject.netconf.TargetConfig;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.sa.filtering.rev20160412.MseaSaFiltering;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.sa.filtering.rev20160412.MseaSaFilteringOpParam;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.sa.filtering.rev20160412.mseasafiltering.DefaultSourceIpaddressFiltering;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.sa.filtering.rev20160412.mseasafiltering.SourceIpaddressFiltering;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.sa.filtering.rev20160412.mseasafiltering.sourceipaddressfiltering.DefaultInterfaceEth0;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.sa.filtering.rev20160412.mseasafiltering.sourceipaddressfiltering.InterfaceEth0;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.sa.filtering.rev20160412.mseasafiltering.sourceipaddressfiltering.interfaceeth0.DefaultSourceAddressRange;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.sa.filtering.rev20160412.mseasafiltering.sourceipaddressfiltering.interfaceeth0.FilterAdminStateEnum;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.sa.filtering.rev20160412.mseasafiltering.sourceipaddressfiltering.interfaceeth0.SourceAddressRange;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.types.rev20160229.mseatypes.Identifier45;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.types.rev20160229.mseatypes.ServiceListType;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.types.rev20160229.mseatypes.VlanIdType;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.MseaUniEvcService;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.MseaUniEvcServiceOpParam;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.DefaultMefServices;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.MefServices;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.evcperuniextensionattributes.DefaultFlowMapping;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.evcperuniextensionattributes.FlowMapping;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.evcperuniextensionattributes.TagManipulation;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.evcperuniextensionattributes.tagmanipulation.DefaultTagOverwrite;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.evcperuniextensionattributes.tagmanipulation.DefaultTagPop;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.evcperuniextensionattributes.tagmanipulation.DefaultTagPush;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.evcperuniextensionattributes.tagmanipulation.TagOverwrite;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.evcperuniextensionattributes.tagmanipulation.TagPop;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.evcperuniextensionattributes.tagmanipulation.TagPush;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.evcperuniextensionattributes.tagmanipulation.tagpush.tagpush.PushTagTypeEnum;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.DefaultProfiles;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.DefaultUni;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.Profiles;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.Uni;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.profiles.BwpGroup;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.profiles.DefaultBwpGroup;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.uni.CustomEvc;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.uni.DefaultEvc;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.uni.Evc;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.uni.UniSideInterfaceAssignmentEnum;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.uni.evc.DefaultEvcPerUni;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.uni.evc.EvcPerUni;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.uni.evc.evcperuni.CustomEvcPerUnic;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.uni.evc.evcperuni.CustomEvcPerUnin;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.uni.evc.evcperuni.DefaultEvcPerUnic.EvcPerUnicBuilder;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.uni.evc.evcperuni.DefaultEvcPerUnin.EvcPerUninBuilder;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.uni.evc.evcperuni.EvcPerUnic;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.uni.evc.evcperuni.EvcPerUnin;
+import org.onosproject.yang.gen.v1.mseasafiltering.rev20160412.MseaSaFiltering;
+import org.onosproject.yang.gen.v1.mseasafiltering.rev20160412.MseaSaFilteringOpParam;
+import org.onosproject.yang.gen.v1.mseasafiltering.rev20160412.mseasafiltering.DefaultSourceIpaddressFiltering;
+import org.onosproject.yang.gen.v1.mseasafiltering.rev20160412.mseasafiltering.SourceIpaddressFiltering;
+import org.onosproject.yang.gen.v1.mseasafiltering.rev20160412.mseasafiltering.sourceipaddressfiltering.DefaultInterfaceEth0;
+import org.onosproject.yang.gen.v1.mseasafiltering.rev20160412.mseasafiltering.sourceipaddressfiltering.InterfaceEth0;
+import org.onosproject.yang.gen.v1.mseasafiltering.rev20160412.mseasafiltering.sourceipaddressfiltering.interfaceeth0.DefaultSourceAddressRange;
+import org.onosproject.yang.gen.v1.mseasafiltering.rev20160412.mseasafiltering.sourceipaddressfiltering.interfaceeth0.FilterAdminStateEnum;
+import org.onosproject.yang.gen.v1.mseasafiltering.rev20160412.mseasafiltering.sourceipaddressfiltering.interfaceeth0.SourceAddressRange;
+import org.onosproject.yang.gen.v1.mseatypes.rev20160229.mseatypes.Identifier45;
+import org.onosproject.yang.gen.v1.mseatypes.rev20160229.mseatypes.ServiceListType;
+import org.onosproject.yang.gen.v1.mseatypes.rev20160229.mseatypes.VlanIdType;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.MseaUniEvcService;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.MseaUniEvcServiceOpParam;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.DefaultMefServices;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.MefServices;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.evcperuniextensionattributes.DefaultFlowMapping;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.evcperuniextensionattributes.FlowMapping;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.evcperuniextensionattributes.TagManipulation;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.evcperuniextensionattributes.tagmanipulation.DefaultTagOverwrite;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.evcperuniextensionattributes.tagmanipulation.DefaultTagPop;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.evcperuniextensionattributes.tagmanipulation.DefaultTagPush;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.evcperuniextensionattributes.tagmanipulation.TagOverwrite;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.evcperuniextensionattributes.tagmanipulation.TagPop;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.evcperuniextensionattributes.tagmanipulation.TagPush;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.evcperuniextensionattributes.tagmanipulation.tagpush.tagpush.PushTagTypeEnum;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.DefaultProfiles;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.DefaultUni;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.Profiles;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.Uni;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.profiles.BwpGroup;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.profiles.DefaultBwpGroup;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.uni.DefaultEvc;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.uni.Evc;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.uni.UniSideInterfaceAssignmentEnum;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.uni.evc.DefaultEvcPerUni;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.uni.evc.EvcPerUni;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.uni.evc.evcperuni.EvcPerUnic;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.uni.evc.evcperuni.EvcPerUnin;
 import org.slf4j.Logger;
 
 /**
@@ -146,7 +145,14 @@
 
         UniSideInterfaceAssignmentEnum portAssignment = UniSideInterfaceAssignmentEnum.UNI_C_ON_HOST;
         NetconfController controller = checkNotNull(handler().get(NetconfController.class));
-        NetconfSession session = controller.getDevicesMap().get(handler().data().deviceId()).getSession();
+        NetconfDevice ncDevice = controller.getDevicesMap().get(handler().data().deviceId());
+        if (ncDevice == null) {
+            log.error("Internal ONOS Error. Device has been marked as reachable, " +
+                            "but deviceID {} is not in Devices Map. Continuing with empty description",
+                    handler().data().deviceId());
+            return flowEntryCollection;
+        }
+        NetconfSession session = ncDevice.getSession();
         CoreService coreService = checkNotNull(handler().get(CoreService.class));
         ApplicationId appId = coreService.getAppId(MICROSEMI_DRIVERS);
         MseaSaFilteringNetconfService mseaSaFilteringService =
@@ -156,51 +162,58 @@
         log.debug("getFlowEntries() called on EA1000FlowRuleProgrammable");
 
         //First get the MseaSaFiltering rules
-        SourceIpaddressFiltering.SourceIpaddressFilteringBuilder sipBuilder =
-                new DefaultSourceIpaddressFiltering.SourceIpaddressFilteringBuilder();
+        SourceIpaddressFiltering sip =
+                new DefaultSourceIpaddressFiltering();
 
-        MseaSaFilteringOpParam.MseaSaFilteringBuilder opBuilder =
-                new MseaSaFilteringOpParam.MseaSaFilteringBuilder();
-        MseaSaFilteringOpParam mseaSaFilteringFilter =
-                (MseaSaFilteringOpParam) opBuilder
-                .sourceIpaddressFiltering(sipBuilder.build())
-                .build();
+        MseaSaFilteringOpParam op =
+                new MseaSaFilteringOpParam();
+        op.sourceIpaddressFiltering(sip);
+
         try {
             MseaSaFiltering saFilteringCurrent =
-                    mseaSaFilteringService.getMseaSaFiltering(mseaSaFilteringFilter, session);
-            if (saFilteringCurrent != null) {
+                    mseaSaFilteringService.getMseaSaFiltering(op, session);
+            if (saFilteringCurrent != null &&
+                    saFilteringCurrent.sourceIpaddressFiltering() != null) {
                 flowEntryCollection.addAll(
                         convertSaFilteringToFlowRules(saFilteringCurrent, appId));
             }
         } catch (NetconfException e) {
-            log.warn("Unexpected error on getFlowEntries", e);
+            if (e.getCause() instanceof TimeoutException) {
+                log.warn("Timeout exception getting SA Filt Flow Entries from {}",
+                        handler().data().deviceId());
+                return flowEntryCollection;
+            } else {
+                log.error("Unexpected error on SA Filt getFlowEntries on {}",
+                        handler().data().deviceId(), e);
+            }
         }
 
 
         //Then get the EVCs - there will be a flow entry per EVC
-        Uni.UniBuilder uniBuilder = new DefaultUni.UniBuilder();
+        MefServices mefServices = new DefaultMefServices();
+        mefServices.uni(new DefaultUni());
 
-        MefServices.MefServicesBuilder mefBuilder = new DefaultMefServices.MefServicesBuilder();
-        MefServices mefServices = mefBuilder.uni(uniBuilder.build()).build();
-
-        MseaUniEvcService.MseaUniEvcServiceBuilder evcUniBuilder =
-                new MseaUniEvcServiceOpParam.MseaUniEvcServiceBuilder();
-
-        MseaUniEvcServiceOpParam mseaUniEvcServiceFilter =
-                (MseaUniEvcServiceOpParam) evcUniBuilder.mefServices(mefServices).build();
+        MseaUniEvcServiceOpParam mseaUniEvcServiceFilter = new MseaUniEvcServiceOpParam();
+        mseaUniEvcServiceFilter.mefServices(mefServices);
         try {
             MseaUniEvcService uniEvcCurrent =
                     mseaUniEvcServiceSvc.getConfigMseaUniEvcService(mseaUniEvcServiceFilter,
-                            session, TargetConfig.RUNNING);
+                            session, DatastoreId.RUNNING);
 
             flowEntryCollection.addAll(
                     convertEvcUniToFlowRules(uniEvcCurrent, portAssignment));
 
         } catch (NetconfException e) {
-            log.warn("Unexpected error on getFlowEntries", e);
+            if (e.getCause() instanceof TimeoutException) {
+                log.warn("Timeout exception getting EVC Flow Entries from {}",
+                        handler().data().deviceId());
+                return flowEntryCollection;
+            } else {
+                log.error("Unexpected error on EVC getFlowEntries on {}",
+                        handler().data().deviceId(), e);
+            }
         }
 
-
         return flowEntryCollection;
     }
 
@@ -238,7 +251,7 @@
         try {
             sessionMutex.acquire();
             MseaUniEvcService evcResponse =
-                    mseaUniEvcServiceSvc.getmseaUniEvcCeVlanMaps(session, TargetConfig.RUNNING);
+                    mseaUniEvcServiceSvc.getmseaUniEvcCeVlanMaps(session, DatastoreId.RUNNING);
             //There could be zero or more EVCs
             if (evcResponse != null && evcResponse.mefServices() != null && evcResponse.mefServices().uni() != null) {
                 activeEvcs.addAll(evcResponse.mefServices().uni().evc());
@@ -271,7 +284,7 @@
         if (saRangeList.size() > 0) {
             try {
                 mseaSaFilteringService.setMseaSaFiltering(
-                            buildSaFilteringObject(saRangeList), session, TargetConfig.RUNNING);
+                            buildSaFilteringObject(saRangeList), session, DatastoreId.RUNNING);
             } catch (NetconfException e) {
                 log.error("Error applying Flow Rules to SA Filtering - will try again: " + e.getMessage());
                 sessionMutex.release();
@@ -283,26 +296,27 @@
             List<Evc> evcList = evcMap.entrySet().stream()
                     .map(x -> x.getValue())
                     .collect(Collectors.toList());
-            Uni.UniBuilder uniBuilder = new DefaultUni.UniBuilder();
+            Uni uni = new DefaultUni();
             URI deviceName = handler().data().deviceId().uri();
-            Uni uni = uniBuilder.name(new Identifier45("Uni-on-"
-                    + deviceName.getSchemeSpecificPart())).evc(evcList).build();
+            uni.name(new Identifier45("Uni-on-"
+                    + deviceName.getSchemeSpecificPart()));
+            uni.evc(evcList);
 
             List<BwpGroup> bwpGroupList = new ArrayList<BwpGroup>();
-            BwpGroup.BwpGroupBuilder bwpGrpBuilder = new DefaultBwpGroup.BwpGroupBuilder();
-            bwpGroupList.add(bwpGrpBuilder.groupIndex((short) 0).build());
-            Profiles profiles = (new DefaultProfiles.ProfilesBuilder()).bwpGroup(bwpGroupList).build();
+            BwpGroup bwpGrp = new DefaultBwpGroup();
+            bwpGrp.groupIndex((short) 0);
+            bwpGroupList.add(bwpGrp);
+            Profiles profiles = new DefaultProfiles();
+            profiles.bwpGroup(bwpGroupList);
 
-            MefServices.MefServicesBuilder mefBuilder = new DefaultMefServices.MefServicesBuilder();
-            MefServices mefServices = mefBuilder.uni(uni).profiles(profiles).build();
+            MefServices mefServices = new DefaultMefServices();
+            mefServices.uni(uni);
+            mefServices.profiles(profiles);
 
-            MseaUniEvcService.MseaUniEvcServiceBuilder evcUniBuilder =
-                    new MseaUniEvcServiceOpParam.MseaUniEvcServiceBuilder();
-
-            MseaUniEvcServiceOpParam mseaUniEvcServiceFilter =
-                    (MseaUniEvcServiceOpParam) evcUniBuilder.mefServices(mefServices).build();
+            MseaUniEvcServiceOpParam mseaUniEvcServiceFilter = new MseaUniEvcServiceOpParam();
+            mseaUniEvcServiceFilter.mefServices(mefServices);
             try {
-                mseaUniEvcServiceSvc.setMseaUniEvcService(mseaUniEvcServiceFilter, session, TargetConfig.RUNNING);
+                mseaUniEvcServiceSvc.setMseaUniEvcService(mseaUniEvcServiceFilter, session, DatastoreId.RUNNING);
             } catch (NetconfException e) {
                 log.error("Error applying Flow Rules to EVC - will try again: " + e.getMessage());
                 sessionMutex.release();
@@ -338,14 +352,18 @@
 
         //Retrieve the list of actual EVCs and the CeVlanMaps from device
         List<Evc> activeEvcs = new ArrayList<>();
+        List<Short> acvtiveFiltRanges = new ArrayList<>();
         try {
             sessionMutex.acquire();
             MseaUniEvcService evcResponse =
-                    mseaUniEvcServiceSvc.getmseaUniEvcCeVlanMaps(session, TargetConfig.RUNNING);
+                    mseaUniEvcServiceSvc.getmseaUniEvcCeVlanMaps(session, DatastoreId.RUNNING);
             //There could be zero or more EVCs
             if (evcResponse != null && evcResponse.mefServices() != null && evcResponse.mefServices().uni() != null) {
                 activeEvcs.addAll(evcResponse.mefServices().uni().evc());
             }
+            mseaSaFilteringService.getConfigMseaSaFilterIds(session).forEach(
+                    r -> acvtiveFiltRanges.add(r.rangeId()));
+
         } catch (NetconfException | InterruptedException e1) {
             log.warn("Error on removeFlowRules.", e1);
         }
@@ -360,14 +378,9 @@
             if (ruleToRemove.selector().getCriterion(Type.IPV4_SRC) != null &&
                     ruleToRemove.selector().getCriterion(Type.IN_PORT) != null &&
                     ((PortCriterion) ruleToRemove.selector().getCriterion(Type.IN_PORT)).port().toLong() == 0) {
-                SourceAddressRange.SourceAddressRangeBuilder saBuilder =
-                        new DefaultSourceAddressRange.SourceAddressRangeBuilder();
-                SourceAddressRange sar = saBuilder
-                        .rangeId((short) ruleToRemove.tableId())
-                        .yangSourceAddressRangeOpType(org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.
-                                edge.assure.msea.sa.filtering.rev20160412.MseaSaFiltering.OnosYangOpType.DELETE)
-                        .build();
-
+                SourceAddressRange sar = new DefaultSourceAddressRange();
+                sar.rangeId((short) ruleToRemove.tableId());
+                acvtiveFiltRanges.remove(Short.valueOf((short) ruleToRemove.tableId()));
                 rulesRemoved.add(ruleToRemove);
                 saRangeList.add(sar);
 
@@ -408,10 +421,23 @@
 
         //If there are IPv4 Flow Rules created commit them now through the
         //MseaSaFiltering service
-        if (saRangeList.size() > 0) {
+        if (saRangeList.size() > 0 && acvtiveFiltRanges.size() == 0) {
             try {
-                mseaSaFilteringService.setMseaSaFiltering(
-                        buildSaFilteringObject(saRangeList), session, TargetConfig.RUNNING);
+                SourceIpaddressFiltering saFilter =
+                        new DefaultSourceIpaddressFiltering();
+                MseaSaFilteringOpParam mseaSaFiltering = new MseaSaFilteringOpParam();
+                mseaSaFiltering.sourceIpaddressFiltering(saFilter);
+
+                mseaSaFilteringService.deleteMseaSaFilteringRange(
+                        mseaSaFiltering, session, DatastoreId.RUNNING);
+            } catch (NetconfException e) {
+                log.warn("Remove FlowRule on MseaSaFilteringService could not delete all SARules - "
+                        + "they may already have been deleted: " + e.getMessage());
+            }
+        } else if (saRangeList.size() > 0) {
+            try {
+                mseaSaFilteringService.deleteMseaSaFilteringRange(
+                        buildSaFilteringObject(saRangeList), session, DatastoreId.RUNNING);
             } catch (NetconfException e) {
                 log.warn("Remove FlowRule on MseaSaFilteringService could not delete SARule - "
                         + "it may already have been deleted: " + e.getMessage());
@@ -421,7 +447,7 @@
         if (ceVlanMapMap.size() > 0) {
             try {
                 mseaUniEvcServiceSvc.removeEvcUniFlowEntries(ceVlanMapMap, flowIdMap,
-                        session, TargetConfig.RUNNING, portAssignment);
+                        session, DatastoreId.RUNNING, portAssignment);
             } catch (NetconfException e) {
                 log.warn("Remove FlowRule on MseaUniEvcService could not delete EVC - "
                         + "it may already have been deleted: " + e.getMessage());
@@ -472,14 +498,12 @@
         log.debug("Applying IP address to " + ipAddrStr
                 + " (on Port 0) to IP SA Filtering on EA1000 through NETCONF");
 
-        SourceAddressRange.SourceAddressRangeBuilder saBuilder =
-                new DefaultSourceAddressRange.SourceAddressRangeBuilder();
+        SourceAddressRange sar =
+                new DefaultSourceAddressRange();
 
-        SourceAddressRange sar = saBuilder
-                .rangeId((short) fr.tableId())
-                .name("Flow:" + fr.id().toString())
-                .ipv4AddressPrefix(ipAddrStr)
-                .build();
+        sar.rangeId((short) fr.tableId());
+        sar.name("Flow:" + fr.id().toString());
+        sar.ipv4AddressPrefix(ipAddrStr);
 
         frList.add(fr);
         saRangeList.add(sar);
@@ -493,40 +517,52 @@
                 ((PortCriterion) fr.selector().getCriterion(Type.IN_PORT)).port().toLong());
         Integer evcKey = (fr.tableId() << 2) + port.portNum();
         VlanId sourceVid = ((VlanIdCriterion) fr.selector().getCriterion(Type.VLAN_VID)).vlanId();
-        FlowMapping.FlowMappingBuilder fmBuilder =
-                DefaultFlowMapping.builder()
-                .ceVlanId(VlanIdType.of(sourceVid.id()))
-                .flowId(BigInteger.valueOf(fr.id().value()));
+        FlowMapping fm = new DefaultFlowMapping();
+        fm.ceVlanId(VlanIdType.of(sourceVid.id()));
+        fm.flowId(BigInteger.valueOf(fr.id().value()));
+
         if (evcMap.containsKey(evcKey)) { //Is there an entry already for this EVC and port?
             //Replace ceVlanMap
-            evcMap.put(evcKey, CustomEvc.builder(evcMap.get(evcKey))
-                    .addToCeVlanMap(new ServiceListType(sourceVid.toString()), port.nOrC(portAssignment))
-                    .addToFlowMapping(fmBuilder.build(), port.nOrC(portAssignment))
-                    .build());
-
+            if (port.nOrC(portAssignment) == UniSide.CUSTOMER) {
+                evcMap.get(evcKey).evcPerUni().evcPerUnic().addToFlowMapping(fm);
+                ServiceListType newCeVlanMap = new ServiceListType(
+                        CeVlanMapUtils.addtoCeVlanMap(
+                                evcMap.get(evcKey).evcPerUni().evcPerUnic().ceVlanMap().toString(),
+                                sourceVid.toShort()));
+                evcMap.get(evcKey).evcPerUni().evcPerUnic().ceVlanMap(newCeVlanMap);
+            } else {
+                evcMap.get(evcKey).evcPerUni().evcPerUnin().addToFlowMapping(fm);
+                ServiceListType newCeVlanMap = new ServiceListType(
+                        CeVlanMapUtils.addtoCeVlanMap(
+                                evcMap.get(evcKey).evcPerUni().evcPerUnin().ceVlanMap().toString(),
+                                sourceVid.toShort()));
+                evcMap.get(evcKey).evcPerUni().evcPerUnin().ceVlanMap(newCeVlanMap);
+            }
         } else if (evcMap.containsKey((evcKey ^ 1))) { //Is there an entry for this EVC but the opposite port?
             TagManipulation tm = getTagManipulation(fr);
             if (port.nOrC(portAssignment) == UniSide.NETWORK) {
-                EvcPerUnin epun = CustomEvcPerUnin.builder(evcMap.get(evcKey ^ 1).evcPerUni().evcPerUnin())
-                        .addToCeVlanMap(new ServiceListType(sourceVid.toString()))
-                        .tagManipulation(tm)
-                        .addToFlowMapping(fmBuilder.build())
-                        .ingressBwpGroupIndex(getMeterId(fr.treatment()))
-                        .build();
-                evcMap.put((evcKey ^ 1), CustomEvc.builder(evcMap.get((evcKey ^ 1))).addUniN(epun).build());
+                ServiceListType newCeVlanMap = new ServiceListType(
+                        CeVlanMapUtils.addtoCeVlanMap(
+                                evcMap.get(evcKey ^ 1).evcPerUni().evcPerUnin().ceVlanMap().toString(),
+                                sourceVid.toShort()));
+                evcMap.get(evcKey ^ 1).evcPerUni().evcPerUnin().ceVlanMap(newCeVlanMap);
+                evcMap.get(evcKey ^ 1).evcPerUni().evcPerUnin().tagManipulation(tm);
+                evcMap.get(evcKey ^ 1).evcPerUni().evcPerUnin().addToFlowMapping(fm);
+                evcMap.get(evcKey ^ 1).evcPerUni().evcPerUnin().ingressBwpGroupIndex(getMeterId(fr.treatment()));
             } else {
-                EvcPerUnic epuc = CustomEvcPerUnic.builder(evcMap.get(evcKey ^ 1).evcPerUni().evcPerUnic())
-                        .addToCeVlanMap(new ServiceListType(sourceVid.toString()))
-                        .tagManipulation(tm)
-                        .addToFlowMapping(fmBuilder.build())
-                        .ingressBwpGroupIndex(getMeterId(fr.treatment()))
-                        .build();
-                evcMap.put((evcKey ^ 1), CustomEvc.builder(evcMap.get((evcKey ^ 1))).addUniC(epuc).build());
+                ServiceListType newCeVlanMap = new ServiceListType(
+                        CeVlanMapUtils.addtoCeVlanMap(
+                                evcMap.get(evcKey ^ 1).evcPerUni().evcPerUnic().ceVlanMap().toString(),
+                                sourceVid.toShort()));
+                evcMap.get(evcKey ^ 1).evcPerUni().evcPerUnic().ceVlanMap(newCeVlanMap);
+                evcMap.get(evcKey ^ 1).evcPerUni().evcPerUnic().tagManipulation(tm);
+                evcMap.get(evcKey ^ 1).evcPerUni().evcPerUnic().addToFlowMapping(fm);
+                evcMap.get(evcKey ^ 1).evcPerUni().evcPerUnic().ingressBwpGroupIndex(getMeterId(fr.treatment()));
             }
         } else {
-            Evc.EvcBuilder evcBuilder = new DefaultEvc.EvcBuilder();
-            EvcPerUninBuilder epunBuilder = new CustomEvcPerUnin.EvcPerUninBuilder();
-            EvcPerUnicBuilder epucBuilder = new CustomEvcPerUnic.EvcPerUnicBuilder();
+            Evc evc = new DefaultEvc();
+            EvcPerUnin epun = new CustomEvcPerUnin();
+            EvcPerUnic epuc = new CustomEvcPerUnic();
             TagManipulation tm = getTagManipulation(fr);
 
             UniSide side = port.nOrC(portAssignment);
@@ -538,31 +574,32 @@
                             port.opposite().nOrC(portAssignment));
             oppositeCeVlanMap = oppositeCeVlanMap.isEmpty() ? "0" : oppositeCeVlanMap;
             if (side == UniSide.NETWORK) {
-                epunBuilder
-                    .ceVlanMap(new ServiceListType(newCeVlanMap))
-                    .tagManipulation(tm)
-                    .addToFlowMapping(fmBuilder.build())
-                    .ingressBwpGroupIndex(getMeterId(fr.treatment()));
+                epun.ceVlanMap(new ServiceListType(newCeVlanMap));
+                epun.tagManipulation(tm);
+                epun.addToFlowMapping(fm);
+                epun.ingressBwpGroupIndex(getMeterId(fr.treatment()));
 
-                epucBuilder.ceVlanMap(new ServiceListType(oppositeCeVlanMap));
+                epuc.ceVlanMap(new ServiceListType(oppositeCeVlanMap));
+                epuc.ingressBwpGroupIndex(new Long(0));
             } else {
-                epucBuilder
-                    .ceVlanMap(new ServiceListType(newCeVlanMap))
-                    .tagManipulation(tm)
-                    .addToFlowMapping(fmBuilder.build())
-                    .ingressBwpGroupIndex(getMeterId(fr.treatment()));
+                epuc.ceVlanMap(new ServiceListType(newCeVlanMap));
+                epuc.tagManipulation(tm);
+                epuc.addToFlowMapping(fm);
+                epuc.ingressBwpGroupIndex(getMeterId(fr.treatment()));
 
-                epunBuilder.ceVlanMap(new ServiceListType(oppositeCeVlanMap));
+                epun.ceVlanMap(new ServiceListType(oppositeCeVlanMap));
+                epun.ingressBwpGroupIndex(new Long(0));
             }
 
-            evcBuilder
-                    .evcIndex(fr.tableId())
-                    .name(new Identifier45("EVC-" + String.valueOf(fr.tableId())))
-                    .evcPerUni(new DefaultEvcPerUni.EvcPerUniBuilder()
-                            .evcPerUnin(epunBuilder.build())
-                            .evcPerUnic(epucBuilder.build())
-                            .build());
-            evcMap.put(evcKey, evcBuilder.build());
+            evc.evcIndex(fr.tableId());
+            evc.name(new Identifier45("EVC-" + String.valueOf(fr.tableId())));
+
+            DefaultEvcPerUni epu = new DefaultEvcPerUni();
+            epu.evcPerUnin(epun);
+            epu.evcPerUnic(epuc);
+            evc.evcPerUni(epu);
+
+            evcMap.put(evcKey, evc);
         }
 
         frList.add(fr);
@@ -570,20 +607,18 @@
 
 
     private MseaSaFilteringOpParam buildSaFilteringObject(List<SourceAddressRange> saRangeList) {
-        InterfaceEth0.InterfaceEth0Builder ifBuilder = new DefaultInterfaceEth0.InterfaceEth0Builder();
+        InterfaceEth0 saIf = new DefaultInterfaceEth0();
         for (SourceAddressRange sa:saRangeList) {
-            ifBuilder = ifBuilder.addToSourceAddressRange(sa);
+            saIf.addToSourceAddressRange(sa);
         }
-        InterfaceEth0 saIf = ifBuilder.filterAdminState(FilterAdminStateEnum.BLACKLIST).build();
+        saIf.filterAdminState(FilterAdminStateEnum.BLACKLIST);
 
-        SourceIpaddressFiltering.SourceIpaddressFilteringBuilder saFilterBuilder =
-                new DefaultSourceIpaddressFiltering.SourceIpaddressFilteringBuilder();
-        SourceIpaddressFiltering saFilter = saFilterBuilder.interfaceEth0(saIf).build();
+        SourceIpaddressFiltering saFilter =
+                new DefaultSourceIpaddressFiltering();
+        saFilter.interfaceEth0(saIf);
 
-        MseaSaFilteringOpParam.MseaSaFilteringBuilder opBuilder =
-                new MseaSaFilteringOpParam.MseaSaFilteringBuilder();
-        MseaSaFilteringOpParam mseaSaFiltering =
-                (MseaSaFilteringOpParam) opBuilder.sourceIpaddressFiltering(saFilter).build();
+        MseaSaFilteringOpParam mseaSaFiltering = new MseaSaFilteringOpParam();
+        mseaSaFiltering.sourceIpaddressFiltering(saFilter);
 
         return mseaSaFiltering;
     }
@@ -597,35 +632,37 @@
         Criterion matchInPort = Criteria.matchInPort(PortNumber.portNumber(0));
         TrafficSelector.Builder tsBuilder = DefaultTrafficSelector.builder();
 
-        for (SourceAddressRange sa:saRangelist) {
-            Criterion matchIpSrc = Criteria.matchIPSrc(IpPrefix.valueOf(sa.ipv4AddressPrefix()));
+        if (saRangelist != null) {
+            for (SourceAddressRange sa : saRangelist) {
+                Criterion matchIpSrc = Criteria.matchIPSrc(IpPrefix.valueOf(sa.ipv4AddressPrefix()));
 
-            TrafficSelector selector = tsBuilder.add(matchIpSrc).add(matchInPort).build();
+                TrafficSelector selector = tsBuilder.add(matchIpSrc).add(matchInPort).build();
 
-            TrafficTreatment.Builder trBuilder = DefaultTrafficTreatment.builder();
-            TrafficTreatment treatment = trBuilder.drop().build();
+                TrafficTreatment.Builder trBuilder = DefaultTrafficTreatment.builder();
+                TrafficTreatment treatment = trBuilder.drop().build();
 
-            FlowRule.Builder feBuilder = new DefaultFlowRule.Builder();
-            if (sa.name() != null && sa.name().startsWith("Flow:")) {
-                String[] nameParts = sa.name().split(":");
-                Long cookie = Long.valueOf(nameParts[1], 16);
-                feBuilder = feBuilder.withCookie(cookie);
-            } else {
-                feBuilder = feBuilder.fromApp(appId);
+                FlowRule.Builder feBuilder = new DefaultFlowRule.Builder();
+                if (sa.name() != null && sa.name().startsWith("Flow:")) {
+                    String[] nameParts = sa.name().split(":");
+                    Long cookie = Long.valueOf(nameParts[1], 16);
+                    feBuilder = feBuilder.withCookie(cookie);
+                } else {
+                    feBuilder = feBuilder.fromApp(appId);
+                }
+
+                FlowRule fr = feBuilder
+                        .forDevice(handler().data().deviceId())
+                        .withSelector(selector)
+                        .withTreatment(treatment)
+                        .forTable(sa.rangeId())
+                        .makePermanent()
+                        .withPriority(PRIORITY_DEFAULT)
+                        .build();
+
+                flowEntryCollection.add(
+                        new DefaultFlowEntry(fr, FlowEntryState.ADDED, 0, 0, 0));
             }
-
-            FlowRule fr = feBuilder
-                .forDevice(handler().data().deviceId())
-                .withSelector(selector)
-                .withTreatment(treatment)
-                .forTable(sa.rangeId())
-                .makePermanent()
-                .withPriority(PRIORITY_DEFAULT)
-                .build();
-
-            flowEntryCollection.add(new DefaultFlowEntry(fr, FlowEntryState.ADDED, 0, 0, 0));
         }
-
         return flowEntryCollection;
     }
 
@@ -801,46 +838,41 @@
 
         if (isPop) {
             //The should be no vlanId in this case
-            TagPop.TagPopBuilder popBuilder = new DefaultTagPop.TagPopBuilder();
-            org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc
-                .service.rev20160317.mseaunievcservice.evcperuniextensionattributes.tagmanipulation
-                .tagpop.TagPop.TagPopBuilder popInnerBuilder =
-                    new org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea
-                        .uni.evc.service.rev20160317.mseaunievcservice.evcperuniextensionattributes
-                        .tagmanipulation.tagpop.DefaultTagPop.TagPopBuilder();
-            return popBuilder
-                    .tagPop(popInnerBuilder.build())
-                    .build();
+            TagPop pop = new DefaultTagPop();
+            org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice
+                .evcperuniextensionattributes.tagmanipulation
+                .tagpop.TagPop popInner =
+                    new org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317
+                        .mseaunievcservice.evcperuniextensionattributes
+                        .tagmanipulation.tagpop.DefaultTagPop();
+            pop.tagPop(popInner);
+            return pop;
 
         } else if (isPush && vlanId != null) {
-            TagPush.TagPushBuilder pushBuilder = new DefaultTagPush.TagPushBuilder();
-            org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc
-                .service.rev20160317.mseaunievcservice.evcperuniextensionattributes.tagmanipulation
-                .tagpush.TagPush.TagPushBuilder pushInnerBuilder =
-                    new org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea
-                        .uni.evc.service.rev20160317.mseaunievcservice.evcperuniextensionattributes
-                        .tagmanipulation.tagpush.DefaultTagPush.TagPushBuilder();
-            return pushBuilder
-                .tagPush(pushInnerBuilder
-                        .outerTagVlan(new VlanIdType(vlanId.id()))
-                        .pushTagType(ethType.equals(EtherType.VLAN.ethType()) ?
-                                PushTagTypeEnum.PUSHCTAG : PushTagTypeEnum.PUSHSTAG)
-                        .build())
-                .build();
+            TagPush push = new DefaultTagPush();
+            org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice
+                .evcperuniextensionattributes.tagmanipulation
+                .tagpush.TagPush pushInner =
+                    new org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317
+                        .mseaunievcservice.evcperuniextensionattributes
+                        .tagmanipulation.tagpush.DefaultTagPush();
+            pushInner.outerTagVlan(new VlanIdType(vlanId.id()));
+            pushInner.pushTagType(ethType.equals(EtherType.VLAN.ethType()) ?
+                                PushTagTypeEnum.PUSHCTAG : PushTagTypeEnum.PUSHSTAG);
+            push.tagPush(pushInner);
+            return push;
 
         } else if (vlanId != null) { //This is overwrite, as it has vlanId, but not push or pop
-            TagOverwrite.TagOverwriteBuilder ovrBuilder = new DefaultTagOverwrite.TagOverwriteBuilder();
-            org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc
-                .service.rev20160317.mseaunievcservice.evcperuniextensionattributes.tagmanipulation
-                .tagoverwrite.TagOverwrite.TagOverwriteBuilder ovrInnerBuilder =
-                    new org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea
-                        .uni.evc.service.rev20160317.mseaunievcservice.evcperuniextensionattributes
-                        .tagmanipulation.tagoverwrite.DefaultTagOverwrite.TagOverwriteBuilder();
-            return ovrBuilder.
-                    tagOverwrite(ovrInnerBuilder
-                            .outerTagVlan(new VlanIdType(vlanId.id()))
-                            .build())
-                    .build();
+            TagOverwrite ovr = new DefaultTagOverwrite();
+            org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice
+                .evcperuniextensionattributes.tagmanipulation
+                .tagoverwrite.TagOverwrite ovrInner =
+                    new org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317
+                        .mseaunievcservice.evcperuniextensionattributes
+                        .tagmanipulation.tagoverwrite.DefaultTagOverwrite();
+            ovrInner.outerTagVlan(new VlanIdType(vlanId.id()));
+            ovr.tagOverwrite(ovrInner);
+            return ovr;
         }
 
         return null;
diff --git a/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/EA1000MeterProvider.java b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/EA1000MeterProvider.java
new file mode 100644
index 0000000..226ad2f
--- /dev/null
+++ b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/EA1000MeterProvider.java
@@ -0,0 +1,240 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.drivers.microsemi;
+
+
+import static org.slf4j.LoggerFactory.getLogger;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.onosproject.core.CoreService;
+import org.onosproject.drivers.microsemi.yang.MseaUniEvcServiceNetconfService;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.meter.Band;
+import org.onosproject.net.meter.Meter.Unit;
+import org.onosproject.net.meter.MeterOperation;
+import org.onosproject.net.meter.MeterOperations;
+import org.onosproject.net.meter.MeterProvider;
+import org.onosproject.net.meter.MeterProviderRegistry;
+import org.onosproject.net.meter.MeterProviderService;
+import org.onosproject.net.provider.AbstractProvider;
+import org.onosproject.net.provider.ProviderId;
+import org.onosproject.netconf.DatastoreId;
+import org.onosproject.netconf.NetconfController;
+import org.onosproject.netconf.NetconfException;
+import org.onosproject.netconf.NetconfSession;
+import org.onosproject.yang.gen.v1.mseatypes.rev20160229.mseatypes.CosColorType;
+import org.onosproject.yang.gen.v1.mseatypes.rev20160229.mseatypes.PriorityType;
+import org.onosproject.yang.gen.v1.mseatypes.rev20160229.mseatypes.coscolortype.CosColorTypeEnum;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.MseaUniEvcServiceOpParam;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.DefaultMefServices;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.MefServices;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.DefaultProfiles;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.Profiles;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.profiles.BwpGroup;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.profiles.Cos;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.profiles.DefaultBwpGroup;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.profiles.DefaultCos;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.profiles.bwpgroup.Bwp;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.profiles.bwpgroup.DefaultBwp;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.profiles.cos.costypechoice.DefaultEvcCosTypeEvcColorId;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.profiles.cos.costypechoice.EvcCosTypeEvcColorId;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.profiles.cos.costypechoice.evccostypeevccolorid.DefaultEvcCosTypeAll8PrioTo1EvcColor;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.profiles.cos.costypechoice.evccostypeevccolorid.EvcCosTypeAll8PrioTo1EvcColor;
+import org.slf4j.Logger;
+
+/**
+ * Provider which uses an NETCONF controller to handle meters.
+ *
+ * TODO: move this to an architecture similar to FlowRuleDriverProvider in order
+ * to use a behavior to discover meters.
+ */
+@Component(immediate = true, enabled = true)
+public class EA1000MeterProvider extends AbstractProvider implements MeterProvider {
+
+    private final Logger log = getLogger(getClass());
+
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected NetconfController controller;
+
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected MeterProviderRegistry providerRegistry;
+
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected CoreService coreService;
+
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected MseaUniEvcServiceNetconfService mseaUniEvcServiceSvc;
+
+    private MeterProviderService providerService;
+
+    private static final int COS_INDEX_1 = 1;
+    private static final short DEFAULT_OUTGOING_PRIO = 3;
+
+    /**
+     * Creates a OpenFlow meter provider.
+     */
+    public EA1000MeterProvider() {
+        super(new ProviderId("netconf", "org.onosproject.provider.meter.microsemi"));
+    }
+
+    @Activate
+    public void activate() {
+        providerService = providerRegistry.register(this);
+
+    }
+
+    @Deactivate
+    public void deactivate() {
+        providerRegistry.unregister(this);
+
+        providerService = null;
+    }
+
+    @Override
+    public void performMeterOperation(DeviceId deviceId, MeterOperations meterOps) {
+        log.debug("Adding meterOps to Microsemi Meter Store");
+    }
+
+    @Override
+    public void performMeterOperation(DeviceId deviceId, MeterOperation meterOp) {
+        if (meterOp == null || deviceId == null) {
+            log.warn("Missing argument for performMeterOperation()");
+            return;
+        }
+        log.debug("{} meterOp {} to Microsemi Meter Store", meterOp.type(), meterOp);
+
+        long meterId = meterOp.meter().id().id();
+        String deviceName = deviceId.uri().getSchemeSpecificPart();
+        Unit unit = meterOp.meter().unit();
+
+        Profiles profiles = new DefaultProfiles();
+        if (meterOp.type() == MeterOperation.Type.ADD || meterOp.type() == MeterOperation.Type.MODIFY) {
+            Bwp bwp = new DefaultBwp();
+            bwp.cosIndex(COS_INDEX_1);
+            bwp.name("BWP-" + String.valueOf(meterId) + "-" + deviceName);
+
+            long cirRateKbps = 0L;
+            long cbsRateKbps = 0L;
+            long eirRateKbps = 0L;
+            long ebsRateKbps = 0L;
+            for (Band band:meterOp.meter().bands()) {
+                if (band.type() == Band.Type.REMARK) {
+                    //This relates to CIR/CBS
+                    cirRateKbps = toBitsPerSec(band.rate(), unit);
+                    cbsRateKbps = band.burst(); //Already in kbps
+                } else if (band.type() == Band.Type.DROP) {
+                    //This relates to EIR/EBS
+                    eirRateKbps = toBitsPerSec(band.rate(), unit);
+                    ebsRateKbps = band.burst(); //Already in kbps
+                }
+            }
+            bwp.committedInformationRate(cirRateKbps);
+            bwp.excessInformationRate(eirRateKbps - cirRateKbps);
+            if (meterOp.meter().isBurst()) {
+                bwp.committedBurstSize(cbsRateKbps);
+                bwp.excessBurstSize(ebsRateKbps - cbsRateKbps);
+            }
+
+            BwpGroup bwpg = new DefaultBwpGroup();
+            bwpg.groupIndex((short) meterId);
+            bwpg.addToBwp(bwp);
+
+            //Create cos-1 as referenced above - we only support 1 at the moment
+            Cos cos = new DefaultCos();
+            cos.cosIndex(COS_INDEX_1);
+            cos.name("COS-1");
+            cos.outgoingCosValue(PriorityType.of(DEFAULT_OUTGOING_PRIO));
+            cos.colorAware(true);
+            cos.colorForward(true);
+
+            EvcCosTypeAll8PrioTo1EvcColor ect =
+                    new DefaultEvcCosTypeAll8PrioTo1EvcColor();
+            ect.evcAll8ColorTo(CosColorType.of(CosColorTypeEnum.GREEN));
+            profiles.addToBwpGroup(bwpg);
+
+            EvcCosTypeEvcColorId cid = new DefaultEvcCosTypeEvcColorId();
+            cid.evcCosTypeAll8PrioTo1EvcColor(ect);
+            cos.cosTypeChoice(cid);
+            profiles.addToCos(cos);
+        } else if (meterOp.type() == MeterOperation.Type.REMOVE) {
+            BwpGroup bwpg = new DefaultBwpGroup();
+            bwpg.groupIndex((short) meterId);
+
+            profiles.addToBwpGroup(bwpg);
+        }
+
+        MefServices mefServices = new DefaultMefServices();
+        mefServices.profiles(profiles);
+
+        MseaUniEvcServiceOpParam mseaUniEvcServiceFilter = new MseaUniEvcServiceOpParam();
+        mseaUniEvcServiceFilter.mefServices(mefServices);
+
+        NetconfSession session = controller.getDevicesMap().get(deviceId).getSession();
+        try {
+            if (meterOp.type() == MeterOperation.Type.REMOVE) {
+                mseaUniEvcServiceSvc.deleteMseaUniEvcService(mseaUniEvcServiceFilter,
+                        session, DatastoreId.RUNNING);
+            } else {
+                mseaUniEvcServiceSvc.setMseaUniEvcService(mseaUniEvcServiceFilter,
+                        session, DatastoreId.RUNNING);
+            }
+        } catch (NetconfException e) {
+            //This can fail if the BWP Group is deleted before the EVC that is dependent on it
+            //The delete of the EVC will be called on a separate thread to that should proceed
+            //within a few seconds after which we should try again
+            AtomicInteger retry = new AtomicInteger(4);
+            if (meterOp.type() == MeterOperation.Type.REMOVE &&
+                    e.getMessage().startsWith("Failed to run edit-config through NETCONF")) {
+                while (retry.getAndDecrement() > 0) {
+                    try {
+                        Thread.sleep(1000L);
+                        log.debug("Retrying deletion of Bandwith Profile Group {}",
+                                String.valueOf(meterId));
+                        mseaUniEvcServiceSvc.setMseaUniEvcService(mseaUniEvcServiceFilter,
+                                session, DatastoreId.RUNNING);
+                        return; //If it did not throw an exception
+                    } catch (InterruptedException e1) {
+                        log.debug("Error when deleting BWP profile on EA1000" +
+                                " - trying again in 1 sec", e1);
+                    } catch (NetconfException e1) {
+                        log.debug("NETCONF failed to delete profile - trying again in 1 sec", e1);
+                    }
+                }
+                log.error("Error deleting BWPGroup {} from {} after 4 tries: {}",
+                        meterId, deviceId, e.getMessage());
+            } else {
+                log.error("Error adding BWPGroup {} from {}: {}",
+                        meterId, deviceId, e.getMessage());
+                throw new UnsupportedOperationException(e);
+            }
+        }
+    }
+
+    private static long toBitsPerSec(long rate, Unit unit) {
+        if (unit == Unit.KB_PER_SEC) {
+            return rate * 8;
+        } else {
+            return -1;
+        }
+    }
+}
diff --git a/drivers/microsemi/ea1000driver/src/main/java/org/onosproject/drivers/microsemi/EA1000Pipeliner.java b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/EA1000Pipeliner.java
similarity index 100%
rename from drivers/microsemi/ea1000driver/src/main/java/org/onosproject/drivers/microsemi/EA1000Pipeliner.java
rename to drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/EA1000Pipeliner.java
diff --git a/drivers/microsemi/ea1000driver/src/main/java/org/onosproject/drivers/microsemi/Ea1000DeviceDescription.java b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/Ea1000DeviceDescription.java
similarity index 81%
rename from drivers/microsemi/ea1000driver/src/main/java/org/onosproject/drivers/microsemi/Ea1000DeviceDescription.java
rename to drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/Ea1000DeviceDescription.java
index ec43833..dfb8480 100644
--- a/drivers/microsemi/ea1000driver/src/main/java/org/onosproject/drivers/microsemi/Ea1000DeviceDescription.java
+++ b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/Ea1000DeviceDescription.java
@@ -40,12 +40,15 @@
 import org.onosproject.net.device.PortDescription;
 import org.onosproject.net.driver.AbstractHandlerBehaviour;
 import org.onosproject.netconf.NetconfController;
+import org.onosproject.netconf.NetconfDevice;
 import org.onosproject.netconf.NetconfException;
 import org.onosproject.netconf.NetconfSession;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.system.rev20160505.ietfsystemmicrosemi.system.AugmentedSysSystem;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.system.rev20160505.ietfsystemmicrosemi.systemstate.platform.AugmentedSysPlatform;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.system.rev20140806.IetfSystem;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev20130715.ietfyangtypes.DateAndTime;
+import org.onosproject.yang.gen.v1.ietfsystemmicrosemi.rev20160505.ietfsystemmicrosemi.system.AugmentedSysSystem;
+import org.onosproject.yang.gen.v1.ietfsystemmicrosemi.rev20160505.ietfsystemmicrosemi.system.DefaultAugmentedSysSystem;
+import org.onosproject.yang.gen.v1.ietfsystemmicrosemi.rev20160505.ietfsystemmicrosemi.systemstate.platform.AugmentedSysPlatform;
+import org.onosproject.yang.gen.v1.ietfsystem.rev20140806.IetfSystem;
+import org.onosproject.yang.gen.v1.ietfsystemmicrosemi.rev20160505.ietfsystemmicrosemi.systemstate.platform.DefaultAugmentedSysPlatform;
+import org.onosproject.yang.gen.v1.ietfyangtypes.rev20130715.ietfyangtypes.DateAndTime;
 import org.slf4j.Logger;
 
 public class Ea1000DeviceDescription extends AbstractHandlerBehaviour implements DeviceDescriptionDiscovery {
@@ -65,7 +68,14 @@
         log.info("Adding description for EA1000 device");
 
         NetconfController controller = checkNotNull(handler().get(NetconfController.class));
-        NetconfSession session = controller.getDevicesMap().get(handler().data().deviceId()).getSession();
+        NetconfDevice ncDevice = controller.getDevicesMap().get(handler().data().deviceId());
+        if (ncDevice == null) {
+            log.error("Internal ONOS Error. Device has been marked as reachable, " +
+                    "but deviceID {} is not in Devices Map. Continuing with empty description",
+                    handler().data().deviceId());
+            return null;
+        }
+        NetconfSession session = ncDevice.getSession();
         IetfSystemNetconfService ietfSystemService =
                 (IetfSystemNetconfService) checkNotNull(handler().get(IetfSystemNetconfService.class));
 
@@ -75,7 +85,7 @@
                 swVersion = system.systemState().platform().osRelease();
                 AugmentedSysPlatform augmentedSysPlatform =
                         (AugmentedSysPlatform) system.systemState()
-                        .platform().yangAugmentedInfo(AugmentedSysPlatform.class);
+                        .platform().augmentation(DefaultAugmentedSysPlatform.class);
                 serialNumber = augmentedSysPlatform.deviceIdentification().serialNumber();
                 DateAndTime deviceDateAndTime = system.systemState().clock().currentDatetime();
                 OffsetDateTime odt =
@@ -89,7 +99,7 @@
 
             if (system != null && system.system() != null) {
                 AugmentedSysSystem augmentedSystem =
-                        (AugmentedSysSystem) system.system().yangAugmentedInfo(AugmentedSysSystem.class);
+                        (AugmentedSysSystem) system.system().augmentation(DefaultAugmentedSysSystem.class);
                 longitudeStr = augmentedSystem.longitude().toPlainString();
                 latitudeStr = augmentedSystem.latitude().toPlainString();
             }
diff --git a/drivers/microsemi/ea1000driver/src/main/java/org/onosproject/drivers/microsemi/FullMetersAvailable.java b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/FullMetersAvailable.java
similarity index 100%
rename from drivers/microsemi/ea1000driver/src/main/java/org/onosproject/drivers/microsemi/FullMetersAvailable.java
rename to drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/FullMetersAvailable.java
diff --git a/drivers/microsemi/ea1000driver/src/main/java/org/onosproject/drivers/microsemi/MicrosemiDriversLoader.java b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/MicrosemiDriversLoader.java
similarity index 100%
rename from drivers/microsemi/ea1000driver/src/main/java/org/onosproject/drivers/microsemi/MicrosemiDriversLoader.java
rename to drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/MicrosemiDriversLoader.java
diff --git a/drivers/microsemi/ea1000driver/src/main/java/org/onosproject/drivers/microsemi/NetconfConfigGetter.java b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/NetconfConfigGetter.java
similarity index 100%
rename from drivers/microsemi/ea1000driver/src/main/java/org/onosproject/drivers/microsemi/NetconfConfigGetter.java
rename to drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/NetconfConfigGetter.java
diff --git a/drivers/microsemi/ea1000driver/src/main/java/org/onosproject/drivers/microsemi/RpcResultParser.java b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/RpcResultParser.java
similarity index 100%
rename from drivers/microsemi/ea1000driver/src/main/java/org/onosproject/drivers/microsemi/RpcResultParser.java
rename to drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/RpcResultParser.java
diff --git a/drivers/microsemi/ea1000driver/src/main/java/org/onosproject/drivers/microsemi/package-info.java b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/package-info.java
similarity index 100%
rename from drivers/microsemi/ea1000driver/src/main/java/org/onosproject/drivers/microsemi/package-info.java
rename to drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/package-info.java
diff --git a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/IetfSystemNetconfService.java b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/IetfSystemNetconfService.java
similarity index 75%
rename from drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/IetfSystemNetconfService.java
rename to drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/IetfSystemNetconfService.java
index 7554350..44c62f6 100644
--- a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/IetfSystemNetconfService.java
+++ b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/IetfSystemNetconfService.java
@@ -17,17 +17,17 @@
 
 import java.time.OffsetDateTime;
 
+import org.onosproject.netconf.DatastoreId;
 import org.onosproject.netconf.NetconfException;
 import org.onosproject.netconf.NetconfSession;
-import org.onosproject.netconf.TargetConfig;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.system.rev20160505.ietfsystemmicrosemi.doupgradeandreboot.DoUpgradeAndRebootInput;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.system.rev20160505.ietfsystemmicrosemi.doupgradeandreboot.DoUpgradeAndRebootOutput;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.system.rev20160505.ietfsystemmicrosemi.pullupdatetarfromtftp.PullUpdateTarFromTftpInput;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.system.rev20160505.ietfsystemmicrosemi.readfromsyslog.ReadFromSyslogInput;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.system.rev20160505.ietfsystemmicrosemi.readfromsyslog.ReadFromSyslogOutput;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.system.rev20140806.IetfSystem;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.system.rev20140806.IetfSystemOpParam;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.system.rev20140806.ietfsystem.systemrestart.SystemRestartInput;
+import org.onosproject.yang.gen.v1.ietfsystemmicrosemi.rev20160505.ietfsystemmicrosemi.doupgradeandreboot.DoUpgradeAndRebootInput;
+import org.onosproject.yang.gen.v1.ietfsystemmicrosemi.rev20160505.ietfsystemmicrosemi.doupgradeandreboot.DoUpgradeAndRebootOutput;
+import org.onosproject.yang.gen.v1.ietfsystemmicrosemi.rev20160505.ietfsystemmicrosemi.pullupdatetarfromtftp.PullUpdateTarFromTftpInput;
+import org.onosproject.yang.gen.v1.ietfsystemmicrosemi.rev20160505.ietfsystemmicrosemi.readfromsyslog.ReadFromSyslogInput;
+import org.onosproject.yang.gen.v1.ietfsystemmicrosemi.rev20160505.ietfsystemmicrosemi.readfromsyslog.ReadFromSyslogOutput;
+import org.onosproject.yang.gen.v1.ietfsystem.rev20140806.IetfSystem;
+import org.onosproject.yang.gen.v1.ietfsystem.rev20140806.IetfSystemOpParam;
+import org.onosproject.yang.gen.v1.ietfsystem.rev20140806.ietfsystem.systemrestart.SystemRestartInput;
 
 /**
  * Extension of ietfSystemService to include NETCONF sessions.
@@ -60,10 +60,11 @@
      * @param ietfSystem value of ietfSystem
      * @param session An active NETCONF session
      * @param ncDs datastore type running, startup or candidate
+     * @return Boolean to indicate success or failure
      * @throws NetconfException if the session has any error
      */
-    void setIetfSystem(IetfSystemOpParam ietfSystem, NetconfSession session, TargetConfig ncDs)
-            throws NetconfException;
+    boolean setIetfSystem(IetfSystemOpParam ietfSystem, NetconfSession session,
+          DatastoreId ncDs) throws NetconfException;
 
     /**
      * Service interface of setCurrentDatetime.
diff --git a/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/MicrosemiModelRegistrator.java b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/MicrosemiModelRegistrator.java
new file mode 100644
index 0000000..6cf8031
--- /dev/null
+++ b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/MicrosemiModelRegistrator.java
@@ -0,0 +1,135 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.drivers.microsemi.yang;
+
+import com.google.common.collect.ImmutableMap;
+import org.apache.felix.scr.annotations.Component;
+import org.onosproject.yang.AbstractYangModelRegistrator;
+import org.onosproject.yang.gen.v1.entitystatetcmib.rev20051122.EntityStateTcMib;
+import org.onosproject.yang.gen.v1.fpgainternal.rev20151130.FpgaInternal;
+import org.onosproject.yang.gen.v1.ianacrypthash.rev20140806.IanaCryptHash;
+import org.onosproject.yang.gen.v1.ianaiftype.rev20140508.IanaIfType;
+import org.onosproject.yang.gen.v1.ieeetypes.rev20080522.IeeeTypes;
+import org.onosproject.yang.gen.v1.ietfinettypes.rev20130715.IetfInetTypes;
+import org.onosproject.yang.gen.v1.ietfinterfaces.rev20140508.IetfInterfaces;
+import org.onosproject.yang.gen.v1.ietfnetconf.rev20110601.IetfNetconf;
+import org.onosproject.yang.gen.v1.ietfnetconfacm.rev20120222.IetfNetconfAcm;
+import org.onosproject.yang.gen.v1.ietfnetconfmonitoring.rev20101004.IetfNetconfMonitoring;
+import org.onosproject.yang.gen.v1.ietfnetconfnotifications.rev20120206.IetfNetconfNotifications;
+import org.onosproject.yang.gen.v1.ietfnetconfwithdefaults.rev20100609.IetfNetconfWithDefaults;
+import org.onosproject.yang.gen.v1.ietfsystem.rev20140806.IetfSystem;
+import org.onosproject.yang.gen.v1.ietfsystemmicrosemi.rev20160505.IetfSystemMicrosemi;
+import org.onosproject.yang.gen.v1.ietfsystemtlsauth.rev20140524.IetfSystemTlsAuth;
+import org.onosproject.yang.gen.v1.ietfx509certtoname.rev20130326.IetfX509CertToName;
+import org.onosproject.yang.gen.v1.ietfyangtypes.rev20130715.IetfYangTypes;
+import org.onosproject.yang.gen.v1.mseacfm.rev20160229.MseaCfm;
+import org.onosproject.yang.gen.v1.mseasafiltering.rev20160412.MseaSaFiltering;
+import org.onosproject.yang.gen.v1.mseasoamfm.rev20160229.MseaSoamFm;
+import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.MseaSoamPm;
+import org.onosproject.yang.gen.v1.mseatypes.rev20160229.MseaTypes;
+import org.onosproject.yang.gen.v1.mseaunievcinterface.rev20160317.MseaUniEvcInterface;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.MseaUniEvcService;
+import org.onosproject.yang.gen.v1.ncnotifications.rev20080714.NcNotifications;
+import org.onosproject.yang.gen.v1.netopeercfgnetopeer.rev20130214.NetopeerCfgnetopeer;
+import org.onosproject.yang.gen.v1.notifications.rev20080714.Notifications;
+import org.onosproject.yang.gen.v1.rfc2544.rev20151020.Rfc2544;
+import org.onosproject.yang.gen.v1.svcactivationtypes.rev20151027.SvcActivationTypes;
+import org.onosproject.yang.gen.v1.y1564.rev20151029.Y1564;
+import org.onosproject.yang.model.DefaultYangModuleId;
+import org.onosproject.yang.model.YangModuleId;
+import org.onosproject.yang.runtime.AppModuleInfo;
+import org.onosproject.yang.runtime.DefaultAppModuleInfo;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Representation of Microsemi model registrator which registers Microsemi device
+ * models.
+ */
+@Component(immediate = true)
+public class MicrosemiModelRegistrator extends AbstractYangModelRegistrator {
+
+    public MicrosemiModelRegistrator() {
+        super(IetfSystem.class, getAppInfo());
+    }
+
+    private static Map<YangModuleId, AppModuleInfo> getAppInfo() {
+        Map<YangModuleId, AppModuleInfo> appInfo = new HashMap<>();
+
+        appInfo.put(new DefaultYangModuleId("fpga-internal", "2015-11-30"),
+                new DefaultAppModuleInfo(FpgaInternal.class, null));
+        appInfo.put(new DefaultYangModuleId("iana-if-type", "2014-05-08"),
+                new DefaultAppModuleInfo(IanaIfType.class, null));
+        appInfo.put(new DefaultYangModuleId("ietf-yang-types", "2013-07-15"),
+                new DefaultAppModuleInfo(IetfYangTypes.class, null));
+        appInfo.put(new DefaultYangModuleId("msea-sa-filtering", "2016-04-12"),
+                new DefaultAppModuleInfo(MseaSaFiltering.class, null));
+        appInfo.put(new DefaultYangModuleId("ietf-x509-cert-to-name", "2013-03-26"),
+                new DefaultAppModuleInfo(IetfX509CertToName.class, null));
+        appInfo.put(new DefaultYangModuleId("ietf-system", "2014-08-06"),
+                new DefaultAppModuleInfo(IetfSystem.class, null));
+        appInfo.put(new DefaultYangModuleId("msea-types", "2016-02-29"),
+                new DefaultAppModuleInfo(MseaTypes.class, null));
+        appInfo.put(new DefaultYangModuleId("ietf-inet-types", "2013-07-15"),
+                new DefaultAppModuleInfo(IetfInetTypes.class, null));
+        appInfo.put(new DefaultYangModuleId("ietf-netconf-with-defaults", "2010-06-09"),
+                new DefaultAppModuleInfo(IetfNetconfWithDefaults.class, null));
+        appInfo.put(new DefaultYangModuleId("msea-uni-evc-service", "2016-03-17"),
+                new DefaultAppModuleInfo(MseaUniEvcService.class, null));
+        appInfo.put(new DefaultYangModuleId("ietf-netconf-monitoring", "2010-10-04"),
+                new DefaultAppModuleInfo(IetfNetconfMonitoring.class, null));
+        appInfo.put(new DefaultYangModuleId("ietf-netconf-acm", "2012-02-22"),
+                new DefaultAppModuleInfo(IetfNetconfAcm.class, null));
+        appInfo.put(new DefaultYangModuleId("ietf-system-tls-auth", "2014-05-24"),
+                new DefaultAppModuleInfo(IetfSystemTlsAuth.class, null));
+        appInfo.put(new DefaultYangModuleId("rfc-2544", "2015-10-20"),
+                new DefaultAppModuleInfo(Rfc2544.class, null));
+        appInfo.put(new DefaultYangModuleId("msea-cfm", "2016-02-29"),
+                new DefaultAppModuleInfo(MseaCfm.class, null));
+        appInfo.put(new DefaultYangModuleId("netopeer-cfgnetopeer", "2013-02-14"),
+                new DefaultAppModuleInfo(NetopeerCfgnetopeer.class, null));
+        appInfo.put(new DefaultYangModuleId("ENTITY-STATE-TC-MIB", "2005-11-22"),
+                new DefaultAppModuleInfo(EntityStateTcMib.class, null));
+        appInfo.put(new DefaultYangModuleId("msea-soam-fm", "2016-02-29"),
+                new DefaultAppModuleInfo(MseaSoamFm.class, null));
+        appInfo.put(new DefaultYangModuleId("ietf-netconf-notifications", "2012-02-06"),
+                new DefaultAppModuleInfo(IetfNetconfNotifications.class, null));
+        appInfo.put(new DefaultYangModuleId("nc-notifications", "2008-07-14"),
+                new DefaultAppModuleInfo(NcNotifications.class, null));
+        appInfo.put(new DefaultYangModuleId("iana-crypt-hash", "2014-08-06"),
+                new DefaultAppModuleInfo(IanaCryptHash.class, null));
+        appInfo.put(new DefaultYangModuleId("msea-uni-evc-interface", "2016-03-17"),
+                new DefaultAppModuleInfo(MseaUniEvcInterface.class, null));
+        appInfo.put(new DefaultYangModuleId("msea-soam-pm", "2016-02-29"),
+                new DefaultAppModuleInfo(MseaSoamPm.class, null));
+        appInfo.put(new DefaultYangModuleId("ieee-types", "2008-05-22"),
+                new DefaultAppModuleInfo(IeeeTypes.class, null));
+        appInfo.put(new DefaultYangModuleId("svc-activation-types", "2015-10-27"),
+                new DefaultAppModuleInfo(SvcActivationTypes.class, null));
+        appInfo.put(new DefaultYangModuleId("ietf-netconf", "2011-06-01"),
+                new DefaultAppModuleInfo(IetfNetconf.class, null));
+        appInfo.put(new DefaultYangModuleId("ietf-system-microsemi", "2016-05-05"),
+                new DefaultAppModuleInfo(IetfSystemMicrosemi.class, null));
+        appInfo.put(new DefaultYangModuleId("notifications", "2008-07-14"),
+                new DefaultAppModuleInfo(Notifications.class, null));
+        appInfo.put(new DefaultYangModuleId("y-1564", "2015-10-29"),
+                new DefaultAppModuleInfo(Y1564.class, null));
+        appInfo.put(new DefaultYangModuleId("ietf-interfaces", "2014-05-08"),
+                new DefaultAppModuleInfo(IetfInterfaces.class, null));
+        return ImmutableMap.copyOf(appInfo);
+    }
+}
diff --git a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/MseaCfmNetconfService.java b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/MseaCfmNetconfService.java
similarity index 64%
rename from drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/MseaCfmNetconfService.java
rename to drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/MseaCfmNetconfService.java
index cf391fa..cdd3700 100644
--- a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/MseaCfmNetconfService.java
+++ b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/MseaCfmNetconfService.java
@@ -15,18 +15,15 @@
  */
 package org.onosproject.drivers.microsemi.yang;
 
-import org.onosproject.event.ListenerService;
+import org.onosproject.netconf.DatastoreId;
 import org.onosproject.netconf.NetconfException;
 import org.onosproject.netconf.NetconfSession;
-import org.onosproject.netconf.TargetConfig;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.cfm.rev20160229.MseaCfm;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.cfm.rev20160229.MseaCfmOpParam;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.cfm.rev20160229.mseacfm.MseaCfmEvent;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.cfm.rev20160229.mseacfm.MseaCfmEventListener;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.cfm.rev20160229.mseacfm.abortloopback.AbortLoopbackInput;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.cfm.rev20160229.mseacfm.transmitlinktrace.TransmitLinktraceInput;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.cfm.rev20160229.mseacfm.transmitlinktrace.TransmitLinktraceOutput;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.cfm.rev20160229.mseacfm.transmitloopback.TransmitLoopbackInput;
+import org.onosproject.yang.gen.v1.mseacfm.rev20160229.MseaCfm;
+import org.onosproject.yang.gen.v1.mseacfm.rev20160229.MseaCfmOpParam;
+import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.abortloopback.AbortLoopbackInput;
+import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.transmitlinktrace.TransmitLinktraceInput;
+import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.transmitlinktrace.TransmitLinktraceOutput;
+import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.transmitloopback.TransmitLoopbackInput;
 
 /**
  * Extension of mseaCfmService to include NETCONF sessions.
@@ -34,7 +31,7 @@
  * This is manually extended and should be revised if the msea-cfm.yang,
  * msea-soam-pm.yang or msea-soam-fm.yang files change
  */
-public interface MseaCfmNetconfService extends ListenerService<MseaCfmEvent, MseaCfmEventListener> {
+public interface MseaCfmNetconfService {
 
     /**
      * Returns attributes of MEP.
@@ -70,9 +67,11 @@
      * @param mseaCfm value of mseaCfm
      * @param session An active NETCONF session
      * @param targetDs one of running, candidate or startup
+     * @return Boolean to indicate success or failure
      * @throws NetconfException if the session has any error
      */
-    void setMseaCfm(MseaCfmOpParam mseaCfm, NetconfSession session, TargetConfig targetDs) throws NetconfException;
+    boolean setMseaCfm(MseaCfmOpParam mseaCfm, NetconfSession session,
+                       DatastoreId targetDs) throws NetconfException;
 
     /**
      * Service interface of transmitLoopback.
@@ -81,7 +80,8 @@
      * @param session An active NETCONF session
      * @throws NetconfException if the session has any error
      */
-    void transmitLoopback(TransmitLoopbackInput inputVar, NetconfSession session) throws NetconfException;
+    void transmitLoopback(TransmitLoopbackInput inputVar,
+                          NetconfSession session) throws NetconfException;
 
     /**
      * Service interface of abortLoopback.
@@ -90,7 +90,8 @@
      * @param session An active NETCONF session
      * @throws NetconfException if the session has any error
      */
-    void abortLoopback(AbortLoopbackInput inputVar, NetconfSession session) throws NetconfException;
+    void abortLoopback(AbortLoopbackInput inputVar,
+                       NetconfSession session) throws NetconfException;
 
     /**
      * Service interface of transmitLinktrace.
@@ -100,6 +101,6 @@
      * @return transmitLinktraceOutput output of service interface transmitLinktrace
      * @throws NetconfException if the session has any error
      */
-    TransmitLinktraceOutput transmitLinktrace(TransmitLinktraceInput inputVar, NetconfSession session)
-            throws NetconfException;
+    TransmitLinktraceOutput transmitLinktrace(TransmitLinktraceInput inputVar,
+              NetconfSession session) throws NetconfException;
 }
diff --git a/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/MseaSaFilteringNetconfService.java b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/MseaSaFilteringNetconfService.java
new file mode 100644
index 0000000..f9788f3
--- /dev/null
+++ b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/MseaSaFilteringNetconfService.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.drivers.microsemi.yang;
+
+import org.onosproject.netconf.DatastoreId;
+import org.onosproject.netconf.NetconfException;
+import org.onosproject.netconf.NetconfSession;
+import org.onosproject.yang.gen.v1.mseasafiltering.rev20160412.MseaSaFiltering;
+import org.onosproject.yang.gen.v1.mseasafiltering.rev20160412.MseaSaFilteringOpParam;
+import org.onosproject.yang.gen.v1.mseasafiltering.rev20160412.mseasafiltering.sourceipaddressfiltering.interfaceeth0.SourceAddressRange;
+
+import java.util.List;
+
+/**
+ * Extension of mseaSaFilteringService to include NETCONF sessions.
+ *
+ * This is manually extended and should be revised if the msea-sa-filtering.yang file changes
+ */
+public interface MseaSaFilteringNetconfService {
+    /**
+     * Returns the attribute mseaSaFiltering.
+     *
+     * @param mseaSaFiltering value of mseaSaFiltering
+     * @param session  An active NETCONF session
+     * @return mseaSaFiltering
+     * @throws NetconfException if the session has any error
+     */
+    MseaSaFiltering getMseaSaFiltering(
+            MseaSaFilteringOpParam mseaSaFiltering, final NetconfSession session)
+            throws NetconfException;
+
+    /**
+     * Get a filtered subset of the config model.
+     *
+     * @param session  An active NETCONF session
+     * @return mseaSaFiltering
+     * @throws NetconfException if the session has any error
+     */
+    public List<SourceAddressRange> getConfigMseaSaFilterIds(NetconfSession session)
+            throws NetconfException;
+
+    /**
+     * Sets the value to attribute mseaSaFiltering.
+     *
+     * @param mseaSaFiltering value of mseaSaFiltering
+     * @param session An active NETCONF session
+     * @param targetDs The NETCONF datastore to edit
+     * @return Boolean to indicate success or failure
+     * @throws NetconfException if the session has any error
+     */
+    boolean setMseaSaFiltering(MseaSaFilteringOpParam mseaSaFiltering,
+            NetconfSession session, DatastoreId targetDs) throws NetconfException;
+
+    /**
+     * Deletes the value to attribute mseaSaFiltering.
+     *
+     * @param mseaSaFiltering value of mseaSaFiltering
+     * @param session An active NETCONF session
+     * @param targetDs The NETCONF datastore to edit
+     * @return Boolean to indicate success or failure
+     * @throws NetconfException if the session has any error
+     */
+    boolean deleteMseaSaFilteringRange(MseaSaFilteringOpParam mseaSaFiltering,
+              NetconfSession session, DatastoreId targetDs) throws NetconfException;
+
+}
diff --git a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/MseaUniEvcServiceNetconfService.java b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/MseaUniEvcServiceNetconfService.java
similarity index 74%
rename from drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/MseaUniEvcServiceNetconfService.java
rename to drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/MseaUniEvcServiceNetconfService.java
index 38ccbf6..a7f85bf 100644
--- a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/MseaUniEvcServiceNetconfService.java
+++ b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/MseaUniEvcServiceNetconfService.java
@@ -19,12 +19,12 @@
 import java.util.List;
 import java.util.Map;
 
+import org.onosproject.netconf.DatastoreId;
 import org.onosproject.netconf.NetconfException;
 import org.onosproject.netconf.NetconfSession;
-import org.onosproject.netconf.TargetConfig;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.MseaUniEvcService;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.MseaUniEvcServiceOpParam;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.uni.UniSideInterfaceAssignmentEnum;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.MseaUniEvcService;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.MseaUniEvcServiceOpParam;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.uni.UniSideInterfaceAssignmentEnum;
 
 /**
  * Extension of mseaUniEvcServiceService to include NETCONF sessions.
@@ -55,8 +55,8 @@
      * @throws NetconfException if the session has any error
      */
     MseaUniEvcService getConfigMseaUniEvcService(
-            MseaUniEvcServiceOpParam mseaUniEvcService, NetconfSession session, TargetConfig targetDs)
-            throws NetconfException;
+            MseaUniEvcServiceOpParam mseaUniEvcService, NetconfSession session,
+            DatastoreId targetDs) throws NetconfException;
 
     /**
      * Sets the value to attribute mseaUniEvcService.
@@ -64,13 +64,26 @@
      * @param mseaUniEvcService value of mseaUniEvcService
      * @param session The NETCONF session
      * @param targetDs one of running, candidate or startup
+     * @return Boolean to indicate success or failure
      * @throws NetconfException if the session has any error
      */
-    void setMseaUniEvcService(MseaUniEvcServiceOpParam mseaUniEvcService,
-            NetconfSession session, TargetConfig targetDs)
+    boolean setMseaUniEvcService(MseaUniEvcServiceOpParam mseaUniEvcService,
+            NetconfSession session, DatastoreId targetDs)
             throws NetconfException;
 
     /**
+     * Deletes the objects in mseaUniEvcService.
+     *
+     * @param mseaUniEvcService value of mseaUniEvcService
+     * @param session The NETCONF session
+     * @param targetDs one of running, candidate or startup
+     * @return Boolean to indicate success or failure
+     * @throws NetconfException if the session has any error
+     */
+    boolean deleteMseaUniEvcService(MseaUniEvcServiceOpParam mseaUniEvcService,
+             NetconfSession session, DatastoreId targetDs) throws NetconfException;
+
+    /**
      * Returns a list of the CeVlanMaps on both sides of the EVC.
      *
      * @param session A NETCONF Session
@@ -79,7 +92,7 @@
      * @throws NetconfException if the session has any error
      */
     MseaUniEvcService getmseaUniEvcCeVlanMaps(
-            NetconfSession session, TargetConfig ncDs)
+            NetconfSession session, DatastoreId ncDs)
             throws NetconfException;
 
     /**
@@ -100,7 +113,7 @@
             Map<Integer, String> ceVlanUpdates,
             Map<Integer, List<Short>> flowVlanIds,
             NetconfSession session,
-            TargetConfig targetDs,
+            DatastoreId targetDs,
             UniSideInterfaceAssignmentEnum portAssign)
                     throws NetconfException;
 
diff --git a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/UniSide.java b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/UniSide.java
similarity index 100%
rename from drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/UniSide.java
rename to drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/UniSide.java
diff --git a/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/custom/CustomEvcPerUnic.java b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/custom/CustomEvcPerUnic.java
new file mode 100644
index 0000000..fbf89be
--- /dev/null
+++ b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/custom/CustomEvcPerUnic.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.drivers.microsemi.yang.custom;
+
+import org.onosproject.yang.gen.v1.mseatypes.rev20160229.mseatypes.ServiceListType;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.evcperuniextensionattributes.EvcPerUniServiceTypeEnum;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.evcperuniextensionattributes.FlowMapping;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.evcperuniextensionattributes.TagManipulation;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.uni.evc.evcperuni.DefaultEvcPerUnic;
+
+import java.util.List;
+
+/**
+ * Extend the DefaultEvcPerUnic so that the ceVlanMap can always be initialized at 0.
+ */
+public class CustomEvcPerUnic extends DefaultEvcPerUnic {
+    @Override
+    public ServiceListType ceVlanMap() {
+        if (ceVlanMap == null) {
+            return new ServiceListType("0");
+        }
+        return ceVlanMap;
+    }
+    @Override
+    public Object ingressBwpGroupIndex() {
+        return ingressBwpGroupIndex;
+    }
+
+    @Override
+    public EvcPerUniServiceTypeEnum evcPerUniServiceType() {
+        return evcPerUniServiceType;
+    }
+
+    @Override
+    public TagManipulation tagManipulation() {
+        return tagManipulation;
+    }
+
+    @Override
+    public List<FlowMapping> flowMapping() {
+        return flowMapping;
+    }
+}
diff --git a/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/custom/CustomEvcPerUnin.java b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/custom/CustomEvcPerUnin.java
new file mode 100644
index 0000000..d8712dc
--- /dev/null
+++ b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/custom/CustomEvcPerUnin.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.drivers.microsemi.yang.custom;
+
+import org.onosproject.yang.gen.v1.mseatypes.rev20160229.mseatypes.ServiceListType;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.evcperuniextensionattributes.EvcPerUniServiceTypeEnum;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.evcperuniextensionattributes.FlowMapping;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.evcperuniextensionattributes.TagManipulation;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.uni.evc.evcperuni.DefaultEvcPerUnin;
+
+import java.util.List;
+
+/**
+ * Extend the DefaultEvcPerUnin so that the ceVlanMap can always be initialized at 0.
+ */
+public class CustomEvcPerUnin extends DefaultEvcPerUnin {
+    @Override
+    public ServiceListType ceVlanMap() {
+        if (ceVlanMap == null) {
+            return new ServiceListType("0");
+        }
+        return ceVlanMap;
+    }
+    @Override
+    public Object ingressBwpGroupIndex() {
+        return ingressBwpGroupIndex;
+    }
+
+    @Override
+    public EvcPerUniServiceTypeEnum evcPerUniServiceType() {
+        return evcPerUniServiceType;
+    }
+
+    @Override
+    public TagManipulation tagManipulation() {
+        return tagManipulation;
+    }
+
+    @Override
+    public List<FlowMapping> flowMapping() {
+        return flowMapping;
+    }
+
+}
diff --git a/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/yms/app/ysr/package-info.java b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/custom/package-info.java
similarity index 85%
rename from drivers/microsemi/ea1000yang/src/test/java/org/onosproject/yms/app/ysr/package-info.java
rename to drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/custom/package-info.java
index 6e7ab5c..1a7a471 100644
--- a/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/yms/app/ysr/package-info.java
+++ b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/custom/package-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2017-present Open Networking Laboratory
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,4 +17,4 @@
 /**
  * Package for Microsemi device drivers support for NETCONF for EA1000.
  */
-package org.onosproject.yms.app.ysr;
\ No newline at end of file
+package org.onosproject.drivers.microsemi.yang.custom;
\ No newline at end of file
diff --git a/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/impl/AbstractYangServiceImpl.java b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/impl/AbstractYangServiceImpl.java
new file mode 100644
index 0000000..3867a2f
--- /dev/null
+++ b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/impl/AbstractYangServiceImpl.java
@@ -0,0 +1,245 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.drivers.microsemi.yang.impl;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+import java.util.Set;
+import java.util.regex.Pattern;
+
+import com.google.common.base.Charsets;
+import com.google.common.io.ByteSource;
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.apache.felix.scr.annotations.Service;
+import org.onosproject.core.ApplicationId;
+import org.onosproject.core.CoreService;
+import org.onosproject.netconf.DatastoreId;
+import org.onosproject.netconf.NetconfException;
+import org.onosproject.netconf.NetconfSession;
+import org.onosproject.yang.model.ModelConverter;
+import org.onosproject.yang.model.ModelObjectData;
+import org.onosproject.yang.model.ResourceData;
+import org.onosproject.yang.model.ResourceId;
+import org.onosproject.yang.model.SchemaContext;
+import org.onosproject.yang.model.SchemaContextProvider;
+import org.onosproject.yang.runtime.AnnotatedNodeInfo;
+import org.onosproject.yang.runtime.CompositeData;
+import org.onosproject.yang.runtime.CompositeStream;
+import org.onosproject.yang.runtime.DefaultCompositeData;
+import org.onosproject.yang.runtime.DefaultCompositeStream;
+import org.onosproject.yang.runtime.DefaultYangSerializerContext;
+import org.onosproject.yang.runtime.YangModelRegistry;
+import org.onosproject.yang.runtime.YangSerializer;
+import org.onosproject.yang.runtime.YangSerializerContext;
+import org.onosproject.yang.runtime.YangSerializerRegistry;
+import org.onosproject.yang.serializers.xml.XmlSerializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Abstract class that implements some of the core functions of a YANG model service.
+ *
+ */
+@Component(immediate = true)
+@Service
+public abstract class AbstractYangServiceImpl {
+    public static final String NC_OPERATION = "nc:operation";
+    public static final String OP_DELETE = "delete";
+
+    protected final Logger log = LoggerFactory.getLogger(getClass());
+    protected boolean alreadyLoaded = false;
+
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected CoreService coreService;
+
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected YangModelRegistry yangModelRegistry;
+
+//    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+//    protected SchemaContextProvider schemaContextProvider;
+
+    protected ApplicationId appId;
+
+    // xSer is not a service and is a class variable. Can be lost on deactivate.
+    // Must be recreated on activate
+    protected XmlSerializer xSer;
+    protected YangSerializerContext yCtx;
+
+    protected static final Pattern REGEX_XML_HEADER =
+            Pattern.compile("(<\\?xml).*(\\?>)", Pattern.DOTALL);
+    protected static final Pattern REGEX_RPC_REPLY =
+            Pattern.compile("(<rpc-reply)[ ]*" +
+                    "(xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\")[ ]*" +
+                    "(message-id=\")[0-9]*(\">)", Pattern.DOTALL);
+    protected static final Pattern REGEX_RPC_REPLY_DATA_NS =
+            Pattern.compile("(<data)[ ]*(xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">)");
+    protected static final Pattern REGEX_RPC_REPLY_DATA =
+            Pattern.compile("(<data>)");
+    protected static final Pattern REGEX_RPC_REPLY_DATA_CLOSE =
+            Pattern.compile("(</data>)");
+    protected static final Pattern REGEX_RPC_REPLY_DATA_EMPTY =
+            Pattern.compile("(<data/>)");
+    protected static final Pattern REGEX_RPC_REPLY_CLOSE =
+            Pattern.compile("(</rpc-reply>)");
+
+    @Activate
+    public void activate() {
+        Set<YangSerializer> yangSer = ((YangSerializerRegistry) yangModelRegistry).getSerializers();
+        yangSer.forEach(ser -> {
+            if (ser instanceof XmlSerializer) {
+                xSer = (XmlSerializer) ser;
+            }
+        });
+        SchemaContext context = ((SchemaContextProvider) yangModelRegistry)
+                .getSchemaContext(ResourceId.builder().addBranchPointSchema("/", null).build());
+
+        yCtx = new DefaultYangSerializerContext(context, null);
+    };
+
+    @Deactivate
+    public void deactivate() {
+        alreadyLoaded = false;
+    }
+
+    /**
+     * Internal method to generically make a NETCONF get query from YANG objects.
+     * @param moFilter A YANG object model
+     * @param session A NETCONF session
+     * @return YangObjectModel
+     * @throws NetconfException if the session has any error
+     */
+    protected final ModelObjectData getNetconfObject(
+            ModelObjectData moFilter, NetconfSession session)
+                throws NetconfException {
+
+        return getConfigNetconfObject(moFilter, session, null);
+    }
+
+    /**
+     * Internal method to generically make a NETCONF get-config query from YANG objects.
+     *
+     * @param moFilter A YANG object model
+     * @param session A NETCONF session
+     * @param targetDs - running,candidate or startup
+     * @return YangObjectModel
+     * @throws NetconfException if the session has any error
+     */
+    protected final ModelObjectData getConfigNetconfObject(
+            ModelObjectData moFilter, NetconfSession session, DatastoreId targetDs)
+                throws NetconfException {
+        if (session == null) {
+            throw new NetconfException("Session is null when calling getConfigNetconfObject()");
+        }
+
+        if (moFilter == null) {
+            throw new NetconfException("Query object cannot be null");
+        }
+
+        String xmlQueryStr = encodeMoToXmlStr(moFilter, null);
+
+        log.debug("Sending <get-(config)> query on NETCONF session " + session.getSessionId() +
+                ":\n" + xmlQueryStr);
+        String xmlResult;
+        if (targetDs == null) {
+            xmlResult = session.get(xmlQueryStr, null);
+        } else {
+            xmlResult = session.getConfig(targetDs, xmlQueryStr);
+        }
+        xmlResult = removeRpcReplyData(xmlResult);
+
+        DefaultCompositeStream resultDcs = new DefaultCompositeStream(
+                null, new ByteArrayInputStream(xmlResult.getBytes()));
+        CompositeData compositeData = xSer.decode(resultDcs, yCtx);
+
+        return ((ModelConverter) yangModelRegistry).createModel(compositeData.resourceData());
+    }
+
+    /**
+     * Internal method to generically make a NETCONF edit-config call from a set of YANG objects.
+     *
+     * @param moConfig A YANG object model
+     * @param session A NETCONF session
+     * @param targetDs - running,candidate or startup
+     * @param annotations A list of AnnotatedNodeInfos to be added to the DataNodes
+     * @return Boolean value indicating success or failure of command
+     * @throws NetconfException if the session has any error
+     */
+    protected final boolean setNetconfObject(
+            ModelObjectData moConfig, NetconfSession session, DatastoreId targetDs,
+            List<AnnotatedNodeInfo> annotations) throws NetconfException {
+        if (moConfig == null) {
+            throw new NetconfException("Query object cannot be null");
+        } else if (session == null) {
+            throw new NetconfException("Session is null when calling getMseaSaFiltering()");
+        } else if (targetDs == null) {
+            throw new NetconfException("TargetDs is null when calling getMseaSaFiltering()");
+        }
+
+        String xmlQueryStr = encodeMoToXmlStr(moConfig, annotations);
+        log.debug("Sending <edit-config> query on NETCONF session " + session.getSessionId() +
+                ":\n" + xmlQueryStr);
+
+        return session.editConfig(targetDs, null, xmlQueryStr);
+    }
+
+    protected final String encodeMoToXmlStr(ModelObjectData yangObjectOpParamFilter,
+                                            List<AnnotatedNodeInfo> annotations)
+            throws NetconfException {
+        //Convert the param to XML to use as a filter
+        ResourceData rd = ((ModelConverter) yangModelRegistry).createDataNode(yangObjectOpParamFilter);
+
+        DefaultCompositeData.Builder cdBuilder =
+                        DefaultCompositeData.builder().resourceData(rd);
+        if (annotations != null) {
+            for (AnnotatedNodeInfo ani : annotations) {
+                cdBuilder.addAnnotatedNodeInfo(ani);
+            }
+        }
+        CompositeStream cs = xSer.encode(cdBuilder.build(), yCtx);
+        //Convert the param to XML to use as a filter
+
+        try {
+            ByteSource byteSource = new ByteSource() {
+                @Override
+                public InputStream openStream() throws IOException {
+                    return cs.resourceData();
+                }
+            };
+
+            return byteSource.asCharSource(Charsets.UTF_8).read();
+        } catch (IOException e) {
+            throw new NetconfException("Error decoding CompositeStream to String", e);
+        }
+    }
+
+    protected static final String removeRpcReplyData(String rpcReplyXml) {
+        rpcReplyXml = REGEX_XML_HEADER.matcher(rpcReplyXml).replaceFirst("");
+        rpcReplyXml = REGEX_RPC_REPLY.matcher(rpcReplyXml).replaceFirst("");
+        rpcReplyXml = REGEX_RPC_REPLY_DATA_NS.matcher(rpcReplyXml).replaceFirst("");
+        rpcReplyXml = REGEX_RPC_REPLY_DATA.matcher(rpcReplyXml).replaceFirst("");
+        rpcReplyXml = REGEX_RPC_REPLY_DATA_CLOSE.matcher(rpcReplyXml).replaceFirst("");
+        rpcReplyXml = REGEX_RPC_REPLY_DATA_EMPTY.matcher(rpcReplyXml).replaceFirst("");
+        rpcReplyXml = REGEX_RPC_REPLY_CLOSE.matcher(rpcReplyXml).replaceFirst("");
+        rpcReplyXml = rpcReplyXml.replace("\t", "");
+        return rpcReplyXml;
+    }
+}
diff --git a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/impl/IetfSystemManager.java b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/impl/IetfSystemManager.java
similarity index 62%
rename from drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/impl/IetfSystemManager.java
rename to drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/impl/IetfSystemManager.java
index 4c61143..3673594 100644
--- a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/impl/IetfSystemManager.java
+++ b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/impl/IetfSystemManager.java
@@ -15,32 +15,34 @@
  */
 package org.onosproject.drivers.microsemi.yang.impl;
 
-import static org.onosproject.yms.ych.YangProtocolEncodingFormat.XML;
-import static org.onosproject.yms.ydt.YmsOperationType.QUERY_REPLY;
-
+import java.io.ByteArrayInputStream;
 import java.time.OffsetDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.List;
-import java.util.regex.Pattern;
 
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
 import org.apache.felix.scr.annotations.Service;
 import org.onosproject.drivers.microsemi.yang.IetfSystemNetconfService;
+import org.onosproject.netconf.DatastoreId;
 import org.onosproject.netconf.NetconfException;
 import org.onosproject.netconf.NetconfSession;
-import org.onosproject.netconf.TargetConfig;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.system.rev20160505.IetfSystemMicrosemiService;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.system.rev20160505.ietfsystemmicrosemi.doupgradeandreboot.DoUpgradeAndRebootInput;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.system.rev20160505.ietfsystemmicrosemi.doupgradeandreboot.DoUpgradeAndRebootOutput;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.system.rev20160505.ietfsystemmicrosemi.pullupdatetarfromtftp.PullUpdateTarFromTftpInput;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.system.rev20160505.ietfsystemmicrosemi.readfromsyslog.ReadFromSyslogInput;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.system.rev20160505.ietfsystemmicrosemi.readfromsyslog.ReadFromSyslogOutput;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.system.rev20140806.IetfSystem;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.system.rev20140806.IetfSystemOpParam;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.system.rev20140806.IetfSystemService;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.system.rev20140806.ietfsystem.systemrestart.SystemRestartInput;
+import org.onosproject.yang.gen.v1.ietfsystem.rev20140806.ietfsystem.DefaultSystem;
+import org.onosproject.yang.gen.v1.ietfsystem.rev20140806.ietfsystem.DefaultSystemState;
+import org.onosproject.yang.gen.v1.ietfsystemmicrosemi.rev20160505.ietfsystemmicrosemi.doupgradeandreboot.DoUpgradeAndRebootInput;
+import org.onosproject.yang.gen.v1.ietfsystemmicrosemi.rev20160505.ietfsystemmicrosemi.doupgradeandreboot.DoUpgradeAndRebootOutput;
+import org.onosproject.yang.gen.v1.ietfsystemmicrosemi.rev20160505.ietfsystemmicrosemi.pullupdatetarfromtftp.PullUpdateTarFromTftpInput;
+import org.onosproject.yang.gen.v1.ietfsystemmicrosemi.rev20160505.ietfsystemmicrosemi.readfromsyslog.ReadFromSyslogInput;
+import org.onosproject.yang.gen.v1.ietfsystemmicrosemi.rev20160505.ietfsystemmicrosemi.readfromsyslog.ReadFromSyslogOutput;
+import org.onosproject.yang.gen.v1.ietfsystem.rev20140806.IetfSystem;
+import org.onosproject.yang.gen.v1.ietfsystem.rev20140806.IetfSystemOpParam;
+import org.onosproject.yang.gen.v1.ietfsystem.rev20140806.ietfsystem.systemrestart.SystemRestartInput;
+import org.onosproject.yang.model.DefaultModelObjectData;
+import org.onosproject.yang.model.ModelConverter;
+import org.onosproject.yang.model.ModelObject;
+import org.onosproject.yang.model.ModelObjectData;
+import org.onosproject.yang.runtime.CompositeData;
+import org.onosproject.yang.runtime.DefaultCompositeStream;
 
 /**
  * Implementation of the IetfService YANG model service.
@@ -50,28 +52,18 @@
 public class IetfSystemManager extends AbstractYangServiceImpl
     implements IetfSystemNetconfService {
 
-    protected final Pattern regexRemoveSystem =
-            Pattern.compile("(<system).*(</system>)", Pattern.DOTALL);
-    protected final Pattern regexRemoveSystemState =
-            Pattern.compile("(<system-state).*(</system-state>)", Pattern.DOTALL);
-
     protected static final String IETF_SYSTEM = "org.onosproject.drivers.microsemi.yang.ietfsystem";
 
     @Activate
     public void activate() {
+        super.activate();
         appId = coreService.registerApplication(IETF_SYSTEM);
-        ych = ymsService.getYangCodecHandler();
-        ych.addDeviceSchema(IetfSystemService.class);
-        ych.addDeviceSchema(IetfSystemMicrosemiService.class);
         log.info("IetfSystemManager Started");
     }
 
     @Deactivate
     public void deactivate() {
         super.deactivate();
-        ymsService.unRegisterService(this, IetfSystemService.class);
-        ymsService.unRegisterService(this, IetfSystemMicrosemiService.class);
-        ych = null;
         log.info("IetfSystemManager Stopped");
     }
 
@@ -85,7 +77,23 @@
     @Override
     public IetfSystem getIetfSystem(IetfSystemOpParam ietfSystemFilter, NetconfSession session)
             throws NetconfException {
-        return (IetfSystem) getNetconfObject(ietfSystemFilter, session);
+
+        ModelObjectData moQuery = DefaultModelObjectData.builder()
+                .addModelObject((ModelObject) ietfSystemFilter.system())
+                .build();
+
+        ModelObjectData moReply = getNetconfObject(moQuery, session);
+
+        IetfSystemOpParam ietfSystem = new IetfSystemOpParam();
+        for (ModelObject mo:moReply.modelObjects()) {
+            if (mo instanceof DefaultSystem) {
+                ietfSystem.system((DefaultSystem) mo);
+            } else if (mo instanceof DefaultSystemState) {
+                ietfSystem.systemState((DefaultSystemState) mo);
+            }
+        }
+
+        return ietfSystem;
     }
 
     @Override
@@ -96,34 +104,34 @@
 
         String xmlResult = session.get(getInitRequestBuilder(), null);
 
-        //The result will be a <system> followed by <system-state>
-        //YCH can decode only one at a time - split it and send half each time
-        IetfSystem.IetfSystemBuilder iBuilder = new IetfSystemOpParam.IetfSystemBuilder();
+        xmlResult = removeRpcReplyData(xmlResult);
+        DefaultCompositeStream resultDcs = new DefaultCompositeStream(
+                null, new ByteArrayInputStream(xmlResult.getBytes()));
+        CompositeData compositeData = xSer.decode(resultDcs, yCtx);
 
-        String xmlResultSystem = regexRemoveSystemState.matcher(xmlResult).replaceFirst("");
-        List<Object> objectListState = ych.decode(xmlResultSystem, XML, QUERY_REPLY);
-        if (objectListState != null && objectListState.size() > 0) {
-            IetfSystem system = (IetfSystem) objectListState.get(0);
-            iBuilder.system(system.system());
+        ModelObjectData mod = ((ModelConverter) yangModelRegistry).createModel(compositeData.resourceData());
+
+        IetfSystemOpParam ietfSystem = new IetfSystemOpParam();
+        for (ModelObject mo:mod.modelObjects()) {
+            if (mo instanceof DefaultSystem) {
+                ietfSystem.system((DefaultSystem) mo);
+            } else if (mo instanceof DefaultSystemState) {
+                ietfSystem.systemState((DefaultSystemState) mo);
+            }
         }
 
-        String xmlResultSystemState = regexRemoveSystem.matcher(xmlResult).replaceFirst("");
-        List<Object> objectListSystemState = ych.decode(xmlResultSystemState, XML, QUERY_REPLY);
-        if (objectListSystemState != null && objectListSystemState.size() > 0) {
-            IetfSystem system = (IetfSystem) objectListSystemState.get(0);
-            iBuilder.systemState(system.systemState());
-        }
-
-        return iBuilder.build();
+        return ietfSystem;
     }
 
     /**
      * Call NETCONF edit-config with a configuration.
      */
     @Override
-    public void setIetfSystem(IetfSystemOpParam ietfSystem, NetconfSession session, TargetConfig ncDs)
-        throws NetconfException {
-        setNetconfObject(ietfSystem, session, ncDs);
+    public boolean setIetfSystem(IetfSystemOpParam ietfSystem, NetconfSession session,
+                              DatastoreId ncDs) throws NetconfException {
+        ModelObjectData mo = DefaultModelObjectData.builder()
+                                .addModelObject(ietfSystem).build();
+        return setNetconfObject(mo, session, ncDs, null);
     }
 
     @Override
diff --git a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/impl/MseaCfmManager.java b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/impl/MseaCfmManager.java
similarity index 62%
rename from drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/impl/MseaCfmManager.java
rename to drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/impl/MseaCfmManager.java
index c2359ab..36f48c4 100644
--- a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/impl/MseaCfmManager.java
+++ b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/impl/MseaCfmManager.java
@@ -15,29 +15,29 @@
  */
 package org.onosproject.drivers.microsemi.yang.impl;
 
-import static org.onosproject.yms.ych.YangProtocolEncodingFormat.XML;
-import static org.onosproject.yms.ydt.YmsOperationType.QUERY_REPLY;
-
-import java.util.List;
-
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
 import org.apache.felix.scr.annotations.Service;
 import org.onosproject.drivers.microsemi.yang.MseaCfmNetconfService;
+import org.onosproject.netconf.DatastoreId;
 import org.onosproject.netconf.NetconfException;
 import org.onosproject.netconf.NetconfSession;
-import org.onosproject.netconf.TargetConfig;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.cfm.rev20160229.MseaCfm;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.cfm.rev20160229.MseaCfmOpParam;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.cfm.rev20160229.MseaCfmService;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.cfm.rev20160229.mseacfm.MseaCfmEventListener;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.cfm.rev20160229.mseacfm.abortloopback.AbortLoopbackInput;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.cfm.rev20160229.mseacfm.transmitlinktrace.TransmitLinktraceInput;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.cfm.rev20160229.mseacfm.transmitlinktrace.TransmitLinktraceOutput;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.cfm.rev20160229.mseacfm.transmitloopback.TransmitLoopbackInput;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.soam.fm.rev20160229.MseaSoamFmService;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.soam.pm.rev20160229.MseaSoamPmService;
+import org.onosproject.yang.gen.v1.mseacfm.rev20160229.MseaCfm;
+import org.onosproject.yang.gen.v1.mseacfm.rev20160229.MseaCfmOpParam;
+import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.DefaultMefCfm;
+import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.abortloopback.AbortLoopbackInput;
+import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.transmitlinktrace.TransmitLinktraceInput;
+import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.transmitlinktrace.TransmitLinktraceOutput;
+import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.transmitloopback.TransmitLoopbackInput;
+import org.onosproject.yang.model.DefaultModelObjectData;
+import org.onosproject.yang.model.ModelConverter;
+import org.onosproject.yang.model.ModelObject;
+import org.onosproject.yang.model.ModelObjectData;
+import org.onosproject.yang.runtime.CompositeData;
+import org.onosproject.yang.runtime.DefaultCompositeStream;
+
+import java.io.ByteArrayInputStream;
 
 /**
  * Implementation of the MseaCfmServiceNetconf YANG model service.
@@ -51,21 +51,14 @@
 
     @Activate
     public void activate() {
+        super.activate();
         appId = coreService.registerApplication(MSEA_CFM);
-        ych = ymsService.getYangCodecHandler();
-        ych.addDeviceSchema(MseaCfmService.class);
-        ych.addDeviceSchema(MseaSoamFmService.class);
-        ych.addDeviceSchema(MseaSoamPmService.class);
         log.info("MseaCfmService Started");
     }
 
     @Deactivate
     public void deactivate() {
         super.deactivate();
-        ymsService.unRegisterService(this, MseaCfmService.class);
-        ymsService.unRegisterService(this, MseaSoamFmService.class);
-        ymsService.unRegisterService(this, MseaSoamPmService.class);
-        ych = null;
         log.info("MseaCfmService Stopped");
     }
 
@@ -82,42 +75,38 @@
                 ":\n" + xmlQueryStr);
 
         String xmlResult = session.get(xmlQueryStr, null);
-        //FIXME Line is removed because YCH decode does not know how to handle it
-        xmlResult = xmlResult.replaceAll("(<ccm-interval>)(3.3ms|10ms|100ms|1s)(</ccm-interval>)", "");
-        xmlResult = xmlResult.replaceAll("(<active-defects/>)", "");
 
-        List<Object> objectList = ych.decode(xmlResult, XML, QUERY_REPLY);
-        if (objectList != null && objectList.size() > 0) {
-            Object systemObject = objectList.get(0);
-            return (MseaCfm) systemObject;
-        } else {
-            throw new NetconfException("Failure of YCH decode - could not parse as MseaCfm: " + xmlResult);
+        xmlResult = removeRpcReplyData(xmlResult);
+        DefaultCompositeStream resultDcs = new DefaultCompositeStream(
+                null, new ByteArrayInputStream(xmlResult.getBytes()));
+        CompositeData compositeData = xSer.decode(resultDcs, yCtx);
+
+        ModelObjectData mod = ((ModelConverter) yangModelRegistry).createModel(compositeData.resourceData());
+
+        MseaCfmOpParam mseaCfm = new MseaCfmOpParam();
+        for (ModelObject mo:mod.modelObjects()) {
+            if (mo instanceof DefaultMefCfm) {
+                mseaCfm.mefCfm((DefaultMefCfm) mo);
+            }
         }
+
+        return mseaCfm;
     }
 
     @Override
     public MseaCfm getSoamDm(String mdName, String maName, int mepId,
             int dmId, NetconfSession session) throws NetconfException {
         String xmlQueryStr = buildDmQueryString(mdName, maName, mepId, dmId);
-        log.debug("Sending <get> for " +
-                " query on NETCONF session " + session.getSessionId() +
-                ":\n" + xmlQueryStr);
-
-        String xmlResult = session.get(xmlQueryStr, null);
-
-        List<Object> objectList = ych.decode(xmlResult, XML, QUERY_REPLY);
-        if (objectList != null && objectList.size() > 0) {
-            Object systemObject = objectList.get(0);
-            return (MseaCfm) systemObject;
-        } else {
-            throw new NetconfException("Failure of YCH decode - could not parse as MseaCfm: " + xmlResult);
-        }
+        throw new UnsupportedOperationException("Not yet implemented");
     }
 
     @Override
-    public void setMseaCfm(MseaCfmOpParam mseaCfm, NetconfSession session, TargetConfig targetDs)
-            throws NetconfException {
-        setNetconfObject(mseaCfm, session, targetDs);
+    public boolean setMseaCfm(MseaCfmOpParam mseaCfm, NetconfSession session,
+              DatastoreId targetDs) throws NetconfException {
+        ModelObjectData moEdit = DefaultModelObjectData.builder()
+                .addModelObject(mseaCfm).build();
+
+        return setNetconfObject(moEdit, session, targetDs, null);
     }
 
     /**
@@ -139,16 +128,6 @@
         throw new UnsupportedOperationException("Not yet implemented");
     }
 
-    @Override
-    public void addListener(MseaCfmEventListener listener) {
-        throw new UnsupportedOperationException("Not yet implemented");
-    }
-
-    @Override
-    public void removeListener(MseaCfmEventListener listener) {
-        throw new UnsupportedOperationException("Not yet implemented");
-    }
-
     private String buildMepQueryString(String mdName, String maName, int mepId) {
         StringBuilder rpc = new StringBuilder();
 
@@ -162,7 +141,7 @@
         rpc.append("<maintenance-association>\n");
         rpc.append("<id/>\n");
         rpc.append("<name>" + maName + "</name>\n");
-//        rpc.append("<ccm-interval>10ms</ccm-interval>\n"); //Have to omit for the moment - YMS problem
+        rpc.append("<ccm-interval>10ms</ccm-interval>\n");
         rpc.append("<remote-meps/>\n");
         rpc.append("<component-list/>\n");
         rpc.append("<maintenance-association-end-point>\n");
@@ -175,7 +154,7 @@
         rpc.append("<mac-address/>\n");
         rpc.append("<msea-soam-fm:port-status/>\n");
         rpc.append("<msea-soam-fm:interface-status/>\n");
-//        rpc.append("<msea-soam-fm:last-defect-sent/>\n");//Have to omit for the moment - YMS problem
+        rpc.append("<msea-soam-fm:last-defect-sent/>\n");
         rpc.append("<msea-soam-fm:rdi-transmit-status/>\n");
         rpc.append("<loopback/>\n");
         rpc.append("<remote-mep-database/>\n");
@@ -202,7 +181,7 @@
         rpc.append("<maintenance-association>\n");
         rpc.append("<id/>\n");
         rpc.append("<name>" + maName + "</name>\n");
-//        rpc.append("<ccm-interval>10ms</ccm-interval>\n"); //Have to omit for the moment - YMS problem
+        rpc.append("<ccm-interval>10ms</ccm-interval>\n");
         rpc.append("<maintenance-association-end-point>\n");
         rpc.append("<mep-identifier>" + mepId + "</mep-identifier>\n");
         rpc.append("<msea-soam-pm:delay-measurements>");
diff --git a/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/impl/MseaSaFilteringManager.java b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/impl/MseaSaFilteringManager.java
new file mode 100644
index 0000000..01af138
--- /dev/null
+++ b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/impl/MseaSaFilteringManager.java
@@ -0,0 +1,202 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.drivers.microsemi.yang.impl;
+
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Service;
+import org.onosproject.drivers.microsemi.yang.MseaSaFilteringNetconfService;
+import org.onosproject.netconf.DatastoreId;
+import org.onosproject.netconf.NetconfException;
+import org.onosproject.netconf.NetconfSession;
+import org.onosproject.yang.gen.v1.mseasafiltering.rev20160412.MseaSaFiltering;
+import org.onosproject.yang.gen.v1.mseasafiltering.rev20160412.MseaSaFilteringOpParam;
+import org.onosproject.yang.gen.v1.mseasafiltering.rev20160412.mseasafiltering.SourceIpaddressFiltering;
+import org.onosproject.yang.gen.v1.mseasafiltering.rev20160412.mseasafiltering.sourceipaddressfiltering.interfaceeth0.SourceAddressRange;
+import org.onosproject.yang.model.DefaultModelObjectData;
+import org.onosproject.yang.model.ModelConverter;
+import org.onosproject.yang.model.ModelObject;
+import org.onosproject.yang.model.ModelObjectData;
+import org.onosproject.yang.model.ResourceId;
+import org.onosproject.yang.runtime.AnnotatedNodeInfo;
+import org.onosproject.yang.runtime.CompositeData;
+import org.onosproject.yang.runtime.DefaultAnnotatedNodeInfo;
+import org.onosproject.yang.runtime.DefaultAnnotation;
+import org.onosproject.yang.runtime.DefaultCompositeStream;
+
+import java.io.ByteArrayInputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Implementation of the MseaSaFiltering YANG model service.
+ */
+@Component(immediate = true, inherit = true)
+@Service
+public class MseaSaFilteringManager extends AbstractYangServiceImpl
+    implements MseaSaFilteringNetconfService {
+    public static final String MSEA_SA_FILTERING =
+            "org.onosproject.drivers.microsemi.yang.mseasafiltering";
+    public static final String MSEA_SA_FILTERING_NS =
+            "http://www.microsemi.com/microsemi-edge-assure/msea-sa-filtering";
+
+    @Activate
+    public void activate() {
+        super.activate();
+        appId = coreService.registerApplication(MSEA_SA_FILTERING);
+        log.info("MseaSaFilteringManager Started");
+    }
+
+    @Deactivate
+    public void deactivate() {
+        super.deactivate();
+        log.info("MseaSaFilteringManager Stopped");
+    }
+
+    /**
+     * Get a filtered subset of the model.
+     * This is meant to filter the current live model
+     * against the attribute(s) given in the argument
+     * and return the filtered model.
+     */
+    @Override
+    public MseaSaFiltering getMseaSaFiltering(
+            MseaSaFilteringOpParam mseaSaFilteringFilter, NetconfSession session)
+            throws NetconfException {
+        ModelObjectData moQuery = DefaultModelObjectData.builder()
+                .addModelObject((ModelObject) mseaSaFilteringFilter
+                        .sourceIpaddressFiltering())
+                .build();
+
+
+        ModelObjectData moReply = getNetconfObject(moQuery, session);
+
+        MseaSaFiltering reply = new MseaSaFilteringOpParam();
+        for (ModelObject mo:moReply.modelObjects()) {
+            if (mo instanceof SourceIpaddressFiltering) {
+                reply.sourceIpaddressFiltering((SourceIpaddressFiltering) mo);
+            }
+        }
+        return reply;
+    }
+
+    /**
+     * Get a filtered subset of the config model (from running)
+     * This is meant to filter the current live model
+     * against the attribute(s) given in the argument
+     * and return the filtered model.
+     */
+    @Override
+    public List<SourceAddressRange> getConfigMseaSaFilterIds(NetconfSession session)
+            throws NetconfException {
+
+        String xmlResult = session.getConfig(DatastoreId.RUNNING, saFilterQuery());
+        xmlResult = removeRpcReplyData(xmlResult);
+
+        DefaultCompositeStream resultDcs = new DefaultCompositeStream(
+                null, new ByteArrayInputStream(xmlResult.getBytes()));
+        CompositeData compositeData = xSer.decode(resultDcs, yCtx);
+
+        ModelObjectData moReply = ((ModelConverter) yangModelRegistry).createModel(compositeData.resourceData());
+
+        MseaSaFiltering reply = new MseaSaFilteringOpParam();
+        for (ModelObject mo:moReply.modelObjects()) {
+            if (mo instanceof SourceIpaddressFiltering) {
+                reply.sourceIpaddressFiltering((SourceIpaddressFiltering) mo);
+            }
+        }
+        if (reply != null && reply.sourceIpaddressFiltering() != null &&
+                reply.sourceIpaddressFiltering().interfaceEth0() != null) {
+            return reply.sourceIpaddressFiltering().interfaceEth0().sourceAddressRange();
+        } else {
+            return new ArrayList<SourceAddressRange>();
+        }
+    }
+
+    /**
+     * Call NETCONF edit-config with a configuration.
+     */
+    @Override
+    public boolean setMseaSaFiltering(MseaSaFilteringOpParam mseaSaFiltering,
+           NetconfSession session, DatastoreId ncDs) throws NetconfException {
+
+        ModelObjectData moQuery = DefaultModelObjectData.builder()
+                .addModelObject((ModelObject) mseaSaFiltering
+                        .sourceIpaddressFiltering()).build();
+
+        return setNetconfObject(moQuery, session, ncDs, null);
+    }
+
+    @Override
+    public boolean deleteMseaSaFilteringRange(MseaSaFilteringOpParam mseaSaFiltering,
+                                      NetconfSession session, DatastoreId ncDs) throws NetconfException {
+
+        ModelObjectData moQuery = DefaultModelObjectData.builder()
+                .addModelObject((ModelObject) mseaSaFiltering
+                        .sourceIpaddressFiltering()).build();
+
+        ArrayList anis = new ArrayList<AnnotatedNodeInfo>();
+        if (mseaSaFiltering.sourceIpaddressFiltering().interfaceEth0() != null &&
+                mseaSaFiltering.sourceIpaddressFiltering().interfaceEth0().sourceAddressRange() != null) {
+
+            for (SourceAddressRange sar:mseaSaFiltering.sourceIpaddressFiltering()
+                    .interfaceEth0().sourceAddressRange()) {
+                String sarRangeIdStr = String.valueOf(sar.rangeId());
+
+                ResourceId.Builder ridBuilder = ResourceId.builder()
+                        .addBranchPointSchema("/", null)
+                        .addBranchPointSchema("source-ipaddress-filtering", MSEA_SA_FILTERING_NS)
+                        .addBranchPointSchema("interface-eth0", MSEA_SA_FILTERING_NS)
+                        .addBranchPointSchema("source-address-range", MSEA_SA_FILTERING_NS)
+                        .addKeyLeaf("range-id", MSEA_SA_FILTERING_NS, sarRangeIdStr);
+
+                AnnotatedNodeInfo ani = DefaultAnnotatedNodeInfo.builder()
+                        .resourceId(ridBuilder.build())
+                        .addAnnotation(new DefaultAnnotation(NC_OPERATION, OP_DELETE))
+                        .build();
+
+                anis.add(ani);
+            }
+        } else {
+            //Delete all
+            ResourceId.Builder ridBuilder = ResourceId.builder()
+                    .addBranchPointSchema("/", null)
+                    .addBranchPointSchema("source-ipaddress-filtering", MSEA_SA_FILTERING_NS);
+            AnnotatedNodeInfo ani = DefaultAnnotatedNodeInfo.builder()
+                    .resourceId(ridBuilder.build())
+                    .addAnnotation(new DefaultAnnotation(NC_OPERATION, OP_DELETE))
+                    .build();
+            anis.add(ani);
+        }
+
+        return setNetconfObject(moQuery, session, ncDs, anis);
+    }
+
+
+    private static String saFilterQuery() {
+        StringBuilder sb = new StringBuilder("<source-ipaddress-filtering " +
+                "xmlns=\"http://www.microsemi.com/microsemi-edge-assure/msea-sa-filtering\">");
+        sb.append("<interface-eth0>");
+        sb.append("<filter-admin-state>blacklist</filter-admin-state>");
+        sb.append("<source-address-range>");
+        sb.append("<range-id/>");
+        sb.append("</source-address-range>");
+        sb.append("</interface-eth0>");
+        sb.append("</source-ipaddress-filtering>");
+        return sb.toString();
+    }
+}
diff --git a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/impl/MseaUniEvcServiceManager.java b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/impl/MseaUniEvcServiceManager.java
similarity index 62%
rename from drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/impl/MseaUniEvcServiceManager.java
rename to drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/impl/MseaUniEvcServiceManager.java
index 82b6116..f965541 100644
--- a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/impl/MseaUniEvcServiceManager.java
+++ b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/impl/MseaUniEvcServiceManager.java
@@ -15,9 +15,7 @@
  */
 package org.onosproject.drivers.microsemi.yang.impl;
 
-import static org.onosproject.yms.ych.YangProtocolEncodingFormat.XML;
-import static org.onosproject.yms.ydt.YmsOperationType.QUERY_CONFIG_REPLY;
-
+import java.io.ByteArrayInputStream;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -27,13 +25,24 @@
 import org.apache.felix.scr.annotations.Deactivate;
 import org.apache.felix.scr.annotations.Service;
 import org.onosproject.drivers.microsemi.yang.MseaUniEvcServiceNetconfService;
+import org.onosproject.netconf.DatastoreId;
 import org.onosproject.netconf.NetconfException;
 import org.onosproject.netconf.NetconfSession;
-import org.onosproject.netconf.TargetConfig;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.MseaUniEvcService;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.MseaUniEvcServiceOpParam;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.MseaUniEvcServiceService;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.uni.evc.service.rev20160317.mseaunievcservice.mefservices.uni.UniSideInterfaceAssignmentEnum;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.MseaUniEvcService;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.MseaUniEvcServiceOpParam;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.MefServices;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.profiles.BwpGroup;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.uni.UniSideInterfaceAssignmentEnum;
+import org.onosproject.yang.model.DefaultModelObjectData;
+import org.onosproject.yang.model.ModelConverter;
+import org.onosproject.yang.model.ModelObject;
+import org.onosproject.yang.model.ModelObjectData;
+import org.onosproject.yang.model.ResourceId;
+import org.onosproject.yang.runtime.AnnotatedNodeInfo;
+import org.onosproject.yang.runtime.CompositeData;
+import org.onosproject.yang.runtime.DefaultAnnotatedNodeInfo;
+import org.onosproject.yang.runtime.DefaultAnnotation;
+import org.onosproject.yang.runtime.DefaultCompositeStream;
 
 /**
  * Implementation of the MseaUniEvcServiceService YANG model service.
@@ -42,70 +51,127 @@
 @Service
 public class MseaUniEvcServiceManager extends AbstractYangServiceImpl
         implements MseaUniEvcServiceNetconfService {
-    public static final String MSEA_SA_FILTERING = "org.onosproject.drivers.microsemi.yang.mseaunievcservice";
+    public static final String MSEA_UNI_EVC_SVC =
+            "org.onosproject.drivers.microsemi.yang.mseaunievcservice";
+    public static final String MSEA_UNI_EVC_SVC_NS =
+            "http://www.microsemi.com/microsemi-edge-assure/msea-uni-evc-service";
 
     @Activate
     public void activate() {
-        appId = coreService.registerApplication(MSEA_SA_FILTERING);
-        ych = ymsService.getYangCodecHandler();
-        ych.addDeviceSchema(MseaUniEvcServiceService.class);
+        super.activate();
+        appId = coreService.registerApplication(MSEA_UNI_EVC_SVC);
         log.info("MseaUniEvcServiceManager Started");
     }
 
     @Deactivate
     public void deactivate() {
         super.deactivate();
-        ymsService.unRegisterService(this, MseaUniEvcServiceService.class);
-        ych = null;
         log.info("MseaUniEvcServiceManager Stopped");
     }
 
     @Override
     public MseaUniEvcService getMseaUniEvcService(
-            MseaUniEvcServiceOpParam mseaUniEvcService, NetconfSession session) throws NetconfException {
-        return (MseaUniEvcService) getNetconfObject(mseaUniEvcService, session);
+            MseaUniEvcServiceOpParam mseaUniEvcService, NetconfSession session)
+            throws NetconfException {
+
+        return getConfigMseaUniEvcService(mseaUniEvcService, session, null);
     }
 
     @Override
     public MseaUniEvcService getConfigMseaUniEvcService(
-            MseaUniEvcServiceOpParam mseaUniEvcService, NetconfSession session, TargetConfig targetDs)
-            throws NetconfException {
-        return (MseaUniEvcService) getConfigNetconfObject(mseaUniEvcService, session, targetDs);
+            MseaUniEvcServiceOpParam mseaUniEvcService, NetconfSession session,
+            DatastoreId targetDs) throws NetconfException {
+
+        ModelObjectData moFilter = DefaultModelObjectData.builder()
+                .addModelObject((ModelObject) mseaUniEvcService.mefServices()).build();
+
+        ModelObjectData moReply = getConfigNetconfObject(moFilter, session, targetDs);
+
+        MseaUniEvcService reply = new MseaUniEvcServiceOpParam();
+        for (ModelObject mo:moReply.modelObjects()) {
+            if (mo instanceof MefServices) {
+                reply.mefServices((MefServices) mo);
+            }
+        }
+        return reply;
     }
 
     /**
      * Modify the configuration.
      */
     @Override
-    public void setMseaUniEvcService(
-            MseaUniEvcServiceOpParam mseaUniEvcService, NetconfSession session, TargetConfig ncDs)
-                    throws NetconfException {
-        setNetconfObject(mseaUniEvcService, session, ncDs);
+    public boolean setMseaUniEvcService(MseaUniEvcServiceOpParam mseaUniEvcService,
+                 NetconfSession session, DatastoreId ncDs) throws NetconfException {
+        ModelObjectData moEdit = DefaultModelObjectData.builder()
+                .addModelObject((ModelObject) mseaUniEvcService.mefServices()).build();
+
+        return setNetconfObject(moEdit, session, ncDs, null);
     }
 
+    /**
+     * Delete the configuration.
+     */
+    @Override
+    public boolean deleteMseaUniEvcService(MseaUniEvcServiceOpParam mseaUniEvcService,
+                NetconfSession session, DatastoreId ncDs) throws NetconfException {
+        ModelObjectData moEdit = DefaultModelObjectData.builder()
+                .addModelObject((ModelObject) mseaUniEvcService.mefServices()).build();
+
+        ArrayList anis = new ArrayList<AnnotatedNodeInfo>();
+        for (BwpGroup bwpGrp:mseaUniEvcService.mefServices().profiles().bwpGroup()) {
+            String bwpGroupIndex = String.valueOf(bwpGrp.groupIndex());
+
+            ResourceId.Builder ridBuilder = ResourceId.builder()
+                    .addBranchPointSchema("/", null)
+                    .addBranchPointSchema("mef-services", MSEA_UNI_EVC_SVC_NS)
+                    .addBranchPointSchema("profiles", MSEA_UNI_EVC_SVC_NS)
+                    .addBranchPointSchema("bwp-group", MSEA_UNI_EVC_SVC_NS)
+                    .addKeyLeaf("group-index", MSEA_UNI_EVC_SVC_NS, bwpGroupIndex);
+
+            AnnotatedNodeInfo ani = DefaultAnnotatedNodeInfo.builder()
+                    .resourceId(ridBuilder.build())
+                    .addAnnotation(new DefaultAnnotation(NC_OPERATION, OP_DELETE))
+                    .build();
+
+            anis.add(ani);
+        }
+
+
+        return setNetconfObject(moEdit, session, ncDs, anis);
+    }
+
+
     @Override
     public MseaUniEvcService getmseaUniEvcCeVlanMaps(
-            NetconfSession session, TargetConfig ncDs)
+            NetconfSession session, DatastoreId ncDs)
             throws NetconfException {
         if (session == null) {
             throw new NetconfException("Session is null when calling getMseaSaFiltering()");
         }
 
         String xmlResult = session.getConfig(ncDs, evcFilterQuery());
+        xmlResult = removeRpcReplyData(xmlResult);
 
-        List<Object> objectList = ych.decode(xmlResult, XML, QUERY_CONFIG_REPLY);
-        if (objectList != null && objectList.size() > 0) {
-            return (MseaUniEvcService) objectList.get(0);
+        DefaultCompositeStream resultDcs = new DefaultCompositeStream(
+                null, new ByteArrayInputStream(xmlResult.getBytes()));
+        CompositeData compositeData = xSer.decode(resultDcs, yCtx);
+
+        ModelObjectData moReply = ((ModelConverter) yangModelRegistry).createModel(compositeData.resourceData());
+
+        MseaUniEvcService reply = new MseaUniEvcServiceOpParam();
+        for (ModelObject mo:moReply.modelObjects()) {
+            if (mo instanceof MefServices) {
+                reply.mefServices((MefServices) mo);
+            }
         }
-
-        return null;
+        return reply;
     }
 
     @Override
     public void removeEvcUniFlowEntries(
             Map<Integer, String> ceVlanUpdates,
             Map<Integer, List<Short>> flowVlanIds,
-            NetconfSession session, TargetConfig targetDs,
+            NetconfSession session, DatastoreId targetDs,
             UniSideInterfaceAssignmentEnum portAssign) throws NetconfException {
 
         List<Integer> evcAlreadyHandled = new ArrayList<>();
diff --git a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/impl/package-info.java b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/impl/package-info.java
similarity index 100%
rename from drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/impl/package-info.java
rename to drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/impl/package-info.java
diff --git a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/package-info.java b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/package-info.java
similarity index 100%
rename from drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/package-info.java
rename to drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/package-info.java
diff --git a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/utils/CeVlanMapUtils.java b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/utils/CeVlanMapUtils.java
similarity index 100%
rename from drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/utils/CeVlanMapUtils.java
rename to drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/utils/CeVlanMapUtils.java
diff --git a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/utils/IetfYangTypesUtils.java b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/utils/IetfYangTypesUtils.java
similarity index 95%
rename from drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/utils/IetfYangTypesUtils.java
rename to drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/utils/IetfYangTypesUtils.java
index 4b706b6..275dc25 100644
--- a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/utils/IetfYangTypesUtils.java
+++ b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/utils/IetfYangTypesUtils.java
@@ -21,7 +21,7 @@
 import java.time.ZonedDateTime;
 import java.time.format.DateTimeFormatter;
 
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev20130715.ietfyangtypes.DateAndTime;
+import org.onosproject.yang.gen.v1.ietfyangtypes.rev20130715.ietfyangtypes.DateAndTime;
 
 /**
  * A utility class to change various YANG types to general purpose classes.
diff --git a/drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/utils/package-info.java b/drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/utils/package-info.java
similarity index 100%
rename from drivers/microsemi/ea1000yang/src/main/java/org/onosproject/drivers/microsemi/yang/utils/package-info.java
rename to drivers/microsemi/src/main/java/org/onosproject/drivers/microsemi/yang/utils/package-info.java
diff --git a/drivers/microsemi/ea1000driver/src/main/resources/microsemi-drivers.xml b/drivers/microsemi/src/main/resources/microsemi-drivers.xml
similarity index 100%
rename from drivers/microsemi/ea1000driver/src/main/resources/microsemi-drivers.xml
rename to drivers/microsemi/src/main/resources/microsemi-drivers.xml
diff --git a/drivers/microsemi/ea1000driver/src/test/java/org/onosproject/drivers/microsemi/EA1000FlowRuleProgrammableTest.java b/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/EA1000FlowRuleProgrammableTest.java
similarity index 100%
rename from drivers/microsemi/ea1000driver/src/test/java/org/onosproject/drivers/microsemi/EA1000FlowRuleProgrammableTest.java
rename to drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/EA1000FlowRuleProgrammableTest.java
diff --git a/drivers/microsemi/ea1000driver/src/test/java/org/onosproject/drivers/microsemi/EA1000MeterProviderTest.java b/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/EA1000MeterProviderTest.java
similarity index 100%
rename from drivers/microsemi/ea1000driver/src/test/java/org/onosproject/drivers/microsemi/EA1000MeterProviderTest.java
rename to drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/EA1000MeterProviderTest.java
diff --git a/drivers/microsemi/ea1000driver/src/test/java/org/onosproject/drivers/microsemi/MicrosemiDriversLoaderTest.java b/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/MicrosemiDriversLoaderTest.java
similarity index 100%
rename from drivers/microsemi/ea1000driver/src/test/java/org/onosproject/drivers/microsemi/MicrosemiDriversLoaderTest.java
rename to drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/MicrosemiDriversLoaderTest.java
diff --git a/drivers/microsemi/ea1000driver/src/test/java/org/onosproject/drivers/microsemi/MockEa1000DriverHandler.java b/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/MockEa1000DriverHandler.java
similarity index 100%
rename from drivers/microsemi/ea1000driver/src/test/java/org/onosproject/drivers/microsemi/MockEa1000DriverHandler.java
rename to drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/MockEa1000DriverHandler.java
diff --git a/drivers/microsemi/ea1000driver/src/test/java/org/onosproject/drivers/microsemi/RpcResultParserTest.java b/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/RpcResultParserTest.java
similarity index 100%
rename from drivers/microsemi/ea1000driver/src/test/java/org/onosproject/drivers/microsemi/RpcResultParserTest.java
rename to drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/RpcResultParserTest.java
diff --git a/drivers/microsemi/ea1000driver/src/test/java/org/onosproject/drivers/microsemi/TestEA1000MeterProvider.java b/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/TestEA1000MeterProvider.java
similarity index 100%
rename from drivers/microsemi/ea1000driver/src/test/java/org/onosproject/drivers/microsemi/TestEA1000MeterProvider.java
rename to drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/TestEA1000MeterProvider.java
diff --git a/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/CeVlanMapUtilsTest.java b/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/CeVlanMapUtilsTest.java
similarity index 100%
rename from drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/CeVlanMapUtilsTest.java
rename to drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/CeVlanMapUtilsTest.java
diff --git a/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/IetfSystemManagerTest.java b/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/IetfSystemManagerTest.java
similarity index 65%
rename from drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/IetfSystemManagerTest.java
rename to drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/IetfSystemManagerTest.java
index c792b91..098ecdd 100644
--- a/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/IetfSystemManagerTest.java
+++ b/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/IetfSystemManagerTest.java
@@ -31,21 +31,20 @@
 import org.onosproject.netconf.NetconfDeviceInfo;
 import org.onosproject.netconf.NetconfException;
 import org.onosproject.netconf.NetconfSession;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.system.rev20160505.ietfsystemmicrosemi.system.AugmentedSysSystem;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.system.rev20160505.ietfsystemmicrosemi.systemstate.platform.AugmentedSysPlatform;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.system.rev20140806.IetfSystem;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.system.rev20140806.IetfSystemOpParam;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.system.rev20140806.ietfsystem.DefaultSystem;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.system.rev20140806.ietfsystem.System;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.system.rev20140806.ietfsystem.system.Clock;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.system.rev20140806.ietfsystem.system.DefaultClock;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.system.rev20140806.ietfsystem.system.clock.timezone.DefaultTimezoneName;
-import org.onosproject.yms.ymsm.YmsService;
+import org.onosproject.yang.gen.v1.ietfsystemmicrosemi.rev20160505.ietfsystemmicrosemi.system.AugmentedSysSystem;
+import org.onosproject.yang.gen.v1.ietfsystemmicrosemi.rev20160505.ietfsystemmicrosemi.system.DefaultAugmentedSysSystem;
+import org.onosproject.yang.gen.v1.ietfsystemmicrosemi.rev20160505.ietfsystemmicrosemi.systemstate.platform.AugmentedSysPlatform;
+import org.onosproject.yang.gen.v1.ietfsystem.rev20140806.IetfSystem;
+import org.onosproject.yang.gen.v1.ietfsystem.rev20140806.IetfSystemOpParam;
+import org.onosproject.yang.gen.v1.ietfsystem.rev20140806.ietfsystem.DefaultSystem;
+import org.onosproject.yang.gen.v1.ietfsystem.rev20140806.ietfsystem.System;
+import org.onosproject.yang.gen.v1.ietfsystem.rev20140806.ietfsystem.system.DefaultClock;
+import org.onosproject.yang.gen.v1.ietfsystem.rev20140806.ietfsystem.system.clock.timezone.DefaultTimezoneName;
+import org.onosproject.yang.gen.v1.ietfsystemmicrosemi.rev20160505.ietfsystemmicrosemi.systemstate.platform.DefaultAugmentedSysPlatform;
 
 public class IetfSystemManagerTest {
 
     IetfSystemManager sysSvc = null;
-    YmsService ymsService;
     NetconfSession session;
 
     @Before
@@ -67,14 +66,11 @@
 
     @Test
     public void testGetIetfSystemSession() throws NetconfException {
-        Clock.ClockBuilder cBuilder = new DefaultClock.ClockBuilder();
-        Clock clock = cBuilder.build();
+        System system = new DefaultSystem();
+        system.clock(new DefaultClock());
 
-        System.SystemBuilder sBuilder = new DefaultSystem.SystemBuilder();
-        System system = sBuilder.clock(clock).build();
-
-        IetfSystemOpParam.IetfSystemBuilder builder = new IetfSystemOpParam.IetfSystemBuilder();
-        IetfSystemOpParam sampleSystem = (IetfSystemOpParam) builder.system(system).build();
+        IetfSystemOpParam sampleSystem = new IetfSystemOpParam();
+        sampleSystem.system(system);
 
         IetfSystem sys = sysSvc.getIetfSystem(sampleSystem, session);
         assertNotNull(sys);
@@ -91,14 +87,14 @@
         assertNotNull(sys);
         assertNotNull(sys.system());
 
-        AugmentedSysSystem sysSystem = (AugmentedSysSystem) sys.system().yangAugmentedInfo(AugmentedSysSystem.class);
+        AugmentedSysSystem sysSystem = (AugmentedSysSystem) sys.system().augmentation(DefaultAugmentedSysSystem.class);
 
         assertEquals("-8.4683990", sysSystem.longitude().toPlainString());
         assertEquals("51.9036140", sysSystem.latitude().toPlainString());
         assertEquals("4.4.0-53-generic", sys.systemState().platform().osRelease());
 
         AugmentedSysPlatform sysSystemState =
-                (AugmentedSysPlatform) sys.systemState().platform().yangAugmentedInfo(AugmentedSysPlatform.class);
+                (AugmentedSysPlatform) sys.systemState().platform().augmentation(DefaultAugmentedSysPlatform.class);
 
         assertEquals("Eagle Simulator.", sysSystemState.deviceIdentification().serialNumber());
     }
diff --git a/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/MockIetfSystemManager.java b/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/MockIetfSystemManager.java
new file mode 100644
index 0000000..f035c70
--- /dev/null
+++ b/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/MockIetfSystemManager.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.drivers.microsemi.yang;
+
+
+import org.onosproject.drivers.microsemi.yang.impl.IetfSystemManager;
+import org.onosproject.yang.MockYangRuntimeManager;
+import org.onosproject.yang.runtime.impl.DefaultYangModelRegistry;
+import org.onosproject.yang.serializers.xml.MockYangSerializerContext;
+import org.onosproject.yang.serializers.xml.XmlSerializer;
+
+public class MockIetfSystemManager extends IetfSystemManager {
+
+    @Override
+    public void activate() {
+        yCtx = new MockYangSerializerContext();
+        xSer = new XmlSerializer();
+        yangModelRegistry = new MockYangRuntimeManager();
+        ((MockYangRuntimeManager) yangModelRegistry).setModelRegistry(
+                (DefaultYangModelRegistry) yCtx.getContext());
+        ((MockYangRuntimeManager) yangModelRegistry).activate();
+    }
+}
diff --git a/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/MockMseaCfmManager.java b/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/MockMseaCfmManager.java
new file mode 100644
index 0000000..fb20697
--- /dev/null
+++ b/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/MockMseaCfmManager.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.drivers.microsemi.yang;
+
+import org.onosproject.drivers.microsemi.yang.impl.MseaCfmManager;
+import org.onosproject.yang.MockYangRuntimeManager;
+import org.onosproject.yang.runtime.impl.DefaultYangModelRegistry;
+import org.onosproject.yang.serializers.xml.MockYangSerializerContext;
+import org.onosproject.yang.serializers.xml.XmlSerializer;
+
+public class MockMseaCfmManager extends MseaCfmManager {
+
+    @Override
+    public void activate() {
+        yCtx = new MockYangSerializerContext();
+        xSer = new XmlSerializer();
+        yangModelRegistry = new MockYangRuntimeManager();
+        ((MockYangRuntimeManager) yangModelRegistry).setModelRegistry(
+                (DefaultYangModelRegistry) yCtx.getContext());
+        ((MockYangRuntimeManager) yangModelRegistry).activate();
+    }
+}
diff --git a/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/MockMseaSaFilteringManager.java b/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/MockMseaSaFilteringManager.java
new file mode 100644
index 0000000..a2de180
--- /dev/null
+++ b/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/MockMseaSaFilteringManager.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.drivers.microsemi.yang;
+
+import org.onosproject.drivers.microsemi.yang.impl.MseaSaFilteringManager;
+import org.onosproject.yang.MockYangRuntimeManager;
+import org.onosproject.yang.runtime.impl.DefaultYangModelRegistry;
+import org.onosproject.yang.serializers.xml.MockYangSerializerContext;
+import org.onosproject.yang.serializers.xml.XmlSerializer;
+
+public class MockMseaSaFilteringManager extends MseaSaFilteringManager {
+
+    @Override
+    public void activate() {
+        yCtx = new MockYangSerializerContext();
+        xSer = new XmlSerializer();
+        yangModelRegistry = new MockYangRuntimeManager();
+        ((MockYangRuntimeManager) yangModelRegistry).setModelRegistry(
+                (DefaultYangModelRegistry) yCtx.getContext());
+        ((MockYangRuntimeManager) yangModelRegistry).activate();
+    }
+}
diff --git a/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/MockMseaUniEvcServiceManager.java b/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/MockMseaUniEvcServiceManager.java
new file mode 100644
index 0000000..e7921c2
--- /dev/null
+++ b/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/MockMseaUniEvcServiceManager.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.drivers.microsemi.yang;
+
+import org.onosproject.drivers.microsemi.yang.impl.MseaUniEvcServiceManager;
+import org.onosproject.yang.MockYangRuntimeManager;
+import org.onosproject.yang.runtime.impl.DefaultYangModelRegistry;
+import org.onosproject.yang.serializers.xml.MockYangSerializerContext;
+import org.onosproject.yang.serializers.xml.XmlSerializer;
+
+public class MockMseaUniEvcServiceManager extends MseaUniEvcServiceManager {
+    @Override
+    public void activate() {
+        yCtx = new MockYangSerializerContext();
+        xSer = new XmlSerializer();
+        yangModelRegistry = new MockYangRuntimeManager();
+        ((MockYangRuntimeManager) yangModelRegistry).setModelRegistry(
+                (DefaultYangModelRegistry) yCtx.getContext());
+        ((MockYangRuntimeManager) yangModelRegistry).activate();
+    }
+}
diff --git a/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/MockNetconfSessionEa1000.java b/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/MockNetconfSessionEa1000.java
similarity index 92%
rename from drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/MockNetconfSessionEa1000.java
rename to drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/MockNetconfSessionEa1000.java
index 19a291e..fc6da58 100644
--- a/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/MockNetconfSessionEa1000.java
+++ b/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/MockNetconfSessionEa1000.java
@@ -20,6 +20,7 @@
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.regex.Pattern;
 
+import org.onosproject.netconf.DatastoreId;
 import org.onosproject.netconf.NetconfDeviceInfo;
 import org.onosproject.netconf.NetconfDeviceOutputEventListener;
 import org.onosproject.netconf.NetconfException;
@@ -88,17 +89,21 @@
                     + "(</config>).*(</edit-config>).*(</rpc>).*(]]>){2}", Pattern.DOTALL);
 
     private Pattern sampleXmlRegexEditDeleteSaFilt =
-            Pattern.compile("(<\\?xml).*(<rpc).*(<edit-config>).*"
-                    + "(<target><running/></target>).*(<config xmlns:nc=\"urn:ietf:params:xml:ns:netconf:base:1.0\">).*"
+            Pattern.compile("(<\\?xml).*(<rpc).*(<edit-config>)\\R?"
+                    + "(<target><running/></target>)\\R?"
+                    + "(<config xmlns:nc=\"urn:ietf:params:xml:ns:netconf:base:1.0\">)\\R?"
                     + "(<source-ipaddress-filtering "
-                    + "xmlns=\"http://www.microsemi.com/microsemi-edge-assure/msea-sa-filtering\">).*"
-                    + "(<interface-eth0>).*"
-                    + "(<source-address-range nc:operation=\"delete\">).*(<range-id>).*(</range-id>).*"
-                    + "(</source-address-range>).*"
-                    + "(<source-address-range nc:operation=\"delete\">).*(<range-id>).*(</range-id>).*"
-                    + "(</source-address-range>).*"
-                    + "(</interface-eth0>).*(</source-ipaddress-filtering>).*"
-                    + "(</config>).*(</edit-config>).*(</rpc>).*(]]>){2}", Pattern.DOTALL);
+                    + "xmlns=\"http://www.microsemi.com/microsemi-edge-assure/msea-sa-filtering\">)\\R?"
+                    + "(<interface-eth0>)\\R?"
+                    + "((<source-address-range nc:operation=\"delete\">)\\R?"
+                    + "(<range-id>)[0-9]*(</range-id>)\\R?"
+                    + "((<name>)[a-zA-Z0-9]*(</name>))?\\R?"
+                    + "((<ipv4-address-prefix>)[0-9\\\\./]*(</ipv4-address-prefix>))?\\R?"
+                    + "(</source-address-range>))++\\R?"
+                    + "(</interface-eth0>)\\R?"
+                    + "(</source-ipaddress-filtering>)\\R?"
+                    + "(</config>)\\R?"
+                    + "(</edit-config>)\\R?(</rpc>).*(]]>){2}", Pattern.DOTALL);
 
     private Pattern sampleXmlRegexUniEvc =
             Pattern.compile("(<\\?xml).*(<rpc).*(<get-config>)\\R?"
@@ -126,18 +131,18 @@
                     + "(<evc>)\\R?(<evc-index>).*(</evc-index>)\\R?(<name>).*(</name>)\\R?"
                     + "(<evc-per-uni>)\\R?"
                     + "(<evc-per-uni-c>)\\R?"
-                    + "(<ce-vlan-map>).*(</ce-vlan-map>)\\R?"
-                    + "(<ingress-bwp-group-index>).*(</ingress-bwp-group-index>)\\R?"
-                    + "(<tag-push>)\\R?(<push-tag-type>)pushStag(</push-tag-type>)\\R?(<outer-tag-vlan>).*"
-                    + "(</outer-tag-vlan>)\\R?(</tag-push>)\\R?"
+                    + "(<ce-vlan-map>)[0-9]*(</ce-vlan-map>)\\R?"
+                    + "(<ingress-bwp-group-index>)[0-9]*(</ingress-bwp-group-index>)\\R?"
+                    + "(<tag-push>)\\R?(<push-tag-type>)pushStag(</push-tag-type>)\\R?"
+                    + "(<outer-tag-vlan>)[0-9]*(</outer-tag-vlan>)\\R?(</tag-push>)\\R?"
                     + "((<flow-mapping>)\\R?"
                     + "(<ce-vlan-id>)[0-9]*(</ce-vlan-id>)\\R?"
                     + "(<flow-id>)[0-9]*(</flow-id>)\\R?"
                     + "(</flow-mapping>)\\R?)*"
                     + "(</evc-per-uni-c>)\\R?"
                     + "(<evc-per-uni-n>)\\R?"
-                    + "(<ce-vlan-map>).*(</ce-vlan-map>)\\R?"
-                    + "(<ingress-bwp-group-index>).*(</ingress-bwp-group-index>)\\R?"
+                    + "(<ce-vlan-map>)[0-9\\:\\,]*(</ce-vlan-map>)\\R?"
+                    + "(<ingress-bwp-group-index>)[0-9]*(</ingress-bwp-group-index>)\\R?"
                     + "(<tag-pop).*"
                     + "((<flow-mapping>)\\R?"
                     + "(<ce-vlan-id>)[0-9]*(</ce-vlan-id>)\\R?"
@@ -146,7 +151,7 @@
                     + "(</evc-per-uni-n>)\\R?"
                     + "(</evc-per-uni>)\\R?"
                     + "(</evc>)\\R?"
-                    + "(</uni>).*"
+                    + "(</uni>)\\R?"
                     + "(</mef-services>)\\R?"
                     + "(</config>)\\R?(</edit-config>)\\R?(</rpc>)\\R?(]]>){2}", Pattern.DOTALL);
 
@@ -300,9 +305,10 @@
             + "(<config xmlns:nc=\"urn:ietf:params:xml:ns:netconf:base:1.0\">)\\R?"
             + "(<mef-services xmlns=\"http://www.microsemi.com/microsemi-edge-assure/msea-uni-evc-service\">)\\R?"
             + "(<profiles>)\\R?"
-            + "(<bwp-group nc:operation=\"delete\">)\\R?"
+            + "((<bwp-group nc:operation=\"delete\">)\\R?"
             + "(<group-index>)[0-9]*(</group-index>)\\R?"
-            + "(</bwp-group>)\\R?"
+            + "(<bwp>.*</bwp>)?"
+            + "(</bwp-group>))++\\R?"
             + "(</profiles>)\\R?"
             + "(</mef-services>)\\R?"
             + "(</config>)\\R?(</edit-config>)\\R?(</rpc>)\\R?(]]>){2}", Pattern.DOTALL);
@@ -328,7 +334,7 @@
                     + "(<maintenance-association>)\\R?"
                     + "(<id/>)\\R?"
                     + "(<name>)([a-zA-Z0-9\\-:\\.]){1,48}(</name>)\\R?"
-                    // rpc.append("<ccm-interval>10ms</ccm-interval>\n"); //Have to omit for the moment - YMS problem
+                    + "(<ccm-interval>)[0-9]{1,3}(ms</ccm-interval>)\\R?"
                     + "(<remote-meps/>)\\R?"
                     + "(<component-list/>)\\R?"
                     + "(<maintenance-association-end-point>)\\R?"
@@ -341,7 +347,7 @@
                     + "(<mac-address/>)\\R?"
                     + "(<msea-soam-fm:port-status/>)\\R?"
                     + "(<msea-soam-fm:interface-status/>)\\R?"
-                    // rpc.append("<msea-soam-fm:last-defect-sent/>\n");//Have to omit for the moment - YMS problem
+                    + "(<msea-soam-fm:last-defect-sent/>)\\R?"
                     + "(<msea-soam-fm:rdi-transmit-status/>)\\R?"
                     + "(<loopback/>)\\R?"
                     + "(<remote-mep-database/>)\\R?"
@@ -816,23 +822,9 @@
         return reply;
     }
 
-    @Override
-    public String getConfig(String targetConfiguration) throws NetconfException {
-        return getConfig(TargetConfig.valueOf(targetConfiguration), null);
-    }
 
     @Override
-    public String getConfig(String targetConfiguration, String configurationSchema) throws NetconfException {
-        return getConfig(TargetConfig.valueOf(targetConfiguration), null);
-    }
-
-    @Override
-    public String getConfig(TargetConfig targetConfiguration) throws NetconfException {
-        return getConfig(targetConfiguration, null);
-    }
-
-    @Override
-    public String getConfig(TargetConfig targetConfiguration, String configurationSchema) throws NetconfException {
+    public String getConfig(DatastoreId targetConfiguration, String configurationSchema) throws NetconfException {
         StringBuilder rpc = new StringBuilder(XML_HEADER);
         rpc.append("<rpc ");
         rpc.append(MESSAGE_ID_STRING);
@@ -859,16 +851,11 @@
 
     @Override
     public boolean editConfig(String newConfiguration) throws NetconfException {
-        return editConfig(TargetConfig.RUNNING, null, newConfiguration);
+        return editConfig(DatastoreId.RUNNING, null, newConfiguration);
     }
 
     @Override
-    public boolean editConfig(String targetConfiguration, String mode, String newConfiguration)
-            throws NetconfException {
-        return editConfig(TargetConfig.valueOf(targetConfiguration), mode, newConfiguration);
-    }
-    @Override
-    public boolean editConfig(TargetConfig targetConfiguration, String mode, String newConfiguration)
+    public boolean editConfig(DatastoreId targetConfiguration, String mode, String newConfiguration)
             throws NetconfException {
         newConfiguration = newConfiguration.trim();
         StringBuilder rpc = new StringBuilder(XML_HEADER);
@@ -905,23 +892,6 @@
     }
 
     @Override
-    public boolean copyConfig(TargetConfig targetConfiguration, String newConfiguration) throws NetconfException {
-        // TODO Auto-generated method stub
-        return false;
-    }
-
-    @Override
-    public boolean deleteConfig(String targetConfiguration) throws NetconfException {
-        return deleteConfig(TargetConfig.valueOf(targetConfiguration));
-    }
-
-    @Override
-    public boolean deleteConfig(TargetConfig targetConfiguration) throws NetconfException {
-        // TODO Auto-generated method stub
-        return false;
-    }
-
-    @Override
     public void startSubscription() throws NetconfException {
         // TODO Auto-generated method stub
 
@@ -940,18 +910,6 @@
     }
 
     @Override
-    public boolean lock(String configType) throws NetconfException {
-        // TODO Auto-generated method stub
-        return false;
-    }
-
-    @Override
-    public boolean unlock(String configType) throws NetconfException {
-        // TODO Auto-generated method stub
-        return false;
-    }
-
-    @Override
     public boolean lock() throws NetconfException {
         // TODO Auto-generated method stub
         return false;
diff --git a/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/MseaCfmManagerTest.java b/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/MseaCfmManagerTest.java
similarity index 69%
rename from drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/MseaCfmManagerTest.java
rename to drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/MseaCfmManagerTest.java
index 7ec6288..e3a81bc 100644
--- a/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/MseaCfmManagerTest.java
+++ b/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/MseaCfmManagerTest.java
@@ -30,20 +30,18 @@
 import org.onosproject.netconf.NetconfDeviceInfo;
 import org.onosproject.netconf.NetconfException;
 import org.onosproject.netconf.NetconfSession;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.cfm.rev20160229.MseaCfm;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.cfm.rev20160229.mseacfm.DefaultMefCfm;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.cfm.rev20160229.mseacfm.MefCfm;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.cfm.rev20160229.mseacfm.mefcfm.DefaultMaintenanceDomain;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.cfm.rev20160229.mseacfm.mefcfm.MaintenanceDomain;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.cfm.rev20160229.mseacfm.mefcfm.maintenancedomain.mdnameandtypecombo.DefaultNameCharacterString;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.cfm.rev20160229.mseacfm.mefcfm.maintenancedomain.mdnameandtypecombo.NameCharacterString;
-import org.onosproject.yang.gen.v1.http.www.microsemi.com.microsemi.edge.assure.msea.types.rev20160229.mseatypes.Identifier45;
-import org.onosproject.yms.ymsm.YmsService;
+import org.onosproject.yang.gen.v1.mseacfm.rev20160229.MseaCfm;
+import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.DefaultMefCfm;
+import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.MefCfm;
+import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.DefaultMaintenanceDomain;
+import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.MaintenanceDomain;
+import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.mdnameandtypecombo.DefaultNameCharacterString;
+import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.mdnameandtypecombo.NameCharacterString;
+import org.onosproject.yang.gen.v1.mseatypes.rev20160229.mseatypes.Identifier45;
 
 public class MseaCfmManagerTest {
 
     MseaCfmManager mseaCfmService;
-    YmsService ymsService;
     NetconfSession session;
 
     @Before
@@ -78,14 +76,15 @@
      */
     @Test
     public void testSetMseaCfm() throws NetconfException {
-        NameCharacterString mdName = DefaultNameCharacterString.builder().name(Identifier45.fromString("md-1")).build();
+        NameCharacterString mdName = new DefaultNameCharacterString();
+        mdName.name(Identifier45.fromString("md-1"));
 
-        MaintenanceDomain yangMd = DefaultMaintenanceDomain.builder()
-                .id((short) 1)
-                .mdNameAndTypeCombo(mdName)
-                .build();
+        MaintenanceDomain yangMd = new DefaultMaintenanceDomain();
+        yangMd.id((short) 1);
+        yangMd.mdNameAndTypeCombo(mdName);
 
-        MefCfm mefCfm = DefaultMefCfm.builder().addToMaintenanceDomain(yangMd).build();
+        MefCfm mefCfm = new DefaultMefCfm();
+        mefCfm.addToMaintenanceDomain(yangMd);
       //FIXME implement this
 //        MseaCfmOpParam mseaCfmOpParam = (MseaCfmOpParam) MseaCfmOpParam.builder().mefCfm(mefCfm).build();
 //        mseaCfmService.setMseaCfm(mseaCfmOpParam, session, NcDsType.running);
diff --git a/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/MseaSaFilteringManagerTest.java b/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/MseaSaFilteringManagerTest.java
new file mode 100644
index 0000000..acb6ae6
--- /dev/null
+++ b/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/MseaSaFilteringManagerTest.java
@@ -0,0 +1,148 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.drivers.microsemi.yang;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+
+import java.io.UncheckedIOException;
+import java.util.List;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.onlab.packet.Ip4Address;
+import org.onosproject.drivers.microsemi.yang.impl.MseaSaFilteringManager;
+import org.onosproject.netconf.DatastoreId;
+import org.onosproject.netconf.NetconfDeviceInfo;
+import org.onosproject.netconf.NetconfException;
+import org.onosproject.netconf.NetconfSession;
+import org.onosproject.yang.gen.v1.mseasafiltering.rev20160412.MseaSaFiltering;
+import org.onosproject.yang.gen.v1.mseasafiltering.rev20160412.MseaSaFilteringOpParam;
+import org.onosproject.yang.gen.v1.mseasafiltering.rev20160412.mseasafiltering.DefaultSourceIpaddressFiltering;
+import org.onosproject.yang.gen.v1.mseasafiltering.rev20160412.mseasafiltering.SourceIpaddressFiltering;
+import org.onosproject.yang.gen.v1.mseasafiltering.rev20160412.mseasafiltering.sourceipaddressfiltering.DefaultInterfaceEth0;
+import org.onosproject.yang.gen.v1.mseasafiltering.rev20160412.mseasafiltering.sourceipaddressfiltering.InterfaceEth0;
+import org.onosproject.yang.gen.v1.mseasafiltering.rev20160412.mseasafiltering.sourceipaddressfiltering.interfaceeth0.DefaultSourceAddressRange;
+import org.onosproject.yang.gen.v1.mseasafiltering.rev20160412.mseasafiltering.sourceipaddressfiltering.interfaceeth0.SourceAddressRange;
+
+public class MseaSaFilteringManagerTest {
+
+    MseaSaFilteringManager mseaSaSvc;
+    NetconfSession session;
+
+    @Before
+    public void setUp() throws Exception {
+        try {
+            mseaSaSvc = new MockMseaSaFilteringManager();
+            mseaSaSvc.activate();
+        } catch (UncheckedIOException e) {
+            fail(e.getMessage());
+        }
+        NetconfDeviceInfo deviceInfo = new NetconfDeviceInfo("netconf", "netconf", Ip4Address.valueOf("1.2.3.4"), 830);
+        session = new MockNetconfSessionEa1000(deviceInfo);
+    }
+
+    @After
+    public void tearDown() throws Exception {
+    }
+
+    @Test
+    public void testGetMseaSaFilteringMseaSaFilteringOpParamNetconfSession() throws NetconfException {
+        SourceIpaddressFiltering sip = new DefaultSourceIpaddressFiltering();
+
+        MseaSaFilteringOpParam op = new MseaSaFilteringOpParam();
+        op.sourceIpaddressFiltering(sip);
+
+        MseaSaFiltering result = mseaSaSvc.getMseaSaFiltering(op, session);
+
+        //Results come from MockNetconfSession SAMPLE_MSEASAFILTERING_REPLY_INIT
+        assertNotNull(result.sourceIpaddressFiltering().interfaceEth0().sourceAddressRange());
+        List<SourceAddressRange> ranges = result.sourceIpaddressFiltering().interfaceEth0().sourceAddressRange();
+        assertEquals(2, ranges.size());
+
+        for (SourceAddressRange sa:ranges) {
+            if (sa.rangeId() == 1) {
+                assertEquals("10.10.10.10/16", sa.ipv4AddressPrefix());
+
+            } else if (sa.rangeId() == 2) {
+                assertEquals("20.30.40.50/18", sa.ipv4AddressPrefix());
+            }
+        }
+    }
+
+    @Test
+    public void testSetMseaSaFilteringMseaSaFilteringOpParamNetconfSessionNcDsType() {
+
+        MseaSaFilteringOpParam mseaSaFilteringConfig =
+                createConfigForEdit("192.168.60.10/27", (short) 3, "Filter3");
+
+        //Calling on the edit-config just makes the change and hopefully does not throw a Netconf Exception
+        try {
+            mseaSaSvc.setMseaSaFiltering(mseaSaFilteringConfig, session, DatastoreId.RUNNING);
+        } catch (NetconfException e) {
+            e.printStackTrace();
+            fail("NETCONF Exception: " + e.getMessage());
+        }
+    }
+
+    @Test
+    public void testDeleteMseaSaFilteringMseaSaFilteringOpParamNetconfSessionNcDsType() {
+
+        MseaSaFilteringOpParam mseaSaFilteringConfig =
+                createConfigForEdit("192.168.60.10/27", (short) 3, "Filter3");
+
+        SourceAddressRange sar2 = new DefaultSourceAddressRange();
+        sar2.ipv4AddressPrefix("10.205.86.10/27");
+        sar2.rangeId((short) 4);
+        sar2.name("Filter4");
+
+        mseaSaFilteringConfig.sourceIpaddressFiltering().interfaceEth0()
+                .addToSourceAddressRange(sar2);
+
+        //Calling on the edit-config just makes the change and hopefully does not throw a Netconf Exception
+        try {
+            mseaSaSvc.deleteMseaSaFilteringRange(mseaSaFilteringConfig, session, DatastoreId.RUNNING);
+        } catch (NetconfException e) {
+            e.printStackTrace();
+            fail("NETCONF Exception: " + e.getMessage());
+        }
+    }
+
+    /**
+     * This is also called from the test case EA1000FlowRuleProgrammableTest().
+     * In the ea1000driver project
+     * @return
+     */
+    public static MseaSaFilteringOpParam createConfigForEdit(String ipAddrPrefix, short rangeId, String rangeName) {
+        SourceAddressRange sar = new DefaultSourceAddressRange();
+        sar.ipv4AddressPrefix(ipAddrPrefix);
+        sar.rangeId(rangeId);
+        sar.name(rangeName);
+
+        InterfaceEth0 eth0 = new DefaultInterfaceEth0();
+        eth0.addToSourceAddressRange(sar);
+
+        SourceIpaddressFiltering sip = new DefaultSourceIpaddressFiltering();
+        sip.interfaceEth0(eth0);
+
+        MseaSaFilteringOpParam op = new MseaSaFilteringOpParam();
+        op.sourceIpaddressFiltering(sip);
+
+        return op;
+    }
+}
diff --git a/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/MseaUniEvcServiceManagerTest.java b/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/MseaUniEvcServiceManagerTest.java
new file mode 100644
index 0000000..8d8b2bd
--- /dev/null
+++ b/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/MseaUniEvcServiceManagerTest.java
@@ -0,0 +1,496 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.drivers.microsemi.yang;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+
+import java.io.UncheckedIOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.onlab.packet.Ip4Address;
+import org.onosproject.drivers.microsemi.yang.impl.MseaUniEvcServiceManager;
+import org.onosproject.drivers.microsemi.yang.utils.CeVlanMapUtils;
+import org.onosproject.netconf.DatastoreId;
+import org.onosproject.netconf.NetconfDeviceInfo;
+import org.onosproject.netconf.NetconfException;
+import org.onosproject.netconf.NetconfSession;
+import org.onosproject.yang.gen.v1.mseatypes.rev20160229.mseatypes.Identifier45;
+import org.onosproject.yang.gen.v1.mseatypes.rev20160229.mseatypes.ServiceListType;
+import org.onosproject.yang.gen.v1.mseatypes.rev20160229.mseatypes.VlanIdType;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.MseaUniEvcService;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.MseaUniEvcServiceOpParam;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.DefaultMefServices;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.MefServices;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.evcperuniextensionattributes.EvcPerUniServiceTypeEnum;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.evcperuniextensionattributes.tagmanipulation.TagPush;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.evcperuniextensionattributes.tagmanipulation.tagpush.tagpush.PushTagTypeEnum;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.evcperuniextensionattributes.tagmanipulation.DefaultTagPush;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.Profiles;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.DefaultProfiles;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.DefaultUni;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.Uni;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.profiles.BwpGroup;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.profiles.Cos;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.profiles.DefaultBwpGroup;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.profiles.DefaultCos;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.profiles.bwpgroup.Bwp;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.profiles.bwpgroup.DefaultBwp;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.profiles.bwpgroup.bwp.ColorModeEnum;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.uni.DefaultEvc;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.uni.Evc;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.uni.UniSideInterfaceAssignmentEnum;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.uni.evc.DefaultEvcPerUni;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.uni.evc.EvcPerUni;
+import org.onosproject.drivers.microsemi.yang.custom.CustomEvcPerUnic;
+import org.onosproject.drivers.microsemi.yang.custom.CustomEvcPerUnin;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.uni.evc.evcperuni.EvcPerUnic;
+import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice.mefservices.uni.evc.evcperuni.EvcPerUnin;
+
+public class MseaUniEvcServiceManagerTest {
+
+    MseaUniEvcServiceManager mseaUniEvcServiceSvc;
+    NetconfSession session;
+
+    @Before
+    public void setUp() throws Exception {
+        try {
+            mseaUniEvcServiceSvc = new MockMseaUniEvcServiceManager();
+            mseaUniEvcServiceSvc.activate();
+        } catch (UncheckedIOException e) {
+            fail(e.getMessage());
+        }
+        NetconfDeviceInfo deviceInfo = new NetconfDeviceInfo("netconf", "netconf", Ip4Address.valueOf("1.2.3.4"), 830);
+        session = new MockNetconfSessionEa1000(deviceInfo);
+    }
+
+    @After
+    public void tearDown() throws Exception {
+    }
+
+    @Test
+    public void testGetMseaUniEvcServiceMseaUniEvcServiceOpParamNetconfSession() {
+        MefServices mefServices = new DefaultMefServices();
+        mefServices.uni(new DefaultUni());
+
+        MseaUniEvcServiceOpParam evcUni = new MseaUniEvcServiceOpParam();
+        evcUni.mefServices(mefServices);
+
+        MseaUniEvcService result = null;
+        try {
+            result =
+                    mseaUniEvcServiceSvc.getConfigMseaUniEvcService(
+                            evcUni, session, DatastoreId.RUNNING);
+        } catch (NetconfException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+            fail("Error: " + e.getMessage());
+        }
+
+        assertNotNull(result);
+    }
+
+    @Test
+    public void testSetMseaUniEvcServiceMseaUniEvcServiceOpParamEvcs() {
+      TagPush tp1 = new DefaultTagPush();
+      org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.mseaunievcservice
+              .evcperuniextensionattributes.tagmanipulation
+          .tagpush.TagPush tpInner1 =
+              new org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317
+                      .mseaunievcservice.evcperuniextensionattributes
+                  .tagmanipulation.tagpush.DefaultTagPush();
+      tpInner1.outerTagVlan(new VlanIdType(3));
+      tpInner1.pushTagType(PushTagTypeEnum.PUSHSTAG);
+      tp1.tagPush(tpInner1);
+
+      EvcPerUnin epun1 = new CustomEvcPerUnin();
+      epun1.evcPerUniServiceType(EvcPerUniServiceTypeEnum.EVPL);
+      epun1.ceVlanMap(ServiceListType.fromString("10"));
+      epun1.ingressBwpGroupIndex("0");
+      epun1.tagManipulation(tp1);
+
+      EvcPerUnic epuc1 = new CustomEvcPerUnic();
+      epuc1.ceVlanMap(new ServiceListType("11"));
+      epuc1.ingressBwpGroupIndex("0");
+
+      EvcPerUni epu1 = new DefaultEvcPerUni();
+      epu1.evcPerUnic(epuc1);
+      epu1.evcPerUnin(epun1);
+
+      List<Evc> evcList = new ArrayList<Evc>();
+      Evc evc1 = new DefaultEvc();
+      evc1.evcIndex(1);
+      evc1.name(new Identifier45("evc-1"));
+      evc1.evcPerUni(epu1);
+
+      evcList.add(evc1);
+
+
+      EvcPerUnin epun2 = new CustomEvcPerUnin();
+      epun2.ceVlanMap(ServiceListType.fromString("13"));
+      epun2.ingressBwpGroupIndex("0");
+
+      EvcPerUnic epuc2 = new CustomEvcPerUnic();
+      epuc2.ceVlanMap(new ServiceListType("12"));
+      epuc2.ingressBwpGroupIndex("0");
+
+      EvcPerUni epu2 = new DefaultEvcPerUni();
+      epu2.evcPerUnic(epuc2);
+      epu2.evcPerUnin(epun2);
+
+      Evc evc2 = new DefaultEvc();
+      evc2.evcIndex(2);
+      evc2.name(new Identifier45("evc-2"));
+      evc2.evcPerUni(epu2);
+
+      evcList.add(evc2);
+
+      Uni uni = new DefaultUni();
+      uni.name(new Identifier45("testUni"));
+      uni.evc(evcList);
+
+      MefServices mefServices = new DefaultMefServices();
+      mefServices.uni(uni);
+
+      MseaUniEvcServiceOpParam evcUni = new MseaUniEvcServiceOpParam();
+      evcUni.mefServices(mefServices);
+      try {
+          mseaUniEvcServiceSvc.setMseaUniEvcService(evcUni, session, DatastoreId.RUNNING);
+      } catch (NetconfException e) {
+          // TODO Auto-generated catch block
+          e.printStackTrace();
+          fail("Error: " + e.getMessage());
+      }
+    }
+
+    @Test
+    public void testSetMseaUniEvcServiceMseaUniEvcServiceOpParamProfiles() {
+      List<Cos> cosList = new ArrayList<Cos>();
+      Cos cos0 = new DefaultCos();
+      cos0.cosIndex(0);
+      cos0.name("cos0");
+      cosList.add(cos0);
+
+      Cos cos1 = new DefaultCos();
+      cos1.cosIndex(1);
+      cos1.name("cos1");
+      cosList.add(cos1);
+
+      List<BwpGroup> bwpGroupList = new ArrayList<BwpGroup>();
+      BwpGroup bwpGrp = new DefaultBwpGroup();
+      bwpGrp.groupIndex((short) 0);
+      bwpGroupList.add(bwpGrp);
+
+      List<Bwp> bwpList = new ArrayList<Bwp>();
+      Bwp bwp1 = new DefaultBwp();
+      bwp1.cosIndex(0);
+      bwp1.colorMode(ColorModeEnum.COLORAWARE);
+      bwpList.add(bwp1);
+
+      Bwp bwp2 = new DefaultBwp();
+      bwp2.cosIndex(1);
+      bwp2.colorMode(ColorModeEnum.COLORBLIND);
+      bwpList.add(bwp2);
+
+      BwpGroup bwpGrp1 = new DefaultBwpGroup();
+      bwpGrp1.groupIndex((short) 1);
+      bwpGrp1.bwp(bwpList);
+      bwpGroupList.add(bwpGrp1);
+
+      Profiles profiles = new DefaultProfiles();
+      profiles.bwpGroup(bwpGroupList);
+
+      MefServices mefServices = new DefaultMefServices();
+      mefServices.profiles(profiles);
+
+      MseaUniEvcServiceOpParam evcUni = new MseaUniEvcServiceOpParam();
+      evcUni.mefServices(mefServices);
+      try {
+          mseaUniEvcServiceSvc.setMseaUniEvcService(evcUni, session, DatastoreId.RUNNING);
+      } catch (NetconfException e) {
+          // TODO Auto-generated catch block
+          e.printStackTrace();
+          fail("Error: " + e.getMessage());
+      }
+    }
+
+    @Test
+    public void testDeleteMseaUniEvcServiceMseaUniEvcServiceOpParamProfiles() {
+        List<Cos> cosList = new ArrayList<Cos>();
+        Cos cos0 = new DefaultCos();
+        cos0.cosIndex(0);
+        cos0.name("cos0");
+        cosList.add(cos0);
+
+        Cos cos1 = new DefaultCos();
+        cos1.cosIndex(1);
+        cos1.name("cos1");
+        cosList.add(cos1);
+
+        List<BwpGroup> bwpGroupList = new ArrayList<BwpGroup>();
+        BwpGroup bwpGrp = new DefaultBwpGroup();
+        bwpGrp.groupIndex((short) 0);
+        bwpGroupList.add(bwpGrp);
+
+        List<Bwp> bwpList = new ArrayList<Bwp>();
+        Bwp bwp1 = new DefaultBwp();
+        bwp1.cosIndex(0);
+        bwp1.colorMode(ColorModeEnum.COLORAWARE);
+        bwpList.add(bwp1);
+
+        Bwp bwp2 = new DefaultBwp();
+        bwp2.cosIndex(1);
+        bwp2.colorMode(ColorModeEnum.COLORBLIND);
+        bwpList.add(bwp2);
+
+        BwpGroup bwpGrp1 = new DefaultBwpGroup();
+        bwpGrp1.groupIndex((short) 1);
+        bwpGrp1.bwp(bwpList);
+        bwpGroupList.add(bwpGrp1);
+
+        Profiles profiles = new DefaultProfiles();
+        profiles.bwpGroup(bwpGroupList);
+
+        MefServices mefServices = new DefaultMefServices();
+        mefServices.profiles(profiles);
+
+        MseaUniEvcServiceOpParam evcUni = new MseaUniEvcServiceOpParam();
+        evcUni.mefServices(mefServices);
+        try {
+            mseaUniEvcServiceSvc.deleteMseaUniEvcService(evcUni, session, DatastoreId.RUNNING);
+        } catch (NetconfException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+            fail("Error: " + e.getMessage());
+        }
+    }
+
+    @Test
+    public void testGetMseaUniEvcCeVlanMaps() {
+
+        try {
+            MseaUniEvcService ceVlanMapsResult7 =
+                    mseaUniEvcServiceSvc.getmseaUniEvcCeVlanMaps(session, DatastoreId.RUNNING);
+
+            assertNotNull(ceVlanMapsResult7.mefServices().uni().evc());
+
+            List<Evc> evcList = ceVlanMapsResult7.mefServices().uni().evc();
+            assertEquals(3, evcList.size());
+            for (Evc evc : evcList) {
+               assertNotNull(evc.evcPerUni().evcPerUnic().ceVlanMap());
+               assertNotNull(evc.evcPerUni().evcPerUnin().ceVlanMap());
+
+               if (evc.evcIndex() == 7) {
+                   assertEquals("700,710,720", evc.evcPerUni().evcPerUnic().ceVlanMap().string());
+                   assertEquals("701:703", evc.evcPerUni().evcPerUnin().ceVlanMap().string());
+               }
+            }
+
+        } catch (NetconfException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+            fail("Error: " + e.getMessage());
+        }
+    }
+
+    @Test
+    public void testChangeEvcCeVlanMap() {
+        EvcPerUnin epun1 = new CustomEvcPerUnin();
+        epun1.evcPerUniServiceType(EvcPerUniServiceTypeEnum.EVPL);
+        epun1.ceVlanMap(ServiceListType.fromString("10"));
+        epun1.ingressBwpGroupIndex("0");
+
+        EvcPerUnic epuc1 = new CustomEvcPerUnic();
+        epuc1.ceVlanMap(new ServiceListType("11"));
+        epuc1.ingressBwpGroupIndex("0");
+
+        EvcPerUni epu = new DefaultEvcPerUni();
+        epu.evcPerUnic(epuc1);
+        epu.evcPerUnin(epun1);
+
+        Evc evc = new DefaultEvc();
+        evc.evcPerUni(epu);
+
+        assertEquals("10", evc.evcPerUni().evcPerUnin().ceVlanMap().string());
+        assertEquals("11", evc.evcPerUni().evcPerUnic().ceVlanMap().string());
+
+        assertEquals("11", evc.evcPerUni().evcPerUnic().ceVlanMap().string());
+    }
+
+    @Test
+    public void testChangeEvcCeVlanMapNoValues() {
+        EvcPerUnin epun1 = new CustomEvcPerUnin();
+        epun1.evcPerUniServiceType(EvcPerUniServiceTypeEnum.EVPL);
+        epun1.ingressBwpGroupIndex("0");
+
+        EvcPerUnic epuc1 = new CustomEvcPerUnic();
+        epuc1.ingressBwpGroupIndex("0");
+
+        EvcPerUni epu = new DefaultEvcPerUni();
+        epu.evcPerUnic(epuc1);
+        epu.evcPerUnin(epun1);
+
+        Evc evc = new DefaultEvc();
+        evc.evcIndex(1);
+        evc.evcPerUni(epu);
+
+        assertEquals("0", evc.evcPerUni().evcPerUnin().ceVlanMap().string());
+        assertEquals("0", evc.evcPerUni().evcPerUnic().ceVlanMap().string());
+    }
+
+    @Test
+    public void testRemoveEvcUniFlowEntries() {
+
+        Map<Integer, String> ceVlanUpdates = new TreeMap<>();
+        ceVlanUpdates.put((1 << 2), "");
+        ceVlanUpdates.put((1 << 2) + 1, "");
+        ceVlanUpdates.put((2 << 2), "");
+        ceVlanUpdates.put((2 << 2) + 1, "");
+
+        ceVlanUpdates.put((7 << 2), "700,710,720");
+        ceVlanUpdates.put((7 << 2) + 1, "701:703");
+        ceVlanUpdates.put((8 << 2), "800,810,820");
+        ceVlanUpdates.put((8 << 2) + 1, "801,802,803");
+
+        Map<Integer, List<Short>> flowVlanIdMap = new HashMap<>();
+        //These should get ignored because whole EVC is being deleted
+        flowVlanIdMap.put(1 << 2, new ArrayList<Short>());
+        flowVlanIdMap.get(1 << 2).add((short) 11);
+
+        flowVlanIdMap.put((1 << 2) + 1, new ArrayList<Short>());
+        flowVlanIdMap.get((1 << 2) + 1).add((short) 12L);
+
+        //These are the EVCs being removed
+        flowVlanIdMap.put(7 << 2, new ArrayList<Short>());
+        flowVlanIdMap.get(7 << 2).add((short) 730L);
+        flowVlanIdMap.get(7 << 2).add((short) 740L);
+
+        flowVlanIdMap.put((7 << 2) + 1, new ArrayList<Short>());
+        flowVlanIdMap.get((7 << 2) + 1).add((short) 705L);
+        flowVlanIdMap.get((7 << 2) + 1).add((short) 706L);
+
+        flowVlanIdMap.put(8 << 2, new ArrayList<Short>());
+        flowVlanIdMap.get(8 << 2).add((short) 830L);
+        flowVlanIdMap.get(8 << 2).add((short) 840L);
+
+        flowVlanIdMap.put((8 << 2) + 1, new ArrayList<Short>());
+        flowVlanIdMap.get((8 << 2) + 1).add((short) 805L);
+        flowVlanIdMap.get((8 << 2) + 1).add((short) 806L);
+
+        try {
+            mseaUniEvcServiceSvc.removeEvcUniFlowEntries(
+                    ceVlanUpdates, flowVlanIdMap, session, DatastoreId.RUNNING,
+                    UniSideInterfaceAssignmentEnum.UNI_C_ON_OPTICS);
+        } catch (NetconfException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+            fail("Error: " + e.getMessage());
+        }
+    }
+
+    @Test
+    public void testGetVlanSet1() {
+        Short[] vlanIds = CeVlanMapUtils.getVlanSet("10");
+        assertEquals(1, vlanIds.length);
+    }
+
+    @Test
+    public void testGetVlanSet2() {
+        Short[] vlanIds = CeVlanMapUtils.getVlanSet("10:20");
+        assertEquals(11, vlanIds.length);
+        assertEquals(10, vlanIds[0].shortValue());
+        assertEquals(20, vlanIds[10].shortValue());
+    }
+
+    @Test
+    public void testGetVlanSet3() {
+        Short[] vlanIds = CeVlanMapUtils.getVlanSet("10:20,30:40");
+        assertEquals(22, vlanIds.length);
+        assertEquals(10, vlanIds[0].shortValue());
+        assertEquals(40, vlanIds[21].shortValue());
+    }
+
+    @Test
+    public void testGetVlanSet4() {
+        Short[] vlanIds = CeVlanMapUtils.getVlanSet("10,20,30");
+        assertEquals(3, vlanIds.length);
+        assertEquals(10, vlanIds[0].shortValue());
+        assertEquals(30, vlanIds[2].shortValue());
+    }
+
+    @Test
+    public void testVlanListAsString() {
+        assertEquals("20:22", CeVlanMapUtils.vlanListAsString(new Short[]{20, 21, 22}));
+
+        assertEquals("20:22,24:25",
+                CeVlanMapUtils.vlanListAsString(new Short[]{20, 21, 22, 24, 25}));
+
+        assertEquals("30,33,36:40",
+                CeVlanMapUtils.vlanListAsString(new Short[]{30, 33, 36, 37, 38, 39, 40}));
+
+        assertEquals("20", CeVlanMapUtils.vlanListAsString(new Short[]{20}));
+
+        assertEquals("20,22,24,26,28",
+                CeVlanMapUtils.vlanListAsString(new Short[]{20, 22, 24, 26, 28}));
+    }
+
+    @Test
+    public void testAddtoCeVlanMap() {
+        assertEquals("20,22:24,26,28",
+                CeVlanMapUtils.addtoCeVlanMap("20,22,24,26,28", (short) 23));
+
+        assertEquals("20:26,28",
+                CeVlanMapUtils.addtoCeVlanMap("20,21,22,24,25,26,28", (short) 23));
+
+        assertEquals("20,23",
+                CeVlanMapUtils.addtoCeVlanMap("20", (short) 23));
+
+        assertEquals("20,22:23",
+                CeVlanMapUtils.addtoCeVlanMap("20,22", (short) 23));
+    }
+
+    @Test
+    public void testCombineVlanSets() {
+        assertEquals("10:11,13:14", CeVlanMapUtils.combineVlanSets("10:11", "13:14"));
+
+        assertEquals("10:14", CeVlanMapUtils.combineVlanSets("10:11", "12:14"));
+
+        assertEquals("10:11,14", CeVlanMapUtils.combineVlanSets("10:11", "14"));
+
+        assertEquals("10:12", CeVlanMapUtils.combineVlanSets("10:11", "11:12"));
+    }
+
+    @Test
+    public void testRemoveZeroIfPossible() {
+        assertEquals("0", CeVlanMapUtils.removeZeroIfPossible(""));
+
+        assertEquals("0", CeVlanMapUtils.removeZeroIfPossible("0"));
+
+        assertEquals("1,3", CeVlanMapUtils.removeZeroIfPossible("0:1,3"));
+
+        assertEquals("1:2", CeVlanMapUtils.removeZeroIfPossible("0:2"));
+
+        assertEquals("10:12", CeVlanMapUtils.removeZeroIfPossible("0,10:12"));
+    }
+}
diff --git a/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/package-info.java b/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/package-info.java
similarity index 100%
rename from drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/package-info.java
rename to drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/package-info.java
diff --git a/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/utils/IetfYangTypesUtilsTest.java b/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/utils/IetfYangTypesUtilsTest.java
similarity index 94%
rename from drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/utils/IetfYangTypesUtilsTest.java
rename to drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/utils/IetfYangTypesUtilsTest.java
index 4e62beb..da0954f 100644
--- a/drivers/microsemi/ea1000yang/src/test/java/org/onosproject/drivers/microsemi/yang/utils/IetfYangTypesUtilsTest.java
+++ b/drivers/microsemi/src/test/java/org/onosproject/drivers/microsemi/yang/utils/IetfYangTypesUtilsTest.java
@@ -26,7 +26,7 @@
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-import org.onosproject.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev20130715.ietfyangtypes.DateAndTime;
+import org.onosproject.yang.gen.v1.ietfyangtypes.rev20130715.ietfyangtypes.DateAndTime;
 
 public class IetfYangTypesUtilsTest {
 
diff --git a/drivers/microsemi/src/test/java/org/onosproject/yang/MockYangRuntimeManager.java b/drivers/microsemi/src/test/java/org/onosproject/yang/MockYangRuntimeManager.java
new file mode 100644
index 0000000..e2f4389
--- /dev/null
+++ b/drivers/microsemi/src/test/java/org/onosproject/yang/MockYangRuntimeManager.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.yang;
+
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.onosproject.core.CoreService;
+import org.onosproject.drivers.netconf.MockCoreService;
+import org.onosproject.yang.model.ModelConverter;
+import org.onosproject.yang.model.ModelObjectData;
+import org.onosproject.yang.model.NodeKey;
+import org.onosproject.yang.model.ResourceData;
+import org.onosproject.yang.model.ResourceId;
+import org.onosproject.yang.model.SchemaContext;
+import org.onosproject.yang.model.SchemaContextProvider;
+import org.onosproject.yang.model.YangModel;
+import org.onosproject.yang.runtime.CompositeData;
+import org.onosproject.yang.runtime.CompositeStream;
+import org.onosproject.yang.runtime.ModelRegistrationParam;
+import org.onosproject.yang.runtime.RuntimeContext;
+import org.onosproject.yang.runtime.YangModelRegistry;
+import org.onosproject.yang.runtime.YangRuntimeService;
+import org.onosproject.yang.runtime.YangSerializer;
+import org.onosproject.yang.runtime.YangSerializerRegistry;
+import org.onosproject.yang.runtime.impl.DefaultModelConverter;
+import org.onosproject.yang.runtime.impl.DefaultYangModelRegistry;
+import org.onosproject.yang.runtime.impl.DefaultYangRuntimeHandler;
+import org.onosproject.yang.runtime.impl.DefaultYangSerializerRegistry;
+import org.onosproject.yang.serializers.json.JsonSerializer;
+import org.onosproject.yang.serializers.xml.XmlSerializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Set;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+public class MockYangRuntimeManager implements YangModelRegistry,
+            YangSerializerRegistry, YangRuntimeService, ModelConverter,
+            SchemaContextProvider {
+
+        private static final String APP_ID = "org.onosproject.yang";
+        private final Logger log = LoggerFactory.getLogger(getClass());
+
+        @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+        protected CoreService coreService;
+
+        private DefaultYangModelRegistry modelRegistry;
+        private DefaultYangSerializerRegistry serializerRegistry;
+        private DefaultYangRuntimeHandler runtimeService;
+        private DefaultModelConverter modelConverter;
+
+        public void setModelRegistry(DefaultYangModelRegistry yReg) {
+            this.modelRegistry = yReg;
+        }
+
+        @Activate
+        public void activate() {
+            coreService = new MockCoreService();
+            coreService.registerApplication(APP_ID);
+            serializerRegistry = new DefaultYangSerializerRegistry();
+            runtimeService =
+                    new DefaultYangRuntimeHandler(serializerRegistry, modelRegistry);
+            serializerRegistry.registerSerializer(new JsonSerializer());
+            serializerRegistry.registerSerializer(new XmlSerializer());
+            modelConverter = new DefaultModelConverter(modelRegistry);
+            log.info("Started");
+        }
+
+        @Deactivate
+        public void deactivate() {
+            log.info("Stopped");
+        }
+
+
+        @Override
+        public void registerModel(ModelRegistrationParam p) {
+            modelRegistry.registerModel(p);
+        }
+
+        @Override
+        public void unregisterModel(ModelRegistrationParam p) {
+            modelRegistry.unregisterModel(p);
+        }
+
+        @Override
+        public Set<YangModel> getModels() {
+            return modelRegistry.getModels();
+        }
+
+        @Override
+        public void registerSerializer(YangSerializer ys) {
+            serializerRegistry.registerSerializer(ys);
+        }
+
+        @Override
+        public void unregisterSerializer(YangSerializer ys) {
+            serializerRegistry.unregisterSerializer(ys);
+        }
+
+        @Override
+        public Set<YangSerializer> getSerializers() {
+            return serializerRegistry.getSerializers();
+        }
+
+        @Override
+        public CompositeData decode(CompositeStream cs, RuntimeContext rc) {
+            return runtimeService.decode(cs, rc);
+        }
+
+        @Override
+        public CompositeStream encode(CompositeData cd, RuntimeContext rc) {
+            return runtimeService.encode(cd, rc);
+        }
+
+        @Override
+        public ModelObjectData createModel(ResourceData resourceData) {
+            return modelConverter.createModel(resourceData);
+        }
+
+        @Override
+        public ResourceData createDataNode(ModelObjectData modelObjectData) {
+            return modelConverter.createDataNode(modelObjectData);
+        }
+
+        @Override
+        public SchemaContext getSchemaContext(ResourceId resourceId) {
+            checkNotNull(resourceId, " resource id can't be null.");
+            NodeKey key = resourceId.nodeKeys().get(0);
+            if (resourceId.nodeKeys().size() == 1 &&
+                    "/".equals(key.schemaId().name())) {
+                return modelRegistry;
+            }
+            log.info("To be implemented.");
+            return null;
+        }
+}
diff --git a/drivers/microsemi/src/test/java/org/onosproject/yang/serializers/xml/MockYangSchemaNodeProvider.java b/drivers/microsemi/src/test/java/org/onosproject/yang/serializers/xml/MockYangSchemaNodeProvider.java
new file mode 100644
index 0000000..dab269d
--- /dev/null
+++ b/drivers/microsemi/src/test/java/org/onosproject/yang/serializers/xml/MockYangSchemaNodeProvider.java
@@ -0,0 +1,138 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.yang.serializers.xml;
+
+
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangSchemaNode;
+import org.onosproject.yang.model.YangModel;
+import org.onosproject.yang.runtime.AppModuleInfo;
+import org.onosproject.yang.runtime.DefaultAppModuleInfo;
+import org.onosproject.yang.runtime.DefaultModelRegistrationParam;
+import org.onosproject.yang.runtime.ModelRegistrationParam;
+import org.onosproject.yang.runtime.YangModelRegistry;
+import org.onosproject.yang.runtime.impl.DefaultYangModelRegistry;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.onosproject.yang.compiler.datamodel.utils.DataModelUtils;
+import org.onosproject.yang.compiler.utils.UtilConstants;
+import org.onosproject.yang.compiler.utils.io.impl.YangIoUtils;
+import org.onosproject.yang.runtime.helperutils.YangApacheUtils;
+import org.onosproject.yang.runtime.RuntimeHelper;
+
+public class MockYangSchemaNodeProvider {
+
+    private static final String FS = File.separator;
+    private static final String PATH = System.getProperty("user.dir") +
+            FS + "buck-out" + FS + "gen" +
+            FS + "models" + FS + "microsemi" + FS + "onos-models-microsemi-schema" + FS;
+    private static final String SER_FILE_PATH = "yang" + FS + "resources" +
+            FS + "YangMetaData.ser";
+    private static final String META_PATH =
+            PATH.replace("drivers/microsemi", "")
+            + SER_FILE_PATH;
+    private static final String TEMP_FOLDER_PATH = PATH + UtilConstants.TEMP;
+    private YangModelRegistry reg = new DefaultYangModelRegistry();
+    private List<YangNode> nodes = new ArrayList<>();
+
+    /**
+     * Creates an instance of mock bundle context.
+     */
+    public MockYangSchemaNodeProvider() {
+    }
+
+    /**
+     * Process YANG schema node for a application.
+     */
+    public void processSchemaRegistry() {
+        try {
+            //Need to deserialize generated meta data file for unit tests.
+            Set<YangNode> appNode = DataModelUtils.deSerializeDataModel(META_PATH);
+            RuntimeHelper.addLinkerAndJavaInfo(appNode);
+            nodes.addAll(appNode);
+            reg.registerModel(prepareParam(nodes));
+            YangIoUtils.deleteDirectory(TEMP_FOLDER_PATH);
+        } catch (IOException e) {
+            throw new IllegalArgumentException("YangMetaData.ser could not " +
+                    "be loaded from " + META_PATH, e);
+        }
+    }
+
+    /**
+     * Unregister given nodes from runtime service.
+     *
+     * @param nodes list of nodes
+     */
+    public void unRegister(List<YangNode> nodes) {
+        reg.unregisterModel(prepareParam(nodes));
+    }
+
+    /**
+     * Prepares model registration parameter.
+     *
+     * @param nodes list of nodes
+     * @return model registration parameter
+     */
+    private ModelRegistrationParam prepareParam(List<YangNode> nodes) {
+        //Process loading class file.
+        String appName;
+        ClassLoader classLoader = getClass().getClassLoader();
+
+        //Create model registration param.
+        ModelRegistrationParam.Builder b =
+                DefaultModelRegistrationParam.builder();
+
+        //create a new YANG model
+        YangModel model = YangApacheUtils.processYangModel(META_PATH, nodes);
+        //set YANG model
+        b.setYangModel(model);
+
+        Iterator<YangNode> it = nodes.iterator();
+        while (it.hasNext()) {
+            YangSchemaNode node = it.next();
+
+            //If service class is not generated then use
+            // interface file to load this class.
+            appName = RuntimeHelper.getInterfaceClassName(node);
+            Class<?> cls;
+            try {
+                cls = classLoader.loadClass(appName);
+            } catch (ClassNotFoundException e) {
+                continue;
+            }
+
+            //generate app info.
+            AppModuleInfo info = new DefaultAppModuleInfo(cls, null);
+            b.addAppModuleInfo(YangApacheUtils.processModuleId((YangNode) node), info);
+        }
+        return b.build();
+    }
+
+    /**
+     * Returns schema registry.
+     *
+     * @return schema registry
+     */
+    public DefaultYangModelRegistry registry() {
+        return (DefaultYangModelRegistry) reg;
+    }
+}
diff --git a/drivers/microsemi/src/test/java/org/onosproject/yang/serializers/xml/MockYangSerializerContext.java b/drivers/microsemi/src/test/java/org/onosproject/yang/serializers/xml/MockYangSerializerContext.java
new file mode 100644
index 0000000..cfe7b9b
--- /dev/null
+++ b/drivers/microsemi/src/test/java/org/onosproject/yang/serializers/xml/MockYangSerializerContext.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.yang.serializers.xml;
+
+import org.onosproject.yang.model.SchemaContext;
+import org.onosproject.yang.runtime.Annotation;
+import org.onosproject.yang.runtime.DefaultAnnotation;
+import org.onosproject.yang.runtime.YangSerializerContext;
+import org.onosproject.yang.runtime.impl.DefaultYangModelRegistry;
+
+import java.util.LinkedList;
+import java.util.List;
+
+public class MockYangSerializerContext implements YangSerializerContext {
+
+    private static MockYangSchemaNodeProvider schemaProvider =
+            new MockYangSchemaNodeProvider();
+    private static final String NETCONF_NS =
+            "urn:ietf:params:xml:ns:netconf:base:1.0";
+    private static final String XMNLS_NC = "xmlns:xc";
+
+
+    @Override
+    public SchemaContext getContext() {
+        schemaProvider.processSchemaRegistry();
+        DefaultYangModelRegistry registry = schemaProvider.registry();
+        return registry;
+    }
+
+    @Override
+    public List<Annotation> getProtocolAnnotations() {
+        Annotation annotation = new DefaultAnnotation(XMNLS_NC, NETCONF_NS);
+        List<Annotation> protocolAnnotation = new LinkedList<>();
+        protocolAnnotation.add(annotation);
+        return protocolAnnotation;
+    }
+}
diff --git a/drivers/microsemi/ea1000driver/src/test/resources/CarrierEthernetFeature-sampleEvcConfig1.txt b/drivers/microsemi/src/test/resources/CarrierEthernetFeature-sampleEvcConfig1.txt
similarity index 100%
rename from drivers/microsemi/ea1000driver/src/test/resources/CarrierEthernetFeature-sampleEvcConfig1.txt
rename to drivers/microsemi/src/test/resources/CarrierEthernetFeature-sampleEvcConfig1.txt
diff --git a/drivers/microsemi/ea1000driver/src/test/resources/getConfigSaFiltering.xml b/drivers/microsemi/src/test/resources/getConfigSaFiltering.xml
similarity index 100%
rename from drivers/microsemi/ea1000driver/src/test/resources/getConfigSaFiltering.xml
rename to drivers/microsemi/src/test/resources/getConfigSaFiltering.xml
diff --git a/drivers/microsemi/ea1000driver/src/test/resources/getConfigSaFilteringReply.xml b/drivers/microsemi/src/test/resources/getConfigSaFilteringReply.xml
similarity index 100%
rename from drivers/microsemi/ea1000driver/src/test/resources/getConfigSaFilteringReply.xml
rename to drivers/microsemi/src/test/resources/getConfigSaFilteringReply.xml
diff --git a/drivers/microsemi/ea1000driver/src/test/resources/systemReply-Sample1.xml b/drivers/microsemi/src/test/resources/systemReply-Sample1.xml
similarity index 100%
rename from drivers/microsemi/ea1000driver/src/test/resources/systemReply-Sample1.xml
rename to drivers/microsemi/src/test/resources/systemReply-Sample1.xml
diff --git a/drivers/microsemi/ea1000driver/src/test/resources/systemReply-Sample2.xml b/drivers/microsemi/src/test/resources/systemReply-Sample2.xml
similarity index 100%
rename from drivers/microsemi/ea1000driver/src/test/resources/systemReply-Sample2.xml
rename to drivers/microsemi/src/test/resources/systemReply-Sample2.xml