Removed Microsemi EA1000 driver and YANG models - obsolete

Change-Id: I6daedecd1711c2e040b5700e4d20e03b5a00d1ae
diff --git a/drivers/microsemi/README.md b/drivers/microsemi/README.md
deleted file mode 100644
index 7a29a1d..0000000
--- a/drivers/microsemi/README.md
+++ /dev/null
@@ -1,4 +0,0 @@
-There is no BUCK or pom.xml file at this level because each driver 
-should be completely independent of each other. i.e. The will be 
-treated as individual applications. The 'microsemi' folder is only 
-a grouping mechanism at the directory level. 
\ No newline at end of file
diff --git a/drivers/microsemi/ea1000/BUILD b/drivers/microsemi/ea1000/BUILD
deleted file mode 100644
index cdde14e..0000000
--- a/drivers/microsemi/ea1000/BUILD
+++ /dev/null
@@ -1,55 +0,0 @@
-COMPILE_DEPS = CORE_DEPS + ONOS_YANG + CLI + [
-    "@onos_yang_runtime//jar",
-    "//drivers/utilities:onos-drivers-utilities",
-    "//protocols/netconf/api:onos-protocols-netconf-api",
-    "//protocols/netconf/ctl:onos-protocols-netconf-ctl",
-    "//models/common:onos-models-common",
-    "//models/microsemi:onos-models-microsemi",
-    "//apps/cfm/api:onos-apps-cfm-api",
-]
-
-TEST_DEPS = TEST_ADAPTERS + [
-    "//core/api:onos-api-tests",
-    "//drivers/netconf:onos-drivers-netconf-tests",
-    "//utils/osgi:onlab-osgi-tests",
-    "//apps/cfm/app:onos-apps-cfm-app",
-    "//apps/cfm/app:onos-apps-cfm-app-tests",
-]
-
-APPS = [
-    "org.onosproject.yang",
-    "org.onosproject.config",
-    "org.onosproject.netconf",
-    "org.onosproject.netconfsb",
-    "org.onosproject.drivers.netconf",
-    "org.onosproject.models.common",
-    "org.onosproject.models.microsemi",
-    "org.onosproject.cfm",
-]
-
-osgi_jar_with_tests(
-    exclude_tests = [
-        "org.onosproject.drivers.microsemi.EA1000CfmMepProgrammableTest",
-        "org.onosproject.drivers.microsemi.EA1000FlowRuleProgrammableTest",
-        "org.onosproject.drivers.microsemi.EA1000MeterProviderTest",
-        "org.onosproject.drivers.microsemi.EA1000SoamDmProgrammableTest",
-        "org.onosproject.drivers.microsemi.yang.IetfSystemManagerTest",
-        "org.onosproject.drivers.microsemi.yang.MseaCfmManagerTest",
-        "org.onosproject.drivers.microsemi.yang.MseaSaFilteringManagerTest",
-        "org.onosproject.drivers.microsemi.yang.MseaSaFilteringManagerTest",
-        "org.onosproject.drivers.microsemi.yang.MseaUniEvcServiceManagerTest",
-    ],
-    resources = glob(["src/main/resources/**"]),
-    resources_root = "src/main/resources",
-    test_deps = TEST_DEPS,
-    deps = COMPILE_DEPS,
-)
-
-onos_app(
-    app_name = "org.onosproject.drivers.microsemi.ea1000",
-    category = "Drivers",
-    description = "Adds support for Microsemi EA1000 devices.",
-    required_apps = APPS,
-    title = "Microsemi Drivers EA1000",
-    url = "http://onosproject.org",
-)
diff --git a/drivers/microsemi/ea1000/README.md b/drivers/microsemi/ea1000/README.md
deleted file mode 100644
index 1cd0dc9..0000000
--- a/drivers/microsemi/ea1000/README.md
+++ /dev/null
@@ -1,495 +0,0 @@
-# Microsemi Edge Assure 1000 SFP-NID
-This driver allows connection to the Microsemi Edge Assure 1000 SFP-NID
-[EdgeAssure 1000 Product Page](https://www.microsemi.com/existing-parts/parts/137346)
-
-The User Guide for this product is available on request from Microsemi, and gives a full explanation of the theory of operation, functionality and how all functions can be accessed through the NETCONF interface only.<br/>
-
-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 built using BUCK<br/>
-
-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.impl.NetconfControllerImpl netconfConnectTimeout 50
-onos:cfg set org.onosproject.netconf.ctl.impl.NetconfControllerImpl netconfReplyTimeout 50
-```
-
-# 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 **ip** and **port** must correspond to the ip and port in the name (above).
-
-```js
-{
-  "devices": {
-    "netconf:192.168.56.10:830": {
-      "netconf": {
-        "username": "admin",
-        "password": "admin",
-        "ip": "192.168.56.10",
-        "port": 830,
-        "connect-timeout": 50,
-        "reply-timeout": 50,
-        "idle-timeout": 40
-      },
-      "basic": {
-        "driver": "microsemi-netconf",
-        "type": "SWITCH",
-        "manufacturer": "Microsemi",
-        "hwVersion": "EA1000"
-      }
-    }
-  }
-}
-```
-
-
-# Connected Device
-When the EA1000 is configured and connected is should be visible in ONOS through the **devices** command.
-
-```
-onos> devices
-id=netconf:192.168.56.10:830, available=true, local-status=connected 33s ago, role=MASTER, type=SWITCH, mfr=Microsemi, hw=EA1000, sw=4.4.0-53-generic, serial=Eagle Simulator., driver=microsemi-netconf, ipaddress=192.168.56.10, latitude=51.8865467, locType=geo, longitude=-8.4040440, name=netconf:192.168.56.10:830, port=830, protocol=NETCONF
-```
-
-Note how the
-* software version (sw=**4.4.0-53-generic**)
-* serial number (serial=**Eagle Simulator.**)
-* latitude (latitude=**51.8865467**) and
-* longitude (longitude=**-8.4040440**)
-are all retrieved from the device on initial handshake.
-
-In addition the time on the device is checked at this stage, and if it wrong by more than 1 day (it defaults to 1-1-1970 on startup if no NTP server is configured), then the current time is written to it at this stage. This will persist on the device until next reboot.
-
-Also the ports of the device will be visible after connection. There are 2 ports
-* Port 0 - The **Optics** port - this is a single mode 1000LX 1310nm optical connection
-* Port 1 - The **Host** port - this is a 1GB Ethernet Copper connection in to an SFP Port
-
-```
-onos> ports
-id=netconf:192.168.56.10:830, available=true, local-status=connected 15s ago, role=MASTER, type=SWITCH, mfr=Microsemi, hw=EA1000, sw=4.4.0-53-generic, serial=Eagle Simulator., driver=microsemi-netconf, ipaddress=192.168.56.10, latitude=51.8865467, locType=geo, longitude=-8.4040440, name=netconf:192.168.56.10:830, port=830, protocol=NETCONF
-    port=0, state=enabled, type=fiber, speed=1000, portName=Optics
-    port=1, state=enabled, type=copper, speed=1000, portName=Host
-```
-
-# OpenFlow Emulation
-Currently the EA1000 supports only a limited set of OpenFlow rules through the Flows REST API and the Flow Objective API.
-
-## IP Source Address filtering
-A feature of the EA1000 that may be configured through Flow Rules is IP Source Address Filtering. This can only be activated on Port 0 (the optics Port). An example of this kind of flow is
-
-`POST /onos/v1/flows/ HTTP/1.1`<br/>
-```js
-{
-  "flows": [
-    {
-      "priority": 50000,
-      "timeout": 0,
-      "isPermanent": true,
-      "deviceId": "netconf:192.168.56.10:830",
-      "tableId": 8,
-      "treatment": {
-        "instructions": [ {"type": "NOACTION"} ],
-        "deferred": []
-      },
-      "selector": {
-        "criteria": [
-          {"type": "IPV4_SRC", "ip": "192.168.8.0/24"},
-          {"type": "IN_PORT", "port": "0"}
-        ]
-      }
-    }
-  ]
-}
-```
-
-## Vlan Tag Manipulation
-**Note: Before Vlan Tag manipulation can be done the mode of the interface on the EA1000 has to be changed to be compatible with the type of tags that are being received. If this is not done, once an EVC is created the packets that have the Vlan tagged on will be treated as untagged by EA1000, and dropped if there is no EVC present corresponding to the interface PVID. See the section below on the "Setting EA1000 Interface Tagging Mode"**
-
-Flows that Push, Pop or Overwrite VLAN tags are implemented in EA1000 and are treated as MEF Carrier Ethernet EVCs. Both CTags and STags can be pushed on to matching Ethernet packets at network Layer 2.
-
-`POST /onos/v1/flows/ HTTP/1.1`<br/>
-```js
-{
-  "flows": [
-    {
-      "priority": 50000,
-      "timeout": 0,
-      "isPermanent": true,
-      "tableId": 6, // This sets the EVC id - this first flow is configuring the customer side - UNI-C
-      "deviceId": "netconf:192.168.56.10:830",
-      "treatment": {
-        "instructions": [
-          {
-            "type": "L2MODIFICATION",
-            "subtype": "VLAN_PUSH", // This pushes a VLAN on
-            "ethernetType": "0x88a8" // The pushed VLAN type is QinQ
-          },
-          {
-            "type": "L2MODIFICATION",
-            "subtype": "VLAN_ID",
-            "vlanId": "200" // The pushed VLAN id is 200
-          }],
-        "deferred": []
-      },
-      "selector": {
-        "criteria": [
-        {
-          "type": "VLAN_VID",
-          "vlanId": "100" // Applies only to packets already tagged with VLAN 100..
-        },
-        {
-          "type": "IN_PORT",
-          "port": "1" // ...that are coming in on the Host port
-        }]
-        }
-    },
-    {
-      "priority": 50000,
-      "timeout": 0,
-      "isPermanent": true,
-      "tableId": 6, // The same EVC, but now we are configuring another VLAN
-      "deviceId": "netconf:192.168.56.10:830",
-      "treatment": {
-        "instructions": [
-          {
-            "type": "L2MODIFICATION",
-            "subtype": "VLAN_PUSH", // Push again
-            "ethernetType": "0x88a8" // QinQ again
-          },
-          {
-            "type": "L2MODIFICATION",
-            "subtype": "VLAN_ID",
-            "vlanId": "200" // VLAN 200 again
-          }],
-        "deferred": []
-      },
-      "selector": {
-        "criteria": [
-          {
-            "type": "VLAN_VID",
-            "vlanId": "101" // Applies only to packets already tagged with VLAN 101..
-          },
-          {
-            "type": "IN_PORT",
-            "port": "1" // ... that are coming in on the Host port
-          }]
-      }
-    },
-    {
-      "priority": 50000,
-      "timeout": 0,
-      "isPermanent": true,
-      "tableId": 6, // The same EVC, but now we are configuring the opposite side
-      "deviceId": "netconf:192.168.56.10:830",
-      "treatment": {
-        "instructions": [
-        {
-          "type": "L2MODIFICATION",
-          "subtype": "VLAN_POP" // Here we are popping the top level tag
-        }],
-        "deferred": []
-      },
-      "selector": {
-        "criteria": [
-          {
-            "type": "VLAN_VID", // Applies only to packets tagged with VLAN 200
-            "vlanId": "200"
-          },
-          {
-            "type": "IN_PORT",
-            "port": "0" // That are coming in on the Optics Port
-          }]
-      }
-    }
-  ]
-}
-```
-
-## Setting EA1000 Interface Tagging Mode
-The Interface of the EA1000 has an attribute **frame_format** that must be set to either:
-* none (default)
-* ctag
-* stag
-to correspond to the type of tagging that will be applied to packets received at that port.
-
-For instance if Port 0 of an EA1000 is to receive and process S-Tags, the the frame-format of the interface *eth0* should be set to **stag** in advance.
-
-This should be made a permanent setting in the NETCONF *startup* datastore, so that it will be active if the device reboots.
-
-Likewise the opposite port should be set to *ctag*.<br/>
-
-This changes are not made done through the ONOS Driver, and currently only possible to make this change through a NETCONF CLI client such as *yangcli-pro* or *netopeer-cli*;
-
-See the EA1000 User Guide for details on how to use *yangcli-pro* to access the EA1000.
-
-On an EA1000 accessed through *yangcli-pro* the following commands can be used to make these changes:
-
-```
-admin@192.168.2.234> discard-changes
-admin@192.168.2.234> copy-config source=startup target=candidate
-admin@192.168.2.234> merge /interfaces/interface[name='eth0']/frame-format --value='stag'
-admin@192.168.2.234> merge /interfaces/interface[name='eth1']/frame-format --value='ctag'
-admin@192.168.2.234> commit
-admin@192.168.2.234> copy-config source=running target=startup
-```
-
-# ONOS Carrier Ethernet Application
-The ONOS [Carrier Ethernet](https://wiki.onosproject.org/display/ONOS/Carrier+Ethernet+Application) application allows EVCs to be created between UNIs that are linked together in ONOS. This is translated down to OpenFlow switches by converting the **ce-evc-create** commands in to Flow Rules similar to those shown above.
-
-While EA1000 is not an OpenFlow switch, it's driver can convert these flows in to NETCONF which can be used to configure EVCs on the EA1000. Because EA1000 is just a 2 port device it represents only 1 UNI (conventionally on switches each port represnts a UNI).
-
-When an EA1000 device is configured in ONOS the Carrier Ethernet Application considers both of its ports to be UNIs, as can be seen in the listing below:
-
-```
-onos> ce-uni-list
-CarrierEthernetUni{id=netconf:192.168.56.10:830/0, cfgId=netconf:192.168.56.10:830/0, role=null, refCount=0, ceVlanIds=[], capacity=1000000000, usedCapacity=0.0, bandwidthProfiles=[]}
-CarrierEthernetUni{id=netconf:192.168.56.10:830/1, cfgId=netconf:192.168.56.10:830/1, role=null, refCount=0, ceVlanIds=[], capacity=1000000000, usedCapacity=0.0, bandwidthProfiles=[]}
-```
-
-This mismatch is handled in the driver - both side appear to be separate here but they will apply to the same single UNI on the EA1000 in opposite directions.
-
-For an EVC to be created there has to an ONOS 'link' between 2 UNIs for a POINT-TO-POINT connection - an Ethernet Virtual Private Line (**EVPL**). There has to be more than 2 UNIs to create a MULTIPOINT-TO-MULTIPOINT link - an E-Lan.
-
-## Links
-In a simple scenario that has 2 EA1000s (netconf:192.168.56.10:830 and netconf:192.168.56.20:830) configured in ONOS, the two might be linked together through their optics ports (port 0). The following result is expected for a bi-directional link:
-
-```
-onos> links
-src=netconf:192.168.56.10:830/0, dst=netconf:192.168.56.20:830/0, type=DIRECT, state=ACTIVE, expected=false
-src=netconf:192.168.56.20:830/0, dst=netconf:192.168.56.10:830/0, type=DIRECT, state=ACTIVE, expected=false
-```
-This will not exist by default since Link Discovery is not yet a feature of the EA1000 driver. These have to be created manually - through the network/configuration REST API.
-
-`POST /onos/v1/network/configuration/ HTTP/1.1`<br/>
-```js
-{
-  "links": {
-    "netconf:192.168.56.10:830/0-netconf:192.168.56.20:830/0": { // 10 to 20
-      "basic" : {
-        "type" : "DIRECT"
-      }
-    },
-    "netconf:192.168.56.20:830/0-netconf:192.168.56.10:830/0" : { // and reverse
-      "basic" : {
-        "type" : "DIRECT"
-      }
-    }
-  }
-}
-```
-
-## EVPL Creation
-To create a simple EVPL the following command can be used at the ONOS CLI:<br/>
-
-```
-onos>ce-evc-create --cevlan 101 evpl1 POINT_TO_POINT netconf:192.168.57.10:830/0 netconf:192.168.57.20:830/0
-```
-
-This returns without any message. Tailing through the ONOS logs will reveal any error that might have occurred.<br/>
-
-This EVC can be viewed only through the command line:
-```
-onos> ce-evc-list
-CarrierEthernetVirtualConnection{id=EP-Line-1, cfgId=evpl1, type=POINT_TO_POINT, state=ACTIVE,
-UNIs=[
-CarrierEthernetUni{id=netconf:192.168.56.10:830/0, cfgId=netconf:192.168.56.10:830/0, role=Root, refCount=0, ceVlanIds=[101], capacity=1000000000, usedCapacity=0.0, bandwidthProfiles=[CarrierEthernetBandwidthProfile{id=FC-1, type=EVC, cir=0.0, cbs=0, eir=0.0, ebs=0}]},
-CarrierEthernetUni{id=netconf:192.168.56.20:830/0, cfgId=netconf:192.168.56.20:830/0, role=Root, refCount=0, ceVlanIds=[101], capacity=1000000000, usedCapacity=0.0, bandwidthProfiles=[CarrierEthernetBandwidthProfile{id=FC-1, type=EVC, cir=0.0, cbs=0, eir=0.0, ebs=0}]}],
-FCs=[CarrierEthernetForwardingConstruct{id=FC-1, cfgId=null, type=POINT_TO_POINT, vlanId=1, metroConnectId=null, refCount=1,
-LTPs=[
-CarrierEthernetLogicalTerminationPoint{id=netconf:192.168.56.10:830/0, cfgId=netconf:192.168.56.10:830/0, role=Root, ni=CarrierEthernetUni{id=netconf:192.168.56.10:830/0, cfgId=netconf:192.168.56.10:830/0, role=Root, refCount=0, ceVlanIds=[101], capacity=1000000000, usedCapacity=0.0, bandwidthProfiles=[CarrierEthernetBandwidthProfile{id=FC-1, type=EVC, cir=0.0, cbs=0, eir=0.0, ebs=0}]}}, CarrierEthernetLogicalTerminationPoint{id=netconf:192.168.56.20:830/0, cfgId=netconf:192.168.56.20:830/0, role=Root, ni=CarrierEthernetUni{id=netconf:192.168.56.20:830/0, cfgId=netconf:192.168.56.20:830/0, role=Root, refCount=0, ceVlanIds=[101], capacity=1000000000, usedCapacity=0.0, bandwidthProfiles=[CarrierEthernetBandwidthProfile{id=FC-1, type=EVC, cir=0.0, cbs=0, eir=0.0, ebs=0}]}}]}]}
-```
-
-## EVPL flows
-This creates a set of flows in ONOS that are pushed down to the two EA1000s through NETCONF to configure the EVCs
-
-```
-onos> flows
-deviceId=netconf:192.168.56.10:830, flowRuleCount=2
-id=71000050d21dd5, state=ADDED, bytes=0, packets=0, duration=0, liveType=UNKNOWN, priority=50000, tableId=1, appId=org.onosproject.ecord.carrierethernet, payLoad=null, selector=[IN_PORT:0, VLAN_VID:1], treatment=DefaultTrafficTreatment{immediate=[VLAN_POP], deferred=[], transition=None, meter=None, cleared=false, metadata=null} # This represents ingress on the Optics port 0 on device A and POPs off the S-Tag
-id=710000b5c1f057, state=ADDED, bytes=0, packets=0, duration=0, liveType=UNKNOWN, priority=50000, tableId=1, appId=org.onosproject.ecord.carrierethernet, payLoad=null, selector=[IN_PORT:1, VLAN_VID:101], treatment=DefaultTrafficTreatment{immediate=[VLAN_PUSH:qinq, VLAN_ID:1], deferred=[], transition=TABLE:0, meter=None, cleared=false, metadata=null} # This represents ingress on the Host port 1 on device A and pushes on the S-Tag 1
-
-deviceId=netconf:192.168.56.20:830, flowRuleCount=2
-id=710000613c8252, state=ADDED, bytes=0, packets=0, duration=0, liveType=UNKNOWN, priority=50000, tableId=1, appId=org.onosproject.ecord.carrierethernet, payLoad=null, selector=[IN_PORT:0, VLAN_VID:1], treatment=DefaultTrafficTreatment{immediate=[VLAN_POP], deferred=[], transition=None, meter=None, cleared=false, metadata=null} # This represents ingress on the Optics port 0 on device B and POPs off the S-Tag 1
-id=7100006ca2573f, state=ADDED, bytes=0, packets=0, duration=0, liveType=UNKNOWN, priority=50000, tableId=1, appId=org.onosproject.ecord.carrierethernet, payLoad=null, selector=[IN_PORT:1, VLAN_VID:101], treatment=DefaultTrafficTreatment{immediate=[VLAN_PUSH:qinq, VLAN_ID:1], deferred=[], transition=TABLE:0, meter=None, cleared=false, metadata=null} # This represents ingress on the Host port 1 on device B and pushes on the S-Tag 1
-```
-
-Through these flows it's clear that the CE-VLAN on the UNI-C side is 101 and that the S-Tag that is being pushed on is VLAN 1. Packets coming back in on the UNI-N on port 0 have their S-Tag popped off. In this scenario this will create evc-1 on both of the EA1000s.<br/>
-
-On the actual EA1000 itself using a NETCONF CLI Client like yangcli-pro, the result is:
-```
-admin@192.168.56.10> sget-config /mef-services/uni source=running
-rpc-reply {
-  data {
-    mef-services {
-      uni { # There is only one UNI on the EA1000
-        name Uni-on-192.168.56.10:830 # Automatically assigned
-        evc 1 { # From the VLAN 1 from CE app
-          evc-index 1
-          name EVC-1 # Automatically assigned
-          evc-per-uni {
-            evc-per-uni-c { # The UNI-C side
-            ce-vlan-map 101 # Could be a range of values
-            flow-mapping {
-              ce-vlan-id 101
-              flow-id 31243725464268887 # For tracking with ONOS
-            }
-            ingress-bwp-group-index 0 # No meters
-            tag-push { # Push on an a VLAN
-              push-tag-type pushStag # Push type is S-TAG
-              outer-tag-vlan 1 # Push value is 1
-              }
-            }
-            evc-per-uni-n { # For the UNI-N side
-              ce-vlan-map 1 # The VLAN to match for egress on this side
-              flow-mapping {
-                ce-vlan-id 1
-                flow-id 31243723770830293
-              }
-              ingress-bwp-group-index 0
-              tag-pop { # Pop off the S-TAG
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-}
-admin@192.168.56.10>
-```
-
-## CIR and EIR as OpenFlow Meters
-** Note: The meters created by Carrier Ethernet are not compatible with Open vSwitch at present.They will disrupt the configuration of the EA1000 if there are Open VSwitch based OpenFlow switches between the UNIs **<br/>
-
-To create limits on how the EVPL can transport data the CIR, EIR and CBS and EBS values can be specified:
-
-```
-onos> ce-evc-create --cevlan 102 -c 400 -e 200 -cbs 3000 -ebs 2000 evpl2 POINT_TO_POINT netconf:192.168.56.10:830/0 netconf:192.168.56.20:830/0
-```
-
-* -c 400 means Commit Information Rate is 400 MB/s
-* -e 200 means Excess information Rate is 200 MB/s
-* -cbs 3000 is Committed Burst Size of 3000 **Bytes**
-* -ebs 2000 is Excess Burst Rate of 2000 **Bytes**
-
-These will be created as meters in Open Flow.
-
-```
-onos> meters
-DefaultMeter{device=netconf:192.168.56.20:830, id=1, appId=org.onosproject.ecord.carrierethernet, unit=KB_PER_SEC, isBurst=true, state=PENDING_ADD, bands=[DefaultBand{rate=50000, burst-size=3000, type=REMARK, drop-precedence=0}, DefaultBand{rate=75000, burst-size=5000, type=DROP, drop-precedence=null}]}
-DefaultMeter{device=netconf:192.168.56.10:830, id=1, appId=org.onosproject.ecord.carrierethernet, unit=KB_PER_SEC, isBurst=true, state=PENDING_ADD, bands=[DefaultBand{rate=75000, burst-size=5000, type=DROP, drop-precedence=null}, DefaultBand{rate=50000, burst-size=3000, type=REMARK, drop-precedence=0}]}
-```
-
-## EVC Deletion
-EVCs can be deleted individually with **ce-evc-remove <evc-id>** or all together with **ce-evc-remove-all**.
-
-# Support for Layer 2 Monitoring
-EA1000 supports both Connectivity Fault Management (CFM) and MEF Services OAM. This is achieved through the EA1000 driver supporting the ONOS behaviors CfmMepProgrammable and SoamDmProgrammable described in [Layer 2 Monitoring with CFM and Services OAM](https://wiki.onosproject.org/display/ONOS/Layer+2+Monitoring+with+CFM+and+Services+OAM).
-
-With EA1000 the CFM entities (Maintenance Association Endpoints or MEPs) are created in parallel with the EVC services that they are designed to test, and related loosely to each other only through VLAN ID.
-For instance an EVC might be created with a VLAN of 101, and separately a Maintenance Association would be created with the same VLAN ID, and MEPs created under this for monitoring that VLAN (and by inference that EVC).
-
-The CFM interface to ONOS is exposed through a REST API at /onos/cfm
-In ONOS Maintenance Domains and Maintenance Associations beneath them are created and persisted in a distributed datastore. These are logical entities that can span across an ONOS cluster and are not directly related to devices.
-
-The Maintenance Association Endpoint - MEP (the child of the Maintenance Association, and grandchild of the Maintenance Domain) is also a logical entity but has a hard many:1 association to a device that supports the CfmMepProgrammable behaviour. EA1000 is one such device, and so one to many MEPs can be associated with an EA1000 device.
-
-For example to create an Maintenance Domain in ONOS the following might be POSTed to
-`POST http://localhost:8181/onos/cfm/md HTTP/1.1`</br>
-```js
-{"md": {
-    "mdName": "Microsemi",
-    "mdNameType": "CHARACTERSTRING",
-    "mdLevel": "LEVEL3",
-    "mdNumericId": 1
-   }
-}
-```
-
-To create a Maintenance Association under this
-`POST http://localhost:8181/onos/cfm/md/Microsemi/ma HTTP/1.1`</br>
-```js
-{
-  "ma": {
-    "maName": "ma-vlan-1",
-    "maNameType": "CHARACTERSTRING",
-    "maNumericId": 1,
-    "ccm-interval": "INTERVAL_1S",
-    "component-list": [
-      { "component": {
-        "component-id":"1",
-        "tag-type": "VLAN_STAG",
-        "vid-list": [
-          {"vid":1}
-        ]
-        }
-      }
-    ],
-    "rmep-list": [
-      { "rmep":10 },
-      { "rmep":20 },
-      { "rmep":30 }
-    ]
-  }
-}
-```
-
-To create a MEP under this:
-`POST http://localhost:8181/onos/cfm/md/Microsemi/ma/ma-vlan-1/mep HTTP/1.1`</br>
-```js
-{
-  "mep": {
-    "mepId": 10,
-    "deviceId": "netconf:10.205.86.26:830",
-    "port": 0,
-    "direction": "DOWN_MEP",
-    "primary-vid": 1,
-    "administrative-state": true,
-    "ccm-ltm-priority": 4,
-    "cci-enabled" :true
-  }
-}
-```
-
-When the MEP is created a configuration is written down to the EA1000 device at 10.205.86.26 through NETCONF roughly in the format:
-```xml
-<maintenance-domain>
- <id>1</id>
- <name>Microsemi</name>
- <name-type>CHARACTER_STRING</name-type>
- <md-level>3</md-level>
- <maintenance-association>
-   <id>1</id>
-   <name>ma-vlan-1</name>
-   <name-type>CHARACTER_STRING</name-type>
-   <component-list>
-     <tag-type>vlan-stag</tag-type>
-     <vid>1</vid>
-   </component-list>
-   <remote-mep>10</remote-mep>
-   <remote-mep>20</remote-mep>
-   <remote-mep>30</remote-mep>
-   <maintenance-association-endpoint>
-     <mep-identifier>10</mep-identifier>
-     ...
-   </maintenance-association-endpoint>
- </maintenance-association>
-</maintenance-domain>
-```
-
-There are a few things to note here:
-* On EA1000 the MD and MA are indexed by their _id_ and not by name. This means that it is essential when working with EA1000 that all MD's and MA's have a numeric ID specified, and that the numeric IDs of Maintenance Domains should be unique. The numeric IDs of Maintenance Associations should be unique _within_ Maintenance Domains.
-* The component list is flattened down to a singleton object. While in the CFM model many Components are possible, EA1000 supports only 1
-* With Remote Meps - the local and all remote meps must be specified by their ID. In this instance 10 is the local on device 10.205.86.26 and 20 and 30 are remote meps that we expect will be local to some other devices
-* Even though the write to the EA1000 only happens when the MEP is created it brings down the MD and MA to the device with it.
-* When the MEP is deleted the MD and MA are left behind on the device. If the MD and MA were then to be changed in ONOS and a new MEP pushed down to the device, there would be an error, as the MD and MA would remain on the device since the earlier time. To remedy this, the MD and MA would need to be deleted manually through yangcli-pro.
diff --git a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/EA1000CfmMepProgrammable.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/EA1000CfmMepProgrammable.java
deleted file mode 100755
index 8a25aae..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/EA1000CfmMepProgrammable.java
+++ /dev/null
@@ -1,864 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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 com.google.common.base.Preconditions.checkNotNull;
-import static org.onosproject.drivers.microsemi.yang.utils.MaNameUtil.getApiMaIdFromYangMaName;
-import static org.onosproject.drivers.microsemi.yang.utils.MdNameUtil.getApiMdIdFromYangMdName;
-import static org.onosproject.drivers.microsemi.yang.utils.MdNameUtil.getYangMdNameFromApiMdId;
-import static org.slf4j.LoggerFactory.getLogger;
-
-import java.time.Duration;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.NoSuchElementException;
-import java.util.Optional;
-
-import org.onlab.packet.MacAddress;
-import org.onlab.packet.VlanId;
-import org.onlab.util.HexString;
-import org.onosproject.drivers.microsemi.yang.MseaCfmNetconfService;
-import org.onosproject.drivers.microsemi.yang.utils.MaNameUtil;
-import org.onosproject.incubator.net.l2monitoring.cfm.Component;
-import org.onosproject.incubator.net.l2monitoring.cfm.DefaultMepEntry;
-import org.onosproject.incubator.net.l2monitoring.cfm.DefaultMepLbEntry;
-import org.onosproject.incubator.net.l2monitoring.cfm.DefaultRemoteMepEntry;
-import org.onosproject.incubator.net.l2monitoring.cfm.MaintenanceAssociation;
-import org.onosproject.incubator.net.l2monitoring.cfm.MaintenanceDomain;
-import org.onosproject.incubator.net.l2monitoring.cfm.Mep;
-import org.onosproject.incubator.net.l2monitoring.cfm.Mep.MepDirection;
-import org.onosproject.incubator.net.l2monitoring.cfm.Mep.Priority;
-import org.onosproject.incubator.net.l2monitoring.cfm.MepEntry;
-import org.onosproject.incubator.net.l2monitoring.cfm.MepLbCreate;
-import org.onosproject.incubator.net.l2monitoring.cfm.MepLbEntry.MepLbEntryBuilder;
-import org.onosproject.incubator.net.l2monitoring.cfm.MepLtCreate;
-import org.onosproject.incubator.net.l2monitoring.cfm.RemoteMepEntry;
-import org.onosproject.incubator.net.l2monitoring.cfm.RemoteMepEntry.InterfaceStatusTlvType;
-import org.onosproject.incubator.net.l2monitoring.cfm.RemoteMepEntry.PortStatusTlvType;
-import org.onosproject.incubator.net.l2monitoring.cfm.RemoteMepEntry.RemoteMepEntryBuilder;
-import org.onosproject.incubator.net.l2monitoring.cfm.RemoteMepEntry.RemoteMepState;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdShort;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdId;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MepId;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MepKeyId;
-import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmConfigException;
-import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmMdService;
-import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmMepProgrammable;
-import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmMepService;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.driver.AbstractHandlerBehaviour;
-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.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.MefCfm;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.abortloopback.AbortLoopbackInput;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.abortloopback.DefaultAbortLoopbackInput;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.faultalarmdefectbitstype.Bits;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.DefaultMaintenanceDomain;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.DefaultMaintenanceAssociation;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.MdNameAndTypeCombo;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.CcmIntervalEnum;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.ComponentList;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.DefaultComponentList;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.DefaultMaintenanceAssociationEndPoint;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.MaNameAndTypeCombo;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.MaintenanceAssociationEndPoint;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.componentlist.TagTypeEnum;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.ContinuityCheck;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.DefaultContinuityCheck;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.InterfaceEnum;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.remotemepstatetype.RemoteMepStateTypeEnum;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.targetaddressgroup.addresstype.DefaultMacAddress;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.targetaddressgroup.addresstype.DefaultMepId;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.transmitloopback.DefaultTransmitLoopbackInput;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.transmitloopback.TransmitLoopbackInput;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.transmitloopback.transmitloopbackinput.DefaultTargetAddress;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.transmitloopback.transmitloopbackinput.TargetAddress;
-import org.onosproject.yang.gen.v1.mseasoamfm.rev20160229.mseasoamfm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.AugmentedMseaCfmMaintenanceAssociationEndPoint;
-import org.onosproject.yang.gen.v1.mseasoamfm.rev20160229.mseasoamfm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.DefaultAugmentedMseaCfmMaintenanceAssociationEndPoint;
-import org.onosproject.yang.gen.v1.mseatypes.rev20160229.mseatypes.MdLevelType;
-import org.onosproject.yang.gen.v1.mseatypes.rev20160229.mseatypes.MepIdType;
-import org.onosproject.yang.gen.v1.mseatypes.rev20160229.mseatypes.PriorityType;
-import org.onosproject.yang.gen.v1.mseatypes.rev20160229.mseatypes.VlanIdType;
-import org.slf4j.Logger;
-
-/**
- * Implementation of CfmMepProgrammable for Microsemi EA1000.
- */
-public class EA1000CfmMepProgrammable extends AbstractHandlerBehaviour
-    implements CfmMepProgrammable {
-
-    private static final int NUMERIC_ID_MAX = 64;
-    private static final int COMPONENT_LIST_SIZE = 1;
-    private static final int VIDLIST_SIZE_MIN = 1;
-    private static final int MEP_PORT_MIN = 0;
-    private static final int MEP_PORT_MAX = 1;
-    public static final String MUST_1_64_MSG = " must be between 1 and 64 inclusive for EA1000";
-    private final Logger log = getLogger(getClass());
-
-    /**
-     * Creates the instance of the EA1000CfmMepProgrammable.
-     */
-    public EA1000CfmMepProgrammable() {
-        log.debug("Loaded handler behaviour EA1000CfmMepProgrammable");
-    }
-
-    @Override
-    public boolean createMep(MdId mdName, MaIdShort maName, Mep mep)
-            throws CfmConfigException {
-        NetconfController controller = checkNotNull(handler().get(NetconfController.class));
-        NetconfSession session = checkNotNull(controller.getDevicesMap()
-                                .get(handler().data().deviceId()).getSession());
-        MseaCfmNetconfService mseaCfmService =
-                checkNotNull(handler().get(MseaCfmNetconfService.class));
-        CfmMepService cfmMepService =
-                checkNotNull(handler().get(CfmMepService.class));
-
-        MaintenanceAssociationEndPoint yangMep = buildYangMepFromApiMep(mep);
-
-        CfmMdService cfmMdService = checkNotNull(handler().get(CfmMdService.class));
-        MseaCfmOpParam mseaCfmOpParam = getMaYangObject(cfmMdService, mdName, maName);
-
-        mseaCfmOpParam.mefCfm().maintenanceDomain().get(0)
-                .maintenanceAssociation().get(0).addToMaintenanceAssociationEndPoint(yangMep);
-        //Add this mepId to the list of remoteMeps on the device
-        mseaCfmOpParam.mefCfm().maintenanceDomain().get(0)
-                .maintenanceAssociation().get(0).addToRemoteMeps(MepIdType.of(mep.mepId().value()));
-
-        //Add all of the existing meps on this MD/MA to the remote meps list
-        cfmMepService.getAllMeps(mdName, maName).forEach(m -> mseaCfmOpParam.mefCfm()
-                .maintenanceDomain().get(0).maintenanceAssociation().get(0)
-                .addToRemoteMeps(MepIdType.of(m.mepId().value())));
-        try {
-            mseaCfmService.setMseaCfm(mseaCfmOpParam, session, DatastoreId.RUNNING);
-            log.info("Created MEP {} on device {}", mdName + "/" + maName +
-                    "/" + mep.mepId(), handler().data().deviceId());
-
-            return true;
-        } catch (NetconfException e) {
-            log.error("Unable to create MEP {}/{}/{} on device {}",
-                    mdName, maName, mep.mepId(), handler().data().deviceId(), e);
-            throw new CfmConfigException("Unable to create MEP :" + e.getMessage(), e);
-        }
-    }
-
-    @Override
-    public MepEntry getMep(MdId mdName, MaIdShort maName, MepId mepId)
-            throws CfmConfigException {
-        NetconfController controller = checkNotNull(handler().get(NetconfController.class));
-        if (handler().data().deviceId() == null) {
-            throw new CfmConfigException("Device is not ready - connecting or "
-                    + "disconnected for MEP " + mdName + "/" + maName + "/" + mepId);
-        }
-        NetconfSession session = checkNotNull(controller.getDevicesMap()
-                                .get(handler().data().deviceId()).getSession());
-        MseaCfmNetconfService mseaCfmService = checkNotNull(handler().get(MseaCfmNetconfService.class));
-
-        try {
-            MseaCfm mseacfm =
-                    mseaCfmService.getMepFull(mdName, maName, mepId, session);
-            Collection<MepEntry> mepEntries = getMepEntriesFromYangResponse(mseacfm);
-            if (mepEntries == null || mepEntries.size() != 1) {
-                log.warn("Mep " + mepId + " not found on device " + handler().data().deviceId());
-                return null;
-            } else {
-                return mepEntries.stream().findFirst().get();
-            }
-        } catch (NetconfException e) {
-            log.error("Unable to get MEP {}/{}/{} on device {}",
-                    mdName, maName, mepId, handler().data().deviceId(), e);
-            throw new CfmConfigException("Unable to get MEP :" + e.getMessage(), e);
-        }
-    }
-
-    private Collection<MepEntry> getMepEntriesFromYangResponse(MseaCfm mseacfm)
-            throws CfmConfigException {
-
-        Collection<MepEntry> mepEntries = new ArrayList<>();
-        if (mseacfm == null || mseacfm.mefCfm() == null || mseacfm.mefCfm().maintenanceDomain() == null) {
-            return mepEntries;
-        }
-
-        for (org.onosproject.yang.gen.v1.mseacfm.rev20160229.
-                mseacfm.mefcfm.MaintenanceDomain replyMd:mseacfm.mefCfm().maintenanceDomain()) {
-            for (org.onosproject.yang.gen.v1.mseacfm.rev20160229.
-                    mseacfm.mefcfm.maintenancedomain.
-                    MaintenanceAssociation replyMa:replyMd.maintenanceAssociation()) {
-                for (MaintenanceAssociationEndPoint replyMep:replyMa.maintenanceAssociationEndPoint()) {
-                    mepEntries.add(buildApiMepEntryFromYangMep(
-                        replyMep, handler().data().deviceId(), replyMd, replyMa));
-                }
-            }
-        }
-        return mepEntries;
-    }
-
-    @Override
-    public boolean deleteMep(MdId mdName, MaIdShort maName, MepId mepId,
-                    Optional<MaintenanceDomain> oldMd) throws CfmConfigException {
-
-        NetconfController controller = checkNotNull(handler().get(NetconfController.class));
-        NetconfSession session = checkNotNull(controller.getDevicesMap()
-                .get(handler().data().deviceId()).getSession());
-        MseaCfmNetconfService mseaCfmService = checkNotNull(handler().get(MseaCfmNetconfService.class));
-        CfmMdService mdService = checkNotNull(handler().get(CfmMdService.class));
-
-        MaintenanceAssociationEndPoint mep =
-                new DefaultMaintenanceAssociationEndPoint();
-        mep.mepIdentifier(MepIdType.of(mepId.id()));
-
-        org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain
-            .MaintenanceAssociation yangMa = new DefaultMaintenanceAssociation();
-        Short maNumericId = null;
-        try {
-            maNumericId =
-                    mdService.getMaintenanceAssociation(mdName, maName).get().maNumericId();
-            yangMa.id(maNumericId);
-        } catch (NoSuchElementException | IllegalArgumentException e) {
-            //The MA and/or MD have probably been deleted
-            // try to get numeric id values from oldMd
-            log.debug("Could not get MD/MA details from MD service during deletion of MEP {}." +
-                    "Continuing with values from event", new MepKeyId(mdName, maName, mepId), e);
-            yangMa.id(getMaNumericId(oldMd.get(), maName));
-        }
-
-        yangMa.addToMaintenanceAssociationEndPoint(mep);
-
-        org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.MaintenanceDomain yangMd =
-            new DefaultMaintenanceDomain();
-        Short mdNumericId = null;
-        try {
-            mdNumericId = mdService.getMaintenanceDomain(mdName).get().mdNumericId();
-            yangMd.id(mdNumericId);
-        } catch (NoSuchElementException | IllegalArgumentException e) {
-            //The MD has probably been deleted
-            // try to get numeric id values from oldMd
-            log.debug("Could not get MD details from MD service during deletion of MEP {}." +
-                    "Continuing with values from event", new MepKeyId(mdName, maName, mepId), e);
-            yangMd.id(oldMd.get().mdNumericId());
-        }
-        yangMd.addToMaintenanceAssociation(yangMa);
-
-        MefCfm mefCfm = new DefaultMefCfm();
-        mefCfm.addToMaintenanceDomain(yangMd);
-
-        MseaCfmOpParam mseaCfmOpParam = new MseaCfmOpParam();
-        mseaCfmOpParam.mefCfm(mefCfm);
-
-        try {
-            mseaCfmService.deleteMseaMep(mseaCfmOpParam, session, DatastoreId.RUNNING);
-            log.info("Deleted MEP {} on device {}", mdName + "/" + maName +
-                    "/" + mepId, handler().data().deviceId());
-            return true;
-        } catch (NetconfException e) {
-            log.error("Unable to delete MEP {} ({}) on device {}",
-                    mdName + "/" + maName + "/" + mepId,
-                    mdNumericId + "/" + maNumericId, handler().data().deviceId(), e);
-            throw new CfmConfigException("Unable to delete MEP :" + e.getMessage());
-        }
-
-    }
-
-    @Override
-    public boolean createMdOnDevice(MdId mdId) throws CfmConfigException {
-        NetconfController controller =
-                checkNotNull(handler().get(NetconfController.class));
-        NetconfSession session = checkNotNull(controller.getDevicesMap()
-                .get(handler().data().deviceId()).getSession());
-
-        CfmMdService cfmMdService = checkNotNull(handler().get(CfmMdService.class));
-        MaintenanceDomain md = cfmMdService.getMaintenanceDomain(mdId).get();
-
-        org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm
-                .mefcfm.MaintenanceDomain yangMd = buildYangMdFromApiMd(md);
-
-        if (md.mdNumericId() <= 0 || md.mdNumericId() > NUMERIC_ID_MAX) {
-            throw new CfmConfigException("Numeric id of MD " + mdId + MUST_1_64_MSG);
-        }
-
-        for (MaintenanceAssociation ma:md.maintenanceAssociationList()) {
-            if (ma.maNumericId() <= 0 || ma.maNumericId() > NUMERIC_ID_MAX) {
-                throw new CfmConfigException("Numeric id of MA " + mdId + MUST_1_64_MSG);
-            }
-            org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain
-                    .MaintenanceAssociation yangMa = buildYangMaFromApiMa(ma);
-            yangMd.addToMaintenanceAssociation(yangMa);
-        }
-
-        MefCfm mefCfm = new DefaultMefCfm();
-        mefCfm.addToMaintenanceDomain(yangMd);
-
-        MseaCfmOpParam mseaCfmOpParam = new MseaCfmOpParam();
-        mseaCfmOpParam.mefCfm(mefCfm);
-
-        MseaCfmNetconfService mseaCfmService =
-                checkNotNull(handler().get(MseaCfmNetconfService.class));
-
-        try {
-            boolean created = mseaCfmService.setMseaCfm(mseaCfmOpParam, session, DatastoreId.RUNNING);
-            log.info("Created MD {} on device {}", mdId.mdName(),
-                    handler().data().deviceId());
-            return created;
-        } catch (NetconfException e) {
-            log.error("Unable to create MD {} on device {}",
-                    mdId.mdName(), handler().data().deviceId(), e);
-            throw new CfmConfigException("Unable to create MD :" + e.getMessage(), e);
-        }
-    }
-
-    @Override
-    public boolean createMaOnDevice(MdId mdId, MaIdShort maId) throws CfmConfigException {
-        NetconfController controller =
-                checkNotNull(handler().get(NetconfController.class));
-        NetconfSession session = checkNotNull(controller.getDevicesMap()
-                .get(handler().data().deviceId()).getSession());
-
-        CfmMdService mdService = checkNotNull(handler().get(CfmMdService.class));
-        MseaCfmOpParam mseaCfmOpParam = getMaYangObject(mdService, mdId, maId);
-        MseaCfmNetconfService mseaCfmService =
-                checkNotNull(handler().get(MseaCfmNetconfService.class));
-
-        try {
-            boolean created = mseaCfmService.setMseaCfm(mseaCfmOpParam, session, DatastoreId.RUNNING);
-            log.info("Created MA {} on device {}", mdId.mdName() + "/" + maId.maName(),
-                    handler().data().deviceId());
-            return created;
-        } catch (NetconfException e) {
-            log.error("Unable to create MA {} on device {}",
-                    mdId.mdName() + "/" + maId.maName(), handler().data().deviceId(), e);
-            throw new CfmConfigException("Unable to create MA :" + e.getMessage(), e);
-        }
-    }
-
-    private static MseaCfmOpParam getMaYangObject(CfmMdService cfmMdService,
-                        MdId mdName, MaIdShort maName) throws CfmConfigException {
-        MaintenanceDomain md = cfmMdService.getMaintenanceDomain(mdName).get();
-        MaintenanceAssociation ma = cfmMdService.getMaintenanceAssociation(mdName, maName).get();
-
-        org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain
-                .MaintenanceAssociation yangMa = buildYangMaFromApiMa(ma);
-
-        org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm
-                .mefcfm.MaintenanceDomain yangMd = buildYangMdFromApiMd(md);
-        yangMd.addToMaintenanceAssociation(yangMa);
-
-        if (md.mdNumericId() <= 0 || md.mdNumericId() > NUMERIC_ID_MAX) {
-            throw new CfmConfigException("Numeric id of MD " + mdName + MUST_1_64_MSG);
-        } else if (ma.maNumericId() <= 0 || ma.maNumericId() > NUMERIC_ID_MAX) {
-            throw new CfmConfigException("Numeric id of MA " + maName + MUST_1_64_MSG);
-        }
-
-        MefCfm mefCfm = new DefaultMefCfm();
-        mefCfm.addToMaintenanceDomain(yangMd);
-
-        MseaCfmOpParam mseaCfmOpParam = new MseaCfmOpParam();
-        mseaCfmOpParam.mefCfm(mefCfm);
-
-        return mseaCfmOpParam;
-    }
-
-    @Override
-    public boolean deleteMdOnDevice(MdId mdId, Optional<MaintenanceDomain> oldMd)
-            throws CfmConfigException {
-        NetconfController controller =
-                checkNotNull(handler().get(NetconfController.class));
-        NetconfSession session = controller.getDevicesMap()
-                .get(handler().data().deviceId()).getSession();
-
-        //First check if this MD is known to ONOS if it is does it have MAs and
-        // do they have any Meps known to ONOS. If there are Meps throw an exception -
-        // the Meps should have been deleted first
-        //If there are none known to ONOS we do not check for Meps on the actual device
-        // - there might might be some orphaned ones down there - we want to delete these
-        CfmMdService mdService = checkNotNull(handler().get(CfmMdService.class));
-        MseaCfmNetconfService mseaCfmService =
-                checkNotNull(handler().get(MseaCfmNetconfService.class));
-
-        MdNameAndTypeCombo mdName = getYangMdNameFromApiMdId(mdId);
-        org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.MaintenanceDomain yangMd =
-                new DefaultMaintenanceDomain();
-        Short mdNumericId = null;
-        try {
-            mdNumericId = mdService.getMaintenanceDomain(mdId).get().mdNumericId();
-            yangMd.id(mdNumericId);
-        } catch (NoSuchElementException e) {
-            log.debug("Cannot get numericId of MD from service - getting from oldValue", e);
-            yangMd.id(oldMd.get().mdNumericId());
-        }
-
-        MefCfm mefCfm = new DefaultMefCfm();
-        mefCfm.addToMaintenanceDomain(yangMd);
-
-        MseaCfmOpParam mseaCfmOpParam = new MseaCfmOpParam();
-        mseaCfmOpParam.mefCfm(mefCfm);
-
-        try {
-            boolean deleted = mseaCfmService.deleteMseaMd(mseaCfmOpParam, session, DatastoreId.RUNNING);
-            log.info("Deleted MD {} on device {}", mdName, handler().data().deviceId());
-            return deleted;
-        } catch (NetconfException e) {
-            log.error("Unable to delete MD {} ({}) on device {}",
-                    mdName, mdNumericId, handler().data().deviceId(), e);
-            throw new CfmConfigException("Unable to delete MD :" + e.getMessage(), e);
-        }
-
-    }
-
-    @Override
-    public boolean deleteMaOnDevice(MdId mdId, MaIdShort maId, Optional<MaintenanceDomain> oldMd)
-            throws CfmConfigException {
-        NetconfController controller =
-                checkNotNull(handler().get(NetconfController.class));
-        NetconfSession session = controller.getDevicesMap()
-                .get(handler().data().deviceId()).getSession();
-
-        CfmMdService mdService = checkNotNull(handler().get(CfmMdService.class));
-
-        MseaCfmNetconfService mseaCfmService =
-                checkNotNull(handler().get(MseaCfmNetconfService.class));
-
-        org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain
-                .MaintenanceAssociation yangMa = new DefaultMaintenanceAssociation();
-        Short maNumericId = null;
-        try {
-            maNumericId =
-                    mdService.getMaintenanceAssociation(mdId, maId).get().maNumericId();
-            yangMa.id(maNumericId);
-        } catch (NoSuchElementException e) {
-            log.debug("Cannot get numericId of MA from service - getting from oldValue", e);
-            yangMa.id(getMaNumericId(oldMd.get(), maId));
-        }
-
-        org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.MaintenanceDomain yangMd =
-                new DefaultMaintenanceDomain();
-        Short mdNumericId = null;
-        try {
-            mdNumericId = mdService.getMaintenanceDomain(mdId).get().mdNumericId();
-            yangMd.id(mdNumericId);
-        } catch (NoSuchElementException e) {
-            log.debug("Cannot get numericId of MD from service - getting from oldValue", e);
-            yangMd.id(oldMd.get().mdNumericId());
-        }
-        yangMd.addToMaintenanceAssociation(yangMa);
-
-        MefCfm mefCfm = new DefaultMefCfm();
-        mefCfm.addToMaintenanceDomain(yangMd);
-
-        MseaCfmOpParam mseaCfmOpParam = new MseaCfmOpParam();
-        mseaCfmOpParam.mefCfm(mefCfm);
-
-        try {
-            boolean deleted = mseaCfmService.deleteMseaMa(mseaCfmOpParam, session, DatastoreId.RUNNING);
-            log.info("Deleted MA {} ({})on device {}", mdId.mdName() + "/" + maId.maName(),
-                    mdNumericId + "/" + maNumericId, handler().data().deviceId());
-            return deleted;
-        } catch (NetconfException e) {
-            log.error("Unable to delete MA {} ({}) on device {}",
-                    mdId.mdName() + "/" + maId.maName(),
-                    mdNumericId + "/" + maNumericId, handler().data().deviceId(), e);
-            throw new CfmConfigException("Unable to delete MA :" + e.getMessage(), e);
-        }
-    }
-
-    @Override
-    public boolean createMaRemoteMepOnDevice(MdId mdId, MaIdShort maId, MepId remoteMep) throws CfmConfigException {
-        return crDelMaRemoteMep(mdId, maId, remoteMep, true);
-    }
-
-    @Override
-    public boolean deleteMaRemoteMepOnDevice(MdId mdId, MaIdShort maId, MepId remoteMep) throws CfmConfigException {
-        return crDelMaRemoteMep(mdId, maId, remoteMep, false);
-    }
-
-    private boolean crDelMaRemoteMep(MdId mdId, MaIdShort maId, MepId remoteMep,
-                                     boolean isCreate) throws CfmConfigException {
-        NetconfController controller =
-                checkNotNull(handler().get(NetconfController.class));
-        NetconfSession session = controller.getDevicesMap()
-                .get(handler().data().deviceId()).getSession();
-
-        CfmMdService mdService = checkNotNull(handler().get(CfmMdService.class));
-
-        Short mdNumericId = mdService.getMaintenanceDomain(mdId).get().mdNumericId();
-        Short maNumericId =
-                mdService.getMaintenanceAssociation(mdId, maId).get().maNumericId();
-
-        MseaCfmNetconfService mseaCfmService =
-                checkNotNull(handler().get(MseaCfmNetconfService.class));
-
-        org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain
-                .MaintenanceAssociation yangMa = new DefaultMaintenanceAssociation();
-        yangMa.id(maNumericId);
-        yangMa.addToRemoteMeps(MepIdType.of(remoteMep.value()));
-
-        org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.MaintenanceDomain yangMd =
-                new DefaultMaintenanceDomain();
-        yangMd.id(mdNumericId);
-        yangMd.addToMaintenanceAssociation(yangMa);
-
-        MefCfm mefCfm = new DefaultMefCfm();
-        mefCfm.addToMaintenanceDomain(yangMd);
-
-        MseaCfmOpParam mseaCfmOpParam = new MseaCfmOpParam();
-        mseaCfmOpParam.mefCfm(mefCfm);
-
-        try {
-            boolean result;
-            if (isCreate) {
-                result = mseaCfmService.setMseaCfm(mseaCfmOpParam, session, DatastoreId.RUNNING);
-            } else {
-                result = mseaCfmService.deleteMseaMaRMep(mseaCfmOpParam, session, DatastoreId.RUNNING);
-            }
-            log.info("{} Remote MEP {} in MA {} on device {}", isCreate ? "Created" : "Deleted",
-                    remoteMep, mdId.mdName() + "/" + maId.maName(), handler().data().deviceId());
-            return result;
-        } catch (NetconfException e) {
-            log.error("Unable to {} RemoteMep {} in MA {} on device {}",
-                    isCreate ? "create" : "delete", remoteMep, mdId.mdName() + "/" + maId.maName(),
-                    handler().data().deviceId(), e);
-            throw new CfmConfigException("Unable to " + (isCreate ? "create" : "delete")
-                    + " Remote Mep:" + e.getMessage(), e);
-        }
-    }
-
-
-    @Override
-    public void transmitLoopback(MdId mdName, MaIdShort maName, MepId mepId,
-            MepLbCreate lbCreate) throws CfmConfigException {
-        NetconfController controller =
-                checkNotNull(handler().get(NetconfController.class));
-        NetconfSession session = controller.getDevicesMap()
-                .get(handler().data().deviceId()).getSession();
-        MseaCfmNetconfService mseaCfmService =
-                checkNotNull(handler().get(MseaCfmNetconfService.class));
-        CfmMdService mdService = checkNotNull(handler().get(CfmMdService.class));
-
-        Short mdNumericId = mdService.getMaintenanceDomain(mdName).get().mdNumericId();
-        Short maNumericId =
-                mdService.getMaintenanceAssociation(mdName, maName).get().maNumericId();
-
-        TransmitLoopbackInput lb = new DefaultTransmitLoopbackInput();
-        lb.maintenanceDomain(mdNumericId);
-        lb.maintenanceAssociation(maNumericId);
-        lb.maintenanceAssociationEndPoint(mepId.id());
-        if (lbCreate.numberMessages() != null) {
-            lb.numberOfMessages(lbCreate.numberMessages());
-        }
-        if (lbCreate.vlanDropEligible() != null) {
-            lb.vlanDropEligible(lbCreate.vlanDropEligible());
-        }
-
-        if (lbCreate.remoteMepId() != null) {
-            org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.targetaddressgroup.addresstype
-            .MepId yangMepId = new DefaultMepId();
-            yangMepId.mepId(MepIdType.of(lbCreate.remoteMepId().id()));
-            TargetAddress ta = new DefaultTargetAddress();
-            ta.addressType(yangMepId);
-            lb.targetAddress(ta);
-        } else if (lbCreate.remoteMepAddress() != null) {
-            org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.targetaddressgroup.addresstype
-            .MacAddress yangMacAddress = new DefaultMacAddress();
-            yangMacAddress.macAddress(
-                    org.onosproject.yang.gen.v1.ietfyangtypes.rev20130715.ietfyangtypes
-                    .MacAddress.of(lbCreate.remoteMepAddress().toString()));
-            TargetAddress ta = new DefaultTargetAddress();
-            ta.addressType(yangMacAddress);
-            lb.targetAddress(ta);
-        } else {
-            throw new CfmConfigException("Either a remote MEP ID or Remote MEP "
-                    + "MacAddress must be specified when calling Transmit Loopback");
-        }
-
-        if (lbCreate.dataTlvHex() != null && !lbCreate.dataTlvHex().isEmpty()) {
-            lb.dataTlv(HexString.fromHexString(lbCreate.dataTlvHex()));
-        }
-        if (lbCreate.vlanPriority() != null) {
-            lb.vlanPriority(PriorityType.of((short) lbCreate.vlanPriority().ordinal()));
-        }
-
-        try {
-            mseaCfmService.transmitLoopback(lb, session);
-            log.info("Transmit Loopback called on MEP {} on device {}",
-                    mdName + "/" + maName + "/" + mepId,
-                    handler().data().deviceId());
-        } catch (NetconfException e) {
-            throw new CfmConfigException(e);
-        }
-    }
-
-    @Override
-    public void abortLoopback(MdId mdName, MaIdShort maName, MepId mepId)
-            throws CfmConfigException {
-        NetconfController controller =
-                checkNotNull(handler().get(NetconfController.class));
-        NetconfSession session = controller.getDevicesMap()
-                .get(handler().data().deviceId()).getSession();
-        MseaCfmNetconfService mseaCfmService =
-                checkNotNull(handler().get(MseaCfmNetconfService.class));
-        CfmMdService mdService = checkNotNull(handler().get(CfmMdService.class));
-
-        Short mdNumericId = mdService.getMaintenanceDomain(mdName).get().mdNumericId();
-        Short maNumericId =
-                mdService.getMaintenanceAssociation(mdName, maName).get().maNumericId();
-
-        AbortLoopbackInput lbAbort = new DefaultAbortLoopbackInput();
-        lbAbort.maintenanceDomain(mdNumericId);
-        lbAbort.maintenanceAssociation(maNumericId);
-        lbAbort.maintenanceAssociationEndPoint(mepId.id());
-
-        try {
-            mseaCfmService.abortLoopback(lbAbort, session);
-            log.info("Loopback on MEP {} on device {} aborted",
-                    mdName + "/" + maName + "/" + mepId,
-                    handler().data().deviceId());
-        } catch (NetconfException e) {
-            throw new CfmConfigException(e);
-        }
-    }
-
-    @Override
-    public void transmitLinktrace(MdId mdName, MaIdShort maName, MepId mepId,
-            MepLtCreate ltCreate) {
-        throw new UnsupportedOperationException("Not yet implemented");
-    }
-
-    private static org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm
-            .MaintenanceDomain buildYangMdFromApiMd(MaintenanceDomain md)
-            throws CfmConfigException {
-        MdNameAndTypeCombo mdName = getYangMdNameFromApiMdId(md.mdId());
-
-        org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm
-                .MaintenanceDomain mdYang = new DefaultMaintenanceDomain();
-        mdYang.id(md.mdNumericId());
-        mdYang.mdNameAndTypeCombo(mdName);
-        mdYang.mdLevel(MdLevelType.of((short) md.mdLevel().ordinal()));
-
-        return mdYang;
-    }
-
-    private static org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm
-            .maintenancedomain.MaintenanceAssociation buildYangMaFromApiMa(
-                        MaintenanceAssociation apiMa) throws CfmConfigException {
-
-        MaNameAndTypeCombo maName = MaNameUtil.getYangMaNameFromApiMaId(apiMa.maId());
-
-        org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain
-                .MaintenanceAssociation yamgMa = new DefaultMaintenanceAssociation();
-        yamgMa.maNameAndTypeCombo(maName);
-
-        for (MepId rmep:apiMa.remoteMepIdList()) {
-            yamgMa.addToRemoteMeps(MepIdType.of(rmep.id()));
-        }
-
-        if (apiMa.ccmInterval() != null) {
-            yamgMa.ccmInterval(getYangCcmIntervalFromApi(apiMa.ccmInterval()));
-        }
-
-        if (apiMa.componentList() == null || apiMa.componentList().size() != COMPONENT_LIST_SIZE) {
-            throw new CfmConfigException("EA1000 supports only 1 Component in an MA");
-        }
-
-        Component maComponent = apiMa.componentList().iterator().next();
-        if (maComponent.vidList() == null || maComponent.vidList().size() < VIDLIST_SIZE_MIN) {
-            throw new CfmConfigException("EA1000 requires at least 1 VID in "
-                    + "the Component of an MA");
-        }
-        ComponentList compList = new DefaultComponentList();
-        for (VlanId vid:maComponent.vidList()) {
-            compList.addToVid(VlanIdType.of(vid.toShort()));
-        }
-
-        if (maComponent.tagType() != null) {
-            switch (maComponent.tagType()) {
-            case VLAN_STAG:
-                compList.tagType(TagTypeEnum.VLAN_STAG);
-                break;
-            case VLAN_CTAG:
-                compList.tagType(TagTypeEnum.VLAN_CTAG);
-                break;
-            case VLAN_NONE:
-            default:
-                compList.tagType(TagTypeEnum.VLAN_NONE);
-                break;
-            }
-        }
-
-        yamgMa.componentList(compList);
-        yamgMa.id(apiMa.maNumericId());
-        return yamgMa;
-    }
-
-    private static CcmIntervalEnum getYangCcmIntervalFromApi(
-            MaintenanceAssociation.CcmInterval cci) throws CfmConfigException {
-        switch (cci) {
-            case INTERVAL_3MS:
-                return CcmIntervalEnum.YANGAUTOPREFIX3_3MS;
-            case INTERVAL_10MS:
-                return CcmIntervalEnum.YANGAUTOPREFIX10MS;
-            case INTERVAL_100MS:
-                return CcmIntervalEnum.YANGAUTOPREFIX100MS;
-            case INTERVAL_1S:
-                return CcmIntervalEnum.YANGAUTOPREFIX1S;
-            default:
-                throw new CfmConfigException("EA1000 only supports "
-                        + "3ms, 10ms, 100ms and 1s for CCM Interval. Rejecting: "
-                        + cci.name());
-        }
-    }
-
-    private static MaintenanceAssociationEndPoint buildYangMepFromApiMep(Mep mep)
-            throws CfmConfigException {
-        MaintenanceAssociationEndPoint mepBuilder =
-                                    new DefaultMaintenanceAssociationEndPoint();
-        mepBuilder.mepIdentifier(MepIdType.of(mep.mepId().id()));
-        ContinuityCheck cc = new DefaultContinuityCheck();
-        cc.cciEnabled(mep.cciEnabled());
-        mepBuilder.continuityCheck(cc);
-        mepBuilder.ccmLtmPriority(
-                        PriorityType.of((short) mep.ccmLtmPriority().ordinal()));
-        mepBuilder.administrativeState(mep.administrativeState());
-
-        if (mep.direction() == MepDirection.UP_MEP) {
-            throw new CfmConfigException("EA1000 only supports DOWN Meps");
-        }
-
-        if (mep.port() == null || mep.port().toLong() < MEP_PORT_MIN
-                                    || mep.port().toLong() > MEP_PORT_MAX) {
-            throw new CfmConfigException("EA1000 has only ports 0 and 1. "
-                    + "Rejecting Port: " + mep.port());
-        }
-        mepBuilder.yangAutoPrefixInterface(
-                (mep.port().toLong() == 0) ? InterfaceEnum.ETH0 : InterfaceEnum.ETH1);
-
-        return mepBuilder;
-    }
-
-    private MepEntry buildApiMepEntryFromYangMep(
-            MaintenanceAssociationEndPoint yangMep, DeviceId deviceId,
-            org.onosproject.yang.gen.v1.mseacfm.rev20160229.
-                    mseacfm.mefcfm.MaintenanceDomain replyMd,
-            org.onosproject.yang.gen.v1.mseacfm.rev20160229.
-                    mseacfm.mefcfm.maintenancedomain.MaintenanceAssociation replyMa)
-            throws CfmConfigException {
-        MepId mepId = MepId.valueOf((short) yangMep.mepIdentifier().uint16());
-        MepEntry.MepEntryBuilder builder = DefaultMepEntry.builder(mepId,
-                deviceId,
-                (yangMep.yangAutoPrefixInterface() == InterfaceEnum.ETH0) ?
-                        PortNumber.portNumber(0) : PortNumber.portNumber(1),
-                MepDirection.DOWN_MEP, //Always down for EA1000
-                getApiMdIdFromYangMdName(replyMd.mdNameAndTypeCombo()),
-                getApiMaIdFromYangMaName(replyMa.maNameAndTypeCombo()));
-
-        if (yangMep.loopback() != null) {
-            MepLbEntryBuilder lbEntryBuilder = DefaultMepLbEntry.builder();
-            if (yangMep.loopback().repliesReceived() != null) {
-                lbEntryBuilder = lbEntryBuilder.countLbrReceived(
-                        yangMep.loopback().repliesReceived().uint32());
-            }
-            if (yangMep.loopback().repliesTransmitted() != null) {
-                lbEntryBuilder = lbEntryBuilder.countLbrTransmitted(
-                        yangMep.loopback().repliesTransmitted().uint32());
-            }
-            builder.loopbackAttributes(lbEntryBuilder.build());
-        }
-
-        if (yangMep.remoteMepDatabase() != null &&
-                yangMep.remoteMepDatabase().remoteMep() != null) {
-            for (org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm
-                    .maintenancedomain.maintenanceassociation
-                    .maintenanceassociationendpoint.remotemepdatabase.RemoteMep
-                    rmep:yangMep.remoteMepDatabase().remoteMep()) {
-                builder = builder.addToActiveRemoteMepList(
-                        getApiRemoteMepFromYangRemoteMep(rmep));
-            }
-        }
-
-        if (yangMep.ccmLtmPriority() != null) {
-            builder = (MepEntry.MepEntryBuilder) builder.ccmLtmPriority(
-                    Priority.values()[yangMep.ccmLtmPriority().uint8()]);
-        }
-
-        //And the the state attributes
-        builder = (MepEntry.MepEntryBuilder) builder
-                .macAddress(MacAddress.valueOf(yangMep.macAddress().toString()))
-                .administrativeState(yangMep.administrativeState())
-                .cciEnabled(yangMep.continuityCheck().cciEnabled());
-
-        AugmentedMseaCfmMaintenanceAssociationEndPoint augmentedyangMep = yangMep
-                .augmentation(DefaultAugmentedMseaCfmMaintenanceAssociationEndPoint.class);
-
-        if (augmentedyangMep != null && augmentedyangMep.lastDefectSent() != null)  {
-            builder = builder
-                .activeXconCcmDefect(augmentedyangMep.lastDefectSent().bits()
-                            .get(Bits.CROSS_CONNECT_CCM.bits()))
-                .activeErrorCcmDefect(augmentedyangMep.lastDefectSent().bits()
-                        .get(Bits.INVALID_CCM.bits()))
-                .activeMacStatusDefect(augmentedyangMep.lastDefectSent().bits()
-                        .get(Bits.REMOTE_MAC_ERROR.bits()))
-                .activeRdiCcmDefect(augmentedyangMep.lastDefectSent().bits()
-                        .get(Bits.REMOTE_RDI.bits()))
-                .activeRemoteCcmDefect(augmentedyangMep.lastDefectSent().bits()
-                        .get(Bits.REMOTE_INVALID_CCM.bits()));
-        }
-
-        return builder.buildEntry();
-    }
-
-    private RemoteMepEntry getApiRemoteMepFromYangRemoteMep(
-            org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.
-            maintenanceassociation.maintenanceassociationendpoint.remotemepdatabase.
-            RemoteMep yangRemoteMep) throws CfmConfigException {
-
-        MepId remoteMepId = MepId.valueOf((short) yangRemoteMep.remoteMepId().uint16());
-        RemoteMepStateTypeEnum state = RemoteMepStateTypeEnum.FAILED;
-        if (yangRemoteMep.remoteMepState() != null) {
-            state = yangRemoteMep.remoteMepState().enumeration();
-        }
-        RemoteMepEntryBuilder rmepBuilder = DefaultRemoteMepEntry.builder(
-                    remoteMepId, RemoteMepState.valueOf("RMEP_" + state.name()))
-                .rdi(yangRemoteMep.rdi());
-        if (yangRemoteMep.macAddress() != null) {
-            rmepBuilder = rmepBuilder.macAddress(
-                    MacAddress.valueOf(yangRemoteMep.macAddress().toString()));
-        }
-        if (yangRemoteMep.failedOkTime() != null) {
-            //Currently EA1000 is reporting this as 1/1000s even though yang type
-            // is time ticks 1/100s - to be fixed
-            rmepBuilder = rmepBuilder.failedOrOkTime(Duration.ofMillis(
-                    yangRemoteMep.failedOkTime().uint32()));
-        }
-        if (yangRemoteMep.portStatusTlv() != null) {
-            rmepBuilder = rmepBuilder.portStatusTlvType(PortStatusTlvType.valueOf(
-                    "PS_" + yangRemoteMep.portStatusTlv().enumeration().name()));
-        }
-        if (yangRemoteMep.interfaceStatusTlv() != null) {
-            rmepBuilder = rmepBuilder.interfaceStatusTlvType(InterfaceStatusTlvType.valueOf(
-                    "IS_" + yangRemoteMep.interfaceStatusTlv().enumeration().name()));
-        }
-        return rmepBuilder.build();
-    }
-
-    private static short getMaNumericId(MaintenanceDomain md, MaIdShort maId) {
-        return md.maintenanceAssociationList().stream()
-                .filter(ma -> maId.equals(ma.maId()))
-                .findFirst().get().maNumericId();
-    }
-}
diff --git a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/EA1000FlowRuleProgrammable.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/EA1000FlowRuleProgrammable.java
deleted file mode 100644
index 1e0dfd9..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/EA1000FlowRuleProgrammable.java
+++ /dev/null
@@ -1,977 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Foundation
- *
- * 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 com.google.common.base.Preconditions.checkNotNull;
-import static org.slf4j.LoggerFactory.getLogger;
-
-import java.math.BigInteger;
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-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;
-import org.onlab.packet.EthType.EtherType;
-import org.onlab.packet.IpPrefix;
-import org.onlab.packet.VlanId;
-import org.onosproject.core.ApplicationId;
-import org.onosproject.core.CoreService;
-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;
-import org.onosproject.net.flow.DefaultFlowEntry;
-import org.onosproject.net.flow.DefaultFlowRule;
-import org.onosproject.net.flow.DefaultTrafficSelector;
-import org.onosproject.net.flow.DefaultTrafficTreatment;
-import org.onosproject.net.flow.FlowEntry;
-import org.onosproject.net.flow.FlowEntry.FlowEntryState;
-import org.onosproject.net.flow.FlowRule;
-import org.onosproject.net.flow.FlowRuleProgrammable;
-import org.onosproject.net.flow.TrafficSelector;
-import org.onosproject.net.flow.TrafficTreatment;
-import org.onosproject.net.flow.criteria.Criteria;
-import org.onosproject.net.flow.criteria.Criterion;
-import org.onosproject.net.flow.criteria.Criterion.Type;
-import org.onosproject.net.flow.criteria.PortCriterion;
-import org.onosproject.net.flow.criteria.VlanIdCriterion;
-import org.onosproject.net.flow.instructions.Instruction;
-import org.onosproject.net.flow.instructions.L2ModificationInstruction;
-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.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;
-
-/**
- * An implementation of the FlowRuleProgrammable behaviour for the EA10000 device.
- *
- * This device is not a native Open Flow device. It has only a NETCONF interface for configuration
- * status retrieval and notifications. It supports only a small subset of OpenFlow rules.<br>
- *
- * The device supports only:<br>
- * 1) Open flow rules that blocks certain IP address ranges, but only those incoming on Port 0
- *    and has a limit of 10 such rules<br>
- * 2) Open flow rules that PUSH, POP and OVERWRITE VLAN tags on both ports. This can push and overwrite
- *    both C-TAGs (0x8100) and S-TAGs (0x88a8).
- */
-public class EA1000FlowRuleProgrammable extends AbstractHandlerBehaviour implements FlowRuleProgrammable {
-
-    public static final int RADIX_16 = 16;
-    protected final Logger log = getLogger(getClass());
-    public static final String MICROSEMI_DRIVERS = "com.microsemi.drivers";
-    public static final int PRIORITY_DEFAULT = 50000;
-    //To protect the NETCONF session from concurrent access across flow addition and removal
-    static Semaphore sessionMutex = new Semaphore(1);
-
-    /**
-     * Get the flow entries that are present on the EA1000.
-     * Since the EA1000 does not have any 'real' flow entries these are retrieved from 2 configuration
-     * areas on the EA1000 NETCONF model - from SA filtering YANG model and from EVC UNI YANG model.<br>
-     * The flow entries must match exactly the FlowRule entries in the ONOS store. If they are not an
-     * exact match the device will be requested to remove those flows and the FlowRule will stay in a
-     * PENDING_ADD state.
-     * @return A collection of Flow Entries
-     */
-    @Override
-    public Collection<FlowEntry> getFlowEntries() {
-        Collection<FlowEntry> flowEntryCollection = new HashSet<>();
-
-        UniSideInterfaceAssignmentEnum portAssignment = UniSideInterfaceAssignmentEnum.UNI_C_ON_HOST;
-        NetconfController controller = checkNotNull(handler().get(NetconfController.class));
-        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 =
-                checkNotNull(handler().get(MseaSaFilteringNetconfService.class));
-        MseaUniEvcServiceNetconfService mseaUniEvcServiceSvc =
-                checkNotNull(handler().get(MseaUniEvcServiceNetconfService.class));
-        log.debug("getFlowEntries() called on EA1000FlowRuleProgrammable");
-
-        //First get the MseaSaFiltering rules
-        SourceIpaddressFiltering sip =
-                new DefaultSourceIpaddressFiltering();
-
-        MseaSaFilteringOpParam op =
-                new MseaSaFilteringOpParam();
-        op.sourceIpaddressFiltering(sip);
-
-        try {
-            MseaSaFiltering saFilteringCurrent =
-                    mseaSaFilteringService.getMseaSaFiltering(op, session);
-            if (saFilteringCurrent != null &&
-                    saFilteringCurrent.sourceIpaddressFiltering() != null) {
-                flowEntryCollection.addAll(
-                        convertSaFilteringToFlowRules(saFilteringCurrent, appId));
-            }
-        } catch (NetconfException 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);
-                return flowEntryCollection;
-            }
-        }
-
-
-        //Then get the EVCs - there will be a flow entry per EVC
-        MefServices mefServices = new DefaultMefServices();
-        mefServices.uni(new DefaultUni());
-
-        MseaUniEvcServiceOpParam mseaUniEvcServiceFilter = new MseaUniEvcServiceOpParam();
-        mseaUniEvcServiceFilter.mefServices(mefServices);
-        try {
-            MseaUniEvcService uniEvcCurrent =
-                    mseaUniEvcServiceSvc.getConfigMseaUniEvcService(mseaUniEvcServiceFilter,
-                            session, DatastoreId.RUNNING);
-
-            flowEntryCollection.addAll(
-                    convertEvcUniToFlowRules(uniEvcCurrent, portAssignment));
-
-        } catch (NetconfException 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;
-    }
-
-    /**
-     * Apply the flow entries to the EA1000.
-     * Since the EA1000 does not have any 'real' flow entries these are converted 2 configuration
-     * areas on the EA1000 NETCONF model - to SA filtering YANG model and to EVC UNI YANG model.<br>
-     * Only a subset of the possible OpenFlow rules are supported. Any rule that's not handled
-     * will not be in the returned set.
-     *
-     * @param rules A collection of Flow Rules to be applied to the EA1000
-     * @return A collection of the Flow Rules that have been added.
-     */
-    @Override
-    public Collection<FlowRule> applyFlowRules(Collection<FlowRule> rules) {
-        Collection<FlowRule> frAdded = new HashSet<>();
-        if (rules == null || rules.isEmpty()) {
-            return rules;
-        }
-        NetconfController controller = checkNotNull(handler().get(NetconfController.class));
-        NetconfSession session = controller.getDevicesMap().get(handler().data().deviceId()).getSession();
-        MseaSaFilteringNetconfService mseaSaFilteringService =
-                checkNotNull(handler().get(MseaSaFilteringNetconfService.class));
-        MseaUniEvcServiceNetconfService mseaUniEvcServiceSvc =
-                checkNotNull(handler().get(MseaUniEvcServiceNetconfService.class));
-        log.debug("applyFlowRules() called on EA1000FlowRuleProgrammable with {} rules.", rules.size());
-        // TODO: Change this so it's dynamically driven
-        UniSideInterfaceAssignmentEnum portAssignment = UniSideInterfaceAssignmentEnum.UNI_C_ON_HOST;
-
-        List<SourceAddressRange> saRangeList = new ArrayList<>();
-        Map<Integer, Evc> evcMap = new HashMap<>();
-
-        //Retrieve the list of actual EVCs and the CeVlanMaps from device
-        List<Evc> activeEvcs = new ArrayList<>();
-        try {
-            sessionMutex.acquire();
-            MseaUniEvcService evcResponse =
-                    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());
-            }
-        } catch (NetconfException | InterruptedException e1) {
-            log.warn("Unexpected error on applyFlowRules", e1);
-        }
-
-        for (FlowRule fr : rules) {
-
-            // IP SA Filtering can only apply to Port 0 optics
-            if (fr.selector().getCriterion(Type.IPV4_SRC) != null &&
-                    fr.selector().getCriterion(Type.IN_PORT) != null &&
-                    ((PortCriterion) fr.selector().getCriterion(Type.IN_PORT)).port().toLong() == 0) {
-                parseFrForSaRange(frAdded, saRangeList, fr);
-
-            // EVCs will be defined by Flow Rules relating to VIDs
-            } else if (fr.selector().getCriterion(Type.VLAN_VID) != null &&
-                    fr.selector().getCriterion(Type.IN_PORT) != null) {
-                //There could be many Flow Rules for one EVC depending on the ceVlanMap
-                //Cannot build up the EVC until we know the details - the key is the tableID and port
-                parseFrForEvcs(frAdded, evcMap, activeEvcs, portAssignment, fr);
-            } else {
-                log.info("Unexpected Flow Rule type applied: " + fr);
-            }
-        }
-
-        //If there are IPv4 Flow Rules created commit them now through the
-        //MseaSaFiltering service
-        if (!saRangeList.isEmpty()) {
-            try {
-                mseaSaFilteringService.setMseaSaFiltering(
-                            buildSaFilteringObject(saRangeList), session, DatastoreId.RUNNING);
-            } catch (NetconfException e) {
-                log.error("Error applying Flow Rules to SA Filtering - " +
-                        "will try again: " + e.getMessage(), e);
-                sessionMutex.release();
-                return frAdded;
-            }
-        }
-        //If there are EVC flow rules then populate the MseaUniEvc part of EA1000
-        if (evcMap.size() > 0) {
-            List<Evc> evcList = evcMap.entrySet().stream()
-                    .map(x -> x.getValue())
-                    .collect(Collectors.toList());
-            Uni uni = new DefaultUni();
-            URI deviceName = handler().data().deviceId().uri();
-            uni.name(new Identifier45("Uni-on-"
-                    + deviceName.getSchemeSpecificPart()));
-            uni.evc(evcList);
-
-            List<BwpGroup> bwpGroupList = new ArrayList<>();
-            BwpGroup bwpGrp = new DefaultBwpGroup();
-            bwpGrp.groupIndex((short) 0);
-            bwpGroupList.add(bwpGrp);
-            Profiles profiles = new DefaultProfiles();
-            profiles.bwpGroup(bwpGroupList);
-
-            MefServices mefServices = new DefaultMefServices();
-            mefServices.uni(uni);
-            mefServices.profiles(profiles);
-
-            MseaUniEvcServiceOpParam mseaUniEvcServiceFilter = new MseaUniEvcServiceOpParam();
-            mseaUniEvcServiceFilter.mefServices(mefServices);
-            try {
-                mseaUniEvcServiceSvc.setMseaUniEvcService(mseaUniEvcServiceFilter, session, DatastoreId.RUNNING);
-            } catch (NetconfException e) {
-                log.error("Error applying Flow Rules to EVC - will try again: " + e.getMessage(), e);
-                sessionMutex.release();
-                return frAdded;
-            }
-        }
-        sessionMutex.release();
-        return frAdded;
-    }
-
-    /**
-     * Remove flow rules from the EA1000.
-     * Since the EA1000 does not have any 'real' flow entries these are converted 2 configuration
-     * areas on the EA1000 NETCONF model - to SA filtering YANG model and to EVC UNI YANG model.
-     *
-     * @param rulesToRemove A collection of Flow Rules to be removed to the EA1000
-     * @return A collection of the Flow Rules that have been removed.
-     */
-    @Override
-    public Collection<FlowRule> removeFlowRules(Collection<FlowRule> rulesToRemove) {
-        NetconfController controller = checkNotNull(handler().get(NetconfController.class));
-        NetconfSession session = controller.getDevicesMap().get(handler().data().deviceId()).getSession();
-        MseaSaFilteringNetconfService mseaSaFilteringService =
-                checkNotNull(handler().get(MseaSaFilteringNetconfService.class));
-        MseaUniEvcServiceNetconfService mseaUniEvcServiceSvc =
-                checkNotNull(handler().get(MseaUniEvcServiceNetconfService.class));
-        UniSideInterfaceAssignmentEnum portAssignment = UniSideInterfaceAssignmentEnum.UNI_C_ON_HOST;
-        log.debug("removeFlowRules() called on EA1000FlowRuleProgrammable with {} rules.", rulesToRemove.size());
-
-        if (rulesToRemove.isEmpty()) {
-            return rulesToRemove;
-        }
-
-        //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, 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);
-        }
-
-        List<SourceAddressRange> saRangeList = new ArrayList<>();
-        Map<Integer, String> ceVlanMapMap = new HashMap<>();
-        Map<Integer, List<Short>> flowIdMap = new HashMap<>();
-
-        Collection<FlowRule> rulesRemoved = new HashSet<>();
-        for (FlowRule ruleToRemove : rulesToRemove) {
-            // IP SA Filtering can only apply to Port 0 optics
-            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 sar = new DefaultSourceAddressRange();
-                sar.rangeId((short) ruleToRemove.tableId());
-                acvtiveFiltRanges.remove(Short.valueOf((short) ruleToRemove.tableId()));
-                rulesRemoved.add(ruleToRemove);
-                saRangeList.add(sar);
-
-            } else if (ruleToRemove.selector().getCriterion(Type.VLAN_VID) != null &&
-                    ruleToRemove.selector().getCriterion(Type.IN_PORT) != null) {
-                PortNumber portNumber = ((PortCriterion) ruleToRemove.selector().getCriterion(Type.IN_PORT)).port();
-                VlanId vlanId = ((VlanIdCriterion) ruleToRemove.selector().getCriterion(Type.VLAN_VID)).vlanId();
-                int evcId = ruleToRemove.tableId();
-                int evcKey = (evcId << 2) + (int) portNumber.toLong();
-                String activeCeVlanMap = "";
-                //If this is one of many VLANs belonging to an EVC then we should only remove this VLAN
-                // from the ceVlanMap and not the whole EVC
-                if (!ceVlanMapMap.containsKey(evcKey)) {
-                    for (Evc activeEvc:activeEvcs) {
-                        if (activeEvc.evcIndex() == evcId) {
-                            if (Ea1000Port.fromNum(portNumber.toLong()).nOrC(portAssignment) ==
-                                    UniSide.CUSTOMER) {
-                                activeCeVlanMap = activeEvc.evcPerUni().evcPerUnic().ceVlanMap().string();
-                            } else if (Ea1000Port.fromNum(portNumber.toLong()).nOrC(portAssignment) ==
-                                    UniSide.NETWORK) {
-                                activeCeVlanMap = activeEvc.evcPerUni().evcPerUnin().ceVlanMap().string();
-                            }
-                        }
-                    }
-                }
-
-                ceVlanMapMap.put(evcKey, CeVlanMapUtils.removeFromCeVlanMap(activeCeVlanMap, vlanId.id()));
-                if (!flowIdMap.containsKey(evcKey)) {
-                    flowIdMap.put(evcKey, new ArrayList<>());
-                }
-                flowIdMap.get(evcKey).add(vlanId.id());
-                rulesRemoved.add(ruleToRemove);
-
-            } else {
-                log.warn("Unexpected Flow Rule type removal: " + ruleToRemove);
-            }
-        }
-
-        //If there are IPv4 Flow Rules created commit them now through the
-        //MseaSaFiltering service
-        if (!saRangeList.isEmpty() && acvtiveFiltRanges.isEmpty()) {
-            try {
-                SourceIpaddressFiltering saFilter =
-                        new DefaultSourceIpaddressFiltering();
-                MseaSaFilteringOpParam mseaSaFiltering = new MseaSaFilteringOpParam();
-                mseaSaFiltering.sourceIpaddressFiltering(saFilter);
-
-                mseaSaFilteringService.deleteMseaSaFilteringRange(
-                        mseaSaFiltering, session, DatastoreId.RUNNING);
-            } catch (NetconfException e) {
-                log.debug("Remove FlowRule on MseaSaFilteringService could not delete all SARules - "
-                        + "they may already have been deleted: " + e.getMessage(), e);
-            }
-        } else if (!saRangeList.isEmpty()) {
-            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(), e);
-            }
-        }
-
-        if (!ceVlanMapMap.isEmpty()) {
-            try {
-                mseaUniEvcServiceSvc.removeEvcUniFlowEntries(ceVlanMapMap, flowIdMap,
-                        session, DatastoreId.RUNNING, portAssignment);
-            } catch (NetconfException e) {
-                log.debug("Remove FlowRule on MseaUniEvcService could not delete EVC - "
-                        + "it may already have been deleted: " + e.getMessage(), e);
-            }
-        }
-
-        sessionMutex.release();
-        return rulesRemoved;
-    }
-
-    /**
-     * An internal method for extracting one EVC from a list and returning its ceVlanMap.
-     *
-     * @param evcList - the list of known EVCs
-     * @param evcIndex - the index of the EVC we're looking for
-     * @param side - the side of the UNI
-     * @return - the CEVlanMap we're looking for
-     */
-    private String getCeVlanMapForIdxFromEvcList(List<Evc> evcList, long evcIndex, UniSide side) {
-        if (evcList != null && !evcList.isEmpty()) {
-            for (Evc evc:evcList) {
-                if (evc.evcIndex() == evcIndex && evc.evcPerUni() != null) {
-                    if (side == UniSide.CUSTOMER &&
-                        evc.evcPerUni().evcPerUnic() != null &&
-                        evc.evcPerUni().evcPerUnic().ceVlanMap() != null) {
-                        return evc.evcPerUni().evcPerUnic().ceVlanMap().string();
-                    } else if (side == UniSide.NETWORK &&
-                        evc.evcPerUni().evcPerUnin() != null &&
-                        evc.evcPerUni().evcPerUnin().ceVlanMap() != null) {
-                        return evc.evcPerUni().evcPerUnin().ceVlanMap().string();
-                    }
-                }
-            }
-        }
-
-        return ""; //The EVC required was not in the list
-    }
-
-    /**
-     * An internal method to convert from a FlowRule to SARange.
-     *
-     * @param frList A collection of flow rules
-     * @param saRangeList A list of SARanges
-     * @param fr A flow rule
-     */
-    private void parseFrForSaRange(Collection<FlowRule> frList, List<SourceAddressRange> saRangeList, FlowRule fr) {
-        String ipAddrStr = fr.selector().getCriterion(Type.IPV4_SRC).toString().substring(9);
-        log.debug("Applying IP address to " + ipAddrStr
-                + " (on Port 0) to IP SA Filtering on EA1000 through NETCONF");
-
-        SourceAddressRange sar =
-                new DefaultSourceAddressRange();
-
-        sar.rangeId((short) fr.tableId());
-        sar.name("Flow:" + fr.id().toString());
-        sar.ipv4AddressPrefix(ipAddrStr);
-
-        frList.add(fr);
-        saRangeList.add(sar);
-    }
-
-    private void parseFrForEvcs(Collection<FlowRule> frList, Map<Integer, Evc> evcMap,
-            List<Evc> activeEvcs, UniSideInterfaceAssignmentEnum portAssignment, FlowRule fr) {
-        //There could be many Flow Rules for one EVC depending on the ceVlanMap
-        //Cannot build up the EVC until we know the details - the key is the tableID and port
-        Ea1000Port port = Ea1000Port.fromNum(
-                ((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 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
-            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) {
-                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 {
-                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 evc = new DefaultEvc();
-            EvcPerUnin epun = new CustomEvcPerUnin();
-            EvcPerUnic epuc = new CustomEvcPerUnic();
-            TagManipulation tm = getTagManipulation(fr);
-
-            UniSide side = port.nOrC(portAssignment);
-            String oldCeVlanMap = getCeVlanMapForIdxFromEvcList(activeEvcs, fr.tableId(), side);
-            String newCeVlanMap =
-                    CeVlanMapUtils.addtoCeVlanMap(oldCeVlanMap, sourceVid.id());
-            String oppositeCeVlanMap =
-                    getCeVlanMapForIdxFromEvcList(activeEvcs, fr.tableId(),
-                            port.opposite().nOrC(portAssignment));
-            oppositeCeVlanMap = oppositeCeVlanMap.isEmpty() ? "0" : oppositeCeVlanMap;
-            if (side == UniSide.NETWORK) {
-                epun.ceVlanMap(new ServiceListType(newCeVlanMap));
-                epun.tagManipulation(tm);
-                epun.addToFlowMapping(fm);
-                epun.ingressBwpGroupIndex(getMeterId(fr.treatment()));
-
-                epuc.ceVlanMap(new ServiceListType(oppositeCeVlanMap));
-                epuc.ingressBwpGroupIndex(0);
-            } else {
-                epuc.ceVlanMap(new ServiceListType(newCeVlanMap));
-                epuc.tagManipulation(tm);
-                epuc.addToFlowMapping(fm);
-                epuc.ingressBwpGroupIndex(getMeterId(fr.treatment()));
-
-                epun.ceVlanMap(new ServiceListType(oppositeCeVlanMap));
-                epun.ingressBwpGroupIndex(0);
-            }
-
-            evc.evcIndex(fr.tableId());
-            evc.name(new Identifier45("EVC-" + fr.tableId()));
-
-            DefaultEvcPerUni epu = new DefaultEvcPerUni();
-            epu.evcPerUnin(epun);
-            epu.evcPerUnic(epuc);
-            evc.evcPerUni(epu);
-
-            evcMap.put(evcKey, evc);
-        }
-
-        frList.add(fr);
-    }
-
-
-    private MseaSaFilteringOpParam buildSaFilteringObject(List<SourceAddressRange> saRangeList) {
-        InterfaceEth0 saIf = new DefaultInterfaceEth0();
-        for (SourceAddressRange sa:saRangeList) {
-            saIf.addToSourceAddressRange(sa);
-        }
-        saIf.filterAdminState(FilterAdminStateEnum.BLACKLIST);
-
-        SourceIpaddressFiltering saFilter =
-                new DefaultSourceIpaddressFiltering();
-        saFilter.interfaceEth0(saIf);
-
-        MseaSaFilteringOpParam mseaSaFiltering = new MseaSaFilteringOpParam();
-        mseaSaFiltering.sourceIpaddressFiltering(saFilter);
-
-        return mseaSaFiltering;
-    }
-
-    private Collection<FlowEntry> convertSaFilteringToFlowRules(
-            MseaSaFiltering saFilteringCurrent, ApplicationId appId) {
-        Collection<FlowEntry> flowEntryCollection = new HashSet<>();
-
-        List<SourceAddressRange> saRangelist =
-                saFilteringCurrent.sourceIpaddressFiltering().interfaceEth0().sourceAddressRange();
-        Criterion matchInPort = Criteria.matchInPort(PortNumber.portNumber(0));
-        TrafficSelector.Builder tsBuilder = DefaultTrafficSelector.builder();
-
-        if (saRangelist != null) {
-            for (SourceAddressRange sa : saRangelist) {
-                Criterion matchIpSrc = Criteria.matchIPSrc(IpPrefix.valueOf(sa.ipv4AddressPrefix()));
-
-                TrafficSelector selector = tsBuilder.add(matchIpSrc).add(matchInPort).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], RADIX_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));
-            }
-        }
-        return flowEntryCollection;
-    }
-
-
-    private Collection<FlowEntry> convertEvcUniToFlowRules(
-            MseaUniEvcService uniEvcCurrent, UniSideInterfaceAssignmentEnum portAssignment) {
-        Collection<FlowEntry> flowEntryCollection = new HashSet<>();
-
-        if (uniEvcCurrent == null || uniEvcCurrent.mefServices() == null ||
-                uniEvcCurrent.mefServices().uni() == null || uniEvcCurrent.mefServices().uni().evc() == null) {
-            log.info("No EVC's found when getting flow rules");
-            return flowEntryCollection;
-        }
-
-        for (Evc evc:uniEvcCurrent.mefServices().uni().evc()) {
-            FlowRule.Builder frBuilder = new DefaultFlowRule.Builder();
-            TrafficSelector.Builder tsBuilder = DefaultTrafficSelector.builder();
-
-            TrafficTreatment uniNTreatment = treatmentForUniSde(evc.evcPerUni(), true);
-            //Depending on the ceVlanMap there may be multiple VLans and hence multiple flow entries
-            Short[] vlanIdsUniN =
-                    CeVlanMapUtils.getVlanSet(ceVlanMapForUniSide(evc.evcPerUni(), true));
-            for (Short vlanId:vlanIdsUniN) {
-                if (vlanId == 0) {
-                    continue;
-                }
-                Criterion uniNportCriterion = criterionPortForUniSide(portAssignment, true);
-                TrafficSelector tsUniN = tsBuilder.matchVlanId(VlanId.vlanId(vlanId)).add(uniNportCriterion).build();
-                long flowId = getFlowIdForVlan(evc.evcPerUni().evcPerUnin().flowMapping(), vlanId);
-
-                FlowRule frUniN = frBuilder
-                    .forDevice(handler().data().deviceId())
-                    .withSelector(tsUniN)
-                    .withTreatment(uniNTreatment)
-                    .forTable(Math.toIntExact(evc.evcIndex())) //narrowing to int
-                    .makePermanent()
-                    .withPriority(PRIORITY_DEFAULT)
-                    .withCookie(flowId)
-                    .build();
-                flowEntryCollection.add(new DefaultFlowEntry(frUniN, FlowEntryState.ADDED, 0, 0, 0));
-            }
-
-            TrafficTreatment uniCTreatment = treatmentForUniSde(evc.evcPerUni(), false);
-            //Depending on the ceVlanMap there may be multiple VLans and hence multiple flow entries
-            Short[] vlanIdsUniC =
-                    CeVlanMapUtils.getVlanSet(ceVlanMapForUniSide(evc.evcPerUni(), false));
-            if (vlanIdsUniC != null && vlanIdsUniC.length > 0) {
-                for (Short vlanId:vlanIdsUniC) {
-                    if (vlanId == 0) {
-                        continue;
-                    }
-                    Criterion uniCportCriterion = criterionPortForUniSide(portAssignment, false);
-                    TrafficSelector tsUniC =
-                            tsBuilder.matchVlanId(VlanId.vlanId(vlanId)).add(uniCportCriterion).build();
-                    long flowId = getFlowIdForVlan(evc.evcPerUni().evcPerUnic().flowMapping(), vlanId);
-
-                    FlowRule frUniC = frBuilder
-                            .forDevice(handler().data().deviceId())
-                            .withSelector(tsUniC)
-                            .withTreatment(uniCTreatment)
-                            .forTable(Math.toIntExact(evc.evcIndex())) //narrowing to int
-                            .makePermanent()
-                            .withPriority(PRIORITY_DEFAULT)
-                            .withCookie(flowId)
-                            .build();
-                    flowEntryCollection.add(new DefaultFlowEntry(frUniC, FlowEntryState.ADDED, 0, 0, 0));
-                }
-            }
-        }
-
-        return flowEntryCollection;
-    }
-
-    private long getFlowIdForVlan(List<FlowMapping> fmList, Short vlanId) {
-        if (fmList == null || vlanId == null) {
-            log.warn("Flow Mapping list is null when reading EVCs");
-            return -1L;
-        }
-        for (FlowMapping fm:fmList) {
-            if (fm.ceVlanId().uint16() == vlanId.intValue()) {
-                return fm.flowId().longValue();
-            }
-        }
-        return 0L;
-    }
-
-    private String ceVlanMapForUniSide(
-            EvcPerUni evcPerUni, boolean portN) {
-        if (portN) {
-            return evcPerUni.evcPerUnin().ceVlanMap().string();
-        } else {
-            return evcPerUni.evcPerUnic().ceVlanMap().string();
-        }
-    }
-
-    private Criterion criterionPortForUniSide(
-            UniSideInterfaceAssignmentEnum portAssignment, boolean portN) {
-        boolean cOnOptics = (portAssignment == UniSideInterfaceAssignmentEnum.UNI_C_ON_OPTICS);
-        //If both are true or both are false then return 1
-        int portNum = (cOnOptics == portN) ? 1 : 0;
-        return Criteria.matchInPort(PortNumber.portNumber(portNum));
-    }
-
-    private TrafficTreatment treatmentForUniSde(
-            EvcPerUni evcPerUni, boolean portN) {
-        TrafficTreatment.Builder trBuilder = DefaultTrafficTreatment.builder();
-
-        TagManipulation tm;
-        short meterId;
-        if (portN) {
-            tm = evcPerUni.evcPerUnin().tagManipulation();
-            meterId = (short) evcPerUni.evcPerUnin().ingressBwpGroupIndex();
-        } else {
-            tm = evcPerUni.evcPerUnic().tagManipulation();
-            meterId = (short) evcPerUni.evcPerUnic().ingressBwpGroupIndex();
-        }
-
-        if (meterId > 0L) {
-            trBuilder = trBuilder.meter(MeterId.meterId((long) meterId));
-        }
-
-        if (tm == null) {
-            return trBuilder.build(); //no tag manipulation found
-        }
-
-        if (tm.getClass().equals(DefaultTagPush.class)) {
-            VlanId pushVlanNum = VlanId.vlanId((short) ((TagPush) tm).tagPush().outerTagVlan().uint16());
-            PushTagTypeEnum pushTagType = ((TagPush) tm).tagPush().pushTagType();
-            //Note - the order of elements below MUST match the order of the Treatment in the stored FlowRule
-            // to be an exactMatch. See DefaultFlowRule.exactMatch()
-            trBuilder = trBuilder
-                    .pushVlan(pushTagType.equals(PushTagTypeEnum.PUSHCTAG) ?
-                            EtherType.VLAN.ethType() : EtherType.QINQ.ethType())
-                    .setVlanId(pushVlanNum).transition(Integer.valueOf(0));
-
-        } else if (tm.getClass().equals(DefaultTagPop.class)) {
-            trBuilder = trBuilder.popVlan();
-
-        } else if (tm.getClass().equals(DefaultTagOverwrite.class)) {
-            TagOverwrite to = (TagOverwrite) tm;
-            VlanId ovrVlanNum = VlanId
-                    .vlanId((short) (
-                            //There are 2 classes TagOverwrite - the other one is already imported
-                            to
-                            .tagOverwrite()
-                            .outerTagVlan()
-                            .uint16()));
-            trBuilder = trBuilder.setVlanId(ovrVlanNum);
-
-        }
-
-        return trBuilder.build();
-    }
-
-    private static TagManipulation getTagManipulation(FlowRule fr) {
-        boolean isPop = false;
-        boolean isPush = false;
-        VlanId vlanId = null;
-        EthType ethType = EtherType.VLAN.ethType(); //Default
-        for (Instruction inst:fr.treatment().allInstructions()) {
-            if (inst.type() == Instruction.Type.L2MODIFICATION) {
-                L2ModificationInstruction l2Mod = (L2ModificationInstruction) inst;
-                if (l2Mod.subtype() == L2ModificationInstruction.L2SubType.VLAN_POP) {
-                    isPop = true;
-                } else if (l2Mod.subtype() == L2ModificationInstruction.L2SubType.VLAN_PUSH) {
-                    isPush = true;
-                    ethType = ((ModVlanHeaderInstruction) l2Mod).ethernetType();
-                } else if (l2Mod.subtype() == L2ModificationInstruction.L2SubType.VLAN_ID) {
-                    vlanId = ((ModVlanIdInstruction) l2Mod).vlanId();
-                }
-            }
-        }
-
-        if (isPop) {
-            //The should be no vlanId in this case
-            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 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 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;
-    }
-
-    private static long getMeterId(TrafficTreatment treatment) {
-        return (treatment.metered() != null && treatment.metered().meterId() != null)
-                ? treatment.metered().meterId().id() : 0L;
-    }
-
-    /**
-     * An enumerated type that characterises the 2 port layout of the EA1000 device.
-     * The device is in an SFP package and has only 2 ports, the HOST port which
-     * plugs in to the chassis (Port 1) and the Optics Port on the rear (Port 0).
-     */
-    public enum Ea1000Port {
-        HOST(1),
-        OPTICS(0);
-
-        private int num = 0;
-        private Ea1000Port(int num) {
-            this.num = num;
-        }
-
-        /**
-         * The numerical assignment of this port.
-         * @return The port number
-         */
-        public int portNum() {
-            return num;
-        }
-
-        /**
-         * Return the enumerated value from a port number.
-         * @param num The port number
-         * @return An enumerated value
-         */
-        public static Ea1000Port fromNum(long num) {
-            for (Ea1000Port a:Ea1000Port.values()) {
-                if (a.num == num) {
-                    return a;
-                }
-            }
-            return HOST;
-        }
-
-        /**
-         * Get the port that the UNI-N is present on.
-         * @param side The assignment of UNI-side to port
-         * @return An enumerated value
-         */
-        public static Ea1000Port uniNNum(UniSideInterfaceAssignmentEnum side) {
-            if (side.equals(UniSideInterfaceAssignmentEnum.UNI_C_ON_HOST)) {
-                return OPTICS;
-            } else {
-                return HOST;
-            }
-        }
-
-        /**
-         * Get the port that the UNI-C is present on.
-         * @param side The assignment of UNI-side to port
-         * @return An enumerated value
-         */
-        public static Ea1000Port uniCNum(UniSideInterfaceAssignmentEnum side) {
-            if (side.equals(UniSideInterfaceAssignmentEnum.UNI_C_ON_HOST)) {
-                return HOST;
-            } else {
-                return OPTICS;
-            }
-        }
-
-        /**
-         * Get the port opposite the current port.
-         * @return An enumerated value for the opposite side
-         */
-        public Ea1000Port opposite() {
-            if (this.equals(HOST)) {
-                return OPTICS;
-            } else {
-                return HOST;
-            }
-        }
-
-        /**
-         * Evaluate which side of the UNI on the EA1000 device this port refers to.
-         * @param side The assignment of UNI-side to port
-         * @return An enumerated value representing the UniSide
-         */
-        public UniSide nOrC(UniSideInterfaceAssignmentEnum side) {
-            if ((this == HOST && side == UniSideInterfaceAssignmentEnum.UNI_C_ON_HOST) ||
-                    (this == OPTICS && side == UniSideInterfaceAssignmentEnum.UNI_C_ON_OPTICS)) {
-                return UniSide.CUSTOMER;
-            } else {
-                return UniSide.NETWORK;
-            }
-        }
-    }
-}
diff --git a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/EA1000MeterProvider.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/EA1000MeterProvider.java
deleted file mode 100644
index b524345..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/EA1000MeterProvider.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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.osgi.service.component.annotations.Activate;
-import org.osgi.service.component.annotations.Component;
-import org.osgi.service.component.annotations.Deactivate;
-import org.osgi.service.component.annotations.Reference;
-import org.osgi.service.component.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)
-    protected NetconfController controller;
-
-    @Reference(cardinality = ReferenceCardinality.MANDATORY)
-    protected MeterProviderRegistry providerRegistry;
-
-    @Reference(cardinality = ReferenceCardinality.MANDATORY)
-    protected CoreService coreService;
-
-    @Reference(cardinality = ReferenceCardinality.MANDATORY)
-    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) {
-                        Thread.currentThread().interrupt();
-                        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/ea1000/src/main/java/org/onosproject/drivers/microsemi/EA1000Pipeliner.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/EA1000Pipeliner.java
deleted file mode 100644
index 3631f2e..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/EA1000Pipeliner.java
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Foundation
- *
- * 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.ArrayList;
-import java.util.List;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
-
-import org.onlab.osgi.ServiceDirectory;
-import org.onosproject.drivers.microsemi.EA1000FlowRuleProgrammable.Ea1000Port;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.behaviour.NextGroup;
-import org.onosproject.net.behaviour.Pipeliner;
-import org.onosproject.net.behaviour.PipelinerContext;
-import org.onosproject.net.driver.AbstractHandlerBehaviour;
-import org.onosproject.net.flow.DefaultFlowRule;
-import org.onosproject.net.flow.DefaultTrafficSelector;
-import org.onosproject.net.flow.DefaultTrafficTreatment;
-import org.onosproject.net.flow.FlowRule;
-import org.onosproject.net.flow.FlowRuleOperations;
-import org.onosproject.net.flow.FlowRuleOperationsContext;
-import org.onosproject.net.flow.FlowRuleService;
-import org.onosproject.net.flow.TrafficSelector;
-import org.onosproject.net.flow.TrafficTreatment;
-import org.onosproject.net.flow.criteria.Criterion;
-import org.onosproject.net.flow.criteria.Criterion.Type;
-import org.onosproject.net.flow.criteria.PortCriterion;
-import org.onosproject.net.flow.criteria.VlanIdCriterion;
-import org.onosproject.net.flow.instructions.Instruction;
-import org.onosproject.net.flow.instructions.Instructions;
-import org.onosproject.net.flow.instructions.Instructions.OutputInstruction;
-import org.onosproject.net.flow.instructions.L2ModificationInstruction;
-import org.onosproject.net.flow.instructions.L2ModificationInstruction.ModVlanIdInstruction;
-import org.onosproject.net.flowobjective.FilteringObjective;
-import org.onosproject.net.flowobjective.ForwardingObjective;
-import org.onosproject.net.flowobjective.NextObjective;
-import org.onosproject.net.flowobjective.Objective;
-import org.onosproject.net.flowobjective.ObjectiveError;
-import org.slf4j.Logger;
-
-import com.google.common.cache.Cache;
-import com.google.common.cache.CacheBuilder;
-import com.google.common.cache.RemovalCause;
-import com.google.common.cache.RemovalNotification;
-
-/**
- * Support for FlowObjectives in the EA1000.
- *
- * Used with the CarrierEthernet App
- *
- */
-public class EA1000Pipeliner extends AbstractHandlerBehaviour implements Pipeliner {
-
-    protected final Logger log = getLogger(getClass());
-    protected ServiceDirectory serviceDirectory;
-    protected FlowRuleService flowRuleService;
-    protected DeviceId deviceId;
-    protected Cache<Integer, NextObjective> pendingNext;
-    protected Integer evcIdBase = 1;
-
-    @Override
-    public void init(DeviceId deviceId, PipelinerContext context) {
-        this.serviceDirectory = context.directory();
-        this.deviceId = deviceId;
-
-        flowRuleService = serviceDirectory.get(FlowRuleService.class);
-
-        pendingNext = CacheBuilder.newBuilder()
-                .expireAfterWrite(20, TimeUnit.SECONDS)
-                .removalListener((RemovalNotification<Integer, NextObjective> notification) -> {
-                    if (notification.getCause() == RemovalCause.EXPIRED) {
-                        notification.getValue().context()
-                                .ifPresent(c -> c.onError(notification.getValue(),
-                                        ObjectiveError.FLOWINSTALLATIONFAILED));
-                    }
-                }).build();
-
-        log.debug("Loaded handler behaviour EA1000Pipeliner for " + handler().data().deviceId().uri());
-    }
-
-    @Override
-    public void filter(FilteringObjective filterObjective) {
-        TrafficTreatment.Builder actions;
-        boolean oppositePort = false;
-        int evcId = -1;
-        switch (filterObjective.type()) {
-            case PERMIT:
-                if (filterObjective.meta() == null) {
-                    actions = DefaultTrafficTreatment.builder().add(Instructions.popVlan());
-                } else {
-                    oppositePort = true; //Experimental - push happens on the opposite port
-                    actions = DefaultTrafficTreatment.builder(filterObjective.meta());
-                    if (filterObjective.meta().metered() != null) {
-                        actions.meter(filterObjective.meta().metered().meterId());
-                    }
-                    actions.transition(0);
-                    boolean isPush = false;
-                    int vid = 0;
-                    for (Instruction inst:filterObjective.meta().immediate()) {
-                        if (inst.type() == Instruction.Type.L2MODIFICATION) {
-                            L2ModificationInstruction l2mod = (L2ModificationInstruction) inst;
-                            if (l2mod.subtype() == L2ModificationInstruction.L2SubType.VLAN_PUSH) {
-                                isPush = true;
-                            } else if (l2mod.subtype() == L2ModificationInstruction.L2SubType.VLAN_ID) {
-                                vid = ((ModVlanIdInstruction) l2mod).vlanId().id();
-                            }
-                        }
-                    }
-                    if (isPush && vid > 0) {
-                        evcId = vid;
-                    }
-                }
-                break;
-            case DENY:
-                actions = (filterObjective.meta() == null) ?
-                        DefaultTrafficTreatment.builder() :
-                        DefaultTrafficTreatment.builder(filterObjective.meta());
-                actions.drop();
-                break;
-            default:
-                log.warn("Unknown filter type: {}", filterObjective.type());
-                actions = DefaultTrafficTreatment.builder().drop();
-        }
-
-        TrafficSelector.Builder selector = DefaultTrafficSelector.builder();
-
-        for (Criterion c:filterObjective.conditions()) {
-            if (c.type() == Type.VLAN_VID && evcId == -1) {
-                evcId = ((VlanIdCriterion) c).vlanId().id();
-            }
-            selector.add(c);
-        }
-
-        if (filterObjective.key() != null) {
-            if (oppositePort) {
-                //Experimental
-                Ea1000Port port = Ea1000Port.fromNum(((PortCriterion) filterObjective.key()).port().toLong());
-                selector.matchInPort(PortNumber.portNumber(port.opposite().portNum()));
-            } else {
-                selector.add(filterObjective.key());
-            }
-        }
-
-        FlowRule.Builder ruleBuilder = DefaultFlowRule.builder()
-                .forDevice(deviceId)
-                .withSelector(selector.build())
-                .withTreatment(actions.build())
-                .fromApp(filterObjective.appId())
-                .forTable(evcId)
-                .withPriority(filterObjective.priority());
-
-        if (filterObjective.permanent()) {
-            ruleBuilder.makePermanent();
-        } else {
-            ruleBuilder.makeTemporary(filterObjective.timeout());
-        }
-
-        installObjective(ruleBuilder, filterObjective);
-
-        log.debug("filter() of EA1000Pipeliner called for "
-                + handler().data().deviceId().uri()
-                + ". Objective: " + filterObjective);
-    }
-
-    @Override
-    public void forward(ForwardingObjective forwardObjective) {
-        TrafficSelector selector = forwardObjective.selector();
-
-        if (forwardObjective.treatment() != null) {
-            List<Instruction> instructions = forwardObjective.treatment().immediate();
-            if (instructions != null && instructions.size() == 1
-                    && instructions.get(0).type() == Instruction.Type.OUTPUT
-                    && ((OutputInstruction) instructions.get(0)).port() == PortNumber.CONTROLLER) {
-                Set<Criterion> criteria = forwardObjective.selector().criteria();
-                log.info("EA1000 does not yet implement forwarding to CONTROLLER for flow objective for: "
-                        + handler().data().deviceId().uri()
-                        + ". "
-                        + forwardObjective);
-                return;
-            } else {
-                FlowRule.Builder ruleBuilder = DefaultFlowRule.builder()
-                        .forDevice(deviceId)
-                        .withSelector(selector)
-                        .fromApp(forwardObjective.appId())
-                        .withPriority(forwardObjective.priority())
-                        .withTreatment(forwardObjective.treatment());
-
-                if (forwardObjective.permanent()) {
-                    ruleBuilder.makePermanent();
-                } else {
-                    ruleBuilder.makeTemporary(forwardObjective.timeout());
-                }
-                installObjective(ruleBuilder, forwardObjective);
-            }
-        } else {
-            NextObjective nextObjective = pendingNext.getIfPresent(forwardObjective.nextId());
-            if (nextObjective != null) {
-                pendingNext.invalidate(forwardObjective.nextId());
-                nextObjective.next().forEach(treat -> {
-                    FlowRule.Builder ruleBuilder = DefaultFlowRule.builder()
-                            .forDevice(deviceId)
-                            .withSelector(selector)
-                            .fromApp(forwardObjective.appId())
-                            .withPriority(forwardObjective.priority())
-                            .withTreatment(treat);
-
-                    if (forwardObjective.permanent()) {
-                        ruleBuilder.makePermanent();
-                    } else {
-                        ruleBuilder.makeTemporary(forwardObjective.timeout());
-                    }
-                    installObjective(ruleBuilder, forwardObjective);
-                });
-            } else {
-                forwardObjective.context().ifPresent(c -> c.onError(forwardObjective,
-                        ObjectiveError.GROUPMISSING));
-            }
-        }
-        log.debug("EA1000: Unhandled Forwarding Objective for: "
-                + handler().data().deviceId().uri()
-                + ". "
-                + forwardObjective);
-    }
-
-    @Override
-    public void next(NextObjective nextObjective) {
-        pendingNext.put(nextObjective.id(), nextObjective);
-        nextObjective.context().ifPresent(context -> context.onSuccess(nextObjective));
-
-        log.debug("next() of EA1000Pipeliner called for "
-                + handler().data().deviceId().uri()
-                + ". Objective: " + nextObjective);
-    }
-
-    @Override
-    public List<String> getNextMappings(NextGroup nextGroup) {
-        log.debug("getNextMappings() of EA1000Pipeliner called for "
-                + handler().data().deviceId().uri()
-                + ". Objective: " + nextGroup);
-        return new ArrayList<String>();
-    }
-
-    protected void installObjective(FlowRule.Builder ruleBuilder, Objective objective) {
-        FlowRuleOperations.Builder flowBuilder = FlowRuleOperations.builder();
-        switch (objective.op()) {
-
-            case ADD:
-                flowBuilder.add(ruleBuilder.build());
-                break;
-            case REMOVE:
-                flowBuilder.remove(ruleBuilder.build());
-                break;
-            default:
-                log.warn("Unknown operation {}", objective.op());
-        }
-
-        flowRuleService.apply(flowBuilder.build(new FlowRuleOperationsContext() {
-            @Override
-            public void onSuccess(FlowRuleOperations ops) {
-                objective.context().ifPresent(context -> context.onSuccess(objective));
-            }
-
-            @Override
-            public void onError(FlowRuleOperations ops) {
-                objective.context()
-                        .ifPresent(context -> context.onError(objective, ObjectiveError.FLOWINSTALLATIONFAILED));
-            }
-        }));
-    }
-}
diff --git a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/EA1000SoamDmProgrammable.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/EA1000SoamDmProgrammable.java
deleted file mode 100755
index 5a8fddb..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/EA1000SoamDmProgrammable.java
+++ /dev/null
@@ -1,740 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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 com.google.common.base.Preconditions.checkNotNull;
-import static org.slf4j.LoggerFactory.getLogger;
-
-import java.time.Duration;
-import java.util.ArrayList;
-import java.util.BitSet;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Optional;
-
-import org.onosproject.drivers.microsemi.yang.MseaCfmNetconfService;
-import org.onosproject.drivers.microsemi.yang.MseaCfmNetconfService.DmEntryParts;
-import org.onosproject.drivers.microsemi.yang.utils.IetfYangTypesUtils;
-import org.onosproject.drivers.microsemi.yang.utils.MepIdUtil;
-import org.onosproject.incubator.net.l2monitoring.cfm.Mep.Priority;
-import org.onosproject.incubator.net.l2monitoring.cfm.MepTsCreate;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdShort;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdId;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MepId;
-import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmConfigException;
-import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmMdService;
-import org.onosproject.incubator.net.l2monitoring.soam.SoamConfigException;
-import org.onosproject.incubator.net.l2monitoring.soam.SoamDmProgrammable;
-import org.onosproject.incubator.net.l2monitoring.soam.SoamId;
-import org.onosproject.incubator.net.l2monitoring.soam.StartTime.StartTimeOption;
-import org.onosproject.incubator.net.l2monitoring.soam.StopTime.StopTimeOption;
-import org.onosproject.incubator.net.l2monitoring.soam.delay.DefaultDelayMeasurementEntry;
-import org.onosproject.incubator.net.l2monitoring.soam.delay.DefaultDelayMeasurementStatCurrent;
-import org.onosproject.incubator.net.l2monitoring.soam.delay.DefaultDelayMeasurementStatHistory;
-import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementCreate;
-import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementCreate.DmType;
-import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementCreate.MeasurementOption;
-import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementCreate.Version;
-import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementEntry;
-import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementEntry.DmEntryBuilder;
-import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementEntry.SessionStatus;
-import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementStatCurrent;
-import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementStatCurrent.DmStatCurrentBuilder;
-import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementStatHistory;
-import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementStatHistory.DmStatHistoryBuilder;
-import org.onosproject.incubator.net.l2monitoring.soam.loss.LossMeasurementCreate;
-import org.onosproject.incubator.net.l2monitoring.soam.loss.LossMeasurementEntry;
-import org.onosproject.incubator.net.l2monitoring.soam.loss.LossMeasurementStatCurrent;
-import org.onosproject.net.driver.AbstractHandlerBehaviour;
-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.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.MefCfm;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.DefaultMaintenanceDomain;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.DefaultMaintenanceAssociation;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.DefaultMaintenanceAssociationEndPoint;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.MaintenanceAssociationEndPoint;
-import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.delaymeasurementbinsgroup.bins.FrameDelay;
-import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.delaymeasurementbinsgroup.bins.InterFrameDelayVariation;
-import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.AugmentedMseaCfmMaintenanceAssociationEndPoint;
-import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.DefaultAugmentedMseaCfmMaintenanceAssociationEndPoint;
-import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.augmentedmseacfmmaintenanceassociationendpoint.DefaultDelayMeasurements;
-import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.augmentedmseacfmmaintenanceassociationendpoint.DelayMeasurements;
-import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.augmentedmseacfmmaintenanceassociationendpoint.delaymeasurements.DefaultDelayMeasurement;
-import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.augmentedmseacfmmaintenanceassociationendpoint.delaymeasurements.DelayMeasurement;
-import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.augmentedmseacfmmaintenanceassociationendpoint.delaymeasurements.delaymeasurement.HistoryStats;
-import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.augmentedmseacfmmaintenanceassociationendpoint.delaymeasurements.delaymeasurement.MeasurementEnable;
-import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.augmentedmseacfmmaintenanceassociationendpoint.delaymeasurements.delaymeasurement.MessagePeriodEnum;
-import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.remotemepgroup.remotemep.DefaultMepId;
-import org.onosproject.yang.gen.v1.mseatypes.rev20160229.mseatypes.MepIdType;
-import org.onosproject.yang.gen.v1.mseatypes.rev20160229.mseatypes.PriorityType;
-import org.slf4j.Logger;
-
-/**
- * Implementation of SoamDmProgrammable for Microsemi EA1000.
- */
-public class EA1000SoamDmProgrammable extends AbstractHandlerBehaviour
-        implements SoamDmProgrammable {
-    private static final Logger log = getLogger(EA1000SoamDmProgrammable.class);
-    private static final int MAX_DMS = 2;
-
-    public EA1000SoamDmProgrammable() {
-        log.debug("Loaded handler behaviour EA1000SoamDmProgrammable");
-    }
-
-    @Override
-    public Collection<DelayMeasurementEntry> getAllDms(
-            MdId mdName, MaIdShort maName, MepId mepId)
-                    throws CfmConfigException, SoamConfigException {
-        return getAllDmsOrOneDm(mdName, maName, mepId, null, DmEntryParts.ALL_PARTS);
-    }
-
-    @Override
-    public DelayMeasurementEntry getDm(MdId mdName, MaIdShort maName,
-            MepId mepId, SoamId dmId) throws CfmConfigException, SoamConfigException {
-        Collection<DelayMeasurementEntry> allDms =
-                getAllDmsOrOneDm(mdName, maName, mepId, dmId, DmEntryParts.ALL_PARTS);
-
-        if (allDms != null && allDms.size() >= 1) {
-            return allDms.toArray(new DelayMeasurementEntry[1])[0];
-        }
-        return null;
-    }
-
-    @Override
-    public DelayMeasurementStatCurrent getDmCurrentStat(
-            MdId mdName, MaIdShort maName, MepId mepId, SoamId dmId)
-                    throws CfmConfigException, SoamConfigException {
-        Collection<DelayMeasurementEntry> dms =
-                getAllDmsOrOneDm(mdName, maName, mepId, dmId, DmEntryParts.CURRENT_ONLY);
-
-        //There should be only one
-        if (dms != null && dms.size() == 1) {
-            return dms.toArray((new DelayMeasurementEntry[1]))[0].currentResult();
-        }
-        return null;
-    }
-
-    @Override
-    public Collection<DelayMeasurementStatHistory> getDmHistoricalStats(
-            MdId mdName, MaIdShort maName, MepId mepId, SoamId dmId)
-                    throws CfmConfigException, SoamConfigException {
-        Collection<DelayMeasurementEntry> dms =
-                getAllDmsOrOneDm(mdName, maName, mepId, dmId, DmEntryParts.HISTORY_ONLY);
-
-        //There should only be one in the result
-        if (dms != null && dms.size() == 1) {
-            return dms.toArray(new DelayMeasurementEntry[1])[0].historicalResults();
-        }
-        return new ArrayList<>();
-    }
-
-    @Override
-    public Optional<SoamId> createDm(
-            MdId mdName, MaIdShort maName, MepId mepId, DelayMeasurementCreate dm)
-            throws CfmConfigException, SoamConfigException {
-        NetconfController controller = checkNotNull(handler().get(NetconfController.class));
-        NetconfSession session = controller.getDevicesMap().get(handler().data().deviceId()).getSession();
-        MseaCfmNetconfService mseaCfmService = checkNotNull(handler().get(MseaCfmNetconfService.class));
-
-        MseaCfm mepEssentials;
-        try {
-            mepEssentials = mseaCfmService.getMepEssentials(
-                                        mdName, maName, mepId, session);
-        } catch (NetconfException e) {
-            throw new CfmConfigException(e);
-        }
-        short mdNumber = mepEssentials.mefCfm().maintenanceDomain().get(0).id();
-        short maNumber = mepEssentials.mefCfm().maintenanceDomain().get(0)
-                .maintenanceAssociation().get(0).id();
-        MaintenanceAssociationEndPoint currentMep =
-                mepEssentials.mefCfm().maintenanceDomain().get(0)
-                .maintenanceAssociation().get(0)
-                .maintenanceAssociationEndPoint().get(0);
-        AugmentedMseaCfmMaintenanceAssociationEndPoint currAugMep =
-                currentMep.augmentation(DefaultAugmentedMseaCfmMaintenanceAssociationEndPoint.class);
-
-        if (dm.startTime() != null && !dm.startTime().option().equals(StartTimeOption.IMMEDIATE)) {
-            throw new SoamConfigException(
-                    "Only start time: IMMEDIATE is supported on EA1000");
-        } else if (dm.stopTime() != null && !dm.stopTime().option().equals(StopTimeOption.NONE)) {
-            throw new SoamConfigException(
-                    "Only stop time: NONE is supported on EA1000");
-        }
-
-        MessagePeriodEnum mpEnum = MessagePeriodEnum.YANGAUTOPREFIX1000MS;
-        if (dm.messagePeriod() != null) {
-            if (dm.messagePeriod().toMillis() == 1000) {
-                mpEnum = MessagePeriodEnum.YANGAUTOPREFIX1000MS;
-            } else if (dm.messagePeriod().toMillis() == 100) {
-                mpEnum = MessagePeriodEnum.YANGAUTOPREFIX100MS;
-            } else if (dm.messagePeriod().toMillis() == 10) {
-                mpEnum = MessagePeriodEnum.YANGAUTOPREFIX10MS;
-            } else if (dm.messagePeriod().toMillis() == 3) {
-                mpEnum = MessagePeriodEnum.YANGAUTOPREFIX3MS;
-            } else {
-                throw new SoamConfigException("EA1000 supports only Message "
-                    + "Periods 1000ms,100ms, 10ms and 3ms for Delay Measurements");
-            }
-        }
-
-        short lastDmId = 0;
-        short newDmId = 1;
-        if (currAugMep != null && currAugMep.delayMeasurements() != null) {
-            Iterator<DelayMeasurement> dmIterator =
-                    currAugMep.delayMeasurements().delayMeasurement().iterator();
-            while (dmIterator.hasNext()) {
-                lastDmId = dmIterator.next().dmId();
-            }
-
-            if (lastDmId == 0) {
-                //Indicates that no DM was found under this MEP.
-                //We will just create the next one as 1
-                log.info("Creating DM 1");
-                newDmId = 1;
-            } else if (lastDmId == 1) {
-                log.info("Creating DM 2");
-                newDmId = 2;
-            } else if (lastDmId == MAX_DMS) {
-                log.warn("Maximum number of DMs (2) have been created on MEP {}/{}/{}"
-                        + "on device {} - delete DMs before creating more",
-                        mdName.mdName(), maName.maName(), mepId.id(),
-                        handler().data().deviceId());
-                throw new CfmConfigException("Maximum number of DMs (2) exist on MEP. "
-                        + "Please call abort on a DM before creating more");
-            }
-        }
-
-
-        DelayMeasurement dmBuilder = new DefaultDelayMeasurement();
-        dmBuilder.dmId((short) newDmId);
-        DefaultMepId dMepId = new DefaultMepId();
-        dMepId.mepId(MepIdType.of(dm.remoteMepId().id()));
-        dmBuilder.remoteMep(dMepId);
-
-        BitSet measurementEnable = getMeasurementEnabledSet(dm.measurementsEnabled());
-        if (measurementEnable != null && !measurementEnable.isEmpty()) {
-            dmBuilder.measurementEnable(measurementEnable);
-        }
-        dmBuilder.administrativeState(true);
-        dmBuilder.priority(PriorityType.of((short) dm.priority().ordinal()));
-        dmBuilder.messagePeriod(mpEnum);
-
-        if (dm.numberIntervalsStored() != null) {
-            //Here we pass in num intervals stored - for EA1000 32 are always
-            //stored so it's not controllable - instead we set number returned
-            dmBuilder.numberIntervalsReturned(dm.numberIntervalsStored());
-        }
-
-        if (dm.measurementInterval() != null) {
-            dmBuilder.measurementInterval(dm.measurementInterval().toMinutes());
-        }
-        if (dm.frameSize() != null) {
-            dmBuilder.frameSize(dm.frameSize());
-        }
-        DefaultAugmentedMseaCfmMaintenanceAssociationEndPoint augmentedMep =
-                new DefaultAugmentedMseaCfmMaintenanceAssociationEndPoint();
-        DelayMeasurements dms = new DefaultDelayMeasurements();
-        dms.addToDelayMeasurement(dmBuilder);
-        augmentedMep.delayMeasurements(dms);
-
-        MaintenanceAssociationEndPoint mep =
-                new DefaultMaintenanceAssociationEndPoint();
-        mep.mepIdentifier(MepIdType.of(mepId.id()));
-        mep.addAugmentation(augmentedMep);
-
-
-        org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain
-            .MaintenanceAssociation yangMa = new DefaultMaintenanceAssociation();
-        yangMa.id(maNumber);
-        yangMa.addToMaintenanceAssociationEndPoint(mep);
-
-        org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm
-                .MaintenanceDomain yangMd = new DefaultMaintenanceDomain();
-        yangMd.id(mdNumber);
-        yangMd.addToMaintenanceAssociation(yangMa);
-
-        MefCfm mefCfm = new DefaultMefCfm();
-        mefCfm.addToMaintenanceDomain(yangMd);
-
-        MseaCfmOpParam mseaCfmOpParam = new MseaCfmOpParam();
-        mseaCfmOpParam.mefCfm(mefCfm);
-
-        try {
-            mseaCfmService.setMseaCfm(mseaCfmOpParam, session, DatastoreId.RUNNING);
-            return Optional.empty();
-        } catch (NetconfException e) {
-            log.error("Unable to create DM {}/{}/{} on device {}",
-                    mdName, maName, mepId, handler().data().deviceId());
-            throw new CfmConfigException("Unable to create DM :" + e.getMessage());
-        }
-
-    }
-
-    @Override
-    public void abortDm(MdId mdName, MaIdShort maName, MepId mepId, SoamId dmId)
-            throws CfmConfigException {
-        NetconfController controller = checkNotNull(handler().get(NetconfController.class));
-        NetconfSession session = controller.getDevicesMap().get(handler().data()
-                .deviceId()).getSession();
-        MseaCfmNetconfService mseaCfmService = checkNotNull(handler()
-                .get(MseaCfmNetconfService.class));
-        CfmMdService cfmMdService = checkNotNull(handler().get(CfmMdService.class));
-
-
-        org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.mefcfm.maintenancedomain
-        .maintenanceassociation.maintenanceassociationendpoint
-        .augmentedmseacfmmaintenanceassociationendpoint.delaymeasurements
-        .DelayMeasurement dm = new DefaultDelayMeasurement();
-         dm.dmId(dmId.id().shortValue());
-
-        DefaultAugmentedMseaCfmMaintenanceAssociationEndPoint augmentedMep =
-                new DefaultAugmentedMseaCfmMaintenanceAssociationEndPoint();
-        DelayMeasurements ddms = new DefaultDelayMeasurements();
-        ddms.addToDelayMeasurement(dm);
-        augmentedMep.delayMeasurements(ddms);
-
-        MaintenanceAssociationEndPoint mep =
-                new DefaultMaintenanceAssociationEndPoint();
-        mep.mepIdentifier(MepIdType.of(mepId.id()));
-        mep.addAugmentation(augmentedMep);
-
-
-        short mdNumericId = cfmMdService.getMaintenanceDomain(mdName).get().mdNumericId();
-        short maNumericId = cfmMdService
-                .getMaintenanceAssociation(mdName, maName).get().maNumericId();
-
-        DefaultMaintenanceAssociation yangMa = new DefaultMaintenanceAssociation();
-        yangMa.id(maNumericId);
-        yangMa.addToMaintenanceAssociationEndPoint(mep);
-
-        DefaultMaintenanceDomain yangMd = new DefaultMaintenanceDomain();
-        yangMd.id(mdNumericId);
-        yangMd.addToMaintenanceAssociation(yangMa);
-
-        MefCfm mefCfm = new DefaultMefCfm();
-        mefCfm.addToMaintenanceDomain(yangMd);
-
-        MseaCfmOpParam mseaCfmOpParam = new MseaCfmOpParam();
-        mseaCfmOpParam.mefCfm(mefCfm);
-
-        try {
-            mseaCfmService.deleteMseaCfmDm(mseaCfmOpParam, session, DatastoreId.RUNNING);
-        } catch (NetconfException e) {
-            log.error("Unable to delete DM {}/{}/{}/{} on device {}",
-                    mdName, maName, mepId, dm.dmId(), handler().data().deviceId());
-            throw new CfmConfigException("Unable to delete DM :" + e.getMessage());
-        }
-    }
-
-    @Override
-    public void abortDm(MdId mdName, MaIdShort maName, MepId mepId)
-            throws CfmConfigException {
-        throw new UnsupportedOperationException("Not yet implemented");
-    }
-
-    @Override
-    public void clearDelayHistoryStats(MdId mdName, MaIdShort maName,
-            MepId mepId) throws CfmConfigException {
-        throw new UnsupportedOperationException("Not yet implemented");
-    }
-
-    @Override
-    public void clearDelayHistoryStats(MdId mdName, MaIdShort maName,
-            MepId mepId, SoamId dmId) throws CfmConfigException {
-        throw new UnsupportedOperationException("Not yet implemented");
-    }
-
-    @Override
-    public Collection<LossMeasurementEntry> getAllLms(MdId mdName,
-            MaIdShort maName, MepId mepId) throws CfmConfigException {
-        throw new UnsupportedOperationException("Not yet implemented");
-    }
-
-    @Override
-    public LossMeasurementEntry getLm(MdId mdName, MaIdShort maName,
-            MepId mepId, SoamId lmId) throws CfmConfigException {
-        throw new UnsupportedOperationException("Not yet implemented");
-    }
-
-    @Override
-    public LossMeasurementStatCurrent getLmCurrentStat(MdId mdName,
-            MaIdShort maName, MepId mepId, SoamId lmId) {
-        throw new UnsupportedOperationException("Not yet implemented");
-    }
-
-    @Override
-    public Collection<LossMeasurementStatCurrent> getLmHistoricalStats(
-            MdId mdName, MaIdShort maName, MepId mepId, SoamId lmId) {
-        throw new UnsupportedOperationException("Not yet implemented");
-    }
-
-    @Override
-    public Optional<SoamId> createLm(MdId mdName, MaIdShort maName, MepId mepId,
-                             LossMeasurementCreate lm) throws CfmConfigException {
-        throw new UnsupportedOperationException("Not yet implemented");
-    }
-
-    @Override
-    public void abortLm(MdId mdName, MaIdShort maName, MepId mepId)
-            throws CfmConfigException {
-        throw new UnsupportedOperationException("Not yet implemented");
-    }
-
-    @Override
-    public void abortLm(MdId mdName, MaIdShort maName, MepId mepId, SoamId lmId)
-            throws CfmConfigException {
-        throw new UnsupportedOperationException("Not yet implemented");
-    }
-
-    @Override
-    public void clearLossHistoryStats(MdId mdName, MaIdShort maName,
-            MepId mepId) throws CfmConfigException {
-        throw new UnsupportedOperationException("Not yet implemented");
-    }
-
-    @Override
-    public void clearLossHistoryStats(MdId mdName, MaIdShort maName,
-            MepId mepId, SoamId lmId) throws CfmConfigException {
-        throw new UnsupportedOperationException("Not yet implemented");
-    }
-
-    @Override
-    public void createTestSignal(MdId mdName, MaIdShort maName, MepId mepId,
-            MepTsCreate tsCreate) throws CfmConfigException {
-        throw new UnsupportedOperationException("Not supported by EA1000");
-    }
-
-    @Override
-    public void abortTestSignal(MdId mdName, MaIdShort maName, MepId mepId)
-            throws CfmConfigException {
-        throw new UnsupportedOperationException("Not supported by EA1000");
-    }
-
-    private static DelayMeasurementEntry buildApiDmFromYangDm(DelayMeasurement dm,
-            MdId mdName, MaIdShort maName, MepId mepId)
-                    throws SoamConfigException, CfmConfigException {
-
-        org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.remotemepgroup.remotemep
-        .MepId rmep = MepIdUtil.convertRemoteMepId(dm.remoteMep());
-
-        DmEntryBuilder dmBuilder = (DmEntryBuilder) DefaultDelayMeasurementEntry.builder(
-                SoamId.valueOf(dm.dmId()), DmType.DMDMM, Version.Y17312011,
-                MepId.valueOf((short) ((MepIdType) rmep.mepId()).uint16()),
-                Priority.values()[dm.priority().uint8()]);
-        if (dm.sessionStatus() != null) {
-            dmBuilder = dmBuilder.sessionStatus(SessionStatus.valueOf(
-                    dm.sessionStatus().enumeration().name()));
-        }
-
-        if (dm.frameDelayTwoWay() != null) {
-            dmBuilder = dmBuilder.frameDelayTwoWay(Duration.ofNanos(
-                    dm.frameDelayTwoWay().uint32() * 1000));
-        }
-        if (dm.interFrameDelayVariationTwoWay() != null) {
-            dmBuilder = dmBuilder.interFrameDelayVariationTwoWay(Duration.ofNanos(
-                    dm.interFrameDelayVariationTwoWay().uint32() * 1000));
-        }
-
-        if (dm.frameSize() != 0) {
-            dmBuilder = (DmEntryBuilder) dmBuilder.frameSize((short) dm.frameSize());
-        }
-
-        if (dm.messagePeriod() != null) {
-            switch (dm.messagePeriod()) {
-                case YANGAUTOPREFIX1000MS:
-                    dmBuilder = (DmEntryBuilder) dmBuilder.messagePeriod(Duration.ofMillis(1000));
-                    break;
-                case YANGAUTOPREFIX100MS:
-                    dmBuilder = (DmEntryBuilder) dmBuilder.messagePeriod(Duration.ofMillis(100));
-                    break;
-                case YANGAUTOPREFIX10MS:
-                    dmBuilder = (DmEntryBuilder) dmBuilder.messagePeriod(Duration.ofMillis(10));
-                    break;
-                case YANGAUTOPREFIX3MS:
-                    dmBuilder = (DmEntryBuilder) dmBuilder.messagePeriod(Duration.ofMillis(3));
-                    break;
-                default:
-                    throw new SoamConfigException("EA1000 supports only 1000,"
-                            + "100, 10 and 3ms for Message Period on DM");
-            }
-        }
-
-        Collection<MeasurementOption> moSet =
-            EA1000SoamDmProgrammable.getMeasurementOptions(dm.measurementEnable());
-        moSet.forEach(dmBuilder::addToMeasurementsEnabled);
-
-        dmBuilder = dmBuilder
-                .currentResult(buildApiDmCurrFromYangDmCurr(dm, mdName, maName, mepId));
-
-        for (DelayMeasurementStatHistory historyStat:
-                            buildApiDmHistFromYangDm(dm, mdName, maName, mepId)) {
-            dmBuilder = dmBuilder.addToHistoricalResults(historyStat);
-        }
-
-        return dmBuilder.build();
-    }
-
-    private static Collection<DelayMeasurementStatHistory> buildApiDmHistFromYangDm(
-            DelayMeasurement dm, MdId mdName, MaIdShort maName, MepId mepId)
-                    throws SoamConfigException, CfmConfigException {
-
-        Collection<DelayMeasurementStatHistory> historyStatsCollection = new ArrayList<>();
-        if (dm.historyStats() != null) {
-            for (HistoryStats dmHistory:dm.historyStats()) {
-                DmStatHistoryBuilder historyBuilder =
-                        DefaultDelayMeasurementStatHistory.builder(
-                                SoamId.valueOf((int) dmHistory.id()),
-                                Duration.ofMillis(dmHistory.elapsedTime() * 10), //Values are in 1/100th sec
-                                dmHistory.suspectStatus() != null ?
-                                        dmHistory.suspectStatus().yangAutoPrefixBoolean() : false);
-                historyBuilder = historyBuilder.endTime(
-                        IetfYangTypesUtils.fromYangDateTimeToInstant(dmHistory.endTime()));
-
-                if (dmHistory.frameDelayTwoWayMin() != null) {
-                    historyBuilder = (DmStatHistoryBuilder) historyBuilder
-                            .frameDelayTwoWayMin(Duration.ofNanos(dmHistory.frameDelayTwoWayMin().uint32() * 1000));
-                }
-
-                if (dmHistory.frameDelayTwoWayMax() != null) {
-                    historyBuilder = (DmStatHistoryBuilder) historyBuilder
-                            .frameDelayTwoWayMax(Duration.ofNanos(dmHistory.frameDelayTwoWayMax().uint32() * 1000));
-                }
-
-                if (dmHistory.frameDelayTwoWayAverage() != null) {
-                    historyBuilder = (DmStatHistoryBuilder) historyBuilder
-                           .frameDelayTwoWayAvg(Duration.ofNanos(dmHistory.frameDelayTwoWayAverage().uint32() * 1000));
-                }
-
-                if (dmHistory.interFrameDelayVariationTwoWayMin() != null) {
-                    historyBuilder = (DmStatHistoryBuilder) historyBuilder
-                            .interFrameDelayVariationTwoWayMin(Duration.ofNanos(
-                                    dmHistory.interFrameDelayVariationTwoWayMin().uint32() * 1000));
-                }
-
-                if (dmHistory.interFrameDelayVariationTwoWayMax() != null) {
-                    historyBuilder = (DmStatHistoryBuilder) historyBuilder
-                            .interFrameDelayVariationTwoWayMax(Duration.ofNanos(
-                                    dmHistory.interFrameDelayVariationTwoWayMax().uint32() * 1000));
-                }
-
-                if (dmHistory.interFrameDelayVariationTwoWayAverage() != null) {
-                    historyBuilder = (DmStatHistoryBuilder) historyBuilder
-                            .interFrameDelayVariationTwoWayAvg(Duration.ofNanos(
-                                    dmHistory.interFrameDelayVariationTwoWayAverage().uint32() * 1000));
-                }
-
-                if (dmHistory.soamPdusReceived() != null) {
-                    historyBuilder = (DmStatHistoryBuilder) historyBuilder
-                            .soamPdusReceived(Integer.valueOf((int) dmHistory.soamPdusReceived().uint32()));
-                }
-
-                if (dmHistory.bins() != null && dmHistory.bins().frameDelay() != null) {
-                    Map<Duration, Integer> frameDelayTwoWayBins = new HashMap<>();
-                    for (FrameDelay fdBin:dmHistory.bins().frameDelay()) {
-                        frameDelayTwoWayBins.put(
-                                Duration.ofNanos(fdBin.lowerBound().uint32() * 1000),
-                                Integer.valueOf((int) fdBin.counter().uint32()));
-                    }
-                    historyBuilder = (DmStatHistoryBuilder) historyBuilder
-                            .frameDelayTwoWayBins(frameDelayTwoWayBins);
-                }
-
-                if (dmHistory.bins() != null && dmHistory.bins().interFrameDelayVariation() != null) {
-                    Map<Duration, Integer> ifdvTwoWayBins = new HashMap<>();
-                    for (InterFrameDelayVariation ifdvBin:dmHistory.bins().interFrameDelayVariation()) {
-                        ifdvTwoWayBins.put(
-                                Duration.ofNanos(ifdvBin.lowerBound().uint32() * 1000),
-                                Integer.valueOf((int) ifdvBin.counter().uint32()));
-                    }
-                    historyBuilder =
-                            (DmStatHistoryBuilder) historyBuilder.interFrameDelayVariationTwoWayBins(ifdvTwoWayBins);
-                }
-
-                historyStatsCollection.add((DelayMeasurementStatHistory) historyBuilder.build());
-            }
-        }
-        return historyStatsCollection;
-    }
-
-    private static DelayMeasurementStatCurrent buildApiDmCurrFromYangDmCurr(
-            DelayMeasurement dm, MdId mdName, MaIdShort maName, MepId mepId)
-                    throws SoamConfigException, CfmConfigException {
-        if (dm == null || dm.currentStats() == null || mdName == null ||
-                maName == null || mepId == null) {
-            return null;
-        }
-
-        DmStatCurrentBuilder statCurrBuilder =
-           DefaultDelayMeasurementStatCurrent.builder(
-                Duration.ofMillis(dm.currentStats().elapsedTime() * 10), //Values are in 1/100th sec
-                dm.currentStats().suspectStatus() != null ?
-                    dm.currentStats().suspectStatus().yangAutoPrefixBoolean() : false);
-        statCurrBuilder = statCurrBuilder.startTime(
-                IetfYangTypesUtils.fromYangDateTimeToInstant(dm.currentStats().startTime()));
-
-        if (dm.currentStats().frameDelayTwoWayMin() != null) {
-            statCurrBuilder = (DmStatCurrentBuilder) statCurrBuilder
-                    .frameDelayTwoWayMin(Duration.ofNanos(
-                            dm.currentStats().frameDelayTwoWayMin().uint32() * 1000));
-        }
-
-        if (dm.currentStats().frameDelayTwoWayMax() != null) {
-            statCurrBuilder = (DmStatCurrentBuilder) statCurrBuilder
-                    .frameDelayTwoWayMax(Duration.ofNanos(
-                            dm.currentStats().frameDelayTwoWayMax().uint32() * 1000));
-        }
-
-        if (dm.currentStats().frameDelayTwoWayAverage() != null) {
-            statCurrBuilder = (DmStatCurrentBuilder) statCurrBuilder
-                   .frameDelayTwoWayAvg(Duration.ofNanos(
-                           dm.currentStats().frameDelayTwoWayAverage().uint32() * 1000));
-        }
-
-        if (dm.currentStats().interFrameDelayVariationTwoWayMin() != null) {
-            statCurrBuilder = (DmStatCurrentBuilder) statCurrBuilder
-                    .interFrameDelayVariationTwoWayMin(Duration.ofNanos(
-                            dm.currentStats().interFrameDelayVariationTwoWayMin().uint32() * 1000));
-        }
-
-        if (dm.currentStats().interFrameDelayVariationTwoWayMax() != null) {
-            statCurrBuilder = (DmStatCurrentBuilder) statCurrBuilder
-                    .interFrameDelayVariationTwoWayMax(Duration.ofNanos(
-                            dm.currentStats().interFrameDelayVariationTwoWayMax().uint32() * 1000));
-        }
-
-        if (dm.currentStats().interFrameDelayVariationTwoWayAverage() != null) {
-            statCurrBuilder = (DmStatCurrentBuilder) statCurrBuilder
-                    .interFrameDelayVariationTwoWayAvg(Duration.ofNanos(
-                            dm.currentStats().interFrameDelayVariationTwoWayAverage().uint32() * 1000));
-        }
-
-        if (dm.currentStats().soamPdusReceived() != null) {
-            statCurrBuilder = (DmStatCurrentBuilder) statCurrBuilder
-                    .soamPdusReceived(Integer.valueOf((int) dm.currentStats().soamPdusReceived().uint32()));
-        }
-
-        if (dm.currentStats().bins() != null && dm.currentStats().bins().frameDelay() != null) {
-            Map<Duration, Integer> frameDelayTwoWayBins = new HashMap<>();
-            for (FrameDelay fdBin:dm.currentStats().bins().frameDelay()) {
-                frameDelayTwoWayBins.put(
-                        Duration.ofNanos(fdBin.lowerBound().uint32() * 1000),
-                        Integer.valueOf((int) fdBin.counter().uint32()));
-            }
-            statCurrBuilder = (DmStatCurrentBuilder) statCurrBuilder.frameDelayTwoWayBins(frameDelayTwoWayBins);
-        }
-
-        if (dm.currentStats().bins() != null && dm.currentStats().bins().interFrameDelayVariation() != null) {
-            Map<Duration, Integer> ifdvTwoWayBins = new HashMap<>();
-            for (InterFrameDelayVariation ifdvBin:dm.currentStats().bins().interFrameDelayVariation()) {
-                ifdvTwoWayBins.put(
-                        Duration.ofNanos(ifdvBin.lowerBound().uint32() * 1000),
-                        Integer.valueOf((int) ifdvBin.counter().uint32()));
-            }
-            statCurrBuilder =
-                    (DmStatCurrentBuilder) statCurrBuilder.interFrameDelayVariationTwoWayBins(ifdvTwoWayBins);
-        }
-
-        return (DelayMeasurementStatCurrent) statCurrBuilder.build();
-    }
-
-    private Collection<DelayMeasurementEntry> getAllDmsOrOneDm(
-            MdId mdName, MaIdShort maName, MepId mepId, SoamId dmId, DmEntryParts parts)
-                    throws CfmConfigException, SoamConfigException {
-        NetconfController controller =
-                checkNotNull(handler().get(NetconfController.class));
-        NetconfSession session =
-                controller.getDevicesMap().get(handler().data().deviceId()).getSession();
-        MseaCfmNetconfService mseaCfmService =
-                checkNotNull(handler().get(MseaCfmNetconfService.class));
-
-        Collection<DelayMeasurementEntry> dmResults = new ArrayList<>();
-        try {
-            MseaCfm mseacfm =
-                    mseaCfmService.getSoamDm(mdName, maName, mepId, dmId, parts, session);
-            for (org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm
-                    .MaintenanceDomain replyMd:mseacfm.mefCfm().maintenanceDomain()) {
-                for (org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm
-                        .mefcfm.maintenancedomain.MaintenanceAssociation replyMa:
-                            replyMd.maintenanceAssociation()) {
-                    for (MaintenanceAssociationEndPoint replyMep:
-                            replyMa.maintenanceAssociationEndPoint()) {
-                        AugmentedMseaCfmMaintenanceAssociationEndPoint augmentedMep =
-                                replyMep.augmentation(
-                                        DefaultAugmentedMseaCfmMaintenanceAssociationEndPoint.class);
-                        if (augmentedMep == null ||
-                                augmentedMep.delayMeasurements() == null ||
-                                augmentedMep.delayMeasurements()
-                                        .delayMeasurement().isEmpty()) {
-                            log.info("No Delay Measurements retrieved from MEP " +
-                                        mdName + "/" + maName + "/" + mepId);
-                        } else {
-                            for (org.onosproject.yang.gen.v1.mseasoampm.rev20160229
-                                    .mseasoampm.mefcfm.maintenancedomain.maintenanceassociation
-                                    .maintenanceassociationendpoint
-                                    .augmentedmseacfmmaintenanceassociationendpoint
-                                    .delaymeasurements.DelayMeasurement dm
-                                        :augmentedMep.delayMeasurements().delayMeasurement()) {
-                                dmResults.add(buildApiDmFromYangDm(dm, mdName, maName, mepId));
-                            }
-                        }
-                    }
-                }
-            }
-            return dmResults;
-        } catch (NetconfException e) {
-            log.error("Unable to get MEP {}/{}/{} on device {}",
-                    mdName, maName, mepId, handler().data().deviceId());
-            throw new CfmConfigException("Unable to create MEP :" + e.getMessage());
-        }
-    }
-
-
-    protected static BitSet getMeasurementEnabledSet(
-            Collection<MeasurementOption> measEnabled) throws SoamConfigException {
-        BitSet measurementEnable = new BitSet();
-        try {
-            measEnabled.forEach(mo -> {
-                    MeasurementEnable me = MeasurementEnable.valueOf(mo.name());
-                    measurementEnable.set(me.measurementEnable());
-            });
-        } catch (IllegalArgumentException e) {
-            throw new SoamConfigException(
-                    "Measurement Option is not supported on EA1000: ", e);
-        }
-
-        return measurementEnable;
-    }
-
-    protected static Collection<MeasurementOption> getMeasurementOptions(BitSet meBs) {
-        Collection<MeasurementOption> meList = new ArrayList<>();
-        if (meBs != null && !meBs.isEmpty()) {
-            for (int i = 0; i < meBs.size(); i++) {
-                if (meBs.get(i)) {
-                    meList.add(MeasurementOption.valueOf(MeasurementEnable.of(i).name()));
-                }
-            }
-        }
-
-        return meList;
-    }
-}
\ No newline at end of file
diff --git a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/Ea1000DeviceDescription.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/Ea1000DeviceDescription.java
deleted file mode 100644
index 31a9480..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/Ea1000DeviceDescription.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Foundation
- *
- * 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 com.google.common.base.Preconditions.checkNotNull;
-import static org.slf4j.LoggerFactory.getLogger;
-
-import java.time.OffsetDateTime;
-import java.time.ZoneId;
-import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.onlab.packet.ChassisId;
-import org.onosproject.drivers.microsemi.yang.IetfSystemNetconfService;
-import org.onosproject.net.AnnotationKeys;
-import org.onosproject.net.DefaultAnnotations;
-import org.onosproject.net.Device;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.Port;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.device.DefaultDeviceDescription;
-import org.onosproject.net.device.DefaultPortDescription;
-import org.onosproject.net.device.DeviceDescription;
-import org.onosproject.net.device.DeviceDescriptionDiscovery;
-import org.onosproject.net.device.DeviceService;
-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.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 {
-
-    private String serialNumber = "unavailable";
-    private String swVersion = "unavailable";
-    private String longitudeStr = null;
-    private String latitudeStr = null;
-    private final Logger log = getLogger(getClass());
-
-    public Ea1000DeviceDescription() {
-        log.info("Loaded handler behaviour Ea1000DeviceDescription.");
-    }
-
-    @Override
-    public DeviceDescription discoverDeviceDetails() {
-        log.info("Adding description for EA1000 device");
-
-        NetconfController controller = checkNotNull(handler().get(NetconfController.class));
-        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));
-
-        try {
-            IetfSystem system = ietfSystemService.getIetfSystemInit(session);
-            if (system != null && system.systemState() != null) {
-                swVersion = system.systemState().platform().osRelease();
-                AugmentedSysPlatform augmentedSysStatePlatform =
-                        (AugmentedSysPlatform) system.systemState()
-                        .platform().augmentation(DefaultAugmentedSysPlatform.class);
-                if (augmentedSysStatePlatform != null && augmentedSysStatePlatform.deviceIdentification() != null) {
-                    serialNumber = augmentedSysStatePlatform.deviceIdentification().serialNumber();
-                } else {
-                    log.warn("Serial Number of device not available: {}", handler().data().deviceId());
-                }
-                DateAndTime deviceDateAndTime = system.systemState().clock().currentDatetime();
-                OffsetDateTime odt =
-                        OffsetDateTime.parse(deviceDateAndTime.string(), DateTimeFormatter.ISO_OFFSET_DATE_TIME);
-                if (odt.getYear() < OffsetDateTime.now(ZoneId.of("UTC")).getYear()) {
-                    OffsetDateTime nowUtc = OffsetDateTime.now(ZoneId.of("UTC"));
-                    log.warn("Date on device {} is in the past: {}. Setting it to {}",
-                            handler().data().deviceId(), odt.toString(), nowUtc);
-                    ietfSystemService.setCurrentDatetime(nowUtc, session);
-                }
-            }
-
-            if (system != null && system.system() != null) {
-                AugmentedSysSystem augmentedSystem =
-                        (AugmentedSysSystem) system.system().augmentation(DefaultAugmentedSysSystem.class);
-                longitudeStr = augmentedSystem.longitude().toPlainString();
-                latitudeStr = augmentedSystem.latitude().toPlainString();
-            }
-        } catch (NetconfException e) {
-            log.error("Unable to retrieve init data from device: " + handler().data().deviceId().toString(), e);
-        }
-
-        DeviceService deviceService = checkNotNull(handler().get(DeviceService.class));
-        DeviceId deviceId = handler().data().deviceId();
-        Device device = deviceService.getDevice(deviceId);
-        DefaultAnnotations.Builder annotationsBuilder = DefaultAnnotations.builder();
-        if (longitudeStr != null && latitudeStr != null) {
-            annotationsBuilder.set(AnnotationKeys.LONGITUDE, longitudeStr)
-                    .set(AnnotationKeys.LATITUDE, latitudeStr).build();
-        } else {
-            log.warn("Longitude and latitude could not be retrieved from device " + deviceId);
-        }
-
-        return new DefaultDeviceDescription(device.id().uri(), Device.Type.OTHER, "Microsemi", "EA1000", swVersion,
-                serialNumber, new ChassisId(), annotationsBuilder.build());
-    }
-
-    @Override
-    public List<PortDescription> discoverPortDetails() {
-
-        List<PortDescription> ports = new ArrayList<PortDescription>();
-
-        DefaultAnnotations annotationOptics = DefaultAnnotations.builder().set(AnnotationKeys.PORT_NAME, "Optics")
-                .build();
-        PortDescription optics = DefaultPortDescription.builder()
-                .withPortNumber(PortNumber.portNumber(0))
-                .isEnabled(true)
-                .type(Port.Type.FIBER)
-                .portSpeed(1000)
-                .annotations(annotationOptics)
-                .build();
-        ports.add(optics);
-
-        DefaultAnnotations annotationHost = DefaultAnnotations.builder().set(AnnotationKeys.PORT_NAME, "Host").build();
-        PortDescription host = DefaultPortDescription.builder()
-                .withPortNumber(PortNumber.portNumber(1))
-                .isEnabled(true)
-                .type(Port.Type.COPPER)
-                .portSpeed(1000)
-                .annotations(annotationHost)
-                .build();
-        ports.add(host);
-
-        return ports;
-    }
-}
diff --git a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/FullMetersAvailable.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/FullMetersAvailable.java
deleted file mode 100644
index 41f297e..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/FullMetersAvailable.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Foundation
- *
- * 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 org.onosproject.net.behaviour.MeterQuery;
-import org.onosproject.net.driver.AbstractHandlerBehaviour;
-
-/**
- * Driver which always responds that all Meters are available for the Device.
- */
-public class FullMetersAvailable extends AbstractHandlerBehaviour implements MeterQuery {
-
-    private static final long MAX_METER = 0x00000FFF;
-
-    @Override
-    public long getMaxMeters() {
-        return MAX_METER;
-    }
-}
diff --git a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/MicrosemiDriversLoader.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/MicrosemiDriversLoader.java
deleted file mode 100644
index 7499a6d..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/MicrosemiDriversLoader.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Foundation
- *
- * 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 org.osgi.service.component.annotations.Component;
-import org.onosproject.net.driver.AbstractDriverLoader;
-
-/**
- * Loader for Microsemi device drivers.
- */
-@Component(immediate = true)
-public class MicrosemiDriversLoader extends AbstractDriverLoader {
-
-    public MicrosemiDriversLoader() {
-        super("/microsemi-drivers.xml");
-    }
-}
diff --git a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/NetconfConfigGetter.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/NetconfConfigGetter.java
deleted file mode 100644
index 7d937d0..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/NetconfConfigGetter.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Foundation
- *
- * 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.onosproject.netconf.DatastoreId.datastore;
-import static org.slf4j.LoggerFactory.getLogger;
-
-import org.osgi.service.component.annotations.Reference;
-import org.osgi.service.component.annotations.ReferenceCardinality;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.behaviour.ConfigGetter;
-import org.onosproject.net.driver.AbstractHandlerBehaviour;
-import org.onosproject.net.driver.DriverHandler;
-import org.onosproject.net.packet.PacketProcessor;
-import org.onosproject.net.packet.PacketService;
-import org.onosproject.netconf.NetconfController;
-import org.onosproject.netconf.NetconfException;
-import org.slf4j.Logger;
-
-import com.google.common.base.Preconditions;
-
-/**
- * Used with the onos:device-configuration CLI command.
- *
- * This allows the full configuration to be retrieved from the device
- */
-public class NetconfConfigGetter extends AbstractHandlerBehaviour implements ConfigGetter {
-
-    private final Logger log = getLogger(getClass());
-
-    @Reference(cardinality = ReferenceCardinality.MANDATORY)
-    protected PacketService packetService;
-
-    private PacketProcessor testProcessor;
-
-    // FIXME the error string should be universal for all implementations of
-    // ConfigGetter
-    public static final String UNABLE_TO_READ_CONFIG = "config retrieval error";
-
-    @Override
-    public String getConfiguration(String type) {
-        DriverHandler handler = handler();
-        NetconfController controller = handler.get(NetconfController.class);
-
-        DeviceId ofDeviceId = handler.data().deviceId();
-        Preconditions.checkNotNull(controller, "Netconf controller is null");
-        if (type == null ||
-                (!type.equalsIgnoreCase("running")
-                        && !type.equalsIgnoreCase("candidate")
-                        && !type.equalsIgnoreCase("startup"))) {
-            log.error("Configuration type must be either 'running', 'startup' or 'candidate'. '{}' is invalid", type);
-            return UNABLE_TO_READ_CONFIG;
-        }
-        try {
-            return controller.getDevicesMap().get(ofDeviceId).getSession()
-                    .getConfig(datastore(type.replace("cfgType=", "")));
-        } catch (NetconfException e) {
-            log.error("Configuration could not be retrieved {}", e.getMessage());
-        }
-        return UNABLE_TO_READ_CONFIG;
-    }
-}
diff --git a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/RpcResultParser.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/RpcResultParser.java
deleted file mode 100644
index 3eb43ac..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/RpcResultParser.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Foundation
- *
- * 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;
-
-public final class RpcResultParser {
-
-    private RpcResultParser() {
-        //Not called
-    }
-
-    public static String parseXml(final String deviceDescriptionResponse, final String keyWord) {
-
-        int end = deviceDescriptionResponse.lastIndexOf(keyWord);
-        end = deviceDescriptionResponse.lastIndexOf('<', end);
-        int start = deviceDescriptionResponse.lastIndexOf('>', end);
-        if (start > 1 && end > start) {
-            return deviceDescriptionResponse.substring(start + 1, end);
-        } else {
-            return null;
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/package-info.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/package-info.java
deleted file mode 100644
index 994b65b..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Foundation
- *
- * 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.
- */
-package org.onosproject.drivers.microsemi;
\ No newline at end of file
diff --git a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/IetfSystemNetconfService.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/IetfSystemNetconfService.java
deleted file mode 100644
index d72050e..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/IetfSystemNetconfService.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Foundation
- *
- * 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.time.OffsetDateTime;
-
-import org.onosproject.netconf.DatastoreId;
-import org.onosproject.netconf.NetconfException;
-import org.onosproject.netconf.NetconfSession;
-import org.onosproject.yang.gen.v1.ietfsystem.rev20140806.IetfSystem;
-import org.onosproject.yang.gen.v1.ietfsystem.rev20140806.IetfSystemOpParam;
-
-/**
- * Extension of ietfSystemService to include NETCONF sessions.
- *
- * This is manually extended and should be revised if the ietf-system.yang file changes
- */
-public interface IetfSystemNetconfService {
-    /**
-     * Returns the attribute ietfSystem.
-     *
-     * @param ietfSystem value of ietfSystem
-     * @param session An active NETCONF session
-     * @return ietfSystem
-     * @throws NetconfException if the session has any error
-     */
-    IetfSystem getIetfSystem(IetfSystemOpParam ietfSystem, NetconfSession session) throws NetconfException;
-
-    /**
-     * Returns the result of the init query.
-     *
-     * @param session An active NETCONF session
-     * @return ietfSystem
-     * @throws NetconfException if the session has any error
-     */
-    IetfSystem getIetfSystemInit(NetconfSession session) throws NetconfException;
-
-    /**
-     * Sets the value to attribute ietfSystem.
-     *
-     * @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
-     */
-    boolean setIetfSystem(IetfSystemOpParam ietfSystem, NetconfSession session,
-          DatastoreId ncDs) throws NetconfException;
-
-    /**
-     * Service interface of setCurrentDatetime.
-     *
-     * @param date input of service interface setCurrentDatetime
-     * @param session An active NETCONF session
-     * @throws NetconfException if the session has any error
-     */
-    void setCurrentDatetime(OffsetDateTime date, NetconfSession session) throws NetconfException;
-
-    /**
-     * Service interface of systemShutdown.
-     *
-     * @param session An active NETCONF session
-     * @throws NetconfException if the session has any error
-     */
-    void systemShutdown(NetconfSession session) throws NetconfException;
-
-}
diff --git a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/MseaCfmNetconfService.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/MseaCfmNetconfService.java
deleted file mode 100644
index cbe41ba..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/MseaCfmNetconfService.java
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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.incubator.net.l2monitoring.cfm.identifier.MaIdShort;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdId;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MepId;
-import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmConfigException;
-import org.onosproject.incubator.net.l2monitoring.soam.SoamId;
-import org.onosproject.netconf.DatastoreId;
-import org.onosproject.netconf.NetconfException;
-import org.onosproject.netconf.NetconfSession;
-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;
-
-import java.util.Optional;
-
-/**
- * Extension of mseaCfmService to include NETCONF sessions.
- *
- * 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 {
-
-    /**
-     * Returns minimal set of attributes of MEP.
-     *
-     * @param mdId The name of the MD
-     * @param maId The name of the MA
-     * @param mepId The ID of the MEP
-     * @param session An active NETCONF session
-     * @return mseaCfm
-     * @throws NetconfException if the session has any error
-     */
-    MseaCfm getMepEssentials(MdId mdId, MaIdShort maId, MepId mepId,
-                             NetconfSession session) throws NetconfException;
-
-    /**
-     * Returns full set of attributes of MEP.
-     * This returns config and state attributes of all children of the MEP
-     * except for Delay Measurements and Loss Measurements - these have to be
-     * retrieved separately, because of their potential size
-     * @param mdId The name of the MD
-     * @param maId The name of the MA
-     * @param mepId The ID of the MEP
-     * @param session An active NETCONF session
-     * @return mseaCfm
-     * @throws NetconfException if the session has any error
-     */
-    MseaCfm getMepFull(MdId mdId, MaIdShort maId, MepId mepId,
-            NetconfSession session) throws NetconfException;
-
-
-    /**
-     * Returns set of all MepIds from one Md or Ma or all.
-     *
-     * @param mdIdOptional An MdId to filter by, or empty to select all
-     * @param maIdOptional An MaId to filter by, or empty to select all
-     * @param session An active NETCONF session
-     * @param targetDs one of running, candidate or startup
-     * @return mseaCfm
-     * @throws NetconfException if the session has any error
-     */
-    MseaCfm getMepIds(Optional<MdId> mdIdOptional, Optional<MaIdShort> maIdOptional,
-                      NetconfSession session, DatastoreId targetDs) throws NetconfException;
-    /**
-     * Returns attributes of DM.
-     *
-     * @param mdId The name of the MD
-     * @param maId The name of the MA
-     * @param mepId The ID of the MEP
-     * @param dmId The Id of the Delay Measurement - if null then all DMs
-     * @param parts The parts of the DM to return
-     * @param session An active NETCONF session
-     * @return mseaCfm
-     * @throws NetconfException if the session has any error
-     */
-    MseaCfm getSoamDm(MdId mdId, MaIdShort maId, MepId mepId,
-                  SoamId dmId, DmEntryParts parts, NetconfSession session)
-                    throws NetconfException;
-
-    /**
-     * Sets the value to attribute mseaCfm.
-     *
-     * @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
-     */
-    boolean setMseaCfm(MseaCfmOpParam mseaCfm, NetconfSession session,
-                       DatastoreId targetDs) throws NetconfException;
-
-    /**
-     * Deletes named Meps of mseaCfm.
-     * Expects to see a list of Meps
-     *
-     * @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
-     * @throws CfmConfigException if the Cfm config has any error
-     */
-    boolean deleteMseaMep(MseaCfmOpParam mseaCfm, NetconfSession session,
-                            DatastoreId targetDs) throws NetconfException, CfmConfigException;
-
-    /**
-     * Deletes named Ma of mseaCfm.
-     * Expects to see a list of Mas
-     *
-     * @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
-     * @throws CfmConfigException if the Cfm config has any error
-     */
-    boolean deleteMseaMa(MseaCfmOpParam mseaCfm, NetconfSession session,
-                            DatastoreId targetDs) throws NetconfException, CfmConfigException;
-
-    /**
-     * Deletes a remote Mep from an MA.
-     * Expects one or more RMeps
-     *
-     * @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
-     * @throws CfmConfigException if the Cfm config has any error
-     */
-    boolean deleteMseaMaRMep(MseaCfmOpParam mseaCfm, NetconfSession session,
-                         DatastoreId targetDs) throws NetconfException, CfmConfigException;
-
-    /**
-     * Deletes named Md of mseaCfm.
-     * Expects to see a list of Mds
-     *
-     * @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
-     * @throws CfmConfigException if the Cfm config has any error
-     */
-    boolean deleteMseaMd(MseaCfmOpParam mseaCfm, NetconfSession session,
-                            DatastoreId targetDs) throws NetconfException, CfmConfigException;
-
-    /**
-     * Deletes named delay measurements of mseaCfm.
-     * Expects to see a list of Delay Measurements
-     *
-     * @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
-     * @throws CfmConfigException if the Cfm config has any error
-     */
-    boolean deleteMseaCfmDm(MseaCfmOpParam mseaCfm, NetconfSession session,
-                       DatastoreId targetDs) throws NetconfException, CfmConfigException;
-
-    /**
-     * Service interface of transmitLoopback.
-     *
-     * @param inputVar input of service interface transmitLoopback
-     * @param session An active NETCONF session
-     * @throws NetconfException if the session has any error
-     */
-    void transmitLoopback(TransmitLoopbackInput inputVar,
-                          NetconfSession session) throws NetconfException;
-
-    /**
-     * Service interface of abortLoopback.
-     *
-     * @param inputVar input of service interface abortLoopback
-     * @param session An active NETCONF session
-     * @throws NetconfException if the session has any error
-     */
-    void abortLoopback(AbortLoopbackInput inputVar,
-                       NetconfSession session) throws NetconfException;
-
-    /**
-     * Service interface of transmitLinktrace.
-     *
-     * @param inputVar input of service interface transmitLinktrace
-     * @param session An active NETCONF session
-     * @return transmitLinktraceOutput output of service interface transmitLinktrace
-     * @throws NetconfException if the session has any error
-     */
-    TransmitLinktraceOutput transmitLinktrace(TransmitLinktraceInput inputVar,
-              NetconfSession session) throws NetconfException;
-
-    public enum DmEntryParts {
-        ALL_PARTS,
-        CURRENT_ONLY,
-        HISTORY_ONLY;
-    }
-}
diff --git a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/MseaSaFilteringNetconfService.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/MseaSaFilteringNetconfService.java
deleted file mode 100644
index e845e59..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/MseaSaFilteringNetconfService.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/MseaUniEvcServiceNetconfService.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/MseaUniEvcServiceNetconfService.java
deleted file mode 100644
index 1501dfb..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/MseaUniEvcServiceNetconfService.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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.util.List;
-import java.util.Map;
-
-import org.onosproject.netconf.DatastoreId;
-import org.onosproject.netconf.NetconfException;
-import org.onosproject.netconf.NetconfSession;
-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.
- *
- * This is manually extended and should be revised if the msea-uni-evc-service.yang
- * file changes
- */
-public interface MseaUniEvcServiceNetconfService {
-    /**
-     * Returns the configuration and state attributes of the running mseaUniEvcService.
-     *
-     * @param mseaUniEvcService value of mseaUniEvcService
-     * @param session The NETCONF session
-     * @return mseaUniEvcService
-     * @throws NetconfException if the session has any error
-     */
-    MseaUniEvcService getMseaUniEvcService(
-            MseaUniEvcServiceOpParam mseaUniEvcService, NetconfSession session)
-            throws NetconfException;
-
-    /**
-     * Returns the configuration only attributes of mseaUniEvcService.
-     *
-     * @param mseaUniEvcService value of mseaUniEvcService
-     * @param session The NETCONF session
-     * @param targetDs one of running, candidate or startup
-     * @return mseaUniEvcService
-     * @throws NetconfException if the session has any error
-     */
-    MseaUniEvcService getConfigMseaUniEvcService(
-            MseaUniEvcServiceOpParam mseaUniEvcService, NetconfSession session,
-            DatastoreId targetDs) throws NetconfException;
-
-    /**
-     * Sets the value to attribute 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 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
-     * @param ncDs The datastore to affect - running, candidate or startup
-     * @return The Object Model with the VLans
-     * @throws NetconfException if the session has any error
-     */
-    MseaUniEvcService getmseaUniEvcCeVlanMaps(
-            NetconfSession session, DatastoreId ncDs)
-            throws NetconfException;
-
-    /**
-     * Replace ceVlans or delete EVCs from a device.
-     *
-     * It is necessary to have a custom command for this as the YCH cannot
-     * handle the intricacies of putting a replace operation on the
-     * ceVlanMap leaf at present
-     *
-     * @param ceVlanUpdates A Map of CeVlanMap entries to change, as flows are deleted
-     * @param flowVlanIds The IDs of flows that are being removed
-     * @param session A NETCONF Session
-     * @param targetDs The datastore to affect - running, candidate or startup
-     * @param portAssign The port assignment of the device
-     * @throws NetconfException if the session has any error
-     */
-    void removeEvcUniFlowEntries(
-            Map<Integer, String> ceVlanUpdates,
-            Map<Integer, List<Short>> flowVlanIds,
-            NetconfSession session,
-            DatastoreId targetDs,
-            UniSideInterfaceAssignmentEnum portAssign)
-                    throws NetconfException;
-
-}
diff --git a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/UniSide.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/UniSide.java
deleted file mode 100644
index a5b8a2d..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/UniSide.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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;
-
-/**
- * An enumeration to describe the side of a UNI - Customer or Network.
- * For reference see MEF 6.2
- */
-public enum UniSide {
-    CUSTOMER,
-    NETWORK
-}
diff --git a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/custom/CustomEvcPerUnic.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/custom/CustomEvcPerUnic.java
deleted file mode 100644
index cb0e4bd..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/custom/CustomEvcPerUnic.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/custom/CustomEvcPerUnin.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/custom/CustomEvcPerUnin.java
deleted file mode 100644
index a2932d2..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/custom/CustomEvcPerUnin.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/custom/package-info.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/custom/package-info.java
deleted file mode 100644
index 9c91840..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/custom/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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.drivers.microsemi.yang.custom;
\ No newline at end of file
diff --git a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/impl/AbstractYangServiceImpl.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/impl/AbstractYangServiceImpl.java
deleted file mode 100644
index e61d5e5..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/impl/AbstractYangServiceImpl.java
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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 com.google.common.base.Charsets;
-import com.google.common.io.ByteSource;
-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.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.CcmIntervalEnum;
-import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.augmentedmseacfmmaintenanceassociationendpoint.lossmeasurements.lossmeasurement.MessagePeriodEnum;
-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.osgi.service.component.annotations.Activate;
-import org.osgi.service.component.annotations.Component;
-import org.osgi.service.component.annotations.Deactivate;
-import org.osgi.service.component.annotations.Reference;
-import org.osgi.service.component.annotations.ReferenceCardinality;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-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;
-
-/**
- * Abstract class that implements some of the core functions of a YANG model service.
- *
- */
-@Component(immediate = true, service = AbstractYangServiceImpl.class)
-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)
-    protected CoreService coreService;
-
-    @Reference(cardinality = ReferenceCardinality.MANDATORY)
-    protected YangModelRegistry yangModelRegistry;
-
-    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 = null;
-    protected YangSerializerContext yCtx = null;
-
-    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>)");
-    protected static final Pattern REGEX_RPC_OK =
-            Pattern.compile("\\R?\\s*(<ok/>)\\R?");
-    @Activate
-    public void activate() {
-        Set<YangSerializer> yangSer = ((YangSerializerRegistry) yangModelRegistry).getSerializers();
-        xSer = (XmlSerializer) yangSer.stream()
-                .filter(ser -> (ser instanceof XmlSerializer)).findFirst().get();
-        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 setNetconfObject()");
-        } else if (targetDs == null) {
-            throw new NetconfException("TargetDs is null when calling setNetconfObject()");
-        }
-
-        String xmlQueryStr = encodeMoToXmlStr(moConfig, annotations);
-        log.debug("Sending <edit-config> query on NETCONF session " + session.getSessionId() +
-                ":\n" + xmlQueryStr);
-
-        //Some encoded values just have to be replaced
-        xmlQueryStr = xmlQueryStr.replace(MessagePeriodEnum.YANGAUTOPREFIX3MS.toString(), "3ms");
-        xmlQueryStr = xmlQueryStr.replace(MessagePeriodEnum.YANGAUTOPREFIX10MS.toString(), "10ms");
-        xmlQueryStr = xmlQueryStr.replace(MessagePeriodEnum.YANGAUTOPREFIX100MS.toString(), "100ms");
-        xmlQueryStr = xmlQueryStr.replace(MessagePeriodEnum.YANGAUTOPREFIX1000MS.toString(), "1000ms");
-
-        xmlQueryStr = xmlQueryStr.replace(CcmIntervalEnum.YANGAUTOPREFIX3_3MS.toString(), "3.3ms");
-        xmlQueryStr = xmlQueryStr.replace(CcmIntervalEnum.YANGAUTOPREFIX10MS.toString(), "10ms");
-        xmlQueryStr = xmlQueryStr.replace(CcmIntervalEnum.YANGAUTOPREFIX100MS.toString(), "100ms");
-        xmlQueryStr = xmlQueryStr.replace(CcmIntervalEnum.YANGAUTOPREFIX1S.toString(), "1s");
-
-        return session.editConfig(targetDs, null, xmlQueryStr);
-    }
-
-    /**
-     * Internal method to generically call a NETCONF custom RPC from a set of YANG objects.
-     *
-     * @param customRpcInput A YANG object model
-     * @param rpcName The name of the RPC - replaces 'input' in the XML payload
-     * @param session A NETCONF session
-     * @return ModelObjectData value indicating success or failure of command
-     * @throws NetconfException if the session has any error
-     */
-    protected final ModelObjectData customRpcNetconf(
-            ModelObjectData customRpcInput, String rpcName, NetconfSession session)
-            throws NetconfException {
-        if (customRpcInput == null) {
-            throw new NetconfException("Input object cannot be null");
-        } else if (session == null) {
-            throw new NetconfException("Session is null when calling customRpcNetconf()");
-        }
-
-        String xmlQueryStr = encodeMoToXmlStr(customRpcInput, null);
-        xmlQueryStr = xmlQueryStr.replace("input", rpcName);
-        log.debug("Sending <edit-config> query on NETCONF session " + session.getSessionId() +
-                ":\n" + xmlQueryStr);
-
-        String xmlResult = session.doWrappedRpc(xmlQueryStr);
-        xmlResult = removeRpcReplyData(xmlResult);
-        if (REGEX_RPC_OK.matcher(xmlResult).matches()) {
-            return null;
-        }
-
-        DefaultCompositeStream resultDcs = new DefaultCompositeStream(
-                null, new ByteArrayInputStream(xmlResult.getBytes()));
-        CompositeData compositeData = xSer.decode(resultDcs, yCtx);
-
-        return ((ModelConverter) yangModelRegistry).createModel(compositeData.resourceData());
-    }
-
-    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) throws NetconfException {
-        rpcReplyXml = REGEX_XML_HEADER.matcher(rpcReplyXml).replaceFirst("");
-        if (rpcReplyXml.contains("<rpc-error")) {
-            throw new NetconfException("NETCONF rpc-error: " + rpcReplyXml);
-        }
-
-        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/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/impl/IetfSystemManager.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/impl/IetfSystemManager.java
deleted file mode 100644
index 16f6be8..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/impl/IetfSystemManager.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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.time.OffsetDateTime;
-import java.time.format.DateTimeFormatter;
-
-import org.osgi.service.component.annotations.Activate;
-import org.osgi.service.component.annotations.Component;
-import org.osgi.service.component.annotations.Deactivate;
-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.yang.gen.v1.ietfsystem.rev20140806.ietfsystem.DefaultSystem;
-import org.onosproject.yang.gen.v1.ietfsystem.rev20140806.ietfsystem.DefaultSystemState;
-import org.onosproject.yang.gen.v1.ietfsystem.rev20140806.IetfSystem;
-import org.onosproject.yang.gen.v1.ietfsystem.rev20140806.IetfSystemOpParam;
-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.
- */
-@Component(immediate = true, service = AbstractYangServiceImpl.class)
-public class IetfSystemManager extends AbstractYangServiceImpl
-    implements IetfSystemNetconfService {
-
-    protected static final String IETF_SYSTEM = "org.onosproject.drivers.microsemi.yang.ietfsystem";
-
-    @Activate
-    public void activate() {
-        super.activate();
-        appId = coreService.registerApplication(IETF_SYSTEM);
-        log.info("IetfSystemManager Started");
-    }
-
-    @Deactivate
-    public void deactivate() {
-        super.deactivate();
-        log.info("IetfSystemManager 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.
-     * @throws NetconfException if the session has any error
-     */
-    @Override
-    public IetfSystem getIetfSystem(IetfSystemOpParam ietfSystemFilter, NetconfSession session)
-            throws NetconfException {
-
-        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
-    public IetfSystem getIetfSystemInit(NetconfSession session) throws NetconfException {
-        if (session == null) {
-            throw new NetconfException("Session is null when calling getIetfSystemInit()");
-        }
-
-        String xmlResult = session.get(getInitRequestBuilder(), null);
-
-        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());
-
-        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);
-            }
-        }
-
-        return ietfSystem;
-    }
-
-    /**
-     * Call NETCONF edit-config with a configuration.
-     */
-    @Override
-    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
-    public void setCurrentDatetime(OffsetDateTime date, NetconfSession session)
-            throws NetconfException {
-        String xmlQueryStr = getSetCurrentDatetimeBuilder(date);
-        log.info("Sending <get> query on NETCONF session " + session.getSessionId() +
-                ":\n" + xmlQueryStr);
-
-        String xmlResult = session.doWrappedRpc(xmlQueryStr);
-        log.info("Result from NETCONF RPC <set-current-datetime>: {}", xmlResult);
-    }
-
-    @Override
-    public void systemShutdown(NetconfSession session) {
-        throw new UnsupportedOperationException("Not yet implemented");
-    }
-
-    /**
-     * Builds a request crafted to get the configuration required to create
-     * details descriptions for the device.
-     *
-     * @return The request string.
-     */
-    private static String getInitRequestBuilder() {
-        StringBuilder rpc = new StringBuilder();
-        rpc.append("<system-state xmlns=\"urn:ietf:params:xml:ns:yang:ietf-system\" ");
-        rpc.append("xmlns:sysms=\"http://www.microsemi.com/microsemi-edge-assure/msea-system\">");
-        rpc.append("<platform>");
-        rpc.append("<os-release/>");
-        rpc.append("<sysms:device-identification>");
-        rpc.append("<sysms:serial-number/>");
-        rpc.append("</sysms:device-identification>");
-        rpc.append("</platform>");
-        rpc.append("<clock>");
-        rpc.append("<current-datetime/>");
-        rpc.append("</clock>");
-        rpc.append("</system-state>");
-        rpc.append("<system xmlns=\"urn:ietf:params:xml:ns:yang:ietf-system\" ");
-        rpc.append("xmlns:sysms=\"http://www.microsemi.com/microsemi-edge-assure/msea-system\">");
-        rpc.append("<sysms:longitude/>");
-        rpc.append("<sysms:latitude/>");
-        rpc.append("</system>");
-        return rpc.toString();
-    }
-
-    private static String getSetCurrentDatetimeBuilder(OffsetDateTime date) {
-        StringBuilder rpc = new StringBuilder();
-        rpc.append("<set-current-datetime xmlns=\"urn:ietf:params:xml:ns:yang:ietf-system\">");
-        rpc.append("<current-datetime>");
-        rpc.append(date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx")));
-        rpc.append("</current-datetime>");
-        rpc.append("</set-current-datetime>");
-
-        return rpc.toString();
-    }
-}
diff --git a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/impl/MseaCfmManager.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/impl/MseaCfmManager.java
deleted file mode 100644
index 81581d0..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/impl/MseaCfmManager.java
+++ /dev/null
@@ -1,648 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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.onosproject.drivers.microsemi.yang.MseaCfmNetconfService;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdShort;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdId;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MepId;
-import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmConfigException;
-import org.onosproject.incubator.net.l2monitoring.soam.SoamId;
-import org.onosproject.netconf.DatastoreId;
-import org.onosproject.netconf.NetconfException;
-import org.onosproject.netconf.NetconfSession;
-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.mefcfm.MaintenanceDomain;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.MaintenanceAssociation;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.MaintenanceAssociationEndPoint;
-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.gen.v1.mseasoampm.rev20160229.mseasoampm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.AugmentedMseaCfmMaintenanceAssociationEndPoint;
-import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.DefaultAugmentedMseaCfmMaintenanceAssociationEndPoint;
-import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.augmentedmseacfmmaintenanceassociationendpoint.delaymeasurements.DelayMeasurement;
-import org.onosproject.yang.gen.v1.mseatypes.rev20160229.mseatypes.MepIdType;
-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 org.osgi.service.component.annotations.Activate;
-import org.osgi.service.component.annotations.Component;
-import org.osgi.service.component.annotations.Deactivate;
-
-import java.io.ByteArrayInputStream;
-import java.util.ArrayList;
-import java.util.Optional;
-import java.util.regex.Pattern;
-
-/**
- * Implementation of the MseaCfmServiceNetconf YANG model service.
- */
-@Component(immediate = true, service = MseaCfmNetconfService.class)
-public class MseaCfmManager extends AbstractYangServiceImpl
-    implements MseaCfmNetconfService {
-
-    private static final String MSEA_CFM = "org.onosproject.drivers.microsemi.yang.mseacfmservice";
-
-    private static final String MSEA_CFM_NS = "http://www.microsemi.com/microsemi-edge-assure/msea-cfm";
-    private static final String MSEA_CFM_PM_NS = "http://www.microsemi.com/microsemi-edge-assure/msea-soam-pm";
-
-    //FIXME Remove when the issue with Null bits on onos-yang-tools is sorted
-    @Deprecated
-    protected static final Pattern REGEX_EMPTY_ACTIVE_DEFECTS =
-            Pattern.compile("(<active-defects)[ ]?(/>)", Pattern.DOTALL);
-    //FIXME Remove when the issue with Null bits on onos-yang-tools is sorted
-    @Deprecated
-    protected static final Pattern REGEX_EMPTY_LAST_DEFECT_SENT =
-            Pattern.compile("(<msea-soam-fm:last-defect-sent)[ ]?(/>)", Pattern.DOTALL);
-    private static final String MEF_CFM = "mef-cfm";
-    private static final String MAINTENANCE_DOMAIN = "maintenance-domain";
-    public static final String ID = "id";
-    private static final String MAINTENANCE_ASSOCIATION = "maintenance-association";
-    private static final String TRANSMIT_LOOPBACK = "transmit-loopback";
-    private static final String ABORT_LOOPBACK = "abort-loopback";
-    private static final String MAINTENANCE_ASSOCIATION_END_POINT = "maintenance-association-end-point";
-    private static final String MEP_ID = "mep-id";
-    private static final String DELAY_MEASUREMENTS = "delay-measurements";
-    private static final String DELAY_MEASUREMENT = "delay-measurement";
-    private static final String DM_ID = "dm-id";
-    private static final String MEP_IDENTIFIER = "mep-identifier";
-    private static final String REMOTE_MEPS = "remote-meps";
-
-    @Activate
-    public void activate() {
-        super.activate();
-        appId = coreService.registerApplication(MSEA_CFM);
-        log.info("MseaCfmService Started");
-    }
-
-    @Deactivate
-    public void deactivate() {
-        super.deactivate();
-        log.info("MseaCfmService Stopped");
-    }
-
-    @Override
-    public MseaCfm getMepEssentials(MdId mdId, MaIdShort maId, MepId mepId,
-                                    NetconfSession session) throws NetconfException {
-        if (session == null) {
-            throw new NetconfException("Session is null when calling getMepEssentials()");
-        }
-
-        String xmlQueryStr = buildMepEssentialsQueryString(mdId, maId, mepId);
-        log.debug("Sending <get> for MEP essentials" +
-                " query on NETCONF session " + session.getSessionId() +
-                ":\n" + xmlQueryStr);
-
-        String xmlResult = session.get(xmlQueryStr, null);
-        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 getMepFull(MdId mdId, MaIdShort maId, MepId mepId,
-            NetconfSession session) throws NetconfException {
-        if (session == null) {
-            throw new NetconfException("Session is null when calling getMepFull()");
-        }
-
-        String xmlQueryStr = buildMepFullQueryString(mdId, maId, mepId);
-        log.debug("Sending <get> for full MEP" +
-                " query on NETCONF session " + session.getSessionId() +
-                ":\n" + xmlQueryStr);
-
-        String xmlResult = session.get(xmlQueryStr, null);
-        xmlResult = removeRpcReplyData(xmlResult);
-        xmlResult = removeEmptyActiveDefects(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 getMepIds(Optional<MdId> mdIdOptional, Optional<MaIdShort> maIdOptional,
-             NetconfSession session, DatastoreId targetDs) throws NetconfException {
-
-        ModelObjectData.Builder moQueryBldr = DefaultModelObjectData.builder();
-
-        ArrayList<AnnotatedNodeInfo> annotations = new ArrayList<>();
-        String xmlQueryStr = encodeMoToXmlStr(moQueryBldr.build(), annotations);
-
-        log.debug("Sending <get> for full MEP" +
-                " query on NETCONF session " + session.getSessionId() +
-                ":\n" + xmlQueryStr);
-
-        String xmlResult = session.get(xmlQueryStr, null);
-        xmlResult = removeRpcReplyData(xmlResult);
-        xmlResult = removeEmptyActiveDefects(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(MdId mdName, MaIdShort maName, MepId mepId,
-                             SoamId dmId, DmEntryParts parts, NetconfSession session)
-                    throws NetconfException {
-        String xmlQueryStr = buildDmQueryString(mdName, maName, mepId, dmId, parts);
-        log.debug("Sending <get> for " +
-                " query on NETCONF session " + session.getSessionId() +
-                ":\n" + xmlQueryStr);
-
-        String xmlResult = session.get(xmlQueryStr, null);
-        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 boolean setMseaCfm(MseaCfmOpParam mseaCfm, NetconfSession session,
-            DatastoreId targetDs) throws NetconfException {
-
-        ModelObjectData moQuery = DefaultModelObjectData.builder()
-                .addModelObject((ModelObject) mseaCfm.mefCfm()).build();
-        return setNetconfObject(moQuery, session, targetDs, null);
-    }
-
-    @Override
-    public boolean deleteMseaCfmDm(MseaCfmOpParam mseaCfm, NetconfSession session,
-                            DatastoreId targetDs) throws NetconfException, CfmConfigException {
-
-        if (mseaCfm.mefCfm() == null) {
-            throw new CfmConfigException("mefCfm object must be present before Meps can be added");
-        }
-        ModelObjectData mseCfmDmList = DefaultModelObjectData.builder()
-                .addModelObject(mseaCfm).build();
-
-        ArrayList<AnnotatedNodeInfo> anis = new ArrayList<>();
-        for (MaintenanceDomain md:mseaCfm.mefCfm().maintenanceDomain()) {
-            if (md.id() == 0) {
-                throw new CfmConfigException("An MD numeric ID must be given");
-            }
-            for (MaintenanceAssociation ma:md.maintenanceAssociation()) {
-                if (ma.id() == 0) {
-                    throw new CfmConfigException("An MA numeric ID must be given");
-                }
-                for (MaintenanceAssociationEndPoint mep:ma.maintenanceAssociationEndPoint()) {
-                    AugmentedMseaCfmMaintenanceAssociationEndPoint mepAugment =
-                        mep.augmentation(DefaultAugmentedMseaCfmMaintenanceAssociationEndPoint.class);
-                    if (mepAugment != null && mepAugment.delayMeasurements() != null) {
-                        for (DelayMeasurement dm:mepAugment.delayMeasurements().delayMeasurement()) {
-                            ResourceId.Builder ridBuilder = ResourceId.builder()
-                                    .addBranchPointSchema("/", null)
-                                    .addBranchPointSchema(MEF_CFM, MSEA_CFM_NS)
-                                    .addBranchPointSchema(MAINTENANCE_DOMAIN, MSEA_CFM_NS)
-                                    .addKeyLeaf(ID, MSEA_CFM_NS, md.id())
-                                    .addBranchPointSchema(MAINTENANCE_ASSOCIATION, MSEA_CFM_NS)
-                                    .addKeyLeaf(ID, MSEA_CFM_NS, ma.id())
-                                    .addBranchPointSchema(MAINTENANCE_ASSOCIATION_END_POINT, MSEA_CFM_NS)
-                                    .addKeyLeaf(MEP_ID, MSEA_CFM_NS, mep.mepIdentifier())
-                                    .addBranchPointSchema(DELAY_MEASUREMENTS, MSEA_CFM_PM_NS)
-                                    .addBranchPointSchema(DELAY_MEASUREMENT, MSEA_CFM_PM_NS)
-                                    .addKeyLeaf(DM_ID, MSEA_CFM_PM_NS, dm.dmId());
-                            AnnotatedNodeInfo ani = DefaultAnnotatedNodeInfo.builder()
-                                    .resourceId(ridBuilder.build())
-                                    .addAnnotation(new DefaultAnnotation(NC_OPERATION, OP_DELETE))
-                                    .build();
-                            anis.add(ani);
-                        }
-                    }
-                }
-            }
-        }
-
-        return setNetconfObject(mseCfmDmList, session, targetDs, anis);
-    }
-
-    @Override
-    public boolean deleteMseaMep(MseaCfmOpParam mseaCfm, NetconfSession session,
-                                   DatastoreId targetDs) throws NetconfException, CfmConfigException {
-
-        if (mseaCfm.mefCfm() == null) {
-            throw new CfmConfigException("mefCfm object must be present before Meps can be added");
-        }
-        ModelObjectData mseCfmMepList = DefaultModelObjectData.builder()
-                .addModelObject((ModelObject) mseaCfm.mefCfm()).build();
-
-        ArrayList<AnnotatedNodeInfo> anis = new ArrayList<>();
-        for (MaintenanceDomain md:mseaCfm.mefCfm().maintenanceDomain()) {
-            if (md.id() == 0) {
-                throw new CfmConfigException("An MD numeric ID must be given");
-            }
-            for (MaintenanceAssociation ma:md.maintenanceAssociation()) {
-                if (ma.id() == 0) {
-                    throw new CfmConfigException("An MA numeric ID must be given");
-                }
-                for (MaintenanceAssociationEndPoint mep:ma.maintenanceAssociationEndPoint()) {
-                    ResourceId.Builder ridBuilder = ResourceId.builder()
-                            .addBranchPointSchema("/", null)
-                            .addBranchPointSchema(MEF_CFM, MSEA_CFM_NS)
-                            .addBranchPointSchema(MAINTENANCE_DOMAIN, MSEA_CFM_NS)
-                            .addKeyLeaf(ID, MSEA_CFM_NS, md.id())
-                            .addBranchPointSchema(MAINTENANCE_ASSOCIATION, MSEA_CFM_NS)
-                            .addKeyLeaf(ID, MSEA_CFM_NS, ma.id())
-                            .addBranchPointSchema(MAINTENANCE_ASSOCIATION_END_POINT, MSEA_CFM_NS)
-                            .addKeyLeaf(MEP_IDENTIFIER, MSEA_CFM_NS, mep.mepIdentifier().uint16());
-                    AnnotatedNodeInfo ani = DefaultAnnotatedNodeInfo.builder()
-                            .resourceId(ridBuilder.build())
-                            .addAnnotation(new DefaultAnnotation(NC_OPERATION, OP_DELETE))
-                            .build();
-                    anis.add(ani);
-                }
-            }
-        }
-
-        return setNetconfObject(mseCfmMepList, session, targetDs, anis);
-    }
-
-    @Override
-    public boolean deleteMseaMa(MseaCfmOpParam mseaCfm, NetconfSession session,
-                                 DatastoreId targetDs) throws NetconfException, CfmConfigException {
-        if (mseaCfm.mefCfm() == null) {
-            throw new CfmConfigException("mefCfm object must be present before Meps can be added");
-        }
-
-        ModelObjectData mseCfmMepList = DefaultModelObjectData.builder()
-                .addModelObject((ModelObject) mseaCfm.mefCfm()).build();
-        ArrayList<AnnotatedNodeInfo> anis = new ArrayList<>();
-        for (MaintenanceDomain md:mseaCfm.mefCfm().maintenanceDomain()) {
-            if (md.id() == 0) {
-                throw new CfmConfigException("An MD numeric ID must be given");
-            }
-            for (MaintenanceAssociation ma:md.maintenanceAssociation()) {
-                if (ma.id() == 0) {
-                    throw new CfmConfigException("An MA numeric ID must be given");
-                }
-                ResourceId.Builder ridBuilder = ResourceId.builder()
-                        .addBranchPointSchema("/", null)
-                        .addBranchPointSchema(MEF_CFM, MSEA_CFM_NS)
-                        .addBranchPointSchema(MAINTENANCE_DOMAIN, MSEA_CFM_NS)
-                        .addKeyLeaf(ID, MSEA_CFM_NS, md.id())
-                        .addBranchPointSchema(MAINTENANCE_ASSOCIATION, MSEA_CFM_NS)
-                        .addKeyLeaf(ID, MSEA_CFM_NS, ma.id());
-
-                AnnotatedNodeInfo ani = DefaultAnnotatedNodeInfo.builder()
-                .resourceId(ridBuilder.build())
-                .addAnnotation(new DefaultAnnotation(NC_OPERATION, OP_DELETE))
-                .build();
-                anis.add(ani);
-            }
-        }
-
-        return setNetconfObject(mseCfmMepList, session, targetDs, anis);
-    }
-
-    @Override
-    public boolean deleteMseaMaRMep(MseaCfmOpParam mseaCfm, NetconfSession session,
-                                 DatastoreId targetDs) throws NetconfException, CfmConfigException {
-        if (mseaCfm.mefCfm() == null) {
-            throw new CfmConfigException("mefCfm object must be present before Meps can be added");
-        }
-
-        ModelObjectData mseCfmMepList = DefaultModelObjectData.builder()
-                .addModelObject((ModelObject) mseaCfm.mefCfm()).build();
-        ArrayList<AnnotatedNodeInfo> anis = new ArrayList<>();
-        for (MaintenanceDomain md:mseaCfm.mefCfm().maintenanceDomain()) {
-            if (md.id() == 0) {
-                throw new CfmConfigException("An MD numeric ID must be given");
-            }
-            for (MaintenanceAssociation ma:md.maintenanceAssociation()) {
-                if (ma.id() == 0) {
-                    throw new CfmConfigException("An MA numeric ID must be given");
-                }
-                for (MepIdType rmep:ma.remoteMeps()) {
-                    ResourceId.Builder ridBuilder = ResourceId.builder()
-                            .addBranchPointSchema("/", null)
-                            .addBranchPointSchema(MEF_CFM, MSEA_CFM_NS)
-                            .addBranchPointSchema(MAINTENANCE_DOMAIN, MSEA_CFM_NS)
-                            .addKeyLeaf(ID, MSEA_CFM_NS, md.id())
-                            .addBranchPointSchema(MAINTENANCE_ASSOCIATION, MSEA_CFM_NS)
-                            .addKeyLeaf(ID, MSEA_CFM_NS, ma.id())
-                            .addLeafListBranchPoint(REMOTE_MEPS, MSEA_CFM_NS,
-                                    rmep.uint16());
-                    AnnotatedNodeInfo ani = DefaultAnnotatedNodeInfo.builder()
-                            .resourceId(ridBuilder.build())
-                            .addAnnotation(new DefaultAnnotation(NC_OPERATION, OP_DELETE))
-                            .build();
-                    anis.add(ani);
-                }
-            }
-        }
-
-        return setNetconfObject(mseCfmMepList, session, targetDs, anis);
-    }
-
-
-    @Override
-    public boolean deleteMseaMd(MseaCfmOpParam mseaCfm, NetconfSession session,
-                                DatastoreId targetDs) throws NetconfException, CfmConfigException {
-        if (mseaCfm.mefCfm() == null) {
-            throw new CfmConfigException("mefCfm object must be present before Meps can be added");
-        }
-        ModelObjectData mseCfmMepList = DefaultModelObjectData.builder()
-                .addModelObject((ModelObject) mseaCfm.mefCfm()).build();
-
-        ArrayList<AnnotatedNodeInfo> anis = new ArrayList<>();
-        for (MaintenanceDomain md:mseaCfm.mefCfm().maintenanceDomain()) {
-            if (md.id() == 0) {
-                throw new CfmConfigException("An MD numeric ID must be given");
-            }
-            ResourceId.Builder ridBuilder = ResourceId.builder()
-                    .addBranchPointSchema("/", null)
-                    .addBranchPointSchema(MEF_CFM, MSEA_CFM_NS)
-                    .addBranchPointSchema(MAINTENANCE_DOMAIN, MSEA_CFM_NS)
-                    .addKeyLeaf(ID, MSEA_CFM_NS, md.id());
-            AnnotatedNodeInfo ani = DefaultAnnotatedNodeInfo.builder()
-                    .resourceId(ridBuilder.build())
-                    .addAnnotation(new DefaultAnnotation(NC_OPERATION, OP_DELETE))
-                    .build();
-            anis.add(ani);
-        }
-
-        return setNetconfObject(mseCfmMepList, session, targetDs, anis);
-    }
-
-    /**
-     * Call RPCs on the device through NETCONF.
-     */
-    @Override
-    public void transmitLoopback(TransmitLoopbackInput inputVar,
-            NetconfSession session) throws NetconfException {
-
-        ModelObjectData transLoopbackMo = DefaultModelObjectData.builder()
-                .addModelObject((ModelObject) inputVar).build();
-
-        customRpcNetconf(transLoopbackMo,
-                TRANSMIT_LOOPBACK, session);
-    }
-
-    @Override
-    public void abortLoopback(AbortLoopbackInput inputVar,
-            NetconfSession session) throws NetconfException {
-        ModelObjectData abortLoopbackMo = DefaultModelObjectData.builder()
-                .addModelObject((ModelObject) inputVar).build();
-
-        customRpcNetconf(abortLoopbackMo, ABORT_LOOPBACK, session);
-    }
-
-    @Override
-    public TransmitLinktraceOutput transmitLinktrace(
-            TransmitLinktraceInput inputVar, NetconfSession session)
-            throws NetconfException {
-        throw new UnsupportedOperationException("Not yet implemented");
-    }
-
-    //FIXME Remove when the fix for null bits with onos-yang-tools
-    // https://gerrit.onosproject.org/#/c/15777/ is available
-    @Deprecated
-    private static String removeEmptyActiveDefects(String rpcReplyXml) throws NetconfException {
-        rpcReplyXml = REGEX_EMPTY_ACTIVE_DEFECTS.matcher(rpcReplyXml).replaceFirst("");
-        rpcReplyXml = REGEX_EMPTY_LAST_DEFECT_SENT.matcher(rpcReplyXml).replaceFirst("");
-
-        return rpcReplyXml;
-    }
-
-    @Deprecated //Replace this with a ModelObject defintion
-    private String buildMepEssentialsQueryString(MdId mdId, MaIdShort maId,
-            MepId mepId) {
-        StringBuilder rpc = new StringBuilder();
-
-        rpc.append("<mef-cfm xmlns=\"http://www.microsemi.com/microsemi-edge-assure/msea-cfm\" ");
-        rpc.append(" xmlns:msea-soam-fm=\"http://www.microsemi.com/microsemi-edge-assure/msea-soam-fm\" ");
-        rpc.append("xmlns:msea-soam-pm=\"http://www.microsemi.com/microsemi-edge-assure/msea-soam-pm\">\n");
-        rpc.append("<maintenance-domain>\n");
-        rpc.append("<id/>\n");
-        rpc.append("<name>");
-        rpc.append(mdId.mdName());
-        rpc.append("</name>\n");
-        rpc.append("<maintenance-association>\n");
-        rpc.append("<id/>\n");
-        rpc.append("<name>");
-        rpc.append(maId.maName());
-        rpc.append("</name>\n");
-        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");
-        rpc.append("<mep-identifier>");
-        rpc.append(mepId.id());
-        rpc.append("</mep-identifier>\n");
-        rpc.append("<mac-address/>\n");
-        rpc.append("<remote-mep-database>\n");
-        rpc.append("<remote-mep>\n");
-        rpc.append("<remote-mep-id/>\n");
-        rpc.append("</remote-mep>\n");
-        rpc.append("</remote-mep-database>\n");
-        rpc.append("<msea-soam-pm:delay-measurements>\n");
-        rpc.append("<msea-soam-pm:delay-measurement>\n");
-        rpc.append("<msea-soam-pm:dm-id/>\n");
-        rpc.append("</msea-soam-pm:delay-measurement>\n");
-        rpc.append("</msea-soam-pm:delay-measurements>\n");
-        rpc.append("<msea-soam-pm:loss-measurements>\n");
-        rpc.append("<msea-soam-pm:loss-measurement>\n");
-        rpc.append("<msea-soam-pm:lm-id/>\n");
-        rpc.append("</msea-soam-pm:loss-measurement>\n");
-        rpc.append("</msea-soam-pm:loss-measurements>\n");
-        rpc.append("</maintenance-association-end-point>\n");
-        rpc.append("</maintenance-association>\n");
-        rpc.append("</maintenance-domain>\n");
-        rpc.append("</mef-cfm>");
-
-        return rpc.toString();
-    }
-
-    @Deprecated //Replace this with a ModelObject defintion
-    private String buildMepFullQueryString(MdId mdId, MaIdShort maId, MepId mepId) {
-        StringBuilder rpc = new StringBuilder();
-
-        rpc.append("<mef-cfm xmlns=\"http://www.microsemi.com/microsemi-edge-assure/msea-cfm\" ");
-        rpc.append(" xmlns:msea-soam-fm=\"http://www.microsemi.com/microsemi-edge-assure/msea-soam-fm\" ");
-        rpc.append("xmlns:msea-soam-pm=\"http://www.microsemi.com/microsemi-edge-assure/msea-soam-pm\">\n");
-        rpc.append("<maintenance-domain>\n");
-        rpc.append("<id/>\n");
-        rpc.append("<name>");
-        rpc.append(mdId.mdName());
-        rpc.append("</name>\n");
-        rpc.append("<maintenance-association>\n");
-        rpc.append("<id/>\n");
-        rpc.append("<name>");
-        rpc.append(maId.maName());
-        rpc.append("</name>\n");
-        rpc.append("<maintenance-association-end-point>\n");
-        rpc.append("<mep-identifier>");
-        rpc.append(mepId.id());
-        rpc.append("</mep-identifier>\n");
-        rpc.append("<interface/>\n");
-        //Direction will always be DOWN for EA1000
-        rpc.append("<primary-vid/>\n");
-        rpc.append("<administrative-state/>\n");
-        rpc.append("<mac-address/>\n");
-        rpc.append("<ccm-ltm-priority/>\n");
-        rpc.append("<continuity-check/>\n"); //Container
-        rpc.append("<loopback/>\n"); //Container
-        rpc.append("<linktrace/>\n"); //Container
-        rpc.append("<remote-mep-database/>\n"); //Container
-        rpc.append("<msea-soam-fm:operational-state/>\n");
-        rpc.append("<msea-soam-fm:connectivity-status/>\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");
-        rpc.append("<msea-soam-fm:rdi-transmit-status/>\n");
-        rpc.append("</maintenance-association-end-point>\n");
-        rpc.append("</maintenance-association>\n");
-        rpc.append("</maintenance-domain>\n");
-        rpc.append("</mef-cfm>");
-
-        return rpc.toString();
-    }
-
-    @Deprecated //Replace this with a ModelObject defintion
-    private String buildDmQueryString(MdId mdId, MaIdShort maId, MepId mepId,
-            SoamId dmId, DmEntryParts parts) {
-        StringBuilder rpc = new StringBuilder();
-
-        rpc.append("<mef-cfm xmlns=\"http://www.microsemi.com/microsemi-edge-assure/msea-cfm\" ");
-        rpc.append(" xmlns:msea-soam-fm=\"http://www.microsemi.com/microsemi-edge-assure/msea-soam-fm\" ");
-        rpc.append("xmlns:msea-soam-pm=\"http://www.microsemi.com/microsemi-edge-assure/msea-soam-pm\">\n");
-        rpc.append("<maintenance-domain>\n");
-        rpc.append("<id/>\n");
-        rpc.append("<name>");
-        rpc.append(mdId.mdName());
-        rpc.append("</name>\n");
-        rpc.append("<maintenance-association>\n");
-        rpc.append("<id/>\n");
-        rpc.append("<name>");
-        rpc.append(maId.maName());
-        rpc.append("</name>\n");
-        rpc.append("<maintenance-association-end-point>\n");
-        rpc.append("<mep-identifier>");
-        rpc.append(mepId.id());
-        rpc.append("</mep-identifier>\n");
-        if (dmId != null) {
-            rpc.append("<msea-soam-pm:delay-measurements>");
-            rpc.append("<msea-soam-pm:delay-measurement>\n");
-            rpc.append("<msea-soam-pm:dm-id>");
-            rpc.append(dmId.id());
-            rpc.append("</msea-soam-pm:dm-id>\n");
-            rpc.append("<msea-soam-pm:mep-id/>");
-            rpc.append("<msea-soam-pm:mac-address/>");
-            rpc.append("<msea-soam-pm:administrative-state/>\n");
-            rpc.append("<msea-soam-pm:measurement-enable/>\n");
-            rpc.append("<msea-soam-pm:message-period/>\n");
-            rpc.append("<msea-soam-pm:priority/>\n");
-            rpc.append("<msea-soam-pm:frame-size/>\n");
-            rpc.append("<msea-soam-pm:measurement-interval/>\n");
-            rpc.append("<msea-soam-pm:number-intervals-stored/>\n");
-            rpc.append("<msea-soam-pm:session-status/>\n");
-            rpc.append("<msea-soam-pm:frame-delay-two-way/>\n");
-            rpc.append("<msea-soam-pm:inter-frame-delay-variation-two-way/>\n");
-            if (parts != null && (parts.equals(DmEntryParts.CURRENT_ONLY) ||
-                    parts.equals(DmEntryParts.ALL_PARTS))) {
-                rpc.append("<msea-soam-pm:current-stats/>\n");
-            }
-            if (parts != null && (parts.equals(DmEntryParts.HISTORY_ONLY) ||
-                    parts.equals(DmEntryParts.ALL_PARTS))) {
-                rpc.append("<msea-soam-pm:history-stats/>\n");
-            }
-            rpc.append("</msea-soam-pm:delay-measurement>\n");
-            rpc.append("</msea-soam-pm:delay-measurements>");
-        } else {
-            rpc.append("<msea-soam-pm:delay-measurements/>");
-        }
-        rpc.append("</maintenance-association-end-point>\n");
-        rpc.append("</maintenance-association>\n");
-        rpc.append("</maintenance-domain>\n");
-        rpc.append("</mef-cfm>");
-
-        return rpc.toString();
-    }
-
-    @Deprecated //Replace this with a ModelObject defintion
-    private String buildAbortLoopbackQueryString(Short mdId, Short maId,
-            Short mepId) {
-        StringBuilder rpc = new StringBuilder();
-
-        rpc.append("<abort-loopback xmlns=\"http://www.microsemi.com/microsemi-edge-assure/msea-cfm\">");
-        rpc.append("<maintenance-domain>");
-        rpc.append(mdId);
-        rpc.append("</maintenance-domain>");
-        rpc.append("<maintenance-association>");
-        rpc.append(maId);
-        rpc.append("</maintenance-association>");
-        rpc.append("<maintenance-association-end-point>");
-        rpc.append(mepId);
-        rpc.append("</maintenance-association-end-point>");
-        rpc.append("</abort-loopback>");
-
-        return rpc.toString();
-    }
-}
diff --git a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/impl/MseaSaFilteringManager.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/impl/MseaSaFilteringManager.java
deleted file mode 100644
index 284c732..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/impl/MseaSaFilteringManager.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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.osgi.service.component.annotations.Activate;
-import org.osgi.service.component.annotations.Component;
-import org.osgi.service.component.annotations.Deactivate;
-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, service = AbstractYangServiceImpl.class)
-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.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/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/impl/MseaUniEvcServiceManager.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/impl/MseaUniEvcServiceManager.java
deleted file mode 100644
index 8d2b556..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/impl/MseaUniEvcServiceManager.java
+++ /dev/null
@@ -1,289 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.osgi.service.component.annotations.Activate;
-import org.osgi.service.component.annotations.Component;
-import org.osgi.service.component.annotations.Deactivate;
-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.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.
- */
-@Component(immediate = true, service = MseaUniEvcServiceNetconfService.class)
-public class MseaUniEvcServiceManager extends AbstractYangServiceImpl
-        implements MseaUniEvcServiceNetconfService {
-    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() {
-        super.activate();
-        appId = coreService.registerApplication(MSEA_UNI_EVC_SVC);
-        log.info("MseaUniEvcServiceManager Started");
-    }
-
-    @Deactivate
-    public void deactivate() {
-        super.deactivate();
-        log.info("MseaUniEvcServiceManager Stopped");
-    }
-
-    @Override
-    public MseaUniEvcService getMseaUniEvcService(
-            MseaUniEvcServiceOpParam mseaUniEvcService, NetconfSession session)
-            throws NetconfException {
-
-        return getConfigMseaUniEvcService(mseaUniEvcService, session, null);
-    }
-
-    @Override
-    public MseaUniEvcService getConfigMseaUniEvcService(
-            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 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()) {
-
-            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, bwpGrp.groupIndex());
-
-            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, 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);
-
-        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 reply;
-    }
-
-    @Override
-    public void removeEvcUniFlowEntries(
-            Map<Integer, String> ceVlanUpdates,
-            Map<Integer, List<Short>> flowVlanIds,
-            NetconfSession session, DatastoreId targetDs,
-            UniSideInterfaceAssignmentEnum portAssign) throws NetconfException {
-
-        List<Integer> evcAlreadyHandled = new ArrayList<>();
-        StringBuilder xmlEvcUpdate = new StringBuilder(evcUniOpener());
-        for (Integer evcKey:ceVlanUpdates.keySet()) {
-            int evcId = (evcKey & ((1 << 8) - 100)) >> 2;
-            if (evcAlreadyHandled.contains(new Integer(evcId))) {
-                continue;
-            }
-            evcAlreadyHandled.add(evcId);
-            int port = (evcKey & 3);
-            String ceVlanMapThis = ceVlanUpdates.get(evcKey);
-            String ceVlanMapOpposite = ceVlanUpdates.get(evcKey ^ 1);
-
-            if ((ceVlanMapThis == null || ceVlanMapThis.isEmpty()) &&
-                    (ceVlanMapOpposite == null || ceVlanMapOpposite.isEmpty())) {
-                xmlEvcUpdate.append("<evc nc:operation=\"delete\">\n<evc-index>");
-                xmlEvcUpdate.append(Integer.toString(evcId));
-                xmlEvcUpdate.append("</evc-index>\n</evc>\n");
-            } else {
-                xmlEvcUpdate.append("<evc>\n<evc-index>");
-                xmlEvcUpdate.append(Integer.toString(evcId));
-                xmlEvcUpdate.append("</evc-index>\n<evc-per-uni>\n");
-                if (port == 0 && portAssign == UniSideInterfaceAssignmentEnum.UNI_C_ON_OPTICS ||
-                        port == 1 && portAssign == UniSideInterfaceAssignmentEnum.UNI_C_ON_HOST) {
-                    if (ceVlanMapThis != null) {
-                        xmlEvcUpdate.append("<evc-per-uni-c>\n<ce-vlan-map nc:operation=\"replace\">");
-                        xmlEvcUpdate.append(ceVlanMapThis);
-                        xmlEvcUpdate.append("</ce-vlan-map>\n");
-                        xmlEvcUpdate.append(deleteFlowMapping(flowVlanIds.get(evcKey)));
-                        xmlEvcUpdate.append("</evc-per-uni-c>\n");
-                    }
-                    if (ceVlanMapOpposite != null) {
-                        xmlEvcUpdate.append("<evc-per-uni-n>\n<ce-vlan-map nc:operation=\"replace\">");
-                        xmlEvcUpdate.append(ceVlanMapOpposite);
-                        xmlEvcUpdate.append("</ce-vlan-map>\n");
-                        xmlEvcUpdate.append(deleteFlowMapping(flowVlanIds.get(evcKey ^ 1)));
-                        xmlEvcUpdate.append("</evc-per-uni-n>\n");
-                    }
-                } else {
-                    if (ceVlanMapThis != null) {
-                        xmlEvcUpdate.append("<evc-per-uni-n>\n<ce-vlan-map nc:operation=\"replace\">");
-                        xmlEvcUpdate.append(ceVlanMapThis);
-                        xmlEvcUpdate.append("</ce-vlan-map>\n");
-                        xmlEvcUpdate.append(deleteFlowMapping(flowVlanIds.get(evcKey)));
-                        xmlEvcUpdate.append("</evc-per-uni-n>\n");
-                    }
-                    if (ceVlanMapOpposite != null) {
-                        xmlEvcUpdate.append("<evc-per-uni-c>\n<ce-vlan-map nc:operation=\"replace\">");
-                        xmlEvcUpdate.append(ceVlanMapOpposite);
-                        xmlEvcUpdate.append("</ce-vlan-map>\n");
-                        xmlEvcUpdate.append(deleteFlowMapping(flowVlanIds.get(evcKey ^ 1)));
-                        xmlEvcUpdate.append("</evc-per-uni-c>\n");
-                    }
-                }
-
-                xmlEvcUpdate.append("</evc-per-uni>\n</evc>\n");
-            }
-        }
-        xmlEvcUpdate.append("</uni>\n</mef-services>");
-
-        log.info("Sending XML <edit-config> on NETCONF session " + session.getSessionId() +
-                ":\n" + xmlEvcUpdate.toString());
-
-
-        session.editConfig(targetDs, null, xmlEvcUpdate.toString());
-    }
-
-
-    private static String deleteFlowMapping(List<Short> vlanIds) {
-        if (vlanIds == null || vlanIds.size() == 0) {
-            return "";
-        }
-        StringBuilder fmXmlBuilder = new StringBuilder();
-        for (long vlanId:vlanIds) {
-            fmXmlBuilder.append("<flow-mapping nc:operation=\"delete\">\n");
-            fmXmlBuilder.append("<ce-vlan-id>");
-            fmXmlBuilder.append(String.valueOf(vlanId));
-            fmXmlBuilder.append("</ce-vlan-id>\n");
-            fmXmlBuilder.append("</flow-mapping>\n");
-        }
-
-        return fmXmlBuilder.toString();
-    }
-
-    private String evcFilterQuery() {
-        StringBuilder sb = new StringBuilder("<mef-services "
-                + "xmlns=\"http://www.microsemi.com/microsemi-edge-assure/msea-uni-evc-service\">");
-        sb.append("<uni>");
-        sb.append("<evc>");
-        sb.append("<evc-index/>");
-        sb.append("<evc-per-uni>");
-        sb.append("<evc-per-uni-c>");
-        sb.append("<ce-vlan-map/>");
-        sb.append("<flow-mapping/>");
-        sb.append("<ingress-bwp-group-index/>");
-        sb.append("</evc-per-uni-c>");
-        sb.append("<evc-per-uni-n>");
-        sb.append("<ce-vlan-map/>");
-        sb.append("<flow-mapping/>");
-        sb.append("<ingress-bwp-group-index/>");
-        sb.append("</evc-per-uni-n>");
-        sb.append("</evc-per-uni>");
-        sb.append("</evc>");
-        sb.append("</uni>");
-        sb.append("</mef-services>");
-
-        return sb.toString();
-    }
-
-    private String evcUniOpener() {
-        StringBuilder sb = new StringBuilder("<mef-services ");
-        sb.append("xmlns=\"http://www.microsemi.com/microsemi-edge-assure/msea-uni-evc-service\">\n");
-        sb.append("<uni>\n");
-
-        return sb.toString();
-    }
-}
diff --git a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/impl/package-info.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/impl/package-info.java
deleted file mode 100644
index c9bc2a3..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/impl/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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.drivers.microsemi.yang.impl;
\ No newline at end of file
diff --git a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/package-info.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/package-info.java
deleted file mode 100644
index 9922f39..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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.drivers.microsemi.yang;
\ No newline at end of file
diff --git a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/utils/CeVlanMapUtils.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/utils/CeVlanMapUtils.java
deleted file mode 100644
index 76534d0..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/utils/CeVlanMapUtils.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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.utils;
-
-import java.util.Arrays;
-import java.util.Set;
-import java.util.TreeSet;
-
-import org.apache.commons.lang.ArrayUtils;
-
-/**
- * A set of static utilities that allow a ce-vlan-map to be decomposed.
- *
- * This is an implementation specific to Microsemi that encodes ce-vlan-map
- * in a similar way to Section 7.9 in the MEF 10.2 specification. That specification
- * suggests comma delimited lists of VIDs - this implementation adds on colons to
- * specify a contiguous range of IDs
- */
-public final class CeVlanMapUtils {
-
-    private CeVlanMapUtils() {
-        //Do not allow this utility class to be instantiated
-    }
-
-    /**
-     * Calculate the ceVlanMap in to a Set of values.
-     *
-     * From Yang 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";
-     * @param ceVlanMap A list of vlan id's in the format described above
-     * @return A set of vlan ids
-     */
-    public static Short[] getVlanSet(String ceVlanMap) {
-        if (ceVlanMap == null || ceVlanMap.isEmpty()) {
-            return new Short[0];
-        }
-        Set<Short> ceVlanSet = new TreeSet<Short>();
-
-        String[] ceVlanMapCommas = ceVlanMap.split(",");
-        for (String ceVlanMapComma:ceVlanMapCommas) {
-            String[] ceVlanMapColon = ceVlanMapComma.split(":");
-            if (ceVlanMapColon.length == 1) {
-                ceVlanSet.add(Short.decode(ceVlanMapColon[0]));
-            } else {
-                short start = Short.decode(ceVlanMapColon[0]);
-                short end = Short.decode(ceVlanMapColon[1]);
-                if ((start < 0 || end > 4095)) {
-                    return null;
-                } else {
-                    for (short i = start; i <= end; i++) {
-                        ceVlanSet.add(i);
-                    }
-                }
-            }
-        }
-
-        return ceVlanSet.toArray(new Short[ceVlanSet.size()]);
-    }
-
-    /**
-     * Convert an array of vlan ids in to a string representation.
-     * @param vlanArray An array of vlan ids
-     * @return A string representation delimited by commas and colons
-     */
-    public static String vlanListAsString(Short[] vlanArray) {
-        boolean colonPending = false;
-        StringBuilder ceVlanMapBuilder = new StringBuilder();
-        if (vlanArray.length == 0) {
-            return "";
-        } else if (vlanArray.length == 1 && vlanArray[0] == 0) {
-            return "0";
-        }
-
-        //To ensure that there are no repeated or out-of-order elements we must convert to TreeSet
-        TreeSet<Short> vlanSet = new TreeSet<>(Arrays.asList(vlanArray));
-
-        if (vlanSet.first() == 0) {
-            vlanSet.remove(vlanSet.first());
-        }
-        short prev = vlanSet.first();
-        for (short s:vlanSet) {
-            if (s == prev) {
-                ceVlanMapBuilder.append(Short.valueOf(s));
-                continue;
-            } else if (prev == (s - 1)) {
-                colonPending = true;
-            } else {
-                if (colonPending) {
-                    ceVlanMapBuilder.append(":" + Short.valueOf(prev));
-                    colonPending = false;
-                }
-                ceVlanMapBuilder.append("," + Short.valueOf(s));
-            }
-            prev = s;
-        }
-        if (colonPending) {
-            ceVlanMapBuilder.append(":" + Short.valueOf(prev));
-        }
-
-        return ceVlanMapBuilder.toString();
-    }
-
-    /**
-     * Add an additional vlan id to an existing string representation.
-     * @param existingMap An array of vlan ids
-     * @param newVlan The new vlan ID to add
-     * @return A string representation delimited by commas and colons
-     */
-    public static String addtoCeVlanMap(String existingMap, Short newVlan) {
-        Short[] vlanArray = getVlanSet(existingMap);
-        TreeSet<Short> vlanSet = new TreeSet<>();
-        for (Short vlan:vlanArray) {
-            vlanSet.add(vlan);
-        }
-
-        vlanSet.add(newVlan);
-
-        return vlanListAsString(vlanSet.toArray(new Short[vlanSet.size()]));
-    }
-
-    /**
-     * If a string representation contains a '0' then remove it.
-     *
-     * Zero is an invalid VLAN id, and is used here as a place holder for null. Null can't
-     * be used in the EA1000 device. Once any other vlan ids are added then the zero should
-     * be removed. It is safe to call this method even if no zero is present - the method will
-     * make no change in that case.
-     *
-     * @param existingMap An string representation of vlan ids, possibly containing a zero
-     * @return A string representation delimited by commas and colons without zero
-     */
-    public static String removeZeroIfPossible(String existingMap) {
-        if (existingMap == null || existingMap.isEmpty()) {
-            return "0";
-        } else if ("0".equals(existingMap)) {
-            return existingMap;
-        }
-        return removeFromCeVlanMap(existingMap, (short) 0);
-    }
-
-    /**
-     * Remove a vlan id from an existing string representation.
-     * @param existingMap An array of vlan ids
-     * @param vlanRemove The vlan ID to remove
-     * @return A string representation delimited by commas and colons
-     */
-    public static String removeFromCeVlanMap(String existingMap, Short vlanRemove) {
-        Short[] vlanArray = getVlanSet(existingMap);
-        TreeSet<Short> vlanSet = new TreeSet<>();
-        for (Short vlan:vlanArray) {
-            if (vlan.shortValue() != vlanRemove.shortValue()) {
-                vlanSet.add(vlan);
-            }
-        }
-
-        return vlanListAsString(vlanSet.toArray(new Short[vlanSet.size()]));
-    }
-
-    /**
-     * Combine vlan ids from two existing string representations.
-     *
-     * If there are overlapping elements and ranges, these are consolidated in to one.
-     *
-     * @param set1 A string containing a set of vlan ids
-     * @param set2 A string containing a set of vlan ids
-     * @return A string representation delimited by commas and colons
-     */
-    public static String combineVlanSets(String set1, String set2) {
-        Short[] set1Array = getVlanSet(set1);
-        Short[] set2Array = getVlanSet(set2);
-        return vlanListAsString((Short[]) ArrayUtils.addAll(set1Array, set2Array));
-    }
-}
diff --git a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/utils/IetfYangTypesUtils.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/utils/IetfYangTypesUtils.java
deleted file mode 100644
index 7c67992..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/utils/IetfYangTypesUtils.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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.utils;
-
-import java.time.Instant;
-import java.time.LocalDateTime;
-import java.time.OffsetDateTime;
-import java.time.ZoneId;
-import java.time.ZonedDateTime;
-import java.time.format.DateTimeFormatter;
-
-import org.onosproject.yang.gen.v1.ietfyangtypes.rev20130715.ietfyangtypes.DateAndTime;
-
-/**
- * A utility class to change various YANG types to general purpose classes.
- */
-public final class IetfYangTypesUtils {
-    private IetfYangTypesUtils() {
-        //Hiding the public constructor for this utility class
-    }
-
-    /**
-     * Convert from Date and Time in a ietf-yang-types format to the Java Time API.
-     * @param dateAndTime A date and time from a YANG object
-     * @return A Date and Time with a Time Zone offset
-     */
-    public static OffsetDateTime fromYangDateTime(DateAndTime dateAndTime) {
-        return OffsetDateTime.parse(dateAndTime.toString(), DateTimeFormatter.ISO_OFFSET_DATE_TIME);
-    }
-
-    /**
-     * Convert a from Date and Time in a ietf-yang-types format to the Java Time API and rezone to a given Time Zone.
-     * @param dateAndTime A date and time from a YANG object
-     * @param zoneId The time zone to rezone the time and date to
-     * @return The rezoned time and date
-     */
-    public static ZonedDateTime fromYangDateTimeZoned(DateAndTime dateAndTime, ZoneId zoneId) {
-        return OffsetDateTime.parse(dateAndTime.toString(),
-                DateTimeFormatter.ISO_OFFSET_DATE_TIME).atZoneSameInstant(zoneId);
-    }
-
-    /**
-     * Convert a from Date and Time in a ietf-yang-types format to the Java Time API rezoned to the local Time Zone.
-     * @param dateAndTime A date and time from a YANG object
-     * @return The date and time in the zone of this local machine
-     */
-    public static LocalDateTime fromYangDateTimeToLocal(DateAndTime dateAndTime) {
-        OffsetDateTime odt = OffsetDateTime.parse(dateAndTime.toString(), DateTimeFormatter.ISO_OFFSET_DATE_TIME);
-
-        return LocalDateTime.ofInstant(odt.toInstant(), ZoneId.systemDefault());
-    }
-
-    /**
-     * Convert a from Date and Time in a ietf-yang-types format to the Java Time API as an Instant.
-     * @param dateAndTime A date and time from a YANG object
-     * @return The date and time as an Instant
-     */
-    public static Instant fromYangDateTimeToInstant(DateAndTime dateAndTime) {
-        return Instant.from(OffsetDateTime.parse(dateAndTime.toString(), DateTimeFormatter.ISO_OFFSET_DATE_TIME));
-    }
-}
diff --git a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/utils/MaNameUtil.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/utils/MaNameUtil.java
deleted file mode 100644
index e18abe6..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/utils/MaNameUtil.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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.utils;
-
-import org.onlab.util.HexString;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaId2Octet;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdCharStr;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdIccY1731;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdPrimaryVid;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdRfc2685VpnId;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdShort;
-import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmConfigException;
-import org.onosproject.yang.gen.v1.ietfyangtypes.rev20130715.ietfyangtypes.YangIdentifier;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.MaNameAndTypeCombo;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.manameandtypecombo.DefaultNameCharacterString;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.manameandtypecombo.DefaultNamePrimaryVid;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.manameandtypecombo.DefaultNameRfc2685VpnId;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.manameandtypecombo.DefaultNameUint16;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.manameandtypecombo.DefaultNameY1731Icc;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.manameandtypecombo.NameCharacterString;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.manameandtypecombo.nameprimaryvid.NamePrimaryVidUnion;
-import org.onosproject.yang.gen.v1.mseatypes.rev20160229.mseatypes.Identifier45;
-
-/**
- * Utility for translating between Maintenance Association names in the CFM API model and the device YANG.
- *
- * This has to be in a separate file as a workaround for Checkstyle issue.
- * https://github.com/checkstyle/checkstyle/issues/3850
- * There are two types of DefaultNameCharacterString - one for MA and another for MD
- * Putting both together in a file means that the full path has to be given which
- * will then fail checkstyle
- */
-public final class MaNameUtil {
-
-    private MaNameUtil() {
-        //Hidden
-    }
-
-    /**
-     * Convert CFM API MA identifier to the YANG model MA identifier.
-     * @param maId Maintenance Association ID in CFM API
-     * @return Maintenance Association ID in YANG API
-     * @throws CfmConfigException If there's a problem with the name
-     */
-    public static MaNameAndTypeCombo getYangMaNameFromApiMaId(MaIdShort maId)
-            throws CfmConfigException {
-        MaNameAndTypeCombo maName;
-        if (maId instanceof MaIdPrimaryVid) {
-            maName = new DefaultNamePrimaryVid();
-            ((DefaultNamePrimaryVid) maName).namePrimaryVid(NamePrimaryVidUnion.fromString(maId.maName()));
-        } else if (maId instanceof MaId2Octet) {
-            maName = new DefaultNameUint16();
-            ((DefaultNameUint16) maName).nameUint16(Integer.valueOf(maId.maName()));
-        } else if (maId instanceof MaIdRfc2685VpnId) {
-            maName = new DefaultNameRfc2685VpnId();
-            ((DefaultNameRfc2685VpnId) maName).nameRfc2685VpnId(HexString.fromHexString(maId.maName()));
-        } else if (maId instanceof MaIdIccY1731) {
-            maName = new DefaultNameY1731Icc();
-            ((DefaultNameY1731Icc) maName).nameY1731Icc(YangIdentifier.of(maId.maName()));
-        } else if (maId instanceof MaIdCharStr) {
-            maName = new DefaultNameCharacterString();
-            ((DefaultNameCharacterString) maName).name(Identifier45.fromString(maId.maName()));
-        } else {
-            throw new CfmConfigException("Unexpected error creating MD " +
-                    maId.getClass().getSimpleName());
-        }
-        return maName;
-    }
-
-    /**
-     * Convert YANG API MA identifier to the CFM API MA identifier.
-     * @param nameAndTypeCombo Maintenance Association ID in YANG API
-     * @return Maintenance Association ID in CFM API
-     */
-    public static MaIdShort getApiMaIdFromYangMaName(MaNameAndTypeCombo nameAndTypeCombo) {
-        MaIdShort maId;
-        if (nameAndTypeCombo instanceof DefaultNameCharacterString) {
-            maId = MaIdCharStr.asMaId(
-                    ((DefaultNameCharacterString) nameAndTypeCombo).name().string());
-        } else if (nameAndTypeCombo instanceof DefaultNamePrimaryVid) {
-            if (((DefaultNamePrimaryVid) nameAndTypeCombo).namePrimaryVid().enumeration() != null) {
-                maId = MaIdPrimaryVid.asMaId(
-                        ((DefaultNamePrimaryVid) nameAndTypeCombo).namePrimaryVid().enumeration().name());
-            } else if (((DefaultNamePrimaryVid) nameAndTypeCombo).namePrimaryVid().vlanIdType() != null) {
-                maId = MaIdPrimaryVid.asMaId(
-                        ((DefaultNamePrimaryVid) nameAndTypeCombo).namePrimaryVid().vlanIdType().uint16());
-            } else {
-                throw new IllegalArgumentException("Unexpected primaryVid for " +
-                        "MaNameAndTypeCombo: " + nameAndTypeCombo.toString());
-            }
-        } else if (nameAndTypeCombo instanceof DefaultNameUint16) {
-            maId = MaId2Octet.asMaId(((DefaultNameUint16) nameAndTypeCombo).nameUint16());
-
-        } else if (nameAndTypeCombo instanceof DefaultNameRfc2685VpnId) {
-            maId = MaIdRfc2685VpnId.asMaIdHex(
-                    HexString.toHexString(
-                            ((DefaultNameRfc2685VpnId) nameAndTypeCombo).nameRfc2685VpnId()));
-        } else if (nameAndTypeCombo instanceof DefaultNameY1731Icc) {
-            maId = MaIdIccY1731.asMaId(((DefaultNameY1731Icc) nameAndTypeCombo).nameY1731Icc().string());
-
-        } else {
-            throw new IllegalArgumentException("Unexpected type for " +
-                    "MaNameAndTypeCombo: " + nameAndTypeCombo.toString());
-        }
-
-        return maId;
-    }
-
-    /**
-     * Cast the YANG generic type of MaNameAndTypeCombo specifically to char string.
-     * @param maName a YANG generic MaNameAndTypeCombo
-     * @return a YANG specific MaNameAndTypeCombo for Char string
-     */
-    public static NameCharacterString cast(MaNameAndTypeCombo maName) {
-        return (NameCharacterString) maName;
-    }
-}
diff --git a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/utils/MdNameUtil.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/utils/MdNameUtil.java
deleted file mode 100644
index ba0cc96..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/utils/MdNameUtil.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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.utils;
-
-import org.onlab.packet.IpAddress;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdId;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdCharStr;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdDomainName;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdMacUint;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdNone;
-import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmConfigException;
-import org.onosproject.yang.gen.v1.ietfinettypes.rev20130715.ietfinettypes.DomainName;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.MdNameAndTypeCombo;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.mdnameandtypecombo.DefaultMacAddressAndUint;
-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.DefaultNameDomainName;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.mdnameandtypecombo.DefaultNameNone;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.mdnameandtypecombo.MacAddressAndUint;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.mdnameandtypecombo.NameCharacterString;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.mdnameandtypecombo.namedomainname.NameDomainNameUnion;
-import org.onosproject.yang.gen.v1.mseatypes.rev20160229.mseatypes.Identifier45;
-import org.onosproject.yang.gen.v1.mseatypes.rev20160229.mseatypes.MacAddressAndUintStr;
-
-/**
- * Utility for translating between Maintenance Domain names in the CFM API model and the device YANG.
- *
- * This has to be in a separate file as a workaround for Checkstyle issue.
- * https://github.com/checkstyle/checkstyle/issues/3850
- * There are two types of DefaultNameCharacterString - one for MA and another for MD
- * Putting both together in a file means that the full path has to be given which
- * will then fail checkstyle
- */
-public final class MdNameUtil {
-
-    private MdNameUtil() {
-        //Hidden
-    }
-
-    /**
-     * Convert CFM API MD identifier to the YANG model MD identifier.
-     * @param mdId Maintenance Domain ID in CFM API
-     * @return Maintenance Domain ID in YANG API
-     * @throws CfmConfigException If there's a problem with the name
-     */
-    public static MdNameAndTypeCombo getYangMdNameFromApiMdId(MdId mdId)
-            throws CfmConfigException {
-        MdNameAndTypeCombo mdName;
-        if (mdId instanceof MdIdDomainName) {
-            boolean isIpAddr = false;
-            try {
-                if (IpAddress.valueOf(mdId.mdName()) != null) {
-                    isIpAddr = true;
-                }
-            } catch (IllegalArgumentException e) {
-                //continue
-            }
-            if (isIpAddr) {
-                mdName = new DefaultNameDomainName();
-                ((DefaultNameDomainName) mdName).nameDomainName(NameDomainNameUnion.of(
-                        org.onosproject.yang.gen.v1.ietfinettypes.rev20130715.ietfinettypes.
-                                IpAddress.fromString(mdId.mdName())));
-            } else {
-                mdName = new DefaultNameDomainName();
-                ((DefaultNameDomainName) mdName).nameDomainName(NameDomainNameUnion
-                        .of(DomainName.fromString(mdId.mdName())));
-            }
-        } else if (mdId instanceof MdIdMacUint) {
-            mdName = new DefaultMacAddressAndUint();
-            ((DefaultMacAddressAndUint) mdName).nameMacAddressAndUint(MacAddressAndUintStr.fromString(mdId.mdName()));
-        } else if (mdId instanceof MdIdNone) {
-            mdName = new DefaultNameNone();
-        } else if (mdId instanceof MdIdCharStr) {
-            mdName = new DefaultNameCharacterString();
-            ((DefaultNameCharacterString) mdName).name(Identifier45.fromString(mdId.mdName()));
-        } else {
-            throw new CfmConfigException("Unexpected error creating MD " +
-                    mdId.getClass().getSimpleName());
-        }
-        return mdName;
-    }
-
-    /**
-     * Convert YANG API MD identifier to the CFM API MD identifier.
-     * @param nameAndTypeCombo Maintenance Domain ID in YANG API
-     * @return Maintenance Domain ID in CFM API
-     */
-    public static MdId getApiMdIdFromYangMdName(MdNameAndTypeCombo nameAndTypeCombo) {
-        MdId mdId;
-        if (nameAndTypeCombo instanceof DefaultNameDomainName) {
-            NameDomainNameUnion domainName =
-                    ((DefaultNameDomainName) nameAndTypeCombo).nameDomainName();
-            if (domainName.ipAddress() != null) {
-                mdId = MdIdDomainName.asMdId(domainName.ipAddress().toString());
-            } else if (domainName.domainName() != null) {
-                mdId = MdIdDomainName.asMdId(domainName.domainName().string());
-            } else {
-                throw new IllegalArgumentException("Unexpected domainName for " +
-                        "MdNameAndTypeCombo: " + nameAndTypeCombo.toString());
-            }
-        } else if (nameAndTypeCombo instanceof DefaultNameCharacterString) {
-            mdId = MdIdCharStr.asMdId(
-                    ((NameCharacterString) nameAndTypeCombo).name().string());
-
-        } else if (nameAndTypeCombo instanceof DefaultMacAddressAndUint) {
-            mdId = MdIdMacUint.asMdId(
-                    ((MacAddressAndUint) nameAndTypeCombo).nameMacAddressAndUint().string());
-
-        } else if (nameAndTypeCombo instanceof DefaultNameNone) {
-            mdId = MdIdNone.asMdId();
-        } else {
-            throw new IllegalArgumentException("Unexpected type for " +
-                    "MdNameAndTypeCombo: " + nameAndTypeCombo.toString());
-        }
-
-        return mdId;
-    }
-
-    /**
-     * Cast the YANG generic type of MdNameAndTypeCombo specifically to char string.
-     * @param maName a YANG generic MdNameAndTypeCombo
-     * @return a YANG specific MdNameAndTypeCombo for Char string
-     */
-    public static NameCharacterString cast(MdNameAndTypeCombo maName) {
-        return (NameCharacterString) maName;
-    }
-}
diff --git a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/utils/MepIdUtil.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/utils/MepIdUtil.java
deleted file mode 100644
index cd1b9ef..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/utils/MepIdUtil.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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.utils;
-
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.MaintenanceAssociationEndPoint;
-import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.AugmentedMseaCfmMaintenanceAssociationEndPoint;
-import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.DefaultAugmentedMseaCfmMaintenanceAssociationEndPoint;
-import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.remotemepgroup.RemoteMep;
-import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.remotemepgroup.remotemep.MepId;
-
-/**
- * This is a workaround for Checkstyle issue.
- * https://github.com/checkstyle/checkstyle/issues/3850
- *
- */
-public final class MepIdUtil {
-    private MepIdUtil() {
-        //Hidden
-    }
-
-    public static MepId convertRemoteMepId(RemoteMep rmep) {
-        return (MepId) rmep;
-    }
-
-    public static AugmentedMseaCfmMaintenanceAssociationEndPoint
-        convertPmAugmentedMep(MaintenanceAssociationEndPoint mep) {
-        AugmentedMseaCfmMaintenanceAssociationEndPoint augmentedMep =
-            (AugmentedMseaCfmMaintenanceAssociationEndPoint) mep
-            .augmentation(
-                    DefaultAugmentedMseaCfmMaintenanceAssociationEndPoint.class);
-        return augmentedMep;
-    }
-}
diff --git a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/utils/MepIdUtil2.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/utils/MepIdUtil2.java
deleted file mode 100644
index 36f3a3a..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/utils/MepIdUtil2.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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.utils;
-
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.transmitloopback.transmitloopbackinput.TargetAddress;
-import org.onosproject.yang.gen.v1.mseasoamfm.rev20160229.mseasoamfm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.AugmentedMseaCfmMaintenanceAssociationEndPoint;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.targetaddressgroup.addresstype.MepId;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.MaintenanceAssociationEndPoint;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.targetaddressgroup.addresstype.MacAddress;
-import org.onosproject.yang.gen.v1.mseasoamfm.rev20160229.mseasoamfm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.DefaultAugmentedMseaCfmMaintenanceAssociationEndPoint;
-
-/**
- * This is a workaround for Checkstyle issue.
- * https://github.com/checkstyle/checkstyle/issues/3850
- *
- */
-public final class MepIdUtil2 {
-    private MepIdUtil2() {
-        //Hidden
-    }
-
-    public static MepId convertTargetAddrToMepId(TargetAddress targetMep) {
-        return (MepId) targetMep.addressType();
-    }
-
-    public static MacAddress convertTargetAddrToMacAddress(TargetAddress targetMep) {
-        return (MacAddress) targetMep.addressType();
-    }
-
-    public static AugmentedMseaCfmMaintenanceAssociationEndPoint
-        convertFmAugmentedMep(MaintenanceAssociationEndPoint mep) {
-        return (AugmentedMseaCfmMaintenanceAssociationEndPoint) mep
-            .augmentation(DefaultAugmentedMseaCfmMaintenanceAssociationEndPoint.class);
-    }
-}
diff --git a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/utils/MepIdUtil3.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/utils/MepIdUtil3.java
deleted file mode 100644
index 37b6d7c..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/utils/MepIdUtil3.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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.utils;
-
-import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.remotemepgroup.RemoteMep;
-import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.remotemepgroup.remotemep.DefaultMepId;
-
-public final class MepIdUtil3 {
-    private MepIdUtil3() {
-        //Hidden
-    }
-
-    public static DefaultMepId convertPmRemoteMepToMepId(RemoteMep remoteMep) {
-        return (DefaultMepId) remoteMep;
-    }
-}
diff --git a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/utils/package-info.java b/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/utils/package-info.java
deleted file mode 100644
index 4920672..0000000
--- a/drivers/microsemi/ea1000/src/main/java/org/onosproject/drivers/microsemi/yang/utils/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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 general utilities and helpers.
- */
-package org.onosproject.drivers.microsemi.yang.utils;
\ No newline at end of file
diff --git a/drivers/microsemi/ea1000/src/main/resources/microsemi-drivers.xml b/drivers/microsemi/ea1000/src/main/resources/microsemi-drivers.xml
deleted file mode 100644
index f1321d3..0000000
--- a/drivers/microsemi/ea1000/src/main/resources/microsemi-drivers.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ Copyright 2017-present Open Networking Foundation
-  ~
-  ~ 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.
-  -->
-<drivers>
-    <driver name="microsemi-netconf" extends="netconf" manufacturer="Microsemi"
-        hwVersion="EA1000">
-        <behaviour api="org.onosproject.net.device.DeviceDescriptionDiscovery"
-            impl="org.onosproject.drivers.microsemi.Ea1000DeviceDescription" />
-        <behaviour api="org.onosproject.net.behaviour.ConfigGetter"
-            impl="org.onosproject.drivers.microsemi.NetconfConfigGetter" />
-        <behaviour api="org.onosproject.net.behaviour.Pipeliner"
-            impl="org.onosproject.drivers.microsemi.EA1000Pipeliner" />
-        <behaviour api="org.onosproject.net.flow.FlowRuleProgrammable"
-            impl="org.onosproject.drivers.microsemi.EA1000FlowRuleProgrammable" />
-        <behaviour api="org.onosproject.net.behaviour.MeterQuery"
-            impl="org.onosproject.drivers.microsemi.FullMetersAvailable" />
-        <behaviour
-            api="org.onosproject.incubator.net.l2monitoring.cfm.service.CfmMepProgrammable"
-            impl="org.onosproject.drivers.microsemi.EA1000CfmMepProgrammable" />
-        <behaviour
-            api="org.onosproject.incubator.net.l2monitoring.soam.SoamDmProgrammable"
-            impl="org.onosproject.drivers.microsemi.EA1000SoamDmProgrammable" />
-    </driver>
-</drivers>
diff --git a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/EA1000CfmMepProgrammableTest.java b/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/EA1000CfmMepProgrammableTest.java
deleted file mode 100644
index fbfbb13..0000000
--- a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/EA1000CfmMepProgrammableTest.java
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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 junit.framework.TestCase.fail;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.onosproject.drivers.microsemi.yang.utils.MdNameUtil.getYangMdNameFromApiMdId;
-
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.onosproject.drivers.microsemi.yang.utils.MaNameUtil;
-import org.onosproject.drivers.microsemi.yang.utils.MdNameUtil;
-import org.onosproject.incubator.net.l2monitoring.cfm.DefaultMepLbCreate;
-import org.onosproject.incubator.net.l2monitoring.cfm.Mep.Priority;
-import org.onosproject.incubator.net.l2monitoring.cfm.MepEntry;
-import org.onosproject.incubator.net.l2monitoring.cfm.MepLbCreate;
-import org.onosproject.incubator.net.l2monitoring.cfm.RemoteMepEntry.InterfaceStatusTlvType;
-import org.onosproject.incubator.net.l2monitoring.cfm.RemoteMepEntry.PortStatusTlvType;
-import org.onosproject.incubator.net.l2monitoring.cfm.RemoteMepEntry.RemoteMepState;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdCharStr;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdShort;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdId;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdCharStr;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MepId;
-import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmConfigException;
-import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmMepProgrammable;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.MdNameAndTypeCombo;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.MaNameAndTypeCombo;
-
-import java.util.BitSet;
-import java.util.Optional;
-
-/**
- * Test of the CFM implementation on EA1000 through the incubator/net/l2monitoring interface.
- */
-public class EA1000CfmMepProgrammableTest {
-    public static final MdId MD_ID_1 = MdIdCharStr.asMdId("md-1");
-    public static final MaIdShort MA_ID_11 = MaIdCharStr.asMaId("ma-1-1");
-    public static final MepId MEP_111 = MepId.valueOf((short) 1);
-    public static final MepId MEP_112 = MepId.valueOf((short) 2);
-
-    private CfmMepProgrammable cfmProgrammable;
-
-    private static MockEa1000DriverHandler mockHandler;
-
-    @BeforeClass
-    public static void setUpBeforeClass() throws Exception {
-        mockHandler = new MockEa1000DriverHandler();
-    }
-
-    @Before
-    public void setUp() throws Exception {
-        cfmProgrammable = new EA1000CfmMepProgrammable();
-        cfmProgrammable.setHandler(mockHandler);
-        assertNotNull(cfmProgrammable.handler().data().deviceId());
-    }
-
-
-    @Ignore
-    @Test
-    public void testCreateMep() {
-        fail("Not yet implemented");
-    }
-
-    @Test
-    public void testGetMep() throws CfmConfigException {
-        MepEntry mepEntry = cfmProgrammable.getMep(MD_ID_1, MA_ID_11, MEP_111);
-
-        //Result will come from MockNetconfSessionEa1000.SAMPLE_MSEACFM_MD_MA_MEP_FULL_REPLY
-        assertNotNull(mepEntry);
-        assertTrue(mepEntry.administrativeState());
-        assertTrue(mepEntry.cciEnabled());
-        assertEquals(Priority.PRIO5.name(), mepEntry.ccmLtmPriority().name());
-
-        assertTrue("Expecting remote-mac-error", mepEntry.activeMacStatusDefect()); //remote-mac-error
-        assertTrue("Expecting remote-rdi", mepEntry.activeRdiCcmDefect()); //remote-rdi
-
-        assertNotNull(mepEntry.activeRemoteMepList());
-
-//FIXME Waiting on patch https://gerrit.onosproject.org/#/c/15778/
-//        assertEquals("Expecting 2 Remote Meps", 2, mepEntry.activeRemoteMepList().size());
-        mepEntry.activeRemoteMepList().forEach(rmep -> {
-            if (rmep.remoteMepId().value() == 1) {
-                assertEquals(RemoteMepState.RMEP_FAILED.name(),
-                        rmep.state().toString());
-                assertEquals(54654654L, rmep.failedOrOkTime().toMillis());
-                assertEquals("aa:bb:cc:dd:ee:ff".toUpperCase(), rmep.macAddress().toString());
-                assertFalse(rmep.rdi());
-                assertEquals(PortStatusTlvType.PS_NO_STATUS_TLV.name(),
-                        rmep.portStatusTlvType().toString());
-                assertEquals(InterfaceStatusTlvType.IS_DORMANT.name(),
-                        rmep.interfaceStatusTlvType().toString());
-            }
-        });
-
-    }
-
-    @Test
-    public void testGetMep2() throws CfmConfigException {
-        MepEntry mepEntry = cfmProgrammable.getMep(MD_ID_1, MA_ID_11, MEP_112);
-
-        //Result will come from MockNetconfSessionEa1000.SAMPLE_MSEACFM_MD_MA_MEP_FULL_REPLY
-        assertNotNull(mepEntry);
-        assertTrue(mepEntry.administrativeState());
-        assertTrue(mepEntry.cciEnabled());
-        assertEquals(Priority.PRIO4.name(), mepEntry.ccmLtmPriority().name());
-
-        assertNotNull(mepEntry.activeRemoteMepList());
-        BitSet bs1 = new BitSet();
-        bs1.clear();
-        assertEquals("Expecting 2 Remote Meps", 2, mepEntry.activeRemoteMepList().size());
-        mepEntry.activeRemoteMepList().forEach(rmep -> {
-            if (rmep.remoteMepId().value() == 1) {
-                assertEquals(RemoteMepState.RMEP_FAILED.name(),
-                        rmep.state().toString());
-                assertEquals(54654654L, rmep.failedOrOkTime().toMillis());
-                assertEquals("aa:bb:cc:dd:ee:ff".toUpperCase(), rmep.macAddress().toString());
-                assertFalse(rmep.rdi());
-                assertEquals(PortStatusTlvType.PS_NO_STATUS_TLV.name(),
-                        rmep.portStatusTlvType().toString());
-                assertEquals(InterfaceStatusTlvType.IS_DORMANT.name(),
-                        rmep.interfaceStatusTlvType().toString());
-            }
-        });
-
-    }
-
-    /**
-     * For sampleXmlRegexDeleteMseaCfmMep.
-     * @throws CfmConfigException If an error occurs
-     */
-    @Test
-    public void testDeleteMep() throws CfmConfigException {
-        assertTrue(cfmProgrammable.deleteMep(MD_ID_1, MA_ID_11, MEP_111, Optional.empty()));
-    }
-
-    /**
-     * Create the MD md-1 on the device.
-     * This will retrieve the MD from the MockCfmMdService and will create it
-     * and its MA on the device
-     * Depends on sampleXmlRegexCreateMseaCfmMa
-     */
-    @Test
-    public void testCreateMaintenanceDomainOnDevice() throws CfmConfigException {
-        boolean success =
-                cfmProgrammable.createMdOnDevice(MdIdCharStr.asMdId("md-1"));
-        assertTrue(success);
-    }
-
-    /**
-     * Create the MD md-2 on the device.
-     * This will retrieve the MD from the MockCfmMdService and will create it on
-     * the device. This MD has no MA
-     * Depends on sampleXmlRegexCreateMseaCfmMa
-     */
-    @Test
-    public void testCreateMaintenanceDomainOnDevice2() throws CfmConfigException {
-        boolean success =
-                cfmProgrammable.createMdOnDevice(MdIdCharStr.asMdId("md-2"));
-        assertTrue(success);
-    }
-
-    /**
-     * Delete the MD md-1 on the device.
-     * This will retrieve the MD from the MockCfmMdService and will delete it on
-     * the device.
-     * Depends on sampleXmlRegexCreateMseaCfmMa
-     */
-    @Test
-    public void testDeleteMaintenanceDomainOnDevice() throws CfmConfigException {
-        boolean success =
-                cfmProgrammable.deleteMdOnDevice(MdIdCharStr.asMdId("md-1"), Optional.empty());
-        assertTrue(success);
-    }
-
-
-    /**
-     * Create the MA ma-1-1 on the device.
-     * This will retrieve the MA from the MockCfmMdService and will create it
-     * on the device under md-1
-     * Depends on sampleXmlRegexCreateMseaCfmMa
-     */
-    @Test
-    public void testCreateMaintenanceAssociationOnDevice() throws CfmConfigException {
-        boolean success =
-                cfmProgrammable.createMaOnDevice(
-                        MdIdCharStr.asMdId("md-1"), MaIdCharStr.asMaId("ma-1-1"));
-        assertTrue(success);
-    }
-
-    /**
-     * Delete the MD md-1 on the device.
-     * This will retrieve the MD from the MockCfmMdService and will delete it on
-     * the device.
-     * Depends on sampleXmlRegexCreateMseaCfmMa
-     */
-    @Test
-    public void testDeleteMaintenanceAssociationOnDevice() throws CfmConfigException {
-        boolean success =
-                cfmProgrammable.deleteMaOnDevice(
-                        MdIdCharStr.asMdId("md-1"),
-                        MaIdCharStr.asMaId("ma-1-1"),
-                        Optional.empty());
-        assertTrue(success);
-    }
-
-    /**
-     * Create the Remote Mep 10001 in ma-1-1 on the device.
-     * This will retrieve the MA from the MockCfmMdService and will create the
-     * new remote mep under it on the device
-     * Depends on sampleXmlRegexCreateMseaCfmMa
-     */
-    @Test
-    public void testCreateRemoteMepOnDevice() throws CfmConfigException {
-        boolean success =
-                cfmProgrammable.createMaRemoteMepOnDevice(
-                        MdIdCharStr.asMdId("md-1"), MaIdCharStr.asMaId("ma-1-1"),
-                        MepId.valueOf((short) 1001));
-        assertTrue(success);
-    }
-
-    /**
-     * Delete the Remote Mep 1002 in ma-1-1 on the device.
-     * This will retrieve the MA from the MockCfmMdService and will delete the
-     * existing remote mep under it on the device
-     * Depends on sampleXmlRegexCreateMseaCfmMa
-     */
-    @Test
-    public void testDeleteRemoteMepOnDevice() throws CfmConfigException {
-        boolean success =
-                cfmProgrammable.deleteMaRemoteMepOnDevice(
-                        MdIdCharStr.asMdId("md-1"), MaIdCharStr.asMaId("ma-1-1"),
-                        MepId.valueOf((short) 1001));
-        assertTrue(success);
-    }
-
-    /**
-     * For sampleXmlRegexTransmitLoopback.
-     * @throws CfmConfigException If an error occurs
-     */
-    @Test
-    public void testTransmitLoopback() throws CfmConfigException {
-        MepLbCreate.MepLbCreateBuilder lbCreate =
-                    DefaultMepLbCreate.builder(MepId.valueOf((short) 12));
-        lbCreate.numberMessages(5);
-//        lbCreate.dataTlvHex("AA:BB:CC:DD:EE");
-        lbCreate.vlanPriority(Priority.PRIO3);
-        lbCreate.vlanDropEligible(true);
-
-        cfmProgrammable.transmitLoopback(MD_ID_1, MA_ID_11, MEP_111, lbCreate.build());
-    }
-
-    @Test
-    public void testAbortLoopback() throws CfmConfigException {
-        cfmProgrammable.abortLoopback(MD_ID_1, MA_ID_11, MEP_111);
-    }
-
-    @Ignore
-    @Test
-    public void testTransmitLinktrace() {
-        fail("Not yet implemented");
-    }
-
-    @Test
-    public void testGetYangMdNameFromApiMdId() throws CfmConfigException {
-        MdNameAndTypeCombo name = getYangMdNameFromApiMdId(MdIdCharStr.asMdId("md-1"));
-
-        assertEquals(org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm
-                .maintenancedomain.mdnameandtypecombo
-                .DefaultNameCharacterString.class, name.getClass());
-
-        assertEquals("md-1", MdNameUtil.cast(name).name().string());
-    }
-
-    @Test
-    public void testGetYangMaNameFromApiMaId() throws CfmConfigException {
-        MaNameAndTypeCombo name = MaNameUtil
-                .getYangMaNameFromApiMaId(MaIdCharStr.asMaId("ma-1-1"));
-        assertEquals(org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm
-                .maintenancedomain.maintenanceassociation.manameandtypecombo
-                .DefaultNameCharacterString.class, name.getClass());
-
-        assertEquals("ma-1-1", MaNameUtil.cast(name).name().string());
-    }
-}
diff --git a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/EA1000FlowRuleProgrammableTest.java b/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/EA1000FlowRuleProgrammableTest.java
deleted file mode 100644
index fe95582..0000000
--- a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/EA1000FlowRuleProgrammableTest.java
+++ /dev/null
@@ -1,370 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.onlab.packet.EthType.EtherType;
-import org.onlab.packet.IpPrefix;
-import org.onlab.packet.VlanId;
-import org.onosproject.core.ApplicationId;
-import org.onosproject.core.DefaultApplicationId;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.flow.DefaultFlowEntry;
-import org.onosproject.net.flow.DefaultFlowRule;
-import org.onosproject.net.flow.DefaultTrafficSelector;
-import org.onosproject.net.flow.DefaultTrafficTreatment;
-import org.onosproject.net.flow.FlowEntry;
-import org.onosproject.net.flow.FlowEntry.FlowEntryState;
-import org.onosproject.net.flow.FlowRule;
-import org.onosproject.net.flow.TrafficSelector;
-import org.onosproject.net.flow.TrafficTreatment;
-import org.onosproject.net.flow.criteria.Criteria;
-import org.onosproject.net.flow.criteria.Criterion;
-import org.onosproject.net.flow.criteria.Criterion.Type;
-import org.onosproject.net.flow.criteria.IPCriterion;
-import org.onosproject.net.flow.criteria.PortCriterion;
-import org.onosproject.net.flow.criteria.VlanIdCriterion;
-import org.onosproject.net.flow.instructions.Instruction;
-
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-
-public class EA1000FlowRuleProgrammableTest {
-    EA1000FlowRuleProgrammable frProgramable;
-
-    private static MockEa1000DriverHandler mockHandler;
-
-    @BeforeClass
-    public static void setUpBeforeClass() throws Exception {
-        mockHandler = new MockEa1000DriverHandler();
-    }
-    @Before
-    public void setUp() throws Exception {
-        frProgramable = new EA1000FlowRuleProgrammable();
-        frProgramable.setHandler(mockHandler);
-        assertNotNull(frProgramable.handler().data().deviceId());
-    }
-
-    @After
-    public void tearDown() throws Exception {
-    }
-
-    @Test
-    public void testGetFlowEntries() {
-        //From MockNetconfSession sample of MseaSaFiltering
-        Collection<FlowEntry> flowEntries = frProgramable.getFlowEntries();
-
-        assertNotNull(flowEntries);
-        //There will be 12 flow entries
-        // 2 for IP Src Address filtering
-        // 2 for EVC 7 - one each port
-        // 8 for EVC 8 - one for host port, 7 on optics port because of ceVlanMap 12:14,20:22,25
-        assertEquals(12, flowEntries.size());
-
-        //Test the first Flow Entry
-        Iterator<FlowEntry> feIter = flowEntries.iterator();
-        while (feIter.hasNext()) {
-            FlowEntry fe = feIter.next();
-            assertTrue(fe.isPermanent());
-            assertEquals(EA1000FlowRuleProgrammable.PRIORITY_DEFAULT, fe.priority());
-
-            Set<Criterion> criteria = fe.selector().criteria();
-            IPCriterion ipCr = null;
-            PortNumber port = null;
-            for (Criterion cr:criteria.toArray(new Criterion[criteria.size()])) {
-                if (cr.type() == Criterion.Type.IPV4_SRC) {
-                    ipCr = (IPCriterion) cr;
-                } else if (cr.type() == Criterion.Type.IN_PORT) {
-                    port = ((PortCriterion) cr).port();
-                } else if (cr.type() == Criterion.Type.VLAN_VID) {
-                    VlanId vid = ((VlanIdCriterion) cr).vlanId();
-                } else {
-                    fail("Unexpected Criterion type: " + cr.type().toString());
-                }
-            }
-            if (ipCr != null && (port == null || port.toLong() != 0L)) {
-                fail("Port number not equal 0 when IP Src Address filter is present");
-            }
-
-            List<Instruction> instructions = fe.treatment().allInstructions();
-
-            if (fe.tableId() == 1) {
-                //Note that in MockNetconf session 10.10.10.10/16 was entered
-                //but it has been corrected to the following by the OF implementation
-                assertEquals("10.10.0.0/16", ipCr.ip().toString());
-                assertEquals(FlowEntryState.ADDED, fe.state());
-            } else if (fe.tableId() == 2) {
-                //Likewise 20.30.40.50 has been truncated because of the 18 bit mask
-                assertEquals("20.30.0.0/18", ipCr.ip().toString());
-                assertEquals(FlowEntryState.ADDED, fe.state());
-            } else if (fe.tableId() == 7 || fe.tableId() == 8) {
-                // 7 and 8 are EVC entries - 2 elements - IN_PORT and VLAN_ID
-                assertEquals(2, fe.selector().criteria().size());
-                //In MockNetconfSession we're rigged it so that the last two chars of the
-                //flow id is the same as the VlanId
-                short vlanId = ((VlanIdCriterion) fe.selector().getCriterion(Type.VLAN_VID)).vlanId().toShort();
-                long flowId = fe.id().id();
-                String flowIdStr = String.valueOf(flowId).substring(String.valueOf(flowId).length() - 2);
-                assertEquals(flowIdStr, String.valueOf(vlanId));
-                if (((PortCriterion) fe.selector().getCriterion(Type.IN_PORT)).port().toLong() == 1L) {
-                    assertEquals(Instruction.Type.L2MODIFICATION, instructions.get(0).type());
-                }
-            } else {
-                fail("Unexpected Flow Entry Rule " + fe.tableId());
-            }
-        }
-    }
-
-    @Test
-    public void testSetFlowEntries() {
-        Criterion matchInPort = Criteria.matchInPort(PortNumber.portNumber(0));
-
-        TrafficTreatment treatmentDrop = DefaultTrafficTreatment.builder().drop().build();
-
-        Collection<FlowRule> frAddedList = new HashSet<>();
-
-        FlowRule fr4 = new DefaultFlowRule.Builder()
-            .forDevice(frProgramable.handler().data().deviceId())
-            .forTable(4)
-            .withSelector(DefaultTrafficSelector.builder()
-                    .matchIPSrc(IpPrefix.valueOf("192.168.60.0/22"))
-                    .add(matchInPort).build())
-            .withTreatment(treatmentDrop)
-            .fromApp(new DefaultApplicationId(4, "Filter4"))
-            .makePermanent()
-            .withPriority(EA1000FlowRuleProgrammable.PRIORITY_DEFAULT)
-            .build();
-        frAddedList.add(fr4);
-
-        FlowRule fr5 = new DefaultFlowRule.Builder()
-                .forDevice(frProgramable.handler().data().deviceId())
-                .forTable(5)
-                .withSelector(DefaultTrafficSelector.builder()
-                        .matchIPSrc(IpPrefix.valueOf("192.168.50.0/23"))
-                        .add(matchInPort).build())
-                .withTreatment(treatmentDrop)
-                .withCookie(Long.valueOf("5e0000abaa2772", 16))
-                .makePermanent()
-                .withPriority(EA1000FlowRuleProgrammable.PRIORITY_DEFAULT)
-                .build();
-        frAddedList.add(fr5);
-
-        //Add in some EVCs - especially with complex ceVlanMaps
-        FlowRule frEvc1Vid19P0 = new DefaultFlowRule.Builder()
-                .forDevice(frProgramable.handler().data().deviceId())
-                .forTable(1)
-                .withSelector(DefaultTrafficSelector.builder()
-                        .matchInPort(PortNumber.portNumber(0L))
-                        .matchVlanId(VlanId.vlanId((short) 19))
-                        .build())
-                .withTreatment(DefaultTrafficTreatment.builder()
-                        .popVlan()
-                        .build())
-                .withCookie(Long.valueOf("1e0000abaa0019", 16))
-                .makePermanent()
-                .withPriority(EA1000FlowRuleProgrammable.PRIORITY_DEFAULT)
-                .build();
-        frAddedList.add(frEvc1Vid19P0);
-
-        FlowRule frEvc1Vid20P0 = new DefaultFlowRule.Builder()
-                .forDevice(frProgramable.handler().data().deviceId())
-                .forTable(1)
-                .withSelector(DefaultTrafficSelector.builder()
-                        .matchInPort(PortNumber.portNumber(0L))
-                        .matchVlanId(VlanId.vlanId((short) 20))
-                        .build())
-                .withTreatment(DefaultTrafficTreatment.builder()
-                        .popVlan()
-                        .build())
-                .withCookie(Long.valueOf("1e0000abaa0020", 16))
-                .makePermanent()
-                .withPriority(EA1000FlowRuleProgrammable.PRIORITY_DEFAULT)
-                .build();
-        frAddedList.add(frEvc1Vid20P0);
-
-        FlowRule frEvc1Vid21P1 = new DefaultFlowRule.Builder()
-                .forDevice(frProgramable.handler().data().deviceId())
-                .forTable(1)
-                .withSelector(DefaultTrafficSelector.builder()
-                        .matchInPort(PortNumber.portNumber(1L))
-                        .matchVlanId(VlanId.vlanId((short) 21))
-                        .build())
-                .withTreatment(DefaultTrafficTreatment.builder()
-                        .setVlanId(VlanId.vlanId((short) 250))
-                        .pushVlan(EtherType.QINQ.ethType())
-                        .build())
-                .withCookie(Long.valueOf("1e0000abaa0121", 16))
-                .makePermanent()
-                .withPriority(EA1000FlowRuleProgrammable.PRIORITY_DEFAULT)
-                .build();
-        frAddedList.add(frEvc1Vid21P1);
-
-        FlowRule frEvc1Vid22P1 = new DefaultFlowRule.Builder()
-                .forDevice(frProgramable.handler().data().deviceId())
-                .forTable(1)
-                .withSelector(DefaultTrafficSelector.builder()
-                        .matchInPort(PortNumber.portNumber(1L))
-                        .matchVlanId(VlanId.vlanId((short) 22))
-                        .build())
-                .withTreatment(DefaultTrafficTreatment.builder()
-                        .setVlanId(VlanId.vlanId((short) 250))
-                        .pushVlan(EtherType.QINQ.ethType())
-                        .build())
-                .withCookie(Long.valueOf("1e0000abaa0122", 16))
-                .makePermanent()
-                .withPriority(EA1000FlowRuleProgrammable.PRIORITY_DEFAULT)
-                .build();
-        frAddedList.add(frEvc1Vid22P1);
-
-        Collection<FlowRule> returnedFrList = frProgramable.applyFlowRules(frAddedList);
-
-        assertNotNull(returnedFrList);
-        assertEquals(6, returnedFrList.size());
-
-        //Test the scenario like in FlowRuleManager$InternalFlowRuleProviderService.pushFlowMetricsInternal()
-        Map<FlowEntry, FlowEntry> storedRules = Maps.newHashMap();
-        frAddedList.forEach(f -> storedRules.put(new DefaultFlowEntry(f), new DefaultFlowEntry(f)));
-        List<FlowEntry> feList = Lists.newArrayList();
-        returnedFrList.forEach(f -> feList.add(new DefaultFlowEntry(f)));
-
-        for (FlowEntry rule : feList) {
-            FlowEntry fer = storedRules.remove(rule);
-            assertNotNull(fer);
-            assertTrue(fer.exactMatch(rule));
-        }
-
-        for (FlowRule fr:returnedFrList.toArray(new FlowRule[2])) {
-            if (fr.tableId() == 4) {
-                assertEquals("IPV4_SRC:192.168.60.0/22",
-                        ((IPCriterion) fr.selector().getCriterion(Type.IPV4_SRC)).toString());
-            } else if (fr.tableId() == 5) {
-                assertEquals("IPV4_SRC:192.168.50.0/23",
-                        ((IPCriterion) fr.selector().getCriterion(Type.IPV4_SRC)).toString());
-                assertEquals(Long.valueOf("5e0000abaa2772", 16), fr.id().id());
-            } else if (fr.tableId() == 1) {
-                //TODO add in tests
-            } else {
-                fail("Unexpected flow rule " + fr.tableId() + " in test");
-            }
-        }
-    }
-
-    @Test
-    public void testRemoveFlowEntries() {
-        TrafficSelector.Builder tsBuilder = DefaultTrafficSelector.builder();
-        Criterion matchInPort0 = Criteria.matchInPort(PortNumber.portNumber(0));
-        Criterion matchInPort1 = Criteria.matchInPort(PortNumber.portNumber(1));
-
-        TrafficTreatment.Builder trDropBuilder = DefaultTrafficTreatment.builder();
-        TrafficTreatment treatmentDrop = trDropBuilder.drop().build();
-
-        Collection<FlowRule> frRemoveList = new HashSet<>();
-        ApplicationId app = new DefaultApplicationId(1, "org.onosproject.rest");
-
-        Criterion matchIpSrc1 = Criteria.matchIPSrc(IpPrefix.valueOf("10.10.10.10/16"));
-        TrafficSelector selector1 = tsBuilder.add(matchIpSrc1).add(matchInPort0).build();
-        FlowRule.Builder frBuilder1 = new DefaultFlowRule.Builder();
-        frBuilder1.forDevice(frProgramable.handler().data().deviceId())
-                .withSelector(selector1)
-                .withTreatment(treatmentDrop)
-                .forTable(2)
-                .fromApp(app)
-                .makePermanent()
-                .withPriority(EA1000FlowRuleProgrammable.PRIORITY_DEFAULT);
-        frRemoveList.add(frBuilder1.build());
-
-        Criterion matchIpSrc2 = Criteria.matchIPSrc(IpPrefix.valueOf("10.30.10.10/16"));
-        TrafficSelector selector2 = tsBuilder.add(matchIpSrc2).add(matchInPort0).build();
-        FlowRule.Builder frBuilder2 = new DefaultFlowRule.Builder();
-        frBuilder2.forDevice(frProgramable.handler().data().deviceId())
-                .withSelector(selector2)
-                .withTreatment(treatmentDrop)
-                .forTable(3)
-                .fromApp(app)
-                .makePermanent()
-                .withPriority(EA1000FlowRuleProgrammable.PRIORITY_DEFAULT)
-                .build();
-        frRemoveList.add(frBuilder2.build());
-
-
-        TrafficTreatment.Builder trVlanPopBuilder = DefaultTrafficTreatment.builder();
-        TrafficTreatment treatmentVlanPop = trVlanPopBuilder.popVlan().build();
-
-
-        Criterion matchVlan710 = Criteria.matchVlanId(VlanId.vlanId((short) 710));
-        TrafficSelector selector3 = DefaultTrafficSelector.builder().add(matchVlan710).add(matchInPort1).build();
-        FlowRule.Builder frBuilder3 = new DefaultFlowRule.Builder();
-        frBuilder3.forDevice(frProgramable.handler().data().deviceId())
-            .withSelector(selector3)
-            .withTreatment(treatmentVlanPop)
-            .forTable(7)
-            .fromApp(app)
-            .makePermanent()
-            .withPriority(EA1000FlowRuleProgrammable.PRIORITY_DEFAULT)
-            .build();
-        frRemoveList.add(frBuilder3.build());
-
-
-        Criterion matchVlan101 = Criteria.matchVlanId(VlanId.vlanId((short) 101));
-        TrafficSelector selector4 = DefaultTrafficSelector.builder().add(matchVlan101).add(matchInPort1).build();
-        FlowRule.Builder frBuilder4 = new DefaultFlowRule.Builder();
-        frBuilder4.forDevice(frProgramable.handler().data().deviceId())
-            .withSelector(selector4)
-            .withTreatment(treatmentVlanPop)
-            .forTable(1)
-            .fromApp(app)
-            .makePermanent()
-            .withPriority(EA1000FlowRuleProgrammable.PRIORITY_DEFAULT)
-            .build();
-        frRemoveList.add(frBuilder4.build());
-
-        Criterion matchVlan102 = Criteria.matchVlanId(VlanId.vlanId((short) 102));
-        TrafficSelector selector5 = DefaultTrafficSelector.builder().add(matchVlan102).add(matchInPort0).build();
-        FlowRule.Builder frBuilder5 = new DefaultFlowRule.Builder();
-        frBuilder5.forDevice(frProgramable.handler().data().deviceId())
-            .withSelector(selector5)
-            .withTreatment(treatmentVlanPop)
-            .forTable(1)
-            .fromApp(app)
-            .makePermanent()
-            .withPriority(EA1000FlowRuleProgrammable.PRIORITY_DEFAULT)
-            .build();
-        frRemoveList.add(frBuilder5.build());
-
-        Collection<FlowRule> removedFrList = frProgramable.removeFlowRules(frRemoveList);
-        assertNotNull(removedFrList);
-        assertEquals(5, removedFrList.size());
-
-        for (FlowRule frRemoved:removedFrList) {
-            assertNotNull(frRemoved);
-        }
-    }
-}
diff --git a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/EA1000MeterProviderTest.java b/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/EA1000MeterProviderTest.java
deleted file mode 100644
index 1e70a9e..0000000
--- a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/EA1000MeterProviderTest.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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 java.util.HashSet;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.onosproject.core.DefaultApplicationId;
-import org.onosproject.drivers.microsemi.yang.MockMseaUniEvcServiceManager;
-import org.onosproject.drivers.microsemi.yang.MockNetconfSessionEa1000;
-import org.onosproject.drivers.netconf.MockNetconfController;
-import org.onosproject.drivers.netconf.MockNetconfDevice;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.meter.Band;
-import org.onosproject.net.meter.DefaultBand;
-import org.onosproject.net.meter.DefaultMeter;
-import org.onosproject.net.meter.Meter;
-import org.onosproject.net.meter.Meter.Unit;
-import org.onosproject.net.meter.MeterId;
-import org.onosproject.net.meter.MeterOperation;
-import org.onosproject.net.meter.MeterOperation.Type;
-import org.onosproject.netconf.NetconfController;
-
-public class EA1000MeterProviderTest {
-
-    private EA1000MeterProvider meterProvider;
-    private NetconfController controller;
-    private DeviceId mockDeviceId;
-    private MockMseaUniEvcServiceManager mseaUniEvcServiceSvc;
-
-    @Before
-    public void setUp() throws Exception {
-        mockDeviceId = DeviceId.deviceId("netconf:1.2.3.4:830");
-        controller = new MockNetconfController();
-        MockNetconfDevice device = (MockNetconfDevice) controller.connectDevice(mockDeviceId);
-        device.setNcSessionImpl(MockNetconfSessionEa1000.class);
-        mseaUniEvcServiceSvc = new MockMseaUniEvcServiceManager();
-        mseaUniEvcServiceSvc.activate();
-        meterProvider = new TestEA1000MeterProvider(controller, mseaUniEvcServiceSvc);
-    }
-
-    @After
-    public void tearDown() throws Exception {
-    }
-
-    @Test
-    public void testPerformMeterOperationDeviceIdMeterAdd() {
-        DeviceId mockDeviceId = DeviceId.deviceId("netconf:1.2.3.4:830");
-
-        Band cbsBand = DefaultBand.builder()
-                .ofType(Band.Type.REMARK) //Committed - CIR & CBS
-                .withRate(37500L)
-                .burstSize(2000)
-                .dropPrecedence((short) 0)
-                .build();
-
-        Band ebsBand = DefaultBand.builder()
-                .ofType(Band.Type.DROP) //Excess - EIR & EBS
-                .withRate(50000L) //The rate at which we drop - for EA 1000 subtract CIR to get EIR
-                .burstSize(3000) //The burst rate to drop at
-                .build();
-
-        Meter.Builder mBuilder = DefaultMeter.builder()
-                .forDevice(mockDeviceId)
-                .withId(MeterId.meterId(1))
-                .fromApp(new DefaultApplicationId(101, "unit.test"))
-                .burst()
-                .withUnit(Unit.KB_PER_SEC)
-                .withBands(new HashSet<Band>() { { add(cbsBand); add(ebsBand); } });
-
-        MeterOperation meterOp = new MeterOperation(mBuilder.build(), Type.ADD);
-
-        meterProvider.performMeterOperation(mockDeviceId, meterOp);
-        //The NETCONF XML generated by this matches the pattern
-        // sampleXmlRegexEditConfigBwpGroup1
-        // in MockNetconfSession
-    }
-
-    @Test
-    public void testPerformMeterOperationDeviceIdMeterRemove() {
-        DeviceId mockDeviceId = DeviceId.deviceId("netconf:1.2.3.4:830");
-
-        Band cbsBand = DefaultBand.builder()
-                .ofType(Band.Type.REMARK) //Committed - CIR & CBS
-                .withRate(37500L)
-                .burstSize(2000)
-                .dropPrecedence((short) 0)
-                .build();
-
-        Meter.Builder mBuilder = DefaultMeter.builder()
-                .forDevice(mockDeviceId)
-                .withId(MeterId.meterId(1))
-                .fromApp(new DefaultApplicationId(101, "unit.test"))
-                .burst()
-                .withBands(new HashSet<Band>() { { add(cbsBand); } });
-
-        MeterOperation meterOp = new MeterOperation(mBuilder.build(), Type.REMOVE);
-
-        meterProvider.performMeterOperation(mockDeviceId, meterOp);
-        //The NETCONF XML generated by this matches the pattern
-        // sampleXmlRegexEditConfigBwpGroup1
-        // in MockNetconfSession
-    }
-
-}
diff --git a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/EA1000SoamDmProgrammableTest.java b/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/EA1000SoamDmProgrammableTest.java
deleted file mode 100644
index 7017bd6..0000000
--- a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/EA1000SoamDmProgrammableTest.java
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.time.Duration;
-import java.util.ArrayList;
-import java.util.BitSet;
-import java.util.Collection;
-
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.onosproject.incubator.net.l2monitoring.cfm.Mep.Priority;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdCharStr;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdShort;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdId;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdCharStr;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MepId;
-import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmConfigException;
-import org.onosproject.incubator.net.l2monitoring.soam.SoamConfigException;
-import org.onosproject.incubator.net.l2monitoring.soam.SoamId;
-import org.onosproject.incubator.net.l2monitoring.soam.delay.DefaultDelayMeasurementCreate;
-import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementCreate.DmCreateBuilder;
-import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementCreate.DmType;
-import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementCreate.MeasurementOption;
-import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementCreate.Version;
-import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementEntry;
-import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementEntry.SessionStatus;
-
-public class EA1000SoamDmProgrammableTest {
-
-    EA1000SoamDmProgrammable dmProgrammable;
-    MdId mdId1 = MdIdCharStr.asMdId("md-1");
-    MaIdShort maId11 = MaIdCharStr.asMaId("ma-1-1");
-    MepId mep111 = MepId.valueOf((short) 1);
-
-    private static MockEa1000DriverHandler mockHandler;
-
-    @BeforeClass
-    public static void setUpBeforeClass() throws Exception {
-        mockHandler = new MockEa1000DriverHandler();
-    }
-    @Before
-    public void setUp() throws Exception {
-        dmProgrammable = new EA1000SoamDmProgrammable();
-        dmProgrammable.setHandler(mockHandler);
-        assertNotNull(dmProgrammable.handler().data().deviceId());
-    }
-
-    //TODO Implement all these tests
-//    @Test
-//    public void testEA1000SoamDmProgrammable() {
-//        fail("Not yet implemented");
-//    }
-//
-//    @Test
-//    public void testGetAllDms() {
-//        fail("Not yet implemented");
-//    }
-
-    /**
-     * From SAMPLE_MSEACFM_DELAY_MEASUREMENT_FULL_REPLY.
-     * @throws CfmConfigException
-     * @throws SoamConfigException
-     */
-    @Test
-    public void testGetDm() throws CfmConfigException, SoamConfigException {
-        DelayMeasurementEntry dmEntry =
-                dmProgrammable.getDm(mdId1, maId11, mep111, SoamId.valueOf(1));
-        assertEquals(1, dmEntry.dmId().id().intValue());
-        assertEquals(2, dmEntry.measurementsEnabled().size());
-        assertEquals(SessionStatus.ACTIVE.name(), dmEntry.sessionStatus().name());
-        assertEquals(100, dmEntry.frameDelayTwoWay().toNanos() / 1000);
-        assertEquals(101, dmEntry.interFrameDelayVariationTwoWay().toNanos() / 1000);
-    }
-
-    @Test
-    public void testCreateDm() throws CfmConfigException, SoamConfigException {
-        DmCreateBuilder dmBuilder = (DmCreateBuilder) DefaultDelayMeasurementCreate
-            .builder(DmType.DMDMM, Version.Y17312011,
-                MepId.valueOf((short) 10), Priority.PRIO3)
-            .frameSize((short) 1200);
-
-        dmProgrammable.createDm(mdId1, maId11, mep111, dmBuilder.build());
-    }
-
-    @Test
-    public void testCreateDmWrongMsgPeriod()
-            throws CfmConfigException, SoamConfigException {
-        DmCreateBuilder dmBuilder = (DmCreateBuilder) DefaultDelayMeasurementCreate
-                .builder(DmType.DMDMM, Version.Y17312011,
-                        MepId.valueOf((short) 10), Priority.PRIO3)
-                .messagePeriod(Duration.ofMillis(1234));
-
-        try {
-            dmProgrammable.createDm(mdId1, maId11, mep111, dmBuilder.build());
-            fail("Expecting to get an exception");
-        } catch (SoamConfigException e) {
-            assertTrue(e.getMessage()
-                    .contains("EA1000 supports only Message Periods"));
-        }
-
-    }
-
-//    @Test
-//    public void testGetDmCurrentStat() {
-//        fail("Not yet implemented");
-//    }
-//
-//    @Test
-//    public void testGetDmHistoricalStats() {
-//        fail("Not yet implemented");
-//    }
-//
-//    @Test
-//    public void testAbortDmMdIdMaIdShortMepIdSoamId() {
-//        fail("Not yet implemented");
-//    }
-//
-//    @Test
-//    public void testBuildApiDmFromYangDm() {
-//        fail("Not yet implemented");
-//    }
-//
-//    @Test
-//    public void testAbortDmMdIdMaIdShortMepId() {
-//        fail("Not yet implemented");
-//    }
-//
-//    @Test
-//    public void testClearDelayHistoryStatsMdIdMaIdShortMepId() {
-//        fail("Not yet implemented");
-//    }
-//
-//    @Test
-//    public void testClearDelayHistoryStatsMdIdMaIdShortMepIdSoamId() {
-//        fail("Not yet implemented");
-//    }
-//
-//    @Test
-//    public void testGetAllLms() {
-//        fail("Not yet implemented");
-//    }
-//
-//    @Test
-//    public void testGetLm() {
-//        fail("Not yet implemented");
-//    }
-//
-//    @Test
-//    public void testGetLmCurrentStat() {
-//        fail("Not yet implemented");
-//    }
-//
-//    @Test
-//    public void testGetLmHistoricalStats() {
-//        fail("Not yet implemented");
-//    }
-//
-//    @Test
-//    public void testCreateLm() {
-//        fail("Not yet implemented");
-//    }
-//
-//    @Test
-//    public void testAbortLmMdIdMaIdShortMepId() {
-//        fail("Not yet implemented");
-//    }
-//
-//    @Test
-//    public void testAbortLmMdIdMaIdShortMepIdSoamId() {
-//        fail("Not yet implemented");
-//    }
-//
-//    @Test
-//    public void testClearLossHistoryStatsMdIdMaIdShortMepId() {
-//        fail("Not yet implemented");
-//    }
-//
-//    @Test
-//    public void testClearLossHistoryStatsMdIdMaIdShortMepIdSoamId() {
-//        fail("Not yet implemented");
-//    }
-
-    @Test
-    public void testCreateTestSignal() {
-        try {
-            dmProgrammable.createTestSignal(mdId1, maId11, mep111, null);
-            fail("Expected an exception");
-        } catch (UnsupportedOperationException e) {
-            assertEquals("Not supported by EA1000", e.getMessage());
-        } catch (CfmConfigException e) {
-            fail("CfmConfigException was not expected");
-        }
-    }
-
-    @Test
-    public void testAbortTestSignal() {
-        try {
-            dmProgrammable.abortTestSignal(mdId1, maId11, mep111);
-            fail("Expected an exception");
-        } catch (UnsupportedOperationException e) {
-            assertEquals("Not supported by EA1000", e.getMessage());
-        } catch (CfmConfigException e) {
-            fail("CfmConfigException was not expected");
-        }
-    }
-
-    @Test
-    public void testMeasurementEnableCollectionOfMeasurementOption() {
-        BitSet meBs = BitSet.valueOf(new byte[]{0x05});
-        Collection<MeasurementOption> moSet =
-                EA1000SoamDmProgrammable.getMeasurementOptions(meBs);
-        assertTrue(moSet.contains(MeasurementOption.SOAM_PDUS_RECEIVED));
-        assertTrue(moSet.contains(MeasurementOption.FRAME_DELAY_TWO_WAY_MIN));
-    }
-
-    @Test
-    public void testMeasurementEnableBitSetEmpty() {
-        Collection<MeasurementOption> moSet = new ArrayList<>();
-        try {
-            BitSet bitSet = EA1000SoamDmProgrammable.getMeasurementEnabledSet(moSet);
-            assertEquals("{}", bitSet.toString());
-        } catch (SoamConfigException e) {
-            fail("Was not expecting exception here");
-        }
-    }
-
-    @Test
-    public void testMeasurementEnableBitSetInvalid() {
-        Collection<MeasurementOption> moSet = new ArrayList<>();
-        moSet.add(MeasurementOption.FRAME_DELAY_BACKWARD_BINS);
-        moSet.add(MeasurementOption.FRAME_DELAY_RANGE_BACKWARD_AVERAGE);
-        try {
-            EA1000SoamDmProgrammable.getMeasurementEnabledSet(moSet);
-            fail("Was expecting an exception");
-        } catch (SoamConfigException e) {
-            assertTrue(e.getMessage()
-                    .contains("Measurement Option is not supported on EA1000"));
-        }
-    }
-
-    @Test
-    public void testMeasurementEnableBitSet2Good() {
-        Collection<MeasurementOption> moSet = new ArrayList<>();
-        moSet.add(MeasurementOption.FRAME_DELAY_TWO_WAY_BINS);
-        moSet.add(MeasurementOption.FRAME_DELAY_TWO_WAY_AVERAGE);
-        try {
-            BitSet bitSet = EA1000SoamDmProgrammable.getMeasurementEnabledSet(moSet);
-            assertEquals("{1, 4}", bitSet.toString());
-        } catch (SoamConfigException e) {
-            fail("Was not expecting exception here");
-        }
-    }
-
-}
diff --git a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/MicrosemiDriversLoaderTest.java b/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/MicrosemiDriversLoaderTest.java
deleted file mode 100644
index 6820721..0000000
--- a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/MicrosemiDriversLoaderTest.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Foundation
- *
- * 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 org.junit.Before;
-import org.onosproject.net.driver.AbstractDriverLoaderTest;
-
-
-/**
- * Microsemi drivers loader test.
- */
-public class MicrosemiDriversLoaderTest extends AbstractDriverLoaderTest {
-
-    @Before
-    public void setUp() {
-        loader = new MicrosemiDriversLoader();
-    }
-}
diff --git a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/MockEa1000DriverHandler.java b/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/MockEa1000DriverHandler.java
deleted file mode 100644
index 742f8c9..0000000
--- a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/MockEa1000DriverHandler.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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 java.util.HashMap;
-import java.util.Map;
-
-import org.onosproject.core.CoreService;
-import org.onosproject.drivers.microsemi.yang.MockCfmMdService;
-import org.onosproject.drivers.microsemi.yang.MockCfmMepService;
-import org.onosproject.drivers.microsemi.yang.MockMseaCfmManager;
-import org.onosproject.drivers.microsemi.yang.MockMseaSaFilteringManager;
-import org.onosproject.drivers.microsemi.yang.MockMseaUniEvcServiceManager;
-import org.onosproject.drivers.microsemi.yang.MockNetconfSessionEa1000;
-import org.onosproject.drivers.microsemi.yang.MseaCfmNetconfService;
-import org.onosproject.drivers.microsemi.yang.MseaSaFilteringNetconfService;
-import org.onosproject.drivers.microsemi.yang.MseaUniEvcServiceNetconfService;
-import org.onosproject.drivers.netconf.MockCoreService;
-import org.onosproject.drivers.netconf.MockNetconfController;
-import org.onosproject.drivers.netconf.MockNetconfDevice;
-import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmMdService;
-import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmMepService;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.driver.Behaviour;
-import org.onosproject.net.driver.DefaultDriver;
-import org.onosproject.net.driver.DefaultDriverData;
-import org.onosproject.net.driver.Driver;
-import org.onosproject.net.driver.DriverData;
-import org.onosproject.net.driver.DriverHandler;
-import org.onosproject.net.flow.FlowRuleProgrammable;
-import org.onosproject.netconf.NetconfController;
-import org.onosproject.netconf.NetconfException;
-
-/**
- * A Mock implementation of the DriverHandler to facilitate unit tests.
- *
- * This brings in the implementations of MockMseaSaFilteringManager, MockMseaUniEvcServiceManager,
- * MockCoreService, MockNetconfDevice and MockNetconfSessionEa1000
- */
-public class MockEa1000DriverHandler implements DriverHandler {
-
-    private static final String MICROSEMI_DRIVERS = "com.microsemi.drivers";
-
-    private DriverData mockDriverData;
-
-    private NetconfController ncc;
-    private MockMseaSaFilteringManager mseaSaFilteringService;
-    private MockMseaUniEvcServiceManager mseaUniEvcService;
-    private MockMseaCfmManager mseaCfmService;
-    private MockCfmMdService mockMdService;
-    private MockCfmMepService mockMepService;
-    private CoreService coreService;
-
-    public MockEa1000DriverHandler() throws NetconfException {
-        Map<Class<? extends Behaviour>, Class<? extends Behaviour>> behaviours =
-                new HashMap<Class<? extends Behaviour>, Class<? extends Behaviour>>();
-        behaviours.put(FlowRuleProgrammable.class, FlowRuleProgrammable.class);
-
-        Map<String, String> properties = new HashMap<String, String>();
-
-        Driver mockDriver =
-                new DefaultDriver("mockDriver", null,
-                        "ONOSProject", "1.0.0",
-                        "1.0.0", behaviours, properties);
-        DeviceId mockDeviceId = DeviceId.deviceId("netconf:1.2.3.4:830");
-        mockDriverData = new DefaultDriverData(mockDriver, mockDeviceId);
-
-
-        ncc = new MockNetconfController();
-        MockNetconfDevice device = (MockNetconfDevice) ncc.connectDevice(mockDeviceId);
-        device.setNcSessionImpl(MockNetconfSessionEa1000.class);
-
-        mseaSaFilteringService = new MockMseaSaFilteringManager();
-        mseaSaFilteringService.activate();
-
-        mseaUniEvcService = new MockMseaUniEvcServiceManager();
-        mseaUniEvcService.activate();
-
-        mseaCfmService = new MockMseaCfmManager();
-        mseaCfmService.activate();
-
-        mockMdService = new MockCfmMdService();
-        mockMdService.activate();
-
-        mockMepService = new MockCfmMepService();
-        mockMepService.activate();
-
-        coreService = new MockCoreService();
-        coreService.registerApplication(MICROSEMI_DRIVERS);
-    }
-
-    @Override
-    public Driver driver() {
-        return mockDriverData.driver();
-    }
-
-    @Override
-    public DriverData data() {
-        return mockDriverData;
-    }
-
-    @Override
-    public <T extends Behaviour> T behaviour(Class<T> behaviourClass) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public <T> T get(Class<T> serviceClass) {
-        if (serviceClass.equals(NetconfController.class)) {
-            return (T) ncc;
-
-        } else if (serviceClass.equals(MseaSaFilteringNetconfService.class)) {
-            return (T) mseaSaFilteringService;
-
-        } else if (serviceClass.equals(MseaUniEvcServiceNetconfService.class)) {
-            return (T) mseaUniEvcService;
-
-        } else if (serviceClass.equals(MseaCfmNetconfService.class)) {
-            return (T) mseaCfmService;
-
-        } else if (serviceClass.equals(CoreService.class)) {
-            return (T) coreService;
-
-        } else if (serviceClass.equals(CfmMdService.class)) {
-            return (T) mockMdService;
-
-        } else if (serviceClass.equals(CfmMepService.class)) {
-            return (T) mockMepService;
-
-        }
-
-        return null;
-    }
-
-}
diff --git a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/RpcResultParserTest.java b/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/RpcResultParserTest.java
deleted file mode 100644
index 235017f..0000000
--- a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/RpcResultParserTest.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Foundation
- *
- * 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.junit.Assert.*;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-
-import org.junit.Test;
-
-public class RpcResultParserTest {
-
-    private static final String SAMPLE1_XML = "/systemReply-Sample1.xml";
-    private static final String SAMPLE2_XML = "/systemReply-Sample2.xml";
-
-    @Test
-    public void testSerialNumber1() {
-        String serialNumberReply = loadXml(SAMPLE1_XML);
-        String serialNumber = RpcResultParser.parseXml(serialNumberReply, "serial-number");
-        assertEquals("Eagle Simulator.", serialNumber);
-    }
-
-    @Test
-    public void testSerialNumber2() {
-        String serialNumberReply = loadXml(SAMPLE2_XML);
-        String serialNumber = RpcResultParser.parseXml(serialNumberReply, "serial-number");
-        assertEquals(null, serialNumber);
-    }
-
-    @Test
-    public void testOsRelease1() {
-        String osReleaseReply = loadXml(SAMPLE1_XML);
-        String osRelease = RpcResultParser.parseXml(osReleaseReply, "os-release");
-        assertEquals("2.6.33-arm1-MSEA1000--00326-g643be76.x.0.0.212", osRelease);
-    }
-
-    @Test
-    public void testOsRelease2() {
-        String osReleaseReply = loadXml(SAMPLE2_XML);
-        String osRelease = RpcResultParser.parseXml(osReleaseReply, "os-release");
-        assertEquals(null, osRelease);
-    }
-
-    @Test
-    public void testLongitude() {
-        String longitudeReply = loadXml(SAMPLE1_XML);
-        String longitudeStr = RpcResultParser.parseXml(longitudeReply, "longitude");
-        assertEquals("-8.4683990", longitudeStr);
-    }
-
-    @Test
-    public void testLatitude() {
-        String latitudeReply = loadXml(SAMPLE1_XML);
-        String latitudeStr = RpcResultParser.parseXml(latitudeReply, "latitude");
-        assertEquals("51.9036140", latitudeStr);
-    }
-
-
-    private static String loadXml(final String fileName) {
-
-        InputStream inputStream = RpcResultParserTest.class.getResourceAsStream(fileName);
-        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
-        StringBuilder result = new StringBuilder();
-        try {
-            String line;
-            while ((line = reader.readLine()) != null) {
-                result.append(line);
-            }
-        } catch (IOException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
-        return result.toString();
-    }
-}
\ No newline at end of file
diff --git a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/TestEA1000MeterProvider.java b/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/TestEA1000MeterProvider.java
deleted file mode 100644
index e303e9d..0000000
--- a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/TestEA1000MeterProvider.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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 org.onosproject.drivers.microsemi.yang.MseaUniEvcServiceNetconfService;
-import org.onosproject.netconf.NetconfController;
-
-public class TestEA1000MeterProvider extends EA1000MeterProvider {
-
-    public TestEA1000MeterProvider(NetconfController controller,
-            MseaUniEvcServiceNetconfService mseaUniEvcServiceSvc) {
-        this.controller = controller;
-        this.mseaUniEvcServiceSvc = mseaUniEvcServiceSvc;
-    }
-}
diff --git a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/CeVlanMapUtilsTest.java b/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/CeVlanMapUtilsTest.java
deleted file mode 100644
index e5c4f4a..0000000
--- a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/CeVlanMapUtilsTest.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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 org.junit.Test;
-import org.onosproject.drivers.microsemi.yang.utils.CeVlanMapUtils;
-
-public class CeVlanMapUtilsTest {
-
-    @Test
-    public void testGetVlanSet() {
-        Short[] vlanArray = CeVlanMapUtils.getVlanSet("101:102");
-        assertEquals(2, vlanArray.length);
-
-        vlanArray = CeVlanMapUtils.getVlanSet("101:103,107,110:115");
-        assertEquals(10, vlanArray.length);
-
-        vlanArray = CeVlanMapUtils.getVlanSet("1:4095");
-        assertEquals(4095, vlanArray.length);
-    }
-
-    @Test
-    public void testVlanListAsString() {
-        String ceVlanMap = CeVlanMapUtils.vlanListAsString(new Short[]{101, 102, 103});
-        assertEquals("101:103", ceVlanMap);
-
-        ceVlanMap = CeVlanMapUtils.vlanListAsString(new Short[]{0, 101, 104, 108});
-        assertEquals("101,104,108", ceVlanMap);
-    }
-
-    @Test
-    public void testAddtoCeVlanMap() {
-        String ceVlanMap = CeVlanMapUtils.addtoCeVlanMap("101:102", (short) 103);
-        assertEquals("101:103", ceVlanMap);
-
-        ceVlanMap = CeVlanMapUtils.addtoCeVlanMap("101:102", (short) 0);
-        assertEquals("101:102", ceVlanMap);
-
-        ceVlanMap = CeVlanMapUtils.addtoCeVlanMap("101:102", (short) 104);
-        assertEquals("101:102,104", ceVlanMap);
-    }
-
-    @Test
-    public void testRemoveZeroIfPossible() {
-        String ceVlanMap = CeVlanMapUtils.removeZeroIfPossible("101:102");
-        assertEquals("101:102", ceVlanMap);
-
-        ceVlanMap = CeVlanMapUtils.removeZeroIfPossible("0,101:102");
-        assertEquals("101:102", ceVlanMap);
-
-        ceVlanMap = CeVlanMapUtils.removeZeroIfPossible("0");
-        assertEquals("0", ceVlanMap);
-    }
-
-    @Test
-    public void testRemoveFromCeVlanMap() {
-        String ceVlanMap = CeVlanMapUtils.removeFromCeVlanMap("101:102", (short) 102);
-        assertEquals("101", ceVlanMap);
-
-        ceVlanMap = CeVlanMapUtils.removeFromCeVlanMap("101:103", (short) 102);
-        assertEquals("101,103", ceVlanMap);
-    }
-
-    @Test
-    public void testCombineVlanSets() {
-        assertEquals("101:104", CeVlanMapUtils.combineVlanSets("101:102", "103:104"));
-
-        assertEquals("101:103", CeVlanMapUtils.combineVlanSets("101:102", "103"));
-
-        assertEquals("101:102,104", CeVlanMapUtils.combineVlanSets("101:102", "104"));
-
-        assertEquals("99,101:102", CeVlanMapUtils.combineVlanSets("101:102", "99"));
-
-        assertEquals("101:102", CeVlanMapUtils.combineVlanSets("101:102", "0"));
-
-    }
-}
diff --git a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/IetfSystemManagerTest.java b/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/IetfSystemManagerTest.java
deleted file mode 100644
index 8a5e6f4..0000000
--- a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/IetfSystemManagerTest.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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.text.ParseException;
-import java.time.OffsetDateTime;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.onlab.packet.Ip4Address;
-import org.onosproject.drivers.microsemi.yang.impl.IetfSystemManager;
-import org.onosproject.netconf.NetconfDeviceInfo;
-import org.onosproject.netconf.NetconfException;
-import org.onosproject.netconf.NetconfSession;
-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;
-    NetconfSession session;
-
-    @Before
-    public void setUp() throws Exception {
-        try {
-            sysSvc = new MockIetfSystemManager();
-            sysSvc.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 {
-        sysSvc.deactivate();
-    }
-
-    @Test
-    public void testGetIetfSystemSession() throws NetconfException {
-        System system = new DefaultSystem();
-        system.clock(new DefaultClock());
-
-        IetfSystemOpParam sampleSystem = new IetfSystemOpParam();
-        sampleSystem.system(system);
-
-        IetfSystem sys = sysSvc.getIetfSystem(sampleSystem, session);
-        assertNotNull(sys);
-
-        assertEquals(sys.system().clock().timezone().getClass(), DefaultTimezoneName.class);
-        DefaultTimezoneName tzName = (DefaultTimezoneName) sys.system().clock().timezone();
-        assertEquals("Etc/UTC", tzName.timezoneName().string());
-    }
-
-    @Test
-    public void testGetIetfSystemInit() throws NetconfException {
-
-        IetfSystem sys = sysSvc.getIetfSystemInit(session);
-        assertNotNull(sys);
-        assertNotNull(sys.system());
-
-        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().augmentation(DefaultAugmentedSysPlatform.class);
-
-        assertEquals("EA1000 unit test.", sysSystemState.deviceIdentification().serialNumber());
-    }
-
-    @Test
-    public void testSetCurrentDatetime() throws NetconfException, ParseException {
-        sysSvc.setCurrentDatetime(OffsetDateTime.now(), session);
-        //Look at MockNetconfSessionEa1000::sampleXmlRegexSetCurrentDatetime() for catching an error
-    }
-}
diff --git a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/MockCfmMdService.java b/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/MockCfmMdService.java
deleted file mode 100644
index 3d0fb5f..0000000
--- a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/MockCfmMdService.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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.onlab.packet.VlanId;
-import org.onosproject.incubator.net.l2monitoring.cfm.DefaultComponent;
-import org.onosproject.incubator.net.l2monitoring.cfm.DefaultMaintenanceAssociation;
-import org.onosproject.incubator.net.l2monitoring.cfm.DefaultMaintenanceDomain;
-import org.onosproject.incubator.net.l2monitoring.cfm.MaintenanceAssociation;
-import org.onosproject.incubator.net.l2monitoring.cfm.MaintenanceDomain;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdCharStr;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdId;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdCharStr;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MepId;
-import org.onosproject.incubator.net.l2monitoring.cfm.impl.CfmMdManager;
-import static org.easymock.EasyMock.*;
-import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmConfigException;
-import org.onosproject.incubator.net.l2monitoring.cfm.service.MdStore;
-
-import java.util.Optional;
-
-/**
- * Supports testing of services that reply on the CfmMdService.
- */
-public class MockCfmMdService extends CfmMdManager {
-
-    @Override
-    public void activate() {
-        store = createMock(MdStore.class);
-
-        try {
-            MaintenanceAssociation ma = DefaultMaintenanceAssociation
-                    .builder(MaIdCharStr.asMaId("ma-1-1"), 6)
-                    .maNumericId((short) 1)
-                    .ccmInterval(MaintenanceAssociation.CcmInterval.INTERVAL_3MS)
-                    .addToRemoteMepIdList(MepId.valueOf((short) 10))
-                    .addToRemoteMepIdList(MepId.valueOf((short) 20))
-                    .addToComponentList(
-                            DefaultComponent.builder(1)
-                                    .addToVidList(VlanId.vlanId((short) 101)).build())
-                    .build();
-
-            MdId md1Name = MdIdCharStr.asMdId("md-1");
-            MaintenanceDomain md1 = DefaultMaintenanceDomain
-                    .builder(md1Name)
-                    .mdNumericId((short) 1)
-                    .mdLevel(MaintenanceDomain.MdLevel.LEVEL3)
-                    .addToMaList(ma)
-                    .build();
-
-            MdId md2Name = MdIdCharStr.asMdId("md-2");
-            MaintenanceDomain md2 = DefaultMaintenanceDomain
-                    .builder(md1Name)
-                    .mdNumericId((short) 2)
-                    .mdLevel(MaintenanceDomain.MdLevel.LEVEL2)
-                    .build();
-
-            expect(store.createUpdateMaintenanceDomain(md1))
-                    .andReturn(true);
-            expect(store.createUpdateMaintenanceDomain(md2))
-                    .andReturn(true);
-            expect(store.getMaintenanceDomain(md1Name))
-                    .andReturn(Optional.of(md1)).anyTimes();
-            expect(store.getMaintenanceDomain(md2Name))
-                    .andReturn(Optional.of(md2)).anyTimes();
-            replay(store);
-
-        } catch (CfmConfigException e) {
-            throw new IllegalArgumentException("Error creating MDs for test", e);
-        }
-    }
-}
diff --git a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/MockCfmMepService.java b/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/MockCfmMepService.java
deleted file mode 100644
index c00fc4e..0000000
--- a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/MockCfmMepService.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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.onlab.junit.TestUtils;
-import org.onlab.packet.ChassisId;
-import org.onosproject.common.event.impl.TestEventDispatcher;
-import org.onosproject.core.CoreServiceAdapter;
-import org.onosproject.core.IdGenerator;
-import org.onosproject.incubator.net.l2monitoring.cfm.DefaultMep;
-import org.onosproject.incubator.net.l2monitoring.cfm.Mep;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdCharStr;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdCharStr;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MepId;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MepKeyId;
-import org.onosproject.incubator.net.l2monitoring.cfm.impl.CfmMdManager;
-import org.onosproject.incubator.net.l2monitoring.cfm.impl.CfmMepManager;
-import org.onosproject.incubator.net.l2monitoring.cfm.impl.TestCfmMepProgrammable;
-import org.onosproject.incubator.net.l2monitoring.cfm.impl.TestDeviceDiscoveryBehavior;
-import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmConfigException;
-import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmMepProgrammable;
-import org.onosproject.incubator.net.l2monitoring.cfm.service.MepStore;
-import org.onosproject.incubator.net.l2monitoring.soam.SoamDmProgrammable;
-import org.onosproject.incubator.net.l2monitoring.soam.impl.TestSoamDmProgrammable;
-import org.onosproject.net.AnnotationKeys;
-import org.onosproject.net.DefaultAnnotations;
-import org.onosproject.net.DefaultDevice;
-import org.onosproject.net.Device;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.device.DeviceDescriptionDiscovery;
-import org.onosproject.net.device.DeviceService;
-import org.onosproject.net.driver.Behaviour;
-import org.onosproject.net.driver.DefaultDriver;
-import org.onosproject.net.driver.Driver;
-import org.onosproject.net.driver.DriverService;
-import org.onosproject.net.provider.ProviderId;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Optional;
-import java.util.concurrent.atomic.AtomicLong;
-
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.expect;
-import static org.onosproject.net.NetTestTools.injectEventDispatcher;
-
-/**
- * Supports testing of services that reply on the CfmMepService.
- */
-public class MockCfmMepService extends CfmMepManager {
-    private static final String TEST_MFR = "testMfr";
-    private static final String TEST_HW_VERSION = "testHwVersion";
-    private static final String TEST_SW_VERSION = "testSwVersion";
-    private static final String TEST_SN = "testSn";
-    private static final String TEST_DRIVER = "testDriver";
-    protected static final DeviceId DEVICE_ID1 = DeviceId.deviceId("netconf:1.2.3.4:830");
-
-
-    private final DriverService driverService = createMock(DriverService.class);
-
-    private Device device1;
-    private Driver testDriver;
-
-
-    @Override
-    public void activate() {
-        mepStore = createMock(MepStore.class);
-        cfmMdService = new MockCfmMdService();
-        deviceService = createMock(DeviceService.class);
-        ((CfmMdManager) cfmMdService).activate();
-
-        device1 = new DefaultDevice(
-                ProviderId.NONE, DEVICE_ID1, Device.Type.SWITCH,
-                TEST_MFR, TEST_HW_VERSION, TEST_SW_VERSION, TEST_SN,
-                new ChassisId(1),
-                DefaultAnnotations.builder().set(AnnotationKeys.DRIVER, TEST_DRIVER).build());
-
-        Map<Class<? extends Behaviour>, Class<? extends Behaviour>> behaviours = new HashMap<>();
-        behaviours.put(DeviceDescriptionDiscovery.class, TestDeviceDiscoveryBehavior.class);
-        behaviours.put(CfmMepProgrammable.class, TestCfmMepProgrammable.class);
-        behaviours.put(SoamDmProgrammable.class, TestSoamDmProgrammable.class);
-
-        TestUtils.setField(this, "coreService", new TestCoreService());
-        TestUtils.setField(this, "deviceService", deviceService);
-        injectEventDispatcher(this, new TestEventDispatcher());
-
-        testDriver = new DefaultDriver(
-                TEST_DRIVER, new ArrayList<Driver>(),
-                TEST_MFR, TEST_HW_VERSION, TEST_SW_VERSION,
-                behaviours, new HashMap<>());
-
-        try {
-            Mep mep1 = DefaultMep.builder(
-                        MepId.valueOf((short) 10),
-                        DEVICE_ID1,
-                        PortNumber.P0,
-                        Mep.MepDirection.UP_MEP,
-                        MdIdCharStr.asMdId("md-1"),
-                        MaIdCharStr.asMaId("ma-1-1"))
-                    .build();
-
-            expect(mepStore.getMep(new MepKeyId(mep1))).andReturn(Optional.of(mep1)).anyTimes();
-        } catch (CfmConfigException e) {
-            throw new IllegalArgumentException("Error creating MEPs for test", e);
-        }
-    }
-
-    private class TestCoreService extends CoreServiceAdapter {
-
-        @Override
-        public IdGenerator getIdGenerator(String topic) {
-            return new IdGenerator() {
-                private AtomicLong counter = new AtomicLong(0);
-
-                @Override
-                public long getNewId() {
-                    return counter.getAndIncrement();
-                }
-            };
-        }
-    }
-}
diff --git a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/MockIetfSystemManager.java b/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/MockIetfSystemManager.java
deleted file mode 100644
index 4cbb88a..0000000
--- a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/MockIetfSystemManager.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/MockMseaCfmManager.java b/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/MockMseaCfmManager.java
deleted file mode 100644
index 2576c78..0000000
--- a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/MockMseaCfmManager.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/MockMseaSaFilteringManager.java b/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/MockMseaSaFilteringManager.java
deleted file mode 100644
index 31fe61a..0000000
--- a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/MockMseaSaFilteringManager.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/MockMseaUniEvcServiceManager.java b/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/MockMseaUniEvcServiceManager.java
deleted file mode 100644
index 3cf3a42..0000000
--- a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/MockMseaUniEvcServiceManager.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/MockNetconfSessionEa1000.java b/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/MockNetconfSessionEa1000.java
deleted file mode 100644
index 6831fc3..0000000
--- a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/MockNetconfSessionEa1000.java
+++ /dev/null
@@ -1,1423 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Foundation
- *
- * 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.util.concurrent.CompletableFuture;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.regex.Pattern;
-
-import org.onosproject.drivers.microsemi.EA1000CfmMepProgrammableTest;
-import org.onosproject.netconf.DatastoreId;
-import org.onosproject.netconf.NetconfDeviceInfo;
-import org.onosproject.netconf.NetconfDeviceOutputEventListener;
-import org.onosproject.netconf.NetconfException;
-import org.onosproject.netconf.NetconfSessionAdapter;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class MockNetconfSessionEa1000 extends NetconfSessionAdapter {
-    private static final Logger log = LoggerFactory
-            .getLogger(MockNetconfSessionEa1000.class);
-
-    private static final String MESSAGE_ID_STRING = "message-id";
-    private static final String EQUAL = "=";
-    private static final String RPC_OPEN = "<rpc ";
-    private static final String RPC_CLOSE = "</rpc>";
-    private static final String GET_OPEN = "<get>";
-    private static final String GET_CLOSE = "</get>";
-    private static final String NEW_LINE = "\n";
-    private static final String SUBTREE_FILTER_OPEN = "<filter type=\"subtree\">";
-    private static final String SUBTREE_FILTER_CLOSE = "</filter>";
-    private static final String WITH_DEFAULT_OPEN = "<with-defaults ";
-    private static final String WITH_DEFAULT_CLOSE = "</with-defaults>";
-    private static final String EDIT_CONFIG_OPEN = "<edit-config>";
-    private static final String EDIT_CONFIG_CLOSE = "</edit-config>";
-    private static final String TARGET_OPEN = "<target>";
-    private static final String TARGET_CLOSE = "</target>";
-    private static final String DEFAULT_OPERATION_OPEN = "<default-operation>";
-    private static final String DEFAULT_OPERATION_CLOSE = "</default-operation>";
-    private static final String CONFIG_OPEN = "<config xmlns:nc=\"urn:ietf:params:xml:ns:netconf:base:1.0\">";
-    private static final String CONFIG_CLOSE = "</config>";
-
-    private static final String ENDPATTERN = "]]>]]>";
-    private static final String XML_HEADER =
-            "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
-    private static final String NETCONF_BASE_NAMESPACE =
-            "xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"";
-    private static final String NETCONF_WITH_DEFAULTS_NAMESPACE =
-            "xmlns=\"urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults\"";
-
-
-    private Pattern sampleXmlRegex1 =
-            Pattern.compile("(<\\?xml).*(<rpc).*(<get>).*(<filter).*"
-                    + "(<system).*(<clock/>).*(</system>).*(</filter>)*.(</get>).*(</rpc).*(]]>){2}",
-                    Pattern.DOTALL);
-
-    private Pattern sampleXmlRegex2 =
-            Pattern.compile("(<\\?xml).*(<rpc).*(<get>).*(<filter).*(<system-state).*(</system-state>).*"
-                    + "(<system).*(</system>).*(</filter>).*(</get>).*(</rpc).*(]]>){2}",
-                    Pattern.DOTALL);
-
-    private Pattern sampleXmlRegexSaFiltering =
-            Pattern.compile("(<\\?xml).*"
-                    + "(<rpc).*(<get>)\\R?"
-                    + "(<filter type=\"subtree\">)\\R?"
-                    + "(<source-ipaddress-filtering).*(</source-ipaddress-filtering>)\\R?"
-                    + "(</filter>)\\R?(</get>)\\R?(</rpc>)\\R?(]]>){2}", Pattern.DOTALL);
-
-    private Pattern sampleXmlRegexSaFilteringErrorScenario =
-            Pattern.compile("(<\\?xml).*"
-                    + "(<rpc).*(<get>)\\R?"
-                    + "(<filter type=\"subtree\">)\\R?"
-                    + "(<source-ipaddress-filtering).*"
-                    + "(<interface-eth0>)\\R?"
-                    + "(<source-address-range>)\\R?"
-                    + "(<range-id>)10(</range-id>)\\R?"
-                    + "(</source-address-range>)\\R?"
-                    + "(</interface-eth0>)\\R?"
-                    + "(</source-ipaddress-filtering>)\\R?"
-                    + "(</filter>)\\R?(</get>)\\R?(</rpc>)\\R?(]]>){2}", Pattern.DOTALL);
-
-    private Pattern sampleXmlRegexEditConfigSaFilt =
-            Pattern.compile("(<\\?xml).*(<rpc).*(<edit-config>).*"
-                    + "(<target><running/></target>).*(<config xmlns:nc=\"urn:ietf:params:xml:ns:netconf:base:1.0\">).*"
-                    + "(<source-ipaddress-filtering).*(<interface-eth0>).*"
-                    + "(<source-address-range>).*(<range-id>).*(</range-id>).*"
-                    + "(<name>).*(</name>).*(<ipv4-address-prefix>).*(</ipv4-address-prefix>).*"
-                    + "(</source-address-range>).*(</interface-eth0>)*(</source-ipaddress-filtering>).*"
-                    + "(</config>).*(</edit-config>).*(</rpc>).*(]]>){2}", Pattern.DOTALL);
-
-    private Pattern sampleXmlRegexEditDeleteSaFilt =
-            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\">)\\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?"
-                    + "(<source>)\\R?(<running/>)\\R?(</source>)\\R?"
-                    + "(<filter type=\"subtree\">)\\R?"
-                    + "(<mef-services "
-                    + "xmlns=\"http://www.microsemi.com/microsemi-edge-assure/msea-uni-evc-service\"/>)\\R?"
-                    + "(</filter>)\\R?(</get-config>)\\R?(</rpc>)\\R?(]]>){2}", Pattern.DOTALL);
-
-    private Pattern sampleXmlRegexUniEvcUni =
-            Pattern.compile("(<\\?xml).*(<rpc).*(<get-config>)\\R?"
-                    + "(<source>)\\R?(<running/>)\\R?(</source>)\\R?"
-                    + "(<filter type=\"subtree\">)\\R?"
-                    + "(<mef-services "
-                    + "xmlns=\"http://www.microsemi.com/microsemi-edge-assure/msea-uni-evc-service\">)\\R?"
-                    + "(<uni/>)\\R?"
-                    + "(</mef-services>)\\R?"
-                    + "(</filter>)\\R?(</get-config>)\\R?(</rpc>)\\R?(]]>){2}", Pattern.DOTALL);
-
-    private Pattern sampleXmlRegexEditConfigUni1Evc =
-            Pattern.compile("(<\\?xml).*(<rpc).*(<edit-config>)\\R?"
-                    + "(<target><running/></target>)\\R?"
-                    + "(<config xmlns:nc=\"urn:ietf:params:xml:ns:netconf:base:1.0\">)\\R?"
-                    + "(<mef-services).*(<uni>)\\R?(<name>).*(</name>)\\R?"
-                    + "(<evc>)\\R?(<evc-index>).*(</evc-index>)\\R?(<name>).*(</name>)\\R?"
-                    + "(<evc-per-uni>)\\R?"
-                    + "(<evc-per-uni-c>)\\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>)[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?"
-                    + "(<flow-id>)[0-9]*(</flow-id>)\\R?"
-                    + "(</flow-mapping>)\\R?)*"
-                    + "(</evc-per-uni-n>)\\R?"
-                    + "(</evc-per-uni>)\\R?"
-                    + "(</evc>)\\R?"
-                    + "(</uni>)\\R?"
-                    + "(</mef-services>)\\R?"
-                    + "(</config>)\\R?(</edit-config>)\\R?(</rpc>)\\R?(]]>){2}", Pattern.DOTALL);
-
-    private Pattern sampleXmlRegexEditConfigUni2Evc =
-            Pattern.compile("(<\\?xml).*(<rpc).*(<edit-config>)\\R?"
-                    + "(<target><running/></target>)\\R?"
-                    + "(<config xmlns:nc=\"urn:ietf:params:xml:ns:netconf:base:1.0\">)\\R?"
-                    + "(<mef-services).*(<uni>)\\R?(<name>)[0-9a-zA-Z\\-\\:]*(</name>)\\R?"
-                    + "(<evc>)\\R?(<evc-index>)[0-9]*(</evc-index>)\\R?(<name>)[0-9a-zA-Z\\-\\:]*(</name>)\\R?"
-                    + "(<evc-per-uni>)\\R?"
-                    + "(<evc-per-uni-c>)\\R?"
-                    + "(<ce-vlan-map>)[0-9\\:\\,]*(</ce-vlan-map>)\\R?"
-                    + "(<ingress-bwp-group-index>)[0-9]*(</ingress-bwp-group-index>)\\R?"
-                    + "(</evc-per-uni-c>)\\R?"
-                    + "(<evc-per-uni-n>)\\R?"
-                    + "(<ce-vlan-map>)[0-9\\:\\,]*(</ce-vlan-map>)\\R?"
-                    + "(<ingress-bwp-group-index>)[0-9]*(</ingress-bwp-group-index>)\\R?"
-                    + "(<evc-per-uni-service-type>).*(</evc-per-uni-service-type>)\\R?"
-                    + "(<tag-push>)\\R?(<push-tag-type>)pushStag(</push-tag-type>)\\R?(<outer-tag-vlan>).*"
-                    + "(</outer-tag-vlan>)\\R?(</tag-push>)\\R?"
-                    + "(</evc-per-uni-n>)\\R?"
-                    + "(</evc-per-uni>)\\R?"
-                    + "(</evc>)\\R?"
-                    + "(<evc>)\\R?(<evc-index>)[0-9]*(</evc-index>)\\R?(<name>)[0-9a-zA-Z\\-\\:]*(</name>)\\R?"
-                    + "(<evc-per-uni>)\\R?"
-                    + "(<evc-per-uni-c>)\\R?"
-                    + "(<ce-vlan-map>)[0-9\\:\\,]*(</ce-vlan-map>)\\R?"
-                    + "(<ingress-bwp-group-index>)[0-9]*(</ingress-bwp-group-index>)\\R?"
-                    + "(</evc-per-uni-c>)\\R?"
-                    + "(<evc-per-uni-n>)\\R?"
-                    + "(<ce-vlan-map>)[0-9\\:\\,]*(</ce-vlan-map>)\\R?"
-                    + "(<ingress-bwp-group-index>)[0-9]*(</ingress-bwp-group-index>)\\R?"
-                    + "(</evc-per-uni-n>)\\R?"
-                    + "(</evc-per-uni>)\\R?"
-                    + "(</evc>)\\R?(</uni>).*"
-                    + "(</mef-services>)\\R?"
-                    + "(</config>)\\R?(</edit-config>)\\R?(</rpc>)\\R?(]]>){2}", Pattern.DOTALL);
-
-    private Pattern sampleXmlRegexEditConfigUniProfiles =
-            Pattern.compile("(<\\?xml).*(<rpc).*(<edit-config>).*"
-                    + "(<target><running/></target>).*(<config xmlns:nc=\"urn:ietf:params:xml:ns:netconf:base:1.0\">).*"
-                    + "(<mef-services).*(<profiles>).*"
-                    + "(<bwp-group>).*(<group-index>).*(</group-index>).*(</bwp-group>).*"
-                    + "(<bwp-group>).*(<group-index>).*(</group-index>).*"
-                    + "(<bwp>).*(<cos-index>).*(</cos-index>).*(<color-mode>).*(</color-mode>).*(</bwp>).*"
-                    + "(<bwp>).*(<cos-index>).*(</cos-index>).*(<color-mode>).*(</color-mode>).*(</bwp>).*"
-                    + "(</bwp-group>).*"
-                    + "(</profiles>).*(</mef-services>).*"
-                    + "(</config>).*(</edit-config>).*(</rpc>).*(]]>){2}", Pattern.DOTALL);
-
-    private Pattern sampleXmlRegexEditConfigEvcDelete =
-            Pattern.compile("(<\\?xml).*(<rpc).*(<edit-config>).*"
-                    + "(<target><running/></target>).*(<config xmlns:nc=\"urn:ietf:params:xml:ns:netconf:base:1.0\">).*"
-                    + "(<mef-services).*"
-                    + "(<uni>).*"
-                    + "(<evc nc:operation=\"delete\">).*(<evc-index>).*(</evc-index>).*(</evc>).*"
-                    + "(</uni>).*"
-                    + "(</mef-services>).*"
-                    + "(</config>).*(</edit-config>).*(</rpc>).*(]]>){2}", Pattern.DOTALL);
-
-    private Pattern sampleXmlRegexGetConfigCeVlanMapsEvc =
-            Pattern.compile("(<\\?xml).*(<rpc).*(<get-config>)\\R?"
-                    + "(<source>)\\R?(<running/>)\\R?(</source>)\\R?"
-                    + "(<filter type=\"subtree\">)\\R?"
-                    + "(<mef-services).*"
-                    + "(<uni>)\\R?"
-                    + "(<evc>)\\R?"
-                    + "(<evc-index/>)\\R?"
-                    + "(<evc-per-uni>)\\R?"
-                    + "(<evc-per-uni-c><ce-vlan-map/><flow-mapping/><ingress-bwp-group-index/></evc-per-uni-c>)\\R?"
-                    + "(<evc-per-uni-n><ce-vlan-map/><flow-mapping/><ingress-bwp-group-index/></evc-per-uni-n>)\\R?"
-                    + "(</evc-per-uni>)\\R?"
-                    + "(</evc>)\\R?"
-                    + "(</uni>)\\R?"
-                    + "(</mef-services>)\\R?"
-                    + "(</filter>)\\R?"
-                    + "(</get-config>)\\R?"
-                    + "(</rpc>)\\R?"
-                    + "(]]>){2}", Pattern.DOTALL);
-
-    //For test testRemoveEvcUniFlowEntries()
-    private Pattern sampleXmlRegexEditConfigCeVlanMapReplace =
-            Pattern.compile("(<\\?xml).*(<rpc).*(<edit-config>).*"
-                    + "(<target><running/></target>).*"
-                    + "(<config xmlns:nc=\"urn:ietf:params:xml:ns:netconf:base:1.0\">).*"
-                    + "(<mef-services xmlns=\"http://www.microsemi.com/microsemi-edge-assure/msea-uni-evc-service\">).*"
-                    + "(<uni>).*"
-                    + "(<evc nc:operation=\"delete\">).*(<evc-index>.*</evc-index>).*(</evc>).*"
-                    + "(<evc nc:operation=\"delete\">).*(<evc-index>.*</evc-index>).*(</evc>).*"
-                    + "(<evc>).*(<evc-index>).*(</evc-index>).*(<evc-per-uni>).*"
-                    + "(<evc-per-uni-c>).*"
-                    + "(<ce-vlan-map nc:operation=\"replace\">).*(</ce-vlan-map>).*"
-                    + "(<flow-mapping nc:operation=\"delete\">).*(<ce-vlan-id>).*(</ce-vlan-id>).*(</flow-mapping>).*"
-                    + "(</evc-per-uni-c>).*"
-                    + "(<evc-per-uni-n>).*"
-                    + "(<ce-vlan-map nc:operation=\"replace\">).*(</ce-vlan-map>).*"
-                    + "(<flow-mapping nc:operation=\"delete\">).*(<ce-vlan-id>).*(</ce-vlan-id>).*(</flow-mapping>).*"
-                    + "(</evc-per-uni-n>).*"
-                    + "(</evc-per-uni>).*(</evc>).*"
-                    + "(<evc>).*(<evc-index>).*(</evc-index>).*(<evc-per-uni>).*"
-                    + "(<evc-per-uni-c>).*"
-                    + "(<ce-vlan-map nc:operation=\"replace\">).*(</ce-vlan-map>).*"
-                    + "(<flow-mapping nc:operation=\"delete\">).*(<ce-vlan-id>).*(</ce-vlan-id>).*(</flow-mapping>).*"
-                    + "(</evc-per-uni-c>).*"
-                    + "(<evc-per-uni-n>).*"
-                    + "(<ce-vlan-map nc:operation=\"replace\">).*(</ce-vlan-map>).*"
-                    + "(<flow-mapping nc:operation=\"delete\">).*(<ce-vlan-id>).*(</ce-vlan-id>).*(</flow-mapping>).*"
-                    + "(</evc-per-uni-n>).*"
-                    + "(</evc-per-uni>).*(</evc>).*"
-                    + "(</uni>).*(</mef-services>).*"
-                    + "(</config>).*(</edit-config>).*(</rpc>).*(]]>){2}", Pattern.DOTALL);
-
-
-    //For testPerformMeterOperationDeviceIdMeterAdd()
-    private Pattern sampleXmlRegexEditConfigBwpGroup1 =
-            Pattern.compile("(<\\?xml).*(<rpc).*(<edit-config>)\\R?"
-                    + "(<target>\\R?<running/>\\R?</target>)\\R?"
-                    + "(<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>)\\R?"
-                    + "(<group-index>)[0-9]*(</group-index>)\\R?"
-                    + "(<bwp>)\\R?"
-                    + "(<cos-index>)[0-9]*(</cos-index>)\\R?"
-                    + "(<name>).*(</name>)\\R?"
-                    + "(<committed-information-rate>)[0-9]*(</committed-information-rate>)\\R?"
-                    + "(<committed-burst-size>)[0-9]*(</committed-burst-size>)\\R?"
-                    + "(<excess-information-rate>)[0-9]*(</excess-information-rate>)\\R?"
-                    + "(<excess-burst-size>)[0-9]*(</excess-burst-size>)\\R?"
-                    + "(</bwp>)\\R?"
-                    + "(</bwp-group>)\\R?"
-                    + "(<cos>)\\R?"
-                    + "(<cos-index>)[0-9](</cos-index>)\\R?"
-                    + "(<name>).*(</name>)\\R?"
-                    + "(<outgoing-cos-value>)[0-9]*(</outgoing-cos-value>)\\R?"
-                    + "(<color-aware>true</color-aware>)\\R?"
-                    + "(<color-forward>true</color-forward>)\\R?"
-                    + "(<evc-cos-type-all-8-prio-to-1-evc-color>)\\R?"
-                    + "(<evc-all-8-color-to>green</evc-all-8-color-to>)\\R?"
-                    + "(</evc-cos-type-all-8-prio-to-1-evc-color>)\\R?"
-                    + "(</cos>)\\R?"
-                    + "(</profiles>)\\R?"
-                    + "(</mef-services>)\\R?"
-                    + "(</config>)\\R?(</edit-config>)\\R?(</rpc>)\\R?(]]>){2}", Pattern.DOTALL);
-
-    //For testPerformMeterOperationDeviceIdMeterRemove()
-    private Pattern sampleXmlRegexEditConfigBwpGroup1Delete =
-    Pattern.compile("(<\\?xml).*(<rpc).*(<edit-config>)\\R?"
-            + "(<target>\\R?<running/>\\R?</target>)\\R?"
-            + "(<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?"
-            + "(<group-index>)[0-9]*(</group-index>)\\R?"
-            + "(<bwp>.*</bwp>)?"
-            + "(</bwp-group>))++\\R?"
-            + "(</profiles>)\\R?"
-            + "(</mef-services>)\\R?"
-            + "(</config>)\\R?(</edit-config>)\\R?(</rpc>)\\R?(]]>){2}", Pattern.DOTALL);
-
-    private Pattern sampleXmlRegexSetCurrentDatetime =
-    Pattern.compile("(<\\?xml).*(<rpc).*"
-            + "(<set-current-datetime xmlns=\"urn:ietf:params:xml:ns:yang:ietf-system\">)\\R?"
-            + "(<current-datetime>)"
-            + "[0-9]{4}-[0-9]{2}-[0-9]{2}(T)[0-9]{2}:[0-9]{2}:[0-9]{2}[+-][0-9]{2}:[0-9]{2}"
-            + "(</current-datetime>)\\R?"
-            + "(</set-current-datetime>)\\R?"
-            + "(</rpc>)\\R?(]]>){2}", Pattern.DOTALL);
-
-    //For testGetConfigMseaCfmEssentials
-    private Pattern sampleXmlRegexGetMseaCfmEssentials =
-            Pattern.compile("(<\\?xml).*(<rpc).*(<get>)\\R?"
-                    + "(<filter type=\"subtree\">)\\R?"
-                    + "(<mef-cfm).*"
-                    + "(<maintenance-domain>)\\R?"
-                    + "(<id/>)\\R?"
-                    + "(<name>)([a-zA-Z0-9\\-:\\.]){1,48}(</name>)\\R?"
-                    + "(<md-level/>)?\\R?"
-                    + "(<maintenance-association>)\\R?"
-                    + "(<id/>)\\R?"
-                    + "(<name>)([a-zA-Z0-9\\-:\\.]){1,48}(</name>)\\R?"
-                    + "(<ccm-interval>)[0-9]{1,3}(ms</ccm-interval>)\\R?"
-                    + "(<remote-meps/>)\\R?"
-                    + "(<component-list/>)\\R?"
-                    + "(<maintenance-association-end-point>)\\R?"
-                    + "(<mep-identifier>)[0-9]{1,4}(</mep-identifier>)\\R?"
-                    + "(<mac-address/>)?\\R?"
-                    + "((<remote-mep-database>)\\R?"
-                    + "(<remote-mep>)\\R?"
-                    + "(<remote-mep-id/>)\\R?"
-                    + "(</remote-mep>)\\R?"
-                    + "(</remote-mep-database>))?\\R?"
-                    + "((<msea-soam-pm:delay-measurements>)\\R?"
-                    + "(<msea-soam-pm:delay-measurement>)\\R?"
-                    + "((<msea-soam-pm:dm-id/>)|(<msea-soam-pm:dm-id>[0-9]*</msea-soam-pm:dm-id>))\\R?"
-                    + "(</msea-soam-pm:delay-measurement>)\\R?"
-                    + "(</msea-soam-pm:delay-measurements>))?\\R?"
-                    + "((<msea-soam-pm:loss-measurements>)\\R?"
-                    + "(<msea-soam-pm:loss-measurement>)\\R?"
-                    + "((<msea-soam-pm:lm-id/>)|(<msea-soam-pm:lm-id>[0-9]*</msea-soam-pm:lm-id>))\\R?"
-                    + "(</msea-soam-pm:loss-measurement>)\\R?"
-                    + "(</msea-soam-pm:loss-measurements>))?\\R?"
-                    + "(</maintenance-association-end-point>)\\R?"
-                    + "(</maintenance-association>)\\R?"
-                    + "(</maintenance-domain>)\\R?"
-                    + "(</mef-cfm>)\\R?"
-                    + "(</filter>)\\R?"
-                    + "(</get>)\\R?"
-                    + "(</rpc>)\\R?"
-                    + "(]]>){2}", Pattern.DOTALL);
-
-    //For testGetMep
-    private String sampleXmlRegexGetMseaCfmFullStr =
-            "(<\\?xml).*(<rpc).*(<get>)\\R?"
-            + "(<filter type=\"subtree\">)\\R?"
-            + "(<mef-cfm).*"
-            + "(<maintenance-domain>)\\R?"
-            + "(<id/>)\\R?"
-            + "(<name>)([a-zA-Z0-9\\-:\\.]){1,48}(</name>)\\R?"
-            + "(<md-level/>)?\\R?"
-            + "(<maintenance-association>)\\R?"
-            + "(<id/>)\\R?"
-            + "(<name>)([a-zA-Z0-9\\-:\\.]){1,48}(</name>)\\R?"
-            + "(<maintenance-association-end-point>)\\R?"
-            + "(<mep-identifier>)[0-9]{1,4}(</mep-identifier>)\\R?"
-            + "(<interface/>)?\\R?"
-            + "(<primary-vid/>)?\\R?"
-            + "(<administrative-state/>)?\\R?"
-            + "(<mac-address/>)?\\R?"
-            + "(<ccm-ltm-priority/>)?\\R?"
-            + "(<continuity-check/>)?\\R?"
-            + "(<loopback/>)?\\R?"
-            + "(<linktrace/>)?\\R?"
-            + "(<remote-mep-database/>)\\R?"
-            + "(<msea-soam-fm:operational-state/>)\\R?"
-            + "(<msea-soam-fm:connectivity-status/>)\\R?"
-            + "(<msea-soam-fm:port-status/>)\\R?"
-            + "(<msea-soam-fm:interface-status/>)\\R?"
-            + "(<msea-soam-fm:last-defect-sent/>)\\R?"
-            + "(<msea-soam-fm:rdi-transmit-status/>)\\R?"
-            + "(</maintenance-association-end-point>)\\R?"
-            + "(</maintenance-association>)\\R?"
-            + "(</maintenance-domain>)\\R?"
-            + "(</mef-cfm>)\\R?"
-            + "(</filter>)\\R?"
-            + "(</get>)\\R?"
-            + "(</rpc>)\\R?"
-            + "(]]>){2}";
-
-    private Pattern sampleXmlRegexGetMseaCfmFull =
-            Pattern.compile(sampleXmlRegexGetMseaCfmFullStr
-                    .replace("(<mep-identifier>)[0-9]{1,4}(</mep-identifier>)",
-                            "(<mep-identifier>)" +
-                                    EA1000CfmMepProgrammableTest.MEP_111 +
-                                    "(</mep-identifier>)"),
-                    Pattern.DOTALL);
-
-    private Pattern sampleXmlRegexGetMseaCfmFull2 =
-            Pattern.compile(sampleXmlRegexGetMseaCfmFullStr
-                    .replace("(<mep-identifier>)[0-9]{1,4}(</mep-identifier>)",
-                            "(<mep-identifier>)" +
-                                    EA1000CfmMepProgrammableTest.MEP_112 +
-                                    "(</mep-identifier>)"),
-                    Pattern.DOTALL);
-
-    //For testGetConfigMseaCfmEssentials
-    private Pattern sampleXmlRegexGetMseaDelay =
-            Pattern.compile("(<\\?xml).*(<rpc).*(<get>)\\R?"
-                    + "(<filter type=\"subtree\">)\\R?"
-                    + "(<mef-cfm).*"
-                    + "(<maintenance-domain>)\\R?"
-                    + "(<id/>)\\R?"
-                    + "(<name>)([a-zA-Z0-9\\-:\\.]){1,48}(</name>)\\R?"
-                    + "(<maintenance-association>)\\R?"
-                    + "(<id/>)\\R?"
-                    + "(<name>)([a-zA-Z0-9\\-:\\.]){1,48}(</name>)\\R?"
-                    + "(<maintenance-association-end-point>)\\R?"
-                    + "(<mep-identifier>)[0-9]{1,4}(</mep-identifier>)\\R?"
-                    + "((<msea-soam-pm:delay-measurements>)\\R?"
-                    + "(<msea-soam-pm:delay-measurement>)\\R?"
-                    + "((<msea-soam-pm:dm-id/>)|(<msea-soam-pm:dm-id>[0-9]*</msea-soam-pm:dm-id>))\\R?"
-                    + "(<msea-soam-pm:mep-id/>)\\R?"
-                    + "(<msea-soam-pm:mac-address/>)\\R?"
-                    + "(<msea-soam-pm:administrative-state/>)\\R?"
-                    + "(<msea-soam-pm:measurement-enable/>)\\R?"
-                    + "(<msea-soam-pm:message-period/>)\\R?"
-                    + "(<msea-soam-pm:priority/>)\\R?"
-                    + "(<msea-soam-pm:frame-size/>)\\R?"
-                    + "(<msea-soam-pm:measurement-interval/>)\\R?"
-                    + "(<msea-soam-pm:number-intervals-stored/>)\\R?"
-                    + "(<msea-soam-pm:session-status/>)\\R?"
-                    + "(<msea-soam-pm:frame-delay-two-way/>)\\R?"
-                    + "(<msea-soam-pm:inter-frame-delay-variation-two-way/>)\\R?"
-                    + "(<msea-soam-pm:current-stats/>)?\\R?"
-                    + "(<msea-soam-pm:history-stats/>)?\\R?"
-                    + "(</msea-soam-pm:delay-measurement>)\\R?"
-                    + "(</msea-soam-pm:delay-measurements>))?\\R?"
-                    + "(</maintenance-association-end-point>)\\R?"
-                    + "(</maintenance-association>)\\R?"
-                    + "(</maintenance-domain>)\\R?"
-                    + "(</mef-cfm>)\\R?"
-                    + "(</filter>)\\R?"
-                    + "(</get>)\\R?"
-                    + "(</rpc>)\\R?"
-                    + "(]]>){2}", Pattern.DOTALL);
-
-    //For testGetConfigMseaCfmEssentials
-    private Pattern sampleXmlRegexDeleteMseaCfmMep =
-            Pattern.compile("(<\\?xml).*(<rpc).*(<edit-config>)\\R?"
-                    + "(<target>\\R?<running/>\\R?</target>)\\R?"
-                    + "(<config xmlns:nc=\"urn:ietf:params:xml:ns:netconf:base:1.0\">)\\R?"
-                    + "(<mef-cfm).*"
-                    + "(<maintenance-domain>)\\R?"
-                    + "(<id>[0-9]{1,5}</id>)?\\R?"
-                    + "((<name>)([a-zA-Z0-9\\-:\\.]){1,48}(</name>))?\\R?"
-                    + "(<maintenance-association>)\\R?"
-                    + "(<id>[0-9]{1,5}</id>)?\\R?"
-                    + "((<name>[a-zA-Z0-9\\-:\\.]{1,48}</name>)|"
-                    + "(<name-primary-vid>[0-9]{1,4}</name-primary-vid>))?\\R?"
-                    + "(<maintenance-association-end-point nc:operation=\"delete\">)\\R?"
-                    + "(<mep-identifier>)[0-9]{1,4}(</mep-identifier>)\\R?"
-                    + "(</maintenance-association-end-point>)\\R?"
-                    + "(</maintenance-association>)\\R?"
-                    + "(</maintenance-domain>)\\R?"
-                    + "(</mef-cfm>)\\R?"
-                    + "(</config>)\\R?"
-                    + "(</edit-config>)\\R?(</rpc>)\\R?(]]>){2}", Pattern.DOTALL);
-
-    //For testGetConfigMseaCfmEssentials
-    private Pattern sampleXmlRegexCreateMseaCfmMa =
-            Pattern.compile("(<\\?xml).*(<rpc).*(<edit-config>)\\R?"
-                    + "(<target>\\R?<running/>\\R?</target>)\\R?"
-                    + "(<config xmlns:nc=\"urn:ietf:params:xml:ns:netconf:base:1.0\">)\\R?"
-                    + "(<mef-cfm).*"
-                    + "(<maintenance-domain>)\\R?"
-                    + "(<id>)([0-9]){1,4}(</id>)\\R?"
-                    + "((<md-level>)([0-9]){1}(</md-level>))?\\R?"
-                    + "((<name>)([a-zA-Z0-9\\-:\\.]){1,48}(</name>))?\\R?"
-                    + "((<maintenance-association>)\\R?"
-                    + "(<id>)([0-9]){1,4}(</id>)\\R?"
-                    + "((<ccm-interval>)(3.3ms)(</ccm-interval>))?\\R?"
-                    + "((<remote-meps>)([0-9]){1,4}(</remote-meps>))*\\R?"
-                    + "(((<name>)([a-zA-Z0-9\\-:\\.]){1,48}(</name>))|"
-                    + "((<name-primary-vid>)([0-9]){1,4}(</name-primary-vid>)))?\\R?"
-                    + "((<component-list>)\\R?"
-                    + "(<vid>)([0-9]){1,4}(</vid>)\\R?"
-                    + "(</component-list>))?\\R?"
-                    + "(</maintenance-association>))*\\R?"
-                    + "(</maintenance-domain>)\\R?"
-                    + "(</mef-cfm>)\\R?"
-                    + "(</config>)\\R?"
-                    + "(</edit-config>)\\R?(</rpc>)\\R?(]]>){2}", Pattern.DOTALL);
-
-    //For testGetConfigMseaCfmEssentials
-    private Pattern sampleXmlRegexDeleteMseaCfmMa =
-            Pattern.compile("(<\\?xml).*(<rpc).*(<edit-config>)\\R?"
-                    + "(<target>\\R?<running/>\\R?</target>)\\R?"
-                    + "(<config xmlns:nc=\"urn:ietf:params:xml:ns:netconf:base:1.0\">)\\R?"
-                    + "(<mef-cfm).*"
-                    + "(<maintenance-domain>)\\R?"
-                    + "((<id/>)|((<id>)([0-9]){1,4}(</id>)))?\\R?"
-                    + "((<name>)([a-zA-Z0-9\\-:\\.]){1,48}(</name>))?\\R?"
-                    + "(<maintenance-association nc:operation=\"delete\">)\\R?"
-                    + "((<id/>)|((<id>)([0-9]){1,4}(</id>)))?\\R?"
-                    + "(((<name>)([a-zA-Z0-9\\-:\\.]){1,48}(</name>))|"
-                    + "((<name-primary-vid>)([0-9]){1,4}(</name-primary-vid>)))?\\R?"
-                    + "(</maintenance-association>)\\R?"
-                    + "(</maintenance-domain>)\\R?"
-                    + "(</mef-cfm>)\\R?"
-                    + "(</config>)\\R?"
-                    + "(</edit-config>)\\R?(</rpc>)\\R?(]]>){2}", Pattern.DOTALL);
-
-    //For testDeleteMseaMepRemoteMep
-    private Pattern sampleXmlRegexDeleteMseaCfmRmep =
-            Pattern.compile("(<\\?xml).*(<rpc).*(<edit-config>)\\R?"
-                    + "(<target>\\R?<running/>\\R?</target>)\\R?"
-                    + "(<config xmlns:nc=\"urn:ietf:params:xml:ns:netconf:base:1.0\">)\\R?"
-                    + "(<mef-cfm).*"
-                    + "(<maintenance-domain>)\\R?"
-                    + "((<id>)[0-9]{1,4}(</id>))?\\R?"
-                    + "((<name>)([a-zA-Z0-9\\-:\\.]){1,48}(</name>))?\\R?"
-                    + "(<maintenance-association>)\\R?"
-                    + "((<id>)[0-9]{1,4}(</id>))?\\R?"
-                    + "((<remote-meps nc:operation=\"delete\">)([0-9]){1,4}(</remote-meps>))*\\R?"
-                    + "(((<name>)([a-zA-Z0-9\\-:\\.]){1,48}(</name>))|"
-                    + "((<name-primary-vid>)([0-9]){1,4}(</name-primary-vid>)))?\\R?"
-                    + "(</maintenance-association>)\\R?"
-                    + "(</maintenance-domain>)\\R?"
-                    + "(</mef-cfm>)\\R?"
-                    + "(</config>)\\R?"
-                    + "(</edit-config>)\\R?(</rpc>)\\R?(]]>){2}", Pattern.DOTALL);
-
-    //For testDeleteMseaMd
-    private Pattern sampleXmlRegexDeleteMseaCfmMd =
-            Pattern.compile("(<\\?xml).*(<rpc).*(<edit-config>)\\R?"
-                    + "(<target>\\R?<running/>\\R?</target>)\\R?"
-                    + "(<config xmlns:nc=\"urn:ietf:params:xml:ns:netconf:base:1.0\">)\\R?"
-                    + "(<mef-cfm).*"
-                    + "(<maintenance-domain nc:operation=\"delete\">)\\R?"
-                    + "((<id/>)|(<id>([0-9]){1,4}(</id>)))?\\R?"
-                    + "(((<name>)([a-zA-Z0-9\\-:\\.]){1,48}(</name>))|\\R?"
-                    + "((<name-domain-name>)([a-zA-Z0-9\\-\\.]){1,48}(</name-domain-name>)))?\\R?"
-                    + "(</maintenance-domain>)\\R?"
-                    + "(</mef-cfm>)\\R?"
-                    + "(</config>)\\R?"
-                    + "(</edit-config>)\\R?(</rpc>)\\R?(]]>){2}", Pattern.DOTALL);
-
-
-    private Pattern sampleXmlRegexTransmitLoopback =
-            Pattern.compile("(<\\?xml).*(<rpc).*\\R?"
-                    + "(<transmit-loopback xmlns=\"http://www.microsemi.com/microsemi-edge-assure/msea-cfm\">)\\R?"
-                    + "((<number-of-messages>)[0-9]*(</number-of-messages>))?\\R?"
-                    + "((<data-tlv>)[a-zA-Z0-9+=/]*(</data-tlv>))?\\R?"
-                    + "((<vlan-priority>)[0-9]{1}(</vlan-priority>))?\\R?"
-                    + "((<vlan-drop-eligible>)((true)|(false))(</vlan-drop-eligible>))?\\R?"
-                    + "(<maintenance-association-end-point>)[0-9]{1,4}(</maintenance-association-end-point>)\\R?"
-                    + "(<maintenance-association>)[0-9]{1,5}(</maintenance-association>)\\R?"
-                    + "(<maintenance-domain>)[0-9]{1,5}(</maintenance-domain>)\\R?"
-                    + "(<target-address>)\\R?"
-                    + "((<mep-id>)[0-9]{1,4}(</mep-id>))?\\R?"
-                    + "((<mac-address>)[a-fA-F0-9:-]{17}(</mac-address>))?\\R?"
-                    + "(</target-address>)\\R?"
-                    + "(</transmit-loopback>)\\R?"
-                    + "(</rpc>)\\R?"
-                    + "(]]>){2}", Pattern.DOTALL);
-
-    private Pattern sampleXmlRegexAbortLoopback =
-            Pattern.compile("(<\\?xml).*(<rpc).*\\R?"
-                    + "(<abort-loopback xmlns=\"http://www.microsemi.com/microsemi-edge-assure/msea-cfm\">)\\R?"
-                    + "(<maintenance-association-end-point>)[0-9]{1,4}(</maintenance-association-end-point>)\\R?"
-                    + "(<maintenance-association>)[0-9]{1,5}(</maintenance-association>)\\R?"
-                    + "(<maintenance-domain>)[0-9]{1,5}(</maintenance-domain>)\\R?"
-                    + "(</abort-loopback>)\\R?"
-                    + "(</rpc>)\\R?"
-                    + "(]]>){2}", Pattern.DOTALL);
-
-    //For testCreateDm()
-    private Pattern sampleXmlRegexEditConfigDmCreate =
-        Pattern.compile("(<\\?xml).*(<rpc).*(<edit-config>)\\R?"
-            + "(<target>\\R?<running/>\\R?</target>)\\R?"
-            + "(<config xmlns:nc=\"urn:ietf:params:xml:ns:netconf:base:1.0\">)\\R?"
-            + "(<mef-cfm xmlns=\"http://www.microsemi.com/microsemi-edge-assure/msea-cfm\">)\\R?"
-            + "(<maintenance-domain>)\\R?"
-            + "(<id>)[0-9]*(</id>)\\R?"
-            + "(<maintenance-association>)\\R?"
-            + "(<id>)[0-9]*(</id>)\\R?"
-            + "(<maintenance-association-end-point>)\\R?"
-            + "(<mep-identifier>)[0-9]*(</mep-identifier>)\\R?"
-            + "(<delay-measurements xmlns=\"http://www.microsemi.com/microsemi-edge-assure/msea-soam-pm\">)\\R?"
-            + "(<delay-measurement>)\\R?"
-            + "(<dm-id>)[0-9]*(</dm-id>)\\R?"
-            + "((<administrative-state>)(true|false)(</administrative-state>))?\\R?"
-            + "((<message-period>)(1000ms|100ms|10ms|3ms)(</message-period>))?\\R?"
-            + "(<priority>)[0-9]*(</priority>)\\R?"
-            + "((<frame-size>)[0-9]*(</frame-size>))?\\R?"
-            + "(<mep-id>)[0-9]*(</mep-id>)\\R?"
-            + "(</delay-measurement>)\\R?"
-            + "(</delay-measurements>)\\R?"
-            + "(</maintenance-association-end-point>)\\R?"
-            + "(</maintenance-association>)\\R?"
-            + "(</maintenance-domain>)\\R?"
-            + "(</mef-cfm>)\\R?"
-            + "(</config>)\\R?"
-            + "(</edit-config>)\\R?(</rpc>)\\R?(]]>){2}", Pattern.DOTALL);
-
-
-    private static final String SAMPLE_SYSTEM_REPLY = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
-            + "<rpc-reply xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\" message-id=\"1\">\n"
-            + "<data xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n"
-            + "<system xmlns=\"urn:ietf:params:xml:ns:yang:ietf-system\">\n"
-            + "<clock><timezone-name>Etc/UTC</timezone-name></clock>\n"
-            + "</system>\n"
-            + "</data>\n"
-            + "</rpc-reply>";
-
-    private static final String SAMPLE_SYSTEM_REPLY_INIT = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
-            + "<rpc-reply xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\" message-id=\"1\">"
-            + "<data xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n"
-            + "<system xmlns=\"urn:ietf:params:xml:ns:yang:ietf-system\">\n"
-            + "<longitude xmlns=\"http://www.microsemi.com/microsemi-edge-assure/msea-system\">-8.4683990</longitude>\n"
-            + "<latitude xmlns=\"http://www.microsemi.com/microsemi-edge-assure/msea-system\">51.9036140</latitude>\n"
-            + "</system>\n"
-            + "<system-state xmlns=\"urn:ietf:params:xml:ns:yang:ietf-system\""
-            + " xmlns:sysms=\"http://www.microsemi.com/microsemi-edge-assure/msea-system\">\n"
-            + "<platform>\n"
-            + "<os-release>4.4.0-53-generic</os-release>\n"
-            + "<sysms:device-identification>\n"
-            + "<sysms:serial-number>EA1000 unit test.</sysms:serial-number>\n"
-            + "</sysms:device-identification>\n"
-            + "</platform>\n"
-            + "</system-state>\n"
-            + "</data>"
-            + "</rpc-reply>";
-
-    private static final String SAMPLE_MSEASAFILTERING_FE_REPLY = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
-            + "<rpc-reply xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\" message-id=\"1\">\n"
-            + "<data xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n"
-            + "<source-ipaddress-filtering "
-            + "xmlns=\"http://www.microsemi.com/microsemi-edge-assure/msea-sa-filtering\">\n"
-            + "<interface-eth0>\n"
-            + "<filter-admin-state>inactive</filter-admin-state>\n"
-            + "<source-address-range>\n"
-            + "<range-id>1</range-id>\n"
-            + "<ipv4-address-prefix>10.10.10.10/16</ipv4-address-prefix>\n"
-            + "<name>Filter1</name>\n"
-            + "</source-address-range>\n"
-            + "<source-address-range>\n"
-            + "<range-id>2</range-id>\n"
-            + "<ipv4-address-prefix>20.30.40.50/18</ipv4-address-prefix>\n"
-            + "<name>Flow:5e0000abaa2772</name>\n"
-            + "</source-address-range>\n"
-            + "</interface-eth0>\n"
-            + "</source-ipaddress-filtering>\n"
-            + "</data>\n"
-            + "</rpc-reply>";
-
-    private static final String SAMPLE_ERROR_REPLY = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
-            + "<rpc-reply xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\" message-id=\"1\">\n"
-            + "<rpc-error>"
-            + "<error-type>application</error-type>"
-            + "<error-tag>data-missing</error-tag>"
-            + "<error-severity>error</error-severity>"
-            + "<error-message>Request could not be completed because " +
-                "the relevant data model content does not exist.</error-message>"
-            + "</rpc-error>"
-            + "</rpc-reply>";
-
-    private static final String SAMPLE_MSEAEVCUNI_REPLY_INIT = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
-            + "<rpc-reply xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\" message-id=\"1\">\n"
-            + "<data xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n"
-            + "<mef-services xmlns=\"http://www.microsemi.com/microsemi-edge-assure/msea-uni-evc-service\"/>"
-            + "</data>\n"
-            + "</rpc-reply>";
-
-    private static final String SAMPLE_MSEAEVCUNI_FE_REPLY = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
-            + "<rpc-reply xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\" message-id=\"1\">\n"
-            + "<data xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n"
-            + "<mef-services xmlns=\"http://www.microsemi.com/microsemi-edge-assure/msea-uni-evc-service\">\n"
-            + "<uni>\n"
-            + "<name>Flow:7557655abfecd57865</name>\n"
-            + "<evc>\n"
-            + "<evc-index>7</evc-index\n>"
-            + "<name>evc-7</name>\n"
-            + "<evc-per-uni>\n"
-            + "<evc-per-uni-c>\n"
-            + "<ce-vlan-map>10</ce-vlan-map>\n"
-            + "<ingress-bwp-group-index>1</ingress-bwp-group-index>\n"
-            + "<tag-push>\n"
-            + "<push-tag-type>pushStag</push-tag-type>\n"
-            + "<outer-tag-vlan>3</outer-tag-vlan>\n"
-            + "</tag-push>\n"
-            + "<flow-mapping>\n"
-            + "<ce-vlan-id>10</ce-vlan-id>\n"
-            + "<flow-id>27021600672053710</flow-id>\n"
-            + "</flow-mapping>\n"
-            + "<evc-per-uni-service-type>epl</evc-per-uni-service-type>\n"
-            + "</evc-per-uni-c>\n"
-            + "<evc-per-uni-n>\n"
-            + "<ce-vlan-map>11</ce-vlan-map>\n"
-            + "<ingress-bwp-group-index>0</ingress-bwp-group-index>\n"
-            + "<flow-mapping>\n"
-            + "<ce-vlan-id>11</ce-vlan-id>\n"
-            + "<flow-id>27021600672053711</flow-id>\n"
-            + "</flow-mapping>\n"
-            + "</evc-per-uni-n>\n"
-            + "</evc-per-uni>\n"
-            + "<uni-evc-id>EA1000-Uni-from-ONOS_5</uni-evc-id>\n"
-            + "<evc-status>\n"
-            + "<operational-state>unknown</operational-state>\n"
-            + "<max-mtu-size>9600</max-mtu-size>\n"
-            + "<max-num-uni>2</max-num-uni>\n"
-            + "</evc-status>\n"
-            + "</evc>\n"
-            + "<evc>\n"
-            + "<evc-index>8</evc-index>\n"
-            + "<name>evc-8</name>\n"
-            + "<evc-per-uni>\n"
-            + "<evc-per-uni-c>\n"
-            + "<ce-vlan-map>12:14,20:22,25</ce-vlan-map>\n"
-            + "<ingress-bwp-group-index>0</ingress-bwp-group-index>\n"
-            + "<tag-pop />\n"
-            + "<evc-per-uni-service-type>epl</evc-per-uni-service-type>\n"
-            + "<flow-mapping>\n"
-            + "<ce-vlan-id>12</ce-vlan-id>\n"
-            + "<flow-id>27021600672053712</flow-id>\n"
-            + "</flow-mapping>\n"
-            + "<flow-mapping>\n"
-            + "<ce-vlan-id>13</ce-vlan-id>\n"
-            + "<flow-id>27021600672053713</flow-id>\n"
-            + "</flow-mapping>\n"
-            + "<flow-mapping>\n"
-            + "<ce-vlan-id>14</ce-vlan-id>\n"
-            + "<flow-id>27021600672053714</flow-id>\n"
-            + "</flow-mapping>\n"
-            + "<flow-mapping>\n"
-            + "<ce-vlan-id>20</ce-vlan-id>\n"
-            + "<flow-id>27021600672053720</flow-id>\n"
-            + "</flow-mapping>\n"
-            + "<flow-mapping>\n"
-            + "<ce-vlan-id>21</ce-vlan-id>\n"
-            + "<flow-id>27021600672053721</flow-id>\n"
-            + "</flow-mapping>\n"
-            + "<flow-mapping>\n"
-            + "<ce-vlan-id>22</ce-vlan-id>\n"
-            + "<flow-id>27021600672053722</flow-id>\n"
-            + "</flow-mapping>\n"
-            + "<flow-mapping>\n"
-            + "<ce-vlan-id>25</ce-vlan-id>\n"
-            + "<flow-id>27021600672053725</flow-id>\n"
-            + "</flow-mapping>\n"
-            + "</evc-per-uni-c>\n"
-            + "<evc-per-uni-n>\n"
-            + "<ce-vlan-map>13</ce-vlan-map>\n"
-            + "<ingress-bwp-group-index>0</ingress-bwp-group-index>\n"
-            + "<flow-mapping>\n"
-            + "<ce-vlan-id>13</ce-vlan-id>\n"
-            + "<flow-id>27021600672053713</flow-id>\n"
-            + "</flow-mapping>\n"
-            + "</evc-per-uni-n>\n"
-            + "</evc-per-uni>\n"
-            + "<uni-evc-id>EA1000-Uni-from-ONOS_5</uni-evc-id>\n"
-            + "<evc-status>\n"
-            + "<operational-state>unknown</operational-state>\n"
-            + "<max-mtu-size>9600</max-mtu-size>\n"
-            + "<max-num-uni>2</max-num-uni>\n"
-            + "</evc-status>\n"
-            + "</evc>\n"
-            + "</uni>\n"
-            + "<profiles>\n"
-            + "<bwp-group>\n"
-            + "<group-index>0</group-index>\n"
-            + "</bwp-group>\n"
-            + "</profiles>\n"
-            + "</mef-services>\n"
-            + "</data>\n"
-            + "</rpc-reply>";
-
-    private static final String SAMPLE_MSEAEVCUNI_CEVLANMAP_EVC_REPLY = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
-            + "<rpc-reply xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\" message-id=\"1\">\n"
-            + "<data xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n"
-            + "<mef-services xmlns=\"http://www.microsemi.com/microsemi-edge-assure/msea-uni-evc-service\">\n"
-            + "<uni>\n"
-
-            + "<evc><evc-index>1</evc-index>\n"
-            + "<evc-per-uni>\n"
-            + "<evc-per-uni-c>\n"
-            + "<ce-vlan-map>101</ce-vlan-map>\n"
-            + "<flow-mapping>\n"
-            + "<ce-vlan-id>101</ce-vlan-id>\n"
-            + "<flow-id>27021598629213101</flow-id>\n"
-            + "</flow-mapping>\n"
-            + "</evc-per-uni-c>\n"
-            + "<evc-per-uni-n>\n"
-            + "<ce-vlan-map>102</ce-vlan-map>\n"
-            + "<flow-mapping>\n"
-            + "<ce-vlan-id>102</ce-vlan-id>\n"
-            + "<flow-id>27021598629213102</flow-id>\n"
-            + "</flow-mapping>\n"
-            + "</evc-per-uni-n>\n"
-            + "</evc-per-uni>\n"
-            + "</evc>\n"
-
-            + "<evc><evc-index>7</evc-index>\n"
-            + "<evc-per-uni>\n"
-            + "<evc-per-uni-c>\n"
-            + "<ce-vlan-map>700,710,720</ce-vlan-map>\n"
-            + "<flow-mapping>\n"
-            + "<ce-vlan-id>700</ce-vlan-id>\n"
-            + "<flow-id>27021598629213700</flow-id>\n"
-            + "</flow-mapping>\n"
-            + "<flow-mapping>\n"
-            + "<ce-vlan-id>710</ce-vlan-id>\n"
-            + "<flow-id>27021598629213710</flow-id>\n"
-            + "</flow-mapping>\n"
-            + "<flow-mapping>\n"
-            + "<ce-vlan-id>720</ce-vlan-id>\n"
-            + "<flow-id>27021598629213720</flow-id>\n"
-            + "</flow-mapping>\n"
-            + "</evc-per-uni-c>\n"
-            + "<evc-per-uni-n>\n"
-            + "<ce-vlan-map>701:703</ce-vlan-map>\n"
-            + "<flow-mapping>\n"
-            + "<ce-vlan-id>701</ce-vlan-id>\n"
-            + "<flow-id>27021598629213701</flow-id>\n"
-            + "</flow-mapping>\n"
-            + "<flow-mapping>\n"
-            + "<ce-vlan-id>702</ce-vlan-id>\n"
-            + "<flow-id>27021598629213702</flow-id>\n"
-            + "</flow-mapping>\n"
-            + "<flow-mapping>\n"
-            + "<ce-vlan-id>703</ce-vlan-id>\n"
-            + "<flow-id>27021598629213703</flow-id>\n"
-            + "</flow-mapping>\n"
-            + "</evc-per-uni-n>\n"
-            + "</evc-per-uni>\n"
-            + "</evc>\n"
-
-            + "<evc><evc-index>8</evc-index>\n"
-            + "<evc-per-uni>\n"
-            + "<evc-per-uni-c>\n<ce-vlan-map>800,810,820</ce-vlan-map>\n</evc-per-uni-c>\n"
-            + "<evc-per-uni-n>\n<ce-vlan-map>801:803</ce-vlan-map>\n</evc-per-uni-n>\n"
-            + "</evc-per-uni>\n"
-            + "</evc>\n"
-
-            + "</uni>\n"
-            + "</mef-services>\n"
-            + "</data>\n"
-            + "</rpc-reply>";
-
-    private static final String SAMPLE_MSEACFM_MD_MA_MEP_ESSENTIALS_REPLY =
-            "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
-            + "<rpc-reply xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\" message-id=\"47\">"
-            + "<data>"
-            + "<mef-cfm xmlns=\"http://www.microsemi.com/microsemi-edge-assure/msea-cfm\" "
-            + "xmlns:msea-soam-fm=\"http://www.microsemi.com/microsemi-edge-assure/msea-soam-fm\" "
-            + "xmlns:msea-soam-pm=\"http://www.microsemi.com/microsemi-edge-assure/msea-soam-pm\">"
-            + "<maintenance-domain>"
-            + "<id>1</id>"
-            + "<name>md-1</name>"
-            + "<maintenance-association>"
-            + "<id>1</id>"
-            + "<name>ma-1-1</name>"
-            + "<maintenance-association-end-point>"
-            + "<mep-identifier>1</mep-identifier>"
-            + "<mac-address>00:b0:ae:03:ff:31</mac-address>"
-            + "<remote-mep-database>"
-            + "<remote-mep>"
-            + "<remote-mep-id>1</remote-mep-id>"
-            + "</remote-mep>"
-            + "<remote-mep>"
-            + "<remote-mep-id>2</remote-mep-id>"
-            + "</remote-mep>"
-            + "</remote-mep-database>"
-            + "<msea-soam-pm:delay-measurements>"
-            + "<msea-soam-pm:delay-measurement>"
-            + "<msea-soam-pm:dm-id>1</msea-soam-pm:dm-id>"
-            + "</msea-soam-pm:delay-measurement>"
-            + "</msea-soam-pm:delay-measurements>"
-            + "<msea-soam-pm:loss-measurements>"
-            + "<msea-soam-pm:loss-measurement>"
-            + "<msea-soam-pm:lm-id>1</msea-soam-pm:lm-id>"
-            + "</msea-soam-pm:loss-measurement>"
-            + "<msea-soam-pm:loss-measurement>"
-            + "<msea-soam-pm:lm-id>2</msea-soam-pm:lm-id>"
-            + "</msea-soam-pm:loss-measurement>"
-            + "</msea-soam-pm:loss-measurements>"
-            + "</maintenance-association-end-point>"
-            + "</maintenance-association>"
-            + "</maintenance-domain>"
-            + "</mef-cfm>"
-            + "</data>"
-            + "</rpc-reply>";
-
-    private static final String SAMPLE_MSEACFM_MD_MA_MEP_FULL_REPLY =
-            "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
-            + "<rpc-reply xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\" message-id=\"47\">"
-            + "<data>"
-            + "<mef-cfm xmlns=\"http://www.microsemi.com/microsemi-edge-assure/msea-cfm\" "
-            + "xmlns:msea-soam-fm=\"http://www.microsemi.com/microsemi-edge-assure/msea-soam-fm\" "
-            + "xmlns:msea-soam-pm=\"http://www.microsemi.com/microsemi-edge-assure/msea-soam-pm\">"
-            + "<maintenance-domain>"
-            + "<id>1</id>"
-            + "<name>" + EA1000CfmMepProgrammableTest.MD_ID_1 + "</name>"
-            + "<maintenance-association>"
-            + "<id>1</id>"
-            + "<name>" + EA1000CfmMepProgrammableTest.MA_ID_11 + "</name>"
-            + "<ccm-interval>3.3ms</ccm-interval>"
-            + "<maintenance-association-end-point>"
-            + "<mep-identifier>" + EA1000CfmMepProgrammableTest.MEP_111 + "</mep-identifier>"
-            + "<interface>eth0</interface>"
-            + "<primary-vid>20</primary-vid>"
-            + "<administrative-state>true</administrative-state>"
-            + "<mac-address>00:b0:ae:03:ff:31</mac-address>"
-            + "<ccm-ltm-priority>5</ccm-ltm-priority>"
-            + "<continuity-check>"
-                + "<cci-enabled>true</cci-enabled>"
-                + "<fng-state>defect-reported</fng-state>"
-                + "<highest-priority-defect-found>remote-invalid-ccm</highest-priority-defect-found>"
-                + "<active-defects>remote-rdi remote-invalid-ccm</active-defects>"
-                + "<ccm-sequence-error-count>0</ccm-sequence-error-count>"
-                + "<sent-ccms>197</sent-ccms>"
-            + "</continuity-check>"
-            + "<loopback>"
-            + "</loopback>"
-            + "<linktrace>"
-            + "</linktrace>"
-            + "<remote-mep-database>"
-                + "<remote-mep>"
-                    + "<remote-mep-id>1</remote-mep-id>"
-                    + "<remote-mep-state>failed</remote-mep-state>"
-                    + "<failed-ok-time>54654654</failed-ok-time>"
-                    + "<mac-address>aa:bb:cc:dd:ee:ff</mac-address>"
-                    + "<rdi>false</rdi>"
-                    + "<port-status-tlv>no-status-tlv</port-status-tlv>"
-                    + "<interface-status-tlv>dormant</interface-status-tlv>"
-                + "</remote-mep>"
-                + "<remote-mep>"
-                    + "<remote-mep-id>2</remote-mep-id>"
-                    + "<remote-mep-state>failed</remote-mep-state>"
-                    + "<failed-ok-time>54654654</failed-ok-time>"
-                    + "<mac-address>aa:bb:cc:dd:ee:ff</mac-address>"
-                    + "<rdi>false</rdi>"
-                    + "<port-status-tlv>no-status-tlv</port-status-tlv>"
-                    + "<interface-status-tlv>dormant</interface-status-tlv>"
-                + "</remote-mep>"
-            + "</remote-mep-database>"
-            + "<msea-soam-fm:operational-state>enabled</msea-soam-fm:operational-state>"
-            + "<msea-soam-fm:connectivity-status>partially-active</msea-soam-fm:connectivity-status>"
-            + "<msea-soam-fm:port-status>up</msea-soam-fm:port-status>"
-            + "<msea-soam-fm:interface-status>up</msea-soam-fm:interface-status>"
-            + "<msea-soam-fm:last-defect-sent>remote-rdi remote-mac-error</msea-soam-fm:last-defect-sent>"
-            + "<msea-soam-fm:rdi-transmit-status>true</msea-soam-fm:rdi-transmit-status>"
-            + "</maintenance-association-end-point>"
-            + "</maintenance-association>"
-            + "</maintenance-domain>"
-            + "</mef-cfm>"
-            + "</data>"
-            + "</rpc-reply>";
-
-
-    /**
-     * With an empty <last-defect-sent />. Retrieved from simulator.
-     */
-    private static final String SAMPLE_MSEACFM_MD_MA_MEP_FULL_REPLY2 =
-            "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
-            + "<rpc-reply xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\" message-id=\"47\">"
-            + "<data>"
-            + "<mef-cfm xmlns=\"http://www.microsemi.com/microsemi-edge-assure/msea-cfm\" "
-            + "xmlns:msea-soam-fm=\"http://www.microsemi.com/microsemi-edge-assure/msea-soam-fm\" "
-            + "xmlns:msea-soam-pm=\"http://www.microsemi.com/microsemi-edge-assure/msea-soam-pm\">"
-            + "<maintenance-domain>"
-                + "<id>1</id>"
-                + "<name>" + EA1000CfmMepProgrammableTest.MD_ID_1 + "</name>"
-                + "<maintenance-association>"
-                    + "<id>1</id>"
-                    + "<name>" + EA1000CfmMepProgrammableTest.MA_ID_11 + "</name>"
-                    + "<maintenance-association-end-point>"
-                        + "<mep-identifier>" + EA1000CfmMepProgrammableTest.MEP_112 + "</mep-identifier>"
-                        + "<interface>eth0</interface>"
-                        + "<administrative-state>true</administrative-state>"
-                        + "<ccm-ltm-priority>4</ccm-ltm-priority>"
-                        + "<continuity-check>"
-                            + "<cci-enabled>true</cci-enabled>"
-                            + "<fng-state>report-defect</fng-state>"
-                            + "<highest-priority-defect-found>remote-mac-error</highest-priority-defect-found>"
-                            + "<active-defects> remote-mac-error invalid-ccm</active-defects>"
-                            + "<last-error-ccm>U2FtcGxlIGxhc3QgZXJyb3IgY2NtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
-                            + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
-                            + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
-                            + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
-                            + "</last-error-ccm>"
-                            + "<ccm-sequence-error-count>10</ccm-sequence-error-count>"
-                            + "<sent-ccms>15</sent-ccms>"
-                        + "</continuity-check>"
-                        + "<mac-address>53:65:61:6e:20:43</mac-address>"
-                        + "<msea-soam-fm:port-status>no-status-tlv</msea-soam-fm:port-status>"
-                        + "<msea-soam-fm:interface-status>no-status-tlv</msea-soam-fm:interface-status>"
-                        + "<msea-soam-fm:last-defect-sent />"
-                        + "<msea-soam-fm:rdi-transmit-status>false</msea-soam-fm:rdi-transmit-status>"
-                        + "<loopback>"
-                            + "<replies-received>123</replies-received>"
-                            + "<replies-transmitted>456</replies-transmitted>"
-                        + "</loopback>"
-                        + "<remote-mep-database>"
-                            + "<remote-mep>"
-                                + "<remote-mep-id>20</remote-mep-id>"
-                                + "<remote-mep-state>ok</remote-mep-state>"
-                                + "<failed-ok-time>150859498</failed-ok-time>"
-                                + "<mac-address>53:65:61:6e:20:43</mac-address>"
-                                + "<rdi>true</rdi>"
-                                + "<port-status-tlv>up</port-status-tlv>"
-                                + "<interface-status-tlv>no-status-tlv</interface-status-tlv>"
-                            + "</remote-mep>"
-                            + "<remote-mep>"
-                                + "<remote-mep-id>30</remote-mep-id>"
-                                + "<remote-mep-state>ok</remote-mep-state>"
-                                + "<failed-ok-time>150859498</failed-ok-time>"
-                                + "<mac-address>53:65:61:6e:20:43</mac-address>"
-                                + "<rdi>true</rdi>"
-                                + "<port-status-tlv>no-status-tlv</port-status-tlv>"
-                                + "<interface-status-tlv>down</interface-status-tlv>"
-                            + "</remote-mep>"
-                        + "</remote-mep-database>"
-                        + "<linktrace>"
-                            + "<unexpected-replies-received>0</unexpected-replies-received>"
-                            + "<msea-soam-fm:ltm-msgs-transmitted>2</msea-soam-fm:ltm-msgs-transmitted>"
-                            + "<msea-soam-fm:ltm-msgs-received>2</msea-soam-fm:ltm-msgs-received>"
-                            + "<msea-soam-fm:ltr-msgs-transmitted>2</msea-soam-fm:ltr-msgs-transmitted>"
-                            + "<msea-soam-fm:ltr-msgs-received>2</msea-soam-fm:ltr-msgs-received>"
-                            + "<linktrace-database />"
-                        + "</linktrace>"
-                    + "</maintenance-association-end-point>"
-                + "</maintenance-association>"
-            + "</maintenance-domain>"
-            + "</mef-cfm>"
-            + "</data>"
-            + "</rpc-reply>";
-
-    private static final String SAMPLE_MSEACFM_DELAY_MEASUREMENT_FULL_REPLY =
-            "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
-            + "<rpc-reply xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\" message-id=\"47\">"
-            + "<data>"
-            + "<mef-cfm xmlns=\"http://www.microsemi.com/microsemi-edge-assure/msea-cfm\" "
-            + "xmlns:msea-soam-fm=\"http://www.microsemi.com/microsemi-edge-assure/msea-soam-fm\" "
-            + "xmlns:msea-soam-pm=\"http://www.microsemi.com/microsemi-edge-assure/msea-soam-pm\">"
-            + "<maintenance-domain>"
-            + "<id>1</id>"
-            + "<name>md-1</name>"
-            + "<maintenance-association>"
-            + "<id>1</id>"
-            + "<name>ma-1-1</name>"
-            + "<maintenance-association-end-point>"
-            + "<mep-identifier>1</mep-identifier>"
-            + "<msea-soam-pm:delay-measurements>"
-            + "<msea-soam-pm:delay-measurement>"
-            + "<msea-soam-pm:dm-id>1</msea-soam-pm:dm-id>"
-            + "<msea-soam-pm:mep-id>10</msea-soam-pm:mep-id>"
-            + "<msea-soam-pm:administrative-state>true</msea-soam-pm:administrative-state>"
-            + "<msea-soam-pm:measurement-enable>frame-delay-two-way-bins "
-            + "frame-delay-two-way-max</msea-soam-pm:measurement-enable>"
-            + "<msea-soam-pm:message-period>3ms</msea-soam-pm:message-period>"
-            + "<msea-soam-pm:priority>6</msea-soam-pm:priority>"
-            + "<msea-soam-pm:frame-size>1000</msea-soam-pm:frame-size>"
-            + "<msea-soam-pm:measurement-interval>15</msea-soam-pm:measurement-interval>"
-            + "<msea-soam-pm:number-intervals-stored>32</msea-soam-pm:number-intervals-stored>"
-            + "<msea-soam-pm:session-status>active</msea-soam-pm:session-status>"
-            + "<msea-soam-pm:frame-delay-two-way>100</msea-soam-pm:frame-delay-two-way>"
-            + "<msea-soam-pm:inter-frame-delay-variation-two-way>101</msea-soam-pm:inter-frame-delay-variation-two-way>"
-//            + "<msea-soam-pm:current-stats>"
-//            + "</msea-soam-pm:current-stats>"
-//            + "<msea-soam-pm:history-stats>"
-//            + "</msea-soam-pm:history-stats>"
-            + "</msea-soam-pm:delay-measurement>"
-            + "</msea-soam-pm:delay-measurements>"
-            + "</maintenance-association-end-point>"
-            + "</maintenance-association>"
-            + "</maintenance-domain>"
-            + "</mef-cfm>"
-            + "</data>"
-            + "</rpc-reply>";
-
-    private static final String SAMPLE_REPLY_OK = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
-            + "<rpc-reply xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\" message-id=\"2\">"
-            + "<ok/>"
-            + "</rpc-reply>";
-
-    private NetconfDeviceInfo deviceInfo;
-
-    private final AtomicInteger messageIdInteger = new AtomicInteger(0);
-
-    public MockNetconfSessionEa1000(NetconfDeviceInfo deviceInfo) throws NetconfException {
-        this.deviceInfo = deviceInfo;
-    }
-
-    @Override
-    public CompletableFuture<String> request(String request) throws NetconfException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public String get(String request) throws NetconfException {
-
-        return sendRequest(request);
-    }
-
-    @Override
-    public String get(String filterSchema, String withDefaultsMode) throws NetconfException {
-        StringBuilder rpc = new StringBuilder(XML_HEADER);
-        rpc.append(RPC_OPEN);
-        rpc.append(MESSAGE_ID_STRING);
-        rpc.append(EQUAL);
-        rpc.append("\"");
-        rpc.append(messageIdInteger.get());
-        rpc.append("\"  ");
-        rpc.append(NETCONF_BASE_NAMESPACE).append(">\n");
-        rpc.append(GET_OPEN).append(NEW_LINE);
-        if (filterSchema != null) {
-            rpc.append(SUBTREE_FILTER_OPEN).append(NEW_LINE);
-            rpc.append(filterSchema).append(NEW_LINE);
-            rpc.append(SUBTREE_FILTER_CLOSE).append(NEW_LINE);
-        }
-        if (withDefaultsMode != null) {
-            rpc.append(WITH_DEFAULT_OPEN).append(NETCONF_WITH_DEFAULTS_NAMESPACE).append(">");
-            rpc.append(withDefaultsMode).append(WITH_DEFAULT_CLOSE).append(NEW_LINE);
-        }
-        rpc.append(GET_CLOSE).append(NEW_LINE);
-        rpc.append(RPC_CLOSE).append(NEW_LINE);
-        rpc.append(ENDPATTERN);
-        String reply = sendRequest(rpc.toString());
-        checkReply(reply);
-        return reply;
-    }
-
-    @Override
-    public String doWrappedRpc(String request) throws NetconfException {
-        StringBuilder rpc = new StringBuilder(XML_HEADER);
-        rpc.append(RPC_OPEN);
-        rpc.append(MESSAGE_ID_STRING);
-        rpc.append(EQUAL);
-        rpc.append("\"");
-        rpc.append(messageIdInteger.get());
-        rpc.append("\"  ");
-        rpc.append(NETCONF_BASE_NAMESPACE).append(">\n");
-        rpc.append(request);
-        rpc.append(RPC_CLOSE).append(NEW_LINE);
-        rpc.append(ENDPATTERN);
-        String reply = sendRequest(rpc.toString());
-        checkReply(reply);
-        return reply;
-    }
-
-    @Override
-    public String requestSync(String request) throws NetconfException {
-        if (!request.contains(ENDPATTERN)) {
-            request = request + NEW_LINE + ENDPATTERN;
-        }
-        String reply = sendRequest(request);
-        checkReply(reply);
-        return reply;
-    }
-
-    @Override
-    public String getConfig(DatastoreId targetConfiguration, String configurationSchema) throws NetconfException {
-        StringBuilder rpc = new StringBuilder(XML_HEADER);
-        rpc.append("<rpc ");
-        rpc.append(MESSAGE_ID_STRING);
-        rpc.append(EQUAL);
-        rpc.append("\"");
-        rpc.append(messageIdInteger.get());
-        rpc.append("\"  ");
-        rpc.append("xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n");
-        rpc.append("<get-config>\n");
-        rpc.append("<source>\n");
-        rpc.append("<").append(targetConfiguration).append("/>");
-        rpc.append("</source>");
-        if (configurationSchema != null) {
-            rpc.append("<filter type=\"subtree\">\n");
-            rpc.append(configurationSchema).append("\n");
-            rpc.append("</filter>\n");
-        }
-        rpc.append("</get-config>\n");
-        rpc.append("</rpc>\n");
-        rpc.append(ENDPATTERN);
-        String reply = sendRequest(rpc.toString());
-        return checkReply(reply) ? reply : "ERROR " + reply;
-    }
-
-    @Override
-    public boolean editConfig(String newConfiguration) throws NetconfException {
-        return editConfig(DatastoreId.RUNNING, null, newConfiguration);
-    }
-
-    @Override
-    public boolean editConfig(DatastoreId targetConfiguration, String mode, String newConfiguration)
-            throws NetconfException {
-        newConfiguration = newConfiguration.trim();
-        StringBuilder rpc = new StringBuilder(XML_HEADER);
-        rpc.append(RPC_OPEN);
-        rpc.append(MESSAGE_ID_STRING);
-        rpc.append(EQUAL);
-        rpc.append("\"");
-        rpc.append(messageIdInteger.get());
-        rpc.append("\"  ");
-        rpc.append(NETCONF_BASE_NAMESPACE).append(">\n");
-        rpc.append(EDIT_CONFIG_OPEN).append("\n");
-        rpc.append(TARGET_OPEN);
-        rpc.append("<").append(targetConfiguration).append("/>");
-        rpc.append(TARGET_CLOSE).append("\n");
-        if (mode != null) {
-            rpc.append(DEFAULT_OPERATION_OPEN);
-            rpc.append(mode);
-            rpc.append(DEFAULT_OPERATION_CLOSE).append("\n");
-        }
-        rpc.append(CONFIG_OPEN).append("\n");
-        rpc.append(newConfiguration);
-        rpc.append(CONFIG_CLOSE).append("\n");
-        rpc.append(EDIT_CONFIG_CLOSE).append("\n");
-        rpc.append(RPC_CLOSE);
-        rpc.append(ENDPATTERN);
-        log.debug(rpc.toString());
-        String reply = sendRequest(rpc.toString());
-        return checkReply(reply);
-    }
-
-    @Override
-    public boolean copyConfig(String targetConfiguration, String newConfiguration) throws NetconfException {
-        return copyConfig(DatastoreId.datastore(targetConfiguration), newConfiguration);
-    }
-
-    @Override
-    public void startSubscription() throws NetconfException {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public void startSubscription(String filterSchema) throws NetconfException {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public void endSubscription() throws NetconfException {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public boolean lock() throws NetconfException {
-        // TODO Auto-generated method stub
-        return false;
-    }
-
-    @Override
-    public boolean unlock() throws NetconfException {
-        // TODO Auto-generated method stub
-        return false;
-    }
-
-    @Override
-    public boolean close() throws NetconfException {
-        // TODO Auto-generated method stub
-        return false;
-    }
-
-    @Override
-    public String getSessionId() {
-        return "mockSessionId";
-    }
-
-    @Override
-    public void addDeviceOutputListener(NetconfDeviceOutputEventListener listener) {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public void removeDeviceOutputListener(NetconfDeviceOutputEventListener listener) {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    protected boolean checkReply(String reply) {
-        if (reply != null) {
-            if (!reply.contains("<rpc-error>")) {
-                log.debug("Device {} sent reply {}", deviceInfo, reply);
-                return true;
-            } else if (reply.contains("<ok/>")
-                    || (reply.contains("<rpc-error>")
-                    && reply.contains("warning"))) {
-                log.debug("Device {} sent reply {}", deviceInfo, reply);
-                return true;
-            }
-        }
-        log.warn("Device {} has error in reply {}", deviceInfo, reply);
-        return false;
-    }
-
-    private String sendRequest(String request) throws NetconfException {
-        log.info("Mocking NETCONF Session send request: \n" + request);
-
-        if (sampleXmlRegex1.matcher(request).matches()) {
-            return SAMPLE_SYSTEM_REPLY;
-
-        } else if (sampleXmlRegex2.matcher(request).matches()) {
-            return SAMPLE_SYSTEM_REPLY_INIT;
-
-        } else if (sampleXmlRegexSaFilteringErrorScenario.matcher(request).matches()) {
-            return SAMPLE_ERROR_REPLY;
-
-        } else if (sampleXmlRegexSaFiltering.matcher(request).matches()) {
-            return SAMPLE_MSEASAFILTERING_FE_REPLY;
-
-        } else if (sampleXmlRegexEditConfigSaFilt.matcher(request).matches()) {
-            return SAMPLE_REPLY_OK;
-
-        } else if (sampleXmlRegexEditDeleteSaFilt.matcher(request).matches()) {
-            return SAMPLE_REPLY_OK;
-
-        } else if (sampleXmlRegexUniEvc.matcher(request).matches()) {
-            return SAMPLE_MSEAEVCUNI_REPLY_INIT;
-
-        } else if (sampleXmlRegexUniEvcUni.matcher(request).matches()) {
-            return SAMPLE_MSEAEVCUNI_FE_REPLY;
-
-        } else if (sampleXmlRegexEditConfigUni1Evc.matcher(request).matches()) {
-            return SAMPLE_REPLY_OK;
-
-        } else if (sampleXmlRegexEditConfigUni2Evc.matcher(request).matches()) {
-            return SAMPLE_REPLY_OK;
-
-        } else if (sampleXmlRegexEditConfigUniProfiles.matcher(request).matches()) {
-            return SAMPLE_REPLY_OK;
-
-        } else if (sampleXmlRegexEditConfigEvcDelete.matcher(request).matches()) {
-            return SAMPLE_REPLY_OK;
-
-        } else if (sampleXmlRegexGetConfigCeVlanMapsEvc.matcher(request).matches()) {
-            return SAMPLE_MSEAEVCUNI_CEVLANMAP_EVC_REPLY;
-
-        } else if (sampleXmlRegexEditConfigCeVlanMapReplace.matcher(request).matches()) {
-            return SAMPLE_REPLY_OK;
-
-        } else if (sampleXmlRegexEditConfigBwpGroup1.matcher(request).matches()) {
-            return SAMPLE_REPLY_OK;
-
-        } else if (sampleXmlRegexEditConfigBwpGroup1Delete.matcher(request).matches()) {
-            return SAMPLE_REPLY_OK;
-
-        } else if (sampleXmlRegexSetCurrentDatetime.matcher(request).matches()) {
-            return SAMPLE_REPLY_OK;
-
-        } else if (sampleXmlRegexGetMseaCfmEssentials.matcher(request).matches()) {
-            return SAMPLE_MSEACFM_MD_MA_MEP_ESSENTIALS_REPLY;
-
-        } else if (sampleXmlRegexGetMseaCfmFull.matcher(request).matches()) {
-            return SAMPLE_MSEACFM_MD_MA_MEP_FULL_REPLY;
-
-        } else if (sampleXmlRegexGetMseaCfmFull2.matcher(request).matches()) {
-            return SAMPLE_MSEACFM_MD_MA_MEP_FULL_REPLY2;
-
-        } else if (sampleXmlRegexDeleteMseaCfmMep.matcher(request).matches()) {
-            return SAMPLE_REPLY_OK;
-
-        } else if (sampleXmlRegexCreateMseaCfmMa.matcher(request).matches()) {
-            return SAMPLE_REPLY_OK;
-
-        } else if (sampleXmlRegexDeleteMseaCfmMa.matcher(request).matches()) {
-            return SAMPLE_REPLY_OK;
-
-        } else if (sampleXmlRegexDeleteMseaCfmRmep.matcher(request).matches()) {
-            return SAMPLE_REPLY_OK;
-
-        } else if (sampleXmlRegexDeleteMseaCfmMd.matcher(request).matches()) {
-            return SAMPLE_REPLY_OK;
-
-        } else if (sampleXmlRegexGetMseaDelay.matcher(request).matches()) {
-            return SAMPLE_MSEACFM_DELAY_MEASUREMENT_FULL_REPLY;
-
-        } else if (sampleXmlRegexEditConfigDmCreate.matcher(request).matches()) {
-            return SAMPLE_REPLY_OK;
-
-        } else if (sampleXmlRegexTransmitLoopback.matcher(request).matches()) {
-            return SAMPLE_REPLY_OK;
-
-        } else if (sampleXmlRegexAbortLoopback.matcher(request).matches()) {
-            return SAMPLE_REPLY_OK;
-
-        } else {
-            throw new NetconfException("MocknetconfSession. No sendRequest() case for query: " +
-                    request);
-        }
-    }
-}
diff --git a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/MseaCfmManagerTest.java b/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/MseaCfmManagerTest.java
deleted file mode 100644
index 161621b..0000000
--- a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/MseaCfmManagerTest.java
+++ /dev/null
@@ -1,444 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.io.UncheckedIOException;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.onlab.packet.Ip4Address;
-import org.onosproject.drivers.microsemi.yang.MseaCfmNetconfService.DmEntryParts;
-import org.onosproject.drivers.microsemi.yang.impl.MseaCfmManager;
-import org.onosproject.drivers.microsemi.yang.utils.MepIdUtil;
-import org.onosproject.drivers.microsemi.yang.utils.MepIdUtil2;
-import org.onosproject.drivers.microsemi.yang.utils.MepIdUtil3;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdCharStr;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdCharStr;
-import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MepId;
-import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmConfigException;
-import org.onosproject.incubator.net.l2monitoring.soam.SoamId;
-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.ietfyangtypes.rev20130715.ietfyangtypes.MacAddress;
-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.MefCfm;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.abortloopback.AbortLoopbackInput;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.abortloopback.DefaultAbortLoopbackInput;
-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.DefaultMaintenanceAssociation;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.MaintenanceAssociation;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.DefaultMaintenanceAssociationEndPoint;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.MaintenanceAssociationEndPoint;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.manameandtypecombo.DefaultNamePrimaryVid;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.manameandtypecombo.NamePrimaryVid;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.manameandtypecombo.nameprimaryvid.NamePrimaryVidUnion;
-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.DefaultNameDomainName;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.mdnameandtypecombo.NameCharacterString;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.mdnameandtypecombo.NameDomainName;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.mdnameandtypecombo.namedomainname.NameDomainNameUnion;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.targetaddressgroup.addresstype.DefaultMacAddress;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.targetaddressgroup.addresstype.DefaultMepId;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.transmitloopback.DefaultTransmitLoopbackInput;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.transmitloopback.TransmitLoopbackInput;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.transmitloopback.transmitloopbackinput.DefaultTargetAddress;
-import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.augmentedmseacfmmaintenanceassociationendpoint.delaymeasurements.DelayMeasurement;
-import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.augmentedmseacfmmaintenanceassociationendpoint.lossmeasurements.lossmeasurement.MessagePeriodEnum;
-import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.sessionstatustype.SessionStatusTypeEnum;
-import org.onosproject.yang.gen.v1.mseatypes.rev20160229.mseatypes.Identifier45;
-import org.onosproject.yang.gen.v1.mseatypes.rev20160229.mseatypes.MepIdType;
-import org.onosproject.yang.gen.v1.mseatypes.rev20160229.mseatypes.PriorityType;
-
-public class MseaCfmManagerTest {
-
-    MseaCfmManager mseaCfmService;
-    NetconfSession session;
-
-    @Before
-    public void setUp() throws Exception {
-        try {
-            mseaCfmService = new MockMseaCfmManager();
-            mseaCfmService.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 testGetConfigMseaCfmEssentials()
-            throws NetconfException, CfmConfigException {
-        MseaCfm mseaCfm = mseaCfmService.getMepEssentials(
-                MdIdCharStr.asMdId("md-1"),
-                MaIdCharStr.asMaId("ma-1-1"),
-                MepId.valueOf((short) 1), session);
-        assertNotNull(mseaCfm);
-
-        //See SAMPLE_MSEACFM_MD_MA_MEP_ESSENTIALS_REPLY in MockNetconfSessionEa1000
-        assertEquals(1, mseaCfm.mefCfm().maintenanceDomain().size());
-    }
-
-    @Test
-    public void testGetConfigMseaCfmFull()
-            throws NetconfException, CfmConfigException {
-        MseaCfm mseaCfm = mseaCfmService.getMepFull(
-                MdIdCharStr.asMdId("md-1"),
-                MaIdCharStr.asMaId("ma-1-1"),
-                MepId.valueOf((short) 1), session);
-        assertNotNull(mseaCfm);
-
-        //See SAMPLE_MSEACFM_MD_MA_MEP_FULL_REPLY in MockNetconfSessionEa1000
-        assertEquals(1, mseaCfm.mefCfm().maintenanceDomain().size());
-        MaintenanceAssociationEndPoint mep = mseaCfm.mefCfm()
-                .maintenanceDomain().get(0)
-                .maintenanceAssociation().get(0)
-                .maintenanceAssociationEndPoint().get(0);
-        assertTrue(mep.administrativeState());
-        assertEquals("00:b0:ae:03:ff:31", mep.macAddress().toString());
-
-        org.onosproject.yang.gen.v1.mseasoamfm.rev20160229.mseasoamfm.mefcfm.maintenancedomain
-        .maintenanceassociation.maintenanceassociationendpoint
-        .AugmentedMseaCfmMaintenanceAssociationEndPoint augmentedMep =
-            MepIdUtil2.convertFmAugmentedMep(mep);
-
-        assertEquals("partially-active", augmentedMep.connectivityStatus().toString());
-        assertEquals("up", augmentedMep.interfaceStatus().enumeration().toString());
-    }
-
-    /**
-     * Driven by SAMPLE_MSEACFM_DELAY_MEASUREMENT_FULL_REPLY.
-     * @throws NetconfException If there's a problem
-     */
-    @Test
-    public void testGetSoamDm() throws NetconfException {
-        MseaCfm mseaCfmWithDm = mseaCfmService.getSoamDm(
-                MdIdCharStr.asMdId("md-1"),
-                MaIdCharStr.asMaId("ma-1-1"),
-                MepId.valueOf((short) 1),
-                SoamId.valueOf(1),
-                DmEntryParts.ALL_PARTS, session);
-
-        assertNotNull(mseaCfmWithDm);
-        MaintenanceAssociationEndPoint mep = mseaCfmWithDm.mefCfm()
-            .maintenanceDomain().get(0)
-            .maintenanceAssociation().get(0)
-            .maintenanceAssociationEndPoint().get(0);
-
-        //Because of a checkstyle problem with typecasts including really long
-        //package names, this has to be handed off to a different class
-        org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.mefcfm.maintenancedomain
-        .maintenanceassociation.maintenanceassociationendpoint
-        .AugmentedMseaCfmMaintenanceAssociationEndPoint augmentedMep =
-                MepIdUtil.convertPmAugmentedMep(mep);
-
-        DelayMeasurement dm = augmentedMep.delayMeasurements().delayMeasurement().get(0);
-        assertEquals(true, dm.administrativeState());
-        assertTrue(dm.measurementEnable().get(3)); //frame-delay-two-way-bins
-        assertTrue(dm.measurementEnable().get(1)); //frame-delay-two-way-max
-
-        assertEquals(MessagePeriodEnum.YANGAUTOPREFIX3MS.name(), dm.messagePeriod().name());
-        assertEquals(6, dm.priority().uint8());
-        assertEquals(1000, dm.frameSize());
-        assertEquals(15, dm.measurementInterval());
-        assertEquals(32, dm.numberIntervalsStored());
-        assertEquals(SessionStatusTypeEnum.ACTIVE.name(),
-                dm.sessionStatus().enumeration().name());
-        assertEquals(100, dm.frameDelayTwoWay().uint32());
-        assertEquals(101, dm.interFrameDelayVariationTwoWay().uint32());
-
-        //The remoteMep of the DM is a choice, which for mepId is a leafref object
-        org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.remotemepgroup.remotemep
-        .DefaultMepId remoteMepId = MepIdUtil3.convertPmRemoteMepToMepId(dm.remoteMep());
-        assertNotNull(remoteMepId);
-        assertEquals(10, ((MepIdType) remoteMepId.mepId()).uint16());
-
-    }
-
-    /**
-     * Create the Maintenance Domain "md-1".
-     * @throws NetconfException
-     */
-    @Test
-    public void testSetMseaCfm() throws NetconfException {
-        NameCharacterString mdName = new DefaultNameCharacterString();
-        mdName.name(Identifier45.fromString("md-1"));
-
-        MaintenanceDomain yangMd = new DefaultMaintenanceDomain();
-        yangMd.id((short) 1);
-        yangMd.mdNameAndTypeCombo(mdName);
-
-        MefCfm mefCfm = new DefaultMefCfm();
-        mefCfm.addToMaintenanceDomain(yangMd);
-      //FIXME implement this
-//        MseaCfmOpParam mseaCfmOpParam = (MseaCfmOpParam) MseaCfmOpParam.builder().mefCfm(mefCfm).build();
-//        mseaCfmService.setMseaCfm(mseaCfmOpParam, session, NcDsType.running);
-    }
-
-    /**
-     * Using mep Id 10.
-     */
-    @Test
-    public void testDeleteMseaMep() {
-        MaintenanceAssociationEndPoint mep10 = new DefaultMaintenanceAssociationEndPoint();
-        mep10.mepIdentifier(MepIdType.of(10));
-
-        MaintenanceAssociation ma1100 = new DefaultMaintenanceAssociation();
-        NamePrimaryVid pvid1100Name = new DefaultNamePrimaryVid();
-        pvid1100Name.namePrimaryVid(NamePrimaryVidUnion.fromString("1100"));
-        ma1100.maNameAndTypeCombo(pvid1100Name);
-        ma1100.id((short) 1100);
-        ma1100.addToMaintenanceAssociationEndPoint(mep10);
-
-        MaintenanceDomain md = new DefaultMaintenanceDomain();
-        NameCharacterString mdName = new DefaultNameCharacterString();
-        mdName.name(new Identifier45("md-1"));
-        md.mdNameAndTypeCombo(mdName);
-        md.id((short) 1);
-        md.addToMaintenanceAssociation(ma1100);
-
-        MefCfm mefCfm = new DefaultMefCfm();
-        mefCfm.addToMaintenanceDomain(md);
-        MseaCfmOpParam mseaCfm = new MseaCfmOpParam();
-        mseaCfm.mefCfm(mefCfm);
-
-        try {
-            boolean deleted = mseaCfmService.deleteMseaMep(mseaCfm, session, DatastoreId.RUNNING);
-            assertTrue(deleted);
-        } catch (NetconfException e) {
-            e.printStackTrace();
-            fail();
-        } catch (CfmConfigException e) {
-            e.printStackTrace();
-            fail();
-        }
-    }
-
-    /**
-     * Using mep Id 10.
-     */
-    @Test
-    public void testDeleteMseaMa() {
-        MaintenanceAssociation ma1300 = new DefaultMaintenanceAssociation();
-        NamePrimaryVid pvid1300Name = new DefaultNamePrimaryVid();
-        pvid1300Name.namePrimaryVid(NamePrimaryVidUnion.fromString("1300"));
-        ma1300.id((short) 1300);
-        ma1300.maNameAndTypeCombo(pvid1300Name);
-
-        MaintenanceDomain md = new DefaultMaintenanceDomain();
-        NameCharacterString mdName = new DefaultNameCharacterString();
-        mdName.name(new Identifier45("md-13"));
-        md.mdNameAndTypeCombo(mdName);
-        md.id((short) 13);
-        md.addToMaintenanceAssociation(ma1300);
-
-        MefCfm mefCfm = new DefaultMefCfm();
-        mefCfm.addToMaintenanceDomain(md);
-        MseaCfmOpParam mseaCfm = new MseaCfmOpParam();
-        mseaCfm.mefCfm(mefCfm);
-
-        try {
-            boolean deleted = mseaCfmService.deleteMseaMa(mseaCfm, session, DatastoreId.RUNNING);
-            assertTrue(deleted);
-        } catch (NetconfException e) {
-            e.printStackTrace();
-            fail();
-        } catch (CfmConfigException e) {
-            e.printStackTrace();
-            fail();
-        }
-    }
-
-
-    @Test
-    public void testDeleteMseaRemoteMep() {
-        MaintenanceAssociation ma1100 = new DefaultMaintenanceAssociation();
-        NamePrimaryVid pvid1100Name = new DefaultNamePrimaryVid();
-        pvid1100Name.namePrimaryVid(NamePrimaryVidUnion.fromString("1100"));
-        ma1100.maNameAndTypeCombo(pvid1100Name);
-        ma1100.id((short) 1100);
-        ma1100.addToRemoteMeps(MepIdType.of(100));
-        ma1100.addToRemoteMeps(MepIdType.of(101));
-
-        MaintenanceDomain md = new DefaultMaintenanceDomain();
-        NameCharacterString mdName = new DefaultNameCharacterString();
-        mdName.name(new Identifier45("md-1"));
-        md.mdNameAndTypeCombo(mdName);
-        md.id((short) 1);
-        md.addToMaintenanceAssociation(ma1100);
-
-        MefCfm mefCfm = new DefaultMefCfm();
-        mefCfm.addToMaintenanceDomain(md);
-        MseaCfmOpParam mseaCfm = new MseaCfmOpParam();
-        mseaCfm.mefCfm(mefCfm);
-
-        try {
-            boolean deleted = mseaCfmService.deleteMseaMaRMep(mseaCfm, session, DatastoreId.RUNNING);
-            assertTrue(deleted);
-        } catch (NetconfException e) {
-            e.printStackTrace();
-            fail();
-        } catch (CfmConfigException e) {
-            e.printStackTrace();
-            fail();
-        }
-    }
-
-    /**
-     * Using mep Id 10.
-     */
-    @Test
-    public void testDeleteMseaMdById() {
-
-        MaintenanceDomain md = new DefaultMaintenanceDomain();
-        NameDomainName mdName = new DefaultNameDomainName();
-        mdName.nameDomainName(NameDomainNameUnion.fromString("www.opennetworking.org"));
-        md.mdNameAndTypeCombo(mdName);
-        md.id((short) 10);
-
-        MefCfm mefCfm = new DefaultMefCfm();
-        mefCfm.addToMaintenanceDomain(md);
-        MseaCfmOpParam mseaCfm = new MseaCfmOpParam();
-        mseaCfm.mefCfm(mefCfm);
-
-        try {
-            boolean deleted = mseaCfmService.deleteMseaMd(mseaCfm, session, DatastoreId.RUNNING);
-            assertTrue(deleted);
-        } catch (NetconfException e) {
-            e.printStackTrace();
-            fail();
-        } catch (CfmConfigException e) {
-            e.printStackTrace();
-            fail();
-        }
-    }
-
-    /**
-     * Using mep Id 10.
-     */
-    @Test
-    public void testDeleteMseaMdByName() {
-
-        MaintenanceDomain md = new DefaultMaintenanceDomain();
-        NameDomainName mdName = new DefaultNameDomainName();
-        mdName.nameDomainName(NameDomainNameUnion.fromString("www.opennetworking.org"));
-        md.mdNameAndTypeCombo(mdName);
-
-        MefCfm mefCfm = new DefaultMefCfm();
-        mefCfm.addToMaintenanceDomain(md);
-        MseaCfmOpParam mseaCfm = new MseaCfmOpParam();
-        mseaCfm.mefCfm(mefCfm);
-
-        try {
-            mseaCfmService.deleteMseaMd(mseaCfm, session, DatastoreId.RUNNING);
-            fail("Should not have succeeded as no numeric id was given");
-        } catch (NetconfException | CfmConfigException e) {
-            assertEquals("An MD numeric ID must be given", e.getMessage());
-        }
-    }
-
-
-    /**
-     * Using Remote remote MEP ID and all arguments.
-     */
-    @Test
-    public void testTransmitLoopback1() {
-        TransmitLoopbackInput lbTr1 = new DefaultTransmitLoopbackInput();
-        lbTr1.maintenanceDomain(Short.valueOf((short) 1));
-        lbTr1.maintenanceAssociation(Short.valueOf((short) 2));
-        lbTr1.maintenanceAssociationEndPoint(Short.valueOf((short) 3));
-
-        DefaultTargetAddress ta = new DefaultTargetAddress();
-        DefaultMepId mepId = new DefaultMepId();
-        mepId.mepId(MepIdType.of(4));
-        ta.addressType(mepId);
-        lbTr1.targetAddress(ta);
-
-//        lbTr1.dataTlv(new byte[]{0x01, 0x02, 0x03}); Not supported in onos-yang-tools just yet
-        lbTr1.numberOfMessages(10);
-        lbTr1.vlanDropEligible(true);
-        lbTr1.vlanPriority(PriorityType.of((short) 1));
-        try {
-            mseaCfmService.transmitLoopback(lbTr1, session);
-        } catch (NetconfException e) {
-            fail("Calling of TransmitLoopback failed: " + e.getMessage());
-        }
-    }
-
-    /**
-     * Using Remote Mac address in place of remote MEP ID and fewer arguments.
-     */
-    @Test
-    public void testTransmitLoopback2() {
-        TransmitLoopbackInput lbTr2 = new DefaultTransmitLoopbackInput();
-
-        lbTr2.maintenanceDomain(Short.valueOf((short) 63));
-        lbTr2.maintenanceAssociation(Short.valueOf((short) 62));
-        lbTr2.maintenanceAssociationEndPoint(Short.valueOf((short) 61));
-
-        DefaultTargetAddress ta = new DefaultTargetAddress();
-        DefaultMacAddress macAddr = new DefaultMacAddress();
-        macAddr.macAddress(MacAddress.of("FF:EE:DD:CC:BB:AA"));
-        ta.addressType(macAddr);
-        lbTr2.targetAddress(ta);
-        try {
-            mseaCfmService.transmitLoopback(lbTr2, session);
-        } catch (NetconfException e) {
-            fail("Calling of TransmitLoopback failed: " + e.getMessage());
-        }
-    }
-
-    @Test
-    public void testAbortLoopback() throws NetconfException {
-        AbortLoopbackInput lbAbort = new DefaultAbortLoopbackInput();
-
-        lbAbort.maintenanceDomain((short) 70);
-        lbAbort.maintenanceAssociation((short) 71);
-        lbAbort.maintenanceAssociationEndPoint((short) 72);
-
-        try {
-            mseaCfmService.abortLoopback(lbAbort, session);
-        } catch (NetconfException e) {
-            fail("Calling of AbortLoopback failed: " + e.getMessage());
-        }
-    }
-
-    @Test
-    public void testTransmitLinktrace() throws NetconfException {
-        try {
-            mseaCfmService.transmitLinktrace(null, session);
-        } catch (UnsupportedOperationException e) {
-            assertTrue(e.getMessage().contains("Not yet implemented"));
-        }
-    }
-
-}
diff --git a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/MseaSaFilteringManagerTest.java b/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/MseaSaFilteringManagerTest.java
deleted file mode 100644
index 29ac4a3..0000000
--- a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/MseaSaFilteringManagerTest.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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 static org.junit.Assert.assertTrue;
-
-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());
-            }
-        }
-    }
-
-    /**
-     * See sampleXmlRegexSaFilteringErrorScenario in MockNetconfSessionEa1000.
-     */
-    @Test
-    public void testGetMseaSaFilteringMseaSaFilteringOpParamNetconfSessionError() {
-
-        SourceAddressRange sar = new DefaultSourceAddressRange();
-        sar.rangeId((short) 10);
-
-        InterfaceEth0 eth0 = new DefaultInterfaceEth0();
-        eth0.addToSourceAddressRange(sar);
-
-        SourceIpaddressFiltering sip = new DefaultSourceIpaddressFiltering();
-        sip.interfaceEth0(eth0);
-
-        MseaSaFilteringOpParam mseaSaFilteringConfig = new MseaSaFilteringOpParam();
-        mseaSaFilteringConfig.sourceIpaddressFiltering(sip);
-
-        try {
-            MseaSaFiltering result = mseaSaSvc.getMseaSaFiltering(mseaSaFilteringConfig, session);
-            fail("Should have thrown exception");
-        } catch (NetconfException ne) {
-            assertTrue(ne.getMessage().startsWith("NETCONF rpc-error"));
-        }
-    }
-
-    @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/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/MseaUniEvcServiceManagerTest.java b/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/MseaUniEvcServiceManagerTest.java
deleted file mode 100644
index 2865b5b..0000000
--- a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/MseaUniEvcServiceManagerTest.java
+++ /dev/null
@@ -1,496 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/utils/IetfYangTypesUtilsTest.java b/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/utils/IetfYangTypesUtilsTest.java
deleted file mode 100644
index 7508511..0000000
--- a/drivers/microsemi/ea1000/src/test/java/org/onosproject/drivers/microsemi/yang/utils/IetfYangTypesUtilsTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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.utils;
-
-import static org.junit.Assert.assertEquals;
-
-import java.time.LocalDateTime;
-import java.time.OffsetDateTime;
-import java.time.ZoneId;
-import java.time.ZoneOffset;
-import java.time.ZonedDateTime;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.onosproject.yang.gen.v1.ietfyangtypes.rev20130715.ietfyangtypes.DateAndTime;
-
-public class IetfYangTypesUtilsTest {
-
-    @Before
-    public void setUp() throws Exception {
-    }
-
-    @After
-    public void tearDown() throws Exception {
-    }
-
-    @Test
-    public void testFromYangDateTime() {
-        OffsetDateTime odt = IetfYangTypesUtils.fromYangDateTime(DateAndTime.fromString("2015-07-08T12:49:20.9Z"));
-        assertEquals(OffsetDateTime.of(2015, 7, 8, 12, 49, 20, 900000000, ZoneOffset.UTC), odt);
-    }
-
-    @Test
-    public void testFromYangDateTimeZoned() {
-        ZonedDateTime zdt = IetfYangTypesUtils.fromYangDateTimeZoned(DateAndTime.fromString("2015-07-08T12:49:20.9Z"),
-                ZoneId.systemDefault());
-
-        assertEquals(OffsetDateTime.of(2015, 7, 8, 12, 49, 20, 900000000, ZoneOffset.UTC).toInstant(),
-                zdt.toOffsetDateTime().toInstant());
-    }
-
-    @Test
-    public void testFromYangDateTimeToLocal() {
-        LocalDateTime ldt = IetfYangTypesUtils
-                .fromYangDateTimeToLocal(DateAndTime.fromString("2015-07-08T12:49:20.9Z"));
-
-        OffsetDateTime odtExpected = OffsetDateTime.of(2015, 7, 8, 12, 49, 20, 900000000, ZoneOffset.UTC);
-        ZoneOffset offsetForcurrentZone = ZoneId.systemDefault().getRules().getOffset(ldt);
-        assertEquals(odtExpected.toInstant(), ldt.toInstant(offsetForcurrentZone));
-    }
-
-}
diff --git a/drivers/microsemi/ea1000/src/test/java/org/onosproject/yang/MockMicrosemiRegistrator.java b/drivers/microsemi/ea1000/src/test/java/org/onosproject/yang/MockMicrosemiRegistrator.java
deleted file mode 100644
index 09b1621..0000000
--- a/drivers/microsemi/ea1000/src/test/java/org/onosproject/yang/MockMicrosemiRegistrator.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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 com.google.common.collect.ImmutableMap;
-import org.onosproject.models.microsemi.MicrosemiModelRegistrator;
-import org.onosproject.yang.compiler.datamodel.YangNode;
-import org.onosproject.yang.compiler.tool.YangNodeInfo;
-import org.onosproject.yang.model.YangModuleId;
-import org.onosproject.yang.runtime.AppModuleInfo;
-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.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import static org.junit.Assert.fail;
-import static org.onosproject.yang.compiler.tool.YangCompilerManager.deSerializeDataModel;
-import static org.onosproject.yang.compiler.tool.YangCompilerManager.getYangNodes;
-import static org.onosproject.yang.compiler.tool.YangCompilerManager.processYangModel;
-
-public class MockMicrosemiRegistrator extends MicrosemiModelRegistrator {
-    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/ea1000", "")
-                    + SER_FILE_PATH;
-
-    @Override
-    public void activate() {
-        modelRegistry = new DefaultYangModelRegistry();
-        List<YangNodeInfo> nodes = new ArrayList<>();
-        try {
-            for (YangNode node : getYangNodes(deSerializeDataModel(META_PATH))) {
-                nodes.add(new YangNodeInfo(node, false));
-            }
-
-            model = processYangModel(META_PATH, nodes, "test", false);
-            ModelRegistrationParam.Builder b =
-                    DefaultModelRegistrationParam.builder().setYangModel(model);
-            b.setYangModel(model);
-
-            ModelRegistrationParam registrationParam = getAppInfo(b).setYangModel(model).build();
-            modelRegistry.registerModel(registrationParam);
-        } catch (IOException ioe) {
-            ioe.printStackTrace();
-            fail();
-        }
-    }
-
-
-    public void addAppInfo(Map<YangModuleId, AppModuleInfo> map) {
-        Map<YangModuleId, AppModuleInfo> appInfoCopy = new HashMap<>();
-        appInfoCopy.putAll(appInfo);
-        appInfoCopy.putAll(map);
-        appInfo = ImmutableMap.copyOf(appInfoCopy);
-    }
-
-    public YangModelRegistry registry() {
-        return modelRegistry;
-    }
-}
diff --git a/drivers/microsemi/ea1000/src/test/java/org/onosproject/yang/MockYangRegistrator.java b/drivers/microsemi/ea1000/src/test/java/org/onosproject/yang/MockYangRegistrator.java
deleted file mode 100644
index c564e9a..0000000
--- a/drivers/microsemi/ea1000/src/test/java/org/onosproject/yang/MockYangRegistrator.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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.onosproject.models.common.YangModelRegistrator;
-import org.onosproject.yang.model.YangModuleId;
-import org.onosproject.yang.runtime.AppModuleInfo;
-
-
-import java.util.Map;
-
-public class MockYangRegistrator extends YangModelRegistrator {
-    public Map<YangModuleId, AppModuleInfo> getAppInfo() {
-        return appInfo;
-    }
-}
diff --git a/drivers/microsemi/ea1000/src/test/java/org/onosproject/yang/MockYangRuntimeManager.java b/drivers/microsemi/ea1000/src/test/java/org/onosproject/yang/MockYangRuntimeManager.java
deleted file mode 100644
index 2ed8af3..0000000
--- a/drivers/microsemi/ea1000/src/test/java/org/onosproject/yang/MockYangRuntimeManager.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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.osgi.service.component.annotations.Activate;
-import org.osgi.service.component.annotations.Deactivate;
-import org.osgi.service.component.annotations.Reference;
-import org.osgi.service.component.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.ModelObjectId;
-import org.onosproject.yang.model.NodeKey;
-import org.onosproject.yang.model.ResourceData;
-import org.onosproject.yang.model.ResourceId;
-import org.onosproject.yang.model.RpcContext;
-import org.onosproject.yang.model.SchemaContext;
-import org.onosproject.yang.model.SchemaContextProvider;
-import org.onosproject.yang.model.YangModel;
-import org.onosproject.yang.model.YangModule;
-import org.onosproject.yang.model.YangModuleId;
-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.DefaultSchemaContextProvider;
-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)
-        protected CoreService coreService;
-
-        private DefaultYangModelRegistry modelRegistry;
-        private DefaultYangSerializerRegistry serializerRegistry;
-        private DefaultYangRuntimeHandler runtimeService;
-        private DefaultModelConverter modelConverter;
-        private DefaultSchemaContextProvider schemaContextProvider;
-
-        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);
-            schemaContextProvider = new DefaultSchemaContextProvider(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 YangModel getModel(String s) {
-            return modelRegistry.getModel(s);
-        }
-
-        @Override
-        public YangModule getModule(YangModuleId yangModuleId) {
-            return modelRegistry.getModule(yangModuleId);
-        }
-
-        @Override
-        public void registerSerializer(YangSerializer ys) {
-            serializerRegistry.registerSerializer(ys);
-        }
-
-        @Override
-        public void unregisterSerializer(YangSerializer ys) {
-            serializerRegistry.unregisterSerializer(ys);
-        }
-
-        @Override
-        public void registerAnydataSchema(ModelObjectId arg0, ModelObjectId arg1) {
-            throw new UnsupportedOperationException("registerAnydataSchema() needs to be implemented");
-        }
-
-        @Override
-        public void unregisterAnydataSchema(Class id, Class id1) {
-            throw new UnsupportedOperationException("unregisterAnydataSchema() needs to be implemented");
-
-        }
-
-        @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;
-        }
-
-    @Override
-    public RpcContext getRpcContext(ResourceId resourceId) {
-        return schemaContextProvider.getRpcContext(resourceId);
-    }
-}
diff --git a/drivers/microsemi/ea1000/src/test/java/org/onosproject/yang/serializers/xml/MockYangSerializerContext.java b/drivers/microsemi/ea1000/src/test/java/org/onosproject/yang/serializers/xml/MockYangSerializerContext.java
deleted file mode 100644
index f5c0753..0000000
--- a/drivers/microsemi/ea1000/src/test/java/org/onosproject/yang/serializers/xml/MockYangSerializerContext.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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.MockMicrosemiRegistrator;
-import org.onosproject.yang.MockYangRegistrator;
-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 com.google.common.base.Supplier;
-import com.google.common.base.Suppliers;
-
-import java.util.LinkedList;
-import java.util.List;
-
-public class MockYangSerializerContext implements YangSerializerContext {
-
-    private static MockYangRegistrator schemaProviderYang =
-            new MockYangRegistrator();
-
-    private static Supplier<MockMicrosemiRegistrator> schemaProviderMicrosemi =
-            Suppliers.memoize(() -> {
-                MockMicrosemiRegistrator r = new MockMicrosemiRegistrator();
-                r.addAppInfo(schemaProviderYang.getAppInfo());
-                r.activate();
-                return r;
-            });
-
-    private static final String NETCONF_NS =
-            "urn:ietf:params:xml:ns:netconf:base:1.0";
-    private static final String XMNLS_NC = "xmlns:xc";
-
-    public MockYangSerializerContext() {
-    }
-
-    @Override
-    public SchemaContext getContext() {
-        DefaultYangModelRegistry registry = (DefaultYangModelRegistry) schemaProviderMicrosemi.get().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/ea1000/src/test/resources/CarrierEthernetFeature-sampleEvcConfig1.txt b/drivers/microsemi/ea1000/src/test/resources/CarrierEthernetFeature-sampleEvcConfig1.txt
deleted file mode 100644
index 04db8030..0000000
--- a/drivers/microsemi/ea1000/src/test/resources/CarrierEthernetFeature-sampleEvcConfig1.txt
+++ /dev/null
@@ -1,85 +0,0 @@
-onos> ce-evc-list
-CarrierEthernetVirtualConnection{
-    id=EP-Line-1, cfgId=evpl1, type=POINT_TO_POINT, state=ACTIVE,
-    UNIs=[
-        CarrierEthernetUni{
-            id=netconf:192.168.56.10:830/0,
-            cfgId=netconf:192.168.56.10:830/0,
-            role=Root,
-            refCount=0,
-            ceVlanIds=[100],
-            capacity=1000000000,
-            usedCapacity=3.0E8,
-            bandwidthProfiles=[
-                CarrierEthernetBandwidthProfile{
-                    id=FC-1,
-                    type=EVC,
-                    cir=3.0E8,
-                    cbs=2000,
-                    eir=0.0,
-                    ebs=0}]},
-        CarrierEthernetUni{
-            id=netconf:192.168.56.20:830/0,
-            cfgId=netconf:192.168.56.20:830/0,
-            role=Root,
-            refCount=0,
-            ceVlanIds=[100],
-            capacity=1000000000,
-            usedCapacity=3.0E8,
-            bandwidthProfiles=[
-                CarrierEthernetBandwidthProfile{
-                    id=FC-1,
-                    type=EVC,
-                    cir=3.0E8,
-                    cbs=2000,
-                    eir=0.0,
-                    ebs=0}]}],
-    FCs=[
-        CarrierEthernetForwardingConstruct{
-            id=FC-1,
-            cfgId=null,
-            type=POINT_TO_POINT,
-            vlanId=1,
-            metroConnectId=null,
-            refCount=1,
-            LTPs=[
-                CarrierEthernetLogicalTerminationPoint{
-                    id=netconf:192.168.56.10:830/0,
-                    cfgId=netconf:192.168.56.10:830/0,
-                    role=Root,
-                    ni=CarrierEthernetUni{
-                        id=netconf:192.168.56.10:830/0,
-                        cfgId=netconf:192.168.56.10:830/0,
-                        role=Root,
-                        refCount=0,
-                        ceVlanIds=[100],
-                        capacity=1000000000,
-                        usedCapacity=3.0E8,
-                        bandwidthProfiles=[
-                            CarrierEthernetBandwidthProfile{
-                                id=FC-1,
-                                type=EVC,
-                                cir=3.0E8,
-                                cbs=2000,
-                                eir=0.0,
-                                ebs=0}]}},
-                CarrierEthernetLogicalTerminationPoint{
-                    id=netconf:192.168.56.20:830/0,
-                    cfgId=netconf:192.168.56.20:830/0,
-                    role=Root,
-                    ni=CarrierEthernetUni{
-                        id=netconf:192.168.56.20:830/0,
-                        cfgId=netconf:192.168.56.20:830/0,
-                        role=Root,
-                        refCount=0,
-                        ceVlanIds=[100],
-                        capacity=1000000000,
-                        usedCapacity=3.0E8,
-                        bandwidthProfiles=[
-                            CarrierEthernetBandwidthProfile{
-                                id=FC-1,
-                                type=EVC,
-                                cir=3.0E8,
-                                cbs=2000,
-                                eir=0.0,
-                                ebs=0}]}}]}]}
diff --git a/drivers/microsemi/ea1000/src/test/resources/getConfigSaFiltering.xml b/drivers/microsemi/ea1000/src/test/resources/getConfigSaFiltering.xml
deleted file mode 100644
index 53bfe46..0000000
--- a/drivers/microsemi/ea1000/src/test/resources/getConfigSaFiltering.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<rpc message-id="101"
-     xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
-    <get-config>
-        <source>
-            <running/>
-        </source>
-        <filter type="subtree">
-            <source-ipaddress-filtering xmlns="http://www.microsemi.com/microsemi-edge-assure/msea-sa-filtering"/>
-        </filter>
-    </get-config>
-</rpc>
\ No newline at end of file
diff --git a/drivers/microsemi/ea1000/src/test/resources/getConfigSaFilteringReply.xml b/drivers/microsemi/ea1000/src/test/resources/getConfigSaFilteringReply.xml
deleted file mode 100644
index 6e1e040..0000000
--- a/drivers/microsemi/ea1000/src/test/resources/getConfigSaFilteringReply.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="7">
-    <data>
-        <source-ipaddress-filtering xmlns="http://www.microsemi.com/microsemi-edge-assure/msea-sa-filtering">
-            <interface-eth0>
-                <source-address-range>
-                    <range-id>1</range-id>
-                    <ipv4-address-prefix>10.10.10.10/16</ipv4-address-prefix>
-                    <name>Filter1</name>
-                </source-address-range>
-                <filter-admin-state>inactive</filter-admin-state>
-            </interface-eth0>
-        </source-ipaddress-filtering>
-    </data>
-</rpc-reply>
\ No newline at end of file
diff --git a/drivers/microsemi/ea1000/src/test/resources/systemReply-Sample1.xml b/drivers/microsemi/ea1000/src/test/resources/systemReply-Sample1.xml
deleted file mode 100644
index 206bf45..0000000
--- a/drivers/microsemi/ea1000/src/test/resources/systemReply-Sample1.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="2">
-    <data>
-        <system xmlns="urn:ietf:params:xml:ns:yang:ietf-system">
-            <longitude xmlns="http://www.microsemi.com/microsemi-edge-assure/msea-system">-8.4683990</longitude>
-            <latitude xmlns="http://www.microsemi.com/microsemi-edge-assure/msea-system">51.9036140</latitude>
-        </system>
-        <system-state xmlns="urn:ietf:params:xml:ns:yang:ietf-system" xmlns:sysms="http://www.microsemi.com/microsemi-edge-assure/msea-system">
-            <platform>
-                <os-release>2.6.33-arm1-MSEA1000--00326-g643be76.x.0.0.212</os-release>
-                <sysms:device-identification>
-                    <sysms:serial-number>Eagle Simulator.</sysms:serial-number>
-                </sysms:device-identification>
-            </platform>
-        </system-state>
-    </data>
-</rpc-reply>
\ No newline at end of file
diff --git a/drivers/microsemi/ea1000/src/test/resources/systemReply-Sample2.xml b/drivers/microsemi/ea1000/src/test/resources/systemReply-Sample2.xml
deleted file mode 100644
index 9592538..0000000
--- a/drivers/microsemi/ea1000/src/test/resources/systemReply-Sample2.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="2">
-  <data>
-    <system-state xmlns="urn:ietf:params:xml:ns:yang:ietf-system">
-      <platform/>
-    </system-state>
-  </data>
-</rpc-reply>
\ No newline at end of file
diff --git a/models/microsemi/BUILD b/models/microsemi/BUILD
deleted file mode 100644
index 2e56eb3..0000000
--- a/models/microsemi/BUILD
+++ /dev/null
@@ -1,17 +0,0 @@
-load("//tools/build/bazel:yang.bzl", "yang_model")
-
-COMPILE_DEPS = [
-    "//models/common:onos-models-common",
-]
-
-APPS = [
-    "org.onosproject.models.common",
-]
-
-yang_model(
-    app_name = "org.onosproject.models.microsemi",
-    custom_registrator = True,
-    required_apps = APPS,
-    title = "Microsemi YANG Models",
-    deps = COMPILE_DEPS,
-)
diff --git a/models/microsemi/src/main/java/org/onosproject/models/microsemi/MicrosemiModelRegistrator.java b/models/microsemi/src/main/java/org/onosproject/models/microsemi/MicrosemiModelRegistrator.java
deleted file mode 100644
index bb1b7de..0000000
--- a/models/microsemi/src/main/java/org/onosproject/models/microsemi/MicrosemiModelRegistrator.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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.models.microsemi;
-
-import com.google.common.collect.ImmutableMap;
-import org.onosproject.yang.AbstractYangModelRegistrator;
-import org.onosproject.yang.gen.v1.ietfsystemmicrosemi.rev20160505.IetfSystemMicrosemi;
-import org.osgi.service.component.annotations.Component;
-import org.onosproject.yang.gen.v1.mseacfm.rev20160229.MseaCfm;
-import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.MseaSoamPm;
-import org.onosproject.yang.gen.v1.mseasoamfm.rev20160229.MseaSoamFm;
-import org.onosproject.yang.gen.v1.mseasafiltering.rev20160412.MseaSaFiltering;
-import org.onosproject.yang.gen.v1.mseaunievcservice.rev20160317.MseaUniEvcService;
-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.List;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Map;
-
-@Component(immediate = true)
-public class MicrosemiModelRegistrator extends AbstractYangModelRegistrator {
-    public MicrosemiModelRegistrator() {
-        super(MicrosemiModelRegistrator.class, getAppInfo());
-    }
-
-    private static Map<YangModuleId, AppModuleInfo> getAppInfo() {
-        Map<YangModuleId, AppModuleInfo> appInfo = new HashMap<>();
-        List<String> sysMicrosemiFeatures = new ArrayList<>();
-        sysMicrosemiFeatures.add("serial-number");
-        appInfo.put(new DefaultYangModuleId("ietf-system-microsemi", "2016-05-05"),
-                    new DefaultAppModuleInfo(IetfSystemMicrosemi.class, sysMicrosemiFeatures));
-
-        appInfo.put(new DefaultYangModuleId("msea-uni-evc-service", "2016-03-17"),
-                new DefaultAppModuleInfo(MseaUniEvcService.class, null));
-        appInfo.put(new DefaultYangModuleId("msea-cfm", "2016-02-29"),
-                new DefaultAppModuleInfo(MseaCfm.class, null));
-        appInfo.put(new DefaultYangModuleId("msea-soam-fm", "2016-02-29"),
-                new DefaultAppModuleInfo(MseaSoamFm.class, null));
-        appInfo.put(new DefaultYangModuleId("msea-soam-pm", "2016-02-29"),
-                new DefaultAppModuleInfo(MseaSoamPm.class, null));
-        appInfo.put(new DefaultYangModuleId("msea-sa-filtering", "2016-04-12"),
-                new DefaultAppModuleInfo(MseaSaFiltering.class, null));
-
-        return ImmutableMap.copyOf(appInfo);
-        // TODO: Do some other registration tasks...
-    }
-}
\ No newline at end of file
diff --git a/models/microsemi/src/main/java/org/onosproject/models/microsemi/package-info.java b/models/microsemi/src/main/java/org/onosproject/models/microsemi/package-info.java
deleted file mode 100644
index b484dad..0000000
--- a/models/microsemi/src/main/java/org/onosproject/models/microsemi/package-info.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * 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.
- */
-/**
- * Commonly used yang models.
- */
-package org.onosproject.models.microsemi;
diff --git a/models/microsemi/src/main/yang/ENTITY-STATE-TC-MIB@2005-11-22.yang b/models/microsemi/src/main/yang/ENTITY-STATE-TC-MIB@2005-11-22.yang
deleted file mode 100644
index c2d8a59..0000000
--- a/models/microsemi/src/main/yang/ENTITY-STATE-TC-MIB@2005-11-22.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/models/microsemi/src/main/yang/iana-if-type@2014-05-08.yang b/models/microsemi/src/main/yang/iana-if-type@2014-05-08.yang
deleted file mode 100644
index fb48b6b..0000000
--- a/models/microsemi/src/main/yang/iana-if-type@2014-05-08.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/models/microsemi/src/main/yang/ietf-interfaces@2014-05-08.yang b/models/microsemi/src/main/yang/ietf-interfaces@2014-05-08.yang
deleted file mode 100644
index b18d5d3..0000000
--- a/models/microsemi/src/main/yang/ietf-interfaces@2014-05-08.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/models/microsemi/src/main/yang/ietf-system-microsemi@2016-05-05.yang b/models/microsemi/src/main/yang/ietf-system-microsemi@2016-05-05.yang
deleted file mode 100644
index b46cb7d..0000000
--- a/models/microsemi/src/main/yang/ietf-system-microsemi@2016-05-05.yang
+++ /dev/null
@@ -1,413 +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 platform 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)";
-                }
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/models/microsemi/src/main/yang/msea-cfm@2016-02-29.yang b/models/microsemi/src/main/yang/msea-cfm@2016-02-29.yang
deleted file mode 100644
index 1049008..0000000
--- a/models/microsemi/src/main/yang/msea-cfm@2016-02-29.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/models/microsemi/src/main/yang/msea-sa-filtering@2016-04-12.yang b/models/microsemi/src/main/yang/msea-sa-filtering@2016-04-12.yang
deleted file mode 100644
index 72534a9..0000000
--- a/models/microsemi/src/main/yang/msea-sa-filtering@2016-04-12.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/models/microsemi/src/main/yang/msea-soam-fm@2016-02-29.yang b/models/microsemi/src/main/yang/msea-soam-fm@2016-02-29.yang
deleted file mode 100644
index 35a95c9..0000000
--- a/models/microsemi/src/main/yang/msea-soam-fm@2016-02-29.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/models/microsemi/src/main/yang/msea-soam-pm@2016-02-29.yang b/models/microsemi/src/main/yang/msea-soam-pm@2016-02-29.yang
deleted file mode 100644
index 21c05a6..0000000
--- a/models/microsemi/src/main/yang/msea-soam-pm@2016-02-29.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/models/microsemi/src/main/yang/msea-types@2016-02-29.yang b/models/microsemi/src/main/yang/msea-types@2016-02-29.yang
deleted file mode 100644
index 8b05aac..0000000
--- a/models/microsemi/src/main/yang/msea-types@2016-02-29.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/models/microsemi/src/main/yang/msea-uni-evc-interface@2016-03-17.yang b/models/microsemi/src/main/yang/msea-uni-evc-interface@2016-03-17.yang
deleted file mode 100644
index c63acea..0000000
--- a/models/microsemi/src/main/yang/msea-uni-evc-interface@2016-03-17.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/models/microsemi/src/main/yang/msea-uni-evc-service@2016-03-17.yang b/models/microsemi/src/main/yang/msea-uni-evc-service@2016-03-17.yang
deleted file mode 100644
index 5075ffb..0000000
--- a/models/microsemi/src/main/yang/msea-uni-evc-service@2016-03-17.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/tools/build/bazel/modules.bzl b/tools/build/bazel/modules.bzl
index 9a5b1ef..cdf8f46 100644
--- a/tools/build/bazel/modules.bzl
+++ b/tools/build/bazel/modules.bzl
@@ -170,7 +170,6 @@
     "//drivers/lisp:onos-drivers-lisp-oar": [],
     "//drivers/lumentum:onos-drivers-lumentum-oar": [],
     "//drivers/mellanox:onos-drivers-mellanox-oar": ["stratum"],
-    "//drivers/microsemi/ea1000:onos-drivers-microsemi-ea1000-oar": [],
     "//drivers/netconf:onos-drivers-netconf-oar": [],
     "//drivers/odtn-driver:onos-drivers-odtn-driver-oar": [],
     "//drivers/oplink:onos-drivers-oplink-oar": [],
@@ -341,7 +340,6 @@
     "//models/openroadm:onos-models-openroadm-oar": [],
     "//models/tapi:onos-models-tapi-oar": [],
     "//models/l3vpn:onos-models-l3vpn-oar": [],
-    "//models/microsemi:onos-models-microsemi-oar": [],
     "//models/polatis:onos-models-polatis-oar": [],
     "//models/ciena/waveserverai:onos-models-ciena-waveserverai-oar": [],
 }